Tôi nghĩ rằng lợi thế của các hệ thống kiểu cấu trúc là chúng khuyến khích bạn tạo các giao diện chi tiết theo hướng mà người dùng giao diện cần, thay vì những gì người triển khai cung cấp.
Trong hệ thống kiểu đề cử, bạn cần một sự phụ thuộc chung trên giao diện. Trong một hệ thống kiểu cấu trúc mà yêu cầu được loại bỏ: bạn có thể xây dựng một hệ thống ghép đôi lỏng lẻo mà không cần phải tạo ra thư viện chung mà bạn đặt tất cả các giao diện. Mỗi khách hàng có thể độc lập khai báo giao diện mà nó mong đợi từ một cộng tác viên.
Điểm bất lợi của hệ thống kiểu cấu trúc là chúng khớp với các lớp để giao diện có thể không thực sự thực hiện đúng hợp đồng. Ví dụ: nếu bạn có giao diện này:
public interface IBananaProvider
{
/// Returns a banana, never null.
Banana GetBanana();
}
thì lớp sau sẽ được xem xét để triển khai IBananaProvider
trong hệ thống kiểu cấu trúc. Tuy nhiên, lớp vi phạm điều kiện bài đăng mà chuối đã trả lại không bao giờ là rỗng:
public class SomeBananaProvider
{
// returns a banana or null if we're all out
public Banana GetBanana()
{
if (bananas.Count > 0)
{
return bananas.RemoveLast();
}
else
{
return null;
}
}
}
Điều này có thể được khắc phục nếu hợp đồng được quy định một cách chính thức và được coi là một phần của cấu trúc kiểu. Tôi nghĩ mọi thứ đang chuyển động theo hướng đó, ví dụ: System.Diagnostics.Contracts trong .NET 4.0.
Nguồn
2010-03-01 11:38:48
Liên kết Wikipedia: http://en.wikipedia.org/wiki/Structural_type_system http://en.wikipedia.org/wiki/Nominative_type_system –
Điều này cho tôi biết chúng là gì. Tôi đã biết điều này, là một người sử dụng, tốt, rất nhiều ngôn ngữ sử dụng các biến thể của cả hai loại. Những trang đó không cho tôi biết những gì các đối số được sử dụng để hỗ trợ mỗi bên và xé xuống phía bên kia. –
Vâng, tôi chỉ cung cấp liên kết vì lợi ích của những người đọc không biết câu hỏi là gì. Có lẽ tôi nên thay đổi câu hỏi. –