Họ đã gọi Lập trình hướng đối tượng là gì trước khi Alan Kay phát minh ra thuật ngữ này?


22

Alan Kay tuyên bố rằng "Tôi đã tạo ra thuật ngữ" hướng đối tượng "và tôi có thể nói với bạn rằng tôi không có C ++ trong tâm trí." Tất nhiên, thứ anh có trong đầu là Smalltalk. Nhưng anh ta đã không tạo nên chương trình hướng đối tượng; ông đã có được những ý tưởng cơ bản từ Simula. Vậy nếu thuật ngữ này chưa được phát minh, ban đầu họ gọi chương trình hướng đối tượng trong Simula là gì?

Câu trả lời:


39

Thật ra Alan Kay không có Smalltalk trong đầu khi anh nghĩ ra thuật ngữ "lập trình hướng đối tượng":

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

Smalltalk là kết quả của quan niệm này, mượn và mở rộng các khái niệm về "đối tượng" và "giai cấp" từ Simula, mà Simula lần lượt được thừa hưởng từ ALGOL, như được mô tả về "Sự phát triển của các ngôn ngữ Simula" của Kristen Nygaard và Ole-Johan Dahl (1978, trang 253):

Trong ALGOL, các khối (bao gồm các thủ tục) được xem bên ngoài như các hoạt động tổng quát. Bằng cách giới thiệu các cơ chế để giải trình tự song song, ~ về cơ bản, cùng một cấu trúc có thể đóng vai trò của các quá trình song song và thông qua các cơ chế để đặt tên các thể hiện khối và truy cập nội dung của chúng, chúng có thể hoạt động như các đối tượng dữ liệu tổng quát. Những lợi ích thiết yếu của việc kết hợp dữ liệu và hoạt động trong một cấu trúc đơn lẻ đã được khám phá.

Một kết quả của khám phá này là phát hiện ra rằng "các thuộc tính thủ tục" có thể hữu ích. Ví dụ sau đây về một lớp các đối tượng xe hơi "trừu tượng" được trích dẫn từ tài liệu Định nghĩa Ngôn ngữ (Dahl và Nygaard 1965), giáo phái. 5.3.

Cảm hứng hơn nữa, đặc biệt là cho phân lớp, là lớp thu âm của CAR Hoare (trang 258):

Ý tưởng phân lớp của Hoare (68) là điểm khởi đầu tự nhiên, nhưng có hai khó khăn:

  1. Chúng tôi cần các lớp con của các quy trình với các hành động riêng và ngăn xếp dữ liệu cục bộ, không chỉ các bản ghi dữ liệu thuần túy.
  2. Chúng tôi cũng cần nhóm các thuộc tính quy trình chung theo cách mà chúng có thể được áp dụng sau này, trong nhiều tình huống khác nhau không nhất thiết phải biết trước.

Đã dành nhiều thời gian trong mùa thu năm 1966 để cố gắng điều chỉnh cấu trúc lớp kỷ lục của Hoare để đáp ứng yêu cầu của chúng tôi, nhưng không thành công. Giải pháp bất ngờ xuất hiện, với ý tưởng "tiền tố", vào tháng 12 năm 1966. Chúng tôi đã suy nghĩ về gian hàng đảo san hô trên một cây cầu, với một hàng xe ô tô là xe tải hoặc xe buýt. (Ví dụ này xuất hiện lại trong (Dahl và Nygaard 1968)).

Các thuật ngữ "lớp" và "đối tượng" cũng xuất hiện trên SIMULA 67 NGÔN NGỮ GIAO TIẾP CỦA Ole-Johan Dahl, Bjorm Myhrhaug và Kristen Nygaard (trang 4-5):

Khái niệm khối tương ứng với khái niệm trực quan về "vấn đề phụ" hoặc "thuật toán phụ" là một đơn vị phân rã hữu ích trong các lĩnh vực ứng dụng chính thống.

