Sự khác biệt giữa Mixin và Trait là gì?


8

Từ những gì tôi có thể nói từ Scala và Hack-

Hỗn hợp:

  • Có thể có trạng thái (ví dụ: thuộc tính thể hiện)
  • Chỉ có thể cung cấp phương pháp cụ thể
  • Có thể có các hàm tạo, được gọi theo cùng thứ tự mà các lớp của chúng được trộn lẫn trong
  • Nếu Atrộn trong BC, A instanceof B == falseA instanceof C == false

Đặc điểm:

  • Chỉ có thể cung cấp phương thức, không phải nhà nước
  • Có thể khai báo các phương thức trừu tượng, mà người tiêu dùng phải thực hiện
  • Không thể có nhà xây dựng
  • Nếu Athực hiện các đặc điểm BC, A instanceof B == falseA instanceof C == false

Điều này là chính xác hay tôi thiếu bất cứ điều gì? Các định nghĩa này có chính xác cho bất kỳ ngôn ngữ OO nào không hay chỉ cho các ngôn ngữ được đề cập ở trên?


Việc sử dụng các thuật ngữ bạn đang nói về là gì? Giấy tờ gốc? Luận án tiến sĩ Gilad Brachas?
Jörg W Mittag

Tôi tò mò những tính chất khác nhau của việc thực hiện các đặc điểm có. Cùng đi cho mixins. Các danh sách tôi đưa ra là những gì tôi tìm thấy trên 2 ngôn ngữ và tôi muốn xem liệu những danh sách đó có đúng với các ngôn ngữ khác không.
bcherny

3
Câu hỏi có vẻ thú vị và phù hợp, vì vậy tôi không thực sự hiểu các downvote. Tuy nhiên, từ ngữ có thể được cải thiện bằng cách tránh ấn tượng sai về tính chủ quan: từ nhận xét của bạn, hóa ra bạn không quan tâm đến "ngôn ngữ yêu thích" của chúng tôi nhưng muốn xem liệu các đặc tính này có chung với hỗn hợp & đặc điểm trên tất cả các ngôn ngữ hỗ trợ không chúng, hoặc nếu phát hiện của bạn chỉ đại diện cho quan điểm Scala về các khái niệm này.
Christophe

1
@Christophe: Câu hỏi như đã nêu trong câu hỏi là một câu hỏi về danh sách mua sắm chủ quan, và do đó lạc đề vì hai lý do. Câu hỏi như được nêu trong các ý kiến ​​là một câu hỏi về danh sách mua sắm, và do đó lạc đề.
Jörg W Mittag

1
@Christophe: Câu hỏi đặt ra danh sách những thứ không có chủ đề. Câu hỏi này yêu cầu một danh sách các ngôn ngữ có đặc điểm và mixin và một danh sách các thuộc tính mà những triển khai đó có. Đó là những gì Google dành cho. Nó đòi hỏi 0 chuyên môn kỹ thuật phần mềm.
Jörg W Mittag

Câu trả lời:


2

PHP không có khái niệm về mixin, tuy nhiên nó có những đặc điểm trông giống như sự pha trộn của các đặc điểm và mixin từ hack / scala:

  • Có thể định nghĩa thuộc tính.
  • Có thể định nghĩa các nhà xây dựng.
  • Có thể định nghĩa các phương thức trừu tượng.
  • Không hỗ trợ thừa kế.
  • Đặc điểm không phải là loại.

Các định nghĩa này có chính xác cho bất kỳ ngôn ngữ OO nào không hay chỉ cho các ngôn ngữ được đề cập ở trên?

Tôi không nghĩ rằng thậm chí có một thứ duy nhất sẽ hoạt động theo cùng một cách trong tất cả các ngôn ngữ OO. Ngay cả một số điều cơ bản như kế thừa và giao diện có một số biến thể, không đề cập đến các cấu trúc mờ hơn như đặc điểm / mixins.


0

Các đặc điểm là truy cập tĩnh trong PHP như được giải thích bởi Benjamin Eberlei trên blog của mình . Chúng tương tự như sao chép tự động của mã.

Điều này không có nghĩa là các đặc điểm là hoàn toàn xấu xa, nhưng chúng hầu hết thời gian áp đặt các vấn đề khớp nối.

Mixin nói chung là việc sử dụng thông thường (hơi an toàn) của nhiều kế thừa. Các ngôn ngữ có nhiều kiểu thừa kế và gõ phụ (vịt) như Python cung cấp các cách sử dụng tao nhã cho mixins.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.