OOP a servisní třídy

kimec

Re:OOP a servisní třídy
« Odpověď #75 kdy: 27. 06. 2017, 13:44:47 »
A teraz mi prosim vysvetlite, ako inak sa da v class based jazyku vytvorit "servisny objekt" bez tej "servisnej triedy", ktora je "jen pouhá šablona" s jeho implementaciou?
V class based jazyku musíš vytvořit třídu, v ostatních nemusíš. Výsledkem je v obou případech servisní objekt.
OK, tak dufam Sherlock, ze teraz je uz vyznam spojenia "servisna trieda" jasny.

Apropo tie ostatne jazyky, ktorym ste sa tak laskavo vyhli.. ci to nahodou nebude tak, ze v ostatnych jazykoch existuju ine prostriedky na odizolovanie concernov. Napriklad si neviem celkom predstavit, kto by potreboval servisy vo funkcionalnych jazykoch a na co a co by to vlastne bolo, keby to nebol "objekt", ze.

Etymologicke okienko:

Namiesto "servisneho objektu" vam odporucam osvojit si spojenie "instancia servisu". Je to prenositelne medzi domenami aj jazykmi a implikuje to jedinecnost a temporalnost bez silnej vazby na objektovo orientovane programovanie.
Kolegovia vam podakuju - ja by som napriklad za spojenie "servisny objekt" fackal, ale ako som uz spominal pri inej teme, studoval som prirodzene jazyky, tak mam taky lahky fetish.


Kit

Re:OOP a servisní třídy
« Odpověď #76 kdy: 27. 06. 2017, 14:43:46 »
A teraz mi prosim vysvetlite, ako inak sa da v class based jazyku vytvorit "servisny objekt" bez tej "servisnej triedy", ktora je "jen pouhá šablona" s jeho implementaciou?
V class based jazyku musíš vytvořit třídu, v ostatních nemusíš. Výsledkem je v obou případech servisní objekt.
OK, tak dufam Sherlock, ze teraz je uz vyznam spojenia "servisna trieda" jasny.

Apropo tie ostatne jazyky, ktorym ste sa tak laskavo vyhli.. ci to nahodou nebude tak, ze v ostatnych jazykoch existuju ine prostriedky na odizolovanie concernov. Napriklad si neviem celkom predstavit, kto by potreboval servisy vo funkcionalnych jazykoch a na co a co by to vlastne bolo, keby to nebol "objekt", ze.

Etymologicke okienko:

Namiesto "servisneho objektu" vam odporucam osvojit si spojenie "instancia servisu". Je to prenositelne medzi domenami aj jazykmi a implikuje to jedinecnost a temporalnost bez silnej vazby na objektovo orientovane programovanie.
Kolegovia vam podakuju - ja by som napriklad za spojenie "servisny objekt" fackal, ale ako som uz spominal pri inej teme, studoval som prirodzene jazyky, tak mam taky lahky fetish.

Bavíme se o objektových jazycích - neměl jsem důvod do toho zahrnovat funkcionální.

Servisní třídy obvykle nedávají smysl, protože v takových bývá jen hromada nesouvisejících funkcí. Nevidím důvod, proč by taková hromada měla být v jedné třídě. Dá se pochopit třída Math, ale takových tříd moc není.

kimec

Re:OOP a servisní třídy
« Odpověď #77 kdy: 27. 06. 2017, 15:50:55 »
To já samozřejmě znám, ale nějak mi nejde přes pysky "servisní třídy". Rozuměl bych "servisním objektům". V programu totiž třída ztrácí smysl, je to jen pouhá šablona layoutu výsledného objektu a nějakých drobností kolem (jako tabulka vt)
Pozor, tohle rozhodně neplatí o všech jazycích. Ve slušném objektovém systému je třída také normální entita (objekt).

O důvod víc, proč tomu říkat raději "servisní objekt" nebo ve větším měřítku "servisní vrstva".

