Java efektivně. Lukáš Zapletal liberix.cz. Pokročilejší techniky programování v Javě



Podobné dokumenty
Typický prvek kolekce pro české řazení

typová konverze typová inference

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

Úvod do programovacích jazyků (Java)

Java Enum Java, zimní semestr ,2017 1

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

Generické programování

Semin aˇr Java X Radek Koˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2011 Radek Koˇc ı Semin aˇr Java N avrhov e vzory, Z asady...

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

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

Principy objektově orientovaného programování

Teoretické minimum z PJV

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

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

Seminář Java IV p.1/38

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

11. Dědičnost. Dědičnost strana 103

UJO Framework. revoluční architektura beans. verze

Abstraktní datové typy: zásobník

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

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

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

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

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

Algoritmizace a programování

1. Programování proti 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

20. Projekt Domácí mediotéka

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

7. Datové typy v Javě

Základy objektové orientace I. Únor 2010

Programování v Javě I. Leden 2008

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

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

Obsah Znovupou ˇzitelnost N avrhov e vzory Z asady programov an ı Radek Koˇc ı Semin aˇr Java N avrhov e vzory, Z asady... 2/ 46

Neměnné objekty. Tomáš Pitner, upravil Marek Šabo

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

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

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Jazyk C# (seminář 3)

JAVA. Krátke poznámky:

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

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

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

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

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

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

Úvod do programování v jazyce Java

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

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

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

Jazyk C# (seminář 6)

Seminář Java II p.1/43

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

OOPR_05. Případové studie

Objektově orientované programování

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

Java - řazení objektů

Datové struktury. alg12 1

PREPROCESOR POKRAČOVÁNÍ

Abstraktní třída a rozhraní

4IT101 otázky k závěrečnému testu verze pro zimní semestr 2007/2008

Programování v C++ 2, 4. cvičení

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

4IT101 - Otázky k závěrečnému testu

Testy z Javy verze 1.0 Stránka 1 z 13

Vlákna. První jednoduchý program s vlákny:

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

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

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

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

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/

Objekt. základní prvek v OOP. má vlastnosti. má metody. vznikne vytvoření nové instance definován pomocí třídy

Konstruktory a destruktory

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

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

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

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

Úvod do programovacích jazyků (Java)

Iterator & for cyklus

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

Kolekce, cyklus foreach

Jazyk C++ I. Šablony 2

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

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

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

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

Java Výjimky Java, zimní semestr

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

Vlákna. První jednoduchý program s vlákny:

Java Řetězce Java, zimní semestr

Dalším příkladem může být například výstup dat na různá zařízení, souborů, grafických rozhraní, sítě atd.

Datové typy strana 29

Programování v C++ 1, 5. cvičení

Soubor jako posloupnost bytů

OOP - Objektově Orientované Programování

5 Rekurze a zásobník. Rekurzivní volání metody

Transkript:

Lukáš Zapletal liberix.cz Pokročilejší techniky programování v Javě

Tato prezentace vychází kompletně z knihy J. Blocha: Effective Java (A-W 2001) u nás Java efektivně - 57 zásad softwarového experta (Grada 2002)

- generické typy anotace nejsou šablonami z C++ podobnost s C# Příklad: Map<String, User> = usersmap new HashMap<String, User>();... User user = usersmap.get( uzivatel232 );... usersmap.put( uzivatel232, user);

- generické typy můžete je použít jak u třídy, tak u metody public static <E> void render( Map<String, E> set) { E e = set.get( header );... renderer.process(e);... } volání: object.<page>render(pagesmap);

- generické typy class Stack<GO extends GraphicsObject> { public void push(go) {... } public GO pop() {... } }

- generické typy použití: Stack<Line> stk = new Stack<Line>();... Line line = stk.pop(); u GT nemůžete použít primitivní typy generické typy si zaslouží více studia (očišťování, zakázané operace, žolíky, kolize...) dobrá kniha: Pecinovský: Java 5.0 - novinky

používejte jedináčka, když je to třeba vytvořte private konstruktor, když je třeba pozor na finalize šetřte vytvářením nových instancí když to jde, použijte tovární metody nepotřebné objekty odstraňujte nastavením na null

dobře se seznamte s Java API, zejména kolekcemi a utilitami pro kolekce (nakl. KOPP: P. Herout: Bohatství knihoven) překrýváte-li equals, vždy překryjte i hashcode equals pište se zvýšenou pozorností reflexivnost: x.equals(x) symetričnost: y.equals(x) == x.equals(y) tranzitivita: (pokud x=y a y=z, pak x=z) pokud se objekt nemění, nemění se výsledek eq. žádný objekt se nesmí rovnat null

1 boolean equals(object o) { 2 if (this == o) return true; 3 if (o instanceof MojeTrida == false) 4 return false; 5 MojeTrida t = (MojeTrida) o; 6 return this.a == t.a && this.b == t.b &&... ; 7 } ř. 2 - optimalizace ř. 3 - pokud to není náš typ, nemůže nastat shoda ř. 5 - nesmíme vyhodit ClassCastException ř. 6 - postupně porovnáváme všechny členské proměnné (resp. ty, které se nastavují - ale nevypočítávají z jiných) Vždy porovnávejte nejdříve ty, u kterých je nejpraděpodobnější, že nedojde ke shodě.

- anotace znáte z C# v Javě je několik základních anotací @Deprecated @SupressWarnings @Override (a další) anotace se často využívají u dalších knihoven, které je rozšiřují (@Entity, @Test...)

hashcode musí počítat návratovou hodnotu ze všech prvků, které identifikují objekt (id např.) hashcode vrací celé číslo (int) nebojte se překrývat metodu tostring() raději nepoužívejte metodu clone() a nahraďte tuto metodu kopírovacím konstruktorem Object.clone() vrací mělkou kopii objektu, pakliže objekt implementuje Cloneable musíte znát spoustu fint, jak to správně udělat KK je daleko jednodušší

neměnitelná třída (invariant) - třída, jejíž instance nelze měnit; všechny informace se poskytnou v konstruktoru a pak jsou neměnné nemá mutátory nemělo by jít zbytečně překrývat metody všechny atributy jsou soukromé a finální všechny odkazy na jiné objekty by měly být také neměnné (můžete udělat defenzivní kopii)

neměnné třídy mají velké výhody: jsou jednoduché a dobře se na nich staví jsou zabezpečené z hlediska vláken můžete je sdílet (jedna instance pro celý program) ale i nevýhody každá změna = nová instance je nutno vytváření optimalizovat (například továrními metodami)

Třídy by měly být neměnitelné, pokud neexistuje dobrý důvod k tomu, učinit je měnitelnými. Joshua Bloch, Effective Java třídy navrhujte jako neměnitelné až se ukáže, že to nejde, ještě jednou se zamyslete a teprve pak je udělejte měnitelnými když už musí být měnitelné, omezte měnitelnost na co největší možnou míru příklady: PhoneNumber, Numeric, BigDecimal

dávejte přednost kompozici před dědičností dědění buď povolte a zdokumentujte, nebo zakažte (final) preferujte rozhraní namísto abstraktní třídy nebojte se statických metod (Collections.sort) vždy kontrolujte vstupní parametry každé metody a vyvolávejte IllegalArgumentException, NullPointerException a IndexOutOfBoundsException (a jiné)

vytvářejte defenzivní kopie, když je to možné nevěřte těm, kteří používají vaše třídy vyhazujte výjimky namísto návratu a testování hodnoty null vyhýbejte se typům float a double, pokud potřebujete počítat přesně například na počítačovou grafiku stačí počítání peněz - použijte třídu BigDecimal

pozor na spojování řetězců (něco kompilátor odhalí, ale ne vše) - používejte StringBuffer odkazujte se na objekty jejich rozhraními reflexi používejte s rozvahou nebojte se vytvářet vlastní třídy výjimek kontrolované výjimky používejte u zotavitelných stavů a výjimky za běhu k fatálním chybám dávejte přednost standardním výjimkám

nikdy neignorujte výjimky: catch (Výjimka) { } pokud objekt selže (vyhodí výjimku), snažte se docílit toho, aby byl stav objektu jako před vyvoláním výjimky (objekt byl dále použitelný) do výjimky napište přesné důvody selhání nebojte se zapozdřených výjimek výjimky dokumentujte kontrolované výjimky jsou silnou součástí Javy

pozor na vlákna u měnitelných objektů kdykoli více vláken sdílí měnitelná data, pak musí každé vlákno při čtení i zápisu dostat zámek (musíme synchronizovat) v synchronizačních blocích musíte vykonávat co nejméně operací - hrozí deadlock dokumentujte zabezpečení vláken seznamte se s metodami wait, notify, notifyall a s třídou Thread a jí podobným

to jsou jen hlavní body této skvělé knížky (některá témata například Serializace jsem vynechal) a samozřejmě klasické: dobře volte pojmenování metod, tříd, proměnných používejte zažité konvence optimalizujte rozumně dokumentujte