Một khối là một mô tả chính thức, hoặc "mẫu" của cấu trúc dữ liệu tổng hợp và các thuật toán và hành động liên quan.

...

Một khái niệm khối mở rộng được giới thiệu thông qua khai báo "lớp" và cơ chế tương tác liên quan, chẳng hạn như "tham chiếu đối tượng" (con trỏ), truy cập từ xa ", hoạt động" song song "và chặn" nối ".

Các lớp học sẽ được thảo luận chi tiết hơn trong chương 1.3.3 (trang 5):

Một khái niệm mới trung tâm trong Simula 67 là "đối tượng". Một đối tượng là một chương trình độc lập (thể hiện khối), có dữ liệu và hành động cục bộ của riêng nó được xác định bởi một "khai báo lớp". Khai báo lớp định nghĩa một mẫu chương trình (dữ liệu và hành động) và các đối tượng tuân theo mẫu đó được gọi là "thuộc về cùng một lớp".

...

Vì vậy, mặc dù thuật ngữ "hướng đối tượng" chưa được phát minh, cả "lớp" và "đối tượng" đều được sử dụng tương tự như cách sử dụng hiện đại của chúng trước khi Alan Kay bắt đầu phát triển Smalltalk vào năm 1969.

Ivan Sutherland đi xa đến mức xác định Simula là ngôn ngữ lập trình hướng đối tượng đầu tiên, trên Sketchpad: Hệ thống giao tiếp đồ họa máy móc (trang 4), cũng nhận ra ảnh hưởng của CAR Hoare, Douglas T. Ross ' , ALGOL và Sketchpad:

Tuy nhiên, nỗ lực loại bỏ sự phân chia giữa người dùng và lập trình viên của Sutherland không phải là hệ thống duy nhất, khi không làm như vậy, đã cung cấp bước nhảy vọt tưởng tượng cho một mô hình lập trình mới. Simga của Nygaard và Dahl [7] là ngôn ngữ lập trình thông thường đầu tiên kết hợp các nguyên tắc định hướng đối tượng, nhưng việc triển khai kế thừa dựa trên lớp và thể hiện của Sketchpad (mặc dù không được gọi là đối tượng) đã có trước Simula vài năm.

Dường như đã có một ảnh hưởng chung thông qua công trình của Douglas T. Ross, người được đề cập trong phần xác nhận của luận án này và cũng được trích dẫn trong báo cáo kỹ thuật của Phòng thí nghiệm MIT Lincoln dựa trên nó. Ross ngồi trong ủy ban Algol 68 với CAR Hoare vào giữa những năm 1960, nơi công việc trước đây của ông về cấu trúc dữ liệu giống như bản ghi (gọi là plex) đã ảnh hưởng đến ý tưởng của Hoare về các loại dữ liệu trừu tượng, sau này được Nygaard và Dahl tin tưởng là nguồn gốc của các cơ chế định nghĩa lớp trong Simula [7].

Dự án Dynabook bán kết của Alan Kay, dẫn đến cả Xerox Star và sự bùng nổ của sự quan tâm đến lập trình hướng đối tượng thông qua ngôn ngữ Smalltalk của anh, bị ảnh hưởng trực tiếp bởi Sketchpad. Kay đã viết về thực tế rằng genesis của Smalltalk nằm trong sự xuất hiện ngẫu nhiên trên bàn của anh ta về cả một băng phân phối của Simula và một bản sao của luận án Sketchpad của Sutherland [5]. Kay nhận ra rằng hai hệ thống này dựa trên cùng một khái niệm kiểu cơ bản (rõ ràng xuất phát từ hai tuyến khác nhau từ plex của Ross) và chúng có thể tạo thành cơ sở của một hệ thống lập trình có thể sử dụng rộng rãi hơn. Khi so sánh hai tuyến ảnh hưởng này, Simula là một dự án lớn hơn nhiều so với Sketchpad, được công nhận là ngôn ngữ lập trình hướng đối tượng đầu tiên,

