Có ngôn ngữ lập trình hướng đối tượng nào không dựa trên mô hình lớp không?
Có ngôn ngữ lập trình hướng đối tượng nào không dựa trên mô hình lớp không?
Câu trả lời:
Theo như tôi biết, Tự là ngôn ngữ gốc đã phát minh ra mô hình "không có lớp học" dựa trên các nguyên mẫu . Nó đã tồn tại (trong giai đoạn thử nghiệm) vào những năm 1980 và đẩy việc sử dụng kiểu mẫu thanh lịch của Smalltalk đến mức cực đoan, sao cho các lớp bị loại bỏ hoàn toàn.
Nó ảnh hưởng đến tất cả các ngôn ngữ OO "không có lớp" khác mà tôi biết:
Các ngôn ngữ như JavaScript dựa trên các nguyên mẫu , trong đó hành vi được sử dụng lại bằng cách nhân bản các đối tượng hiện có. Bài viết Wikipedia mà tôi liên kết để chỉ ra rằng Lua, ActionScript và một số ngôn ngữ khác tuân theo mô hình này.
Ngôn ngữ lập trình hướng đối tượng phổ biến nhất trên thế giới không có các lớp, nó được gọi là Javascript và là nguyên mẫu dựa trên: http://en.wikipedia.org/wiki/Prototype-basing_programming
Hướng đối tượng là một thuật ngữ ô cho một số khái niệm quan trọng chỉ phụ thuộc một phần vào nhau. Ví dụ, thừa kế có thể được khai báo trên cơ sở từng trường hợp giữa các trường hợp chứ không phải giữa các lớp hoặc toàn bộ lớp có thể được biểu diễn bằng một prototype
đối tượng cụ thể, như Thomas đã viết. Nó chỉ bình thường hơn để tách mô tả cấu trúc khỏi việc tạo cá thể. Tương tự, ràng buộc muộn có nghĩa là các đối tượng với cùng một phương thức không nhất thiết phải làm điều tương tự khi nó được gọi và quyết định được đưa ra khi chạy. Điều đó cũng tương tự như vậy với cách tiếp cận dựa trên nguyên mẫu. Và đóng gói về cơ bản là hoàn toàn độc lập với việc các đối tượng của bạn có phải là các thể hiện của các lớp được khai báo hay không.
Điều đó nói rằng, hầu hết các ngôn ngữ OO đều nằm trong trại dựa trên lớp. Nhưng ngay cả sau đó cũng có những thành ngữ làm mờ dòng: thiết kế hướng miền thường dẫn đến các hệ thống trong đó nhận dạng của các đối tượng cụ thể quan trọng hơn nhiều so với sơ đồ lớp tĩnh và các trình trang trí cho phép các đối tượng cùng lớp hoặc giao diện có hành vi khác nhau.
Pháo đài là một ngôn ngữ hướng đối tượng dựa trên các đặc điểm thay vì các lớp. Sự khác biệt chủ yếu là trong thành phần thực hiện. Hành vi của một đối tượng (định nghĩa phương thức) vẫn được xác định bởi các khai báo tại một điểm cụ thể trong văn bản chương trình. Vì vậy, theo nghĩa đó, nó tương tự như các hệ thống dựa trên lớp.
Có những tính toán đối tượng (theo Cardelli, tôi nghĩ vậy), hoàn toàn dựa trên đối tượng. Mỗi phương thức là một thành viên thể hiện. Bạn hình thành các đối tượng mới bằng cách lấy nội dung của một đối tượng hiện có và thêm, xóa hoặc thay thế một số thành viên của nó. Nó hơi khác so với các nguyên mẫu, vì đối tượng mới không có liên kết đến đối tượng cũ, chỉ là một số nội dung của nó.
IIRC, có thể lập trình theo cách tương tự bằng Python và các ngôn ngữ hướng băm khác: bạn có thể thêm một hàm làm thành viên thể hiện và sau đó gọi nó là phương thức.
Ada, kể từ phiên bản năm 1995, Ada hướng đối tượng, nhưng không giống như nhiều ngôn ngữ OO khác, nó không kết hợp các loại và mô-đun hướng đối tượng thành một cấu trúc gọi là "lớp". Thay vì khai báo một loại là "lớp Foo" và đặt tất cả các khai báo phương thức liên quan bên trong khai báo lớp, bạn khai báo một gói và khai báo loại (dưới dạng a record
) và các thứ khác trong gói. Nó không "không có lớp" theo cách mà một số ngôn ngữ được đề cập khác, đó chỉ là một cách tổ chức mọi thứ hơi khác.
Các tính năng hướng đối tượng của Ada 95 đã được thêm vào phiên bản ngôn ngữ 1983 hiện có; nó đã mở rộng các bản ghi hiện tại và các cấu trúc gói để hỗ trợ kế thừa et al.
Io là một ngôn ngữ hướng đối tượng dựa trên nguyên mẫu khác. Nó thực sự lấy cảm hứng từ một số ngôn ngữ đã được đề cập trong các câu trả lời khác.
Io là một ngôn ngữ lập trình dựa trên nguyên mẫu động. Các ý tưởng trong Io hầu hết được lấy cảm hứng từ Smalltalk (tất cả các giá trị là các đối tượng), Tự (dựa trên nguyên mẫu), NewtonScript (kế thừa khác biệt), Act1 (diễn viên và tương lai cho đồng thời), Lisp (mã là cây có thể kiểm tra / sửa đổi thời gian chạy) và Lua (nhỏ, có thể nhúng).
Erlang. Và vâng, Erlang là một ngôn ngữ hướng đối tượng, vì nó đáp ứng cả ba điểm của định nghĩa về OO.