Skip to main content

Mixin là gì?

Trong lập trình máy tính, mixin là một lớp được di truyền bởi một lớp khác nhưng không có nghĩa là được khởi tạo.Một lớp duy nhất có thể kế thừa nhiều mixin, vì vậy nhiều bộ sưu tập các chức năng có thể được hợp nhất dễ dàng.Mặc dù nhiều ngôn ngữ lập trình phổ biến sử dụng phương pháp mixin, nhưng có nhiều ngôn ngữ nữa không, bao gồm C ++ và Java.Nói chung, các bản mixin được tìm thấy trong các ngôn ngữ kịch bản hoặc các ngôn ngữ có khả năng tạo các tập lệnh, chẳng hạn như JavaScript và Perl. MIXIns là duy nhất ở chỗ chúng trở thành một phần của lớp con trong quá trình biên dịch.Phương pháp và hằng số của chúng được bao gồm trong lớp con.Một đặc điểm độc đáo khác của các lớp mixin là các phương thức có thể được xác định và ràng buộc với các đối tượng trong thời gian chạy.Hầu hết các ngôn ngữ sử dụng một phương pháp tiếp cận, ràng buộc và xác định khác nhau tại thời điểm biên dịch thay vì thời gian chạy.Liên kết thời gian chạy này cho phép các mixin rất linh hoạt. Một vấn đề phổ biến trong nhiều kế thừa là sự mơ hồ trong việc gọi phương pháp và mixin có thể giải quyết vấn đề này vì chúng không tuân theo chính xác các quy tắc giống như nhiều kế thừa.Ví dụ, nhiều kế thừa có thể tạo ra cái gọi là kim cương tử thần, trong đó lớp cha mẹ A có các lớp con B và C, và lớp D kế thừa từ cả hai lớp B và C. Vấn đề trong kịch bản này là các phương pháp có cùngTên trong các lớp A, B và C đều có thể được kế thừa thành lớp D, tạo ra nhiều phiên bản của cùng một phương thức mà không có sự khác biệt rõ ràng.Mixins giải quyết vấn đề này bằng cách giữ cho từng phiên bản của phương thức khác biệt, thay vì cố gắng ghi đè chúng như trong nhiều kế thừa tiêu chuẩn.

Mixin không ghi đè các phương thức trong các lớp mà chúng được thừa hưởng.Ví dụ, nếu một loại A xác định phương thức myMethod và kế thừa mixin B cũng xác định phương thức mymethod, thì cả hai phương pháp này vẫn có thể được gọi mà không có sự mơ hồ và việc thực hiện mymethod trong lớp A vẫn có thể truy cập hoàn toàn.Chính xác cách các phương pháp này được gọi là phụ thuộc vào ngôn ngữ mà mixin được triển khai. Một số ngôn ngữ lập trình không sử dụng mixin, như Java, sử dụng giao diện để bắt chước chúng.Các giao diện trong các ngôn ngữ này không mô phỏng toàn bộ chức năng của mixin, bởi vì các giao diện chỉ có thể chứa các hằng số và khai báo phương thức.Mixin, mặt khác, có thể chứa đầy đủ các phương thức.Những ngôn ngữ không hỗ trợ mixin thường có các lựa chọn thay thế khả thi có thể được dỗ dành để làm điều tương tự.