1 / 54

4IT101

4IT101. Druhá přednáška Datové typy a operátory Zapouzdření Pojem r o zhraní. 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ů. Třídy a jejich instance.

lowell
Download Presentation

4IT101

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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í • 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. Deklarace metody Jméno metody Typ návratové hodnoty Parametry metody Modifikátor přístupu publicStringgetRasa( ) { return rasa; } Klíčové slovo pro vrácení výsledku a ukončení metody Vracená hodnota

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

  9. Deklarace konstruktoru public class Pes { private String rasa; private String jmeno; publicPes (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();

  12. Odkaz this public class Pes { private String rasa; private String jmeno; publicPes (String rasa, Stringjmeno) { this.rasa = rasa; this.jmeno = jmeno; } ....... }

  13. Volání metody instance odkaz na vytvořenou instanci (identifikátor) mujPes.stekej(); StringrasaMehoPsa= mujPes.getRasa();

  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ů jméno proměnné (identifikátor) operátor new pro vytvoření instance 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 Datové typy v Javě

  17. 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) logická hodnota boolean konstanty true a false znak char 16-bitové, UNICODE Primitivní datové typy

  18. Konstanty primitivních datových typů • celočíselná konstanta je typu int 5 12457 intcisloDek = 10; intcisloOkt = 012; intcisloHex = 0xa; intcisloBin= 0b1010; intcisloSOddelovaci = 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. znaky 'a' 'B' ‘\u010D’ (č) ‘\u0000’ (prázdný znak) logická hodnota true false Konstanty primitivních datových typů

  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

  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(12345 + 5432l); 5432L 17777

  26. Relační operátory == rovná se != nerovná se < menší než > větší než <= menší 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 5 + 6 (3 x 5) + 6 3 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

  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 instance třídy String s obsahem "ahoj"

  34. Objektové typy -operátory • . (tečka) • == != porovnání odkazů • instanceof • class Integer cislo1 = newInteger(10); // vytvoření instance Integer cislo2 = cislo1; // zkopírování odkazu na instanci Integer cislo3 = newInteger(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; publictypgetNazev() { return nazev; } private String rasa; publicStringgetRasa ( ) { return rasa; }

  40. private typ nazev; publicvoidsetNazev(typnazev) { this.nazev = nazev; } private String rasa; publicvoidsetRasa (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. * @author Michael Kolling * @author Lubos Pavlicek * @version 1.0 (15 July 2000) * @version 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. 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

  46. 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í

  47. Kdy se interface používá? • Snížení závislosti mezi třídami • Jako odkaz na funkci

  48. <<interface>> Ovladani zapnout() vypnout() Lampa zapnout() vypnout() ..... Tlacitko stisk ()

More Related