neděle 9. prosince 2007

Jeden odkaz

Všem vám doporučuju přečíst si tenhle článek - chtěl bych, abyste se těch doporučení ve vašich projektech drželi.
http://www.linuxsoft.cz/article.php?id_article=815

úterý 4. prosince 2007

Výsledky 2. testu

Výsledky druhého testu. Opravný termín bude příští týden, sledujte adresář Cvičení na disku V:\. K těm vašim projektům se dostanu během víkendu, pak zde najdete vyjádření.


pátek 30. listopadu 2007

Co na další středu

Tak, v rychlosti co tedy na příští středu.
  1. Odevzdejte mi do pondělka všechny projekty a úkoly, které mi dlužíte
  2. Projděte si znovu projekt balls, který jsme měli teď na semináři a pokuste se pochopit jak funguje:)
  3. Najděte si někde, co to jsou vnitřní třídy a jak s nimi pracujeme
Jinak já sem dám ještě do příští středy výsledky testu (část už je jich teď na disku V:\ v adresáři k cvičení a budu k vám mít jednu věc, která se týká testů) a také se kouknu na ty vaše projekty, co jste mi odevzdávali a ti z vás, co mi odevzdali ten bonusový úkol také budou mít nějakou odezvu.

úterý 27. listopadu 2007

2007-11-28

Nj, dávám to sem hodně pozdě, omlouvám se, ale dřív jsem se k tomu nedostal. Takže jen tak v bodech připomenutí toho důležitého na seminář tuhle středu.
  1. 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
  2. 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:)
  3. 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í:)
Před testem budete mít ještě prostor pro otázky, test bude na půl hodiny a témata se budou dotýkat cyklů a práce s kolekcemi. Dále trošku dostanou prostor projekty k zápočtům, trošku projdeme to zadání a řekneme si, jak zhruba by to asi mělo vypadat. And that's all for today.

úterý 20. listopadu 2007

Výsledky posledního opravného testu (15.11.2007)

Heřman, Michal 13 bodů
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

Takže, jsou tady poznámky a připomínky k vašim projektům. Některé poznámky vám možná přijdou nadbytečné, ale nejsou, věřte mi. Existují jisté způsoby a konvence a pokud se je naučíte, budete mít dál méně starostí, budete psát programy rychleji a efektivněji. A o tom to je:) Nechci vám nutit svůj styl programování, každý ať si najde svůj, ale zároveň byste se také měli držet zlaté střední cesty, protože ta tu není bezdůvodně:)

Ú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)

Výsledky si můžete prohlédnout zde na stránkách, popřípadě pokud by se vám nezobrazovaly, je možné je otevřít tímto odkazem.

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.

Příklad dokumentačního komentáře:

/**
* 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:

  1. Počet studentů, kteří napsali test úspěšně
  2. 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

Programovací jazyk Java
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