4IT101 Testování a ladění, dokumentace API třídy,

Slides:



Advertisements
Podobné prezentace
(instance konkrétní třídy)
Advertisements

ŘÍDÍCÍ STRUKTURY - PODMÍNKY
Tabulky v MS ACCESS Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Mgr. Jiří Novák.
Programovací jazyk C++
Pascal - příklady.
Semestrální práce KIV/PT Martin Kales Hana Hůlová.
Třída Array Je součásti balíčku java.util Účelem je usnadnit práci s poli Metody – nejpoužívanější equel(),fill(),sort() a binarySearch() equels() Slouží.
ÚVOD DO CPP 7 Dědičnost - pokračování
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
Uživatelská rozhraní Uživatelská rozhraní 9. cvičení.
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
Počítače a programování 1. Obsah přednášky Výjimky - základní typy výjimek Způsoby zpracování výjimek.
4IT1014IT101 Pátá přednáška Datové struktury - pokračování Statické prvky třídy.
4IT101 šestá přednáška.
Polymorfismus Dědičnost
C# pro začátečníky Mgr. Jaromír Osčádal
Desáté cvičení Java Core API Java Collection Framework JavaDoc.
J a v a Začínáme programovat Lucie Žoltá pole řetězec debugr.
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
J a v a Začínáme programovat Lucie Žoltá. Odkazy - oficiální stránky (překladače, help, metody, vývojové prostředí NetBeans,...)
Rudolf Pecinovský Kontejnery Rudolf Pecinovský
Druhá přednáška Datové typy a operátory Zapouzdření Pojem rozhraní
C# - datové typy Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
State. State – kontext a problém Kontext  chování objektu má záviset na jeho stavu, který se typicky mění za běhu Neflexibilní řešení  metody obsahují.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
Kapitoly z metodologie pedagogického výzkumu Prostředí pro výuku algoritmů Vojtěch Ouška.
4IT101 7.přednáška Třída String a regulární výrazy Algoritmy v kolekcích Vnitřní a vnořené třídy.
Vaše jistota na trhu IT Generické a parametrizované datové typy a metody Rudolf PECINOVSKÝ 1.
Ing. Josef Veselý Označení šablony a vzdělávací sady viz.rozpis.
Třída jako zdroj funkcionality
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
C# - Exceptions (výjimky)
Objektové programování
Ing. Josef Veselý Označení šablony a vzdělávací sady viz.rozpis.
Jedenácté cvičení Vlákna. Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading -
Počítače a programování 1
JavaScript Podmínky, cykly a pole.
Čísla Desetinná čísla. čísla desetinná se v PC ukládají jiným způsobem než čísla celá – výpočty s nimi provádí dvě odlišné části procesoru při výpočtech.
Návrh a tvorba WWW Cvičení 4
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
IB111 Programování a algoritmizace
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Dokumentace informačního systému
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
12/04/20151 Kolekce (1) Kolekce (collection) představují standardní datové struktury (seskupení) prvků (objektů) Jsou definovány ve jmenném prostoru System.Collections.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
Šesté cvičení Výjimky Balíky.
Netrvaloppa21 Vytvořte třídu Student pro reprezentaci struktury student na ZČU. Atributy třídy budou fakulta a osobniCislo. Název třídy: Student proměnné.
PJV031 Přetypování (casting) Objekty, atributy, lokální proměnné, parametry a návratové hodnoty metod mají definovaný, neměnný typ. Jsou dva druhy typů:
STRING A UKAZATELE. Co to je řetězec? Řetězec v Javě je samostatný objekt. Je konstantní, co znamená, že jednou vytvořený řetězec nelze změnit. Chceme-li.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Pokročilé programování v C++ (část B)
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část I.
JavaScript úvod. Jazyky webového vývojáře Dynamická stránka  aktivně mění svůj obsah v reakci na činnost uživatele  zpracování na straně serveru (PHP,
Template Method. Motivační příklad – reálný svět Čaj 1) Uvař vodu 2) Dej do hrnku sáček čaje 3) Zalij hrnek 4) Přisyp cukr a vymačkej citrón Káva 1) Uvař.
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Datové typy a operátory Základní programové.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA:
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
Moduly.
Y36PJC Programování v jazyce C/C++
Vzorové řešení zápočtového testu
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Návrhový vzor Flyweight
Polymorfismus = Mnohotvarost
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Transkript prezentace:

4IT101 Testování a ladění, dokumentace API třídy, třída Object-některé metody, datové struktury – seznamy

Testování a ladění

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

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

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

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

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)

Metody assertXxx() assertTrue assertNull assertNotNull assertSame assertNotSame

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

Pořadí spouštění metod při spuštění testů Metoda označená @BeforeTest Metoda označená @Before Metoda označená @Test Metoda označená @After …………. Metoda označená @AfterTest

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

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ů

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 Nastavení zařážek Kód musí být přeložený Kliknete myší na číslo řádku kódu, kde chcete provádění zastavit (objeví se značka stop)

Dokumentace

