+ All Categories

4IT101

Date post: 23-Feb-2016
Category:
Upload: trula
View: 46 times
Download: 0 times
Share this document with a friend
Description:
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……. . - PowerPoint PPT Presentation
68
4IT101 třetí přednáška Rozhraní Základní programové konstrukce Ladění a testování
Transcript
Page 1: 4IT101

4IT101třetí přednáška

RozhraníZákladní programové

konstrukceLadění a testování

Page 2: 4IT101

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…….

Page 3: 4IT101

private typ nazev;

public typ getNazev() { return nazev;}

private String rasa;

public String getRasa ( ) {

return rasa;}

Page 4: 4IT101

private typ nazev; public void setNazev(typ nazev) { this.nazev = nazev;}private String

rasa;public void setRasa (String rasa) {

this.rasa = rasa;}

Page 5: 4IT101

Interface

Page 6: 4IT101

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ů,

Page 7: 4IT101

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(); }

Page 8: 4IT101

Aplikační rozhraní třídy

Page 9: 4IT101
Page 10: 4IT101
Page 11: 4IT101

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

Page 12: 4IT101

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í

Page 13: 4IT101

Kdy se interface používá?

• Snížení závislosti mezi třídami• Jako odkaz na funkci

Page 14: 4IT101

Tlacitko

stisk ()

Lampa

zapnout()vypnout()

.....

<<interface>>Ovladani

zapnout()vypnout()

Televize

zapnout()vypnout()

.....

Pračka

zapnout()vypnout()

.....

Page 15: 4IT101

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();}

Page 16: 4IT101

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(){.....}.........

Page 17: 4IT101

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();

Page 18: 4IT101

Základní programové konstrukce

Page 19: 4IT101

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

Page 20: 4IT101

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(); }

Page 21: 4IT101

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.

ifswitch

Page 22: 4IT101

Příkaz if

if (podmínka) { příkaz1; } else { příkaz2;}

if (podmínka) { příkaz;}

Page 23: 4IT101

Selekce – příklad 1

public boolean vyber (double castka) { if (stav < castka) { return false; } else { stav = stav – castka; return true; }}

Page 24: 4IT101

Selekce – příklad 2public 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");}

}}

Page 25: 4IT101

Příkaz switch

switch (výraz) { case konstanta1: příkaz1; break; case konstanta2: příkaz2; break; case konstanta3: příkaz3; break; case konstanta4: příkaz4; break; // ... default: příkaz;};

Page 26: 4IT101

Příkaz switch

výraz == konstanta1 příkazy1

false

true

výraz == konstanta2

výraz == konstanta3

příkazy2

příkazy3

default příkazy

výraz == konstantaN příkazyN

false

false

false

true

true

true

break

break

break

break

výraz == konstanta1 příkazy1

false

true

výraz == konstanta2

výraz == konstanta3

příkazy2

příkazy3

default příkazy

výraz == konstantaN příkazyN

false

false

false

true

true

true

Vývojový diagram, aktivity diagram v UML

Page 27: 4IT101

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

Page 28: 4IT101

Iterace (cyklus, opakování)

• Míchej kaši tak dlouho, dokud nezhoustne.

• Čekej, dokud nedorazí.• Jeď, dokud nedojedeš na

křižovatku.

whiledo whilefor

Page 29: 4IT101

Příkaz whilewhile (podmínka) {

příkaz;}

vyhodnocení podmínky

provedení příkazu(těla cyklu)

false

true

Page 30: 4IT101

Cyklus while - příkladjava.util.Random generator = new java.util.Random();int nahoda = generator.nextInt(10);while ( nahoda != 0 ) {

System.out.println(nahoda);nahoda = generator.nextInt(10);

}

Page 31: 4IT101

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

vyhodnocení podmínky

provedení příkazu(těla cyklu)

falsetrue

Page 32: 4IT101

Příkaz forfor (inicializace; podmínka; krok) {

příkaz;}

vyhodnocení podmínky

provedení příkazu(těla cyklu)

false

true

inicializace

krok

Page 33: 4IT101

Cyklus for - příkladyfor (int i = 1; i <= 10; i++) {

// příkazy}

for (int i = 2; i <= 100; i += 2) {// příkazy

}

Page 34: 4IT101

Cyklus for lze přepsat do while

inicializace;while ( podmínka ) {

příkaz;krok;

}

Page 35: 4IT101

Příkaz for – varianta “for each”

for (Typ identifikátor : kolekce){příkaz;

}

Page 36: 4IT101

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

Page 37: 4IT101

Příkazy skoku - break

Výpis bude vypadat takto:0, 1, 2, Konec programu

for (int i = 0; i <= 5; i++) {if (i == 3) {

break;}System.out.print(i + ", ");

}System.out.println("Konec programu");

Page 38: 4IT101

Příkazy skoku - continue

Výpis bude vypadat takto:0, 1, 2, 4, 5, Konec programu

for (int i = 0; i <= 5; i++) {if (i == 3) {

continue;}System.out.print(i + ", ");

}System.out.println("Konec programu");

Page 39: 4IT101

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

Page 40: 4IT101

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);........}...........

public Ucet (int noveCislo, String jmeno, double castka){ cislo = noveCislo; vlastnik = jmeno; stav = castka;}

boolean vyber (double castka) { if (stav < castka) { return false; } else { stav = stav – castka; return true; }}

public double getStav() {return stav;}

Page 41: 4IT101

Rekurze

Page 42: 4IT101

Výpočet faktoriáluFaktoriál je formálně definován takto:

