Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

Vážení přátelé,
další kolo minisoutěže o placku a nálepky je tady, tento týden se hraje o placku "Machr na Javu". Jelikož Java se velkým způsobem zasloužila o rozmach objektově orientovaného programování a objektového návrhu vůbec, zaměřil jsem tuto soutěž právě na ni. Pocvičme si objektové myšlení. Pro programátory v C# jen připomenu, že Java je asi z 70% totožný jazyk, neměli byste tedy mít s úlohou vůbec žádný problém, rozdíly jsou minimální.

Navrhněte objektovou strukturu textové hry. Předpokladem samozřejmě je, aby šla co nejlépe rozšiřovat. Jedná se o klasickou textovou hru typu Zork: http://www.youtube.com/watch?…

Ukázka jak hra vypadá, každá lokace je popsána takovýmto způsobem:

Stojíš u činžovního domu, je porostlý lišejníkem. V potemnělé ulici si hraje vítr s novinama.

Predměty: popelnice, noviny
Můžeš jít: činžák, stanice_metra

Nyní hře zadáme příkaz do konzole:

jdi činžák

a hra se přesune do činžáku. Stejně tak můžeme do inventáře sebrat nějaký předmět:

seber noviny

Další příkazy jsou prohledej (např. popelnici, např. přidá do prostoru další předmět kapesní svítilna), polož, použij...

Chce se po vás tedy vypořádat se objektovým způsobem se zpracováním příkazů, tvořením a propojením lokací, sbíráním a používáním předmětů. Pokud to stihnete, můžete implementovat i způsob dialogů mezi postavami. Jedná se tedy o jakýsi engine. Hodnotit se bude čistý a jednoduchý návrh, tedy stihněte spíše méně a dejte si záležet na tom, aby to bylo prakticky řešené. Nemusíte řešit načítání místností a dat ze souboru, stačí třeba 2 testovací místnosti nadatlované někde v konstruktoru hry aby to bylo na čem vyzkoušet. Vše je jen o spolupráci mezi objekty, zbytek je vedlejší.

Určitě víte o co se jedná, kdyžtak se samozřejmě ptejte. Mám také připravený nějaký svůj model, není nic extra, později ho sem dám pro inspiraci :) Tak se do toho dejme!

Edit: Tradičně jsem zapomněl napsat deadline, bude v sobotu v 19:00 :)

Editováno 25.2.2013 21:54
Odpovědět 25.2.2013 21:53
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David
Redaktor
Avatar
David:

učím se sice v c# ale asi to zkusím :D

Nahoru Odpovědět 25.2.2013 21:58
Nic néni nemožné!
Avatar
Зайчик
Člen
Avatar
Зайчик:

Achjo, nesnáším javu, ale když oni mají tak pěkné logo! ;( :@ Kvůli němu snad přejdu! (v)

Nahoru Odpovědět  +1 25.2.2013 22:00
Коммунизм для нашего будущего!
Avatar
David
Redaktor
Avatar
David:

jo no logo je nejlepší na javě taky sa mě hrozně líbý :D 8-)

Nahoru Odpovědět 25.2.2013 22:01
Nic néni nemožné!
Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

Ještě soutěž připomenu Samik11, Drahomír Hanákovi (i když ten teď asi pracuje) a byl bych docela zvědavý na Kita :P

Nahoru Odpovědět 25.2.2013 22:12
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Samik11
Redaktor
Avatar
Samik11:

dík, jenom dotaz... musí ta hra obsahovat ty stejné příkazy a i ten výstup? Nebo to může být něco jiného, kde se dá hodnotit nápad? :-D

Editováno 25.2.2013 22:17
Nahoru Odpovědět 25.2.2013 22:17
„Radost vidět a rozumět, to je nejkrásnější dar přírody.“ Albert Einstein
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Samik11
David Čápka:

Nápad je jak udělat objektovou strukturu :) Hra by měla omět menit lokace a sbírat a používat předměty pomocí příkazů.