Druhy dokumentace Uživatelská Programátorská Help Manuál Grafická – diagramy tříd, sekvenční diagramy, atd. Dokumentace kódu (dokumentace API) Vlastní kód (včetně případných komentářů)

Dokumentace API Javy Formát html Dostupná na www.oracle.com, odkaz je i na java.vse.cz

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.

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.

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}

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 {

Vygenerovaná dokumentace

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) { Komentáře k jednotlivým metodám

Vygenerovaná dokumentace

Třída Object

protected a clone()

Metoda toString() public String toString() Překrývání této metody je doporučeno Metoda je použita automaticky kdykoli je instance třídy parametrem metody System.out.println() nebo použijete operátor + a druhý operand je typu String Když metodu ve Vaší třídě nepřekryjete, bude výpis obsahovat jméno třídy a hashCode např. Ucet@82f0db

Metoda toString() ve třídě Ucet public class Ucet { private int cislo; private String vlastnik; private double stav; @Override public String toString() { return ("Ucet cislo: "+cislo+",vlastnik: "+vlastnik); } .................................

Anotace @Overiide Tato anotace je kontrolovaná překladačem a nedovolí metodu přetížit pouze překrýt (nedovolí vám napsat jinak hlavičku metody)

Metoda equals() public boolean equals( Object o) je reflexivní, tj. x.equals(x) = true je symetrická, tj. x.equals(y)= true pouze tehdy když y.equals(x)=true je tranzitivní, tj. když x.equals(y)=true a y.equals(z) = true tak x.equals(z) musí vrátit také true je konzistentní, tj. pro nezměněné instance vrací vždy stejnou hodnotu pro všechny hodnoty, které nejsou null, vrací x.equals(null) false metoda equals() by měla záviset na datových atributech, které se v průběhu života instance nemění

Metoda equals() Ucet ucet1 =new Ucet(1,"Dana",10); boolean rovnost = (ucet1==ucet2); boolean rovnost2 = ucet1.equals(ucet2); ucet1 reference ucet2 1,"Dana",10.0 1,"Dana",10.0

Kdy nepřekrývat equals() Každá instance dané třídy je svou podstatou jedinečná, to platí pro třídy, které představují aktivní jednotky např. třída Thread představující vlákno aplikace. Porovnání dvou instancí je pro aplikaci nepodstatné, např. porovnání dvou generátorů náhodných čísel.

Kdy nepřekrývat equals() Metoda equals() je již překrytá u předka a implementace vyhovuje i u potomka (blížší informace při výkladu dědičnosti). Daná třída je soukromou vnitřní třídou a metodu equals() nebude nikdo moci „z venku“ zavolat a mi ji nepotřebujeme

Postup při překrývání equals Porovnáme odkazy, pokud jsou shodné vrátíme hodnotu true. Pomocí operátoru instanceof ověříme, za parametr je správného typu. Pokud parametr není odpovídajícího typu, vrátíme hodnotu false. V dalším kroku převedeme (přetypujeme) parametr na odpovídající typ. Pro každý „významný” atribut (atribut, který jste se rozhodli zařadit do porovnávání) zjistíme rovnost.

Zjišťování rovnosti datových atributů Pro zjišťování rovnosti datových atributů, které jsou primitivního typu, použijeme ==. Pro porovnání referenčních typů metodu equals(). U hodnot referenčních typů je třeba ještě před porovnáváním zjistit, zda neobsahují hodnotu null, protože by při volání metody equals() byla vyhozena výjimka NullPointerException.

Metoda equals() ve třídě Prostor public class Prostor { private String nazev; …………………………………………… @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof Prostor)) { return false; Prostor druhy = (Prostor) o;  

Metoda equals() ve třídě Prostor if (this.nazev != null && druhy.nazev != null && this.nazev.equals(druhy.nazev)) { return true; } else { if (this.nazev == null && druhy.nazev == null) { }   else { return false; //return (java.util.Objects.equals(this.nazev, druhy.nazev)); ................................................

Datové struktury

Datové struktury jaro Pepa Jarmila léto Jakub podzim Honza zima Filip Lukáš Tomáš ... jaro léto podzim zima Kolekce Seznamy Množiny Fronty Pole Jednorozměrná vícerozměrná Mapy Výčtový typ

Pepa Vašek Dušan 5804 Luboš Jarmila Renata 5806 pondělí 8 úterý 9 středa 7 čtvrtek 10 pátek 6

Kolekce Rozhraní Implementace Algoritmy Generické typy Collections vysvětlit i rozhraní Collections

Základní vlastnosti seznamů (List) Libovolný počet prvků Udržuje pořadí Může obsahovat více prvků stejné hodnoty Lze používat indexy

Operátor diamand, novinka Javy 7.0 Vytvoření seznamu List <Ucet> seznamUctu = new ArrayList<Ucet>(); List <Ucet> seznamUctu = new ArrayList<>(); List<String> seznam = new ArrayList<String>(); List<String> seznam = new ArrayList<>(); List<Integer> seznamCisel = new ArrayList<Integer>(); List<Integer> seznamCisel = new ArrayList<>(); Operátor diamand, novinka Javy 7.0

Vkládání položek do seznamu Metoda add(E prvek) seznamUctu.add(new Ucet (1,“Pepa“,2000.00); seznam.add(“pes”); seznam.add(“kočka”);

Základní vlastnosti množin (Set) Libovolný počet prvků Neudržuje pořadí Nemůže obsahovat více prvků stejné hodnoty Nelze používat indexy

Vkládání položek do množiny Metoda add(E prvek) Set<String> mnozina = new HashSet<String>(); Set<String> mnozina = new HashSet<>(); mnozina.add("pes"); mnozina.add("kočka"); mnozina.add("morče");

Metody rozhraní Collection<E> Metoda Užití boolean add (E element) Přidá do kolekce prvek typu E. Pokud se operace nepodaří, vrací false. void clear( ) Zruší všechny prvky v kolekci. boolean contains(Object o) Vrací true, jestliže kolekce obsahuje prvek uvedený jako argument metody. boolean isEmpty( ) Vrací true, jestliže je kolekce prázdná. boolean remove(Object o) Jestliže kolekce obsahuje argument, je odpovídající prvek zrušen. Vrací true, když je prvek zrušen. int size( ) Vrací počet prvků uložených v kolekci. Iterator <E>iterator() Vrací instanci rozhraní Iterator, pomocí které je možno procházet tuto kolekci

Procházení kolekce - “for each” for (typ identifikátor : kolekce) { příkaz; } for (String zvire : seznam){ System.out.println(zvire); } Připomenout typ z deklarace kolekce !!! for (String zvire : mnozina){ System.out.println(zvire); }

Metody rozhraní List<E> Metoda Užití void add (int index, E element) Přidá do kolekce na zadanou pozici prvek typu E. E get(int index) Získání prvku na zadané pozici v seznamu. E remove(int index) Zruší prvek ze zadané pozice seznamu, tento prvek vrací jako návratovou hodnotu.

Vkládání položky do seznamu na zadanou pozici Metoda add(int pozice, E prvek) seznam.add(0, “morče”);

Rušení položky na zadané pozici seznamu Metoda remove(int pozice) seznam.remove(1);

Procházení seznamu s využitím indexů for (int i = 0; i < seznam.size(); i++) { System.out.println ("" + i + ". " + seznam.get(i)); } 0. morče 1. kočka 2. pes

HashSet – vkládání prvků a jejich shodnost Jestli jsou dvě instance jedné třídy shodné, je dáno implementací metody equals() Pro vkládání do HashSetu se využívá i metoda hashCode()

2 Set<Pes> seznamPsu = new HashSet<>(); public class Pes { private String jmeno; private String rasa; public Pes(String jmeno, String rasa) { this.jmeno = jmeno; this.rasa = rasa; } public String getJmeno() { return jmeno; public String getRasa() { return rasa; Set<Pes> seznamPsu = new HashSet<>(); seznamPsu.add(new Pes("Alík", "voříšek")); System.out.println(seznamPsu.size()); 2

2 @Overiide public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (obj instanceof Pes){ Pes druhy = (Pes) obj; return (java.util.Objects.equals(this.jmeno, druhy.jmeno)); } else{ } Set<Pes> seznamPsu = new HashSet<>(); seznamPsu.add(new Pes("Alík", "voříšek")); System.out.println(seznamPsu.size()); 2

Metoda hashCode() public int hashCode() Metoda pro vytvoření vnitřního kódu pro každou instanci. Pro správné fungování např. v HashTable musí splňovat tato pravidla: Je konzistentní, tj. pro nezměněné instance vrací vždy stejnou hodnotu. Pro dvě instance, které jsou si rovny na základě použití metody equals() vrací stejnou hodnotu. Nemusí platit obráceně

Jak překrývat hashCode() Do proměnné result typu int uložíme nějakou nenulovou hodnotu Pro každý datový atribut, který byl použit pro určování rovnosti v metodě equals(), vypočtěte jeho hešovací kód. Pro každý datový atribut přidejte jeho hodnotu do proměnné result takto: result = 37 * result + hashAtributu; Nakonec vrátíme hodnotu proměnné result.

hashCode() datových atributů Pro typ boolean pro hodnotu false je hešovací kód 0 pro hodnotu true 1 Pro číselné typy a typ char je hešovací kód hodnota atributu přetypovaná na int. Pro objektové typy zavolejte metodu java.Objects.hashCode(datovyAtribut) Pro datové atributy, které jsou kontejnerového typu, sečtěte dohromady hešovací kódy každého prvku

1 @Override public int hashCode(){ int result = 3; int hashJmena = java.util.Objects.hashCode(this.jmeno); result = 37 * result + hashJmena; return result; } Set<Pes> seznamPsu = new HashSet<>(); seznamPsu.add(new Pes("Alík", "voříšek")); System.out.println(seznamPsu.size()); 1

Co někdy příště o kolekcích procházení pomocí iterátoru třídění kolekcí složitější vyhledávání v kolekci vyhledávání - seznam účtů, vyhledání dle čísla účtu či dle vlastníka

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