Có một lý thuyết / trừu tượng đằng sau OOP?


13

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


5
Tải và tải. Bạn đã thử Google chưa? Ví dụ, có một chuỗi hội thảo được gọi là FOOL dành cho Nền tảng của Ngôn ngữ hướng đối tượng hoạt động từ năm 1993. Điều đó chỉ làm trầy xước bề mặt.
Dave Clarke

@DaveClarke. Tôi không hoàn toàn đồng ý. Giải tích Lambda là một nền tảng để lập trình chức năng theo nghĩa rất chính xác. Chẳng hạn, báo cáo của Haskell nói rằng toàn bộ ngôn ngữ Haskell có thể được coi chỉ là đường cú pháp cho một ngôn ngữ cốt lõi tương đương với phép tính lambda đã gõ. Tôi không biết bất kỳ ngôn ngữ hướng đối tượng nào đưa ra yêu cầu tương tự đối với phép tính. Vì vậy, bạn đã đúng rằng có "tải". Nhưng không ai trong số đó là đúng.
Uday Reddy

@UdayReddy: Điều này có lẽ là do sự phong phú của ngôn ngữ hướng đối tượng.
Dave Clarke

1
@DaveClarke Sự phong phú của một chủ đề có thể có nghĩa là (1) đó là một từ thông dụng tốt, (2) chúng tôi không thực sự hiểu chủ đề đủ để xây dựng sự đồng thuận, (3) chúng tôi đang trộn lẫn một số vấn đề khá trực giao . Mặc dù tôi không theo sát các tài liệu (gần đây) về lập trình OO, tôi luôn có cảm giác rằng đó là vấn đề hỗn hợp mà không hiểu rõ về nó (tất nhiên điều này áp dụng nhiều cho ngôn ngữ hơn là công việc lý thuyết). Những vấn đề này bao gồm gõ, trừu tượng, trạng thái, song song, tái sử dụng mã. Một lý thuyết (một) không có khả năng giải thích cho tất cả các biến thể.
babou

Câu trả lời:


15

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:

  • thông qua lambdas và bản ghi: ý tưởng là mã hóa các đối tượng, lớp và phương thức theo các cấu trúc truyền thống hơn. Công việc của Benjamin Pierce từ giữa những năm 90 là đại diện cho phương pháp này.
  • Tính toán đối tượng của Abadi và Cardelli (xem cuốn sách A Theory of Object của Abadi và Cardelli : sự trừu tượng chính của họ là một bản ghi các phương thức, và cách tiếp cận gần hơn với việc thực hiện lập trình hướng đối tượng dựa trên nguyên mẫu, mặc dù các lớp và kế thừa có thể được mã hóa trong điều khoản của các yếu tố nguyên thủy hơn.
  • Phép tính đa phương thức của Castagna (xem cuốn sách Lập trình hướng đối tượng của Castagna Một nền tảng hợp nhất ): cách tiếp cận của ông lấy đa phương thức là sự trừu tượng hóa.
  • Các phép tính dựa trên lớp (chẳng hạn như trong cuốn sách của Kim Bruce Nền tảng của các ngôn ngữ hướng đối tượng: Các loại và ngữ nghĩa hoặc Feather weight Java ): các cách tiếp cận này nhằm mục đích nắm bắt bản chất của lập trình dựa trên lớp và tập trung vào các lớp và kế thừa.

11

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 đó

  • O là tập hợp các đối tượng ,
  • là quan hệ thành viên (đối tượng) , một sàng lọc của quan hệ thể hiện,
  • quan hệ thừa kế
  • .ecbản đồ lớp sức mạnh , là mối quan hệ phụ của.

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 , uv (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 xx.ɛϲ đượ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.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.

  1. Thừa kế, , là một trật tự một phần.
  2. Bản đồ lớp sức mạnh, .ec , là một thứ tự - nhúng (O,) vào chính nó.
  3. Các đối tượng từ T.ec là tối thiểu.
  4. Mỗi lớp sức mạnh là một hậu duệ của r .
  5. Tập r.ec * đã không thấp ràng buộc.
  6. Bản đồ đơn, .ɛϲ , là tiêm.
  7. Các đối tượng từ O.ɛϲ.ec là tối thiểu.
  8. Với mọi đối tượng x , y sao cho x.ɛϲ được xác định, x.ɛϲ ≤ y.ec x ≤ y .
  9. Với mọi đối tượng x , x.ɛϲ được xác định ↔ xd < .

Trong tiên đề cuối cùng, π là một giới hạn thứ tự cố định, và .dcấ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.ɛϲ đượ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.


@Raphael nhiều hơn - cảm ơn, paon!
David Richerby 17/03/2015
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.