Java.lang.Object Tato nejobecnější třída je kořenem hierarchického stromu. Nemá žádné dostupné atributy, má jen implicitní konstruktor a 11 přetížených,

Slides:



Advertisements
Podobné prezentace
Přednáška 11 Jiří Šebesta
Advertisements

Spojové struktury Spojová struktura ( linked structure ):
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
Strukturované datové typy
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.
4IT1014IT101 Pátá přednáška Datové struktury - pokračování Statické prvky třídy.
4IT101 šestá přednáška.
Polymorfismus Dědičnost
Druhé cvičení Vytváření identifikátorů Datové typy
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,...)
4IT101 Testování a ladění, dokumentace API třídy,
Rudolf Pecinovský Kontejnery Rudolf Pecinovský
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í.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
4IT101 7.přednáška Třída String a regulární výrazy Algoritmy v kolekcích Vnitřní a vnořené třídy.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Třída jako zdroj funkcionality
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
Objektové programování
Podpora vláken a jejich synchronizace v jazyce C# Jan Kučera Jan Mittner Petr Effenberger 4IT353 Klient/server aplikace v Javě.
Datové typy a práce s nimi
Návrh a tvorba WWW Přednáška 11
Počítače a programování 1 8.přednáška. Obsah přednášky Řetězce - deklarace a vytvoření Základní metody pro práci s řetezci Znaky - třída Character Základní.
Další abstraktní datové typy
Alg91 Textové soubory Na rozdíl od jiných typů souborů jsou textové soubory určené pro gramotné lidské oko. Textový soubor je posloupnost znaků členěná.
Počítače a programování 1
JavaScript Podmínky, cykly a pole.
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.
STROMY Datová struktura sestávající z uzlů
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.
13/04/20151 Indexery (1) Členy třídy (struktury) umožňující třídě (struk- tuře) používat hranaté závorky a pracovat s ní podobně jako s polem (používat.
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.
KIV/PPA1 cvičení 9 Cvičící: Pavel Bžoch. Osnova cvičení Třída String a její metody –Řetězce a operace s nimi.
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.
FEL Komunikátor. Memory Leak program konsumuje operační paměť, kterou neumožňuje uvolnit o uvolnění paměti stará Garbage Collector ▫plně v režii Java.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Iterator Iterator – Problém struct Item { int _value; Item * _next; Item( int value, Item * next ) : _value( value ), _next( next ) { } }; void Print(
PROGRAMOVÁNÍ 3ITA,3ITB Jaroslav Burdys Hlavní zdroj:
Y36PJC Programování v jazyce C/C++
Programovací jazyk C# 4. část - cykly.
Čas API pojednavá čas obecným, globálním způsobem.
Programování ENUM, SWITCH,pole jednorozměrná a vícerozměrná, deklarace, inicializace, kopírování, porovnání Erik Král.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Y36PJC Programování v jazyce C/C++
Generické typy jsou třídy či interfejsy deklarující tzv. typové parametry jimiž: systematizují typovou kontrolu kompilátorem, vyjadřují jasněji smysl,
Kolekce je sbírka objektů v operační paměti, organizovaná dle JCF ( Java Collection Framework ). JCF sídlí v balíčku java.util a zahrnuje zejména: Interfejsy:
Programování 2. hodina RNDr. Jan Lánský, Ph.D.
Návrhový vzor Flyweight
Kolekce je sbírka objektů v operační paměti, organizovaná dle JCF ( Java Collection Framework ). JCF sídlí v balíčku java.util a zahrnuje zejména: Interfejsy:
Polymorfismus = Mnohotvarost
Abstraktní datové typy
Dynamické proměnné (1) Proměnné, jejichž počet a (nebo) velikost pa-měti využívané těmito proměnnými se v prů-běhu programu mění Dynamické proměnné lze.
Reflexe jako introspekce
ALG 09 Radix sort (přihrádkové řazení) Counting sort
C# přehled vlastností.
Transkript prezentace:

java.lang.Object Tato nejobecnější třída je kořenem hierarchického stromu. Nemá žádné dostupné atributy, má jen implicitní konstruktor a 11 přetížených, dostupných, instančních metod, které zdědí všechny další třídy - ať jsou definovány kdekoli a kýmkoli. public boolean equals(Object obj) - definuje relaci ekvivalence objektů: x.equal(y) vrací true právě tehdy, když x == y. Je-li tato metoda přepsána, bývá nutno přepsat metodu hashCode kvůli dodržení uzance, že ekvivalentní objekty musejí mít stejné hash kódy. public int hashCode( ) - vrací int číslo, přičemž: Musí vracet totéž číslo v jednom běhu. Ekvivalentní objekty (dle equals( ) ) musejí vracet totéž číslo. Neekvivalentní objekty (dle equals( ) ) nemusejí vracet různá čísla. Avšak vracení různých čísel zlepšuje funkci hashtable. PJV04

Třída java.lang.Object public final Class getClass( ) - vrací objekt typu Class, čímž lze typ každého objektu přesně identifikovat. public String toString( ) - vydává popisný řetěz. Doporučuje se tuto metodu v potomcích přepsat tak, aby vracený popisný řetěz vyjadřoval typ a stav objektu. Metoda se automaticky volá při konkatenaci a v metodách print(...) či println(...). public final void wait(...) throws InterruptedException - tyto metody umožňují zařadit objekt do čekárny. public final void notifyAll( ) - uvolňuje všechny objekty z čekárny. public final void notify( ) - uvolňuje objekt z čekárny. PJV04

Třída java.lang.Object protected Object clone( ) throws CloneNotSupportedException - umožňuje mělké klonování potomků. protected void finalize( ) throws Throwable - tuto metodu volá garbage collector když hodlá objekt zrušit. Potomek může metodu přepsat a provést nějakou údržbu. Pozn.: Garbage collector lze nuceně vyvolat metodou System.gc(). PJV04

Pole (Array) Pole a prvky pole se poznají podle hranatých závorek. K prvkům pole se přistupuje pomocí indexu v rozmezí 0 ... pole.length -1. Počet hranatých závorek udává dimensionalitu. Vícedimensionální pole se vytvoří skládáním jednodimensionálních a takové pak nemusí být rektangulární. Každé pole je objekt, na který se tudíž odkazujeme referenční proměnnou a tudíž může být referováno typem Object. Pomocí metody java.lang.getClass() lze zjistit vlastnosti pole. Dimensionalita se pak manifestuje počtem otevíracích hranatých závorek. Typy primitivních polí jsou vyznačeny písmeny takto: B, S, C, I, J, F, D, Z pro byte, short, char, int, long, float, double, boolean Typ referenčních polí je vyznačen písmenem L a úplným jménem třídy. PJV04

Pole (Array) Příklad: String[ ] s = { "AAA", " BBB", "CCC " }; System.out.println( s.getClass()+" "+Array.getLength(s) ); int [ ][ ] a = new int [ ][ ] { { 333, 666}, {777} }; System.out.println( a.getClass()+" "+Array.getLength(a) ); Vypíše: class [L java.lang.String; 3 class [ [ I 2 Třída java.util.Arrays umožňuje třídění, vyhledávání, vyplňování a porovnávání polí. Navazuje také na operace s kolekcemi. K rafinovanému zacházení slouží třída java.lang.reflect.Array, která umožňuje dynamicky vytvářet a modifikovat pole. PJV04

Kolekce (Collection) Kolekcí čili sbírkou se rozumí skupina objektů v paměti, organizovanou dle JCF (Java Collection Framework - tento rámec je standardní od Javy 1.2) je uložen ponejvíce v balíčku java.util a zahrnuje zejména: Interfejsy: Collection - sbírka objektů Set, SortedSet - sbírka unikátních objektů - případně uspořádaná Map, SortedMap - sbírka dvojic (zobrazení) objektů key  value List - indexovaná sbírka objektů Comparator, java.lang.Comparable - pro porovnávání objektů Iterator, ListIterator, RandomAccess - pro přístup k prvkům Abstraktní třídy: AbstractCollection AbstractSet, AbstractMap, AbstractList, AbstractSequentialList PJV04

Kolekce (Collection) Třídy: ArrayList, LinkedList HashSet, LinkedHashSet, HashMap LinkedHashMap TreeSet, TreeMap Vector, Stack, Hashtable, Properties Arrays, Collections Algoritmy pro řazení, přesouvání, doplňování, kopírování a vyhledávaní PJV04

Java Collection Framework jen statické metody Set List Collections Abstract Collection Arrays SortedSet Abstract Set Abstract List ArrayList RandomAccess TreeSet HashSet Abstract Sequential List Vector Linked HashSet Linked List Stack třída abstr. třída interfejs extends implements PJV04 ALG

Java Collection Framework Nepatří do JCF Map Dictionary SortedMap Abstract Map Comparator Hashtable TreeMap HashMap Properties Identity HashMap Linked HashMap Weak HashMap Iterator ListIterator třída abstr. třída interfejs extends implements PJV04

Užité techniky interface HT RA BT LL HT+LL List - ArrayList - LinkedList - Set HashSet - - - LinkedHashSet SortedSet - - TreeSet - - Map HashMap - - - LinkedHashMap SortedMap - - TreeMap - - HT - hastable - rozmítaná tabulka, RA - resizable array - pole s proměnnou velikostí, BT - balanced tree - vyvážený strom, LL - linked list - spojový seznam. PJV04

Collection Interfejs Collection umožňuje jednotlivé i hromadné operace: Dotazy: int size( ) boolean isEmpty( ) boolean contains( Object o ) boolean containsAll( Collection c ) - true, obsahuje-li všechny prvky c Iterator iterator( ) Object[ ] toArray( ) Object[ ] toArray(Object a[ ] ) vytvoří pole daného typu takové velikosti, aby se do něj vešly všechny prvky z kolekce. Modifikace: boolean add( Object o ) boolean remove( Object o ) boolean ddAll( Collection c ) boolean removeAll( Collection c ) - odstraňuje všechny patřící do c boolean retainAll( Collection c ) - odstraňuje všechny mimo patřící do c void clear( ) PJV04

Collection Třída AbstractCollection implementuje Collection, abstraktními zůstávají pouze metody iterator( ) a size( ). Interfejs Iterator slouží k postupnému jednosměrnému výpisu sbírky v pořadí v závislosti na jejím typu. Interfejs ListIterator je potomkem Iteratoru a navíc má metody pro prohlížení oběma směry, získávání indexů a vkládání prvků. Interfejs RandomAccess je pouhý marker. PJV04

List Interfejs List je potomkem Collection, který vyžaduje indexovaný přístup k prvkům sbírky void add ( int index, Object element ) boolean addAll ( Collection c ) boolean addAll ( int index, Collection c ) Object get ( int index ) Object set ( int index, Object element ) Object remove (int index ) int indexOf ( Object o ) - hledání zepředu int lastIndexOf ( Object o ) - hledání zezadu ListIterator listIterator ( ) ListIterator listIterator ( int index ) List subList ( int fromIndex, int toIndex ) - pohled PJV04

AbstractList Třída AbstractList je potomkem třídy AbstractCollection a interfejsu List. Ta přidává jen metodu protected void removeRange( int, int) a abstraktními jsou jen metody get( int ) a size( ). AbstractList sleduje také modifikace a komodifikace. Má tři přímé potomky: AbstractSequentialList - polotovar pro sekvenční přístup s abstraktními metodami listIterator( int ) a size( ). ArrayList - nesynchronizovaná obdoba Vectoru. Vector je třída stará od 1.0 a je synchronizovaná - od verze 1.2 redefinovaná. Některé původní metody mají nově, systematičtěji nazvané ekvivalenty, např.: elementAt( int ) vs. get( int ). Radno používat ty, které jsou zavedené v příslušných interfejsech. Při probírce lépe použít Iterator iterator( ) než Enumeration elements( ). PJV04

ArrayList Třída ArrayList uchovává reference objektů v poli. Operace size, isEmpty, get, set, add, iterator, a listIterator probíhají v konstantním čase, ostatní v lineárním. Konstruktor a dvě metody nastavují kapacitu tj. velikost pole a tím ovlivňují nárok na paměť i četnost a čas realokací. Metoda ensureCapacity realokuje pole o polovinu větší, trimToSize realokuje na stávající velikost. Třída LinkedList Kolekce objektů je realizována technikou obousměrného spojového seznamu ve kterém se postupně hledá pomocí ListIteratoru. Příslušné operace mají tedy lineární časovou složitost. Pro synchronizaci je třeba zapouzdřit takto: List list = Collections.synchronizedList( new ArrayList( ) ); List list = Collections.synchronizedList( new LinkedList( ) ); PJV04

Stack (zásobník) Třída Stack (zásobník) je přímý potomek Vectoru s přidanými metodami: Object push ( Object x ) - vloží prvek na vrchol Object pop ( ) - odebere prvek z vrcholu Object peek ( ) - vrátí prvek z vrcholu, ale neodebere boolean empty ( ) int search ( Object x ) - pozice objektu od vrcholu počítaná od 1 Tato třída je stará z verze 1.0, synchronizovaná a užitečná ač nepatří do JCF. Její vlastní metody nelze využívat pomocí interfejsu List. PJV04

Set a SortedSet Interfejs Set je potomkem Collection Ve sbírce se nesmějí být duplikované prvky ( ve smyslu equals() ) a nanejvýš jedna reference null. Zvláštní pozornost musí být věnována případu jsou-li prvky obsahově proměnné. Tento interfejs nepřidává další metody. Interfejs SortedSet je potomkem Set a Comparator comparator( ) Object first( ) - vrací první (nejmenší) prvek SortedSet headSet( Object toElement ) - vrací pohled Object last( ) - vrací poslední (největší) prvek SortedSet subSet( Object fromElement, Object toElement ) SortedSet tailSet( Object fromElement ) - vrací pohled PJV04

AbstractSet a její potomci Třída AbstractSet přepisuje pouze metody equals( ), hashCode( ), removeAll( ). Abstraktními stále zůstavají iterator( ) a size ( ). Všichni následující konkrétní potomci jsou nesynchronizovaní. Třída HashSet umožňuje prvek null. Iterátor nezaručuje jakékoli pořadí. Operace jsou zprostředkovány třídou HashMap v O(1) čase. Třída LinkedHashSet je potomkem HashSet také umožňuje prvek null. Iterátor zaručuje výstup v pořadí vkládání a to i případě reinserce téhož prvku. Operace jsou zprostředkovány třídou LinkedHashMap v O(1) čase. Třída TreeSet navíc implementuje interfejs SortedSet. Zaručuje výstup výstup v rostoucím pořadí objektů ( buď dle Comparable anebo dodaného Comparatoru ). Iterátor zaručuje ryze vzrůstající pořadí. Operace jsou zprostředkovány třídou TreeMap v O( log n ) čase. PJV04

Map Interfejs Map definuje abstraktní metody: void clear ( ) boolean containsKey ( Object key ) boolean containsValue ( Object value ) Set entrySet ( ) Object get ( Object key ) boolean isEmpty ( ) Set keySet ( ) Object put ( Object key, Object value ) void putAll ( Map m ) Object remove ( Object key ) int size ( ) Collection values ( ) Map znamená zobrazení keys -> values, tedy klíčů ( množinu objektů ) na hodnoty ( multimnožinu objektů ). PJV04

SortedMap Interfejs SortedMap je potomkem Map a přidává abstraktní metody: Comparator comparator( ) Object firstKey( ) - vrací první (nejmenší) klíč SortedMap headMap( Object toKey ) - vrací pohled Object lastKey( ) - vrací poslední (největší) prvek SortedMap subMap( Object fromKey, Object toKey ) - vrací pohled SortedMap tailMap( Object fromKey ) - vrací pohled PJV04

AbstractMap Třída AbstractMap implementuje interfejs Map, ponechává abstraktní jen metodu entrySet ( ). Přidává metody: boolean containsKey ( Object x ) boolean containsValue ( Object x ) Třída HashMap je konkrétním potomkem třídy AbstractMap, umožňje null reference, není synchronizovaná. Třída Hashtable je starší obdobou HashMap, splňuje interfejs Map, je však potomkem zastaralé abstraktní třídy Dictionary, neumožňuje null reference, je synchronizovaná. Třída Properties je potomkem Hashtable, který umožňuje vstup i výstup pomocí proudů (streams). Třída TreeMap je konkrétním potomkem třídy AbstractMap která navíc implementuje interfejs SortedMap. Tedy udržuje unikátní klíče ve vzrůstající setříděném posloupnosti. PJV04

Comparator Interfejs Comparator definuje požadavky, které musí splňovat objekt rozhodující, který ze dvou objektů je větší. Jsou to metody: int compare( Object x, Object y ) - vrací <0, 0, >0 pro x<y, x==y, x>y boolean equals ( Object obj ) - srovnává objekty typu Comparator PJV04

Iterator a ListIterator Interfejs Iterator definuje požadavky, které musí splňovat objekt, kterým lze probírat sbírku. Jsou to metody: boolean hasNext ( ) - testuje zda jsou ještě další prvky Object next( ) - podá další prvek void remove( ) – odstraní prvek ze sbírky ListIterator je potomkem Iteratoru a přidává požadavky pro sekvenční přístup, přidávání, změny a indexování prvků těmito metodami: boolean hasNext ( ) - testuje zda jsou ještě další prvky Object previous( ) - podá další prvek int nextIndex( ) - index dalšího prvku int previousIndex( ) - index dalšího prvku void set( Object o ) void add( Object o ) PJV04

StringTokenizer Další třídy jsou velmi užitečné – nejsou součástí JCF Třída StringTokenizer je pomůcka pro separaci řetězu podle zadatelných delimiterů, kterými jsou jednotlivé znaky. Pomocí enumerace ( starší varianta iterátoru ) postupně získáme podřetězy - případně i delimitery. Příklad: String s = " delta = alfa * ( beta + gama ) "; Enumeration en = new StringTokenizer( s, "=+*() ", true ); while ( en.hasMoreElements( ) ) { String z = (String) en.nextElement( ); if ( z.equals (" ") ) continue; // Zde vrací z postupně od mezer oproštěné řetězy: // delta, =, alfa, *, (, beta, +, gama, ) . } PJV04

BitSet Třída BitSet slouží k operacím na indexované množině boolevských hodnot ( false / true ). Umožňuje operace AND, ANDNOT, OR, XOR, intersekci, inverzi, výběr podmnožiny, vyhledání nejbližšího prvku dané hodnoty, zjištění kardinality i hromadné modifikace. Množina je dynamicky rozšiřovatelná. PJV04

Zpracování času UTC čas ( po milisekundách od 1.1.1970 ) lze zjistit takto: long t = java.lang.System.currentTimeMillis( ); long t = new GregorianCalendar().getTimeInMillis(); long t = Calendar.getInstance().getTimeInMillis(); K zacházení s časovými údaji slouží následující třídy: Date - starší třída - značně deprecated. Calendar - abstraktní třída GregorianCalendar - konkrétní třída Kalendářové třídy respektují místní čas i zvyklosti ( TimeZone a Locale ). Volba jednotlivých údajů se zadává symbolicky - přičemž pozor: SUNDAY=1 ... SATURDAY=7, JANUARY=0 ... DECEMBER=11. Příklad: Calendar cal = Calendar.getInstance(); // cal zafixuje časové údaje a tiskne: System.out.println( cal.getTime( ) ); // Sat Mar 06 20:06:28 CET 2004 System.out.println( cal.get(cal.MONTH) );// 2 PJV04

Zpracování času Časové plánování a spouštění úloh umožňují třídy Timer a TimerTask. PJV04