Tuy nhiên, Alan Kay, rõ ràng, coi Smalltalk là ngôn ngữ hướng đối tượng đầu tiên :

Mặc dù nó có tổ tiên cao quý thực sự, đóng góp của Smalltalk là một mô hình thiết kế mới mà tôi gọi là Hướng đối tượng để tấn công các vấn đề lớn của lập trình viên chuyên nghiệp và làm cho những người dùng mới có thể làm được. Thiết kế hướng đối tượng là một nỗ lực thành công để cải thiện chất lượng hiệu quả của việc mô hình hóa các hệ thống động phức tạp hơn và các mối quan hệ người dùng có thể thực hiện được nhờ vụ nổ silicon.

và đã đặt ra thuật ngữ này, tôi nghĩ không có nhiều tranh luận ở đó.

Để cuối cùng trả lời câu hỏi của bạn: Một số khái niệm cốt lõi về định hướng đối tượng đã tồn tại trên Simula và trên các ngôn ngữ trước đó như Algol và LISP, nhưng bản thân mô hình thì không, do đó thực sự không cần phải đặt tên.

Smalltalk được thiết kế với định hướng đối tượng, ít nhất là những gì Alan Kay nghĩ về hướng đối tượ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à ràng buộc cực kỳ muộn của 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.

Kiến trúc có vẻ như là sự pha trộn của các khái niệm trước đó, nhưng các khái niệm trung tâm của nó đã được Smalltalk giới thiệu, do đó đánh dấu việc thực hiện đầu tiên của mô hình.


2
+1 Như thường lệ, Yannis trả lời xuất sắc! Tôi đã học được khá nhiều từ điều này.
Jonathan Henson

6
Trên thực tế, có rất nhiều tranh luận, và lý do chính đáng cho nó. Bất chấp tuyên bố tự hợp tác của Alan Kay về "mô hình mới", hầu như không có cách nào để định nghĩa "hướng đối tượng" bao gồm Smalltalk nhưng loại trừ Simula. Ý tưởng "mọi thứ là một đối tượng" đã có trong một số triển khai (và nó cũng chủ yếu là một khái niệm trong Smalltalk - như một sự tối ưu hóa, các đối tượng số nguyên nhỏ có một đại diện không thể phân biệt được với những gì như C hoặc Pascal sẽ sử dụng).
Jerry Coffin

1
@JerryCoffin Tôi không đồng ý rằng hầu hết các khái niệm và nguyên tắc đều ở đó, không có gì mới dưới ánh mặt trời, trên Lịch sử ban đầu của Smalltalk Kay thậm chí còn coi Plato là nguồn cảm hứng cho việc định hướng đối tượng, giữa hàng tấn ảnh hưởng khác. Cá nhân tôi sẽ tiếp tục nghĩ Smalltalk đã đưa ra mô hình này, bởi vì đây là triển khai đầu tiên được thiết kế với mô hình trong tâm trí, trong khi thực hiện trước đó các khái niệm liên quan trong đó các tính năng, cốt lõi hoặc thứ yếu, nhưng không phải là triết lý lái xe mang lại ra ngôn ngữ
yannis

1
@JerryCoffin (tiếp ...) Tuy nhiên, đó là lãnh thổ chiến tranh và tôi thực sự không nghĩ nó quan trọng. Tôi nghĩ rằng trích dẫn của Bibherland tôi đã đưa ra một cách đầy đủ thực tế rằng không phải ai cũng đồng ý rằng Kay "phát minh ra" mô hình, và ý kiến ​​cá nhân của tôi về vấn đề này không gì khác hơn là một chú thích.
yannis

5
Trên thực tế, khái niệm trung tâm không phải là "mọi thực thể là một đối tượng" mà là "mọi hành động là một thông điệp gửi đi". Alan Kay thậm chí còn nói rằng ông hối hận khi đặt tên cho nó là "hướng đối tượng" và một cái gì đó như "hướng thông điệp" sẽ là một thuật ngữ tốt hơn.
Jörg W Mittag
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.