Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
Druhá přednáška Datové typy a operátory Zapouzdření Pojem rozhraní
4IT101 Druhá přednáška Datové typy a operátory Zapouzdření Pojem rozhraní
2
Opakování a dokončení minulé přednášky
Základní vlastnosti objektů Datové atributy Metody deklarace metod a konstruktorů volání metod a konstruktorů
3
Třídy a jejich instance
Objekty s podobnými vlastnostmi sdružujeme do tříd Příslušnost objektu do třídy vyjadřujeme tvrzením, že objekt je instancí dané třídy (termíny objekt a instance jsou synonyma) Třída je zvláštní druh objektu, který umí na požádání vytvořit svoji instanci (třída je „forma“ na vytváření svých instancí) Třída = zobecněný klasický datový typ Vedle množiny hodnot definuje i množinu přípustných operací nad těmito hodnotami Jinými slovy: Třída definuje vlastnosti a schopnosti svých instancí
4
Základní pilíře OOP Zapouzdření (kód je pohromadě se zpracovávanými daty) Skrývání implementace (nikdo nemá mít šanci zjistit, jak je program implementován) Zvýšení bezpečnosti a robustnosti (nemožnost nekorektního použití) Usnadnění budoucích modifikací Identita Každá zpráva musí mít svého adresáta, nelze ji poslat „do prostoru“ Objekt sám rozhodne, jak na zprávu zareaguje polymorfizmus
5
Základní pilíře OOP Skládání Používání návrhových vzorů
Objekt může obsahovat jiné objekty Dědičnost – speciální případ, při němž s objektem převezmu i jeho rozhraní Omezuje duplicity v kódu Nebezpečí špatného použití (narušuje zapouzdření) Používání návrhových vzorů Proč bych měl vymýšlet něco, co už je vymyšlené, a je to vymyšlené dobře
6
Deklarace třídy Tělo třídy public class Pes { private String rasa;
private String jmeno; } Hlavička třídy, musí obsahovat klíčové slovo class a identifikátor (jméno) deklarace datových atributů dále jsou deklarovány konstruktory a metody
7
Klíčové slovo pro vrácení výsledku a ukončení metody
Deklarace metody Jméno metody Typ návratové hodnoty Parametry metody Modifikátor přístupu public String getRasa ( ) { return rasa; } Klíčové slovo pro vrácení výsledku a ukončení metody V kódu metody se musí pomocí klíčového slova return vrátit hodnota typu návratové hodnoty uvedené v deklaraci metody. return vrátí hodnotu a ukončí metodu. Vracená hodnota 7
8
Deklarace metody public void zmenVelikost (int novyPrumer) { vymaz();
Jméno metody public void zmenVelikost (int novyPrumer) { vymaz(); prumer = novyPrumer; kresli(); } Typ void určuje, že metoda nic nevrací formální parametr metody Nemusí obsahovat return, pak končí provedením všech příkazů. Pokud obsahuje return, tak jen prázdný. 8
9
Deklarace konstruktoru
public class Pes { private String rasa; private String jmeno; public Pes (String rasa, String jmeno) { this.rasa = rasa; this.jmeno = jmeno; } modifikátor přístupu Formální parametry (slouží k inicializaci dat. atributů) Název třídy/typ návratové hodnoty
10
Konstruktor Konstruktor můžeme vnímat jako metodu, která nemá název a název třídy v deklaraci označuje typ návratové hodnoty nebo jako metodu, která se jmenuje stejně jako třída, jejíž instanci vytváří a typ návratové hodnoty se neuvádí Je to jenom otázka interpretace částí definice V debugeru a při vypisování výjimek je označován <init>
11
Odkaz na tuto instanci (this)
public class Kruh { private int prumer; private int xPozice; private int yPozice; private String barva; /* * Vytvoreni noveho kruhu na defaultni pozici (20,60) s defaultni barvou (modra) */ public Kruh() prumer = 30; xPozice = 20; yPozice = 60; barva = "modra"; kresli(); } this.prumer = 30; this.xPozice = 20; this.zPozice = 60; this.barva = "modra"; this.kresli(); 11
12
Odkaz this public class Pes { private String rasa;
private String jmeno; public Pes (String rasa, String jmeno) { this.rasa = rasa; this.jmeno = jmeno; }
13
Volání metody instance
mujPes.stekej(); String rasaMehoPsa = mujPes.getRasa(); odkaz na vytvořenou instanci (identifikátor) Metoda se pozná dle toho, že jsou uvedeny kulaté závorky !!!! Pro volání metody instance je třeba mít vytvořenou instanci. Pro získání hodnoty z metody je třeba výsledek uložit do proměnné odpovídajícího typu. 13
14
Použití konstruktoru Kruh kruh1 = new Kruh (); určení typu proměnné
spuštění konstruktoru, v závorce mohou být hodnoty jednotlivých parametrů Dotaz na studenty: Vytváří se lokální proměnná či datový atribut? jméno proměnné (identifikátor) operátor new pro vytvoření instance přiřazovací příkaz 14
15
Datové typy v Javě
16
Datové typy v Javě Primitivní datové typy
celá čísla desetinná čísla znak logická hodnota (ano/ne, platí/neplatí, pravda/nepravda) Objektové (referenční) datové typy třída (class) rozhraní (interface) výčtový typ (enum) pole
17
Primitivní datové typy
logická hodnota boolean konstanty true a false znak char 16-bitové, UNICODE celá čísla byte (-27 až 27-1) short (-215 až 215-1) int (-231 až 231-1) long (-263 až 263-1) desetinná čísla float (max 3.4*1038) double (max 1.8*10308)
18
Konstanty primitivních datových typů
celočíselná konstanta je typu int 5 12457 int cisloDek = 10; int cisloOkt = 012; int cisloHex = 0xa; int cisloBin = 0b1010; int cisloSOddelovaci = 1_345_765; reálná konstanta je typu double 6.254 2.5e20 (semilogaritmický tvar, = 2.5 x 1020)
19
Literály pro číselné typy
Zapsat celočíselnou konstantu typu long lze pomocí literálu 2L Obdobně pro reálné konstanty 45.6f je typu float 5d je typu double
20
Konstanty primitivních datových typů
znaky 'a' 'B' ‘\u010D’ (č) ‘\u0000’ (prázdný znak) logická hodnota true false
21
Operátory pro primitivní datové typy
přiřazení = aritmetické +, - ,* , / , % +=, -=, *=, /=, %= ++, -- relační ==, !=, < , >, <=, >= logické &&, ||, !, &, | bitové operátory ternární/podmíněný operátor ?: operátor přetypování (cílový_typ)
22
Operátor přiřazení int cislo = 15; double celeCislo = 2.5;
celeCislo = celeCislo + cislo; char znak = 'a'; znak = 'F'; double stavMehoUctu = mujUcet.getStav();
23
Aritmetické operátory
+ sčítání - odčítání * násobení / dělení % modulo += x += y x = x + y −= x −= y x = x − y /= x /= y x = x / y *= x *= y x = x * y %= x %= y x = x % y ++ x++ ++x x = x + 1 −− x−− −−x x = x − 1 (při použití ve složeném výrazu se od sebe liší i++ a ++i) tyto operátory jsou definovány pouze pro číselné typy
24
Dělení double podil = 5/2; (2) double podil = 5d/2; (2.5)
celočíselné dělení nulou – vznikne výjimka (ArithmeticException) reálné dělení nulou – výsledkem je jedna z konstant Double.POSITIVE_INFINITY nebo Double.NEGATIVE_INFINITY 5/2 výsledkem je 2 (oba operandy jsou typu int, výsledek je také typu int) pro reálné dělení jedna z konstant musí být typu double např., pak je výsledek 2,5
25
System.out.println(12345 + 5432l);
Jaký je výsledek ? System.out.println( l); 5432L 17777
26
Relační operátory == rovná se > větší než != nerovná se
< menší než > větší než <= menší nebo rovno >= větší nebo rovno operátory jsou definovány pouze pro primitivní datové typy výsledkem jejich použití je hodnota typu boolean tedy true nebo false
27
Logické operátory || logický součet ! negace && logický součin
(cislo1 > 5) && (cislo2 !=0) logické operátory jsou definovány pouze pro typ boolean (často se používají v kombinaci s výsledky relačních operátorů) && logický součin || logický součet ! negace
28
Přetypování Přetypování existuje nezávisle pro primitivní i referenční typy Přetypování čísel na delší typ (neztratí se žádná informace) probíhá automaticky. byteshort int long float double int maleCislo = 2; long velkeCislo = maleCislo; double cislo = 5; přetypování int na long přetypování int na double
29
Operátor přetypování Přetypování čísel na kratší typ musím uvést
double desetineCislo = 5.0; int celeCislo = desetineCislo; ☹ překladač nás upozorní na nekompatibilitu typů a program nepřeloží. int celeCislo = (int)desetineCislo; když uvedeme operátor přetypování, program lze přeložit, bude odseknuta desetinná část čísla.
30
Kulaté závorky kulaté závorky ( ) se v Javě používají na následujících místech: ve složitějších výrazech pro vyjádření priority operací 3 x (3 x 5) x (5 + 6) jako operátor přetypování, v deklaraci metod pro uzavření seznamu formálních parametrů, při volání metod pro uvedení seznamu skutečných parametrů, v příkazech selekce a iterace pro uvedení podmínky při odchytávání výjimek
31
Primitivní a objektové (referenční) datové typy
instance třídy String text String odkaz pocet int 5 prvniZnak char ‘a’ prumer double novyStudent Student chyboveHlaseni instance třídy Student instance třídy String
32
Objektové typy - konstanty
konstanta null při deklaraci referenčního typu NullPointerException při volání metody řetězce "ahoj"
33
Objektové typy – operátor přiřazení
String text = "ahoj"; int cislo1 = 5; int cislo2 = cislo1; String text2 = text; obsah identifikátor Vysvětlit, jak se předávají parametry metod text odkaz cislo1 5 cislo2 text2 instance třídy String s obsahem "ahoj"
34
Objektové typy -operátory
. (tečka) == != porovnání odkazů instanceof class Integer cislo1 = new Integer(10); // vytvoření instance Integer cislo2 = cislo1; // zkopírování odkazu na instanci Integer cislo3 = new Integer(10); // vytvoření druhé instance System.out.print(cislo1 == cislo2); //výsledek je true System.out.print(cislo1 == cislo3); //výsledek je false System.out.print(cislo1.equals(cislo3)); //výsledek je true
35
Řetězcový operátor + "Ahoj" + "Tome" "AhojTome" int cislo = 5;
"Výsledek je " + cislo +7; "Výsledek je 57" "Výsledek je " + (cislo +7); "Výsledek je 12"
36
Zapouzdření
37
Zapouzdření V objektu jsou spojeny vlastnosti a schopnosti, které spolu souvisejí. Kód je pohromadě se zpracovávanými daty Skrývání implementace (nikdo nemá mít šanci zjistit, jak je program implementován) Zvýšení bezpečnosti a robustnosti (nemožnost nekorektního použití) Usnadnění budoucích modifikací Objekt (instance) rozhoduje o svém stavu => datové atributy jsou z venku nepřístupné
38
Zapouzdření K datovému atributu deklarovanému s modifikátorem private lze přistupovat pouze pomocí metod. „Přečtení“datového atributu pomocí metody get…… Nastavení hodnoty pomocí metody set…….
39
private typ nazev; public typ getNazev() { return nazev; }
private String rasa; public String getRasa ( ) { return rasa; }
40
private typ nazev; public void setNazev(typ nazev) {
this.nazev = nazev; } private String rasa; public void setRasa (String rasa) { this.rasa = rasa; }
41
Interface
42
Pojem rozhraní (interface)
uživatelské rozhraní (user interface), aplikační programové rozhraní (API, application programming interface), „vzdálené“ rozhraní (remote interface) rozhraní (interface) – jazyková konstrukce Javy a dalších objektově orientovaných jazyků,
43
import java.awt.*; /** * Ctverec, ktery se nakresli sam na Platno a se kterym je mozne manipulovat. Michael Kolling Lubos Pavlicek (15 July 2000) 1.0cz (30 July 2004) */ public class Ctverec{ private int velikost; private int xPozice; private int yPozice; private String barva; * Vytvoreni noveho ctverce na defaltni pozici (60, 50) a s defaltni barvou (cervena). public Ctverec() { velikost = 30; xPozice = 60; yPozice = 50; barva = "cervena"; kresli(); }
44
Aplikační rozhraní třídy
47
API jak metodu volat dáno podpisem metody kontroluje překladač co je výsledkem metody a jsou nějak omezeny hodnoty parametrů udává tzv. kontrakt (je to zapsáno v dokumentaci) probíhá po zavolání metody
48
Interface jako jazyková konstrukce
jedná se pouze o popis rozhraní, neobsahuje žádnou implementaci říká, co musí třída obsahovat za metody, pokud uvádí, že implementuje toto rozhraní
49
Kdy se interface používá?
Snížení závislosti mezi třídami Jako odkaz na funkci
50
<<interface>>
Ovladani zapnout() vypnout() Lampa zapnout() vypnout() ..... Tlacitko stisk ()
51
Pravidla pro interface
nelze definovat obecné datové atributy pouze statické konstanty public static final double KONSTANTA všechny metody jsou veřejné interface obsahuje pouze podpisy (hlavičky) metod ne implementaci public interface Ovladani { void zapnout(); void vypnout(); }
52
Implementování interface
Třída, která implementuje interface, musí mít definované (implementované) všechny metody v něm definované. Jedna třída může implementovat libovolný počet interface. Jeden interface může implementovat libovolný počet tříd public class Lampa implements Ovladani{ ..... public void zapnout(){ ...... } public void vypnout(){
53
Přetypování na interface
instanci třídy lze vždy přetypovat na typ implementovaných rozhraní Lampa lampa = new Lampa(); Ovladani ovladani = (Ovladani)lampa; Ovladani ovladani = new Lampa();
54
Použité zdroje Pavlíčková, Pavlíček : Úvod do Javy
Pecinovský: Myslíme objektově v jazyku Java Java a Duke jsou registrované známky firmy Oracle
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.