Programowanie obiektowe: dlaczego „zorientowane”?

14

Przeszedłem przez większość studiów programistycznych. Nie jest to stopień informatyki, więc wiele teorii odrzucono na rzecz praktycznego budowania portfolio i tego, co uważam za naukę JIT, co jest najwyraźniej ważniejsze w branży gier. Pierwszym tematem było „Wprowadzenie do programowania obiektowego”.

To zdanie nie przeszkadzało mi, dopóki nie dowiedziałem się o różnych paradygmatach programowania (otrzymuję tę listę z https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms ):

  • Tryb rozkazujący
  • Funkcjonalny
  • Proceduralny
  • Zbudowany
  • Sterowane zdarzeniami
  • Obiektowy
  • Deklaracyjny
  • Na podstawie automatów

Rozumiem, że nie jest to wyczerpująca lista i że nie wszystkie z tych pojęć są sobie równe, a większość z nich nie jest nawet wyłączna, ale nie rozumiem, dlaczego większość z nich ma tylko jedno słowo - imperatyw; funkcjonalny; deklaratywny - ale kiedy mówimy o programowaniu za pomocą obiektów, musimy wyjaśnić, że jesteśmy zorientowani wokół tych obiektów. Czy nie możemy po prostu używać przedmiotów? Czy nie możemy po prostu mieć przedmiotów? Dlaczego muszą nas zorientować , jako naszą gwiazdę przewodnią?

Patrząc tutaj ( https://en.wikipedia.org/wiki/Object-oriented_programming ), nigdzie nie używa się terminu „zorientowany” jako własnego terminu. Wyjaśniany jest tylko „obiekt”.

Widzę też, z praktycznych powodów, dlaczego używa się sterowanych zdarzeniami, ponieważ programowanie zdarzeń jest już rzeczą, którą robisz, gdy prowadzisz konferencję, a programowanie za pomocą automatów brzmi, jakbyś tworzył robotyczną linię produkcyjną, więc pomaga mieć tam dodatkowe słowa wyjaśniające.

Co sprawia, że ​​programowanie obiektowe jako fraza nie wystarcza do opisania tego, co robimy, gdy używamy obiektów w naszym programowaniu?

Oczywiście z mojego tonu nie przepadam za słowem „zorientowanym”. Przypomina mi się mój czas jako reportera sądowego, słuchanie adwokata za adwokatem używającego wyrażenia „w stosunku do” jako swoistego tykania. To nic nie znaczyło; to był tylko termin, którym używali do wypełnienia powietrza, podczas gdy próbowali wymyślić, co powiedzieć dalej. Jednak nie staram się popierać zmiany języka, tylko pytam, dlaczego tak jest. Jeśli ktoś wie, dlaczego stał się znany w ten sposób z czysto historycznych, szczątkowych powodów, to jest to odpowiedź. To będzie amunicja, jeśli kiedykolwiek zdecyduję się marnować czas na propagowanie zmiany języka.

Z drugiej strony, jeśli rzeczywiście istnieje użyteczny powód, dla którego język lub fragment kodu musi wskazywać na obiekty, z wyłączeniem wszystkich innych kierunków, zamiast tylko umieszczania ich w pasku narzędzi , jako narzędzi , naprawdę byłbym zainteresowany dowiedzieć się o tym. Lubię uczyć się przydatnych rzeczy.

Excrubulent
źródło
11
Chyba „Obiektywnie” lub „Obiektywnie” nie dałoby właściwego obrazu tego, co tak naprawdę oznacza ;-)
Doc Brown
Rozważyłem „Objectified”, ale zdecydowałem, że może to również wydzielać złe wibracje.
Excrubulent
1
Myślę, że „przedmiot” jest błędem, a nie „zorientowanym”. To, co nazywamy zorientowanym obiektowo, jest zazwyczaj zorientowane klasowo.
Steve314,
1
Czy fani Phoenix Wright chcą to nazwać „OBJEKCJA !! Programowanie”?
Katana314,

Odpowiedzi:

24

Wierzę czytasz sposób zbyt dużo do prostych konstrukcji gramatycznych. Spójrz na swoją listę paradygmatów, posortowaną inaczej z powodów, dla których wkrótce:

  • Tryb rozkazujący
  • Funkcjonalny
  • Proceduralny
  • Zbudowany
  • Deklaracyjny
  • Sterowane zdarzeniami
  • Na podstawie automatów
  • Obiektowy