Nahoru Odpovědět 25.2.2013 22:19
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Samik11
Redaktor
Avatar
Odpovídá na David Čápka
Samik11:

ok, škoda chtěl jsem udělat něco na bázi pokemonů... :D

Nahoru Odpovědět  +1 25.2.2013 22:22
„Radost vidět a rozumět, to je nejkrásnější dar přírody.“ Albert Einstein
Avatar
melichor
Člen
Avatar
melichor:

Mno, podle mne hlavni vlastnost programatora je dobre odhadnout situaci. Na neco takovyhleho je podle meho nazoru Java uplne zbytecna.

 
Nahoru Odpovědět 25.2.2013 22:29
Avatar
Hartrik
Redaktor
Avatar
Hartrik:

O prázdninách jsem přesně tohle dělal ve VBScriptu a poté i v Javě, škoda jen že kód je téměř nepoužitelný...

 
Nahoru Odpovědět 25.2.2013 22:30
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na David Čápka
Drahomír Hanák:

Na tuhle kategorii jsem se zrovna těšil, ale bohužel se nemůžu teď zúčastnit. Tak alespoň doufám, že se tu objeví spousta kvalitního kódu a snad budu mít příště čas :)

 
Nahoru Odpovědět  +1 25.2.2013 22:30
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na melichor
David Čápka:

Java je univerzální a moderní jazyk, hodí se téměř na vše. Navíc podporuje syntaxi céčka, takže kdybys to dělal třeba v něm neobjektově, v Javě to bude úplně stejné. Tvůj argument tedy nechápu. My si tu trénujeme objektové myšlení na jednoduchých úlohách, abychom dobře zvládali ty složité.

Nahoru Odpovědět  +2 25.2.2013 22:33
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
melichor
Člen
Avatar
melichor:

Java nema pointery :-D

 
Nahoru Odpovědět 25.2.2013 22:36
Avatar
David Čápka
Tým ITnetwork
Avatar
Nahoru Odpovědět 25.2.2013 22:37
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
melichor
Člen
Avatar
melichor:

Mno, rikas, ze Java podporuje syntaxi C, coz je naprostej nesmysl, protoze Java nema pointery. Tak si tu ze mne nedelej srandu :-P

 
Nahoru Odpovědět 25.2.2013 22:40
Avatar
melichor
Člen
Avatar
melichor:

Pokud ti jde o objektovej navrh, tak nechapu, proc se ta soutez jmenuje "Machr na Javu", C++ i C# a dalsi jazyky jsou na objektovej navrh stejne vhodne a v C++ by zrovna tohle slo o hodne lepe

 
Nahoru Odpovědět 25.2.2013 22:44
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na melichor
Drahomír Hanák:

Docela by mě zajímalo tvé provedení z hlediska dodržování základních objektových principů, používání návrhových vzorů a obecně architektury takové hry. Nechceš se zapojit? :)

Proč se vybrala Java je uvedeno hned na začátku úvodního příspěvku ;)

 
Nahoru Odpovědět 25.2.2013 23:02
Avatar
melichor
Člen
Avatar
Odpovídá na Drahomír Hanák
melichor:

Klidne
(btw pro me to proste neni dostatecnej duvod, protoze me C++ naucilo objektovy navrh daleko lepe, nez java)

 
Nahoru Odpovědět 25.2.2013 23:06
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na melichor
David Čápka:

Proč je soutěž v Javě je napsané hned v prvním příspěvku, je dobrý nápad si přečíst alespoň ten než se zapojíš do diskuze. Céčková syntaxe není o pointerech, mnoho jazyku ji poskytuje a pointery nemá. Těším se na tvůj návrh, když tě C++ tak dobře naučilo objektově programovat.

Nahoru Odpovědět 26.2.2013 0:01
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Maxfx
Redaktor
Avatar
Maxfx:

Příště třeba bude v C nebo v Asm :D

