Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - Mirek Prýmek

Stran: 1 ... 425 426 [427] 428 429 ... 618
6391
Vývoj / Re:Java - rozhraní, dědičnost a abstraktní třídy
« kdy: 18. 07. 2013, 09:18:56 »
Koncept zpráv samozřejmě není špatný, ale není to podstata OOP.
V podstate mas pravdu. Zpravy nejsou podstatou toho, co DNES vetsina lidi za OOP povazuje. Ovsem byly podstatou toho, co kdysi Kay pod pojmem OOP mel namysli, a porad jsou podstatou tech jazyku, kterym se obcas rika "opravdu objektove".

Jinak Kay bude urcite rad, kdyz mu napises email a vysvetlis mu, co to vlastne OOP je. Skoda, ze uz nezije pan Ford, mohl's mu taky napsat vysvetleni, co je to pasova vyroba :))

6392
Vývoj / Re:Java - rozhraní, dědičnost a abstraktní třídy
« kdy: 18. 07. 2013, 07:07:53 »
P.S. hodně zajímavě vypadá i Go. Že se úplně odstřihlo od všech bláznivin s dědičností, je odvážný krok správným směrem. A automatické ztotožnění interfejsů se stejným obsahem? No to je přesně to, co by člověk od rozumného jazyka očekával :)

6393
Vývoj / Re:Java - rozhraní, dědičnost a abstraktní třídy
« kdy: 18. 07. 2013, 07:04:30 »
Doporučuji k prostudování jako zajímavost. Totálně odlišný pohled na OOP, jaký představuje CLOS (Common Lisp Object System), může být pro otevřené hlavy v lecčems inspirující.
Mě už OOP přestalo bavit. A před Lispem dávám přednost Erlangu, což je jediný opravdu objektový jazyk ;)  (citace z článku níž)

Vracení jiného objektu je naprosto běžnou záležitostí v objektově velmi čistém Smalltalku. Funguje to dobře a spolehlivě a nikdo se nad tím vůbec nepozastavuje, skoro bych řekl, že o tom ani neuvažuje a bere to jako tu nejpřirozenější věc v programování. "678 asString" prostě vrátí string, ačkoli jde o objekt typu integer, vezmu-li ten nejprimitivnější příklad.
No právě. Proto jsem psal o té zpovykanosti z C++ - spousta lidí si myslí, že umí OOP a přitom to je spíš taková parodie. Asi není potřeba jít přímo do Smalltalku, ten člověk moc v praxi nevyužije,  lepší je Objective C - Apple produkty prožívají hype, programátoři nejsou :)

Ještě pro zajímavost:

Alan Kay himself wrote this famous thing and said "The notion of object oriented programming is completely misunderstood. It's not about objects and classes, it's all about messages". He wrote that and he said that the initial reaction to object oriented programming was to overemphasize the classes and methods and under emphasize the messages and if we talk much more about messages then it would be a lot nicer. The original Smalltalk was always talking about objects and you sent messages to them and they responded by sending messages back.

http://www.infoq.com/interviews/johnson-armstrong-oop

6394
Vývoj / Re:Java - rozhraní, dědičnost a abstraktní třídy
« kdy: 17. 07. 2013, 21:45:45 »
(a to dokonca so spomenutim lispu, kde je mozna zmena triedy).
Neznam Lisp a uz vubec ne jeho objektovy system, ale tohle mi zrovna prave prislo jako dost prasacky reseni, aby se pod rukama menil typ jednoho objektu. A pritom se to da resit pekne funkcionalne - proste vratit jinej objekt... Nevim, proc tady lispisti od funkcionalniho pristupu odbocili.

6395
Vývoj / Re:Java - rozhraní, dědičnost a abstraktní třídy
« kdy: 17. 07. 2013, 19:17:08 »
resp. je to uz potom vec dizajnu a dohody. vam sa moze zdat, ze to je zbytocna podmienka, mne ako hypotetickemu dizajnerovu inkscapu sa moze zdat, ze ak taham za lavy/pravy cierny stvorcek, tak sirka sa meni a vyska nie.
Urcite nekdo zase bude kvilet, ale neda mi to: Ten problem je presne v tom, co jsem psal - snaha koncepty OOP povazovat za "obecne platne". Tady koncept OOP "specialni pripady obecnejsich konceptu maji vsechny vlastnosti svych obecnejsich rodicu plus nejake navic" proste koliduje s poznatky z reality "kruh je specialni pripad elipsy".