Co te słowa mają ze sobą wspólnego? Wszystkie są przymiotnikami, ponieważ mają na celu modyfikację słowa „programowanie”. Ponadto, z wyjątkiem „imperatywnego”, nie wszystkie są „naturalnymi” przymiotnikami, lecz rzeczownikami „przymiotnikowymi” - rzeczownikami, które faktycznie opisują rdzeń paradygmatu: funkcję, strukturę, automaty i przedmiot.

Istnieją dwa różne sposoby przymiotnika rzeczowników: poprzez przyrostek podobny do -al lub -ed lub poprzez utworzenie złożonego słowa za pomocą łącznika. Teraz, jak zauważył Doc Brown, sufiksy, których można użyć do przymiotnika „obiektu”, mają inne znaczenie. Który pozostawia kompozycję.

I twierdzę, że to czysty przypadek lub smak, że Alan Kay zdecydował się użyć „zorientowany” w swoim złożonym przymiotniku „zorientowany obiektowo”. Równie dobrze mógł być „oparty na obiektach” lub „oparty na obiektach”, a ty też możesz w nich czytać zbyt wiele. Czy „napędzany” nie brzmi jak niezdrowa obsesja?

Michael Borgwardt
źródło
1
Znakomity punkt (chociaż myślę, że masz na myśli przymiotniki, a nie przysłówki - „programowanie” w tym kontekście to rzeczownik).
JW01
@ JW01: ups, masz rację
Michael Borgwardt,
To właściwie bardzo dobra uwaga - słowo „zorientowane” nadaje temu zwrotowi inne znaczenie niż „programowanie obiektowe”, ponieważ samo słowo „obiekt” nie jest przymiotnikiem. Właściwie powiedziałbym, że powód „zorientowany” został wybrany zamiast innych słów dla aliteracji. Poza tym niczego nie czytałem, przesadzałem, aby podkreślić, że istnieje słowo „zorientowane”, które znajduje się tam całkowicie niewyjaśnione i niekwestionowane w literaturze, co sprawiło, że zastanawiałem się, czy rzeczywiście robił coś, aby zasłużyć na swoje miejsce . : P
Excrubulent
Zastanawiam się, dlaczego nie wybrał obsesji na punkcie przedmiotu ... och tak, to tylko fanatycy, którzy nie wiedzą, kiedy przestać. ;-)
Deduplicator
Jest jedna książka polskiego autora, Jerzego Grębosza, zatytułowana „Symfonia C ++” („Symfonia w C ++”), w której autor próbuje ciekawie nadać sens tej frazie: mówi, że nazywa się „ obiektowe ”, ponieważ kod może„ zorientować się ”w zależności od obiektu, z którym obecnie pracuje (zachowanie polimorficzne). Odróżnia to od języków, w których istnieje tylko pojęcie „obiektów” jako kawałków danych. Nie ma historycznych dowodów na to, że było to pierwotne znaczenie, ale jest dość wyjaśniające, nawet jako wyjaśnienie post factum.
BarbaraKwarc
18

ale kiedy mówimy o programowaniu za pomocą obiektów, musimy wyjaśnić, że jesteśmy zorientowani wokół tych obiektów. Czy nie możemy po prostu używać przedmiotów? Czy nie możemy po prostu mieć przedmiotów?

Szczerze mówiąc, jest to pozostałość po historii. Programowanie funkcjonalne to tak naprawdę programowanie zorientowane na funkcje, programowanie deklaratywne to tak naprawdę programowanie zorientowane na deklarację ... w końcu czyż nie używamy tylko funkcji? Czy nie możemy po prostu mieć funkcji?

„Obiektowo” lepiej zsuwa się z języka i jest historycznie zakorzeniony.

„Orientacja” przychodzi, ponieważ nie mówimy o programowaniu, ale o projektowaniu. To, że używamy obiektów, funkcji lub zdarzeń, nie oznacza, że ​​nasza metodologia projektowania odbywa się poprzez modelowanie wszystkich trzech. Określając orientację metodologii projektowania, pomaga komunikować programistom, w jaki sposób powinni interpretować i rozszerzać ten projekt - w jaki sposób skupienie modelowania zabarwia implementację.