Editováno 26.2.2013 0:23
Nahoru Odpovědět 26.2.2013 0:22
Být ovládán znamená být sledován, pod dohledem, špehován, veden, uzákoněn, reglementován, ohrazen, indoktrinován, pře...
Avatar
Зайчик
Člen
Avatar
Odpovídá na Maxfx
Зайчик:

Těžko, :P pak už je jen andriod. :)

Nahoru Odpovědět 26.2.2013 8:36
Коммунизм для нашего будущего!
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Také jsem na sebe zvědavý. Nedávno jsem si něco podobného udělal v Javascriptu. Mělo to asi 8 místností a dalo se mezi nimi chodit klikáním. Víc to však neumělo. Celé jsem to měl nacpáno do jednoho souboru .html.

Nahoru Odpovědět  +1 26.2.2013 9:09
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na melichor
Kit:

V C++ se objektově téměř nedá programovat. Vždyť je i problém poslat objekt přes return, aby se náhodou nezapomnělo ten objekt uvolnit a nevznikl memory leak. Nedovedu si představit, jak bych v tom dělal Dependency Injection. Možná přes nějaký framework?

Nahoru Odpovědět 26.2.2013 9:19
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Lukáš Hruda (Luckin):

Za tímhle účelem se v C++ objekt uvnitř funkce nevytváří dynamicky, ale deklaruje se na stacku a při vrácení se kopíruje, přičemž si můžeš přesně nastavit jak. Pokud je to v daný situaci moc neefektivní, pak si buď musíš dávat pozor anebo pokud se to využívá častěji, napsat si nějakou třídu pro inteligentní pointer, kterej paměť při skončení platnosti sám dealokuje, ve standardních knihovnách C++ už něco takovýho existuje. Já osobně se vyhýbam vracení objektů vytvořených uvnitř funkcí, pokud by byly potřeba vytvořit dynamicky, vždycky vytvářim objekt na nejvyšší urovni kde se používá (většinou main) a pak předávam parametrem.

 
Nahoru Odpovědět 26.2.2013 11:05
Avatar
Maxfx
Redaktor
Avatar
Odpovídá na Зайчик
Maxfx:

:D tak se musí jít trošku níž :D

Nahoru Odpovědět 26.2.2013 11:11
Být ovládán znamená být sledován, pod dohledem, špehován, veden, uzákoněn, reglementován, ohrazen, indoktrinován, pře...
Avatar
Kit
Redaktor
Avatar
Odpovídá na Lukáš Hruda (Luckin)
Kit:

To je přesně ono. V Javě i v PHP vracím nově vytvořené objekty returnem systematicky. Výsledkem každé metody je objekt. Mám změřeno, že je to i nejrychlejší způsob předávání výsledku.

Nahoru Odpovědět 26.2.2013 11:23
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Luboš Běhounek (Satik):

(Odpověď na 26.02.2013 09:19, hapruje mi tu internet)

Větší kontrola nad kódem (ale i větší odpovědnost), přece nijak nesouvisí s tím, jak dobře se dá v něčem programovat objektově.

Uvolňování paměti by se mělo ideálně dít na té úrovni, na které byl objekt vytvořen.

S pamětí není problém ani když se na objekt odkazuje ze spousty míst a programátor přesně neví, kdy přesně se paměť má uvolnit, tohle se většinou řeší tím, že si objekt u sebe sám udržuje, kolik odkazů na něj existuje - samozřejmě programátor při vytváření / ničení ukazatele na tento objekt na to musí pamatovat a volat příslušné funkce.
Pokud zavolá snížení počtu odkazů a počet klesne na nulu, tak v tu chvíli objekt sám zavolá destruktor, protože už na něj nikdo neukazuje, je to vlastně takový poloautomatický prapředek garbage collectoru :) .

Nahoru Odpovědět  +2 26.2.2013 12:01
:)
Avatar
Odpovídá na Luboš Běhounek (Satik)
Lukáš Hruda (Luckin):

