PB162/Příprava

Z FI WIKI
Přejít na: navigace, hledání

This page is part of the private documentation of the PA162.

Organizace výuky podzim 2008

Úlohy

Za přípravu úloh je odpovědný Radek Ošlejšek.

Zadání

  1. Jednoduchá interakce objektů - cíl: Systém zhruba dvou až tří tříd (a instancí od nich) z reálného života, obecně známá problematika (vloni byly Knihovna/Titul/Vytisk). Žádné datové struktury, aritmetické operace, žádné slož. pg. struktury (cykly). Jde o syntaxi a sémantiku základního návrhu tříd.
  2. Implementace rozhraní - cíl: Navrhnout třídu (nebo dvě), aby implementovala/y předem dané rozhraní.
  3. Dědičnost - cíl: Navrhnout třídy v hierarchii; mohou využívat základ hierarchie či kopírovat postup viditelný z předem dané hierarchie.
  4. Pole? - cíl:
  5. Výjimky - cíl: Navrhnout prográmek s dobře metodicky zdůvodněným použitím vlastních (tedy non-Java Core) hlídaných výjimek.
  6. Kontejnery I - cíl: Procvičit základní práci s kontejnery.
  7. Kontejnery II - cíl: Navrhnout třídy s použitím složitějších kontejnerů z Java Core API s použitím generics.
  8. Vstupy/výstupy - cíl: Navrhnout aplikaci s použitím I/O např. do textových souborů.

Zadání úloh

  • jednotný formát: projekt v BlueJ existující ve dvou verzích - pro studenty (zadání, potřebné předchystané třídy a povinně testy) a vzorové řešení (dtto + doplněné řešení)
  • povinně použití BlueJ pro softwarovou i textovou část zadání
  • uložení zadání do SVN repository
  • všechny zdrojové kódy prohnat nástrojem native2ascii kvůli přenositelnosti zdrojových kódů mezi windows (cp1250) a Linuxem (iso-8859-2 nebo UTF-8, podle nastavení uživatele). V komentářích psát cesky (tj. bez diakritiky), neboť text zlutoucky je rozhodně čitelnější než \u017elu\u0165ou\u010dk\u00fd. Identifikátory budou psány výhradně anglicky!

