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

Podobné dokumenty
Třída jako datový typ. A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické

Třída jako datový typ. BD6B36PJV 01 Fakulta elektrotechnická České vysoké učení technické

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

Paměť počítače. alg2 1

Úvod do programovacích jazyků (Java)

typová konverze typová inference

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

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

Třídy a dědičnost. A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické

Generické programování

Třída jako zdroj funkcí

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

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Programování v jazyku Java základy OOP

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

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

Principy objektově orientovaného programování

Výčtový typ strana 67

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 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/

Základy objektové orientace I. Únor 2010

Seminář Java II p.1/43

Teoretické minimum z PJV

Algoritmizace a programování

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

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

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

Abstraktní třída a 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

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

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

Úvod do programovacích jazyků (Java)

Mnohotvarost (polymorfizmus)

Jazyk C# (seminář 6)

PREPROCESOR POKRAČOVÁNÍ

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

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

Java - řazení objektů

Algoritmizace a programování

Abstraktní datové typy: zásobník

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ;

1. Programování proti rozhraní

KTE / ZPE Informační technologie

Programování v Javě I. Leden 2008

Typický prvek kolekce pro české řazení

Více o konstruktorech a destruktorech

OOPR_05. Případové studie

Programování II. Návrh programu I 2018/19

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

8. přednáška: Soubory a proudy

Seminář Java IV p.1/38

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

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

Algoritmizace a programování

Java Enum Java, zimní semestr ,2017 1

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

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

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

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

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

IAJCE Přednáška č. 7. řízení semaforu na křižovatce = přepínání červená/oranžová/zelená

1. Dědičnost a polymorfismus

Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady

KTE / ZPE Informační technologie

Programování v jazyku Java hierarchie tříd, přetypování, výjimky

Algoritmizace a programování

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

Soubor jako posloupnost bytů

Třídy a dědičnost. BD6B36PJV Fakulta elektrotechnická České vysoké učení technické

Algoritmizace a programování. Terminálový vstup a výstup

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

7. Dynamické datové struktury

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

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0

Jazyk C# (seminář 5)

C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19

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

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

přetížení operátorů (o)

Regulární výrazy. Vzory

Třídy a objekty -příklady

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

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

Sada 1 - PHP. 03. Proměnné, konstanty

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

20. Projekt Domácí mediotéka

Algoritmizace a programování

Maturitní otázky z předmětu PROGRAMOVÁNÍ

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

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

Objektově orientované programování

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

Obsah přednášky. Postup při vytváření objektů. Postup při vytváření objektů. Alokace paměti. Inicializace hodnot atributů

Konstruktory a destruktory

DUM 06 téma: Tvorba makra pomocí VBA

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

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Jazyk C++ I. Šablony 2

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

Transkript:

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd Algoritmizace (Y36ALG), Šumperk - 7. přednáška 1

Třída jako zdroj funkcionality Třída v jazyku Java je programová jednotka tvořená množinou identifikátorů, které mají třídou definovaný význam a které označují prostředky, které lze v téže či jiných třídách využít. Třída je zdrojem metod popisujících řešení problému rozkladem na podproblémy. Uvnitř třídy mohou být deklarovány proměnné, které jsou použitelné jako nelokální proměnné v metodách dané třídy. Algoritmizace (Y36ALG), Šumperk - 7. přednáška 2