A co se tyce toho inkscapu, proste budes muset pocitat s tim, ze kdyz natahnes kruh jednim smerem, vznikne ti elipsa. Coz je dalsi pripad toho, co jsem rikal: kdyby nebyli lidi zpovykani z C++, byli by zvykli na to, ze metody vraceji instance a neni nikde receno, ze to musi byt stejna instance stejne tridy. Takze kruh.setX(x) by vratilo elipsu a elipsa.setX(x).setY(x) by vratilo opet kruh. A puvodni instance by zmizela v propadlisti zapomneni :)

6396
Odkladiště / Re:Kam dát inzerát na Linux admina?
« kdy: 16. 07. 2013, 23:38:21 »
Jobs sem prave prosel a nic na junior administratora sem nenasel.
Tím bych se asi nechlubil ;)

http://goo.gl/sZVLS

6397
Sítě / Re:Rack a domácí rozvod sítě
« kdy: 16. 07. 2013, 15:34:26 »
a par patchkablov mi za tie roky uz odislo - lebo sa s nimi skratka manipuluje - ci uz vonku od zasuvky k zariadeniu, alebo v skrinke od patchpanela k switchu.
A to jsou to lanka. Drát by byl ještě náchylnější. Prostě na patch panelu bych nešetřil. To už bych radši ušetřil za rack a zabudoval to do staré šatní skříně z frcu za tři stovky ;)

6398
Sítě / Re:Rack a domácí rozvod sítě
« kdy: 16. 07. 2013, 09:32:02 »
Zmeny technologie bych se vubec nebal, jedine optika, a ta se v RD/byte moc nevyplati. Smysl to ma v pripade ISP ktere si taha kabely, vyjde to levnejs nez metalika + switche. Zivotnost kabelaze je +- 30let. Navic pres dobre provedenou kabelaz lze protlacit i vic nez Gbit ... ale doma? Nac?
Přesně stejně bys před deseti lety obhajoval 10Mb koax :)

6399
Vývoj / Re:Java - rozhraní, dědičnost a abstraktní třídy
« kdy: 16. 07. 2013, 09:28:19 »
Ani v pripade tiredneho dedenia od vylucne jedneho predka nie je navrh hierarchie o nic umelejsi ako inde, kde taku stromovu hierarchiu definujes (zoologia, botanika, atd).
Ano. Ale každý biolog si bude vědom, že to je jenom jeden z možných pohledů na realitu. Nebude tvrdit, že věci tak jsou, ale jenom, ře on si je tak roztřídil.

Rozdiel medzi rozhranim a triedou je principialny - je to rozdiel v koncepte a v uceli.
Naposledy se to pokusím ozřejmit: řekl jsi "Nez sa rozhodnem, ci je nieco trieda alebo rozhranie, polozim si presne tuto otazku, aky typ vztahu to reprezentuje."

Nepoložíš si otázku "jaký typ vztahu tam je" (v realitě), ale rozhodneš se, jaký typ vztahu tam uděláš.

Prostě tvrdím, že vztahy nemůžeš analyzovat přirozeně, nezávisle na jazyku a potom je implementovat, ale už u analýzy musíš myslet na to, co ti jazyk (v tomhle ohledu) umožňuje. A to je prostě špatně. A dvakrát špatně to je, pokud začneš tvrdit, že ty vztahy, které sis tam (kvůli omezení jazyka) dal, jsou tam i v realitě. Nejsou.

Howgh.

6400
Vývoj / Re:Java - rozhraní, dědičnost a abstraktní třídy
« kdy: 16. 07. 2013, 07:43:49 »
bavime sa o tom, co je v oop trieda a rozhranie.
Jasně, ale tak, jak jsi to napsal (vztahy se dělí na is-a a can-do) to prostě neodpovídá běžnému vnímání v případě, že vztahy is-a mám uspořádané do stromu, kde každý uzel může mít jenom *jednoho* rodiče. Tenhle způsob uvažování vede k tomu, že některé vztahy typu is-a *prohlásím* (uměle,libovolně) za can-do, protože nemůžu jinak. K čemu pak to rozdělení je?

Když už bych to takhle chtěl napsat, řekl bych, že konkrétní jazyk (např. Java) mi umožňuje jenom jednu vazbu is-a ke konkrétnímu rodiči. Nemůžu to ale postavit tak, že v rámci analýzy musím odlišit vztah is-a a can-do a podle toho to pak implementovat. Takhle to není a být nemůže.

6401
Vývoj / Re:Java - rozhraní, dědičnost a abstraktní třídy
« kdy: 16. 07. 2013, 06:51:44 »
A ještě dodatek: když se nad tím člověk zamyslí, může dojít k názoru, že vlastně vůbec nejlepší je se na celý OOP vykašlat a použít starý dobrý funkcionální přístup - objekt mám popsaný nějakou datovou strukturou plus k tomu mám nějaké funkce, které implementují vlastnosti a umí operovat nad datovými strukturami, které mají nějaké dané vlastnosti. A voilá, mám třídy interfejsů i mixiny, akorát tomu tak neříkám a musím si to trochu pohlídat sám, protože to není tak explicitní jako u OOP.