Na podobnym principu funguje ten inteligentní pointer, až na to že ten si ty funkce volá sám. Tam si ale zase musíš dávat pozor, když z něj adresu předáváš klasickýmu pointeru.

 
Nahoru Odpovědět 26.2.2013 12:18
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

"Uvolňování paměti by se mělo ideálně dít na té úrovni, na které byl objekt vytvořen."

To platí možná v C++, ale není možné to zobecňovat na celé OOP. Použil jsi v C++ nadstavbu, která je v Javě a C# již součástí jazyka. OOP v C++ mi pořád připadá jako nějaký přílepek, se kterým se původně moc nepočítalo.

V OOP metoda objektu běžně vytváří jiný objekt a returnem ho předá volajícímu. Jak jinak bych mohl udělat třeba Factory?

Se stejnou odvahou mohu zařadit do OOP i Lisp, ve kterém se dá programovat v podstatě jakkoli, tedy i objektově.

Nahoru Odpovědět 26.2.2013 12:19
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
albertpatera
Redaktor
Avatar
albertpatera:

taky bych se zapojil, ale ještě pořád nemám noťas :(

 
Nahoru Odpovědět 26.2.2013 12:27
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

Ano, myslel jsem to hlavně pro jazyky, kde se o paměť stará programátor a ne pro GC nebo podobné mechanismy, které fungují úplně jinak.

Factory v C++ uděláš tak, jak jsem popisoval - normálně na haldě vytvoříš objekt, na něj si vrátíš ukazatel a jen si hlídáš ty počty ukazatelů na něj, případně to můžeš celé řešit i přes smart pointery, které tohle dělají za tebe ještě zautomatizovaněji.
V tomhle případě pak samozřejmě objekt může být zničen i na jiné úrovni, než kde byl vytvořen.

Lisp vůbec neznám, netuším, jak to má s podporou objektů.

Nahoru Odpovědět 26.2.2013 12:30
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Lisp je strašně mnohotvárný, proto se v něm objekty dají dělat jakkoli. Prototypově i prostřednictvím tříd, kombinovaně nebo úplně jinak.

Nahoru Odpovědět 26.2.2013 12:39
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Lukáš Hruda (Luckin):

C++ byl první C-based jazyk kterej obsahoval základy OOP, ze začátku toho kromě nějakých základů tříd neuměl o moc víc než C. Dál se v něm třídy vyvíjely poněkud jinym směrem. Třídy v C++ nejsou dělaný tak, aby se v něm pohodlně programovalo objektově, ale tak, aby programátor mohl vytvářet datový typy se kterýma je možno zacházet co nejvíce stejně jako se základními typy, tedy co nejpřirozeněji. V C++ se objektově programovat dá (vždyť Java i C# z něj vychází), jen u toho programátor musí řešit věci spojený s tím, že je to víc low-level jazyk, a ne vždy je to v něm nejlepší a nejpohodlnější řešení, obzvlášť pokud je potřeba programovat efektivně. Jak už jsem tu ale psal jednou v jiný diskusi, podle mě má C++ mnohem propracovanější třídy a práci s nima než Java a C# dohromady.

 
Nahoru Odpovědět  +1 26.2.2013 12:56
Avatar
melichor
Člen
Avatar
melichor:

Aneb klasika, bitva mezi javistama a programátorama...

 
Nahoru Odpovědět 26.2.2013 18:16
Avatar
melichor
Člen
Avatar
Odpovídá na Kit
melichor:

Vis, ono v C++ to chce taky obcas premejslet nad tim, co ti ta funkce vrati a ne jenom tam placnout objekt, nekdy se ti hodi pointer, nekdy reference a nekdy objekt samotny, popr. to vyresit jinak.
Java se ti o vsechno postara sama, ale efektivita je ta tam...

 
Nahoru Odpovědět  +1 26.2.2013 18:18
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na melichor
David Čápka:

Slušně tě žádám, pokud se nechceš soutěže účastnit, tak to tu nerozmazávej, programuj si třeba v děrných štítkách, nám je to jedno. Tohle je soutěž v Javě, zbytečně to tu znečišťuješ offtopic diskuzí. Děkuji.

Editováno 26.2.2013 20:04
Nahoru Odpovědět  +1 26.2.2013 20:04
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
melichor
Člen
Avatar
melichor:

Mno, az na to, ze jsem rikal, ze se ty souteze zucastnim. V tom pripade podle tve vety to tu rozmazavat muzu :-D

 
Nahoru Odpovědět 26.2.2013 20:38
Avatar
Kit
Redaktor
Avatar
Odpovídá na melichor
Kit:

O efektivitě Javy toho bylo napsáno hodně. Java je efektivní, jen se v ní nesmí programovat jako v Céčku. V tu chvíli se z ní stane líný moloch.

Nahoru Odpovědět 27.2.2013 8:33
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
vodacek
Redaktor
Avatar
vodacek:

já to vidím jednoduše, napište program v C#, pak stačí jen nakopírovat soubory do fazolového editoru, u děičkosti místo : se narve extends, jména vlasností tříd přidělat na malé počáteční písmenko, u metod to samé, napráskat tam hrůůzostrašné get-set metody a je prakticky hotovo :-) a ještě možná string na String a to je tak vše důležité

 
Nahoru Odpovědět 27.2.2013 8:48
Avatar
Kit
Redaktor
Avatar
Odpovídá na vodacek
Kit:

... a dostaneš z toho typicky línou javovskou aplikaci.

Nahoru Odpovědět 27.2.2013 8:56
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
vodacek
Redaktor
Avatar
Odpovídá na Kit
vodacek:

bohužel je tak soutěž zadána, jen jsme naznačil že převod mezi těmito jazyky není příliš obtížný

 
Nahoru Odpovědět 27.2.2013 9:01
Avatar
Kit
Redaktor
Avatar
Odpovídá na vodacek
Kit:

Převod není obtížný. Jen těmi primitivními settery a gettery, které se v C# používají tak často, se v Javě musí trochu šetřit, aby to nebylo líné. Reagoval jsem jen na ty "hrůůzostrašné get-set metody", které v Javě být nemusí, když se program napíše správně.

Nahoru Odpovědět 27.2.2013 9:55
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
vodacek
Redaktor
Avatar
Odpovídá na Kit
vodacek:

z tvého/vašeho příspěvku tento fakt není vůbec zjevný

 
Nahoru Odpovědět 27.2.2013 9:58
Avatar
Kit
Redaktor
Avatar
Odpovídá na vodacek
Kit:

C# zavedl gettery a settery jako syntaktický cukr, který se bohužel velmi často zneužívá v podobě get; set;. Vypadá to elegantně, ale velmi často to správně není. Je zbytečné tento nešvar přenášet do Javy. Možná proto v ní tento syntaktický cukr není.

Nahoru Odpovědět 27.2.2013 10:03
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

V Javě je to úplně stejné jako v C#. Co jde ven je getter/setter, i rychlostně to vychází stejně, vždyť jsi to tenkrát měřil.

Editováno 27.2.2013 10:12
Nahoru Odpovědět 27.2.2013 10:09
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Měl jsem na mysli, že v C# se getter/setter zapisuje jako přetížené přiřazení. Na jednu stranu je to příjemné, na druhou stranu pak objekt mívá příliš mnoho rozhraní a z toho pramení nízká uzavřenost objektu. Objekty se pak používají jen jako pouhá datová skladiště a to je špatně. Při přepisu takového špatného návrhu vznikají v Javě zmíněné "hrůůzostrašné get-set metody".

V některých případech to skutečně výkonově vyjde nastejno, protože kompilátor dělá optimalizaci. Vždycky se mu to však nepodaří. O výkon však jde až na druhém místě. Pokud chceme dělat OOP, nelze zasílání zpráv vždy degradovat na přiřazení do lokální proměnné objektu nebo vyzvednutí její hodnoty.

Nahoru Odpovědět 27.2.2013 10:59
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

Chápu jak to myslíš, ale bohužel se to dělá v praxi opravdu tak, že se vygeneruje tuna getterů/setterů, dělá to většinou IDE.

Nahoru Odpovědět  +1 27.2.2013 11:01
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Bohužel nevhodně navržené IDE svádí k chybným programátorským návykům. programátoři si pak naivně myslí, že provozují OOP.

Nedávno jsem našel zajímavou knihu "Myslíme v jazyku Java", ve které je podle mne velmi dobře zpracováno OOP nejen pro Javu. Na rozdíl od jiných učebnic začíná s objekty a rozhraním. Teprve pak jde na kolekce, algoritmy a datové typy.

Nahoru Odpovědět 27.2.2013 11:45
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Samik11
Redaktor
Avatar
Samik11:

Tak přidávám svůj pokus. Za chyby se omlouvám, ať už jde o funkčnost nebo špatně zvolený návrh. Podstatné je přece zúčastnit se. :-)

http://uloz.to/…-samik11-rar

Nahoru Odpovědět 2.3.2013 10:19
„Radost vidět a rozumět, to je nejkrásnější dar přírody.“ Albert Einstein
Avatar
David Dostal
Redaktor
Avatar
David Dostal:

Ahoj, šla by uzávěrka prosím ještě trochu posunout? Rád bych se zúčastnil, ale na počítač jsem se dostal až dneska.
PS: většinu textové hry už jsem dneska udělal, tak by bylo škoda, kdybych to dělal nanic.

 
Nahoru Odpovědět 2.3.2013 18:42
Avatar
Hartrik
Redaktor
Avatar
Hartrik:

Moje dílo:
http://dl.dropbox.com/…re%20III.zip

Dal jsem jí jméno Adventure III, protože je to moje, v pořadí již 3 textovka.
Samozřejmě je z těch tří nejlepší, a jediná která je objektová (i když dvojka byla také v Javě ;) ).

