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

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

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

Iterator & for cyklus

Java Enum Java, zimní semestr ,2017 1

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

Java Výjimky Java, zimní semestr

Principy objektově orientovaného programování

Úvod do programovacích jazyků (Java)

Generické programování

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

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

Teoretické minimum z PJV

JAVA. Krátke poznámky:

typová konverze typová inference

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

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/

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

Java Řetězce Java, zimní semestr

Výčtový typ strana 67

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

Abstraktní datové typy: zásobník

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

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

Seminář Java IV p.1/38

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

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

20. Projekt Domácí mediotéka

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

Seminář Java II p.1/43

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

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

Abstraktní třída a rozhraní

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.

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

Programování v Javě I. Leden 2008

Dědění, polymorfismus

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

Algoritmizace a programování

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

Dědičnost (inheritance)

PREPROCESOR POKRAČOVÁNÍ

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

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

Objektově orientované programování v PHP 5. Martin Klíma

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

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

Jazyk C# (seminář 6)

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

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

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

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

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

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

Osnova přednášky. Programové prostředky řízení Úvod do C# II. Přístup ke členům. Členy (Members)

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

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

Konstruktory a destruktory

Úvod do programovacích jazyků (Java)

1. Dědičnost a polymorfismus

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

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

1. Programování proti rozhraní

Algoritmizace a programování

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

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

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

RMI Remote Method Invocation

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

Základy objektové orientace I. Únor 2010

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

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

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

Objektově orientované programování

OOP - Objektově Orientované Programování

Programování v C++ VI

Typický prvek kolekce pro české řazení

Jazyk C# (seminář 3)

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

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

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

Vláknové programování část V

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

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

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

Java - řazení objektů

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

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

Jazyk C++ I. Šablony 2

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

24. listopadu 2013, Brno Připravil: David Procházka

Programování v jazyku Java základy OOP

9. přednáška - třídy, objekty

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

Programovací jazyk Java

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

boolean hasnext() Object next() void remove() Kolekce

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

JAVA V Assertions Java, zimní semestr

UJO Framework. revoluční architektura beans. verze

Transkript:

JAVA Třídy

Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky 2

