Ngày: Thứ Tư, ngày 23 tháng 7 năm 2003 09:33:31 -0800 Tới: Stefan Ram [bị xóa vì quyền riêng tư] Từ: Alan Kay [bị xóa vì quyền riêng tư] Chủ đề: Re: Làm rõ về "hướng đối tượng"
Xin chào Stefan -
Xin lỗi vì sự chậm trễ nhưng tôi đã đi nghỉ.
Vào 6:27 PM +0200 7/17/03, Stefan Ram đã viết:
Kính gửi bác sĩ Kay
Tôi muốn có một số từ có thẩm quyền về thuật ngữ "lập trình hướng đối tượng" cho trang hướng dẫn của tôi về chủ đề này. Hai nguồn duy nhất tôi coi là "có thẩm quyền" là Tổ chức Tiêu chuẩn Quốc tế, định nghĩa "hướng đối tượng" trong "ISO / IEC 2382-15", và, như họ nói, bạn đã đặt ra thuật ngữ đó.
Tôi khá chắc chắn rằng tôi đã làm.
Thật không may, thật khó để tìm thấy một trang web hoặc nguồn với định nghĩa hoặc mô tả của bạn về thuật ngữ đó. Có một số báo cáo về những gì bạn có thể đã nói về vấn đề này (như "kế thừa, đa hình và đóng gói"), nhưng đây không phải là nguồn đầu tay. Tôi cũng nhận thức được rằng sau này bạn chú trọng hơn vào "nhắn tin" - nhưng tôi vẫn muốn biết về "hướng đối tượng".
Đối với các hồ sơ, trang hướng dẫn của tôi, và phân phối và xuất bản thêm có thể bạn vui lòng giải thích:
Khi nào và ở đâu thuật ngữ "hướng đối tượng" được sử dụng đầu tiên?
Tại Utah, sau khoảng 66 tháng 11, khi chịu ảnh hưởng của Sketchpad, Simula, thiết kế cho ARPAnet, Burroughs B5000 và nền tảng của tôi về Sinh học và Toán học, tôi đã nghĩ đến một kiến trúc để lập trình. Có lẽ là vào năm 1967 khi ai đó hỏi tôi đang làm gì và tôi nói: "Đó là lập trình hướng đối tượng".
Các quan niệm ban đầu của nó có các phần sau đây.
Tôi nghĩ rằng các đối tượng giống như các tế bào sinh học và / hoặc các máy tính cá nhân trên mạng, chỉ có thể giao tiếp với các tin nhắn (vì vậy việc nhắn tin xuất hiện ngay từ đầu - phải mất một thời gian để xem cách nhắn tin bằng ngôn ngữ lập trình đủ hiệu quả để có ích).
Tôi muốn thoát khỏi dữ liệu. B5000 gần như đã làm điều này thông qua kiến trúc CTNH gần như không thể tin được của nó. Tôi nhận ra rằng phép ẩn dụ của tế bào / toàn máy tính sẽ loại bỏ dữ liệu và "<-" sẽ chỉ là một mã thông báo khác (tôi mất khá nhiều thời gian để nghĩ ra điều này bởi vì tôi thực sự nghĩ tất cả các biểu tượng này là tên cho chức năng và thủ tục.
Nền tảng toán học của tôi khiến tôi nhận ra rằng mỗi đối tượng có thể có một vài đại số liên quan đến nó, và có thể có những gia đình trong số đó, và những điều này sẽ rất hữu ích. Thuật ngữ "đa hình" được áp đặt muộn hơn nhiều (tôi nghĩ bởi Peter Wegner) và nó không hoàn toàn hợp lệ, vì nó thực sự xuất phát từ danh pháp của các hàm và tôi muốn nhiều hơn một chút so với các hàm. Tôi đã tạo ra một thuật ngữ "tính tổng quát" để xử lý các hành vi chung dưới dạng đại số.
Tôi không thích cách Simula I hay Simula 67 thực hiện kế thừa (mặc dù tôi nghĩ Nygaard và Dahl chỉ là những nhà tư tưởng và nhà thiết kế vĩ đại). Vì vậy, tôi quyết định loại bỏ tính kế thừa như một tính năng tích hợp cho đến khi tôi hiểu rõ hơn về nó.
Các thí nghiệm ban đầu của tôi với kiến trúc này đã được thực hiện bằng mô hình tôi chuyển thể từ "Generalization of Algol" của W Wi và Wirth's Euler. Cả hai đều khá giống LISP nhưng với cú pháp dễ đọc hơn. Lúc đó tôi không hiểu ý tưởng LISP quái vật về ngôn ngữ kim loại hữu hình, nhưng đã gần gũi với những ý tưởng về các ngôn ngữ có thể mở rộng được rút ra từ nhiều nguồn khác nhau, bao gồm cả Irons 'IMP.
Giai đoạn thứ hai của điều này cuối cùng là hiểu LISP và sau đó sử dụng sự hiểu biết này để làm cho đẹp hơn và nhỏ hơn, mạnh mẽ hơn và các cấu trúc ràng buộc muộn hơn. Luận án của Dave Fisher được thực hiện theo phong cách "McCarthy" và ý tưởng của ông về các cấu trúc điều khiển mở rộng rất hữu ích. Một ảnh hưởng lớn khác tại thời điểm này là PLANNER của Carl Hewitt (người chưa bao giờ nhận được sự công nhận xứng đáng, được đưa ra như thế nào và sớm như thế nào nó có thể dự đoán Prolog).
Smalltalk ban đầu tại Xerox PARC ra đời ở trên. Các Smalltalk tiếp theo bị phàn nàn về phần cuối của chương Lịch sử: chúng quay ngược về phía Simula và không thay thế các cơ chế mở rộng bằng các cơ chế an toàn hơn ở bất kỳ đâu gần như hữu ích.
"Lập trình hướng đối tượng" có nghĩa gì với bạn? (Không cần giới thiệu giống như hướng dẫn, chỉ cần một lời giải thích ngắn gọn [như "lập trình với tính kế thừa, đa hình và đóng gói"] theo các khái niệm khác cho người đọc quen thuộc với chúng, nếu có thể. ", bởi vì tôi đã có nguồn với lời giải thích của bạn về" đối tượng "từ" Lịch sử ban đầu của Smalltalk ".)
(Tôi không chống lại các loại, nhưng tôi không biết bất kỳ hệ thống loại nào không phải là một nỗi đau hoàn toàn, vì vậy tôi vẫn thích gõ động.)
OOP với tôi có nghĩa là chỉ nhắn tin, duy trì và bảo vệ cục bộ và che giấu quá trình nhà nước, và cực kỳ ràng buộc tất cả mọi thứ. Nó có thể được thực hiện trong Smalltalk và trong LISP. Có thể có các hệ thống khác trong đó điều này là có thể, nhưng tôi không biết về chúng.
[Ngoài ra,] Một trong những điều tôi nên đề cập là có hai con đường chính được Simula xúc tác. Đầu tiên (chỉ là tình cờ) là tuyến thủ tục phi dữ liệu sinh học / mạng mà tôi đã thực hiện. Một cái khác, xuất hiện muộn hơn một chút vì một đối tượng nghiên cứu là các kiểu dữ liệu trừu tượng, và điều này đã được chơi nhiều hơn.
Nếu chúng ta nhìn vào toàn bộ lịch sử, chúng ta sẽ thấy rằng công cụ proto-OOP bắt đầu bằng ADT, có một ngã ba nhỏ hướng tới cái mà tôi gọi là "đối tượng" - dẫn đến Smalltalk, v.v. - nhưng sau cái nĩa nhỏ, Cơ sở CS đã thực hiện khá nhiều ADT và muốn gắn bó với mô hình thủ tục dữ liệu. Về mặt lịch sử, đáng để xem xét hệ thống tệp 220 của USAF (mà tôi đã mô tả trong lịch sử Smalltalk), công trình đầu tiên của Doug Ross tại MIT (AED và trước đó), trong đó ông ủng hộ việc nhúng các con trỏ thủ tục vào cấu trúc dữ liệu, Sketchpad (đã có tính đa hình đầy đủ - trong đó, ví dụ, phần bù tương tự trong cấu trúc dữ liệu của nó có nghĩa là "hiển thị" và sẽ có một con trỏ tới thói quen thích hợp cho loại đối tượng mà cấu trúc đại diện, v.v., và B5000 của Burroughs, có các bảng tham chiếu chương trình là "đối tượng lớn" thực sự và chứa các con trỏ tới cả "dữ liệu" và "thủ tục" nhưng thường có thể thực hiện đúng nếu nó đang cố gắng theo dõi dữ liệu và tìm thấy một con trỏ thủ tục. Và vấn đề đầu tiên tôi đã giải quyết với công cụ Utah đầu tiên của mình là "biến mất dữ liệu" chỉ sử dụng các phương thức và đối tượng. Vào cuối thập niên 60 (tôi nghĩ) Bob Balzer đã viết một bài báo khá hay gọi là "Lập trình dữ liệu", và ngay sau đó John Reynold đã viết một bài báo không kém phần "Gedanken" (vào năm 1970 tôi nghĩ) trong đó ông đã cho thấy rằng sử dụng lamda diễn đạt đúng cách sẽ cho phép dữ liệu được trừu tượng hóa bằng các thủ tục. nhưng thường có thể làm điều đúng nếu nó đang cố gắng theo dõi dữ liệu và tìm thấy một con trỏ thủ tục. Và vấn đề đầu tiên tôi đã giải quyết với công cụ Utah đầu tiên của mình là "biến mất dữ liệu" chỉ sử dụng các phương thức và đối tượng. Vào cuối thập niên 60 (tôi nghĩ) Bob Balzer đã viết một bài báo khá hay gọi là "Lập trình dữ liệu", và ngay sau đó John Reynold đã viết một bài báo không kém phần "Gedanken" (vào năm 1970 tôi nghĩ) trong đó ông đã cho thấy rằng sử dụng lamda diễn đạt đúng cách sẽ cho phép dữ liệu được trừu tượng hóa bằng các thủ tục. nhưng thường có thể làm điều đúng nếu nó đang cố gắng theo dõi dữ liệu và tìm thấy một con trỏ thủ tục. Và vấn đề đầu tiên tôi đã giải quyết với công cụ Utah đầu tiên của mình là "biến mất dữ liệu" chỉ sử dụng các phương thức và đối tượng. Vào cuối thập niên 60 (tôi nghĩ) Bob Balzer đã viết một bài báo khá hay gọi là "Lập trình dữ liệu", và ngay sau đó John Reynold đã viết một bài báo không kém phần "Gedanken" (vào năm 1970 tôi nghĩ) trong đó ông đã cho thấy rằng sử dụng lamda diễn đạt đúng cách sẽ cho phép dữ liệu được trừu tượng hóa bằng các thủ tục.
Những người thích các đối tượng không phải là dữ liệu có số lượng nhỏ hơn và bao gồm cả tôi, Carl Hewitt, Dave Reed và một vài người khác - gần như tất cả nhóm này đến từ cộng đồng ARPA và tham gia theo cách này hay cách khác với thiết kế ARPAnet → Internet trong đó đơn vị tính toán cơ bản là toàn bộ máy tính. Nhưng chỉ để cho thấy một ý tưởng có thể bướng bỉnh đến mức nào, suốt những năm bảy mươi và tám mươi, đã có nhiều người cố gắng thực hiện bằng "Cuộc gọi thủ tục từ xa" thay vì nghĩ về các đối tượng và tin nhắn. Sic quá cảnh gloria mundi.
Chúc mừng
Alan Kay