Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

4IT1014IT101 Druhá přednáška Datové typy a operátory Zapouzdření Pojem rozhraní.

Podobné prezentace


Prezentace na téma: "4IT1014IT101 Druhá přednáška Datové typy a operátory Zapouzdření Pojem rozhraní."— Transkript prezentace:

1 4IT1014IT101 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í –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 public class Pes { private String rasa; private String jmeno; } deklarace datových atributů Hlavička třídy, musí obsahovat klíčové slovo class a identifikátor (jméno) Tělo třídy dále jsou deklarovány konstruktory a metody

7 Deklarace metody public String getRasa ( ) { return rasa; } Typ návratové hodnoty Jméno metody Parametry metody Klíčové slovo pro vrácení výsledku a ukončení metody Vracená hodnota Modifikátor přístupu

8 Deklarace metody public void zmenVelikost (int novyPrumer) { vymaz(); prumer = novyPrumer; kresli(); } Typ void určuje, že metoda nic nevrací Jméno metody formální parametr metody

9 Deklarace konstruktoru public class Pes { private String rasa; private String jmeno; public Pes (String rasa, String jmeno) { this.rasa = rasa; this.jmeno = jmeno; } } Formální parametry (slouží k inicializaci dat. atributů) Název třídy/typ návratové hodnoty modifikátor přístupu

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

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

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 mujPes.stekej(); String rasaMehoPsa = mujPes.getRasa(); Volání metody instance odkaz na vytvořenou instanci (identifikátor)

14 Použití konstruktoru Kruh kruh1 = new Kruh (); určení typu proměnné jméno proměnné (identifikátor) operátor new pro vytvoření instance spuštění konstruktoru, v závorce mohou být hodnoty jednotlivých parametrů přiřazovací příkaz

15 Datové typy v Javě

16 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 celá čísla byte (-2 7 až ) short (-2 15 až ) int (-2 31 až ) long (-2 63 až ) desetinná čísla float (max 3.4*10 38 ) double (max 1.8* ) logická hodnota boolean konstanty true a false znak char 16-bitové, UNICODE

18 Konstanty primitivních datových typů celočíselná konstanta je typu int int cisloDek = 10; int cisloOkt = 012; int cisloHex = 0xa; int cisloBin = 0b1010; int cisloSOddelovaci = 1_345_765; reálná konstanta je typu double e20 (semilogaritmický tvar, = 2.5 x )

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 +=x += yx = x + y −=x −= yx = x − y /=x /= yx = x / y *=x *= yx = x * y %=x %= y x = x % y ++x++ ++x x = x + 1 −−x−− −−x x = x − 1 + sčítání - odčítání * násobení / dělení % modulo

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

25 Jaký je výsledek ? System.out.println( l); L

26 Relační operátory == rovná se != nerovná se != nerovná se < menší než < menší než > větší než > větší než <= menší nebo rovno <= menší nebo rovno >= větší nebo rovno >= větší nebo rovno

27 Logické operátory (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. byte  short  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 instance třídy Student instance třídy String textStringodkaz pocetint5 prvniZnakchar‘a’ prumerdouble novyStudentStudentodkaz chyboveHlaseniStringodkaz

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í textodkaz cislo15 cislo25 text2odkaz instance třídy String s obsahem "ahoj" identifikátor obsah String text = "ahoj"; int cislo1 = 5; int cislo2 = cislo1; String text2 = text;

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í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 InterfaceInterface

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 1.0 (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

45

46

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 Tlacitko stisk () Lampa zapnout() vypnout()..... > Ovladani zapnout() vypnout()

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


Stáhnout ppt "4IT1014IT101 Druhá přednáška Datové typy a operátory Zapouzdření Pojem rozhraní."

Podobné prezentace


Reklamy Google