Konstruktor konstruktor inicializace objektu deklarace jmenuje se jako třída žádný návratový typ modifikátor pouze viditelnost více konstruktorů různé parametry určí se podle parametrů za new class MyClass { int value; public MyClass() { value = 10; public MyClass(int v) { value = v; 3

Likvidace objektů garbage collector metoda finalize() je na každé třídě zavolá se před likvidací objektu není to destruktor jako v jiných jazycích!!! neví se, kdy se zavolá není zaručeno jeho volání objekty nemusejí být zlikvidovány přes garbage collector např. při ukončení programu volání finalize se neřetězí Zjednodušeně lze zapomenout, že finalize() existuje 4

Inicializace atributů inicializace v konstruktoru nebo přímá inicializace class MyClass { int a = 5; float b = 1.2; MyClass2 c = new MyClass2(); int d = fn(); int e = g(f); // spatne! int f = 4;... 5

Inicializace: static pouze jednou před prvním přístupem nebo před vytvořením první instance třídy přímá static int a = 1; static inicializator class MyClass { static int a; static { a = 10;... 6

Inicializace: "ne-static static" podobné jako static inicializátor nezbytné pro inicializaci anonymních vnitřních tříd class MyClass { int a; int b; { a = 5; b = 10;... 7

Třídy: dědičnost určení předka extends JmenoPredka jednoduchá dědičnost pouze jeden předek třída java.lang.object každá třída je jejím potomkem přímo nebo nepřímo jediná třída která nemá předka vícenásobná dědičnost přes Interface 8

Polymorfismus polymorfismus ~ dědičnost přetypování automaticky potomek na předka class A { /*...*/ class B extends A { /*...*/ A a = new B(); Object o = a; B b = (B) o; 9

Polymorfismus konstruktor konstruktor předka super() jiný konstruktor stejného objektu this() volání jiných konstruktorů jen jako první příkaz a pouze jednou vždy se nejdřív volá konstruktor předka i když není explicitně uveden výjimka this() třída bez definice konstruktoru standardní konstruktor jen volá předka 10

java.lang.object Object clone() boolean equals(object obj) void finalize() Class<?> getclass() int hashcode() void notify() void notifyall() String tostring() void wait() void wait(long timeout) void wait(long timeout, int nanos) 11

Třídy: viditelnost členů určuje se pro každý prvek atributy a metody public viditelné odkudkoliv (pokud je viditelná i třída) protected viditelné ve stejném balíku a v potomcích private viditelné jen ve třídě, kde jsou definovány bez uvedení viditelné ve stejném balíku platí v rámci jednoho modulu od Java 9 12

Třídy: další modifikátory final atribut konstantní musí mít inicializátor po inicializaci nelze do něj nic přiřadit metoda nelze v potomcích předefinovat transient atribut není součástí persistentního stavu objektu volatile atribut přistupuje nesynchronizovaně několik vláken nelze provádět optimalizace 13

Třídy: modifikátory metod abstract není implementace metody třída musí být také abstract od třídy nelze vytvářet instance tělo metody středník synchronized volající vlákno musí nejdřív získat zámek na volaném objektu (pokud to je static metoda, tak na třídě) native nativní metoda implementace přímo ve strojovém kódu konkrétní platformy (externí knihovna) tělo metody středník static viz předchozí přednáška 14

Třídy: modifikátory metod není modifikátor virtual všechny metody jsou virtuální statické metody nejsou virtuální public class A { public void foo() { System.out.print( A ); public class B extends A { public void foo() { System.out.print( B );... A a = new B(); a.foo(); // vypíše B public class As { public static void foo() { System.out.print( A ); public class Bs extends As { public static void foo() { System.out.print( B );... A a = new B(); a.foo(); // vypíše A 15

Statické metody statické metody se volají na třídě nepatří žádnému objektu class As { public static void foo() {... As.foo(); lze je volat i na objektu (instanci třídy); ve skutečnosti se vezme typ podle reference hodnota objektu je nepodstatná typ (a tedy která statická metoda bude volaná) se určí už v době překladu viz předchozí slide 16

this reference na objekt právě volané metody lze použít pouze v těle metod nebo inicializátoru objektu public class MyClass { private int a; public MyClass(int a) { this.a = a; 17

super přístup k členům přímého předka pokud S je přímý předek C ((S) this).name ~ super.name nelze použít super.super class T1 { int x = 1; class T2 extends T1 { int x = 2; class T3 extends T2 { int x = 3; void test() { System.out.println(x); // 3 System.out.println(super.x); // 2 System.out.println(((T2)this).x); // 2 System.out.println(((T1)this).x); // 1 18

super super lze použít i na metody POZOR nefunguje přetypování this program lze přeložit, ale bude se rekurzivně volat stejná metoda class TX1 { public void foo() { /* */ class TX2 extends TX1 { public void foo() { /* */ public class TX3 extends TX2 { public void foo() { ((TX1) this).foo(); System.out.println("TX3.foo()"); 19

Java Interface 20

Interface pouze definice rozhraní žádná implementace od Java 8 i implementace může obsahovat hlavičky metod atributy vnitřní interface public interface Iterator { boolean hasnext(); Object next(); void remove(); 21

Interface: atributy implicitně jsou public, static a final musejí být inicializovány v inicializaci nelze použít super a this public interface Iface { int a = 5; String s = "ahoj"; 22

Interface: metody bez implementace implicitně jsou abstract a public nelze definovat synchronized native final default metody od Java 8 obsahují implementaci vhodné pro rozšiřování interfaců static metody od Java 8 stejné jako static metody ve třídách 23

Interface: dědičnost vícenásobná dědičnost interface Iface1 {... interface Iface2 {... interface Iface3 extends Iface1, Iface2 {... 24

Třídy a interface třídy implementují interface public interface Colorable { void setcolor(int c); int getcolor(); public class Point { int x,y; public class ColoredPoint extends Point implements Colorable { int color; public void setcolor(int c) { color = c; public int getcolor() { return color; Colorable c = new ColoredPoint(); 25

Třídy a interface třída musí implementovat všechny metody interface s výjimkou default metod neplatí pro abstract třídy jedna metoda ve třídě může implementovat více interfaců interface A { void log(string msg); interface B { void log(string msg); public class C implements A, B { public void log(string msg) { System.out.println(msg); 26

Interfacy a default metody implementace ve třídě má vždy přednost při implementaci dvou interfaců se stejnou default metodou nutno implementovat metodu ve třídě jinak třída nelze přeložit interface If1 { default void foo() { class Mixed implements If1, If2 { interface If2 { default void foo() { nelze přeložit 27

Interfacy a default metody nelze definovat deafult metody pro public metody z java.lang.object interface Iface { public default boolean equals(object obj) { return false; implementace ve třídě má vždy přednost i zděděná 28

Interfacy a default metody interface If1 { default void foo() { System.out.println( interface ); class A { public void foo() { System.out.println( class ); class B extends A implements If1 { public static void main(string[] args) { B b = new B(); b.foo(); // -> class 29

Java Pole 30

Definice pole pole ~ objekt proměnná ~ reference int[] a; // pole short[][] b; // dvourozm. pole Object[] c, // pole d; // pole long e, // skalar f[]; // pole 31

Inicializace pole "statická" int[] a = { 1, 2, 3, 4, 5 ; char[] c = { 'a', 'h', 'o', 'j' ; String[] s = { "ahoj", "nazdar" ; int[][] d = { { 1, 2, { 3, 4 ; 32

Incializace pole dynamická int[] array = new int [10]; float[][] matrix = new float[3][3]; nemusí se zadávat všechny rozměry stačí několik prvních rozměrů místo ostatních prázdné závorky float[][] matrix = new float[3][]; for (int i=0;i<3;i++) matrix[i] = new float [3]; // spatne int[][][][] a = new int[3][][3][]; 33

Inicializace pole "nepravoúhelníková" pole int a[][] = { {1, 2, {1, 2, 3, {1, 2, 3, 4, 5 ; int b[][] = new int [3][]; for (int i=0; i<3; i++) b[i] = new int [i+1]; 34

Inicializace pole při vytváření pole se nevolá žádný konstruktor prvky ve vytvořeném poli (pomocí new) defaultní hodnoty reference null int 0... výrazy při vytváření pole (new) postupně plně vyhodnocovány zleva int i = 4; int ia[][] = new int[i][i=3]; // pole 4x3 35

Přístup k poli pole[index] indexy pole vždy 0..délka-1 vždy se kontrolují meze nelze vypnout při překročení výjimka ArrayIndexOutOfBoundsException délka pole atribut length int[] a = { 1, 2, 3 ; for (int i=0; i < a.length; i++) {... 36

Pole ~ objekt int[] intarray = new int [100]; String[] strarray = new String [100]; pole je objekt Object o1 = strarray; Object o2 = intarray; // OK // OK ale Object[] oa1 = strarray; // OK Object[] oa2 = intarray; // špatně 37

Pole ~ objekt Object[] oa = new Object [2]; oa[0] = new String("hello"); oa[1] = new String("world"); String[] sa1 = oa; // špatně String[] sa2 = (String[]) oa; // také špatně // lze přeložit, ale chyba při běhu 38

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