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

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

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

Třída jako zdroj funkcí

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

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

Základy objektové orientace I. Únor 2010

Programování v jazyku Java základy OOP

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

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

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

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

Seminář Java II p.1/43

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

Generické programování

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

Abstraktní třída a rozhraní

Objektové programování

Objektově orientované programování

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

Teoretické minimum z PJV

Mnohotvarost (polymorfizmus)

typová konverze typová inference

Výčtový typ strana 67

1. Dědičnost a polymorfismus

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

Principy objektově orientovaného programování

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

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/

Algoritmizace a programování

Úvod do programovacích jazyků (Java)

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

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

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

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

1. Programování proti rozhraní

Dědění, polymorfismus

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

PREPROCESOR POKRAČOVÁNÍ

Algoritmizace a programování

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

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

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

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

Jazyk C# (seminář 6)

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.

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

Programování v Javě I. Leden 2008

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

KTE / ZPE Informační technologie

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

7.5 Diagram tříd pokročilé techniky

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

Algoritmizace a programování

KTE / ZPE Informační technologie

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

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

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

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

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

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 )/ ;

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

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

Řídicí struktury. alg3 1

Algoritmizace a programování

"Václav Klaus". public class Clovek { protected String jmeno; protected int roknarozeni; public Clovek(String j, int rn) {

Objektově orientované programování

Zápis programu v jazyce C#

7.5 Diagram tříd pokročilé techniky

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

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

Programování v jazyce C a C++

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

Jazyk C# (seminář 3)

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Abstraktní třídy, polymorfní struktury

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

Konstruktory a destruktory

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

Objektově orientované programování

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

Seminář Java IV p.1/38

Soubor jako posloupnost bytů

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

Více o konstruktorech a destruktorech

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

20. Projekt Domácí mediotéka

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

Objektově orientované programování v jazyce Python

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

Úvod. Jiří Vokřínek. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 1 B0B36PJV Programování v JAVA

TÉMATICKÝ OKRUH Softwarové inženýrství

Jazyk C++ II. Šablony a implementace

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

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

Úvod. Jiří Vokřínek. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 1 B0B36PJV Programování v JAVA

Informace o předmětu. Úvod. Cíle předmětu. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Informace o předmětu

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

První kapitola úvod do problematiky

Transkript:

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

Objektový přístup programování Modelování problému jako systému spolupracujících tříd Třída modeluje jeden koncept Třídy umožní generování instancí, objektů příslušné třídy Jednotlivé objekty spolu spolupracují, posílají si zprávy, Třída je vzorem pro strukturu a vlastnosti generovaných objektů Každý objekt je charakteristický specifickými hodnotami svých atributů a společnými vlastnostmi třídy 2

Třídy a objekty Věci okolo nás lze hierarchizovat do tříd (konceptů). Každá třída je reprezentována svými prvky, objekty dané třídy Každá třída je charakterizována svými vlastnostmi, svými funkčními možnostmi a svými parametry Příklad: Třída automobil Funční možnosti automobilu metody pro ovládání Parametry charakteristická data 3

definice Třída a objekty - příklad definice METODY: zrychlit, brzdit, zatočit, zastavit; TŘÍDA: AUTO DATA:jmeno,barva, maxrychlost, prumspotreba, klimatizace objekt: autíčko objekt: beruška objekt: závodní objekt: auťák instance, objekty 4

Třída a objekty Třída jako šablona pro generování konkrétních instancí třídy, tzv. objektů data, atributy >>> určují stav objektů metody, funkce >>> určují schopnosti objektů Objekt instance třídy Jednotlivé instance třídy (objekty) mají stejné metody, ale nacházejí se v různých stavech Stav objektu je určen hodnotami instančních, členských proměnných Schopnosti objektu jsou dány instančními metodami V jazyku Java lze objekty (instance tříd) vytvářet pouze dynamicky pomocí operátoru new a přistupovat k nim pomocí referenčních proměnných (podobně jako u pole) referenční proměnná objekt, instance třídy new 5

Třída řešení problému Třída v jazyku Java je programová jednotka tvořená množinou identifikátorů, které mají třídou definovaný význam: data proměnné, konstanty (členské proměnné, datové složky, atributy) metody pracovně funkce a procedury Systém takto koncipovaných tříd je řešením problému Třída je šablona - vzor pro vytváření jednotlivých objektů (instancí) 6

Třída Auto pocetaut barva jmeno prumspotreba klimatizace Auto() start() stop() zrychli() zatoc() setrychlost() getrychlost() getprumer() třídní proměnná atributy, data konstruktor metody, vlastnosti 7

Třída Auto public class Auto { String barva;.. data public Auto(){ konstruktory public void startuj(){ metody konstruktory - speciální metody pro generování instancí tříd, konkrétních objektů 8

Třída Auto public class Auto { static int pocetaut = 0;// proměnná třídy String barva; data public Auto(String b, String j, double ps, boolean k){ barva = b; konstruktor public void startuj(){ public void zastav(){ public double getprumspotreba() {. metody, settery, gettery public void setprumspotreba(double ps) { public void zatoc(){ 9

AutoTest Třída pro testování třídy Auto, obsahuje main public class AutoTest { public static void main(string[] args) { Auto a = new Auto("modrá", "autíčko", 6, true); a.startuj(); Auto b = new Auto("žlutá", "závodní", 66, false); b.startuj(); b.setprumspotreba(4); System.out.println("Max. spotreba " + b.jmeno); System.out.println(" je " + b.getspotreba(66)); Auto c = new Auto("červená", "beruška", 66, false); c.startuj(); a.zrychli(); b.zrychli(); Auto d = new Auto("stříbrná", "auťák", 66, false); d.startuj(); a.zastav(); c.zatoc(); c.zastav(); 10

Startuje auto autíčko Jede 1 aut Startuje auto závodní Jede 2 aut Max. spotreba závodní je 264.0 Startuje auto beruška Jede 3 aut Auto: autíčko zrychluje Auto: závodní zrychluje Startuje auto auťák Jede 4 aut Auto: autíčko zastavuje Jede 3 aut Auto: beruška zatáčí Auto: beruška zastavuje Jede 2 aut Testování třídy Auto 11

Objekty, shrnutí Objekt - datový prvek, instance třídy, dynamicky vytvořen podle vzoru - třídy Objekt je strukturován tzn. skládá se z jednotlivých položek tzv. atributů Třída bez vytvořené instance (objektu) může pracovat pouze staticky (mohou být použity jen její statické metody či proměnné procedurální přístup), instance musí být vytvořena pomocí operátoru new Existují dva druhy neprimitivních datových typů (referencované): objekty ~ heterogenní objekt skládající se z položek různého typu pole ~ homogenní objekt skládající se z položek stejného typu Položky objektu označujeme též jako členské proměnné (member variables) datové složky atributy objektu 12

Pojmy objektového programování Základní vlastností objektového přístupu Zapouzdření Dědičnost Polymorfizmus Základní pojmy objektového přístupu Třída Objekt Hierarchie tříd Kompozice objektů 13

Zapouzdření Metody Data Metody 14 14

Principy objektového programování Realita je modelována koncepty, třídami Třídy mohou generovat objekty, instance třídy, konstruktorem Objekty jsou charakterizovány svými vlastnostmi, individuálními hodnotami a společnými metodami Chod programu je tvořen vykonáváním metod jednotlivých objektů (zasílání zpráv) Metody jsou určeny svým rozhraním, mohou být přetíženy Třídy mohou vytvářet hierarchie, v Javě pouze jedna nadřízená třída, podřízená třída specializace nadřízené Třídy mohou být tvořeny i kompozicí jiných tříd Vlastnosti a metody objektů jsou zapouzdřené podle potřeby Metody objektů, použitelné na různé objekty, pracují podle aktuálního objektu princip polymorfismu Polymorfismus lze implementovat v Javě pomocí abstract class (hierarchie tříd) nebo interface (vnucené metody) 15

Objektově orientovaný styl Hlavní zásady: Při rozkladu problému specifikujeme nové datové typy (datové abstrakce), tzn. specifikujeme operace, které se budou s daty těchto typů provádět Pro realizaci datových abstrakcí použijeme objekty a třídy Připomeňme si charakteristiku objektu: datové položky a metody objektu jsou dány typem objektu - třídou objekt se může nacházet v různých stavech daných hodnotami datových položek (atributů) objektu chování objektu je dáno metodami (operacemi), které jsou pro něj definovány 16

Třídy a objekty Třída popisující nový datový typ obsahuje: deklarace položek, ze kterých se skládají objekty daného typu deklaraci konstruktoru, kterým se inicializují vytvořené objekty deklarace metod, které realizují operace s objekty Položky se obvykle deklarují tak, aby nebyly z vnějšku objektu přístupné: private typ jméno; Konstruktor je inicializační operace, která má jméno třídy a nevrací žádnou hodnotu; schéma deklarace konstruktoru třídy T (konstruktor by měl být z vnějšku přístupný!! ): public T(specifikace parametrů) { tělo konstruktoru Ve třídě může být deklarováno několik konstruktorů, které se liší počtem a/nebo typy parametrů (přetěžování) Obvyklé schéma deklarace metody (přístupnost metody je dána logikou problému): public typ jméno(specifikace parametrů) { tělo metody 17

Čítač jako datový typ Čítač zavedeme jako datový typ s operacemi zvetsit, zmensit, nastavit a hodnota a s datovými položkami hodn a pochodn Grafické vyjádření: Citac hodn název typu pochodn datové položky zvetsit() zmensit() operace (metody) nastavit() hodnota() Poznámka: hodnota položky pochodn bude stanovena při vytvoření objektu 18

public class Citac { private int hodn; private int pochodn; Třída Citac public Citac(int ph) { pochodn = ph; hodn = ph; public void zvetsit() {hodn++; public void zmensit() {hodn--; public void nastavit() {hodn = pochodn; public int hodnota() {return hodn; 19

Použití čítače jako objektu public static void main(string[] args) { int volba; Citac citac = new Citac(0); // Citac citac1 = new Citac(3); do { System.out.println("Hodnota = "+citac.hodnota()); volba = menu(); switch (volba) { case 1: citac.zvetsit(); break; case 2: citac.zmensit(); break; case 3: citac.nastavit(); break; // case 4: System.out.println("nic"); break; while (volba>0); System.out.println("Konec"); 20

Třída a objekty příklad Příklad obdélník - popisuje objekty reálného světa 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í, 21

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 setbarvu(color c){ barva = c; Metody objektu - definují chování, schopnosti, reakce 22

Konstruktor třídy - speciální metoda Obdelnik(int s, int v){ sirka = s; vyska = v; Konstruktor, vlastnosti: vytvoří objekt případně nastaví vlastnosti objektu Konstruktor jméno konstruktoru je totožné se jménem třídy (jediná metoda začínající velkým písmenem) volání pomocí operátoru new, např. malyobdelnik = new Obdelnik(2,5); neobsahuje návratový typ - nic nevrací, vytváří objekt není-li konstruktor vytvořen, je vygenerován implicitní konstruktor s prázdným seznamem parametrů je-li konstruktor deklarován, implicitní zaniká 23

Přetěžování konstruktorů Konstruktory jsou metody, které vytvoří objekt a nastaví jeho počáteční hodnoty. Příklad Požadujeme 3 typy konstruktorů pro Obdelnik: bez parametrů - vytvoří obdélník o stranách 0x0, 1 parametr - vytvoří čtverec, 2 parametry - šířka x výška public class Obdelnik { Obdelnik(){ sirka = vyska =0; Obdelnik(int a){ sirka = vyska = a; Obdelnik(int s, int v){ sirka = s; vyska = v; 24

Přetěžování konstruktorů II Konstruktor, který u vytvářeného obdélníku specifikuje jeho barvu. public class Obdelnik { Obdelnik(int s, int v){ sirka = s; vyska = v; Obdelnik(int s, int v, Color c){ sirka = s; vyska = v; barva = c; Stejný kód, správné by bylo použití jednoho místa pro tento kód - jednodušší opravy. 25

Vzájemné volání konstruktorů, this Vytvoříme jedem univerzální konstruktor a ostatní jej budou volat public class Obdelnik { Obdelnik(int s, int v, Color c){ sirka = s; vyska = v; barva = c; Obdelnik(int s, int v){ this(s,v,color.black); Obdelnik(){ this(0,0,color.black); nastavení implicitní hodnoty volání konstruktoru téže třídy 26

Operátor this Každý objekt má implicitní operátor this, který obsahuje odkaz na "svou" instanci Hodnotou operátoru this je odkaz na objekt pro který byla metoda zavolána (implicitní parametr odkazu na objekt) Umožňuje přístup k vlastním instančním proměnným v instančních metodách Používá se v přetížených konstruktorech public class Bod { //fiktivně platí Bod this=new Bod(); double x, y; //instanční proměnné public Bod(double x, double y) { this.x = x; this.y = y; public Bod(double y) { this(0,y); 27

Operátor this Podobně funguje operátor this i pro metody: pokud je instanční metoda volána z jiné instanční metody té samé třídy, potom se volá pomocí operátoru this (operátor se může vynechat) pokud se volá metoda z jiného kontextu, uvádí se před jejím jménem přístup k příslušné instanci (tečka notace) např. předané parametrem Poznámka: ve statické metodě nelze použít this, není jasné k jaké třídě by se vztahoval! 28

Vlastnosti konstruktorů, další vlastnosti Jméno konstruktoru je totožné se jménem třídy Konstruktor nemá návratovou hodnotu (ani void) Předčasně lze ukončit činnost konstruktoru return Konstruktor má parametrovou část jako metoda - může mít libovolný počet a typ parametrů V těle konstruktoru použít operátor this, odkaz na příslušný konstruktor s týmž počtem, pořadím a typem parametrů - nepíše se jméno třídy Konstruktor je zpravidla vždy public (!) //třída java.lang.math jej má private proč? 29

Instanční metody Operace s objekty se realizují pomocí instančních metod Metody mohou mít parametry a mohou vracet výsledek Volání, tj. užití, metody m na objekt referencovaný proměnnou p má tvar: p.m(seznam argumentů) Zkráceně říkáme, že metoda m se volá na objekt p 30

Instanční metody - příklad public class Obdelnik { Color barva; int sirka, vyska; Point pozice;. int vypoctiobvod() { return 2 * (sirka + vyska); int vypoctiobsah() { return sirka * vyska; void setsirku(int s) { barva = c; int getsirku() { return sirka; public String tostring() { return "Obdelnik: " + sirka + " x " + vyska; 31

Instanční metody - příklad public class ObdelnikTest { public static void main(string[] args) { Obdelnik maly = new Obdelnik(1, 5); Obdelnik velky = new Obdelnik(10, 5); System.out.println("Obvod maleho je " + maly.vypoctiobvod()); System.out.println("Obvod velkeho je " +velky.vypoctiobvod()); System.out.println("Sirka velkeho = " + velky.getsirku()); velky.setsirka(0); System.out.println("Sirka velkeho = " + velky.getsirku()); System.out.println("Obsah maleho je " + maly.vypoctiobsah()); System.out.println("Obsah velkeho je " +velky.vypoctiobsah()); maly velky Není třeba předávat šířku a výšku, každá instance (objekt) zná své rozměry!! 32

Reprezentace objektu - metoda tostring String tostring() je metodou každého objektu, nepřekreje-li se, pak jméno třídy + hash kód např. prednaska.obdelnik@da5b výsledkem volání maly.tostring() je řetězec tvořící znakovou reprezentaci obdélníka maly (metodou je zavedena implicitní typová konverze z typu Obdelnik na typ String), často se překrývá! Příklad public String tostring() { return "Obdelnik: " + sirka + " x " + vyska; System.out.println("Velky je " + velky); System.out.println("Maly je " + maly); 33

Příklad: třída Complex Příkladem třídy jako datového typu je třída Complex hodnotami typu jsou komplexní čísla tvořená dvojicemi čísel typu double (reálná a imaginární část) množinu operací tvoří obvyklé operace nad komplexními čísly (absolutní hodnota, sčítání, odčítání, násobení a dělení) 34

Třída Complex public class Complex { // datové složky double re=0; double im=0; // konstruktory public Complex() { public Complex(double r) {re=r; public Complex(double r, double i) {re=r; im=i; // metody (operace) public double getabs() { return Math.sqrt(re*re+im*im); public Complex prictik(complex c) { return new Complex(re+c.re, im+c.im); public Complex odemneodecti(complex c) { return new Complex(re-c.re, im-c.im); public String tostring() { return "["+re+", "+im+"]"; 35

Instanční metody - pokračování Příklady metod definovaných třídou Complex pro objekty typu Complex: double abs() výsledkem volání c.abs() je absolutní hodnota komplexního čísla c public Complex prictik(complex c) { výsledkem volání c1.prictik(c2) je reference na nový objekt typu Complex, jehož hodnotou je součet komplexních čísel c1 a c2 A0B36PR1-08 36

Třída Complex public static void main(string[] args) { Complex c1=new Complex(3,4); // konstrukce objektu Complex c2=new Complex(1,1); // konstrukce objektu System.out.println(new Complex()); System.out.println(c1); System.out.println(c1.getAbs()); // c1 System.out.println(c1.prictiK(c2)); // c1 + c2 [0.0, 0.0] [3.0, 4.0] 5.0 [4.0, 5.0] 37

Struktura objektu, přístup ke položkám Hodnota objektu je strukturovaná, tzn. skládá se dílčích hodnot, které mohou být obecně různého typu (heterogenní datová struktura na rozdíl od pole) Objekt je tedy abstrakcí paměťového místa skládajícího se z částí, ve kterých jsou uloženy dílčí hodnoty - nazývají se položkami objektu (složkami, atributy, instančními proměnnými, fields, attributes) Položky objektu jsou označeny jmény, která mohou (ale nemusí) být třídou zveřejněna, zásadně se nezveřejňují 38

Zapouzdření Metody Data Metody Viz PR2 39

Zapouzdření, settery, gettery, accessory Accessory = settery + gettery Public metody, které umožňují přístup a nastavení private či protected atributů objektů public class GrO{... private int pozicex; public void setpozicex(int newx){ if(newx>0)pozicex = newx; public int getpozicex(){... return pozicex; setter jméno = set + jméno atributu atribut nesmí být public Proč? kontroluje přípustnost hodnot, getter jméno = get + jméno atributu vrací hodnotu atributu 40

Struktura objektu, přístup ke složkám Příklad: objekty (instance) třídy Complex jsou tvořeny dvěma položkami typu double, jejichž jména jsou re a im a třída tato jména nezveřejňuje Veřejnou položku se jménem f objektu, který je referencován proměnnou p, lze označit zápisem p.f Příklad: objektu vytvořenému deklarací private double re=0; private double im=0; Complex c = new Complex(); public void setre(double rep){re = rep; public void setim(double imp){im = imp; double getim(){return this.im; double getre(){return this.re; c.setre(1);// c.re = 1; c.setim(2);// c.im = 2; 41

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)); první smetí, Paměť přidělená nepřístupným objektům se uvolňuje automaticky (sbírání smetí, garbage collection) druhý 42

Více referencí na jeden objekt Objekt může být referencován i více referencemi Jestliže hodnotu referenční proměnné typu T přiřadíme jiné referenční proměnné téhož typu, pak obě proměnné referencují tentýž objekt Příklad: Complex c1 = new Complex(); Complex c2 = c1; c1.im = 1; System.out.println(c2.im); // vypíše 1 c1 c2 0 10 43

Sbírání smetí Objekt se stane smetím, není-li přístupný pomocí žádné reference Complex c1 = new Complex(1,1); Complex c2 = new Complex(2,2); c1 1 1 c2 = c2.plus(c1); // vznik nového objektu 2 2 c1 1 1 c2 2 2 3 3 Paměť přidělená nepřístupným objektům se uvolňuje automaticky (sbírání smetí, garbage collection) c2 44

Role funkce main Třída nemusí obsahovat deklaraci hlavní funkce main třída bez hlavní funkce main nepředepisuje program, který lze spustit, ale zavádí prostředky, které lze v jiných třídách využít knihovnu Příkladem je: knihovní třída Math poskytující matematické funkce třída Scanner poskytující jednoduché funkce pro vstup a výstup třída Auto Metoda main musí být statická, voláme ji dříve než se vytvoří nějaký objekt Třída, která obsahuje metodu main se využívá pro: spouštění programu testování funkčnosti objektu, ukázku použití metod objektu Poznámka: Třída s hlavní funkcí main tvořící základ programu je specialitou jazyka Java v jiných jazycích, např. v C++, lze program vytvořit bez použití třídy Význam parametru args v public static void main( String[ ] args ) {... 45

Statické metody public class Obdelnik { int sirka. static int vratpocetrohu(){ // sirka = 6; statická metoda nevidí instanční proměnné return 4; Instanční metody mají přístup ke statickým strukturám kdykoli 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."); Je to možné, ale nelogické!!! 46

Statické versus instanční metody Třída může definovat dva druhy metod: statické metody metody třídy, procedury a funkce instanční metody metody objektů Metody obou druhů mohou mít parametry a mohou vracet výsledek nějakého typu Statická metoda označuje operaci (dílčí algoritmus, řešení dílčího podproblému), jejíž vyvolání (provedení) obsahuje jméno třídy, jméno metody a seznam skutečných parametrů jméno_třídy.jméno_metody(seznam skutečných parametrů) (lze využít i volání pomocí referenční prom., ale není doporučeno) Statickým metodám třídy odpovídají v jiných jazycích procedury (nevracejí žádnou hodnotu) a funkce (vracejí hodnotu nějakého typu) Instanční metoda označuje operaci nad objektem (instancí (!)) dané třídy, jejíž vyvolání obsahuje referenční proměnnou objektu, jméno metody a seznam skutečných parametrů referenční_proměnná.jméno_metody(seznam skut. parametrů) Statickým metodám třídy budeme i nadále říkat procedury a funkce Instančním metodám budeme zkráceně říkat metody 47

Statické atributy a metody Některé třídy obsahují pouze statické atributy a statické metody, tak to bylo dosud!!!! Knihovna matematických funkcí - třída java.lang.math obsahuje statické proměnné (zde konstanty typu double) PI a E Pozn: Příklad je i třída Complex 48

Statické atributy a metody - Math statické metody reprezentující matematické funkce: double x = Math.sin(0,5); sin, cos, tan, goniometrické funkce abs absolutní hodnota min, max log logaritmus sqrt odmocnina a 1 3 3 a pow(double a, double b) a b random vrací náhodné double číslo z intervalu <0;1) round zaokrouhlení a mnohé další 49

50

Balíky (package) a přístupová práva Platí pro proměnné, konstanty, metody, třídy: Private Autorizovaný přístup, zapouzdření Přístup jen na jeden balík Protected Z libovolné třídy téhož balíku a z odvozené třídy, public Porušený autorizovaný přístup, může se ke všemu 51

Balíky (package) a přístupová práva Specifikátor Táž třída Jiná třída téhož balíku V podtřítě téhož balíku V podtřídě jiného balíku V jiné třídě jiného baliku private Ano Ano Ano Ano protected Ano Ano Ano ano public Ano Ano Ano Ano Ano 52