- Odevzdejte mi do pondělka všechny projekty a úkoly, které mi dlužíte
- Projděte si znovu projekt balls, který jsme měli teď na semináři a pokuste se pochopit jak funguje:)
- Najděte si někde, co to jsou vnitřní třídy a jak s nimi pracujeme
pátek 30. listopadu 2007
Co na další středu
úterý 27. listopadu 2007
2007-11-28
- Projekty pro ukládání testů, platí pro toho, kdo mi to ještě nedal. Kdyžtak mám připravených pár jiných příkladů, opravdu chci, abyste si zkusili udělat nějaký projekt sami
- Projekt mail-system, vytvořit metodu getAllMailItems(String who) která vrátí nějak šikovným způsobem všechny mailové zprávy od daného uživatele. Stačí, když mi to hodíte do texťáku s vaším jménem a dáte to do V:\Share, nemusíte odevzdávat celý projekt. Ale odevzdáte to všichni zase:)
- Bonus task - projekt PoleČísel a vytvořit metodu (popř. upravit metodu toString()). která bude vypisovat liché prvky z kolekce. Tímto děkuji panu Jandovi za funkční řešení:)
úterý 20. listopadu 2007
Výsledky posledního opravného testu (15.11.2007)
Králík, Martin x
Mrštíková, Květa 9 bodů
Ryba, Vítězslav 11 bodů
Sobotič, Zoltán x
Poslední možnost opravy Testu 1 se koná dne 21. 11. 2007 od 8 hodin na J-329.
Projekt Ukládání a vyhodnocování testu - výsledky
Úvodem
Nejdříve jednu poznámku k těm návrhům, jednu věc jste tam měli hodně často. Z hlediska objektového programování byste měli metodě pro přidání testu do kolekce předávat jako parametr už objekt typu test. Princip objektového programování je pokusit se modelovat reálný svět tak, aby i vaše programy vypadaly logicky. Takže když vy objekt typu test vytváříte ve třídě pro zpracování výsledků, vypadá to asi tak, že učitel si sedne a jde opravovat testy, stojí u něj řada studentů a učitel tomu prvnímu v řadě dá test, ten jej vypní a vrátí jej učiteli, který ho opraví a založí do desek. První student odejde, na řadu přijde ten za ním, opět dostane prázdný test, vypní, vrátí, učitel ho vyhodnotí a založí. Jo, neříkám, že ta vaše řešení nefungují. Jde jen o ten návrh, programování není jen o tom, že napíšu program, který mi něco vypočítá, ale hlavně je to o efektivitě, jednoduchosti a přehlednosti řešení. Takže, něříkám že to je špatně, říkám jen, že by to šlo líp.
Dále v zadání bylo i korektní zadání dokumentačních komentářů, do toho se spoustě z vás nechtělo a když už, tak jen tak aby tam něco bylo. A nevyplňovali jste např. parametry a návraty metod.. Takže příště..
A teď už konkrétně:)
Tak a teď už konkrétně:) Píšu opravdu jen věcné poznámky, neboduje se to, říkal jsem vám, že nic na tom nezávisí. Šlo mi opravdu jen o to, abyste si to zkusili sami. Takže je mnohem přínosnější projekt, kde sice třeba nic moc není, než projekt, který je až na pár drobností stejný s někým jiným. Ale tak to už je vaše věc...
Albrechtová, Monika
Co má za úkol metoda getBodyHodnota() ze třídy Student? A program vám nejde přeložit, protože metoda má vrátit hodnotu jakési proměnné uspel, která ale neexistuje. Jinak tam toho moc nemáte:) A také nevím na co byly parametry u konstruktoru třídy Student. Ale tak nevadí, cílem bylo zkusit si to, a vy jste to odevzdala tak, jak jste to sama zkoušela.
Balej, Marek
V pořádku, pouze jedna věc. V metodě pro výpočet aritmetického průměru sice pracujete s double, ale jako výsledek podílu dvou integerů. Takže vždycky jako průměr dostanete celé číslo, což není úplně ono. A metodám prumer() a pocetuspesnych() jste mohl dát jako návratovou hodnotu int nebo double místo void, když byste dál chtěl s tím výsledkem pracovat, bude to řešení jednodušší. Jinak ale OK. Až na ty dokumentační komentáře, které tam tak nějak chybí.
Bečvář, Stanislav
(Až na ty dokumentační komentáře, které vy tam máte) platí to samé, jako u kolegy Baleje. A "zadavac" je zajímavý název pro třídu..:)
Beneš, Jiří
Nemám váš projekt.
Černý, Lukáš
Viz o řádek výše.
Erhart, Jaroslav
Uf. Vy to máte zmatené:) Kódu je tam sice dost, ale v podstatě nic to neudělá. Přitom si myslím, že jste nezačal špatně a stačilo se nad tím jen pořádně zamyslet. Třída test je u vás úplně zbytečná, tam se jen vytvoří nějaký List a dál se s ním nic neděje a ten je zase v klidu odstraněn interpretem Javy. A metodu addBody máte logicky špatně - když tam přidáte 20 bodů tak napřed se zbytečně vyhodnotí jako uspěl a hned se to přepíše, stejně tak vypíše uspěl pokud zadám zápornou hodnotu. A další problém je v tom přičítání, body += celkemBodu; jakým způsobem nastavím hodnotu bodů? Takhle se mi pořád jen k hodnotě přičítá nebo odčítá. Takže - myslím si, že jste to mohl zkusit dotáhnout dál, zamyslet se nad tím a taky ten program otestovat na různá vstupní data. Ale zase plus za to, že jste to zkoušel:)
Frencl, Ondřej
Člověče, co to je?:) Když jste vymyslel tohle tak mi neříkejte že byste neudělal ten projekt:) Dobrý no:)
Haškovec, Milan
Také nemám.
Heřman, Michal
No, tohle se mi taky nehodnotilo moc dobře:) Máte to celkem zajímavě okomentované, ale tím to končí.. Nevadí..
Janda, Vilém
Super, jediná drobnost je ten objektový přístup. Ale jinak v pořádku.
Kondelík, Jan
Moc pěkné řešení, propracované, okomentované (pozn. k parametrům v dokumentačním komentáři nemusíte psát jejich typ, javadoc si to zjistí sám). Dvě drobnosti - main není až tak úplně vhodný název pro třídu a pak je tam zase ta záležitost s aritmetickým průměrem. Ale jinak nemám co bych tomu vytknul, líbilo se mi to.
Kouklík, Tomáš
Vždyť jste začal dobře, proč jste to nedodělal? Moc už by tam toho nechybělo dodělat.. Na třídě zaci se nedá už v podstatě nic moc dodělávat a kdybyste se podíval na práci s kolekcemi a zkusil vymyslet jak udělat ten aritmetický průměr..
Králík, Martin
Nemám vás tady.
Lískovcová, Jana
Máte udělané přidání testu do kolekce, jakž takž ošetřené body, takže stačilo vymyslet práci se seznamem a metody pro získání těch potřebných údajů. Jinak by to vůbec nemuselo být špatné, jen to dodělat.
Mlejnek, Josef
V podstatě v pořádku, ale zase je tam ten problém s aritmetickým průměrem a totálně tam postrádám dokumentační komentáře.
Mrštíková, Květa
Taky v podstatě v pořádku, ale opět platí to, co jsem psal poprvé u pana Baleje... Myslím tím tu záležitost s aritmetickým průměrem...
Pasák, Václav
Kde nic není...
Peka, Karel
Lehce nevhodné názvy tříd, testy a tests si snadno spletete. Jinak opět tradiční aritmetickoprůměrová záležitost:) Asi budu rovnou psát viz. pan Balej:) Nevím, kdo z vás je autorem, ale u pana Baleje jsem na to narazil jako u prvního, takže vy, kterých se to týká si to přečtěte u něj, ať to nepíšu pořád dokola:)
Petýrek, Tomáš
Jo, v pohodě:) Nevadí mi, že vám s tím pomáhal pan Janda (ta aritmetickoprůměrová záležitost je tedy asi od něj, že), aspoň jste s tím strávili nějaký čas a to bylo cílem. Okomentoval jste každý řádek v programu a snažil jste se pochopit, jak to vlastně funguje. V pořádku! Takže jen dodám problém s aritmetickým průměrem a lehkou nelogičnost v tom, kdy jako studenta, který vyhověl, počítáte toho, kdo měl méně než 5 bodů.
Přílepek, Miroslav
Nemáááááám.
Ryba, Vítězslav
Také nemám.
Směšný, Roman
Nechci se opakovat, ale také nemám.
Sobotič, Zoltán
Opět bych se opakoval.
Veith, Miroslav
No, konečně na konec trošku originality:) Škoda, že jste to nedotáhl do konce. U třídy test byste asi potřeboval metodu na vrácení počtu bodů, ta tam chybí, na privátní proměnnou se nedá přistoupit z jiné třídy. Jinak mě potěšilo, že jste jediný, kdo udělal metodu pro přidání testu tak, že její parametr je opravdu objekt typu test. SUPER! A jinak líbí se mi, že jste zkoušel tu práci s iterátorem, akorát víte, v čem je problém? Že vy ten objekt test hned vracíte, return vám ukončí metodu a vrátí první test ze seznamu. Pokud byste ten kód s iterátorem použil šikovněji, máte prostředek pro procházení celou kolekcí a v těle cyklu while se staráte jen o získání dat z AKTUÁLNÍ pozice v seznamu a jejich zpracování. Když na to kouknete, tak možná i sám vidíte, že ten foreach je lehce elegantnější, s iterátorem se dá zase dělat více věcí.
Závěrem
Hlavní problém tedy byl v tom, že jste používali int pro výpočet aritmetického půměru a čísla to vracela zaokrouhlená. Další věc byly komentáře, které mnohdy chyběly. Občas trošku nevhodné pojmenovávání proměnných. Ale pro většinu z vás to byl první projekt, který jste zkoušeli a příště to snad bude lepší. Jo a spousta těch řešení byla vážně až nápadně podobná, ale tak to je vaše věc, cílem bylo zkusit si vlastní projekt a ne získat za něj nějaké body.
A pro vás ostatní, kteří jste mi ten projekt neodevzdali, vymyslím jiné zadání a nějaký projekt mi také odevzdáte. Jinak nevím, kolik z vás zkusilo aspoň ten program pustit a vyzkoušet na nějakých datech a nebo jste jenom vzali jedno řešení a hotovo. Nevadí, něco podobného zkusíme asi ještě jednou během semestru. Během dneška nebo zítřka se zde objeví ještě pár věcí, co budu chtít, abyste o nich měli přehled na příští seminář. Jinak pořád platí hlavní témata a to práce s kolekcemi, číselné proměnné a cykly. Plus se podívejte na algoritmy pro hledání maxima a minima v poli nebo seznamu, podrobné zadání bude v dalším postu.
Pozn.: Kdyby vás zajímalo, jaké nejjednodušší řešení stačilo udělat, můžete si z tohoto odkazu stáhnout moje řešení a prozkoumat ho.
Jinak budu rád za vaše poznámky, komentáře a připomínky, které tady zanecháte.
úterý 13. listopadu 2007
Výsledky testu z 24. října 2007 (UPDATED)
UPDATED: Výsledky opravného testu z 8. a 9. listopadu 2007
pátek 9. listopadu 2007
Úkoly na 14. listopad 2007
Je tady pro vás seznam věcí, které po vás budu chtít na příští seminář, tj. na 14. listopad 2007.
Dopracování projektu
Za prvé, bude to hotový projekt na vyhodnocování testů. Protože na to máte týden, očekávám, že to odevzdáte jako projekt BlueJ tak, jak jsme si to ukazovali, včetně všech komentářů – jak komentáře přímo v kódu, tak komentáře dokumentační. U těch si prosím ohlídejte i správné zapsání všech direktiv, tím myslím i dokumentaci toho, co metoda vrací a jaké jsou její parametry.
/**
* Metoda slouzici pro vypocet neceho, treba i za pomoci
* cehokoliv, ale pouze za slunecneho pocasi
*
* @param a Parametr a nam nastavi pocasi na slunecne
* @param b Parametr b preda metode cokoliv, takze muze vypocitat neco
* @return Metoda vrati neco, coz je ten nejneuzitecnejsi vysledek
*/
Nezapomeňte tento komentář vkládat i před definici třídy, tam by měly být i direktivy @author a @version. Dokumentační komentáře by tedy měly být před každou třídou i metodou, a to v takovém stavu, že popíší VÝSLEDEK výpočtu bez toho, aby někdo jiný musel váš kód zkoumat. A ještě jedna poznámka k formě kódu – pojmenovávejte proměnné logickými názvy, nechci vidět věci jako a, b, blablabla či fň. Jediné vhodné použití jednopísmenných názvů je pro iterační proměnné cyklu, či pomocné lokální proměnné uvnitř metod.
A pro jistotu ještě jednou zadání projektu:
Navrhněte jednoduchou aplikaci, která umožní zpracovávání výsledků testů. Každý student odevzdá právě jeden test, bodové rozmezí si určete sami. Testy vhodným způsobem zpracujete (předem říkám, že nevíte, kolik studentů test psalo) a získáte z nich dva údaje:
- Počet studentů, kteří napsali test úspěšně
- Aritmetický průměr z počtu bodů ze všech testů
Projekt mi můžete buď zaslat na mail, popřípadě nahrát někam na web do úschovny a poslat odkaz, nebo jej odevzdáte na začátku příštího semináře do složky V:\Share\java, kde vytvoříte složku s vaším jménem, do které celý adresář projektu nahrajete. Jako feedback ode mě dostanete věcné poznámky k vašemu návrhu s tím, co je špatně a proč, popřípadě co je dobře a proč. Výsledky dám buď sem na web nebo vám je připíšu k vašemu projektu, o to vás prosím, abyste mi sem napsali, který způsob se vám líbí víc.
A chci vás upozornit, že projekt odevzdáváte sami za sebe, je jedno, že to třeba až tak úplně nebude fungovat. Ale je lepší, když to zkusíte sami napsat, než když odevzdáte něčí práci. A to vás předem varuji, že to poznám:) Takže cílem je odevzdat něco, co je přímo váš výtvor.
A co dále?
No a dále po vás budu chtít, abyste se znovu podívali na základy práce s kolekcemi, doufám, že vám k tomu pomůže tento projekt. Tedy na princip fungování kolekcí, stačí když se omezíte na třídu ArrayList, metody které se dají použít a co musíte udělat, abyste vůbec mohli kolekce ve vašich programech používat. Dále si zjistěte, jak lze data z kolekcí číst a zpracovávat. Dalším bodem bude syntaxe příkazů cyklu – for, foreach a while. A poslední věcí budou primitivní typy pro práci s čísly v Javě. Obecně jaký typ kdy použít, jeho rozsah a případné převody mezi nimi – např. co se stane, když budu chtít převést typ double (desetinné číslo) na int (celé číslo). Doporučuji vše vyzkoušet na nějakém jednoduchém prográmku v BlueJ. Můžete si např. zkopírovat text z této šablony a všechny výpočty pouštět z metody main.
středa 7. listopadu 2007
Odkazy
http://cs.wikipedia.org/wiki/Java
http://en.wikipedia.org/wiki/Java_Platform%2C_Standard_Edition
http://cs.wikipedia.org/wiki/JDK
http://java.sun.com
http://dione.zcu.cz/java/
http://www.java.cz
http://forum.builder.cz
http://java.vse.cz/Main/HomePage
http://dsrg.mff.cuni.cz/~bures/teaching/java/
JDK
http://java.sun.com/javase/downloads/index.jsp stažení vývojového nebo běhového prostředí
http://java.sun.com/javase/6/docs/api/index.html dokumentace k jazyku
BlueJ
http://cs.wikipedia.org/wiki/BlueJ
http://www.bluej.org/
http://www.bluej.org/tutorial/tutorial-czech.pdf český tutorial, sice pro starší verzi, ale to až tak nevadí
Knihy online
http://java.sun.com/docs/books/tutorial/index.html Java tutorial - viz disk V:\
http://www.mindview.net/Books/TIJ/ Bruce Eckel – Thinking in Java, jsou zde jen starší vydání, 4th Edition je zatím pouze placená
Knihy offline:)
Bruce Eckel – Thinking in Java (Myslíme v jazyku Java)
Pavel Herout – Učebnice jazyka Java
Rudolf Pecinovský – Myslíme objektově v jazyku Java 5.0