Přibalil jsem info soubor, ale kdybyste měli nějaký dotaz, tak pište. Jinak kód by měl být dostatečně čitelný a okomentovaný - prostě 3000 řádků kvalitního objektového kódu ;)

ukázka 1 - implementoval jsem ukázku viz. nahoře
ukázka 2 - taková blbost :)

 
Nahoru Odpovědět 2.3.2013 18:46
Avatar
Hartrik
Redaktor
Avatar
Odpovídá na David Dostal
Hartrik:

To by zase nebylo fér vůči mě, teď když jsem vyložil karty

Editováno 2.3.2013 18:48
 
Nahoru Odpovědět 2.3.2013 18:48
Avatar
David Dostal
Redaktor
Avatar
David Dostal:

Stejně jsem si řekl, že se na ostatní podívám až po odevzdání, aby to byla opravdu moje práce, takže pokud myslíš, že bych ti něco ukradl, tak opravdu ne (a celou hru bych kvůli tomu stejně neprekopaval :D).

 
Nahoru Odpovědět 2.3.2013 18:58
Avatar
Hartrik
Redaktor
Avatar
Odpovídá na David Dostal
Hartrik:

tady ale nejde jenom o tebe, každý si to teď může stáhnout...
Tohle prostě neni dobrý

 
Nahoru Odpovědět 2.3.2013 19:00
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na David Dostal
David Čápka:

Mně to nevadí, ale musíš se dohodnout s ostatními, třeba když sem pošleš co máš teď a uvidí že je to jiné než to jejich, tak jim to vadit nebude.

Nahoru Odpovědět 2.3.2013 19:03
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Samik11
Redaktor
Avatar
Odpovídá na Hartrik
Samik11:

Smekám, fakt parádní... :)Kód se bude hodit ke studijním účelům.

Nahoru Odpovědět 2.3.2013 19:07
„Radost vidět a rozumět, to je nejkrásnější dar přírody.“ Albert Einstein
Avatar
David Dostal
Redaktor
Avatar
David Dostal:

Takže má ještě cenu to dodělat?

 
Nahoru Odpovědět 2.3.2013 19:08
Avatar
David Dostal
Redaktor
Avatar
David Dostal:

Myslím, že sem stejně všichni (kromě mě), co se chtěli zúčastnit sem svoje řešení dali, takže už to od tebe stejně neokoukaji.

 
Nahoru Odpovědět 2.3.2013 19:10
Avatar
Hartrik
Redaktor
Avatar
Odpovídá na Samik11
Hartrik:

:) když jsem to programoval ověřoval jsem si to na Wikipedii

 
Nahoru Odpovědět 2.3.2013 19:10
Avatar
Hartrik
Redaktor
Avatar
Odpovídá na David Dostal
Hartrik:

A na kdy to chceš odložit? Měl si na to týden, já i Samik jsme se podle toho zařídili

 
Nahoru Odpovědět 2.3.2013 19:13
Avatar
David Dostal
Redaktor
Avatar
David Dostal:

Nebo už to vyhodnoťte. Nesnáším, když programuju pod časovým tlakem. Myslím, že to tak bude nakonec lepší a Hartik bude taky spokojený. PS: Co jsi ověřoval na wikipedii?

 
Nahoru Odpovědět 2.3.2013 19:16
Avatar
David Dostal
Redaktor
Avatar
David Dostal:

Týden jsem na to měl, ale počítač jsem na to neměl. :)

 
Nahoru Odpovědět 2.3.2013 19:19
Avatar
Hartrik
Redaktor
Avatar
Odpovídá na David Dostal
Hartrik:

Jak myslíš, ale zase bych nechtěl aby to bylo jen kvůli mě...
Lidskou anatomii ;)

 
Nahoru Odpovědět 2.3.2013 19:19
Avatar
David Dostal
Redaktor
Avatar
David Dostal:

Je to ok a nic ti nevycitam. Můžete vyhodnocovat.

 
Nahoru Odpovědět 2.3.2013 19:24
Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

Slíbil jsem ještě takový náznak něčeho svého, načali jsme něco podobného s jedním mým žákem, je to velmi nedodělané, funguje víceméně jen příkaz jdi a je to v C#, ale pro představu :) Udělal bych to v Javě, ale máme teď práci s devbookátorem, tak jsem to nestihl. Někdy to sem určitě dám v lepší podobě.

Kód: http://www.itnetwork.cz/dev-lighter/72

Nahoru Odpovědět 2.3.2013 19:55
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

Příště si vezmu na pomoc stádo programátorů, ještě, že mi pomohl Drahomír Hanák. Účast tedy byla poněkud skromná, přesto jsme do toho koukali nějakou chvilku :)

Výsledky:

  1. Hartrik (70 bodů)
  2. Samik11 (60 bodů)

Můj subjektivní komentář:

Hartrik použil zajímavou strukturu - strom. Škoda, že jsi projekt neudělal menší a čistší, pro potřeby této konkrétní soutěže by to bylo lepší, bez těch biomů atd., i když je to dobrý nápad. Úplně jsem nepochopil jakým způsobem propojuješ lokace, některé vkládáš do sebe, jakou to má přidanou hodnotu? Moc se mi nelíbil nápad s těma IDčkama, hodně to znepřehledňuje kód. Sám jsem to řešil tak, že mám třídu Svět, ta má velký konstruktor. Tam si vytvářím místnosti a předměty, které do nich poté rovnou vkládám, nepotřebuji je tedy hledat přes ID.

Samik11: Je tam toho hodně málo a je to nedořešené (ten for cyklus v textová hra, způsob parsování příkazů atd.). Je to škoda, tvoje cesta mi byla sympatičtější, nicméně máš třídy hrozně konkrétní, je zbytečné mít pro každou lokaci podtřídu, když se v podstatě liší pouze předměty a popisky.

