Zawsze obwiniałem popularność C o potrzebę uniwersalnego języka asemblera. Jego połączenie specyfiki na poziomie maszyny, standaryzacji i ekstremalnej przenośności pozwala C funkcjonować jako de facto uniwersalny język asemblerowy i z tego powodu podejrzewam, że jego rola będzie istnieć w nieskończoność.
Powinienem wspomnieć, że zawsze jestem nieco zaskoczony, gdy OOP jest prezentowany na kursach programistycznych jako rodzaj „ostatecznego modelu”, który jest jedynym możliwym punktem końcowym dobrego programowania. Podobnie jak wiele innych aspektów programowania, wartość OOP stanowi kompromis między wieloma konkurującymi ze sobą czynnikami, w tym sposobem, w jaki mózg ludzki organizuje informacje, jak grupy społeczne wspierają oprogramowanie w dłuższej perspektywie, a w przypadku programowania obiektowego niektóre dość głębokie aspekty jak działa sam wszechświat.
I ten ostatni punkt warto trochę wbić. Czytaj dalej, jeśli jesteś zainteresowany badaniem na poziomie fizyki, dlaczego istnieją pewne style programowania, jak one działają razem i gdzie może zmierzać świat w przyszłości, gdy będziemy dalej rozwijać takie koncepcje ...
Obiekt w fizyce to wszystko, co utrzymuje rozpoznawalną spójność w czasie. To z kolei pozwala prostym stworzeniom, takim jak my, uciec przed przedstawieniem obiektu przy użyciu tylko niewielkiej liczby bitów, bez narażania naszego życia na zbyt duże straty. Ale jeśli chodzi o fizykę w ogóle, liczba rzeczy, które musisz dokładnie zrobić, aby uprościć i uprościć tego rodzaju uproszczenia, jest niezwykle duża. Jako ludzie nie myślimy o tym tyle, ponieważ szczerze mówiąc, nie byłoby nas tutaj, gdyby to nie była prawda.
Brzmi zbyt abstrakcyjnie? To naprawdę nie jest. Wyobraź sobie na przykład, że próbujesz nawigować drogą do domu znajomego, jeśli zamiast samochodów napotkasz gwałtownie oscylujące pola plazmy i chwilowe kondensacje materii poruszającej się z ogromnym zakresem prędkości. Taki scenariusz mógłby raczej głęboko wpłynąć na możliwości socjalizacji, tak? Musimy obiekty, my są obiekty, oraz istnienie obiektów daje nam ogromną i krytycznie ważny poziom uproszczenia otoczenia wokół nas.
Wróćmy więc do oprogramowania. Co obiekty w świecie rzeczywistym mają do powiedzenia na temat obiektów w zakresie programowania?
Cóż, z jednej strony oznacza to, że to, co definiuje „dobry” obiekt w oprogramowaniu, powinno naprawdę oznaczać, czy rodzaj danych, którymi się posługujesz, z łatwością wspiera ideę rozpoznawalnego uporczywości w czasie .
Dzięki tej definicji najłatwiejsze formy OOP są łatwe do rozpoznania. Są to te, które trochę sobie radzą, używając tylko danych, które są już „dołączone” lub zdefiniowane przez jakiś rzeczywisty, prawdziwie fizyczny obiekt, taki jak osoba, dom lub samochód. Nawet dzisiaj jest to zbyt często jedyna definicja obiektów, które ludzie zdobywają na kursach oprogramowania. To niedobrze, ponieważ nawet trywialne programy obiektowe potrzebują szerszej definicji niż to.
Druga i znacznie bardziej interesująca kategoria obiektów obejmuje to, co nazywam unieśmiertelnionymi wydarzeniami ze świata rzeczywistego . Przez „unieśmiertelniony” rozumiem rzeczy, które przynajmniej krótko istnieją jako dobrze zdefiniowane byty lub kolekcje w realnym świecie, ale które następnie rozpraszają się i przestają istnieć jako kolekcje mające znaczenie fizyczne. Sympozjum jest doskonałym przykładem: sympozjum istnieje przez krótki czas jako przyzwoicie dobrze zdefiniowana kolekcja miejsc i ludzi. Ale niestety nawet najlepsze konferencje muszą się zakończyć, a poszczególne części, które je stworzyły, przechodzą do innych działań.
Ale za pomocą komputerów i sieci możemy sprawić, że takie przejściowe sympozjum będzie wyglądać jak obiekt długoterminowy, przechwytując i utrzymując jego pamięć jako obiekt oprogramowania. Wiele rzeczy, które robimy z komputerami i bazami danych, sprowadzają się do tego rodzaju unieśmiertelnienia zdarzeń przejściowych, w których w rzeczywistości staramy się wzbogacić nasz prawdziwy wszechświat, wychwytując go i rozszerzając w sposób, który nie mógłby istnieć fizycznie. Np. Czy widziałeś ostatnio prawdziwą Pandorę? Takie przechwytywanie i rozszerzanie realnych dzieł pomaga wzbogacić i przedłużyć nasze życie, ekonomię i wybory w niezwykły sposób. To jest dla mnie centrum programowania obiektowego, miejsce, w którym wywarło i nadal ma najbardziej niezwykłe skutki.
Ostatnia kategoria OOP składa się z obiektów, które nie mają ścisłego związku ze zdarzeniami zewnętrznymi, ale są infrastrukturąpotrzebne do wspierania naszego ciągłego rozszerzania rzeczywistości za pomocą unieśmiertelnionych obiektów ze świata rzeczywistego. To tutaj możesz zejść aż do (pół) metalu komputera, tworząc kawałki trwałej rzeczywistości, które podobnie jak pierwiastki chemiczne w prawdziwym świecie można szybko łączyć i w ciekawy sposób budować nowe światy wewnętrzne. Komputery mobilne pomogły promować rozwój tego rodzaju wysoce rekombinacyjnego podejścia, które ponownie na wiele sposobów naśladuje rekombinacyjne cechy świata fizycznego. Jest to również trudne: to, co może wydawać się dobrym wyborem, może z czasem okazać się nieoczekiwanie złe, zwykle dlatego, że zamiast blokować, blokuje różnorodność i ekspansję.
Ta ostatnia kategoria wskazuje również na ryzyko związane z użyciem tylko jednego modelu do programowania, ponieważ podobnie jak świat rzeczywisty, światy programowane również potrzebują procesów, które niedobrze odpowiadają względnie niezmiennym przedmiotom. Ziemia jest pełna obiektów, ale słońce jest pełne bardzo dynamicznych przepływów energii, które ostatecznie są potrzebne do „napędzania” obiektów i działań na ziemi o niższej energii. Podobnie przy tworzeniu światów obliczeniowych zdarzają się przypadki, w których trzeba sobie radzić z przepływami i transformacjami oraz szybko zmieniającymi się kontekstami, które, choć same w sobie nie są bardzo podobne do obiektów, są jednak absolutnie niezbędne do umożliwienia prostszych, bardziej przyjaznych człowiekowi obiektów używanych na wyższych poziomach. . To nie przypadek, że znaczna część programowania wykonywanego na poziomie jądra nie jest wyraźnie podobna do obiektów lub że w dużej mierze opiera się na językach takich jak C, które są bardziej zorientowane na przetwarzanie. Są to głębsze dziedziny, które uzupełniają fascynującą różnorodność, którą widzimy wyżej w światach generowanych komputerowo.
Innym obszarem, w którym OOP może się nie udać, jest zbytnie skupianie się na starych koncepcjach obiektów.
Przedmioty w świecie rzeczywistym, a zwłaszcza żywe , mają absolutnie zadziwiający poziom umiejętności interakcji ze środowiskiem w skomplikowany i subtelny sposób. Widżety nadające się do wzajemnego przeglądania, sprawdzające zgodność i sprawdzanie poprawności, a może nawet wymyślające nowe sposoby interakcji są bardzo zbliżone do rzeczywistej koncepcji biologicznej obiektów niż proste ramy i schematy dziedziczenia, które mamy tendencję skupić się (zwykle z konieczności!) na poziomie kodu. Jest to jeden z obszarów wzrostu obiektów w świecie cybernetycznym, im bardziej „agresywne” podejście, w którym reaktywność na środowisko jest normą nawet w ramach samego programowania.
I tyle za moją „krytykę” OOP! Mam jednak nadzieję, że wskazałem, dlaczego stworzenie bogatszego cyberprzestrzeni oznacza uwzględnienie różnorodności stylów programowania, zamiast zakładać, że „tylko jeden” jest wszystkim, czego potrzeba. Mam wrażenie, że naprawdę interesujące rzeczy dopiero nadejdą, bez względu na to, jak przyziemna jest większość naszych działań!