2010-04-30 32 views

Trả lời

1

Đâ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:

Module, thành phần, thích ứng

+0

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 :) –

2

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.

+2

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)? –

+1

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ã. –

+0

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ế? –

0

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.

http://en.wikipedia.org/wiki/Programming_paradigm

+0

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. –

1

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.

+0

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? –

Các vấn đề liên quan