Svata prostoto. To, ze sa Magda nevie vyjadrovat jednoznacne a neupresnila programovaci jazyk, nechame bokom, ale ak Magda v oboch svojich prispevkoch spomenula podstatne meno zenskeho rodu trieda, myslite si, ze hovorila o implementacii sluzieb (v najsirsom slova zmysle) v:

a) prototypovom jazyku
b) pure funkcionalnom jazyku
c) class based jazyku (cough, cough, trieda) <--------------------- SPRAVNA ODPOVEDtm

A teraz mi prosim vysvetlite, ako inak sa da v class based jazyku vytvorit "servisny objekt" bez tej "servisnej triedy", ktora je "jen pouhá šablona" s jeho implementaciou?

...makes you wonder.

S termínem servisní třída mám problém, protože ho neznám. Pokud jde o nějakou knihovnu bezstavových operací, tak spíš než třídu používám normální namespace. Chápu tedy, že v jazycích, které nemají namespace musím toto zabalit do třídy. Tomu bych rozuměl.

To co já nazývám servisními objekty, nebo často servisními interfacemi jsou objekty/interface, které obsahují hromadu metod, které spolu moc nemusí souviset, některé jsou stavové, jiné bezstavová, často jsou tam továrny. Zahrnutí do interface má ten význam, že skrývám implementaci, buď proto, že nechci aby byla vidět, nebo většinou proto, že v tom místě není definována (je dodána později). To třeba umožňuje nahradit skutečnou implementaci mockupem.

Servisní objekt skrze interface se buď předává do funkčních objektů přes konstruktor, někdy je dodáván později, někdy se dá za běhu změnit, záleží na typu objektu. Někdy jej mám globální nebo thread lokální, pokud jde o něco hodně základního. Třeba logovací service je zpravidla thread lokální, abych služby logování měl k dispozici všude a abych si nemusel logovací objekt předávat mezi objekty do zblbnutí.

Thread lokální objekty nadále neztrácí možnost funkcionalitu dočasně změnit, třeba v rámci následujícího volání mohu chtít změnit logovacího objektu, a po návratu z vrátím stav služby do původního stavu.
Nespomenuli ste uz len visitora.

Pri servise nejde o bezstavovost - zakladnym charakterom servisu je vytiahnutie concernu (v zmysle odizolovat starost) do nejakej ciastkovej, samostatne uchopitelnej, pochopitelnej a manazovatelnej (zlyhatelnej) jednotky, co samo sebou nejaky ten stav implikuje. Viete, ako ked si firma najme upratovaci servis alebo si spustite nginx na serveri. Ak je nieco bezstavove a nezlyhatelne, tak by som to nazval funkcia a nech je trebars aj v tom vasom namespace.

Myslim si, ze Magda hovorila o konkretnom jazyku a konkretnom sposobe implementacie servisov v nom prostrednictvom tried.

Ale ved kludne napiste aky privlastok by ste pouzili pre triedu, ktora popisuje implementaciu servisu, ktory by mal mat nejaky ten stavicek a mal by riesit nejaky konkretny concern a pristupovali by ste k nemu cez interface.

Kit

Re:OOP a servisní třídy
« Odpověď #78 kdy: 27. 06. 2017, 16:14:16 »
Myslim si, ze Magda hovorila o konkretnom jazyku a konkretnom sposobe implementacie servisov v nom prostrednictvom tried.

O kterém jazyku?

kimec

Re:OOP a servisní třídy
« Odpověď #79 kdy: 27. 06. 2017, 16:26:18 »
Myslim si, ze Magda hovorila o konkretnom jazyku a konkretnom sposobe implementacie servisov v nom prostrednictvom tried.

O kterém jazyku?
O takom, kde sa na implementaciu servisov pouzivaju triedy. Je to vidiet tu a tu.


BoneFlute

  • *****
  • 2 047
    • Zobrazit profil