Metoda main Povinným základem aplikace, tj. uživatelského programu, je třída, ve které je deklarována spouštěcí metoda přesně takto: public static void main( String[ ] args ) {... Pozn. 1: Metoda main musí být statická, voláme ji dříve než se vytvoří nějaký objekt. Pozn. 2: V jiných jazycích, např. v C++, lze program vytvořit bez použití třídy. Každá třída může obsahovat metodu main, pak se využívá pro: testování funkčnosti objektu, ukázku použití metod objektu. Mnohé třídy nemají deklaraci metody main: např. knihovní třída java.lang.math poskytující matematické funkce Algoritmizace (Y36ALG), Šumperk - 7. přednáška 3

Třída jako datový typ Třída je popisem strukturovaného datového typu, tzn. specifikuje datové prvky potřebné pro objekt (proměnné a konstanty; je v nich uložen stav objektu) a množinu metod pro práci s datovými prvky (manipulují s proměnnými, čímž mění stav objektu). Pozn.: Třída sama o sobě nemá přidělenu žádnou paměť. Nedá sepracovat ani s proměnnými ani s metodami (pokud nejsou deklarovány jako static). Objekt (nazývá se též instance třídy) je datový prvek, který je vytvořen podle vzoru třídy. Podle jednoho vzoru třídy lze vytvořit libovolné množství objektů (instancí). V jazyku Java lze objekty vytvářet pouze dynamicky pomocí operátoru new a přistupovat k nim pomocí referenčních proměnných. Algoritmizace (Y36ALG), Šumperk - 7. přednáška 4

Třída Třída je návrhový vzor, který umožňuje definovat vlastnosti a chování vlastnosti atributy (proměnné a konstanty) chování metody (funkce a procedury) Příklad: Třída (šablona) obdélník atributy (vlastnosti): šířka, výška, barva, pozice na obrazovce, metody (chování, reakce na požadavky okolí) nastavení barvy, výpočet obvodu, obsahu, posunutí, Algoritmizace (Y36ALG), Šumperk - 7. přednáška 5

Obdélník - příklad definice třídy public class Obdelnik { Color barva; int sirka, vyska; Point pozice; Jméno třídy začíná velkým písmenem Atributy objektu - definují typ a jména vlastností int vypoctiobvod(){ return 2*(sirka+vyska); int vypoctiobsah(){ return sirka*vyska; void nastavbarvu(color c){ barva = c; Metody objektu - definují chování, schopnosti, reakce Algoritmizace (Y36ALG), Šumperk - 7. přednáška 6

Obdélník - příklad definice třídy public class Obdelnik { Color barva; int sirka, vyska; Point pozice; Jméno třídy začíná velkým písmenem Atributy objektu - definují typ a jména vlastností int obvod(){ return 2*(sirka+vyska); int obsah(){ return sirka*vyska; void nastavbarvu(color c){ barva = c; Metody objektu - definují chování, schopnosti, reakce Metody mohou používat atributy - proměnné. Neobsahují-li klíčové slovo static, pracují s konkrétním objektem. Algoritmizace (Y36ALG), Šumperk - 7. přednáška 7

Konstruktor Speciální metoda - konstruktor třídy nastavuje vlastnosti objektu prostřednictvím parametrů (ale může být i bez parametrů), neosahuje návratový typ - nic nevrací, vytváří objekt, jméno je totožné se jménem třídy (jediná metoda začínající velkým písmenem), tato metoda vytvoří objekt, public class Obdelnik {... Obdelnik(int s, int v){ sirka = s; vyska = v; volá se pomocí operátoru new. malyobdelnik = new Obdelnik(2,5); nezapomeňte na deklaraci referenční proměnnémalyobdelnik. Algoritmizace (Y36ALG), Šumperk - 7. přednáška 8

Třída versus objekt Třída návrhový vzor, šablona, reprezentovaná zápisem v Javě, existuje i mimo program. Příklad: třída: Obdelnik Objekt jeden konkrétní výrobek vyrobený podle třídy, je vytvořen za běhu programu, žije během života programu (lze jej uložit na disk, není reprezentován kódem programu. Obdelnik maly = new Obdelnik(1,5); Obdelnik velky = new Obdelnik(10,5); Algoritmizace (Y36ALG), Šumperk - 7. přednáška 9

Přetížení konstruktorů public class Complex { double re, im; Complex(){ re = 0.0; im = 0.0; Complex(double re){ this.re = re; this.im = 0.0; Complex(double re, double im){ this.re = re; this.im = im; re... členská globální proměnná třídy re... lokální proměnná metody Operátor this je implicitní parametr každé metody, odkazující na tuto instanci. Bez něj by lokální proměnná re, reprezentovaná form. parametrem metody, zastínila nelokální proměnnou re, deklarovanou pro třídu. Algoritmizace (Y36ALG), Šumperk - 7. přednáška 10

Přetížení konstruktorů public class Complex { double re, im; Complex(){ re = 0.0; im = 0.0; Complex(double re){ this.re = re; this.im = 0.0; Complex(double re, double im){ this.re = re; this.im = im; Co vytvoří tyto příkazy? 1. Complex c1 = new Complex(); 2. Complex c2 = new Complex(1); 3. Complex c3 = new Complex(1,1); Algoritmizace (Y36ALG), Šumperk - 7. přednáška 11

Přetížení konstruktorů: Obdelnik import java.awt.color; import java.awt.point; public class Obdelnik { Color barva; double sirka, vyska; Point pozice; // Konstruktory Obdelnik(){ sirka = vyska = 0; Obdelnik(double a){ sirka = vyska = a; Obdelnik(double sirka, double vyska){ this.sirka = sirka; this.vyska = vyska; Obdelnik(Obdelnik o){ sirka = o.sirka; // parametrem může být i jiný objekt vyska = o.vyska;... Algoritmizace (Y36ALG), Šumperk - 7. přednáška 12

Přetížení konstruktorů II Budeme chtít konstruktor, který u vytvářeného obdélníku specifikuje jeho barvu. public class Obdelnik {... Stejný kód. Obdelnik(int s, int v){ Správné by bylo použití jednoho sirka = s; místa pro tento kód. vyska = v; Jednodušší opravy. Obdelnik(int s, int v, Color c){ sirka = s; vyska = v; barva = c; Algoritmizace (Y36ALG), Šumperk - 7. přednáška 13

Vzájemné volání konstruktorů Vytvoříme jeden univerzální konstruktor a ostatní jej budou volat. public class Obdelnik {... Obdelnik(int s, int v){ this(s,v,color.black); nastavení implicitní hodnoty volání konstruktoru téže třídy Obdelnik(int s, int v, Color c){ sirka = s; vyska = v; barva = c; Algoritmizace (Y36ALG), Šumperk - 7. přednáška 14

Třída pro testování obdélníka public class Obdelnik {... public static void main(string[] args) { Obdelnik maly; maly = new Obdelnik(1,5); Obdelnik velky = new Obdelnik(10,5); System.out.println( Obvod maleho je + maly.obvod()); Není třeba předávat šířku a výšku, každá instance zná své rozměry!! maly 2*(sirka * vyska) = 2 * (1 + 5) = 12 velky Algoritmizace (Y36ALG), Šumperk - 7. přednáška 15

Statické a instanční metody Pod pojmem metoda se skrývají dva druhy metod: instanční metody (metody objektů), statické metody (metody třídy). Oba druhy mohou mít parametry a mohou vracet výsledek. Instanční metoda označuje operaci nad objektem čili instancí dané třídy. Je dostupná jen přes referenci na objekt. Voláme ji tedy takto: referenčníproměnná.jménometody( seznam argumentů ) např. maly.vypoctiobvod() vidí statické i nestatické atributy třídy. Zkráceněříkáme, že metoda vypoctiobvod() se volá na objekt maly. Statická metoda je dostupná pomocí jména třídy, aniž je nutno vytvářet nějaký objekt. Voláme ji tedy takto: JménoTřídy.jménoMetody( seznam argumentů ) a také referenčníproměnná.jménometody( seznam argumentů ) Algoritmizace (Y36ALG), Šumperk - 7. přednáška 16

Statické metody public class Obdelnik { int sirka. static int vratpocetrohu(){ // sirka = 6; CHYBA, statická metoda nevidí instanční proměnné! return 4; public class ObdelnikTest { public static void main(string[] args) { Obdelnik maly = new Obdelnik(1,5); System.out.println("Pocet rohu obdelnika je " + Obdelnik.vratPocetRohu()); System.out.println("Maly obdelnik ma " + maly.vratpocetrohu() + " rohu."); vypíše 4 4 Algoritmizace (Y36ALG), Šumperk - 7. přednáška 17

Statické atributy a metody Některé třídy obsahují pouze statické atributy a statické metody. Knihovna matematických funkcí třída java.lang.math obsahuje statické proměnné (zde konstanty typu double) PI a E. Statické metody reprezentující matematické funkce: sin, cos, tan, goniometrické funkce abs absolutní hodnota min, max log logaritmus sqrt odmocnina pow(double a, double b) a b random vrací náhodné double číslo z intervalu 0;1) round zaokrouhlení a mnohé další Algoritmizace (Y36ALG), Šumperk - 7. přednáška 18

Standardní metody třídy Object Každá třída (kromě jediné) v Javě je potomkem třídy Object, která implementuje několik základních metod. Základní metody třídy Object jsou tostring public String tostring(){ return getclass().getname() + "@" + Integer.toHexString(hashCode()); Výsledkem volání x.tostring( ) je řetěz znakové reprezentace objektu x. Metodou je zavedena implicitní typová konverze z typu objektu x na řetězec, použitá např. při výpisu objektu. a equals public boolean equals(object obj) { return (this == obj); Vrací true pouze pokud se jedná o stejné objekty; neporovnává položky!!! Algoritmizace (Y36ALG), Šumperk - 7. přednáška 19

Standardní metoda tostring public class ObdelnikTest { public static void main(string[] args) { Obdelnik prvni = new Obdelnik(5,7); System.out.println("Prvni: " + prvni); Vypíše: Prvni: alg7.obdelnik@11b86e7 Algoritmizace (Y36ALG), Šumperk - 7. přednáška 20

Standardní metoda equals public class ObdelnikTest { public static void main(string[] args) { Obdelnik prvni = new Obdelnik(5,7); Obdelnik druhy = new Obdelnik(5,7); System.out.println("Stejne? " + (prvni==druhy)); System.out.println("Stejne? " + prvni.equals(druhy)); Vypíše Stejne? false Stejne? false prvni druhy Algoritmizace (Y36ALG), Šumperk - 7. přednáška 21

Zastínění metod předka Zastínění (předefinování) metod tostring a equals. public String tostring(){ return ("Obdelnik: " + sirka + " x " + vyska); public boolean equals(object o){ // porovnam jen s obdelniky if(!(o instanceof Obdelnik))return false; Obdelnik obd = (Obdelnik) o; // Proč přetypování? return (sirka == obd.sirka)&&(obd.vyska==vyska); Pomocí operátoru instanceof se zjišťuje, zda je referenční proměnná typu nějaké třídy. Algoritmizace (Y36ALG), Šumperk - 7. přednáška 22

Více referencí na jeden objekt, smetí public class ObdelnikTest { public static void main(string[] args) { Obdelnik prvni = new Obdelnik(5,7); Obdelnik druhy = new Obdelnik(5,2); druhy = prvni; System.out.println("Stejne? " + (prvni==druhy)); System.out.println("Stejne? " + prvni.equals(druhy)); Vypíše true true prvni 5x7 Algoritmizace (Y36ALG), Šumperk - 7. přednáška 23

Více referencí na jeden objekt, smetí public class ObdelnikTest { public static void main(string[] args) { Obdelnik prvni = new Obdelnik(5,7); Obdelnik druhy = new Obdelnik(5,2); druhy = prvni; System.out.println("Stejne? " + (prvni==druhy)); System.out.println("Stejne? " + prvni.equals(druhy)); Vypíše true true prvni 5x7 druhy 5x2 Algoritmizace (Y36ALG), Šumperk - 7. přednáška 24

Více referencí na jeden objekt, smetí public class ObdelnikTest { public static void main(string[] args) { Obdelnik prvni = new Obdelnik(5,7); Obdelnik druhy = new Obdelnik(5,2); druhy = prvni; System.out.println("Stejne? " + (prvni==druhy)); System.out.println("Stejne? " + prvni.equals(druhy)); Vypíše true true prvni druhy 5x7 5x2 Smetí - obd. 5x2 se stal nepřístupným. Paměť přidělená nepřístupným objektům se uvolňuje automaticky (sbírání smetí, garbage collection) Algoritmizace (Y36ALG), Šumperk - 7. přednáška 25