Telastyn
źródło
Wygląda na to, że mówisz, że „obiektowo” to rodzaj polityki z redundantnym frazowaniem, podobnie jak „pro-aktywny” ma w zasadzie to samo znaczenie co „aktywny”, po prostu dołączono redundantny przedrostek na pewno słuchaczowi nie brakuje znaczenia.
Excrubulent
1
Myślę, że naprawdę trafiłeś w sedno: wykonujemy projektowanie obiektowe i dlatego języki są zorientowane obiektowo - abyśmy mogli wyrazić ten projekt.
K.Steff
1
@Excrubulent Nie, dodanie „zorientowanego” czyni go bardziej szczegółowym. „Zorientowany obiektowo” oznacza, że ​​nie omawiamy szczegółów dotyczących programowania obiektów, ale zamiast tego, jak projektować programy, aby wykorzystywały obiekty w znaczący sposób. „Programowanie obiektowe”, „programowanie funkcji” lub „programowanie deklaracji” odnosi się do mówienia konkretnie o implementacji określonej koncepcji zamiast zasad projektowania. „Funkcjonalne” i „deklaratywne” to słowa z przyrostkami, które próbują przekazać to samo znaczenie, ale dla obiektów „obiektywne” lub „obiektywne” nie miałyby większego sensu.
Ilari Kajaste
I jak odpowiedział Michael Borgwardt , słowo „zorientowany” nie jest w żaden sposób wyjątkowe. Może być równie dobrze „napędzany” lub „oparty”. Ważne jest to, że nie może to być „programowanie obiektowe”. (Cóż, laguange jest zawsze płynne, więc mogłoby , ale po prostu nie byłoby tak opisowe.)
Ilari Kajaste
Zmieniłem odpowiedzi, ponieważ odpowiedź Michaela Borgwardta faktycznie wyjaśnia znaczenie tego słowa i sposób, w jaki zmienia to zdanie.
Excrubulent
2

Wywołanie go, które pomaga wyjaśnić, że przedmioty są bardzo ważną częścią paradygmatu.

Programowanie zorientowane obiektowo ma swoje korzenie w Simula , która była zasadniczo ALGOL, plus kilka nowych funkcji programowania obiektowego. I zgodnie z tą historią, nawet dziś w wielu językach (nawet w „czystych językach OO”) jest całkowicie możliwe kodowanie czegoś, co jest w zasadzie tylko programem proceduralnym z niektórymi obiektami. Ale bardziej doświadczeni programiści uważają to za zły styl.

W rzeczywistości robienie czegoś „zorientowanego obiektowo” różni się bardzo od „sposobu proceduralnego”. Najważniejszą koncepcją jest wykorzystanie dziedziczenia i polimorfizmu. Kiedy naprawdę rozumiesz i internalizujesz sposób działania klas i metod wirtualnych, jest to otwierające oczy doświadczenie, które zmienia sposób pisania kodu w wielu przypadkach, prawdziwa zmiana paradygmatu. (Zakładając oczywiście, że najpierw zacząłeś pisać kod proceduralny. W dzisiejszych czasach wielu studentów wybiera język Java lub C # jako pierwszy język, a IMO naprawdę nie rozumieją korzyści płynących z używania OO.)

Nazywamy to programowaniem obiektowym, ponieważ program napisany w stylu OO zawiera nie tylko obiekty; struktura całego programu jest oparta na nich i na sposobie ich działania.

Mason Wheeler
źródło
Jest to podobna odpowiedź do Telastyn, z tym że wydaje się, że sugeruje się, iż „programowanie obiektowe” jako termin zasadniczo różni się od „programowania obiektowego”. Czy możesz wyjaśnić, jak mogą się różnić? Wydaje mi się, że OOP jest na tyle luźnym terminem, że OP spełniałby tę samą funkcję.
Excrubulent
2
W dzisiejszych czasach wielu studentów wybiera język Java lub C # jako pierwszy język, a IMO naprawdę nie rozumie korzyści płynących z OO. - Właściwie zacząłem na C ++ i w pierwszym zadaniu użyłem mieszanki obiektów i funkcji, ale zostałem oznaczony za korzystanie z funkcji. Niektóre z tych funkcji były czysto funkcjonalne i w ogóle nie korzystały z enkapsulacji w obiekcie, ale inne, które pobierały wskaźniki do zmiennych w celu działania (tj .: zmodyfikowane informacje o stanie), stały się znacznie łatwiejsze do wykonania i wywołania, gdy były w obiekcie, więc widziałem obie strony.
Excrubulent