Soutěž to byla zajímavá, škoda, že bylo málo lidí, určitě někdy zas něco takového zkusíme, ale vymyslím něco jednoduššího :) A adresu na Hartrika už máme :P

Nahoru Odpovědět 2.3.2013 20:15
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Drahomír Hanák:

Pár mých poznámek k obou projektům a nějaké tipy:

Hartrik
V kódu se hodně opakují ty samé chyby návrhu:

  • Některé třídy (zejména Other, Sample) svými názvy nevypovídají o tom, co dělají. U Sample o ničem nevypovídají ani metody.
  • Porušení SRP: některé třídy porušují single responsibility principle (starají se o víc věcí najednou)
  • Porušení OCP: Bioms je úplný antipattern - pár další třd se ani nesnaží dodržovat tento princip = malá rozšiřitelnost
  • není vůbec využita dědičnost, i když by se na mnoha místech hodila
  • nadměrná statika - některé třídy by nemusely být statické = nejsou patrné závislosti
  • některá data by mohla být mimo třídy. V kódu by se pak jen parsovala

Samik

  • Porušení SRP: popis třídy Lokalita: "Určuje lokalitu A vypisuje ji na obrazovku" - výpis bych přesunul do třídy k tomu určené
  • celkem krátké

Obecně tipy:

  • programujte proti rozhraní
  • pište hodně malých tříd
  • snažte se o krátký kód tříd a metod (obecně pokud má metoda víc řádek - řekněme víc jak 30 - dalo by se předpokládat, že je špatně navržená)
    • pokud má metoda víc řádek, zkuste je rozdělit do dalších privátních metod
  • zkuste si popsat funkčnost třídy jednou větou (bez spojky A). Pokud to nejde, přesuňte část funkčnosti do jiné třídy.
  • snažte se, aby bylo možné rozšířit kód bez zásahu do již existujícího kódu (ani nejde dodržovat, ale stačí se o to snažit)
  • snažte se, aby bylo na první pohled vidět, na čem je třída závislá
 
Nahoru Odpovědět 2.3.2013 20:18
Avatar
Зайчик
Člen
Avatar
Nahoru Odpovědět 2.3.2013 20:21
Коммунизм для нашего будущего!
Avatar
Hartrik
Redaktor
Avatar
Hartrik:

Když to čtu, tak se divím, jak jsem mohl stvořit něco tak hrozného ;(
Ale díky za 1 místo, vezmu si z toho ponaučení.

 
Nahoru Odpovědět 2.3.2013 20:24
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Hartrik
David Čápka:

On ten výsledek je fakt dobrý, ale cílem soutěže bylo vlastně udělat co nejkratší a co nejhezčí kód :) Nevadí, díky za účast a gratuluji :)

Nahoru Odpovědět 2.3.2013 20:28
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Samik11
Redaktor
Avatar
Samik11:

Když jsem koukal na Hartrikův projekt, tak jsem si říkal, že bodový rozdíl bude ohromný. Každopádně gratuluji a díky za soutěž David Čápkavi. :-)

Editováno 2.3.2013 20:35
Nahoru Odpovědět 2.3.2013 20:34
„Radost vidět a rozumět, to je nejkrásnější dar přírody.“ Albert Einstein
Avatar
Hartrik
Redaktor
Avatar
Hartrik:

Také díky, každopádně se mám ještě co učit o OOP, SRP a OCP ať už je to cokoliv. A ty biomy a id původně měly smysl, teda alespoň jsem si to myslel, ale celá aplikace dopadla tak nějak jinak...

 
Nahoru Odpovědět 2.3.2013 20:43
Avatar
Martin Bartoš:

ako vždy gratulujem :)

Nahoru Odpovědět 2.3.2013 21:25
Nejsom kreatívny...
Avatar
David Dostal
Redaktor
Avatar
David Dostal:

Také gratuluju.

 
Nahoru Odpovědět 2.3.2013 22:45
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 75 zpráv z 75.