Lập trình hàm có tính toán Lambda rất thanh lịch và các biến thể của nó như là một lý thuyết dự phòng. Có một điều như vậy cho OOP? Một sự trừu tượng cho mô hình hướng đối tượng là gì?
Lập trình hàm có tính toán Lambda rất thanh lịch và các biến thể của nó như là một lý thuyết dự phòng. Có một điều như vậy cho OOP? Một sự trừu tượng cho mô hình hướng đối tượng là gì?
Câu trả lời:
Có bốn cách tiếp cận chính, mặc dù những điều này chỉ làm trầy xước bề mặt của những gì có sẵn:
Kết nối giữa lõi mô hình đối tượng và lý thuyết tập hợp được mô tả trong các tài liệu sau:
Các tài liệu trình bày cấu trúc của quan hệ thể hiện và kế thừa giữa các đối tượng. Cấu trúc như vậy có thể được coi là sự trừu tượng hóa cao nhất có thể của OOP. Nó cho thấy cấu trúc áp dụng cho các ngôn ngữ lập trình cụ thể (Ruby, Python, Java, Scala, Smalltalk-80, Objective-C, CLOS, Perl, Dylan, JavaScript) và cả các ngôn ngữ bản thể học (RDF Schema và OWL 2 Full).
Trong các tài liệu, các lớp là các cách tiếp cận đối tượng được thực hiện sao cho cấu trúc lõi được sắp xếp đơn lẻ. Ở dạng chính, cấu trúc có thể được biểu thị dưới dạng (O, ϵ , ≤, .ec) trong đó
Một cấu trúc lõi mẫu theo mô hình đối tượng Ruby được hiển thị theo sơ đồ sau. Liên kết màu xanh lá cây cho thấy mối quan hệ thừa kế trong giảm phản xạ chuyển tiếp, liên kết màu xanh hiển thị mối quan hệ thành viên trong "giảm mức giảm" - một liên kết màu xanh từ x điểm đến vùng chứa ít nhất của x . Bản đồ lớp sức mạnh .ec được hình thành bởi các liên kết màu xanh nằm ngang. Các đối tượng từ hình ảnh của bản đồ này là các lớp sức mạnh (màu xám). Trong Ruby, chúng được gọi là eigenclass hoặc cũng là các lớp singleton (thuật ngữ sau này không được dùng nữa). Các đối tượng s , u và v (màu hồng) là thiết bị đầu cuối, các đối tượng còn lại là hậu duệ của gốc thừa kế r .
r = BasicObject; c = Class; A = c.new(r); B = c.new(A); s = A.new; u = B.new; v = B.new; class << s; end; class << v; end
Các phần cốt lõi của mô hình đối tượng của tất cả các ngôn ngữ trên có thể được coi là các chuyên ngành của cấu trúc, không có hoặc chỉ có một vài thành phần bổ sung. Từ quan điểm lý thuyết, trường hợp quan trọng nhất của một thành phần bổ sung là bản đồ đơn (ký hiệu .ɛϲ ) được giới thiệu bởi Dylan. Điều này làm cho Dylan trở thành ngôn ngữ lập trình duy nhất (từ các đề cập ở trên) không phải tuân theo điều kiện đơn điệu (≤) ○ (ϵ) ⊆ (ϵ) trong đó ký hiệu thành phần ○ được hiểu từ trái sang phải.
Một cách để chính thức hóa kết nối giữa lõi mô hình đối tượng và lý thuyết tập hợp là thông qua họ cấu trúc (O,, r, .ec, .ɛϲ) được gọi là cấu trúc metaobject trong các tài liệu được tham chiếu vì x.ec hoặc x.ɛϲ có thể được xem xét như metaobjects của x . Trong các cấu trúc này, x.ec được xác định cho mọi đối tượng x và x.ɛϲ được xác định cho mọi đối tượng giới hạn ("nhỏ") x . Các cấu trúc phải tuân theo chín tiên đề dưới đây. Phép tiên đề sử dụng một phần mở rộng xác định khá đơn giản cho tám tiên đề đầu tiên ( Tbiểu thị tập hợp các đối tượng đầu cuối - những đối tượng không phải là hậu duệ của r và .ec ∗ là đóng cửa chuyển tiếp phản xạ của .ec ) nhưng liên quan đến tiên đề cuối cùng.
Trong tiên đề cuối cùng, π là một giới hạn thứ tự cố định, và .d là cấp bậc chức năng có nguồn gốc bởi phần mở rộng định nghĩa. Quan hệ thành viên đối tượng, ϵ, được lấy là (( .ɛϲ ) ∪ ( .ec )) ○ (≤). Theo tiên đề cuối cùng, giới hạn miền của ϵ đối với tập hợp các đối tượng giới hạn bằng ( .ɛϲ ) (≤). Trong các tài liệu được tham chiếu, mối quan hệ này được gọi là thành viên bị ràng buộc và ký hiệu là. Là một đặc điểm quan trọng, mối quan hệ này là có cơ sở. Điều này trái ngược với ε là không tốt được thành lập từ năm r ε r. Nó chỉ ra rằng sự tương ứng chính giữa (phần cốt lõi của) công nghệ đối tượng và lý thuyết tập hợp có thể được biểu thị như
↔ ∈
tức là thành viên bị ràng buộc tương ứng để thiết lập tư cách thành viên giữa các bộ được thành lập tốt. Trong trường hợp đặc biệt, vũ trụ von Neumann một phần có thứ hạng ϖ + 1 là cấu trúc metaobject bằng cách mở rộng xác định. Nói chung, mỗi trừu tượng ( π + 1 ) - kiến trúc thượng tầng (O, ε ) là definitionally tương đương với một hoàn chỉnh cấu trúc metaobject. Mọi cấu trúc metaobject có thể được nhúng một cách trung thực vào một cấu trúc metaobject hoàn chỉnh, từ đó có thể được nhúng một cách trung thực vào vũ trụ von Neumann.
Thuật ngữ cấu trúc cơ bản được sử dụng để khái quát các cấu trúc metaobject. Trong khái quát này, .ec và .ɛϲ được phép (tùy ý) một phần, có thể trống. Cụ thể, các cấu trúc cơ bản hữu hạn là có thể, với cấu trúc tối thiểu chỉ chứa gốc r thừa kế . Mọi cấu trúc cơ bản có thể được mở rộng thành cấu trúc metaobject bằng cách hoàn thành lớp sức mạnh và tiếp theo là hoàn thành đơn lẻ, từ đó làm cho các cấu trúc cơ bản có thể nhúng vào vũ trụ von Neumann.