Cyfrowy idealizm?

Z wielką przyjemnością chciałbym poddać pod dyskusję pewien arcyciekawy materiał, który był prezentowany na ostatnim seminarium w PW przez dr Jakuba Jernajczyka z Wrocławia. Dotyczy on istotnych  podobieństw, jakie zachodzą między Platońskim (i nie tylko!) idealizmem a paradygmatem programowania obiektowego.

Podstawę dyskusji stanowią SLAJDY omawiane na seminarium.

Natomiast wprowadzeniem do niej jest przygotowany przez doktora Jernajczyka wpis, który zamieszczam niżej.

Zamieściwszy go zaś, serdecznie zapraszam do dyskusji – Paweł Stacewicz.

*****

Ogólne założenia oraz struktura mojego wystąpienia przedstawione zostały w prezentacji. W niniejszym wątku rozwinę dwa zagadnienia, które, ze względu na ograniczenia czasowe, nie miały okazji dostatecznie wybrzmieć.

1.
Rozważana analogia pomiędzy technikami stosowanymi w programowaniu obiektowym, a głównymi założeniami filozoficznego idealizmu [prezentacja, s. 2-12], ujawnia się również w odniesieniu do cyfrowych narzędzi służących do projektowania i edycji grafiki [prezentacja, s. 13-14]. W wielu tego typu środowiskach funkcjonuje mechanika wzorca oraz jego kopii, które zachowują wewnętrzną, często bardzo złożoną strukturę wzorca. Aby nie mnożyć terminologii (każdy program posługuje się własnym nazewnictwem), skupię się tutaj na omówieniu środowiska Adobe Flash (obecnie Adobe Animate). Złożoną strukturę wizualną, obejmującą nie tylko elementy graficzne, ale także ich zmianę (ruch), możemy we Flashu zawrzeć w pojedynczym symbolu, który początkowo istnieje tylko w bibliotece projektu, poza główną sceną [rys. 1].

Rys. 1
Rysunek 1. Symbol utworzony w bibliotece Flasha (odpowiedniku świata idei).
Wersja animowana znajduje się tutaj.

Utworzywszy symbol możemy umieszczać na scenie (warstwie prezentacyjnej, można rzec „świecie fizycznym” Flash’a) wiele jego instancji, które w pełni zachowują jego wewnętrzną strukturę [rys. 2].

Rys. 2
Rysunek 2. Wiele instancji jednego symbolu, umieszczonych na scenie Flasha (odpowiedniku świata fizycznego), które różnią się między sobą cechami zewnętrznymi, ale w pełni zachowują strukturę wewnętrzną wzorca.
Wersja animowana znajduje się tutaj.

Analogia do klas i ich obiektów jest tutaj sprawą oczywistą, ponieważ w środowisku Flash każdy symbol stanowi pewną klasę (dziedziczącą po ogólnej klasie Object), a instancje tego symbolu stanowią obiekty owej klasy. W tym miejscu nie chcemy jednak podkreślać obiektowości Flasha jako środowiska programistycznego (wyposażonego w pełni obiektowy język ActionScript), lecz wskazać podobieństwa do mechanizmów obecnych w filozoficznym idealizmie i programowaniu obiektowym, które ujawniają się na poziomie czysto wizualnym, obsługiwanym za pomocą graficznego interfejsu użytkownika.

Wszystkie utworzone na scenie instancje danego symbolu w pełni zachowują jego wewnętrzną strukturę (wygląd oraz zachowania), ale mogą różnić się między sobą cechami zewnętrznymi (można by rzec przypadłościowymi), takimi jak położenie, wielkość, pochylenie, obrót, kolor itp.
Zmiana cech zewnętrznych pojedynczej instancji nie wpływa na pozostałe instancje, natomiast każda zmiana wewnętrznych cech symbolu powoduje zmiany we wszystkich jego instancjach. Ponadto usunięcie ze sceny pojedynczej instancji nie wpływa na pozostałe instancje, podczas gdy usunięcie symbolu z biblioteki spowoduje usunięcie ze sceny wszystkich jego instancji. Mamy tu więc wyraźną analogię do programistycznych klas i obiektów oraz do Platońskich idei i rzeczy (z tą tylko uwagą, że, w przeciwieństwie do klas oraz symboli, wewnątrz Platońskich idei nikt nie może dokonywać zmian, ani człowiek, ani nawet Demiurg).

