Jak nazwali programowanie obiektowe, zanim Alan Kay wymyślił ten termin?

22

Alan Kay twierdzi, że „stworzyłem termin„ obiektowy ”i mogę powiedzieć, że nie miałem na myśli C ++.” Miał oczywiście na myśli Smalltalk. Ale sam nie wymyślił programowania obiektowego; podstawowe pomysły dostał od Simuli. Więc jeśli ten termin nie został jeszcze wynaleziony, to jak pierwotnie nazywali programowanie obiektowe w Simula?

Mason Wheeler
źródło

Odpowiedzi:

39

W rzeczywistości Alan Kay nie miał na myśli Smalltalk, kiedy wymyślił termin „programowanie obiektowe”:

W Utah, jakiś czas po 66 listopada, kiedy pod wpływem Sketchpada, Simuli, projektu ARPAnet, Burroughs B5000 i mojego doświadczenia w biologii i matematyce, pomyślałem o architekturze programowania. Prawdopodobnie w 1967 roku ktoś zapytał mnie, co robię, a ja powiedziałem: „Programowanie obiektowe”.

Jego pierwotna koncepcja składała się z następujących części.

  • Pomyślałem o obiektach będących komórkami biologicznymi i / lub pojedynczymi komputerami w sieci, które mogą komunikować się tylko z wiadomościami (więc wysyłanie wiadomości pojawiło się na samym początku - zajęło trochę czasu, aby zobaczyć, jak robić wiadomości w języku programowania wystarczająco wydajnym, aby być użytecznym).
  • Chciałem pozbyć się danych. B5000 prawie to zrobił dzięki prawie niewiarygodnej architekturze sprzętu. Uświadomiłem sobie, że metafora komórka / cały komputer pozbyłaby się danych, a „<-” byłoby tylko kolejnym tokenem wiadomości (zajęło mi to sporo czasu, aby to przemyśleć, ponieważ tak naprawdę myślałem o tych wszystkich symbolach jako nazwach funkcje i procedury.
  • Moje pochodzenie matematyczne uświadomiło mi, że z każdym obiektem może być powiązanych kilka algebr, a mogą istnieć ich rodziny i że będą one bardzo, bardzo przydatne. Termin „polimorfizm” został narzucony znacznie później (myślę, że Peter Wegner) i nie jest całkiem poprawny, ponieważ tak naprawdę pochodzi z nomenklatury funkcji, a ja chciałem czegoś więcej niż funkcji. Stworzyłem termin „ogólność” do radzenia sobie z rodzajowymi zachowaniami w formie quasi-algebraicznej.
  • Nie podobało mi się to, że Simula I lub Simula 67 dziedziczyły (chociaż myślałem, że Nygaard i Dahl byli po prostu wspaniałymi myślicielami i projektantami). Postanowiłem więc pominąć dziedziczenie jako funkcję wbudowaną, dopóki nie zrozumiałem go lepiej.

Smalltalk był rezultatem tej koncepcji, zapożyczając i rozszerzając pojęcia „obiektu” i „klasy” od Simuli, które Simula odziedziczyła z kolei po ALGOL, jak opisano w „Rozwój języków Simula” przez Kristen Nygaard i Ole-Johan Dahl (1978, strona 253):

W ALGOL bloki (w tym procedury) są postrzegane zewnętrznie jako operacje uogólnione. Wprowadzając mechanizmy quasi-równoległego sekwencjonowania, zasadniczo ten sam konstrukt mógłby odgrywać rolę równoległych procesów, a poprzez mechanizmy nazewnictwa instancji bloków i uzyskiwania dostępu do ich zawartości mogłyby funkcjonować jako uogólnione obiekty danych. Istotne zalety łączenia danych i operacji w jednym konstrukcie już tam były do ​​zbadania.

Jednym z rezultatów tego badania było odkrycie, że „atrybuty procedury” mogą być przydatne. Poniższy przykład klasy „abstrakcyjnych” obiektów samochodowych cytowany jest w dokumencie Definicja języka (Dahl i Nygaard 1965), sek. 5.3

Kolejną inspiracją, szczególnie dla podklas, była rekordowa klasa CAR Hoare (strona 258):

Idea podklasy Hoare'a (68) była naturalnym punktem wyjścia, ale były dwie trudności:

  1. Potrzebowaliśmy podklas procesów z własnymi działaniami i lokalnymi stosami danych, nie tylko samych rekordów danych.
  2. Musieliśmy także zgrupować wspólne właściwości procesu w taki sposób, aby można je było później zastosować w różnych sytuacjach, niekoniecznie znanych z góry.

Jesienią 1966 r. Wiele czasu poświęcono na próby bezskutecznego dostosowania konstrukcji klasy rekordowej Hoare do naszych wymagań. Rozwiązanie pojawiło się nagle, wraz z pomysłem „prefiksowania”, w grudniu 1966 roku. Myśleliśmy w kategoriach stoiska atoli na moście z kolejką samochodów, które były albo ciężarówkami, albo autobusami. (Ten przykład pojawia się ponownie w (Dahl and Nygaard 1968)).

Pojęcia „klasa” i „obiekt” pojawiają się również w SIMULA 67 WSPÓLNY JĘZYK BAZOWY autorstwa Ole-Johana Dahla, Bjorm Myhrhaug i Kristen Nygaard (strony 4-5):

Koncepcja bloku odpowiada intuicyjnemu pojęciu „podproblemu” lub „pod-algorytmu”, który jest przydatną jednostką rozkładu w ortodoksyjnych obszarach zastosowania.

Blok to formalny opis lub „wzorzec” zagregowanej struktury danych oraz powiązanych algorytmów i działań.

...

Rozszerzona koncepcja bloku jest wprowadzana za pomocą deklaracji „klasy” i powiązanego mechanizmu interakcji, takiego jak „odwołania do obiektów” (wskaźniki), dostęp zdalny ”, operacja„ quasi-równoległa ”i„ konkatenacja ”bloku.

Zajęcia omówiono bardziej szczegółowo w rozdziale 1.3.3 (strona 5):

Centralną nową koncepcją w Simula 67 jest „obiekt”. Obiekt jest samodzielnym programem (instancja bloku), mającym własne lokalne dane i akcje zdefiniowane przez „deklarację klasy”. Deklaracja klasy definiuje wzorzec programu (danych i akcji), a obiekty zgodne z tym wzorcem mówi się, że „należą do tej samej klasy”.

...

Tak więc, chociaż termin „obiektowy” nie został jeszcze wynaleziony, zarówno „klasa”, jak i „obiekt” były używane podobnie jak ich współczesne użycie, zanim Alan Kay zaczął rozwijać Smalltalk w 1969 roku.

Ivan Sutherland identyfikuje Simulę jako pierwszy obiektowy język programowania na Sketchpad: Graficzny system komunikacji człowiek-maszyna (strona 4), rozpoznając także wpływy CAR Hoare, Douglasa T. Rossa , ALGOL i Sketchpad:

Niemniej jednak próba Sutherlanda zlikwidowania podziału na użytkowników i programistów nie była jedynym systemem, który, nie czyniąc tego, stanowił pomysłowy skok do nowego paradygmatu programowania. Nygaard i Dahl's Simula [7] był pierwszym konwencjonalnym językiem programowania obejmującym zasady orientacji obiektowej, ale implementacja przez Sketchpad dziedziczenia klasowego i instancji (choć nie nazywanych obiektami) wyprzedziła Simulę o kilka lat.

Wydaje się, że wywierany jest wspólny wpływ dzięki pracy Douglasa T. Rossa, który jest wspomniany w podziękowaniach dla tej rozprawy i cytowany w opartym na niej raporcie technicznym MIT Lincoln Laboratory. Ross zasiadł w komitecie Algol 68 z CAR Hoare w połowie lat 60. XX wieku, gdzie jego poprzednia praca nad rekordową strukturą danych (zwaną plexem) wpłynęła na własne pomysły Hoare dotyczące abstrakcyjnych typów danych [3], później przypisane przez Nygaarda i Dahla jako źródło mechanizmów definicji klasy w Simula [7].

Szkicowy projekt Alana Kaya, Dynabook, który doprowadził zarówno do Xerox Star, jak i do eksplozji zainteresowania programowaniem obiektowym przez jego język Smalltalk, był bezpośrednio pod wpływem Sketchpad. Kay napisał o tym, że geneza Smalltalk leżała w przypadkowym pojawieniu się na jego biurku zarówno taśmy dystrybucyjnej Simuli, jak i kopii tezy Sketchpad Sutherlanda [5]. Kay zdała sobie sprawę, że oba systemy były oparte na tych samych podstawowych typach (najwyraźniej pochodzących z dwóch różnych tras od pleksa Rossa) i że mogą one stanowić podstawę szerszego użytecznego systemu programowania. Porównując te dwie drogi oddziaływania, Simula był znacznie większym projektem niż Sketchpad, słusznie uznanym za pierwszy obiektowy język programowania,

Jednak Alan Kay oczywiście uważa Smalltalk za pierwszy język obiektowy :

Chociaż ma on szlachetnych przodków, wkład Smalltalk jest nowym paradygmatem projektowym - który nazwałam obiektowym - służącym do atakowania dużych problemów profesjonalnego programisty i umożliwiania małym użytkownikom początkującego. Projektowanie obiektowe jest udaną próbą jakościowej poprawy wydajności modelowania coraz bardziej złożonych systemów dynamicznych i relacji użytkownika, które są możliwe dzięki wybuchowi krzemu.

i ukułszy ten termin, myślę, że nie ma tam dużo debaty.

Aby w końcu odpowiedzieć na twoje pytanie: niektóre podstawowe koncepcje orientacji obiektowej istniały na Simula i na wcześniejszych językach, takich jak Algol i LISP, ale sam paradygmat nie, dlatego tak naprawdę nie było potrzeby nazwy.

Smalltalk został zaprojektowany z myślą o orientacji obiektowej, a przynajmniej to, co Alan Kay uważał za orientację obiektową :

OOP oznacza dla mnie tylko wysyłanie wiadomości, lokalne przechowywanie, ochronę i ukrywanie procesów państwowych oraz ekstremalne późne wiązanie wszystkich rzeczy. Można to zrobić w Smalltalk i LISP. Możliwe są inne systemy, w których jest to możliwe, ale nie jestem ich świadomy.

Architektura może wydawać się połączeniem wcześniejszych koncepcji, ale jej główne koncepcje zostały wprowadzone przez Smalltalk, co oznacza pierwszą implementację paradygmatu.

Yannis
źródło
2
+1 Jak zwykle doskonała odpowiedź Yannis! Nauczyłem się z tego sporo.
Jonathan Henson
6
W rzeczywistości jest wiele debat i dobry powód. Pomimo samozachowawczego twierdzenia Alana Kay o „nowym paradygmacie”, praktycznie nie ma możliwości zdefiniowania „zorientowanego obiektowo”, który obejmuje Smalltalk, ale wyklucza Simulę. Pomysł „wszystko jest obiektem” pojawił się w niektórych implementacjach (i jest to głównie koncepcja również w Smalltalk - jako optymalizacja małe obiekty całkowite mają reprezentację, która jest prawie nie do odróżnienia od tego, czego użyłby coś takiego jak C lub Pascal).
Jerry Coffin
1
@JerryCoffin Nie zgadzam się, że większość koncepcji i zasad tam była, nic nowego pod słońcem, w The Early History of Smalltalk Kay nawet wymienia Platona jako inspirację do orientacji obiektowej, pośród wielu innych wpływów. Osobiście będę nadal myślał, że Smalltalk wprowadził paradygmat, ponieważ była to pierwsza implementacja zaprojektowana z myślą o paradygmacie, podczas gdy we wcześniejszych implementacjach pokrewne koncepcje, w których cechy były podstawowe lub drobne, ale nie filozofia jazdy, która przyniosła naprzód język.
yannis
1
@JerryCoffin (cd ...) To jednak jest terytorium wojny płomieni i naprawdę nie sądzę, żeby to miało znaczenie. Myślę, że cytowany przez Sutherland cytat odpowiednio przedstawia fakt, że nie wszyscy zgadzają się, że Kay „wynalazł” ten paradygmat, a moja osobista opinia w tej sprawie jest niczym więcej niż przypisem.
yannis
5
W rzeczywistości centralna koncepcja nie polega na tym, że „każdy byt jest obiektem”, ale „każde działanie jest przesłaniem wiadomości”. Alan Kay mówi nawet, że żałuje nazwania go „obiektowym” i że coś w rodzaju „zorientowanego na wiadomości” byłoby lepszym terminem.
Jörg W Mittag