🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.objects
Article #13776

Algorytmy + struktury danych vs obiekty

#13776
From: Przemek Pokrywka
Date: Tue, 17 Jan 2006 21:44
79 lines
5149 bytes
Korzystając z chwilki wolnego czasu, pragnę ustosunkować się do 
następnych fragmentów Pana bardzo interesującej wypowiedzi.
Zgadzam się z Panem, że prowadzenie szerokiej dyskusji w jednym wątku 
jest trudne, dlatego też odpowiedź na drugą część postu opublikuję już 
pod innym tematem.

Redart napisał(a):
>>> To nie ma po prostu żadnego przełożenia na rzeczywistość.
>>>
>>> Mamy nóż i mamy chleb.
>>
>> [...]
>>
>> To dosyć oryginalne obiekty w systemie informatycznym :)
> 
> 
> No to weźmy program źródłowy i skaner(analizator syntaktyczny).
> Analogia jest bardzo bliska - drugi "umie" ciąć ten pierwszy - i
> robi to wg. bardzo prostych, w dużym stopniu niezależnych od cietej
> materii zasad: wyłapuje liczby, identyfikatory a tnie np. po białych 
> znakach.

Przedstawiony przez Pana przykład daje się bardzo ładnie zaprojektować z 
wykorzystaniem obiektów, a nie tylko przy pomocy "mądrego algorytmu" 
(skanera) i "głupiej struktury danych" (programu źródłowego).
W rozwiązaniu obiektowym użyłbym wzorca Builder (GoF). Treść programu 
potraktowałbym jako swojego rodzaju "zserializowaną" reprezentację 
pojedynczego obiektu (jednostki kompilacji), składającego się z wielu 
innych złożonych (klasy, metody) i prostych (liczby, identyfikatory) 
podobiektów. Moim zdaniem, taki obiektowy projekt oferuje lepsze 
możliwości zarządzania sobą samym (dzięki swoiście pojętemu zastosowaniu 
metody "dziel i rządź).

Również przypadek człowieka, który operuje narzędziem nie wydaje mi się 
z marszu idealnym kandydatem do zastosowania projektu typu "algorytmy + 
struktury danych" - nie kwestionując przy tym faktu, że cała 
inteligencja potrzebna do wykonania operacji właściwa jest 
_człowiekowi_. Wadą zamodelowania tej inteligencji przez algorytm 
(pozbawiony własnego stanu) jest nieuwzględnienie np. stanu 
emocjonalnego człowieka, przez który może on operować narzędziem 
nieprecyzyjnie, jak również jego umiejętności w posługiwaniu się tym 
narzędziem. Projektując obiektowo, człowieka zamodelowałoby się jako 
obiekt złożony z innych obiektów, jak jego nawyki, umiejętności oraz 
stan emocjonalny, z których każdy miałby swój udział w operowaniu 
narzędziem.

Jeszcze odnośnie podziału logiki (inteligencji) pomiędzy ludzi a 
narzędzia - rzadko bywa, że skupienie całej logiki w obiekcie nadrzędnym 
(człowiek) kontrolującym obiekt podrzędny (narzędzie) ma największy 
sens. Najczęściej pożądane jest, aby narzędzie wykazało się mniejszą lub 
większą inteligencją, żeby odciążyć człowieka od uciążliwego pamiętania 
o najdrobniejszych szczegółach. Weźmy ekspes do kawy - wystarczy 
nacisnąć w nim przycisk, by do podstawionej filiżanki nalał on 
aromatycznej kawy ze świeżo zmielonych ziaren. Jest to narzędzie 
inteligentne, służące tą inteligencją człowiekowi, który nie musi sam 
mielić ziaren, dodawać ich w odpowiedniej proporcji do filiżanki, 
gotować wody, by zalać nią kawę i odfiltrowywać fusy. Być może czynności 
te potrafią dać wiele radości i relaksu osobie dysponującej wolnym 
czasem, a i kawa może smakować lepiej, bo do jej przygotowania włożono 
serce, ale projektantowi spieszącemu się wypróbować nowe pomysły będą 
tylko kulą u nogi.
I tak dla mnie, co prawda skupienie całej logiki w obiekcie nadrzędnym 
bywa uzasadnione w określonych przypadkach, to jednak na codzień jest to 
zjawisko niekorzystne - bo obiekt nadrzędny zmuszony jest do zajmowania 
się niepotrzebnymi mu detalami.

> 
> Do kompilatora zintegrowanego ze środowiskiem uruchomieniowym jednak
> jeszcze baaardzo daleko.

to prawda - jaki jednak ma z tego płynąć wniosek?

> Zupełnie ktoś inny decyduje o tym , co dokładnie
> kroić (podstawia chleb pod nóż) i kiedy. A także odpowiada na pytania
> "po co", "co dalej".

Tak jest. Jak już jednak wspomniałem odrobinę wyżej, inteligencja 
narzędzia bywa najczęściej pomocna (choć w wyjątkowych sytuacjach bywa 
też, że przeszkadza).
Technical Details
Message-ID: <dqjogl$ge7$2@news.onet.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mail
References: <dn7emu$ke3$1@news.onet.pl> <slrndpo7kg.a7o.nobody@localhost.localdomain> <dnhavr$olf$1@news.onet.pl> <dnn919$ebu$1@news.onet.pl> <do1mpu$a5a$1@news.onet.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mail
From: Przemek Pokrywka <adres@zastrzezony.com>
Newsgroups: pl.comp.objects
Subject: Algorytmy + struktury danych vs obiekty
Date: Tue, 17 Jan 2006 22:44:52 +0100
Organization: Onet.pl
Lines: 79
Message-ID: <dqjogl$ge7$2@news.onet.pl>
References: <dn7emu$ke3$1@news.onet.pl> <slrndpo7kg.a7o.nobody@localhost.localdomain> <dnhavr$olf$1@news.onet.pl> <dnn919$ebu$1@news.onet.pl> <do1mpu$a5a$1@news.onet.pl>
NNTP-Posting-Host: 041.inet.polhost.pl
Mime-Version: 1.0
X-Trace: news.onet.pl 1137534293 16839 80.48.120.41 (17 Jan 2006 21:44:53 GMT)
X-Complaints-To: usenet@news.onet.pl
NNTP-Posting-Date: Tue, 17 Jan 2006 21:44:53 +0000 (UTC)
X-Sender: 5aB4pqMdeQG1O30L902dNmlAzoKeNKcS
In-Reply-To: <do1mpu$a5a$1@news.onet.pl>
X-Accept-Language: pl, en-us, en
User-Agent: Mozilla Thunderbird 1.0.2 (Windows/20050317)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit