JAVA V Anotace Java, zimní semestr ,2016 1

Podobné dokumenty
JAVA V Anotace Java, zimní semestr ,2014 1

JAVA. Nástroje v JDK

JAVA V Anotace Java, zimní semestr ,2015 1

JAVA. Nástroje v JDK

Java Enum Java, zimní semestr ,2017 1

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

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

Algoritmizace a programování

JAVA V Hibernate Java, letní semestr

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

Java Výjimky Java, zimní semestr

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Úvod do programovacích jazyků (Java)

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

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

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

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/

Iterator & for cyklus

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

Programování v Javě I. Leden 2008

Správa projektů a testování

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

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

Výčtový typ strana 67

Generické programování

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

Doxygen. Jakub Břečka

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

Seminář Java II p.1/43

Podmínky na zápočet. Java, zimní semestr

Lambda funkce Novinky v interfaces Streamy Optional - aneb zbavujeme se null. Java 8. Ondřej Hrstka

JAVA Unit testing Java, zimní semestr

PŘETĚŽOVÁNÍ OPERÁTORŮ

JAVA. Další jazyky kompilovatelné do Java byte-code

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

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

3 KTE / ZPE Informační technologie

Teoretické minimum z PJV

JAVA Moduly Java, letní semestr 2018

JAVA. Krátce o Reflection API

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

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

typová konverze typová inference

Java Řetězce Java, zimní semestr

PREPROCESOR POKRAČOVÁNÍ

Java - řazení objektů

O autorovi O odborném korektorovi Úvod 17 Vývoj jazyka Java Java SE 8 Struktura této knihy Předchozí zkušenosti s programováním nejsou potřebné

JAVA. Java Management Extensions JMX

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

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

První kapitola úvod do problematiky

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

UJO Framework. revoluční architektura beans. verze

1. Dědičnost a polymorfismus

Vaše jistota na trhu IT. Balíčky. Rudolf Pecinovský

JAVA V RMI Java, letní semestr

3. Třídy. Základní pojmy objektového programování. Třídy

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Seminář Java IV p.1/38

Návrh softwarových systém. Návrh softwarových systémů

20. Projekt Domácí mediotéka

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

RMI Remote Method Invocation

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

Pokročilé programování na platformě Java. Úvod

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

1. Programování proti rozhraní

Pokročilé techniky tvorby sestav v Caché. ZENové Reporty

SonarQube - statická analýza kódu a její zapojení v CI. Babu Červenková Big Data developer - Java Fulltext - Robot tým

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

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

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

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

Úvod do programovacích jazyků (Java)

Soubor jako posloupnost bytů

NPRG031 Programování II 1 / :25:46

NMIN201 Objektově orientované programování 1 / :36:09

GUI. Systémová integrace pro desktopové aplikace

Typický prvek kolekce pro české řazení

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

Programovací jazyk Java

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

Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

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

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

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

Projekty pro výuku programování v jazyce Java

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

KTE / ZPE Informační technologie

Úvod do programovacích jazyků (Java)

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

PB161 Programování v jazyce C++ Přednáška 9

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

Generické typy. Podrobněji: The Java Language Specification ( Third Edition ) , 18

Jazyk XSL XPath XPath XML. Jazyk XSL - rychlá transformace dokumentů. PhDr. Milan Novák, Ph.D. KIN PF JU České Budějovice. 9.

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

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

Michal Podzimek

Transkript:

JAVA Anotace 1

Anotace (metadata) od Java 5 umožňují přidat informace k elementům v programu (ke třídám, metodám, atributům,...) obecně je lze použít všude tam, kde lze napsat nějaký modifikátor viditelnosti zapisují se @JmenoAnotace lze definovat vlastní určit, kde je lze napsat, jak používat,... předdefinované anotace v balíku java.lang @Deprecated @Override @SuppressWarnings... 2

Předdefinované anotace @Deprecated označení API, které by se nemělo používat náhrada za tag z dokumentačních komentářů při použití => varování při překladu @Override označení, že metoda předefinovává metodu z předka pokud nic nepředefinovává => kompilátor odmítne třídu přeložit použití je volitelné (nicméně silně doporučené) class A { public void foo() {} } class B extends A { @Override public void foo() {} } interface Ice { class D { void foo() {} public void foo() {} } } class C implements Ice { class E extends D { @Override @Override public void foo() {} public void bar() {} } } 3

Předdefinované anotace @SuppressWarnings zamezí vypisování varování při překladu parametr třída varování podporované třídy jsou závislé na překladači vždy dostupné třídy varování unchecked varovaní při nevhodném používání generických typů deprecation varování při použití deprecated elementů př. @SuppressWarnings( unchecked ) @SuppressWarnings({ unchecked, deprecation }) 4

JAVA Lambda výrazy 5

Motivace obsluha událostí v GUI implementace komparátoru implementace vlákna vždy interface s jednou metodou běžně pomocí anonymní vnitřní třídy interface Comparator<T> { int compare(t o1, T o2); } class Arrays {... void sort(t[] a, Comparator<T> c); } Arrays.sort(array, new Comparator<AClass> () { public int compare(aclass o1, AClass o2) { return o1.x - o2.x; }}); 6

Motivace předchozí příklad pomocí lambda výrazů Arrays.sort(array, (o1, o2) -> o1.x - o2.x ); zjednodušeně: lambda výraz ~ blok kódu s parametry od Java 8 7

Funkcionální interface kde lze lambda výrazy použít? tam, kde se očekává instance interfacu s jednou abstraktní metodou = funkcionální interface lambda výraz je instance funkcionálního interfacu ale lambda výraz neobsahuje informaci o tom, který funkcionální interface implementuje 8

Typ lambda výrazu stejný lambda výraz lze přiřadit do různých interfaců Runnable r = () -> {}; AutoCloseable r = () -> {}; lambda výrazy jsou objekty Runnable r = () -> {}; Object o = r; ale lambda výrazy nelze (přímo) přiřadit do typu Object Object r = () -> {}; 9

Příklady lambda výrazů (int x, int y) -> x + y (x, y) -> x - y () -> 42 (String s) -> System.out.println(s) x -> 2 * x c -> { int s = c.size(); c.clear(); return s; } 10

Funkcionální interface @FunctionalInterface anotace pro označení funkcionálního interface použití není nutné podobně jako @Override 11

Reference na metody String::valueOf reference na statickou metodu ekvivalent: x -> String.valueOf(x) Object::toString reference na nestatickou metodu ekvivalent: x -> x.tostring() x::tostring reference na metodu konkrétního objektu ekvivalent: () -> x.tostring() ArrayList::new reference na konstruktor ekvivalent: () -> new ArrayList<>() 12

Lambda výrazy lambda výrazy nepřidávají nový prostor (scope) viditelnosti proměnných Path first = Paths.get("/usr/bin"); Comparator<String> comp = (first, second) -> Integer.compare(first.length(), second.length()); this v lambda výrazu odkazuje na this metody, ve které je výraz vytvořen public class Application { public void dowork() { Runnable runner = () -> {System.out.println(this.toString());}; } } 13

Překlad lambda výrazů public class AClass {... public void foo(aclass[] array) { Arrays.sort(array, new Comparator<AClass> () { public int compare(aclass o1, AClass o2) { return o1.x - o2.x; }}); javac AClass.java } } => AClass.class AClass@1.class ale public class AClass {... public void foo(aclass[] array) { Arrays.sort(array, (o1, o2) -> o1.x - o2.x); } javac } AClass.java => AClass.class 14

JAVA Nástroje v JDK 15

Nástroje javac javadoc jdb javah jconsole... 16

JAVA javadoc 17

Přehled nástroj na automatické generování dokumentace ze zdrojových kódů deklarace tříd atd. plus dokumentační komentáře dokumentace je přímo v kódu snadno se udržuje aktualizovaná výstup (implicitně) HTML stránky dokumentační komentáře /** komentar */ před popisovaný element uvnitř text + speciální tagy + html kód program javadoc ve standardní distribuci vygeneruje dokumentaci 18

Komentáře dokumentační komentáře těsně před popisovaný element /** Komentar ke tride */ public class MyClass { /** Komentar k atributu */ public int a; /** Komentar k metode */ public void foo() {... } } 19

Komentáře jinde jsou ignorovány (jako normální komentáře) /** ignorovano */ import java.util.*; public class MyClass { void foo() { /** ignorovano */ } } 20

Víceřádkové komentáře komentáře 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 (od 1.3) /** Tohle je viceradkovy komentar. * Uvodni mezery a hvezdicky * jsou ignorovany a odstraneny. */ /** Zde uvodni mezery ignorovany nejsou chybi hvezdicka. */ 21

Sekce komentářů dvě sekce v dokumentačních komentářích hlavní popis sekce s tagy nejdřív je hlavní popis, pak sekce s tagy pořadí sekcí nelze prohodit sekce s tagy začíná prvním tagem (@neco) /** Hlavni popis elementu. Stale hlavni * popis elementu * @see java.lang.object */ komentáře můžou mít pouze jednu sekci 22

Druhy tagů "block tags" @tag samostatné tagy můžou stát jen na začátku řádku (úvodní mezery a hvězdička ignorovány) znak @ jinde než na začátku řádku je normální znak "in-line tags" {@tag} můžou stát kdekoliv v textu i hlavním popisu @deprecated As of JDK 1.1, replaced by {@link #setbounds(int,int,int,int)} 23

Komentáře první věta komentáře = shrnutí věta končí první tečkou následovanou bílým znakem (nebo prvním tagem) zobrazena v přehledu členů třídy (metody, atributy) v krátkém popisu třídy jeden komentář k více atributům /** Komentar patri k obema atributum */ public int x, y; 24

HTML text komentářů HTML lze používat HTML tagy /** Tohle je <b>dokumentacni</b> * komentar */ znaky < > & zapisovat jako v HTML <... < >... > &... & není vhodné používat některé tagy např. hlavičky <h1> <h2> naruší strukturu vygenerované dokumentace 25

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ů dědí se ta část komentáře, která není definována platí od 1.4 do 1.3 přítomnost dokumentačního komentáře zamezila dědění z předků explicitní dědění {@inheritdoc} 26

Popis balíku dokumentační komentář k balíku soubor package.html ve stejném adresáři jako třídy obsahuje HTML stránku do dokumentace se vloží vše mezi <body> a </body> píše se bez /**... */ první věta krátký popis balíku popis skupiny tříd soubor overview.html jako package.html 27

Tagy Tag od JDK Tag od JDK @author 1.0 @return 1.0 @{code} 1.5 @see 1.0 @{docroot} 1.3 @serial 1.2 @deprecated 1.0 @serialdata 1.2 @exception 1.0 @serialfield 1.2 {@inheritdoc} 1.4 @since 1.1 {@link} 1.2 @throws 1.2 {@linkplain} 1.4 {@value} 1.4 {@literal} 1.5 @version 1.0 @param 1.0 28

Tagy u metod /** Hlavni popis. * @param p1 popis parametru p1 * @param p2 popis parametru p2 * @throws IOException kdy je vyhozena * @throws MyException kdy je vyhozena * @returns co vraci */ int foo(int p1, long p2) throws IOException, MyException; 29

Další tagy @since text lze použít všude význam: od jaké verze softwaru daný element existuje @since 1.4 @exception to samé jako @throws @author jmeno jméno tvůrce použití u třídy, balíku a v přehledu 30

Další tagy @see reference "See also" hlavička ve vygenerované dokumentaci tři formáty @see "retezec" @see "The Java language specification" @see <a href="url#value">label</a> @see package.class#member label @see String#equals(Object) equals @see java.io.file#exists() exists {@link package.class#member label} reference v textu podobné jako @see 31

Další tagy {@linkplain package.class#member label} stejné jako {@link...} použije se stejný font jako pro text pro {@link...} se použije jiný font @deprecated text označuje API, které by se už nemělo používat (přetrvává z předchozích verzí) text vysvětlení proč zpracovává ho i překladač varování při použití takového API od 1.5 anotace @deprecated {@docroot} relativní cesta ke kořenovému adresáři vygenerované dokumentace 32

Další tagy {@literal text} text se nebude nijak interpretovat {@literal a<b>c} v dokumentaci bude a<b>c <b> se nebude interpretovat jako tag {@code text} to samé jako <code>{@literal text}</code> 33

javadoc vygenerování dokumentace javadoc součást standardní distribuce spouštění javadoc [parametry] [baliky] [zdrojove_soubory] [-subpackages pkg1:pkg2:...] 34

Parametry pro javadoc -overview cesta/soubor jiné umístění pro soubor overview.html -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 35

Parametry pro javadoc -doclet trida doclet generuje dokumentaci imlicitní doclet generuje HTML -source 1.4 pokud se používají assertions (pro JDK 1.4) -sourcepath seznam_cest kde se mají hledat zdrojové soubory -verbose -quiet uroveň výpisů při generování -locale jazyk_země_varianta musí být jako první parametr -encoding kodovani kódování zdrojových souborů 36

Parametry pro javadoc -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 -nodeprecated -nosince 37

JAVA ANT 38

Přehled http://ant.apache.org/ nástroj (nejen) na překlad java programů obdoba make napsán v Javě rozšiřitelný přidáváním dalších tříd vstupní soubor (buildfile) (obdoba makefile u make) XML NetBeans interně Ant používají pro překlad, spouštění,... projektů 39

Buildfile implicitní jméno build.xml obsahuje jeden project a alespoň jeden target <?xml version="1.0" encoding="us-ascii"?> <project...> <target...>... </target> <target...>... </target> </project> 40

Project atributy name jméno projektu default implicitní target, který se bude provádět, pokud nebude žádný explicitně zadán povinný parametr 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> 41

Target posloupnost činností (task), které se mají provést může záviset na jiných targets provede se až po těch, na kterých závisí atributy name jméno, povinné depends seznam targetů, 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 42

Target <target name="compile" depends="init" description="prelozi aplikaci">... </target> 43

Task 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="..."/> 44

Property jméno a hodnota 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"... /> 45

Příklad <?xml version='1.0' encoding='us-ascii'?> <project basedir="." default="compile" name="project"> <description>project description</description> <property name="src" location="src"/> <property name="classes" location="classes"/> <target name="init"> <mkdir dir="${classes}"/> </target> <target name="compile" depends="init" description="compile"> <javac debug="true" destdir="${classes}" srcdir="${src}" includes="**/*.java" classpath="${src}" /> </target> <!-- pokracovani --> 46

Příklad <!-- pokracovani --> <target name="run" depends="init,compile" description="execute"> <java fork="true" classname="main" classpath="${classes}" /> </target> </project> 47

Spouštění ant [parametry] [target [target2... ]] parametry -projecthelp, -p napověda projektu popis projektu + popis task -propertyfile <soubor> definuje property ze zadaného souboru -D<property>=<name> definice property -buildfile <soubor> -file <soubor> -f <soubor> buildfile 48

Task javac spouští překladač Javy překládá pouze ty soubory, které jsou potřeba k souboru.java není.class nebo je starší pozor! určuje pouze podle jmen souborů tj. neví o vnitřních třídách apod. atributy srcdir adresář s.java soubory povinný destdir kam ukládat.class soubory classpath CLASSPATH 49

Task javac atributy encoding kódování source -source parametr pro javac compiler jaký překladač pro Javu se má použít fork true nebo false (implicitně false) spustit překladač ve stejne JVM jako ant nebo v nové srcdir, classpath (a další) můžou být nahrazeny vnořenými elementy <src>, <classpath> (a další) 50

Task java spustí Java aplikaci atributy classname třída s metodou main jar jar-soubor ke spuštění povinně buď classname nebo jar classpath fork spustit aplikaci v nové JVM vnořené elementy <arg> parametry příkazové řádky 51

Task property nastaví property na danou hodnotu nelze měnit jejich hodnotu atributy name jméno property value hodnota property location absolutní cesta zadaného souboru file soubor, ze kterého se mají načíst property url url, ze kterého se mají načíst property 52

Task property příklady <property name="src" location="src"/> <property name="foo.dist" value="dist"/> <property file="foo.properties"/> <property url="http://..." /> 53

Task javadoc vytvoří javadoc dokumentaci atributy sourcepath adresáře se zdrojáky sourcefiles přímo vyjmenované zdrojáky packagenames pro které balíčku vytvářet destdir do jakého adresáře generovat public, protected,package, private pro které elementy se má dokumentace generovat author zahrnout tag autor version zahrnou tag version mnoho dalších 54

Ostatní mnoho dalších tasků delete maže soubory/adresáře move přesun/přejmenování souborů mkdir vytoření adresáře copy kopírování echo vypíše text na standardní výstup 55

JAVA Maven

Přehled http://maven.apache.org/ nástroj pro správu projektů zjednodušeně si lze představit jako rozšíření Antu ale není to rozšíření Antu poskytuje správu závislostí usnadnění překládání (build) projektů používání best practices přidávání nových modulů

Používání vygenerování struktury projektu mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.mycompany.app -DartifactId=my-app archetype ~ šablona projektu vygeneruje následující strukturu

Struktura projektu my-app -- pom.xml `-- src -- main `-- java `-- com `-- mycompany `-- app `-- App.java `-- test `-- java `-- com `-- mycompany `-- app `-- AppTest.java

POM Project Object Model definice projektu <project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <groupid>com.mycompany.app</groupid> <artifactid>my-app</artifactid> <packaging>jar</packaging> <version>1.0-snapshot</version> <name>maven Quick Start Archetype</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>

Životní cyklus buildu mvn fáze vždy se provedou i předchozí fáze 1. process-resources 2. compile 3. process-test-resources 4. test-compile 5. test 6. package 7. install 8. deploy

Java, zimní semestr Verze prezentace 2016 J05.cz.2016.02 Tato prezentace podléhá licenci Creative Commons Uveďte autora-neužívejte komerčně 4.0 Mezinárodní License. 62