Opravování úloh

  • Strhávejte po půl bodech. Strhávat desetiny nemá význam.
  • Úlohu opravte co nejdříve, maximálně do 14 dnů. Jde o to, aby studenti získali včas zpětnou vazbu a neopakovali stejné chyby v dalších úlohách a písemkách.
  • Při zjištění podvodu:
    • V méně závažnějších případech považovat úlohu za neodevzdanou, tj. -4 body.
    • V závažných nebo opakovaných případech -100 bodů a disciplinární komise.
  • Kritéria pro hodnocení 1. úlohy
    • nepopisne nazvy atributu -0.5
    • ceske nazvy atributu, nedodrzeni konvenci pro pojmenovani -0.5
    • pouziti jineho kodovani textu nez ASCII, diakritika v komentarich -0.5
    • GasStation ma navic atributy, ktere se kryji s atributy tridy FuelTank -0.5,
      • dost casto je spolecne s tim, ze metoda toString pouziva tyto prebytecne atributy misto toho, aby volala toString ze tridy FuelTank -0.5
      • nebo se používají místo gasTank a dieselTank ve všech metodách -1
    • Nedodrzeni zadani u metody main (jina jmena pump, ...) -0.2
    • nesouhlasi umisteni souboru s nazvem baliku, spatna struktura archivu (pozaduji jar/zip s adresarem cz) - neodevzdana uloha, po opravě strhnout 1 bod (případně jako u pozdě odevzdané úlohy, pokud by byla oprava odevzdána s velkým zpožděním)
    • spatne hlavicka main -1
    • chybějící JavaDoc komentáře: až -1 (v závislosti na závažnosti prohřešku)
    • chybi atribut name u tridy GasStation, z cehoz plyne spatne vracena hodnota metody toString -0.5
    • primy pristup k atributum tridy GasStation v metode main (misto pouziti odpovidajicich metod) -0.5
  • Kritéria pro hodnocení 2. úlohy
    • trida Bell metoda pushButton realizovana pomoci metody up -> zmena hlasitosti zvonku -0.5
    • pouzit konstrukce if (ringing) return ringing; else ringing; -0.5
    • ceske identifikatory atributu/promennych -1
    • pro singnalizaci stavu svetla pouzit retezec a podminky tvaru if ( retezec == "on") resp. if (retezec == "off") -0.5
    • 3 a vice drobnych prohresku (konstrukce if(podminka == true), println(a.toString()), pojmenovani atributu vyjadrujiciho stav getState, ... -0.5
    • opakovane vraceni hodnot v jednoduchych metodach na vice mistech -0.5
    • nesouhlasi vypis z metody testDevice -0.5
    • nadbytecne atributy -0.5
    • chyba v metode up()/down(), pripadne prilis komplikovana implementace techto metod -0.5
  • Kritéria pro hodnocení 3. úlohy
  • Kritéria pro hodnocení 4. úlohy
  • Kritéria pro hodnocení 5. úlohy
  • Kritéria pro hodnocení 6. úlohy
  • Kritéria pro hodnocení 7. úlohy
  • Kritéria pro hodnocení 8. úlohy

Získání úloh z repozitory - obsolete

Úlohy je možné z repozitory získat příkazem

svn co https://kore.fi.muni.cz:5443/repos/fi/teaching/pb162

Tento adresář obsahuje (resp. bude obsahovat) veškeré studijní materiály k našim kurzům. Úlohy do PB162 se nacházejí v podadresáři tasks. Ke každé úloze je k dispozici ANT skript pro její zabalení do archivu pro studenty. Aby jej bylo možné použít, je nutné nastavit několik cest v souboru build.xml v adresáři teaching.

Připomínky k úlohám v roce 2007

  • 1. úloha - V zadání odstranit diakritiku z komentáře "První třída jako první úloha do kurzu PB162.", odporuje to našemu požadavku na komentáře bez diakritiky.
  • 6. úloha: V testech zjišťovat chybnou implementaci equals() pomocí hashCode(). Využít toho, že "nazdar" a "nazdc4" mají stejný hash code. Případně String(new char[] {4,26,0,19,29,24,4}) === String(new char[] {9,21,1,8,28,17,8}) === "".

Připomínky k úlohám v roce 2006

  • 1. úloha - Volba pro přechod zdroj -> JavaDoc se už nejmenuje "Interface", ale "Documentation"
  • 2. úloha - v třídě main promíchat práci s oběma výrobnama propisek, aby se studentům projevila chyba toho, když jsou atributy počet propisek a počet náplní static . Například vytvoří se první výrobna, vyrobí náplň + propisku, vypíše stav, vytvoří se druhá výrobna a vyrobí náplň + propisku, první výrobna vyrobí 3 náplně a propisku, druhá výrobna vyrobí dvě náplně a dvě propisky. Dále testovat metodu toString() ve tride PenFactory.
  • 4. úloha - Pokud není třída AbstractGraphicShape public, neprojdou testy. To jen tak pro informaci, nevím, jestli je nutné upravovat testovací třídu.
  • 5. úloha - Přidat třídu Person s jinou implementací metody hashCode(), docela dost studentů testuje konkrétní implementaci metody hashCode() a nikoliv její kontrakt.
  • 6. úloha - Testovací třída by měla testovat úspěšnost vícenásobného volání metody send() nad jednou instancí třídy MyMessenger. Dále chybí kontrola toho, jestli odeslaná zpráva skutečně "dojde" nezměněná na zadanou adresu.
  • Testovací třídy by mohly testovat zda studenti kontrolují validitu argumentů předávaných do metod a vyhazují odpovídající výjimky.

Písemky

  • jednotné konvence pro pojmenování složek se zadáním - viz níže

Zadání písemek

Zadání písemek bude mít stejnou formu jako zadání domácích úloh. Testovací třídy však nebudou tolik podrobné a především nebudou testovat samozřejmé věci (konvence pro pojmenování, přístupová práva apod.). Jako vzor lze použít zadání úloh a písemek v repozitory.

První písemka

  • Pondělí 13.10. od 20:00 hod.
  1. Martin Hinca (A104)
  2. Martin Janík (B130)
  3. Michal Oprendek (B117)
  4. Radek Ošlejšek (B116 + notebooky)
  5. Tomáš Pitner (B130)
  6. Luděk Bártek (B311)
  • Úterý 14.10. od 20:00 hod.
  1. Tomáš Gregar (A104)
  2. Jan Pavlovič (B116)
  3. Aleš Zlámal (B117)
  4. [jméno] (B116 - notebooky)
  5. Martin Janík (B130)
  6. Radek Ošlejšek (B130)
  7. Luděk Bártek (B311)
  • Středa 15.10. od 20:00 hod.
  1. Michal Oprendek (A104)
  2. Martin Janík (B116)
  3. Aleš Zlámal (B117)
  4. Pavel Drášil (B116 - notebooky)
  5. Jan Pavlovič (B130)
  6. [jméno] (B130)
  7. Tomáš Gregar (B311)
  • Pátek 17.10. od 12:00 hod.
  1. Luděk Bártek (B116)
  2. [jméno] (B130)
  3. [jméno] (B130)
  4. Pavel Drášil (B311)

Druhá písemka

  • termín
  1. [jméno] ([učebna])

Třetí písemka

  • termín
  1. [jméno] ([učebna])

Opravná písemka + závěrečná (předtermín)

  • termín
  1. [jméno] ([učebna])

Závěrečná písemka

  • termín
  1. [jméno] ([učebna])

Zpětná vazba z písemek

Prosím o zapisování vašich postřehů z písemek pro následující účely:

  • podrobnější návod pro psaní textu zadání písemek, případných spouštěných metod main() a testovacích tříd:
  1. ve všech prvních písemkách chybělo nějaké úvodní povídání prózou, jaká situace se programem modeluje
  2. ve středu 17. října 2007 chybělo, co má vrátit toString() objektu Repository, když je skříňka obsazena (většina si to odvodila z chybových textů testu), ale v metodě main() měl být výpis instanciovaného objektu typu Repository s atributem free nastaveným na false
  3. páteční (19. října 2007) test byl až příliš podobný loňskému s vlaky, který jsem týden před testem viděl studenty řešit
  4. v testech by se pro hodnoty id objektů měly používat různé instance Stringů, aby se odhalilo porovnávání objektů pomocí == místo equals(), např. "a" a new String("a")
  5. v testech by se pro hodnoty id objektů mohly používat různé hodnoty se stejným hashCode(), aby se odhalila imlementace equals() pomocí hashCode(). Například dvojice Stringů "30","1n" má stejné heše, ačkoliv mají různý obsah. Další dvojice jsou např. ("40","2n"), ("x1","vo").
  • co dalšího studentům říci či zdůraznit na cvičení:
  1. jak se testuje rovnost objektů - včetně Stringu
  2. přiřazení má hodnotu, která se rovná přiřazované hodnotě
  3. zdůraznit rozdil mezi "=" a "=="
  4. dávat pozor na pořadí parametrů metod
  5. pokud si autor není 100% jist jaká je implicitní inicializace atributů, tak ať raději atribut inicializuje sám explicitně
  6. upozornit studenty, že třída nemusí mít tolik, případně více, atributů než kolik má konstruktor parametrů
  7. "if (podminka) return true; else return false;" je ekvivalentní k "return podminka;"
  8. upozornit studenty, že pomocné metody nedeklarované v rozhraní by neměly být public

Ukládání do IS

Návrh systému vnitřního mapování (vnitřních odkazů) na jednotlivé typy materiálů v IS:

Odevzdávárny řešení písemek a úloh

Zadání písemek a úloh

  • URL složky zadání bude https://is.muni.cz/auth/el/1433/podzim2007/PB162/za, v rámci této složky budou podsložky:
    • pisemka1/2005-10-06-0800 – zadání písemky pro určitý společný termín;
    • uloha1 – zadání úlohy daného čísla (číslo může být 1..8 nebo 'premiova').

Prostředí pro vývoj