Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 1/21
Příklad 1/2 public class Bod2D private double mx; private double my; public double getx ( ) return mx ; public double gety ( ) return my ; public void setx ( double x ) mx = x ; public void sety ( double y ) my = y ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 2/21
Příklad 2/2 public s t a t i c void main ( S t r i n g [ ] args ) Bod2D bod = new Bod2D ( ) ; bod. setx ( 1. 0 ) ; bod. sety ( 1.0); System. out. p r i n t l n ( " x : " + bod. getx ( ) + ", y : " + bod. gety ( ) ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 3/21
Ukazatel (reference) Bod2D a = new Bod2D(); je ukazatel na objekt v paměti. Po přiřazení Bod2D c = a; budou a a c ukazovat na stejný objekt. Ukazatel null označuje ukazatel na žádný objekt. Bod2D d = null; Pokud budeme chtít přistupovat na atribut nebo metodu null ukazatele, program skončí chybou. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 4/21
Dealokace paměti V jazyku Java je pamět alokovaná pomocí operátoru new dealokována automaticky. Systém obsahuje automatické řízení paměti garbage collector. Pokud neexistuje ukazatel na pamět, objekt je zničen a pamět uvolněna. Garbage collector musí řešit i cyklické závislosti. + programátor se nestará o alokovanou pamět. - větší režie oproti ručnímu uvolňování paměti. public s t a t i c void main ( S t r i n g [ ] args ) Bod2D bod = new Bod2D ( ) ; / / alokace pameti... / / o b j e k t j e znicen garbage collectorem c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 5/21
Klíčové slovo this, příklad 1/2, Bod2D.java Klíčové slovo this označuje ukazatel na objekt v jehož metodě je this použito. public class Bod2D... public double EuclideanDistance (Bod2D bod1, Bod2D bod2 ) return Math. s q r t ( Math. pow( bod1. getx ( ) bod2. getx ( ), 2 ) + Math. pow( bod1. gety ( ) bod2. gety ( ), 2 ) ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 6/21
This, příklad 2/2, Bod2D.java public s t a t i c void main ( S t r i n g [ ] args ) Bod2D bod1 = new Bod2D ( ) ; bod1. setx ( 2. 0 ) ; bod1. sety ( 2. 0 ) ; Bod2D bod2 = new Bod2D ( ) ; bod2. setx ( 0. 0 ) ; bod2. sety ( 0. 0 ) ; Bod2D bod = new Bod2D ( ) ; System. out. p r i n t l n ( " Euclidean Distance : " + Bod. EuclideanDistance ( bod1, bod2 ) ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 7/21
This, příklad 2 1/2 public class Bod2D... public double EDistance ( Bod2D bod ) return EuclideanDistance ( this, bod ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 8/21
This, příklad 2 2/2 public s t a t i c void main ( S t r i n g [ ] args ) Bod2D bod1 = new Bod2D ( ) ; bod1. setx ( 2. 0 ) ; bod1. sety ( 2. 0 ) ; Bod2D bod2 = new Bod2D ( ) ; bod2. setx ( 0. 0 ) ; bod2. sety ( 0. 0 ) ; Bod2D bod = new Bod2D ( ) ; System. out. p r i n t l n ( " Euclidean Distance : " + bod. EuclideanDistance ( bod1, bod2 ) ) ; System. out. p r i n t l n ( " Euclidean Distance : " + bod1. EDistance ( bod2 ) ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 9/21
Přetížení metod (Overloading) v Javě mohou být přetíženy. To znamená, že třída může obsahovat více metod se stejným názvem. se musí lišit v počtu a typech parametrů. Metoda, která bude zavolána je vybrána dle počtu a typu parametrů. Návratový typ nemusí být stejný. public class Bod2D... public double EuclideanDistance (Bod2D bod1, Bod2D bod2 )... public double EuclideanDistance (Bod2D bod )...... c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 10/21
Zapouzdření (Encapsulation) Atributy a metody označené jako private mohou být přístupné pouze z metod tříd ve které jsou definovány. Atributy a metody označené jako public mohou být přístupné z libovolné třídy. Pokud uvažujeme čistý objektově-orientovaný návrh, pak data jsou zapouzdřena ve třídách (private) a metody pracují s těmito daty (public) zapouzdření. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 11/21
Inicializace objektu Po vytvoření instance jsou všechny atributy nastaveny na hodnotu nula: Číselné hodnoty (int, long, char, float,...) jsou nastaveny na hodnotu 0. Booleovské hodnoty jsou nastaveny na false. (na objekty a pole) jsou nastaveny na null. Můžeme použít explicitní inicializaci: public class Bod2D private double mx = 1. 0 ; private double my = 1. 0 ;... c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 12/21
(constructor) Objekt může být inicializován pomocí konstruktoru. připomíná metodu, ovšem: Jméno konstruktoru je stejné jako jméno metody. nevrací hodnotu. může být volán pouze při vytváření instance pomocí new. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 13/21
, příklad 1/2 public class Bod2D private double mx; private double my; Bod2D( double x, double y ) mx = x ; my = y ; Bod2D ( )... c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 14/21
, příklad 2/2 public s t a t i c void main ( S t r i n g [ ] args ) Bod2D bod1 = new Bod2D ( ) ; bod1. setx ( 2. 0 ) ; bod1. sety ( 2. 0 ) ; Bod2D bod2 = new Bod2D ( 2. 0, 2. 0 ) ;... c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 15/21
, poznámky y mohou být přetěžovány. může být označen private, protected a public jako běžné metody. Pokud není definován žádný konstruktor, pak je vygenerován prázdný konstruktor. Pokud je definován alespoň jeden konstruktor, pak není vygenerován prázdný konstruktor. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 16/21
Úvod do programovacích jazyků (Java), 4 může volat jiný konstruktor. K tomuto účelu použijeme klíčové slovo this. Volání jiného konstruktoru může být použito pouze na prvním řádku těla konstruktoru. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 17/21
, příklad public class Bod2D... Bod2D( double x, double y ) mx = x ; my = y ; Bod2D( double value ) this ( value, value ) ;... c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 18/21
Příklad 1/3, SearchApplication.java public class SearchApplication Searcher msearcher ; public SearchApplication ( ) msearcher = new Searcher ( ) ; public void Run ( S t r i n g s t r, char ch ) i n t number = msearcher. Search ( s t r, ch ) ; System. out. p r i n t l n ( " Pocet vyskytu : " + number ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 19/21
Příklad 2/3, SearchApplication.java public s t a t i c void main ( S t r i n g args [ ] ) new SearchApplication ( ). Run ( " Toto j e retezec ", t ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 20/21
Příklad 3/3, Searcher.java public class Searcher i n t Search ( S t r i n g s t r, char ch ) i n t number = 0 ; for ( i n t i = 0 ; i < s t r. l e n g t h ( ) ; i ++) i f ( s t r. charat ( i ) = = ch ) number ++; return number ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 21/21