To je dobre ze tomu nekdo jako ty rozumi.
Vysvetli mi tedy
- svoji definici oop
- priklad systemu co hodne lidi zna co je oop
- na ktery pripady bys pouzil oop jestli vubec
- kterej programovaci jazyk je skutecne oop. Nebo kterej byl jestli vubec kdy byl
- objekt jako černá krabička, která může mít stav, přijímá a vysílá zprávy, pomocí nichž interaguje s okolím; množina zpráv na něž reaguje a způsob jak tak činí je čistě v gesci objektu (může se to v čase i měnit)
- použil bych ho u problémů, které se přirozeně rozpadají na autonomní podproblémy a je účelné je na tyto autonomní jednotky separovat z důvodů přehlednosti, substituovatelnosti, znovupoužitelnosti a testování
- Smalltalk
Diky, od toho se da odpichnout.
Objekt jako cerna krabicka prijimajici a vysilajici zpravy.
Zastavi se zbytek sveta v case zatimco jeden objekt zpracovava zpravu?
Pokud jo, pak je to oop ve smyslu synchronni simulace. Smalltalk to splnuje. Java a CPP, pokud si odmyslim tu michaninu objektu a modulu, tak taky.
Pokud kazdej objekt funguje nezavisle, tj. ve vlastnim vlakne, s tim ze jeden objekt neblokuje ostatni, tak se tomu rika mimo jine asynchronni simulace, actor model, reaktivni programovani?, gen_server, erlang nebo mikrojadro operacniho systemu.
Alan Kay nekde zminil explicitni cas, proto rikam, ze to co tim svym oop myslel, nikdo nechape. Proto druha otazka. Jak je definovan cas v tomhle oop?
Nejaky systemovy hodiny? Pak je to obycejna real time simulace. Taky se tomu rika operacni system.
Nebo explicitne definovanej cas? Pak se daji vsechny zpravy ktery objekty prijimaji a odesilaji reprezentovat jako data s explicitnim timestampem. Jediny co ukladas jsou tyhle zpravy. To co pak provedou s vnitrnim stavem objektu muzes vzdycky prehrat od zacatku pokud si uchovas log tech zprav. Rika se tomu event sourcing, v databazich write ahead logging, journaling.
A ted moje definice oop. Oop jak ho lidi chapou je management stavu systemu v case. Stav je explicitne ulozen v pameti/disku/databazi a prichozi a odchozi zpravy jsou prchave, tj. fire and forget. Jinak receno staticky pohled na system a da se modelovat pomoci treba UML.
Dualem tohoto pohledu je explicitni uchovavani zprav/eventu v pameti/disku/databazi a stav objektu je prchavy, protoze muze byt vzdy prehran od zacatku historie diky tomu, ze je ulozen log vsech modifikaci jeho stavu. Jinak receno data flow pohled na system.