Ponieważ koncepcja symboli i ich instancji bezpośrednio bazuje na koncepcji klas i obiektów, uwidaczniają się w niej również inne mechanizmy obecne w programowaniu obiektowym. Symbole, podobnie jak klasy, mogą zawierać w sobie również instancje innych, dowolnie zagnieżdżonych symboli (z tym zastrzeżeniem, że dany symbol nie może zawierać swojej instancji, lub instancji symbolu, który już go zawiera).
Na poziomie graficznego interfejsu użytkownika mamy też pewne odpowiedniki mechanizmu dziedziczenia – jeśli chcemy utworzyć nowy symbol, który zachowuje wybrane cechy danego symbolu, ale dodaje lub zmienia jego inne cechy, wystarczy utworzyć duplikat istniejącego symbolu, który następnie można modyfikować, nie zmieniając oryginału.

2.
Głównym celem mojego referatu było zwrócenie uwagi na pewne wspólne intuicje, podobne modele myślenia, które ujawniły się w różnych czasach, w wydawałoby się bardzo odległych od siebie dyscyplinach (w filozofii, informatyce, w klasycznym rzemiośle i projektowaniu cyfrowym).

Warto zatem rozważyć możliwe przyczyny zaobserwowanych tu analogii:

A) Mogą one wynikać z bezpośredniej, świadomej inspiracji programistów koncepcjami filozoficznymi. Wariant ten należy jednak raczej odrzucić, gdyż w literaturze specjalistycznej nie ma wzmianek o takich nawiązaniach, chociaż niektórzy autorzy (np. B. Stroustrup) posługują się pojęciami charakterystycznymi dla filozofii.

B) Bardziej prawdopodobna wydaje się inspiracja nieuświadomiona – niejawne odwołanie się do koncepcji, które od wieków obecne są w nauce i kulturze, a które po raz pierwszy pojawiły się, czy może lepiej rzec, zostały sformalizowane w greckiej filozofii (wpływ Platona na myśl europejską dobitnie uwypuklił Whitehead w stwierdzeniu, że „całą historię zachodniej filozofii dałoby się sprowadzić do kilku przypisów do Platona”).

C) Możliwa jest również całkowicie przypadkowa zbieżność podobnych koncepcji. Wariant ten wydaje się jednak mało prawdopodobny a nade wszystko mało ciekawy.

D) Znacznie bardziej prawdopodobna i chyba najbardziej interesująca w sensie poznawczym jest hipoteza, że podobne, bardziej podstawowe koncepcje/intuicje wpłynęły zarówno na myśl filozofów, rzemieślników, jak i programistów. To, że podobne koncepcje mogą ujawniać się w różnych dziedzinach ludzkiej aktywności mówiłoby nam coś istotnego o sposobie działania ludzkiego umysłu, który według podobnych reguł ujmuje i rozwiązuje bardzo odległe problemy. Oznaczałoby to, że według podobnych reguł postrzegamy, organizujemy i opisujemy świat; w końcu według podobnych reguł tworzymy nasze modele rzeczywistości, co wcale nie oznacza, że są one prawdziwe. Choć modele te mogą doskonale spełniać kryteria naszych reguł (wedle których przecież powstały) a co za tym idzie, wydawać się nam bardzo wiarygodne, wcale nie muszą odpowiadać rzeczywistości.

3.
Podczas seminarium pojawiło się wiele cennych i interesujących uwag. Poniżej sygnalizuję wybrane wątki, które być może zostaną rozwinięte na tym forum:

a) podkreślono, że wiele mechanizmów programowania obiektowego stosowano w informatyce dużo wcześniej niż ukonstytuował się ów paradygmat; przywołano przykłady własnych rozwiązań programistyczny z lat 60-70-tych, które antycypowały możliwości współczesnych języków programowania;

b) rozwinęła się ciekawa dyskusja dotycząca stopnia pokrewieństwa pojęcia klasy stosowanej w programowaniu obiektowym oraz klasy definiowanej w matematyce;

c) zwrócono uwagę na inne specyficzne języki, takie jak POV-Ray (www.povray.org) czy Metafont (część systemu TeX), w których jeszcze wyraźniej uwidacznia się analogia do Platońskiego idealizmu.