Re:OOP a servisní třídy
« Odpověď #80 kdy: 27. 06. 2017, 21:53:56 »
Pri servise nejde o bezstavovost - zakladnym charakterom servisu je vytiahnutie concernu (v zmysle odizolovat starost) do nejakej ciastkovej, samostatne uchopitelnej, pochopitelnej a manazovatelnej (zlyhatelnej) jednotky, co samo sebou nejaky ten stav implikuje. Viete, ako ked si firma najme upratovaci servis alebo si spustite nginx na serveri. Ak je nieco bezstavove a nezlyhatelne, tak by som to nazval funkcia a nech je trebars aj v tom vasom namespace.

Celkem pěkná definice.

noef

  • *****
  • 897
    • Zobrazit profil
    • E-mail
Re:OOP a servisní třídy
« Odpověď #81 kdy: 28. 06. 2017, 07:12:00 »
A teraz mi prosim vysvetlite, ako inak sa da v class based jazyku vytvorit "servisny objekt" bez tej "servisnej triedy", ktora je "jen pouhá šablona" s jeho implementaciou?

V class based jazyku musíš vytvořit třídu, v ostatních nemusíš. Výsledkem je v obou případech servisní objekt.

Nevim jiste, jestli je to ten pripad o kterem se bavite, ale treba ve Scale se trida nutne explicitne nevytvari, programator vytvari "object" a to je uz ta instance (tridu za nej vytvori prekladac).

kimec

Re:OOP a servisní třídy
« Odpověď #82 kdy: 28. 06. 2017, 10:07:03 »
A teraz mi prosim vysvetlite, ako inak sa da v class based jazyku vytvorit "servisny objekt" bez tej "servisnej triedy", ktora je "jen pouhá šablona" s jeho implementaciou?

V class based jazyku musíš vytvořit třídu, v ostatních nemusíš. Výsledkem je v obou případech servisní objekt.

Nevim jiste, jestli je to ten pripad o kterem se bavite, ale treba ve Scale se trida nutne explicitne nevytvari, programator vytvari "object" a to je uz ta instance (tridu za nej vytvori prekladac).
Iste, aj v notoricky ukecanom triedovom jazyku Džavá, ktory tiez bezi na JVM, mozete mat anonymne triedy, ktore za vas dogeneruje kompiler.
Alebo este lepsie, pokial je vas servis vyjadritelny rozhranim s jednou metodou - je to tzv. SAM (single abstract method) rozhranie, tak cela implementacia takehoto servisu v Džavé moze byt vyjadrena jednou jedinou lambdou. V takom pripade kompiler dokonca ani triedu nevytvori. To sa odlozi na neskor a triedu vytvori Džavá az pri incializacii lambdy v bootstrap metode cez ASM kniznicu pocas runtime. Kazdopadne, konkretna trieda vznike a vznike aj najmenej jedna instancia lambdy (podla toho ci je bezstavova alebo potrebuje pristupovat do lexikalneho scope triedy v ktorej bola zadeklarovana a ci pristupuje k statickym alebo instancnym fieldom).

Som zvedavy ako by lokalni puristi nazvali implementaciu servisu cez lambdu. Servisna lambda? Ked pouzijete spojenie "instancia servisu", je vam jedno ci bol naimplementovany pomocou neanonymnej alebo anonymnej triedy alebo lambdy, ci je to lokalna instancia alebo bezi na druhej strane zemegule v Ruby a vy s nim komunikujete cez nejaky proxy po sieti.

Preto si myslim, ze Magda spojenim "servisna trieda" myslela konkretny jazyk a konkretny sposob implementacie servisov v nom. Jediny problem je, ze neuviedla, ktory jazyk.
Tak na 87% si myslim, ze Magda myslela Javu a Springovu aplikaciu s triedami anotovanymi @Service.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:OOP a servisní třídy
« Odpověď #83 kdy: 28. 06. 2017, 10:18:39 »
A teraz mi prosim vysvetlite, ako inak sa da v class based jazyku vytvorit "servisny objekt" bez tej "servisnej triedy", ktora je "jen pouhá šablona" s jeho implementaciou?

V class based jazyku musíš vytvořit třídu, v ostatních nemusíš. Výsledkem je v obou případech servisní objekt.

