Semin aˇr Java N astroje Radek Koˇc ı Fakulta informaˇcn ıch technologi ı VUT Bˇrezen 2012 Radek Koˇc ı Semin aˇr Java n astroje 1/ 42

Podobné dokumenty
9. Ladění a testování programů. booleovský výraz

JAVA V Anotace Java, zimní semestr ,2014 1

JAVA. Nástroje v JDK

JAVA. Nástroje v JDK

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

JAVA V Anotace Java, zimní semestr ,2015 1

JAVA V Anotace Java, zimní semestr ,2016 1

Ant aneb Ferda Mravenec, práce všeho druhu

12. Dokumentace a distribuce aplikací. speciálních dokumentačních komentářích vpisovaných před

Algoritmizace a programování

Programování v Javě I. Únor 2009

Programování v Javě I. Leden 2008

Správa projektů a testování

Seminář Java II p.1/43

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

JAVA Unit testing Java, zimní semestr

Programovací jazyk Java

1. Programování proti rozhraní

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Vývoj aplikací řízený testy. Miroslav Beneš

typová konverze typová inference

Úvod do programovacích jazyků (Java)

Doxygen. Jakub Břečka

Obsah přednášky. Vývoj aplikací řízený testy. Extrémní programování (XP) Požadavky na nástroje pro XP. Testování aplikací

Java Enum Java, zimní semestr ,2017 1

Testování. Zadání příkladu. Vytvoření kostry třídy. Obsah:

Algoritmizace a programování

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

Testovací metoda. Testovací metoda. public class SimpleTest {

Testování, ladění a dokumentace programů

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

UJO Framework. revoluční architektura beans. verze

Teoretické minimum z PJV

Java a XML. 10/26/09 1/7 Java a XML

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

1. Téma 12 - Textové soubory a výjimky

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

8 Třídy, objekty, metody, předávání argumentů metod

První kapitola úvod do problematiky

KTE / ZPE Informační technologie

3 KTE / ZPE Informační technologie

Abstraktní datové typy: zásobník

Úvod do programovacích jazyků (Java)

20. Projekt Domácí mediotéka

Abstraktní třída a rozhraní

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Úvod do programování - Java. Cvičení č.4

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

1 Návod na instalaci prostředí LeJOS-NXJ a přehrání firmwaru NXT kostky

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

JAVA. Krátce o Reflection API

Anotace a Hibernate. Aleš Nosek Ondřej Vadinský Daniel Krátký

Z. Kotala, P. Toman: Java ( Obsah )

7. Datové typy v Javě

Vytváření a použití knihoven tříd

PREPROCESOR POKRAČOVÁNÍ

Soubor jako posloupnost bytů

Maven. Aplikační programování v Javě (BI-APJ) - 2 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

10 Balíčky, grafické znázornění tříd, základy zapozdření

Výčtový typ strana 67

JAVA V Hibernate Java, letní semestr

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Řídicí struktury. alg3 1

Java Výjimky Java, zimní semestr

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

RMI Remote Method Invocation

Ošetřování chyb v programech

3. Základy programovacího jazyka Java

3 Vývojová prostředí, základní prvky jazyka Java, konvence jazyka Java

Úvod. Únor Fakulta informačních technologií VUT. Radek Kočí Seminář Java Úvod 1/ 23

Generické programování

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Seminář Java IV p.1/38

Michal Podzimek

IRAE 07/08 Přednáška č. 1

Java testovací třída

Úvod Vývojová prostředí Štábní kultura Dokumentace Konec. Programování v C# Prostředí a doporučení 1 / 39

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Paměť počítače. alg2 1

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. Dědičnost a polymorfismus

Základy programování Zdrojový kód, dokumentace, týmová práce

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

Anotace Test. Označuje public void metodu, která může být spuštěna jako test. Parametr expected označuje vyjimku, která by měla být v metodě vyvolána

JAVA Moduly Java, letní semestr 2018

Šablonovací systém htmltmpl vypracoval: Michal Vajbar, Šablonovací systém htmltmpl

Úvod do programovacích jazyků (Java)

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

Obrázek 6.14: Prohlížec nápovedy

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Základy programovaní 3 - Java. Unit testy. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. 26.,27.

Úvod. Leden Fakulta informačních technologií VUT. Radek Kočí Seminář Java Úvod 1/ 22

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

Transkript:

Seminář Java Nástroje Radek Kočí Fakulta informačních technologií VUT Březen 2012 Radek Kočí Seminář Java nástroje 1/ 42

Téma přednášky javadoc java archiv (JAR) ant ladění programu (JUnit) Radek Kočí Seminář Java nástroje 2/ 42

Komentáře Základní typy komentářů (podobně jako např. v C/C++) řádkové od značky// do konce řádku blokové (na libovolném počtu řádků) začínají/* pak je text komentáře, končí*/ dokumentační (na libovolném počtu řádků) od značky/** po značku*/ Každý další řádek může začínat mezerami či *, hvězdička se v komentáři neprojeví. Radek Kočí Seminář Java nástroje 3/ 42

Generování dokumentace Dokumentace je generována nástrojemjavadoc z dokumentačních komentářů a ze samotného zdrojového textu je tedy možné dokumentovat (základním způsobem) i program bez vložených komentářů! má standardně podobu HTML stránek (s rámy i bez) chováníjavadoc můžeme změnit volbami (options) při spuštění Radek Kočí Seminář Java nástroje 4/ 42

Generování dokumentace Dokumentační komentáře uvádíme: před hlavičkou třídy (komentuje třídu jako celek) před hlavičkou metody nebo proměnné (komentuje příslušnou metodu nebo proměnnou) Dokumentační komentář je typicky přes více řádků úvodní mezery a hvězdička na dalších řádcích jsou ignorovány bez hvězdičky mezery nejsou ignorovány lze vkládat html značky Radek Kočí Seminář Java nástroje 5/ 42

Generování dokumentace Dvě sekce v dokumentačních komentářích nejdříve hlavní popis poté sekce s tagy; začíná prvním tagem (@nazev tagu) pořadí sekcí nelze prohodit Hlavní popis první věta komentáře je shrnutí (končí první tečkou nebo prvním tagem) shrnutí se zobrazí v přehledu členů třídy nebo v krátkém popisu třídy Radek Kočí Seminář Java nástroje 6/ 42

Ukázka použití dokumentačních komentářů package ija1.ucty; /** * Hlavní popis třídy účet. * Popis pokračuje. * @author R. Koci **/ public class Ucet { /** Majitel uctu */ protected String majitel; /** Metoda... */ public void pridej(double castka) { } }... zustatek += castka; Radek Kočí Seminář Java nástroje 7/ 42

Druhy tagů Blokové In-line @tag samostatné, mohou stát jen na začátku řádku (úvodní mezery a hvězdičky ignorovány) znak @ uvedený kdekoliv jinde je chápán jako normální znak {@tag} kdekoliv v textu včetně hlavního popisu Radek Kočí Seminář Java nástroje 8/ 42

Generování dokumentace Dědění komentářů pokud není komentář definován, dědí se od nadřazené třídy u předefinovaných metod u implementovaných metod z interfaců Dokumentační komentář k balíku souborpackage.html umístěný ve stejném adresáři do komentáře se umístí vše mezi tagy<body> a</body> první věta je krátký popis balíku Radek Kočí Seminář Java nástroje 9/ 42

Značky pro dokumentační komentáře Nástrojjavadoc můžeme podrobněji instruovat pomocí značek vkládaných do dokumentačních komentářů, např.: @author specifikuje autora API/programu @version označuje verzi API, např. 1.4.2 @deprecated informuje, že prvek je zavrhovaný @exception popisuje informace o výjimce, kterou metoda propouští ( vyhazuje ) @param popisuje jeden parametr metody @since uvedeme, od kdy (od které verze pg.) je věc podporována/přítomna @see uvedeme odkaz, kam je také doporučeno nahlédnout (související věci) {@link} podobné jako @see, in-line Radek Kočí Seminář Java nástroje 10/ 42

Generování dokumentace Spuštění javadoc [parametry] [baliky] [zdrojove soubory] [-subpackages pkg1:pkg2:...] Přepínače -public : dokumentace bude obsahovat pouze public elementy -protected : dokumentace bude obsahovat public a protected elementy (implicitní chování) -package : dokumentace bude obsahovat public, protected a elementy bez označení -private : dokumentace bude obsahovat všechny elementy Radek Kočí Seminář Java nástroje 11/ 42

Generování dokumentace Přepínače -source 1.4 : pokud se používají assertions -encoding kodovani : kódování zdrojových souborů -d cesta : kam vygenerovat dokumentaci -version : zahrnout tag @version -author : zahrnout tag @author -windowtitle text -doctitle text -header text : bude na začátku každé stránky -footer text : bude na konci každé stránky Více na http://docs.oracle.com/javase/1.5.0/docs/tooldocs/ windows/javadoc.html Radek Kočí Seminář Java nástroje 12/ 42

Java Archive (JAR) Java Archive (JAR) platformově nezávislý archiv (zip) obsahující hierarchii balíků a class soubory jakékoliv jiné soubory (obrázky pro aplety apod.) speciální adresářmeta-inf META-INF obsah je interpretován JVM konfigurace aplikace konfigurace rozšíření konfigurace zavaděčů tříd a služeb Radek Kočí Seminář Java nástroje 13/ 42

Java Archive (JAR) Zkompilování zdrojových textů -- src ---- xml ---- XMLDemo.java -- dest -- dom4j-1.5.2.jar javac -classpath "src:dom4j-1.5.2.jar" -d dest src/xml/xmldemo.java Radek Kočí Seminář Java nástroje 14/ 42

Java Archive (JAR) Zkompilovani zdrojovych textu -- src ---- xml ---- XMLDemo.java -- dest ---- xml ---- XMLDemo.class -- dom4j-1.5.2.jar Radek Kočí Seminář Java nástroje 15/ 42

Java Archive (JAR) -- dest ---- xml ---- XMLDemo.class -- dom4j-1.5.2.jar jar -cvf xml.jar -C dest xml MANIFEST.MF: Manifest-Version: 1.0 Created-By: 1.5.0_05 (Sun Microsystems Inc.) Radek Kočí Seminář Java nástroje 16/ 42

Java Archive (JAR) -- dest ---- xml ---- XMLDemo.class -- dom4j-1.5.2.jar jar -cvfm xml.jar mymanifest.mf -C dest xml MANIFEST.MF: Manifest-Version: 1.0 Class-Path: dom4j-1.5.2.jar Created-By: 1.5.0_05-b05 (Sun Microsystems Inc.) Ant-Version: Apache Ant 1.6.2 Main-Class: xml.xmldemo Radek Kočí Seminář Java nástroje 17/ 42

Java Archive (JAR) Spuštění JAR souboru java -jar xml.jar http://java.sun.com/j2se/1.5.0/docs/guide/jar/ Radek Kočí Seminář Java nástroje 18/ 42

Apache Ant Apache Ant (http://ant.apache.org) nástroj pro sestavování aplikací v principu podobný nástrojimake sestavovací soubory založeny na XML formátu implicitní sestavovací souborbuild.xml Sestavovací soubor (buildfile) obsahuje projekt (project) cíle (targets) úlohy (tasks) závislosti Každý buildfile jeden projekt a alespoň jeden cíl Radek Kočí Seminář Java nástroje 19/ 42

Apache Ant project atributy name : jméno projektu default : implicitní target, který se bude provádět, pokud nebude žádný explicitně zadán basedir : adresář, od něhož budou všechny cesty v souboru odvozeny volitelný element<description> popis projektu <project name="projekt" default="compile" basedir="."> <description>dlouhy popis projektu</description> Radek Kočí Seminář Java nástroje 20/ 42

Apache Ant target popis atributy posloupnost úloh, které se mají provést může záviset na jiných cílech name : jméno cíle depends : seznam cílů, na kterých závisí description : krátký popis if : jméno property, která musí být nastavena unless : jméno property, která nesmí být nastavena <target name="compile" depends="init" description="prelozi aplikaci">... </target> Radek Kočí Seminář Java nástroje 21/ 42

Apache Ant property popis jméno a hodnota (u jména rozlišování velikosti písmen) získání obsahu property -${property} vestavěné property basedir ant.file ant.version ant.project.name ant.java.version systémové properties Javy vlastní property <property name="jmeno"... /> Radek Kočí Seminář Java nástroje 22/ 42

Apache Ant task popis kód, který může být vykonán různý počet parametrů, podle druhu vestavěné volitelné vlastní <jmeno atr1="hodnota" atr2="hodnota".../> <javac srcdir="..." destdir="..."/> Radek Kočí Seminář Java nástroje 23/ 42

Apache Ant ukázka <?xml version= 1.0 encoding= utf-8?> <project name="ija 05" default="compile" basedir="."> <description> IJA: Ukazka build.xml souboru </description> <property name="src" location="src"/> <property name="build" location="build"/> <property name="dist" location="dist"/> <property name="lib" location="lib"/> Radek Kočí Seminář Java nástroje 24/ 42

Apache Ant ukázka <target name="clean"> <delete dir="${build}"/> <delete dir="${dist}"/> </target> <target name="compile" depends="clean" description="compile"> <mkdir dir="${build}"/> <javac srcdir="${src}" destdir="${build}" encoding="iso8859-2" includes="ija/xml/xmldemo.java" classpath="${lib}/dom4j-1.5.2.jar:${src}"/> </target> Radek Kočí Seminář Java nástroje 25/ 42

Apache Ant ukázka <target name="jar" depends="clean,compile"> <mkdir dir="${dist}"/> <jar destfile="${dist}/xmldemo.jar" basedir="${build}"> <manifest> <attribute name="main-class" value="ija.xml.xmldemo"/> <attribute name="class-path" value="lib/dom4j-1.5.2.jar"/> </manifest> </jar> <mkdir dir="${dist}/lib"/> <copy file="${lib}/dom4j-1.5.2.jar" todir="${dist}/lib"/> </target> Radek Kočí Seminář Java nástroje 26/ 42

Apache Ant ukázka <target name="run"> <java jar="${dist}/xmldemo.jar" dir="${dist}" fork="true"/> </target> </project> Radek Kočí Seminář Java nástroje 27/ 42

Apache Ant použití Použití ant [parametry] [target [target2... ]] Parametry propertyfile <soubor> : definuje property ze zadaného souboru -D<property>=<name> : definice property -buildfile <soubor> : buildfile -file <soubor> : buildfile -f <soubor> : buildfile ant compile ant jar ant run Radek Kočí Seminář Java nástroje 28/ 42

Apache Ant úlohy (tasks) Vestavěné úlohy javac java property javadoc delete move mkdir copy echo... http://ant.apache.org/manual/index.html Radek Kočí Seminář Java nástroje 29/ 42

Ladění programu Pro ladění programů v Javě lze využít kontrolní tisky: System.err.println(...) řádkový debuggerjdb http://docs.oracle.com/javase/1.5.0/docs/ tooldocs/solaris/jdb.html integrovaný debugger v IDE speciální nástroje na záznam běhu balíků Uvědomte si, že žádný nástroj za nás nevymyslí, JAK máme své třídy testovat. Pouze nám pomůže ke snadnějšímu sestavení a spuštění testu. Radek Kočí Seminář Java nástroje 30/ 42

Ladění programu standardní klíčové slovo (od JDK1.4)assert assert booleovský výraz testovací nástroje typu JUnit (a varianty HttpUnit,... ) metodaassertequals() metodaasserttrue()... http://junit.org/ pokročilé nástroje na běhovou kontrolu platnosti invariantů, vstupních, výstupních a dalších podmínek např. jass (Java with ASSertions), http://csd.informatik.uni-oldenburg.de/ jass/ Radek Kočí Seminář Java nástroje 31/ 42

Ladění programu assert public class AssertDemo { public static void main(string args[]) { int x = 10; boolean enabled = false; assert enabled = true; System.out.println("Assertions are " + (enabled? "enabled" : "disabled"); } } assert x < 0 : "x is not < 0"; Radek Kočí Seminář Java nástroje 32/ 42

Ladění programu assert spustit s volbou-ea (-enableassertions) dojde-li za běhu programu k porušení podmínky stanovené zaassert, vznikne běhová chyba (AssertionError) a program skončí Radek Kočí Seminář Java nástroje 33/ 42

Ladění programu JUnit Instalace JUnit Použití stáhnout si distribuci testovacího prostředí (stačí binární) http://junit.org nainstalovat (rozbalit do adresáře) archiv jar javac -cp junit.jar... java -cp junit.jar... Radek Kočí Seminář Java nástroje 34/ 42

Ladění programu JUnit Postup (starší verze) napsat testovací třídu (třídy) obvykle rozšiřují (dědí) třídu junit.framework.testcase testovací třída obsahuje metody metodu pro nastavení testu setup() testovací metody testneco() úklidovou metodu teardown() testovací třídu spustit v textovém nebo grafickém prostředí junit.textui.testrunner junit.swingui.testrunner testování zobrazí, které testovací metody případně selhaly Radek Kočí Seminář Java nástroje 35/ 42

Ladění programu JUnit Ukázka (starší verze) public class JUnitDemo extends TestCase { Zlomek x, y, z; } public void setup() { x = new Zlomek(2,3); y = new Zlomek(4,6); z = new Zlomek(4,3); } public void testrovna() { assertequals("2/3 = 4/6.", x, y); } public void testsoucet() { Zlomek z = x.plus(y); assertequals("2/3 + 4/6 = 4/3.", z, soucet); } Radek Kočí Seminář Java nástroje 36/ 42

Anotace Annotations anotace definují dodatečné informace a data (metadata) k elementům programu (třída, metoda,... ) nemají přímý vliv na program zápis: @jmeno anotace využití anotací při kompilaci detekce chyb, možnost generování dalšího kódu,... za běhu nástroje a knihovny mohou na základě anotace přizpůsobit sémantiku lze využít předdefinované nebo definovat vlastní Radek Kočí Seminář Java nástroje 37/ 42

Anotace Předdefinované anotace (java.lang) @Deprecated náhrada za tag z dokumentačních komentářů označuje, že daný element je zavrhovaný @Override označení, že metoda v potomku předefinovává metodu z předka pokud nic nepředefinovává, kompilátor odmítne třídu přeložit @SuppressWarnings zamezí vypisování varování při překladu parametr třída varování (unchecked,deprecation) Radek Kočí Seminář Java nástroje 38/ 42

Static import Přístup ke statickým členům double r = Math.cos(Math.PI * theta); Využití statického importu import static java.lang.math.pi; //import static java.lang.math.*;... double r = cos(pi * theta); používat velice opatrně! (kolize identifikátorů, těžko čitelný kód,...) Radek Kočí Seminář Java nástroje 39/ 42

JUnit Anotace Používané anotace (org.junit.*) @Test testovací metoda (Test Case) @Before metoda, která se provede před každým testem @After metoda, která se provede po každém testu @Test(expected=IndexOutOfBoundsException.class) metoda by měla vracet výjimku IndexOutOfBoundsException Radek Kočí Seminář Java nástroje 40/ 42

JUnit Assert orj.junit.assert assertarrayequals(...) assertequals(...) assertfalse(...) asserttrue(...) assertnotnull(...) assertnull(...) assertnotsame(...) assertsame(...) assertthat(...) fail(...) Radek Kočí Seminář Java nástroje 41/ 42

JUnit Ukázka import org.junit.*; import static org.junit.assert.*; public class TestHW { protected int x; @Before public void setup() { x = 15; } } @Test public void test01() { asserttrue(x>10); } java org.junit.runner.junitcore homework1.testhw Radek Kočí Seminář Java nástroje 42/ 42