Na zakończenie pragnę serdecznie podziękować organizatorom i uczestnikom seminarium za żywą i owocną dyskusję.

Jakub Jernajczyk

******

 

Ten wpis został opublikowany w kategorii Bez kategorii, Dydaktyka logiki i filozofii, Filozofia informatyki, Filozofia nauki, Światopogląd informatyczny. Dodaj zakładkę do bezpośredniego odnośnika.

10 odpowiedzi na „Cyfrowy idealizm?

  1. Paweł Stacewicz pisze:

    Chętnie rozpocznę dyskusję, odwołując się do punktu 2 powyższego wpisu.

    A zatem: w czym leżą przyczyny tak uderzającej zbieżności między platońską koncepcją idei a paradygmatem programowania obiektowego (czy też: projektowania wizualnego)?
    Spośród przedstawionych wyżej propozycji, najbardziej przemawia do mnie odpowiedź B. Owa zbieżność ma swoje źródło w pewnych kulturowych archetypach, które chcąc nie chcąc, będąc uczestnikami, kultury, przyswajamy, a następnie wykorzystujemy w różnych dziedzinach. Platońska teoria idei należy z pewnością do bardzo wpływowych archetypów (również poprzez spontaniczny sprzeciw, jaki wzbudza u niektórych).

    Odpowiedź D, którą zdaje się przyjmować dr Jernajczyk, wydaje się do pogodzenia z B; o ile przyjmiemy, że ludzkie umysły nie funkcjonują w kulturowej próżni, lecz przejmują – w trakcie indywidualnego rozwoju – pewne koncepcje i strategie rozwiązywania problemów, które inne umysły, wyjątkowo twórcze i przenikliwe, do kultury wprowadziły. Podobieństwo w działaniu umysłów byłoby zatem kulturowo zapośredniczone.

    Jeśli odpowiedź D pozbawilibyśmy powyższego uzupełnienia, to byłaby ona raczej antyplatońska (albo może: bardzo ostrożna w stosunku do platonizmu). Wszak Platonowi nie chodziło chyba o to, jak działa umysł, jakie reguły „sterują” jego poznaniem itp…, lecz jaka jest rzeczywistość. Świat idei miał istnieć REALNIE, niezależnie od działań i konstrukcji ludzkiego umysłu.

    W tym kontekście można się zastanawiać, czy skuteczność (pokrewnego platońskiej teorii idei) programowania obiektowego, nie jest pewnym argumentem wzmacniającym faktyczny, ontologiczny platonizm.
    Skoro koncepcja platońska tak dobrze się sprawdza w kreowaniu pewnych sztucznych (wirtualnych) światów, to czy otaczający nas realny świat nie jest zorganizowany jednak ma modłę teorii idei…? Być może zatem platońskie idee autentycznie istnieją, podobnie jak istnieją wzorce/klasy odpowiedzialne za tak realistyczne i efektywnie konstruowane artefakty…?

    Pozdrawiam wszystkich i zachęcam do spontanicznej rozmowy…

    • Odpowiedź D), do której faktycznie się skłaniam, rozumiem właśnie w duchu wskazanym przez dr. Stacewicza. Zakładam istnienie wspólnego, bardziej podstawowego, kulturowego wzorca dla Platonizmu, rzemiosła, projektowania, programowania, czy też innych, nie rozważanych tu jeszcze dziedzin.

      Wyraźną przewagę odpowiedzi D) nad odpowiedzią B) dostrzegałbym tylko wtedy, gdybyśmy przyjęli następujące, skrajne sformułowanie tej drugiej: twórcy języków programowania swoje koncepcje przejęli wprost od Platona (i/lub innych filozofów), choć w sposób nieuświadomiony.

      Byłbym jednak ostrożny przy traktowaniu dostrzeżonej tu analogii jako argumentu potwierdzającego słuszność teorii idei w odniesieniu do ontologicznej struktury świata. Na pewno idee jako wzorce dobrze sprawdzają się przy opisie świata (choć trzeba pamiętać, że taki opis ma też wielu przeciwników), podobnie jak klasy świetnie sprawdzają się przy modelowaniu sztucznych (bardzo uproszczonych) światów. Nie znaczy to chyba jednak, że świat rzeczywisty musi być urządzony wedle podobnej struktury. Z historii nauki znamy przecież wiele przykładów modeli, które bardzo dobrze odpowiadały obserwacjom, dzięki czemu (choć nie tylko) utrzymywały się przez wieki, ale ostatecznie okazały się błędne.

      Choć sam intuicyjnie skłaniam się ku jakiejś formie idealizmu, nie potrafię uznać rozważanych tu podobieństw za mocny argument przemawiający na korzyść takiej teorii. Dlatego wybieram ostrożną (być może zachowawczą) odpowiedź D), która nie rozstrzyga ostatecznie, czy to wspólne podłoże – model wzorca i kopii, pojawiający się w wielu różnych obszarach ludzkiej aktywności – stanowi ontologiczną własność świata, czy też jest wyłącznie cechą ludzkiego umysłu (który oczywiście do świata należy).

  2. km pisze:

    Slajdy omawiane na seminarium (w szczególności rozróżnienie dwóch modeli programowania obiektowego – opartych na klasach i prototypach) od razu przypomniały mi „Pisma Semantyczne” Rudolfa Carnapa – w których przedstawiono m. in. „projekt” sposobu rozważania/rozwiązywania rozmaitych problemów znajdujący się (mniej więcej) pośrodku pomiędzy Platońskim a programistycznym ujęciem.
    – Wydaje mi się, że to właśnie w tam – u Carnapa a nie u Platona (i oczywiście nie wśród programistycznych metod) – znalazła się pierwsza tak TRAFNA próba ‘sformalizowania’ zasadniczego problemu, który się tutaj rysuje. CELNA – bo mimo niezwykłej intelektualnej systematyczności wywodu Carnapa nie może on rozstrzygnąć „pierwszeństwa” ‘intensji’ („idealnej” cechy) i ‘ekstensji’ (zbioru „prototypów”) w definiowaniu pojęć (z których konstruujemy znaczące dla nas problemy) tak by optymalnie i jasno odnaleźć (logiczne) sposoby ich rozwiązania
    – nie grzęznąc w ślepych uliczkach (pseudo-problemów i błędów działań/przekształceń/inferencji/rozważań wynikłych z nietrafnych odwzorowań i błędnego rozumienia znaczenia poszczególnych pojęć).

    Zasadniczy problem o jakim mowa rzutuje na
    „podobne modele myślenia, które ujawniły się w różnych czasach, w wydawałoby się bardzo odległych od siebie dyscyplinach”
    – i to, że konsekwencje podobieństwa konstrukcji umysłów (nawet filozofów i programistów) jak i „kulturowe zapośredniczenie” są wzajemnie uwikłane – napędzając się wzajemnie, podtrzymując w pochodzie poznania i rozumienia rzeczywistości (analogicznie do Hellerowskiej „logiki zapętleń” naukowego postępu).

    Wzajemne uwarunkowanie – logiczne koło ‘intensji’ i ekstensji’ wynika z tego jak „dana nam” jest Rzeczywistość – z tego, że Rozum poznający Świat nie ma możliwości wglądu do domniemanego Platońskiego uniwersum idei a jedynie możliwość pomiaru regularności w przejawianiu się fenomenów w Rzeczywistości. Przystające bodźce odbierane przez sieci neuronowe (w ramach których funkcjonują ludzkie umysły) wywołują (w określonych okolicznościach) podobne reakcje tych sieci łowiących manifestujące się w/w prawidłowości.
    Powtarzające się reguły działania określają ‘rozumienie’ pojęć jakimi wyrażamy w komunikacji to co dzieje się w naszych strukturach neuronalnych – nawet gdy rozmawiamy o obserwacji „gołych” danych zmysłowych wymieniamy się informacjami posiadającymi „właściwe” znaczenie. To po-rozumienie wynikłe z podobieństwa ustrojów i mózgów (i „realnie manifestujacych” się „praw fizyki” oraz „reguł przetrwania”) ale i ze społecznych okoliczności w jakich przetwarzamy znaczenie – one także określają reguły w jakich rozwiązujemy problemy – i to jakie znaczenie uznajemy „właściwe”.

    To (analogiczne) nierozstrzygalne problemy wzajemnie określających się w umysłach
    – własności i zbiorów pomiarów
    oraz
    – indywidualnych reprezentacji umysłowych znaczenia poszczególnych pojęć i uspołecznionych reguł ich rozumienia.
    Wszystko to funkcjonuje bez możliwości sprawdzenia czy u podstaw znajdują się matematyczne idee wprawiające w ruch mechanizmy Rzeczywistości stanowiące racje ostateczną naszych rozmyślań.
    Obserwowana skuteczność matematycznego opisu Rzeczywistości i doszukiwania się idealnych własności w skończonych zbiorach pomiarów – skutkujące skłonnością tworzenia metafor, metionimi i rozmaitych analogi w sposobach rozwiązywania problemów bardzo od siebie odległych – mogłaby skłaniać nas do wniosku o realności idej – gdyby założenie ich istnienia nie było wstępnie „hardware’owo” „zaimplementowane” w konstrukcji struktur neuronalnych naszych umysłów.

    • km pisze:

      Z podobnych spostrzeżeń (jak czysty umysł miałby przyporządkowywać do zbiorów bez wcześniejszego określenia cechy wspólnej?) Fodor w „L.O.T.” 1 i 2 wnioskował istnienie wrodzonego języka myśli.
      I analogicznie
      – także jego pomysł na to, że w strukturach neuronalnych jest już wrodzone/zaprojektowane w momencie urodzenia/ „miejsce” (funkcjonalne struktury będące nośnikiem ‚znaczenia’) dla wszelkich pojęć, także np. elektronu (choć minie wiele lat nim noworodek o takowym usłyszy)
      – jest chyba jednak w istocie anty-Platonski (gdyż „pierwotna idea” jest umocowana na empirycznie regularnym funkcjonowaniu egzemplarzy neuronalnych systemów, a po-rozumienie wynika z podobieństwa postępowań zgodnych z regułą użycia danego pojęcia przez komunikujących się ludzi).

    • KM pisze: „Wszystko to funkcjonuje bez możliwości sprawdzenia czy u podstaw znajdują się matematyczne idee wprawiające w ruch mechanizmy Rzeczywistości stanowiące racje ostateczną naszych rozmyślań.”
      Właśnie dlatego, inaczej niż dr Stacewicz oraz dr Strzelecki, przyjąłem ostrożne stanowisko D), które dostrzegając owe analogie, nie orzeka ostatecznie o ich przyczynie (choć sam sympatyzuję z ontologicznym idealizmem).
      Dziękuję również za zwrócenie uwagi na prace Carnapa. Zaznaczę tylko, że moje odwołanie się do filozofii Platona nie wynika z przekonania, iż stanowi ona najtrafniejszy opis struktury rzeczywistości i procesu ludzkiego poznania, lecz z faktu, że jest to jedna z najbardziej wpływowych, jeśli nie najbardziej wpływowa koncepcja filozoficzna w kulturze europejskiej i jako taka ma największe szanse oddziaływania (często nieuświadomionego) na inne dziedziny.

  3. dr inż Jarosław Strzelecki pisze:

    Żałuję, że nie miałem okazji wysłuchać referatu, a są to zagadnienia, które żywo mnie interesują.

    1. Chciałbym poruszyć wątek bardziej filozoficzny niż obiektowo-filozoficzny.
    Otóż wydaje mi się, że dr Jernajczyk wciąż powraca do nowożytnego błędu filozoficznego, który przyjmuje różne formy, ale zawsze kończy się solipsyzmem, dałoby się ten błąd wyrazić w twierdzeniu, że przedmiotem poznanie może być wyłącznie ludzki konstrukt. Ta podstawowa i błędna zasada nowożytnego paradygmatu pojawia się w wypowiedzi dr Jernajczyka:
    ,,To, że podobne koncepcje mogą ujawniać się w różnych dziedzinach ludzkiej aktywności mówiłoby nam coś istotnego o sposobie działania ludzkiego umysłu, który według podobnych reguł ujmuje i rozwiązuje bardzo odległe problemy. Oznaczałoby to, że według podobnych reguł postrzegamy, organizujemy i opisujemy świat; w końcu według podobnych reguł tworzymy nasze modele rzeczywistości, co wcale nie oznacza, że są one prawdziwe.”
    A w komentarzach dr Jernarczyka owa zasada nabiera na sile.
    To, że w podobny poznawczy sposób odnosimy się do rzeczywistości, oczywiście nie gwarantuje nam, że budowane przez nas modele świata są prawdziwe, ale również nie gwarantuje nam fałszywości tych modeli. Jeżeli obiektowe myślenie o świecie, które ujawnia się w filozofii, rzemiośle i informatyce, wynika ze specyfiki działania naszego centralnego systemu nerwowego, to przecież sam ten system nerwowy jest – zgodnie z nowożytnym paradygmatem – wyłącznie naszym konstruktem i nic o tym, jaki jest naprawdę wiedzieć nie możemy.
    Jeżeli porzuci się błędną zasadę nowożytnego paradygmatu, to – i tu skłaniam się do stanowiska dr Stacewicza – pozostaje hipoteza, że obiektowe myślenie w filozofii i informatyce wynika z takiej a nie innej struktury rzeczywistości, choć nie koniecznie musi być to platońska ontologia.

    2. Pytanie do dr Jernajczyka: Czy zastanawiał się Pan nad możliwością animacji obiektów filozoficznych? Od jakiegoś czasu krąży po przepastnych pustkach mojego umysłu ( ;) ) idea filozofii in silico, w ramach której między innymi przeprowadzano by symulację sytuacji opisywanych przez twierdzenia filozoficzne.

    • 1. Bardzo dziękuję za tę uwagę, choć przyznam, że trochę mnie ona zaskoczyła, gdyż nigdy nie dostrzegałem u siebie skłonności do solipsyzmu ;)
      Jestem tylko ostrożny w twierdzeniu, że ludzkie modele trafnie opisują świat (w którego obiektywne istnienie wcale nie wątpię). Być może tę swoją ostrożność zaakcentowałem tutaj zbyt mocno, przez co zostałem posądzony o solipsyzm. Pracując dalej nad tym zagadnieniem, postaram się równomierniej rozkładać akcenty :)

      Moim zdaniem rozważane tu podobieństwa w filozofii, informatyce i w projektowaniu, mogłyby stanowić argument zarówno za istnieniem konkretnej struktury ontologicznej rzeczywistości, jak i przemawiać za specyficznym sposobem działania ludzkiego umysłu (który wcale nie musi zachowywać się analogicznie do innych elementów świata).
      Ponieważ nie mam pewności co do przewagi żadnej z tych argumentacji, wolałem skupić się na analizie samych podobieństw, nie przesądzając do końca, co one oznaczają. Dlatego też przyjąłem bezpieczne stanowisko D).

      2. Jest to temat, który bardzo mnie interesuje. W swojej pracy badawczej i artystycznej zajmuję się głównie dynamiczną wizualizacją problemów filozoficznych i naukowych (choć pojęcie wizualizacji nie jest tu może najtrafniejsze). Przykłady takiego podejścia znaleźć można tutaj:
      http://www.grapik.pl/grapik-pl/projekty-badawcze/wizualizacja-zagadnien-naukowych/
      http://www.grapik.pl/grapik-pl/wp-content/uploads/2018/03/MT_15_BS-JJ.pdf
      http://www.grapik.pl/grapik-pl/prace-artystyczne/obraz-wyczerpujacy/
      Z dr. B. Skowronem pracujemy również nad zagadnieniem dynamicznej teorii idei, w opisie której animowany obraz odgrywał będzie istotną rolę.

      Dziękuję za cenne uwagi i pozdrawiam serdecznie

  4. Jarek pisze:

    Prelegent bardzo łaskawie przypisał „platońskość” współczesnym językom programowania, a „obiektowość” (w znaczeniu, jakiego używa się przy klasyfikacji tych języków) przypisuje również wizualnym interfejsom. Może nieco na wyrost – i nad tym się zastanówmy.

    „Jeśli chcemy utworzyć nowy symbol, który zachowuje wybrane cechy danego symbolu, ale dodaje lub zmienia jego inne cechy, wystarczy utworzyć duplikat istniejącego symbolu, który następnie można modyfikować, nie zmieniając oryginału” – pisze Autor. Takie rzeczy zachwycały sekretarki na przełomie lat 70/80. Mając najprostszy edytor tekstu łatwo mogły utworzyć duplikat wcześniejszego listu do zarządu firmy Copy&Paste Ltd. w sprawie oferty sprzedaży kserokopiarek, zmienić w nim parę słów i otrzymać tekst oferty na meble biurowe dla przedsiębiorstwa Jakmutam Sp. z o.o.

    Języki programowania również przechodziły przez ten etap, kiedy to duplikacji fragmentów kodu nie dało się uniknąć. Było tak wczesnych we dialektach BASIC-a, a również na początku rozwoju języka FORTRAN, uznawanego z apoważne narzędzie. Czy jest w tym jakaś „obiektowość”? Chyba nie.

    Współczesne sekretarki wiedzą co to jest „korespondencja seryjna”. Potrafią w pakiecie biurowym stworzyć szablon listu, w jego części stałej oznaczyć fragmenty zmienne, połączyć to z prostym zbiorem danych zgromadzonym w arkuszu kalkulacyjnym, a następnie wydrukować kilkaset różnych zawiadomień o walnym zgromadzeniu towarzystwa. Każde z imieniem, nazwiskiem, właściwą formą grzecznościową. A także przypomnieniem o składkach członkowskich z podaniem wielkości zaległości (w listach do sumiennych członków cały akapit będzie pominięty). Czy to jest obiektowość? Nie, jeszcze nie. W językach programowania takie cechy maja języki funkcyjne – do raz napisanej funkcji można wiele razy przypisać wcześniej określone parametry i wykonać ją.

    Gdzie zatem szukać obiektowości w językach programowania (albo w parajęzykach, takich jak środowisko graficzne Adobe)? Definicji i opisów tego paradygmatu można znaleźć wiele, lepszych lub gorszych, mniej lub bardziej dokładnych. Niestety bardzo często są one źle rozumiane.

    Pozwolę sobie teraz na odwołanie do treści slajdów. Na stronie 4 mamy nazwę funkcji (metody) „ObliczPole()”. Tak nigdy nie napisze dobry programista, nie użyje takiej nazwy, nie powiąże bezpośrednio tego typu obliczeń z interfejsem klasy! Bo czy kwadrat albo koło (jako „platońskie” figury) muszą mieć obliczane pole? Nie, one je po prostu mają. Czy zawsze znamy z góry długość boku kwadratu albo promień koła? Nie jest to konieczne, jeśli tylko znamy pole. W prawidłowo opisanych klasach języków obiektowych zaciera się różnica między danymi a wynikami obliczeń. Jest tak, jak w obiektach świata rzeczywistego. Można obiektowi „kwadrat” przypisać pole równe 4, a od razu jego własność nazwana „bok” będzie miała wartość 2. Jeśli programista (użytkownik klasy) zrobi odwrotnie, napisze, że „bok” jest równy 3, to pole będzie 9. Będzie – nie trzeba nigdzie pisać co ma zostać obliczone.

    To jest jeden z przykładów hermetyzacji wspomnianej na poprzednim slajdzie. Użytkownik klasy nie musi wiedzieć co jest liczone, które właściwości przy danym użyciu są pierwotne, a które wtórne. Przykład oczywiście skrajnie prosty, bo w realnej praktyce programistycznej wewnątrz klas mogą być rozwiązywane układy wielu równań. Rozwiązywane albo nie – bo jeśli któraś z własności obiektu ani nie została podana, ani nie da się jej obliczyć, będzie miała wartość „null” – co też jest dobrą analogią do obiektów świata rzeczywistego, bo przecież nie zawsze wszystko o nich wiemy.

    • Dziękuję za kolejny interesujący głos i od razu przepraszam, że odpowiadam po tak długiej przerwie.

      Jak już podkreślałem w poprzednich wpisach, podczas seminarium nie miało szansy dostatecznie wybrzmieć to, iż głównym obszarem moich zainteresowań są podobieństwa pomiędzy mechanizmami poznawczymi, obecnymi w różnych dziedzinach ludzkiej aktywności.
      Pracując w ostatnich miesiącach nad tym zagadnieniem, dookreśliłem podłoże wskazywanego tu podobieństwa, jako „zasadę wzorca i kopii”, która odgrywa nie tylko fundamentalną rolę w informatyce i filozofii Platona, ale również w tradycyjnym rzemiośle, technice, nowoczesnym projektowaniu a także w sztuce.
      Z tej perspektywy w programowaniu obiektowym interesuje mnie najbardziej struktura klas i obiektów (bądź prototypów). Zdaję sobie sprawę z tego, że sama ta struktura nie wyczerpuje definicji paradygmatu programowania obiektowego i w różnych formach funkcjonowała już we wcześniejszych stadiach rozwoju języków programowania. Dlatego też, w dużej mierze dzięki głosom uczestników seminarium oraz dyskusji na blogu, wskazuję obecnie raczej na pewne cechy współczesnych języków programowania, niż wprost na programowanie obiektowe.

      Ponieważ interesują mnie głównie pewne archetypy myślowe, nie mogę traktować przykładu z sekretarkami jako zarzutu, lecz przeciwnie – jako potwierdzenie upowszechniania się i skuteczności zasady wzorca i kopii. Nie jestem natomiast pewien, czy wybrane cechy programowania, lub szerzej – projektowania obiektowego, nie przenikały stopniowo na inne obszary zastosowań, i to, co stanowi typowy arsenał umiejętności współczesnej sekretarki, byłoby możliwe gdyby ewolucja języków programowania podążyła inną ścieżką. I nie chodzi mi tu o rzecz oczywistą, że aplikacje użytkowe powstają dziś najczęściej w obiektowych językach programowania, lecz o to, że pewne elementy „filozofii obiektowości” (jeśli kogoś razi taki zwrot, proszę go zastąpić „filozofią programowania”) zostały przeniesione również na poziom efektywnego posługiwania się tymi aplikacjami z poziomu interfejsu użytkownika (dotyczy to oczywiście również aplikacji służących do projektowania i edycji grafiki).

      W pełni zgadzam się z ostatnią uwagą. Nazwa metody „ObliczPole()” demaskuje mnie jako amatora w zakresie programowania obiektowego :)

      • Jarek pisze:

        Ja w takim razie, skracając przerwę do minimum, odpowiem takim oto przykładem:

        Gdybym w języku obiektowym miał zająć się figurami takimi jak w przykładzie z referatu, to bym stworzył klasę „WielokątForemny”. Wśród właściwości opisujących obiekt należący do tej klasy znajdą się długość boku oraz pole wielokąta – tak jak w przykładzie ze slajdów. Będzie też liczba boków – dodanie tej własności spowoduje, że nie tylko kwadraty, ale trójkąty równoboczne, takież pięcio-, sześciokąty i inne platońskie figury płaskie będą w tej klasie reprezentowane. Nawet koło będzie miało reprezentację – jeśli własności „liczba boków” przypiszemy wartość „nieskończoność” (lub jak niektórzy wolą, „alef 0”). W językach obiektowych naturalne jest tworzenie takich typów danych, które poza „normalnymi” liczbami kojarzonymi zazwyczaj z obliczeniami komputerowymi, zawierają również symbole w rodzaju „nieskończoność”. Żeby był komplet, do własności dodam jeszcze „promień wielokąta”, czyli odległość wierzchołka od środka ciężkości figury.

        Już jesteśmy blisko obiektowego raju, dającego swobodę w operowaniu wielokątami (w zastosowaniach graficznych, ale nie tylko). Dodajemy do klasy metodę, która zmienia liczbę krawędzi, zachowując pola figury. Możemy stworzyć kwadrat o boku 2, a następnie przekształcić go w sześciokąt o takim samym polu, który „świeci” (jak mówią graficy komputerowi) tak samo, jak poprzednia figura. Jeśli stworzę koło o promieniu 1, a następnie zamienię tą samą metodą liczbę boków z nieskończoności na 4, to dokonam obiektowej kwadratury koła. O takich rzeczach, to się (kiedyś) filozofom nie śniło!

        Przykład ten ilustruje łatwość tworzenia klas obiektów w językach programowania (a nawet bez nich, bo ja przecież użyłem wyłącznie naturalnego języka polskiego), a także wielką moc jaka tkwi w tym podejściu. Natomiast jestem bardzo sceptyczny co do porównania powyższego (łatwości i mocy) z tym, co udało się zaimplementować do interfejsu użytkownika – czyli „UI”, albo „User Interface”. A już zwłaszcza do GUI (Graphic User Interface). Zresztą te dwa ostatnie angielskie terminy są w tej chwili passe – teraz nazywa się to UX, czyli „User eXperience” i pretenduje do bycia odrębną dyscypliną nauk okołoinformatycznych (IT).

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *