Tôi biết các ngôn ngữ lập trình hướng đối tượng dựa trên lớp và dựa trên protype, có bất kỳ lựa chọn thay thế nào khác không? Họ là ai?OOP: dựa trên lớp học và dựa trên nguyên mẫu, có các lựa chọn thay thế khác không?
Trả lời
Đây thực sự là hai cách tiếp cận chính đằng sau ngôn ngữ hướng đối tượng và tôi không biết nguyên tắc cơ bản hoàn toàn khác.
Nhưng có tồn tại rất nhiều các biến thể của cả hai phương pháp, cũng như rất nhiều ngôn ngữ lập trình khác xây dựng rằng đã khắc phục tái sử dụng/mở rộng trong cả hai ngôn ngữ dựa trên lớp hoặc dựa trên nguyên mẫu. Ví dụ: các đặc điểm: các đặc tính, mixin, các phương pháp mở rộng, một phần lớp, generics, khe hạng nhất, các đối tượng phân chia, vv Rất nhiều công trình như vậy được đề xuất đầu tiên trong các bài báo nghiên cứu (ECOOP, OOPSLA, POPL) và một vài trong số chúng trở thành chủ đạo trong các ngôn ngữ phổ biến. Nhưng tôi sẽ coi chúng là các biến thể và không phải là nguyên tắc cơ bản mới.
Lưu ý mặc dù bạn có thể bắt chước lập trình hướng đối tượng bằng các ngôn ngữ không hướng đối tượng per-se. Ví dụ: với Clojure multi-method. Lập trình hướng đối tượng và chức năng cũng đang dần hợp nhất, ví dụ như trong Scala.
EDIT
Nó thực sự khó khăn để tạo ra một danh sách các giấy tờ cổ điển/tinh, và tôi không giả vờ để có đủ kiến thức để làm như vậy. Nếu có một nơi nào đó, tôi sẽ rất quan tâm để xem nó :) Tuy nhiên, đây là một vài cái mà bạn có thể quan tâm.
Inheritance, đoàn đại biểu, subtyping:
- Genericity vs inheritance
- Inheritance Is Not Subtyping
- On the notion of inheritance
- Split objects: a disciplined use of delegation within objects
Module, thành phần, thích ứng
kết hợp cho phép bạn mở rộng một lớp có mã được xác định ở nơi khác, chẳng hạn như trong mô-đun.
Xem Ruby Mixin Tutorial để được giới thiệu.
thế nào là nó khác nhau từ lớp dựa OOP với đa kế thừa (thực hiện mà không có vấn đề kim cương)? –
Tôi đồng ý nó là rất giống nhau, tuy nhiên một mixin cho phép bạn tiêm mã từ một "tổ tiên" mà không ngụ ý một * là một mối quan hệ * cho hậu duệ. Hay nói cách khác, bạn có thể nghĩ nó như một giao diện có thể chứa mã. –
ah, tôi hiểu, một cái gì đó giống như thiết kế dựa trên plicy trong C + +, nơi bạn sẽ sử dụng các đặc điểm để soạn lớp mẫu ... nếu tôi hiểu nó đúng, điều này vi phạm nguyên tắc thay thế Liskov phải không? Hay mối quan hệ "mixedIn" hoàn toàn khác với thừa kế? –
Bạn có thể muốn kiểm tra bài viết trên Wikipedia về các mô hình lập trình. Người tôi đã làm việc với là lập trình hướng khía cạnh, đó là nơi mà các mixins đi vào.
Tôi đã đọc và không có thêm thông tin nào liên quan đến câu hỏi của tôi. –
Go có một khái niệm tương tự như lớp học, nhưng không có quyền thừa kế và có giao diện rất linh hoạt. Bạn có thể đọc thêm về nó trong Effective Go.
Hmm, điều này giúp tôi nhớ lại điều gì đó mà tôi đã nghe về OOP trong các ngôn ngữ chức năng. Có bất kỳ yêu cầu cho một chức năng thêm vào các loại giao diện/bahaviour? Nó có phải ở cùng một gói ít nhất không? –
- 1. Biểu mẫu chuyển hướng đến URL khác nhau dựa trên phần tử lựa chọn lựa chọn
- 2. Chọn lựa dựa trên NSOutlineview gradient
- 3. Hiển thị các trường dựa trên giá trị lựa chọn
- 4. Java bằng() và hashCode() dựa trên các trường khác nhau?
- 5. Các lựa chọn thay thế Linux cho Sequel Pro? (GUI dựa trên sql navigator)
- 6. javascript - thay đổi hành động biểu mẫu dựa trên lựa chọn?
- 7. AngularJs: Thêm lớp dựa trên Mẫu
- 8. Chọn một chuyên môn rõ ràng của một lớp học dựa trên loại có nguồn gốc
- 9. Thay đổi tùy chọn trong hộp chọn dựa trên các tùy chọn chọn khác nhau
- 10. Thêm/xóa lớp học với jquery dựa trên cuộn dọc?
- 11. Có thể tạo chuỗi mẫu dựa trên mẫu regex không?
- 12. Mysql cập nhật tất cả các hàng dựa trên lựa chọn từ một bảng khác
- 13. Làm thế nào để lựa chọn giữa 'window.URL.createObjectURL() `và` window.webkitURL.createObjectURL() `dựa trên trình duyệt
- 14. Bật/Tắt Input dựa trên lựa chọn (jQuery)
- 15. Có thay thế dựa trên Tác vụ cho System.Threading.Timer không?
- 16. jQuery thêm lớp học dựa trên URL trang
- 17. select_related() trong chế độ xem chung dựa trên lớp học
- 18. Bạn có nên tạo mẫu dựa trên enums không?
- 19. Biểu mẫu bảng tính của Google, điền các tùy chọn biểu mẫu dựa trên bảng tính
- 20. Thuật toán cho nhóm dựa trên tùy chọn
- 21. struts2: cập nhật lựa chọn thứ hai dựa trên giá trị lựa chọn đầu tiên sử dụng javascript và jquery
- 22. Chuyên mẫu C++ dựa trên sự hiện diện/vắng mặt của một thành viên lớp học?
- 23. Đặt một: hover dựa trên lớp
- 24. cột Lựa chọn trong khung R dữ liệu dựa trên những * không * trong một vector
- 25. Chuyên môn về mẫu dựa trên lớp kế thừa
- 26. Mô hình Django loại bỏ thuộc tính "bắt buộc" dựa trên lựa chọn trường khác
- 27. Entity Framework 5 - Enum dựa trên Discriminator cho các lớp học có nguồn gốc
- 28. tôi nên sử dụng (đối với các trang dựa trên python)? sass, la bàn, switchcss ... lựa chọn thay thế?
- 29. Django: các tham số dựa trên lớp tham số
- 30. CMS dựa trên Yii?
Hmm, tôi đoán bạn nói đúng, bạn có thể chỉ cho tôi trực tiếp một số tài liệu nghiên cứu có ảnh hưởng/tốt không? Tôi sẽ cung cấp cho bạn upvote thẳng cho một số liên kết ... Tôi nhận thức được một số công cụ chức năng như trong CLOS vv Tôi quan tâm đến nghe nhiều hơn, do đó tôi hỏi câu hỏi này :) –