Trong khi tôi đang học Haskell, tôi nhận thấy nó lớp kiểu , được cho là một phát minh tuyệt vời có nguồn gốc từ Haskell.
Tuy nhiên, trong trang Wikipedia về loại :
Lập trình viên định nghĩa một lớp kiểu bằng cách chỉ định một tập hợp các tên hàm hoặc hằng số, cùng với các kiểu tương ứng của chúng, phải tồn tại cho mọi kiểu thuộc lớp đó.
Điều này có vẻ khá gần với Giao diện của Java đối với tôi (trích dẫn trang Giao diện của Wikipedia (Java) ):
Giao diện trong ngôn ngữ lập trình Java là một kiểu trừu tượng được sử dụng để chỉ định một giao diện (theo nghĩa chung của thuật ngữ) mà các lớp phải thực thi.
Hai cái này trông khá giống nhau: lớp kiểu giới hạn hành vi của một kiểu, trong khi giao diện giới hạn hành vi của lớp.
Tôi tự hỏi sự khác biệt và giống nhau giữa lớp kiểu trong Haskell và giao diện trong Java, hoặc có thể chúng khác nhau về cơ bản?
CHỈNH SỬA: Tôi nhận thấy ngay cả haskell.org cũng thừa nhận rằng chúng tương tự nhau . Nếu chúng rất giống nhau (hoặc là chúng?), Thì tại sao type class lại bị cường điệu hóa như vậy?
CHỈNH SỬA THÊM: Chà, rất nhiều câu trả lời tuyệt vời! Tôi đoán tôi sẽ phải để cho cộng đồng quyết định cái nào là tốt nhất. Tuy nhiên, trong khi đọc câu trả lời, tất cả họ dường như chỉ nói rằng "có rất nhiều thứ mà typeclass có thể làm trong khi giao diện không thể hoặc phải đối phó với generic" . Tôi không thể không tự hỏi, có bất kỳ giao diện nào có thể làm trong khi kính xếp chữ không thể làm được không? Ngoài ra, tôi nhận thấy rằng Wikipedia tuyên bố rằng typeclass ban đầu được phát minh trong bài báo năm 1989 * "Làm thế nào để làm cho tính đa hình ad-hoc bớt đặc biệt hơn", trong khi Haskell vẫn còn trong cái nôi của nó, trong khi dự án Java được bắt đầu vào năm 1991 và phát hành lần đầu tiên vào năm 1995 Vì vậy, có thể thay vì typeclass tương tự như giao diện, ngược lại, các giao diện đó lại bị ảnh hưởng bởi typeclass? có tài liệu / giấy tờ nào ủng hộ hoặc bác bỏ điều này không? Cảm ơn vì tất cả các câu trả lời, tất cả đều rất khai sáng!
Cảm ơn tất cả các đầu vào!