2010-08-07 43 views
21

Tin nhắn là một phần cơ bản của Erlang. Alan Kay có argued rằng việc truyền thông điệp là một khái niệm quan trọng hơn các đối tượng trong quan điểm của anh về lập trình hướng đối tượng (và anh ta "đã phát minh ra" thuật ngữ!).Có phải Erlang hướng đối tượng không?

Erlang có thể được coi là ngôn ngữ lập trình hướng đối tượng (à la Smalltalk) không?

Trả lời

6

Tôi nghĩ rằng ở cấp cao hơn, Erlang là hướng đối tượng cho rằng bạn tin vào các khái niệm ban đầu được thảo luận xung quanh thuật ngữ. Bởi điều này tôi có nghĩa là cô lập, thông điệp đi qua, đa hình.

Quy trình của Erlang có thể giữ trạng thái, thực hiện các thao tác trên trạng thái đó và chúng được phân lập từ các quy trình khác vì chúng không thể tác động trực tiếp lẫn nhau. Vì bất kỳ quá trình nào cũng có thể nhận được bất kỳ thông báo nào (và một thông điệp có thể dễ dàng được ủy nhiệm cho một quy trình khác có thể gửi trả lời cho người gửi ban đầu), tôi tin rằng nó cũng đáp ứng tính đa hình. Chắc chắn Erlang ở mức thấp hơn cho thấy các khía cạnh chức năng của nó nhưng một lần nữa tôi nghĩ ở cấp độ cao hơn (nơi bạn đang truyền và điều phối thông điệp giữa các tiến trình) Erlang hoạt động theo cách hướng đối tượng. Bạn chỉ có thể không bị bắt lên suy nghĩ hướng đối tượng là tất cả về các lớp học, thừa kế, và gọi phương thức (mà là khác nhau từ thông điệp đi qua). Đó chỉ là cách mà mô hình đã được cung cấp cho chúng ta trong hầu hết các ngôn ngữ chính thống.

17

Trích dẫn từ Wikipedia mà trích dẫn từ here:

Benjamin CuireKhách Pierce và một số nhà nghiên cứu khác xem như vô ích bất kỳ nỗ lực để chưng cất OOP đến một tập tối thiểu các tính năng.

Nhưng nhìn vào cố gắng vô ích riêng của họ:

  • động văn - nếu bạn đối xử với một quá trình Erlang là một đối tượng, sau đó có, nó được hỗ trợ.
  • Đóng gói - nếu bạn xử lý việc gửi/trả lời thư dưới dạng cuộc gọi phương thức, nó được hỗ trợ.
  • Loại con polymorphism - loại - nếu bạn căng định nghĩa về hành vi đủ, nó được hỗ trợ
  • đối tượng thừa kế (hoặc đoàn) - mà không có bất kỳ kiểm tra tính đúng đắn, bạn có thể thay thế một đối tượng cho người khác - vì vậy chúng ta hãy nói nó là ok
  • Mở đệ quy - được hỗ trợ (gửi tới quy trình riêng)

Vì vậy, có - với một số khói và nhấp nháy, bạn có thể thử tuyên bố rằng Erlang là hướng đối tượng. Nhưng tôi có thể sử dụng các thủ thuật tương tự để trình bày C như một ngôn ngữ OO, bởi vì bạn có thể sử dụng phong cách OO trong nó và thực hiện vtables theo cách thủ công.

Câu trả lời của bất kỳ người sane nào nhìn vào Erlang có thể sẽ là "không" Erlang là ngôn ngữ định hướng thông điệp chức năng/thông điệp.

Câu trả lời khác có thể là "tại sao phải phân loại"/"ai cần biết"?

+3

ông X không rõ ràng nói về OO cách Alan Kay nghĩa thuật ngữ, mà là khá ít lông tơ rằng những gì "OO" có nghĩa là ngày hôm nay. Rõ ràng C là _not_ OO theo nghĩa Kay, vì ngôn ngữ không có khái niệm truyền thông điệp. (Và tin nhắn đi qua không phải là lời kêu gọi phương pháp!) –

28

Joe Armstrong có gone on record nói rằng Erlang là "có thể là chỉ ngôn ngữ hướng đối tượng" (ngữ cảnh thêm "OO trong ý nghĩa Alan Kay của từ").Johnson, trong cùng một cuộc phỏng vấn, chỉ ra những điều tương tự mà Sean Copenhaver nói trong câu trả lời của mình: trong nhỏ, Erlang là một ngôn ngữ thuần túy chức năng; trong quy mô lớn, với các quy trình, nó trông giống hệt như định hướng đối tượng kiểu Kay.

+1

Ah dang, tôi hoàn toàn quên mất cuộc phỏng vấn đó. 1 để đặt nó vào đó. InfoQ có một cặp vợ chồng với Joe Armstrong và rất thú vị khi nghe anh ấy nói về cách Erlangers thấy mọi thứ. –

+0

Trích dẫn là: "Tôi không hoàn toàn chắc chắn nếu tôi tin điều này hay không, nhưng erlang có thể là ngôn ngữ hướng đối tượng duy nhất." –

6

Joe Armstrong đã xuất bản một bài đăng trong blog của mình về OO và đã trả lời câu hỏi này.

Như Erlang trở nên phổ biến chúng ta thường hỏi "Có phải Erlang OO" - thì nhiên câu trả lời đúng là "Không dĩ nhiên không" - nhưng chúng tôi đã không nói này out loud - vì vậy chúng tôi phát minh ra một cách nghiêm túc về cách khéo léo của trả lời câu hỏi được thiết kế để tạo ấn tượng rằng Erlang là (loại) OO (Nếu bạn vẫy tay nhiều) nhưng không thực sự (Nếu bạn nghe những gì chúng tôi thực sự nói, và đọc bản in nhỏ cẩn thận).

Bằng cách này, bài viết là một nhà phê bình rất thú vị để OO: http://harmful.cat-v.org/software/OO_programming/why_oo_sucks

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