Pouze tento týden sleva až 80 % na e-learning týkající
se Pythonu. Zároveň využij narozeninovou akci až 80
% zdarma při nákupu e-learningu - Více
informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na
volné pozice a přidej se do nejagilnější firmy na trhu -
Více
informací.
Ahoj kluci, existuje nová placka "Machr na OOP" a může být vaše i se
samolepkami devbooku a tímto oceněním do portfolia. V týdenní minisoutěži
si zkusíme naprogramovat jednoduchý interpret Karla. Kdo nezná, tak Karel je
velmi jednoduchý program, který na obrazovce nějakým způsobem (klidně v
textovém režimu) zobrazuje robota Karla v 2d poli. Program si načte sérii
příkazů z textového souboru a ty nechá robotem postupně vykonat. Příkazy
jsou vždy na samostatném řádku a základní jsou tyto 4:
KROK - udělá krok vpřed podle směru robota
VLEVO-VBOK - Otočí robota o 90 stupňů doleva
POLOZ - Položí značku na políčko s robotem
ZVEDNI - Zvedne značku z políčka s robotem
Značek může být na jednom políčku více.
Úloha je poměrně jednoduchá, ale zajímavá co se týče objektového
návrhu Autor nejlépe
napsaného programu vyhrává. Můžete se zúčastnit s libovolným
jazykem.
Já vím, Proto jsem
psal "Ne, to je dobrý ".
Protože se mi to něchtělo vysvětlovat. Já myslel to že ta soutěž byla
podle zadání hlavně zaměřená na kód, ale pak se řeklo, že ten kdo bude
mít hezčí design má větší šanci.
Opravil jsem pár chybiček a přidal příkaz vpravo-vbok. Ovšem syntax je
velice volný. Nechce se mi prozrazovat vyčůranost provedení, tak jen
napíši, že v příkazu nezáleží na velikosti písmen, jaký znak
použijete mezi vlevo/vpravo a vbok atd.
Ale mohl by jsi to udělat v JS... (pohyb Karla) A tu tabulku nechceš
udělat nějak lépe? A úplná blbůstka - když už máš ten HTML5, tak zkus
meta charset...
Game Maker sice neoplývá kdovíjakými vymoženostmi,
ale základy OOP obsahuje. Zkusil jsem napsat robota
a myslím, že se celkem povedl.
Jo, přejmenoval jsem ho, jmenuje se Andy.
Tak mi to nedalo, přidal jsem příkaz výstřel (vystřel, vystrel,
vysTRel,...) - co to udělá je asi jasné... Dále program vezme všechny
soubory s koncovkou karl v Directory.GetCurrentDirectory().
Tak přidávám svůj výtvor: http://misaz.wz.cz/…r-na-oop.zip . Je tam nápovšda, tak
to určitě pochopíte. Nakonec semi povedlo zprovoznit i debuger. V obrázcích
níže je screenshot a OOP návrh (diagram) na kterém je vidět jak jsou
propojené třídy.
Tak jsem si to vše projel. Aplikace to nejsou špatné, ale soutěž je
zaměřena na návrh, kterým programy bohužel příliš nevynikají.
Očekával jsem, že mi ukážete, jak umíte polymorfismus (Vykresli
implementuje každý předmět), dědičnost (např. HerniObjekt -> Karel),
že uděláte příkazy jako samostatné třídy proti nějakému rozhraní
(IPrikaz) a podobně. To jsem ve vašich programech bohužel nenašel a místo
toho jsou plné switchů a cyklů
TomBen - Zajímavý pokus, jak je vidět, v GM většina
věcí také nějak jde Moc
se v tom ale nevyznám, je to takové špagetové, třeba že je načítání
příkazů v obejktu políčka.
p4koo - Políčko může mít jen 1 předmět. Implementace
mi přijde taková zmatená, hlavně rozhraní ICommand, od kterého bych
očekával spíše že definuje jak má vypadat jeden příkaz. U těch
vnořených fields jsem se také nějak ztratil.
Misaz - Tohle je taková implementace, kde návrh dává asi
největší smysl, i když by to šlo hodně, hodně vylepšit. Kdyby jsi
použil polymorfismus a dal Kresli() do každého objektu, vyhl by jsi se
switchi v kresliči. Bohužel toto nenapadlo nikoho, i když se jedná o
základní principy OOP. Pomocí reflexe bys úplně odstranil další
nepříjemný switch v interpreteru. Chybí mi dědičnost (TypPolicka je v
objektové aplikaci nesmyslný, k tomu je přeci zjištění typu instance) a
přijde mi zvláštní, že je mapa atributem Karla, naopak on by měl být
součástí mapy.
matesax - Načítání mapy je přímo v program.cs, jediné
pole jsem nalezl jen ve třídě Marks a to je ještě statické. S přidáním
dalšího objektu na políčko bys začal mít problémy. Střílení je
zajímavé, ale nebylo součástí zadání.
Lubos857 - Dávat v objektově orientovaném programu do
pole čísla není to pravé ořechové Zkompilovaná verze mi vyhodila chybu s nějakým dll. Kód na mě
působí spíše procedurálně, ačkoli se tváří jako objektový. Je to
samé větvení a cykly, např. v metodě draw jich je prostě moc.
FilipPyrek - Program se mi moc líbí, hlavně zabudovaný
systém na podprogramy, který je elegantní a jednoduchý. Bohužel z
objektového hlediska je to všechno v jedné třídě a nedá se moc mluvit o
rozdělování odpovědnosti.
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.