1 / 68

4IT101

4IT101. třetí přednáška Rozhraní Základní programové konstrukce Ladění a testování. Zapouzdření. K datovému atributu deklarovanému s modifikátorem private lze přistupovat pouze pomocí metod. „Přečtení“datového atributu pomocí metody get …… Nastavení hodnoty pomocí metody set……. .

trula
Download Presentation

4IT101

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 4IT101 třetí přednáška Rozhraní Základní programové konstrukce Ladění a testování

  2. Zapouzdření • K datovému atributu deklarovanému s modifikátorem private lze přistupovat pouze pomocí metod. • „Přečtení“datového atributu pomocí metody get…… • Nastavení hodnoty pomocí metody set…….

  3. private typ nazev; publictypgetNazev() { return nazev; } private String rasa; publicStringgetRasa ( ) { return rasa; }

  4. private typ nazev; publicvoidsetNazev(typnazev) { this.nazev = nazev; } private String rasa; publicvoidsetRasa (String rasa) { this.rasa = rasa; }

  5. Interface

  6. Pojem rozhraní (interface) • uživatelské rozhraní (user interface), • aplikační programové rozhraní (API, application programming interface), • „vzdálené“ rozhraní (remote interface) • rozhraní (interface) – jazyková konstrukce Javy a dalších objektově orientovaných jazyků,

  7. import java.awt.*; /** * Ctverec, ktery se nakresli sam na Platno a se kterym je mozne manipulovat. * @author Michael Kolling * @author Lubos Pavlicek * @version 1.0 (15 July 2000) * @version 1.0cz (30 July 2004) */ public class Ctverec{ private int velikost; private int xPozice; private int yPozice; private String barva; /** * Vytvoreni noveho ctverce na defaltni pozici (60, 50) a s defaltni barvou (cervena). */ public Ctverec() { velikost = 30; xPozice = 60; yPozice = 50; barva = "cervena"; kresli(); }

  8. Aplikační rozhraní třídy

  9. API • jak metodu volat • dáno podpisem metody • kontroluje překladač • co je výsledkem metody a jsou nějak omezeny hodnoty parametrů • udává tzv. kontrakt (je to zapsáno v dokumentaci) • probíhá po zavolání metody

  10. Interface jako jazyková konstrukce • jedná se pouze o popis rozhraní, neobsahuje žádnou implementaci • říká, co musí třída obsahovat za metody, pokud uvádí, že implementuje toto rozhraní

  11. Kdy se interface používá? • Snížení závislosti mezi třídami • Jako odkaz na funkci

  12. <<interface>> Ovladani zapnout() vypnout() Lampa zapnout() vypnout() ..... Televize zapnout() vypnout() ..... Pračka zapnout() vypnout() ..... Tlacitko stisk ()

  13. Pravidla pro interface • nelze definovat obecné datové atributy pouze statické konstanty • public static final double KONSTANTA • všechny metody jsou veřejné • interface obsahuje pouze podpisy (hlavičky) metod ne implementaci public interface Ovladani { void zapnout(); void vypnout(); }

  14. Implementování interface • Třída, která implementuje interface, musí mít definované (implementované) všechny metody v něm definované. • Jedna třída může implementovat libovolný počet interface. • Jeden interface může implementovat libovolný počet tříd public class Lampa implements Ovladani{ ..... public void zapnout(){ ...... } public void vypnout(){ ..... } .........

  15. Přetypování na interface • instanci třídy lze vždy přetypovat na typ implementovaných rozhraní Lampa lampa = new Lampa(); Ovladani ovladani = (Ovladani)lampa; Ovladani ovladani = new Lampa();

  16. Základní programové konstrukce

  17. Obsah metody • deklarace a inicializace pomocné proměnné • volání metody • přiřazení • sekvence (posloupnost, blok příkazů) • selekce (rozhodování, větvení) • iterace (cyklus, opakování) • příkazy skoku z/v cyklu • příkaz return • vznik a obsluha výjimek • assert

  18. Bloky příkazů - sekvence • blok příkazů je skupina příkazů uzavřená mezi složené závorky { } • příkazy jsou prováděny postupně, podle pořadí uvedení • metoda je vždy tvořena blokem příkazů, který může obsahovat další bloky public Kruh() { prumer = 30; xPozice = 20; yPozice = 60; barva = "modra"; kresli(); }

  19. Selekce (větvení, rozhodování) • Jestliže bude hezky, půjdeme do zoo, jinak si pustíme film. • Když si uklidíš, půjdeš ven. • Když nebudeš zlobit, dostaneš čokoládu. • Když budeš zlobit, , jinak dostaneš čokoládu. if switch

  20. if (podmínka) { příkaz1; } else { příkaz2; } if (podmínka) { příkaz; } Příkaz if

  21. Selekce – příklad 1 public boolean vyber (double castka) { if (stav < castka) { return false; } else { stav = stav – castka; return true; } }

  22. Selekce – příklad 2 public void porovnavani(int cislo1, int cislo2) { if (cislo1 > cislo2) { System.out.println("Prvni cislo je vetsi"); } else { if (cislo1 == cislo2) { System.out.println("Obe cisla jsou stejna."); } else { System.out.println("Druhe cislo je vetsi"); } } }

  23. Příkaz switch switch (výraz) { casekonstanta1:příkaz1; break; casekonstanta2:příkaz2; break; casekonstanta3:příkaz3; break; casekonstanta4:příkaz4; break; // ... default: příkaz; };

  24. Příkaz switch Vývojový diagram, aktivity diagram v UML

  25. Obsah metody • deklarace a inicializace pomocné proměnné • volání metody • přiřazení • sekvence (posloupnost, blok příkazů) • selekce (rozhodování, větvení) • iterace (cyklus, opakování) • příkaz skoku z cyklu • příkaz return • vyvolání a obsluha výjimek • assert

  26. Iterace (cyklus, opakování) • Míchej kaši tak dlouho, dokud nezhoustne. • Čekej, dokud nedorazí. • Jeď, dokud nedojedeš na křižovatku. while do while for

  27. Příkaz while while (podmínka) { příkaz; }

  28. Cyklus while - příklad java.util.Random generator = new java.util.Random(); int nahoda = generator.nextInt(10); while ( nahoda != 0 ) { System.out.println(nahoda); nahoda = generator.nextInt(10); }

  29. Příkaz do – while do příkaz; while (podmínka);

  30. Příkaz for for (inicializace; podmínka; krok) { příkaz; }

  31. Cyklus for - příklady for (int i = 1; i <= 10; i++) { // příkazy } for (int i = 2; i <= 100; i += 2) { // příkazy }

  32. Cyklus for lze přepsat do while inicializace; while ( podmínka ) { příkaz; krok; }

  33. Příkaz for – varianta “for each” for(Typ identifikátor : kolekce){ příkaz; }

  34. Příkazy skoku z/v cyklu break– ukončí průběh cyklu a pokračuje se provádění příkazů za cyklem, continue – ukončí provádění tohoto průchodu cyklem a vrací se k testu vstupní podmínky, Lze je použít pouze v těle cyklu (break se používá ještě v příkazu switch). Lze použít i pro více vnořených cyklů pak je možné vytvořit si návěští (viz skripta).

  35. Příkazy skoku - break for (int i = 0; i <= 5; i++) { if (i == 3) { break; } System.out.print(i + ", "); } System.out.println("Konecprogramu"); Výpis bude vypadat takto: 0, 1, 2, Konec programu

  36. Příkazy skoku - continue for (int i = 0; i <= 5; i++) { if (i == 3) { continue; } System.out.print(i + ", "); } System.out.println("Konecprogramu"); Výpis bude vypadat takto: 0, 1, 2, 4, 5, Konec programu

  37. Příkaz return • Je v podstatě také příkazem skoku, ukončí činnost metody a případně vrátí výsledek požadovaného typu, činnost programu pokračuje prováděním příkazů uvedených za voláním metody

  38. public Ucet (int noveCislo, String jmeno, double castka){ cislo = noveCislo; vlastnik = jmeno; stav = castka; } public class Bankomat ....... { Ucet ucet1 = new Ucet(1,"Pepa",1000); double kolikMa =ucet1.getStav(); Sytem.out.println("Na uctu je "+ kolikMa); boolean povedloSe = ucet.vyberZUctu(10000); ........ } ........... boolean vyber (double castka) { if (stav < castka) { return false; } else { stav = stav – castka; return true; } } public double getStav() { return stav; }

  39. Rekurze

  40. Výpočet faktoriálu public static intfaktorialCykly(intcislo){ if (cislo < 0 ){ // vyhodí výjimku, není definováno thrownewIllegalArgumentException(); } if (cislo == 0){ return 1; } else{ intfaktorial = 1; for (int i = 1; i <= cislo; i++){ faktorial *=i; } returnfaktorial; } } public static intfaktorialRekurze(intcislo){ if (cislo < 0 ) { // vyhodí výjimku, není definováno thrownewIllegalArgumentException(); } if (cislo == 0) { return 1; } else { returncislo * faktorialRekurze(cislo - 1); } } • Faktoriál je formálně definován takto:

  41. Co vypíší následující příkazy ? • System.out.println(“H” + “a”); • System.out.println(‘H’ + ‘a’); Ha 169

  42. Testování a ladění

  43. Jednotkové testování • Slouží k testování jednotlivých tříd. • Testuje se každá metoda (neprivátní), která vrací hodnotu. Zda při zadaných vstupech vrací odpovídající výstupy. • Testuje se také, zda metoda správně vyhazuje výjimky, či zda nevyhazuje výjimky v případě správných vstupů.

  44. Postup práce při vývoji podporovaném testy • navrhnout rozhraní vytvářené a testované třídy • navrhnout a implementovat testy • naimplementovat vytvářenou třídu • spustit testy • dokud neprojdou všechny testy, upravovat kód a znovu testovat

  45. JUnit • Testovací frameworkJUnit je přímo zakomponován v BlueJ ve verzi 4.8. • Open Source nástroj pro testování tříd napsaných v Javě (i tento nástroj je napsán v Javě) • K dispozici na www.junit.org ve verzi 4.10 - od verze 4.0 se používají anotace

  46. Vytváření testů v JUnit • Testy jedné třídy se vytváří jako samostatná třída. • Každý test je jedna metoda, výsledek (projde/neprojde) se zjistí: • pomocí metody assertXxx – porovnávají se očekávané hodnoty a skutečné hodnoty, • pomocí metody fail(StringtextChyby) se ohlásí chyba – používá se v případě, že nelze použít metoda assertXxx (např. při zjišťování, zda se opravdu vyskytne výjimka),

  47. Metody assertXxx() • assertEquals(očekávanáHodnota, skutečnáHodnota) • assertEquals(zpráva,očekávanáHodnota, skutečnáHodnota) • assertFalse(podmínka) • assertFalse(zpráva, podmínka)

  48. Metody assertXxx() • assertTrue • assertNull • assertNotNull • assertSame • assertNotSame

More Related