phép nói rằng chúng tôi có điều này các lớp học thực sự tầm thường:Liskov thay nguyên tắc - phương pháp trọng dụ
class A
{
virtual int Function(int number)
{
return number;
}
}
class B : A
{
override int Function(int number)
{
return number + 1;
}
}
class UseExample
{
void Foo(A obj)
{
A.Function(1);
}
}
Sẽ là ví dụ này vi phạm các LSP ?. Nếu vậy, bạn có thể cho tôi một ví dụ không phá vỡ nguyên tắc và sử dụng một triển khai khác không?
gì về điều này một:
class B : A
{
int variable;
override int Function(int number)
{
return number + variable;
}
}
Theo như tôi hiểu việc sử dụng các biến "biến" gây ra một điều kiện tiên quyết mạnh mẽ hơn và do đó nó vi phạm các LSP. Nhưng tôi không hoàn toàn chắc chắn làm thế nào để làm theo LSP khi sử dụng Đa hình.
chức năng của bạn không có hợp đồng trong đó đặt tên hoặc triển vọng nào, việc thực hiện trả về một giá trị tùy ý do đó hoàn toàn có thể chấp nhận được. Bạn sẽ nhận được trong một vùng màu xám tuy nhiên nếu bạn chỉ định một hợp đồng trong tên của hàm, như: int Add1ToArgument (int argument) {...} – Polity
Chính trị, ngụ ý ngữ nghĩa từ đặt tên phương thức không thực sự đi vào nó. Đó là từ định nghĩa kiểu. –
Nếu ngữ nghĩa không liên quan gì đến nguyên tắc, bạn có thể giải thích cho tôi ví dụ về hình chữ nhật/hình vuông không ?. Thị trưởng phàn nàn về điều này mà tôi đã tìm thấy cho đến nay là nếu bạn sử dụng một hình chữ nhật obj = new Square() và gán chiều cao một chiều rộng mà không có kiến thức trước đó rằng đối tượng là một Square, bạn sẽ nhận được một kết quả bất ngờ của hàm getArea() chỉ vì bạn nghĩ rằng một hình chữ nhật có 2 giá trị khác nhau cho Chiều cao và Chiều rộng. Cảm ơn trước – BizTuk