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

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

(instance konkrétní třídy)
Dynamické dokumenty na straně klienta Informatika pro ekonomy II.
Programování funkcí v Excelu
4IT101 Základy programování
Třída Array Je součásti balíčku java.util Účelem je usnadnit práci s poli Metody – nejpoužívanější equel(),fill(),sort() a binarySearch() equels() Slouží.
ÚVOD DO CPP 7 Dědičnost - pokračování
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
Konstanty jsou datové objekty jejich hodnoty nelze v programu měnit Deklarace Const jméno = hodnota Příklad: Textový řetězec ZPRAVA Const ZPRAVA = “Zadej.
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
Počítače a programování 1. Obsah přednášky Výjimky - základní typy výjimek Způsoby zpracování výjimek.
4IT1014IT101 Pátá přednáška Datové struktury - pokračování Statické prvky třídy.
Vytvoření prvního programu
Polymorfismus Dědičnost
C++ Přednáška 3 Konstantní a statické členy tříd, ukazatel this, konstantní instance třídy Ing. Jiří Kulhánek , kat. 352, VŠB TU Ostrava 2004.
C# pro začátečníky Mgr. Jaromír Osčádal
Programování v C++ Cvičení.
Druhé cvičení Vytváření identifikátorů Datové typy
Čtvrté cvičení Objektové programování Objektový model v Javě
Materiály k přednášce Úvod do programování Ondřej Čepek.
J a v a Začínáme programovat Lucie Žoltá pole řetězec debugr.
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
J a v a Začínáme programovat Lucie Žoltá. Odkazy - oficiální stránky (překladače, help, metody, vývojové prostředí NetBeans,...)
Operátory (1. část) 3 A1PRG - Programování – Seminář
4IT101 Testování a ladění, dokumentace API třídy,
C# - struktury, výčtové typy, pole
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
Seminář C++ 9. cvičení Šablony Ing. Jan Mikulka. Šablony ► template – vzory, podle kterých může překladač tvořit skupiny podobných tříd nebo funkcí, které.
Deklarace Radim Štefan. 2 Použité zkratky BP – Borland Pascal De – Delphi.
Jednoduché datové typy
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Třída jako zdroj funkcionality
Objektové programování
PHP PHP – základy syntaxe (část 2) - 04 Mgr. Josef Nožička IKT PHP
Informatika I 4. přednáška
Počítače a programování 1
PB161 Právo friend, přetěžování operátorů, přetypování PB161 | Friend, operátory PB161 – Programování v jazyce C++ Objektově Orientované Programování.
Proměnné v PHP Každý programovací jazyk pracuje s nějakými hodnotami. To, do čeho se tyto hodnoty ukládají, se nazývá proměnné. Každý programovací jazyk.
Cvičení.
VISUAL BASIC PRALG.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
Algoritmizace a programování Objektově orientované programování - 16 Mgr. Josef Nožička IKT Algoritmizace a programování
IB111 Programování a algoritmizace
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
13/04/20151 Indexery (1) Členy třídy (struktury) umožňující třídě (struk- tuře) používat hranaté závorky a pracovat s ní podobně jako s polem (používat.
13/04/20151 Datový typ třída – class (1) Datový typ definovaný uživatelem Poskytuje mechanismus pro modelování entit, s nimiž manipulují aplikace Charakterizuje.
Šesté cvičení Výjimky Balíky.
Principy OOP Objektově orientované programování vychá-zí ze třech základních principů (rysů): zapouzdření (encapsulation) dědičnost (inheritance) polymorfismus.
PJV031 Přetypování (casting) Objekty, atributy, lokální proměnné, parametry a návratové hodnoty metod mají definovaný, neměnný typ. Jsou dva druhy typů:
STRING A UKAZATELE. Co to je řetězec? Řetězec v Javě je samostatný objekt. Je konstantní, co znamená, že jednou vytvořený řetězec nelze změnit. Chceme-li.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Pokročilé programování v C++ (část B)
Datové typy a operátory. Co jsou datové typy  Charakterizují proměnnou nebo konstantu – jaká data obsahuje  Data jsou v počítači ukládána jako skupiny.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Počítače a programování 1 2.přednáška. Základní lexikální struktura programu Program v jazyce Java je tvořen symboly a oddělovači Program Java je psán.
Podprogramy (subroutines) Pojmenované kousky programu, které –tvoří logicky ucelené části –se v programu opakují Jsou zapsány na jednom místě a v případě.
Úvod do programování2 Vyučující: Mgr. Vítězslav Jersák Web: xjv.webnode.cz.
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Datové typy a operátory Základní programové.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA:
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
Programování ÚVOD, PROMĚNNÉ, OPERÁTORY A PODMÍNĚNÝ PŘÍKAZ ERIK KRÁL.
Programování v jazyce C++ Speciality jazyka C++, úvod do OOP.
Makra v Excelu syntaxe. Zápis nahraného makra SubEnd Sub O klíčová slova Sub a End Sub – začátek a konec makra O komentáře O text za znakem ', až do konce.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Návrhový vzor Flyweight
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Transkript prezentace:

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í

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

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

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

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

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

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

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

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>

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

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

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

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

Datové typy v Javě

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

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)

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)

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

Konstanty primitivních datových typů znaky 'a' 'B' ‘\u010D’ (č) ‘\u0000’ (prázdný znak) logická hodnota true false

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)

Operátor přiřazení int cislo = 15; double celeCislo = 2.5; celeCislo = celeCislo + cislo; char znak = 'a'; znak = 'F'; double stavMehoUctu = mujUcet.getStav();

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

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

System.out.println(12345 + 5432l); Jaký je výsledek ? System.out.println(12345 + 5432l); 5432L 17777

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

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

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

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.

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

Primitivní a objektové (referenční) datové typy instance třídy String text String odkaz pocet int 5 prvniZnak char ‘a’ prumer double 2547.548 novyStudent Student chyboveHlaseni instance třídy Student instance třídy String

Objektové typy - konstanty konstanta null při deklaraci referenčního typu NullPointerException při volání metody řetězce "ahoj"

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"

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

Ř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"

Zapouzdření

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é

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…….

private typ nazev; public typ getNazev() { return nazev; } private String rasa; public String getRasa ( ) { return rasa; }

private typ nazev; public void setNazev(typ nazev) { this.nazev = nazev; } private String rasa; public void setRasa (String rasa) { this.rasa = rasa; }

Interface

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ů,

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

Aplikační rozhraní třídy

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

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í

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

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

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

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(){ .........

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

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