6402
Vývoj / Re:Java - rozhraní, dědičnost a abstraktní třídy
« kdy: 16. 07. 2013, 06:32:29 »
Nez sa rozhodnem, ci je nieco trieda alebo rozhranie, polozim si presne tuto otazku, aky typ vztahu to reprezentuje. Ak by som si tuto otazku nepolozil, lahko dospejem k zlemu navrhu, kde holub aj lietadlo priamociaro dedia od nejakeho spolocneho predka - triedy. Dosledkom bude, ze sa stratim pri rozsirovani programu, ked sa budem stale budem borit s problemom, ze tie 2 veci vlastne nemaju nic spolocne, len v nejakej casti programu potrebujem vediet, ze oboje vedia lietat a vykonat s nimi nejaku "lietajucu" operaciu.
To je sice hezká teorie, ale imho je to přesná ukázka přecenění OOP - představy, že "osekané" OOP je způsob myšlení, ktrerý je "přirozeným" základem jakýchkoli vztahů, abstrakcí.

Především to takhle těžko můžeš říct u jazyků, které nemají vícenásobnou dědičnost, protože jeden objekt samozřejmě může spadat do víc tříd, protože třída není nic jiného než abstraktní pojem, kterým pojmenováváme konkrétní objekty, které mají nějaké konkrétní vlastnosti. Neexistuje nic jako "přirozená kmenová třída",  což by byla abstraktní skupina, do které objekt patří "primárně" a která by tak byla jediným "správným" předkem všech objektů libovolné třídy X.

Např. ropa je (is-a) stejně tak "mazlavá tekutina" jako "palivo" a "organická sloučenina". Jazyk bez vícenásobné dědičnosti mě donutí k tomu, že budu tvrdit, že ropa je (is-a) primárně "organická sloučenina" plus má vlastnosti (can-do) paliva a mazlavé tekutiny, což zjevně neodpovídá skutečnosti, protože to můžu klidně udělat opačně (is-a palivo, can-do mazlavá).

Tomu, jak normálně pojmy používáme, by bylo imho daleko bližší používat interfejsy (klidně uspořádané do hierarchie, když už to teda chceme) plus mixiny, které ty interfejsy implementují, protože když už nějak formalizovat naše vnímání/myšlení, tak tak, že máme nějaké objekty, které mají nějaké (víceméně volně kombinovatelné) vlastnosti. Bohužel běžný programátor používá dědění na úkor skládání, což je imho opět neblahý vliv C++, ze kterého se ani Java pořádně nevymanila.

6403
Vývoj / Re:Java - rozhraní, dědičnost a abstraktní třídy
« kdy: 16. 07. 2013, 05:53:24 »
Není to úplně přesné - abstraktní třída může ale nemusí obsahovat kód.
A existuje nějaký rozumný důvod použít čistě abstraktní třídu bez proměnných, když můžu použít interfejs?  (pod "kód" jsem nešikovně zahrnul i data - proměnné).

6404
Vývoj / Re:Java - rozhraní, dědičnost a abstraktní třídy
« kdy: 15. 07. 2013, 22:49:08 »
Rozhrani je vetsinou udelane tak ze bud dava objektu nejakou vlastnost, nebo standartizuje nejaky set funkci (vcetne vstupnich parametru a navratovych hodnot) ktere objekt musi mit aby s nim slo neco delat. Interface nepopisuje objekt co do informaci ktere uklada ale co do metod ktere obsahuje.
<flame mode on>Kdyby nebyli všichni pomatení z C++ a java by to názvosloví částečně nepřejala, bylo by to daleko jasnější:<flame mode off> interface definuje, jakým zprávám má objekt rozumět. V Objective C se tomu celkem přiléhavě říká "protokol" ( viz http://goo.gl/YTv48 )

6405
Vývoj / Re:Java - rozhraní, dědičnost a abstraktní třídy
« kdy: 15. 07. 2013, 22:43:29 »
Úplně polopaticky řečeno: abstraktní třída obsahuje nějaký kód, který potomci můžou zdědit, zatímco interface žádný kód neobsahuje - popisuje jenom, jaké metody má mít třída, která interface implementuje.

Proto taky ta terminologie: z abstraktní třídy se dědí, zatímco interface se implementuje.

Stran: 1 ... 425 426 [427] 428 429 ... 618