public static int faktorialCykly(int cislo){ if (cislo < 0 ){ // vyhodí výjimku, není definováno throw new IllegalArgumentException(); } if (cislo == 0){ return 1; } else{ int faktorial = 1; for (int i = 1; i <= cislo; i++){ faktorial *=i; } return faktorial; }}

public static int faktorialRekurze(int cislo){ if (cislo < 0 ) { // vyhodí výjimku, není definováno throw new IllegalArgumentException(); } if (cislo == 0) { return 1; } else { return cislo * faktorialRekurze(cislo - 1); }}

Page 43: 4IT101

Co vypíší následující příkazy ?

• System.out.println(“H” + “a”);• System.out.println(‘H’ + ‘a’);

Ha169

Page 44: 4IT101

Testování a ladění

Page 45: 4IT101

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ů.

Page 46: 4IT101

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

Page 47: 4IT101

JUnit• Testovací framework JUnit 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

Page 48: 4IT101

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(String textChyby) 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),

Page 49: 4IT101

Metody assertXxx()• assertEquals(očekávanáHodnota,

skutečnáHodnota)• assertEquals(zpráva,očekávanáHodn

ota, skutečnáHodnota)• assertFalse(podmínka)• assertFalse(zpráva, podmínka)

Page 50: 4IT101

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

Page 51: 4IT101

Používané anotace• @Test - označuje test, v každé

testovací třídě několikrát• @Before - označuje metodu

spouštěnou před každým testem (testovací přípravek, setUp)

• @After – označuje metodu spouštěnou po každém testu (tearDown)

• @BeforeTest• @AfterTest

Page 52: 4IT101

Importy při testování• import org.junit.After;• import org.junit.Before;• import org.junit.Test;• import static org.junit.Assert.*;

Page 53: 4IT101

Debugging• Použití speciálního nástroje, který

je buď samostatný nebo je součástí vývojového prostředí

• Pomocí zarážek (breakpointů) zastavuje provádění kódu a umožňuje krokování a prohlížení obsahu proměnných a datových atributů

Page 54: 4IT101

Debugger v BlueJ• Spuštění přes volbu Zobrazit• Umožňuje nastavit zarážky a

krokovat kód• Umožňuje prohlížení aktuálního

obsahu proměnných

Page 55: 4IT101
Page 56: 4IT101
Page 57: 4IT101
Page 58: 4IT101

Dokumentace

Page 59: 4IT101

Druhy dokumentace• Uživatelská

– Help– Manuál

• Programátorská– Grafická – diagramy tříd, sekvenční

diagramy, atd.– Dokumentace kódu (dokumentace

API)– Vlastní kód (včetně případných

komentářů)

Page 60: 4IT101

Dokumentace API Javy• Formát html• Dostupná na www.oracle.com,

odkaz je i na java.vse.cz

Page 61: 4IT101

Tvorba dokumentace kódu

• Podpora pro tvorbu dokumentace je zabudována již přímo v jazyce.

• Součástí Java SE SDK je nástroj javadoc, který generuje dokumentaci přímo ze zdrojových kódů tříd opatřených strukturovanými komentáři.

Page 62: 4IT101

Javadoc• Do zdrojového kódu se na určená

místa připisují komentáře uvozené /**

• Komentáře, které budou součástí dokumentace, mohou obsahovat i html kód pro formátování.

• V komentářích se používají speciální značky pro javadoc, které se pak příslušným způsobem promítají do dokumentace.

Page 63: 4IT101

Značky pro javadoc• @author jméno• @version označení• @param název popis• @return popis• @throws název popis• @exception název popis• @deprecated komentář• @since verze• @see odkaz• {@ link název text}

Page 64: 4IT101

Komentář k celé třídě/** * Tato třída implementuje interface Kalkulator, které představuje komunikační rozhraní * mezi logikou a grafikou jednoduché celočíselné kalkulačky. * Třída implementující toto rozhraní představuje logiku aplikace. * Rozhraní má tři skupiny metod: * a) pomocí metody getHodnotaKZobrazeni grafická třída zjišťuje co má zobrazit na * displeji, * b) metody cislice, plus, minus, rovnaSe a vymaz se volají při stisknutí příslušné * klávesy na kalkulačce, * c) metody getAutor a getVerze jsou informační * * * @author Jarmila Pavlíčková * @version 10.10.2007 */

public class MujKalkulator implements Kalkulator{

Page 65: 4IT101

Vygenerovaná dokumentace

Page 66: 4IT101

Komentáře k jednotlivým metodám

/** * Metoda vrací hodnotu, která se má zobrazit na displayi kalkulacky. Tato metoda * se obvykle volá po zavolání metody odpovídající stisku tlačítka. * * @return hodnota k zobrazení */ public int getHodnotaKZobrazeni() { return 0; }

/** * metoda se volá při stisknutí tlačítka s číslicí na kalkulačce. Parametrem * je hodnota na stisknuté klávese. * * @param hodnota hodnota na stisknutém tlačítku, hodnota je v rozsahu * od 0 do 9 */ public void cislice(int hodnota) { }

Page 67: 4IT101

Vygenerovaná dokumentace

Page 68: 4IT101

Použité zdroje• java.sun.com• Pavlíčková, Pavlíček : Úvod do Javy• Pecinovský: Myslíme objektově v jazyku Java

5.0• Eckel: Myslíme v jazyku Java, dva díly – Grada

• www.junit.org

Java je registrovanou známkou firmy Sun Microsystems


Recommended