Nevim jiste, jestli je to ten pripad o kterem se bavite, ale treba ve Scale se trida nutne explicitne nevytvari, programator vytvari "object" a to je uz ta instance (tridu za nej vytvori prekladac).
Iste, aj v notoricky ukecanom triedovom jazyku Džavá, ktory tiez bezi na JVM, mozete mat anonymne triedy, ktore za vas dogeneruje kompiler.
Alebo este lepsie, pokial je vas servis vyjadritelny rozhranim s jednou metodou - je to tzv. SAM (single abstract method) rozhranie, tak cela implementacia takehoto servisu v Džavé moze byt vyjadrena jednou jedinou lambdou. V takom pripade kompiler dokonca ani triedu nevytvori. To sa odlozi na neskor a triedu vytvori Džavá az pri incializacii lambdy v bootstrap metode cez ASM kniznicu pocas runtime. Kazdopadne, konkretna trieda vznike a vznike aj najmenej jedna instancia lambdy (podla toho ci je bezstavova alebo potrebuje pristupovat do lexikalneho scope triedy v ktorej bola zadeklarovana a ci pristupuje k statickym alebo instancnym fieldom).

Som zvedavy ako by lokalni puristi nazvali implementaciu servisu cez lambdu. Servisna lambda? Ked pouzijete spojenie "instancia servisu", je vam jedno ci bol naimplementovany pomocou neanonymnej alebo anonymnej triedy alebo lambdy, ci je to lokalna instancia alebo bezi na druhej strane zemegule v Ruby a vy s nim komunikujete cez nejaky proxy po sieti.

Preto si myslim, ze Magda spojenim "servisna trieda" myslela konkretny jazyk a konkretny sposob implementacie servisov v nom. Jediny problem je, ze neuviedla, ktory jazyk.
Tak na 87% si myslim, ze Magda myslela Javu a Springovu aplikaciu s triedami anotovanymi @Service.
Instance třídy může být klidně funkce (zvlášť názorné to je u funktorů v C++) a naopak funkce (lambda výraz) si může držet kontext, čímž se chová jako instance třídy. Na ani ne moc abstraktní úrovni jde o jednu věc se dvěma názvy (a úhly pohledu). "Servisní" pak znamená třeba pomocná nebo "nepasuje do hierarchie". Nevím, proč se v tom hledá věda.

kimec

Re:OOP a servisní třídy
« Odpověď #84 kdy: 28. 06. 2017, 10:44:50 »
Nevím, proč se v tom hledá věda.
Asi preto, ze vas vyrok si moze dovolit povedat iba clovek z akademickeho prostredia, ktory sa tomu ako vede venuje a vie ho obhajit?

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:OOP a servisní třídy
« Odpověď #85 kdy: 28. 06. 2017, 10:57:48 »
Nevím, proč se v tom hledá věda.
Asi preto, ze vas vyrok si moze dovolit povedat iba clovek z akademickeho prostredia, ktory sa tomu ako vede venuje a vie ho obhajit?
Mně to přijde spíš jako řemeslo a v tomto případě je to diskuze analogická tomu, kolik andělů může tancovat na špičce jehly. Pojem servisní třída není nijak přesně definován, nanejvýš v rámci nějaké knihovny, kde si kdejaký Pepa může z prstu vycucat nic neříkající definici.

kimec

Re:OOP a servisní třídy
« Odpověď #86 kdy: 28. 06. 2017, 11:11:09 »
Nevím, proč se v tom hledá věda.
Asi preto, ze vas vyrok si moze dovolit povedat iba clovek z akademickeho prostredia, ktory sa tomu ako vede venuje a vie ho obhajit?
Mně to přijde spíš jako řemeslo a v tomto případě je to diskuze analogická tomu, kolik andělů může tancovat na špičce jehly. Pojem servisní třída není nijak přesně definován, nanejvýš v rámci nějaké knihovny, kde si kdejaký Pepa může z prstu vycucat nic neříkající definici.
Velmi pekna metafora.