Programování v jazyku Java základy OOP

Rozměr: px
Začít zobrazení ze stránky:

Download "Programování v jazyku Java základy OOP"

Transkript

1 Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Programování v jazyku Java základy OOP BI-PJV Programování v jazyku Java Katedra teoretické informatiky Miroslav Balík Fakulta informačních technologií České vysoké učení technické

2 Klíčová slova - abecedně Klíčová slova jsou jen z malých písmen: abstract boolean break byte case catch char class const * continue literály: default do double else extends final finally float for goto * if implements import instanceof int interface long native new package private this protected throw public throws return transient short try static void strictfp volatile super while switch synchronized false true null * - vyhrazená - leč nefunkční assert - od verze 1.4 enum - od verze 1.5 2/54

3 Klíčová slova dle užití typy: primitivní(8): boolean byte short int long char float double literály: false true null řídící příkazy: if else for do while break continue switch case default return pro výjimky: throw try catch finally, od verze 1.4: assert operátory: instanceof new this super strukturální: package import class interface extends implements od verze 1.5: enum modifikátory: přístupu: public protected friend private final static jen proměnných: transient volatile jen metod: void throws synchronized native strictfp jen metod a tříd: abstract nefunkční: const goto Pozn: toto rozdělení není přesně dle specifikace Javy. 3/54

4 Objektově Orientované Programování Programovat lze klasicky neobjektově - tedy s využitím jen primitivních typů a statického kontextu - tj. statických atributů, statických metod, statických inicializátorů a výčtů. Leč objektová metodika ( analýza OOA, design OOD, programování OOP ), výrazně usnadňuje vytváření složitého softwaru. Objektový přístup je velmi přirozený, neboť pohlíží na softwarové entity a vztahy často tak, jako by byly z materiálního světa, což programátorům usnadňuje pochopení a tvorbu konstrukcí pomocí analogií. Java vyniká těmito důležitými rysy: Zavedení jasného pořádku a etikety. Přísné typování jmen. 4/54

5 Objektově Orientované Programování 1. Abstrakci (abstraction), tj. zobecnění pohledů a částečná řešení. 2. Dědičnost (inheritance), tj. získávání vlastností a schopností děděním z vhodné třídy a případně i dat nebo částečných požadavků z interfejsů. 3. Polymorfismus (polymorphism), tj. jednotné zacházení s různými (mnohotvarými) objekty mající některé společné zděděné schopnosti. 4. Zapouzdření (encapsulation), tj. skrývání části tříd a interfejsů. 5/54

6 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 6/54

7 Třída - programová jednotka k ř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 - funkce a procedury Takto koncipovaná třída je zdrojem funkcí popisujících řešení problému rozkladem na podproblémy Jiný pohled na třídu Základem uživatelského programu v jazyku Java je třída, ve které musí být deklarována hlavní funkce main mohou být deklarovány další funkce (procedury) třídy mohou být deklarovány statické proměnné, které jsou použitelné jako nelokální proměnné ve funkcích dané třídy 7/54

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

9 Třída Auto - struktura public class Auto { String barva;.. public class Auto(){ data konstruktory metody public void startuj(){ 9/54

10 Datové objekty typu třída Obecně je třída popisem strukturovaného datového typu, tzn. specifikuje množinu hodnot datových objektů skládajících se ze složek (datových) množinu operací s datovými objekty Třída je šablona - vzor pro vytváření jednotlivých objektů (instancí) Datové objekty typu třída (zkráceně jen objekty) se nazývají též instancemi třídy 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) objekt, instance třídy referenční proměnná 10/54

11 Objekty, základní pojmy Objekt - datový prvek, instance třídy, dynamicky vytvořen podle vzoru - třídy Objekt (resp. data) je strukturován tzn. skládá se z jednotlivých položek Pozn. 1: Třída bez vytvořené instance (objektu) nemůže pracovat (mohou být použity jen její statické metody či proměnné), instance musí být vytvořena pomocí new Pozn. 2: 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 Pozn.3:Položky objektu označujeme též jako členské proměnné (member variables) datové složky atributy objektu 11/54

12 Třída příklad Třída je návrhový vzor - definuje vlastnosti a chování vlastnosti. atributy chování. metody (funkce a procedury) 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í, 12/54

13 Obdélník - příklad definice třídy Jméno třídy začíná velkým písmenem public class Obdelnik { Color barva; int sirka, vyska; Atributy objektu - definují typ a Point pozice; jména vlastností int vypoctiobvod(){ return 2*(sirka+vyska); int vypoctiobsah(){ return sirka*vyska; Metody objektu - definují chování, schopnosti, reakce void setbarvu(color c){ barva = c; 13/54

14 Speciální metoda - konstruktor třídy public class Obdelnik { Obdelnik(int s, int v){ sirka = s; vyska = v; Konstruktor: tato metoda vytvoří objekt nastavuje vlastnosti objektu jméno 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); neosahuje návratový typ - nic nevrací, vytváří objekt 14/54

15 Přetěžování konstruktorů Konstruktor je metoda, která vytvoří objekt a nastaví jeho počáteční hodnoty. Budeme chtít 3 typy konstruktorů pro Obdelnik: bez parametrů - vytvoří obdélník o stranách 0x0, jeden 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; 15/54

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

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

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

19 Třída pro testování obdélníka Není třeba předávat šířku a výšku, public class ObdelnikTest { každá instance (objekt) zná své public static void main(string[] args) { rozměry!! Obdelnik maly; maly = new Obdelnik(1,5); Obdelnik velky = new Obdelnik(10,5); System.out.println("Obvod maleho je "+ maly.vypoctiobvod()); 2*( sirka + vyska ) = 2*( ) = 12 maly velky 19/54

20 Třída versus objekt Třída návrhový vzor, šablona reprezentovaná zápisem v Javě, existuje i mimo program Obdelnik Objekt jeden konkrétní výrobek vyrobený podle třídy vytvořen za běhu programu, žije během života programu (lze jej uložit na disk, není reprezentován kódem programu) Obdelnik maly = new Obdelnik(1,5); Obdelnik velky = new Obdelnik(10,5); Clovek František Navrátil Julie Capuletová 20/54

21 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 public class Bod { double x, y; public Bod(double x, double y) { this.x = x; this.y = y; pocetbodu++; 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) ve statické metodě nelze použít this! pokud se volá 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 21/54

22 Vlastnosti konstruktorů 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 bez parametrů 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, který obsahuje odkaz na právě konstruovaný objekt Konstruktor je zpravidla vždy public (!) //třída java.lang.math jej má private proč? Příslušný konstruktor je volán automaticky při vytváření objektu operátorem new 22/54

23 Třída jako zdroj funkcí 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 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 23/54

24 Třída a metoda main Základem aplikace, tj. uživatelského programu, je třída, ve které je deklarována spouštěcí metoda přesně takto: public static void main( String[ ] args ) {... Metoda main musí být statická, voláme ji dříve než se vytvoří nějaký objekt Každá třída může obsahovat metodu main, pak se využívá pro: testování funkčnosti objektu ukázku použití metod objektu 24/54

25 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 25/54

26 Instanční metody I 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 26/54

27 Instanční metody II Příklady metod definovaných třídou Obdelnik pro objekty typu Obdelnik: vypoctiobvod int vypoctiobsah(){ Poznámka: String tostring() je metodou každého objektu, nepřekreje-li se, pak jméno třídy + hash kód např. pjv.obdelnik@1f6a7b9 výsledkem volání c.tostring() je řetězec tvořící znakovou reprezentaci komplexního čísla c (metodou je zavedena implicitní typová konverze z typu Obdelnik na typ String), často se překrývá! 27/54

28 Statické metody public class Obdelnik { int sirka. static int vratpocetrohu(){ // sirka = 6; //CHYBA,statická metoda nevidí instanční proměnné return 4; 4 public class ObdelnikTest { 4 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é!!! 28/54

29 Statické atributy a metody - Math Knihovna matematických funkcí - třída java.lang.math obsahuje statické proměnné (zde konstanty typu double) PI a E statické metody reprezentující matematické funkce: double x = Math.sin(0,5); sin, cos, tan, goniometrické funkce 1 abs absolutní hodnota 3 3 min, max log logaritmus sqrt odmocnina a = a pow(double a, double b) ab random vrací náhodné double číslo z intervalu <0;1) round zaokrouhlení vrací double, proč nevrací int?? a mnohé další 29/54

30 Pořádek Třída ( class ), interfejs ( interface, tj. rozhraní ) a výčet ( což je speciální třída enum ) jsou v Javě základními stavebními kameny. Ukládají se do tzv. balíčků ( package ), přístup k nim se usnadní import. Základním balíčkem je java.lang, bez něho by Java vůbec nefungovala. Zdrojové soubory, tj. kompilační jednotky, mají příponu.java a obsahují: - Jeden příkaz package - je vždy první. Lze ho sice vynechat pak se jedná o tzv. noname space nedoporučuje se. - Několik ( i žádný ) příkazů [ static ] import pro snadnější přístup k jiným balíčkům ( import java.lang.*; je default ). - Definice tříd, interfejsů a výčtů v libovolném pořadí. - Dokumentační komentáře před třídou, interfejsem a jejich složkami. - Ostatní komentáře ( řádkové nebo blokové ) kdekoli. 30/54

31

32 Pořádek Ve zdrojovém souboru může být nanejvýš jedna vrcholná (top) třída, výčet či interfejs s modifikátorem public - pak musí být jméno zdrojového souboru shodné se jménem oné třídy, výčtu či interfejsu. Kompilátor vytvoří tolik souborů bytekódu, kolik je ve zdrojovém tříd, výčtů a interfejsů ( i vnitřních ). Vzniklé soubory mají odpovídající jména s extenzí.class. ( Vnitřní třídy či interfejsy mají vlastní jména složená ze sekvence jmen vnějších tříd či interfejsů oddělených dolarem. ) Bytekódové soubory jsou přijatelné pro JVM, jen tehdy leží-li v těch adresářích jejichž cesta odpovídá operandu v příkazu package. Tzv. CLASSPATH, musí odkazovat na adresář v němž se nalézá adresář shodného jména s první složkou jména uvedeného v příkazu package. 32/54

33 Účel tříd a interfejsů Třídy slouží jako: - Úložiště statického kontextu tj. statických položek tříd. - Plán pro tvorbu objektů obsahující nestatické položky. - Zdroj neprivátních členů pro dědictví potomkům. - Privátní zdroj funkcionality potomků. - Brána pro spuštění aplikace pomocí public static void main( String... Interfejsy slouží jako norma či požadavek. - Nemají funkcionalitu. - Nemají konstruktory ani inicializátory. - Mohou mít jen abstraktní metody. - Mohou mít jen finální statické atributy. - Mohou být i prázdné tzv. tagging Interfejsy. 33/54

34 Typy Jménům se v definici přiřadí neměnitelný typ, který může být: - primitivní primitivních typů je jen 8. - referenční, tj. dle: - dle třídy nebo interfejsu, - pole ( primitivních hodnot anebo referencí ). - void ( prázdný ) - jen jako návratový typ metod. Konstruktory nemají vyznačený návratový typ ten je dán jménem třídy - a musejí být nazvány přesně podle třídy. Java nemá destruktory ničení objektů zajišťuje garbage collector. (Object má protected void finalize() throws Throwable {, nutné přepsat, volá GC při rušení objektu pro uvolňování vázaných zdrojů, lépe použít finally v try catch bloku) 34/54

35 Jména Všechny položky programu musejí být rozlišitelné různými jmény. V některých případech se rozlišují položky shodných jmen dle principu "košile-kabát". Třídy a interfejsy jsou rozlišitelné pomocí úplných jmen. Ta jsou dána prefixem dle příkazu package a jejich vlastním jménem. Atributy přejímají úplná jména tříd či interfejsů jako prefix vlastních jmen. Metody a konstruktory přejímají úplná jména tříd či interfejsů jako prefix vlastních signatur. Signatura metod i konstruktorů se skládá z jejich vlastních jmen a sekvenci typů jejich parametrů. Metody i konstruktory v téže třídě mohou mít shodná vlastní jména, avšak různé signatury - pak jsou tzv. přetížené (overload). To je vhodné tehdy, mají-li obdobnou funkcionalitu. 35/54

36 Abstrakce a konkretizace Abstrakce je důležitým pohledem na oba světy: ten reálný i ten virtuální, je základem taxonomie složitých systémů. Abstrakce má tvar stromu: směrem ke kořeni abstrahujeme (vypouštíme detaily), směrem k listům konkretizujeme (přidáváme a realizujeme detaily). Pomocí abstrakce lze vytvářet velmi užitečné neúplné popisy a plány. Jednak vyjasňují strukturu systému a jednak po pozdějším doplnění se stanou úplnými a tedy konkrétními. Jen podle konkrétních plánů (tříd) lze vytvářet výrobky (objekty). Konkrétní třída může zabránit konstrukci objektů privatizací všech svých konstruktorů modifikátorem private a případně ani nepřipustí jejich použití jiným způsobem. (Např. java.lang.math.) 36/54

37 Abstraktní třídy, metody a interfejsy Abstraktní třída má modifikátor abstract - konkrétní třída nikoli. Má alespoň jeden konstruktor, nelze však podle ní objekty vytvářet. Nemusí mít žádnou abstraktní metodu. Abstraktní třída nemůže být finální. Statický kontext ( tj. static atributy, metody, inicializátory, výčty ) abstraktní třídy je funkční. Abstraktní metoda má v definici místo těla jen středník, např.: public abstract int compareto( Object s ) ; Má-li třída abstraktní metodu ( vlastní definovanou či zděděnou a nepřepsanou na konkrétní ), pak musí být označena jako abstraktní. Interfejs lze považovat za značně omezenou abstraktní třídu, která má všechny metody abstraktní ( netřeba u nich uvádět modifikátor abstract ). Interfejs umožňuje jednak částečný pohled na třídu a jednak slouží s výhodou jako norma či požadavek. 37/54

38 Abstrakce, dědičnost a polymorfismus P Object Object U E F D G Typy: Q A A R R B S T C - konkrétní plán Abstrakce ( po šipkách ) - úží pohled - abstraktní plán Vztahy: - norma, předpis, požadavek extends implements (rozšiřuje) (splňuje) 38/54

39 Polymorfismus Polymorfismus se týká jen překrytých nestatických metod - umožňují objektům různým podtypům daného nadtypu specifické chování. Polymorfismus je relace ( reflexivní, asymetrická a transitivní ) mezi referenčním typem a množinou referenčních typů, které lze oním typem referovat. Existuje-li dráha ( po kterýchkoli šipkách ) z typu x k typu y pak: Typ y je abstrakcí typu x, označme: y x Typ x lze referovat typem y čili lze říci, že x je také y. Množina typů Y = { x U y y x je polymorfismem typu y. Tři příklady polymorfismu z předchozího obrázku: A = { A, B, C, D, Q = { Q, B, C, R, S, T, U = { U, F, G Zda objekt o patří do určitého typu lze otestovat výrazem: o instanceof Typ má hodnotu true nebo false, přičemž o instanceof Object má vždy hodnotu true. 39/54

40 Dědičnost ( inheritance ) Dědičnost velmi usnadňuje: - Přístup k existujícím třídám a interfejsům a jejich pochopení. - Vytváření nových tříd a interfejsů s využitím vlastností a schopností - již existujících, ověřených a dokumentovaných. Všechny třídy ( bez ohledu na balíčky ) tvoří jediný, dědičný, kořenový strom orientovaný směrem ke kořeni, kterým je třída java.lang.object. Tedy každá třída, kromě java.lang.object, má právě jednoho přímého předka ( superclass = nadtřída ), jehož je přímým potomkem ( subclass = podtřída ). Svoji přímou nadtřídu vyznačuje podtřída ve své hlavičce za klíčovým slovem extends, jinak je přímým předkem java.lang.object. Konkrétní třída java.lang.object nemá žádného předka ( je to jakoby prapředek Adam ) a tedy nic nezdědila avšak definuje 11 generálních metod. Všechny ostatní třídy jsou tedy jejími přímými či nepřímými potomky a zaručeně mají tyto generální metody. Třída také dědí od interfejsů uvedených v seznamu za klíčovým slovem implements. 40/54

41 Dědičnost ( inheritance ) Interfejsy tvoří nesouvislý acyklický graf. ( Hrany jsou jen typu extends. ) Není žádný základní interfejs ( co obdoba třídy java.lang.object ) Interfejs: nemusí mít žádného předka, může být přímým potomkem více interfejsů uvedených v seznam za klíčovým slovem extends, nemůže být potomkem žádné třídy, nemůže být finální. Dědí se pouze viditelné členy ( tj. atributy, metody, vnitřní třídy, vnitřní interfejsy, výčty ), jež nemají příliš restriktivní přístupový modifikátor: ( public protected default=friend private tj. vždy v balíčku či potomek v jiném balíčku v témže balíčku nikdy ). Potomek nemůže dědictví odmítnout a tedy není nikdy chudší než předek zpravidla bývá mnohem bohatší. 41/54

42 Dědičnost metod Interfejsy obsahují jen nestatické abstraktní metody generální metody: java.lang. clone(), equals(), hashcode(), Object Object U finalize(), getclass(), notify(), a statické finální atributy P m2( ); notifyall(), tostring(), wait(...) abstract E static m6( ){... A A Q m1( ){... m3( ); abstract F D static private m7( ){...; B B m3( ){... m4( ){... R S m4( ); m4( ); m5( ); m6( ){... abstract G třída m2( ){... m3( ){... m5( ){... static m6( ){... finální třída abstr. třída T C C interfejs extends implements 42/54

43 Dědičnost atributů Interfejsy obsahují jen nestatické abstraktní metody java.lang. Object Object U a statické finální atributy i=1 P Atributy mohou být libovolně [ne]statické E final n=4 A A Q private j=2 m=5 F G třída n=44 D B B C C n=44 finální třída abstr. třída i=11 j=22 valid k=3 i=1/11? j=22 k=3/33? interfejs R i=1 j=22 k=3 T extends S i=1 j=2 k=3 i=1 j=2/22? invalid k=33 implements 43/54

44 Syntaxe třídy [ public protected private ] [ abstract final ] [ strictfp ] static class JménoTřídy [ <~> ] // hlavička třídy [ extends JménoNadTřídy [ <~> ] extends java.lang.object ] [ implements JménoInterfejsu [ <~> ],... ] { // tělo třídy... // atributy statické a nestatické... // inicializátory statické a nestatické... // konstruktory... // metody statické a nestatické - pro vnořené (nested)... // vnořené a vnitřní třídy - typové parametry... // výčty enum - meta symboly... // vnořené interfejsy. // anotace 44/54

45 Syntaxe interfejsu [ public protected private ] [ strictfp ] [ static ] [ abstract ] interface JménoInterfejsu [ <~> ] // hlavička interfejsu [ extends JménoNadInterfejsu [ <~> ],... ] { // tělo interfejsu // [ public static final ] atributy inicializované již v definici // [ public abstract ] metody ale ne static final strictfp native // vnořené a vnitřní třídy // výčty enum // vnořené interfejsy // anotace - jen pro vnořené (nested) - typové parametry - typové parametry Metody stejných signatur kolidují jen při nekompatibilitě návratových typů. Interfejs označený public, má atributy také public - což netřeba uvádět. Při vícečetném dědění stejnojmenných atributů nastane kolize. 45/54

46 Syntaxe anonymní třídy Anonymní třída nemá hlavičku třídy, tudíž ani jméno, nemůže mít potomka a slouží k vytvoření jediného objektu. Má však jediného přímého předka tím může být nejen buď nefinální třída, anebo interfejs a pak je nadtřídou java.lang.object. TypT t = new Třída (... ) { // tělo anonymní třídy... // nestatické atributy, inicializátory, metody a třídy TypT může být Třída anebo její nadtypy. TypZ z = new Interfejs ( ) { // tělo anonymní třídy... // nestatické atributy, inicializátory, metody a třídy TypZ může být Interfejs nebo jeho nadinterfejsy anebo Object. 46/54

47 Dědictví tříd V nově definované třídě lze: - zdědit od nadtřídy jen nestatické členy, které jsou public či protected a patří-li potomek do stejného balíčku, pak i default friend členy. Privátní členy se nedědí. - přidat nové členy. - přepsat zděděné metody novými metodami ( override ), nelze však přepsat statickou nestatickou a naopak. - zastínit zděděné atributy stejnojmennými novými atributy ( shadow ), - definovat vlastní konstruktory a inicializátory. Zdědění abstraktních metod, není " výhodné dědictví ", leč břemeno, se kterým se může třída vyrovnat jedním z těchto způsobů: - přepsat všechny zděděné abstraktní metody na konkrétní, - ponechat některé abstraktní - a bude tudíž abstraktní třídou. 47/54

48 Dědictví interfejsu Při dědění metod nemůže dojít ke kolizi, neboť všechny jsou abstraktní, tj. nemají tělo místo něho mají středník. Při dědění stejnojmenných atributů od více předků-interfejsů dojde k víceznačnosti a to i když jsou inicializovány na stejnou hodnotu. Ke kolizi dojde i při dědění do třídy stejnojmenných atributů z nadtřídy a z interfejsu či jen z více interfejsů. Dědictví z interfejsů do třídy se neuplatní tehdy, je-li ve třídě jméno atributu definováno ( ne zděděno ). Může záležet i na pořadí v jakém jsou interfejsy uvedeny v implements. 48/54

49 Zastínění a překrytí Zděděný atribut, lze v potomkovi zastínit stejnojmenným atributem, přičemž na typech a modifikátorech přístupu nezáleží. Nefinální statickou metodu lze zastínit. Statické atributy a metody jsou přístupné přes jméno třídy. Překrytí metod ve třídě Nevyhovuje-li potomkovi zděděná nefinální metoda, lze v potomkovi deklarovat metodu, která: má shodnou signaturu, má kovariantní návratový typ, typ či subtyp avšak ne primitivní, nemění statičnost nestatičnost, nezužuje modifikátor přístupu, nerozšiřuje množinu kontrolovaných výjimek udaných za throws. Překrytím metody v potomkovi se metoda v předkovi nezmění. Přepsaná nestatická metoda je přístupná z přímého potomka pomocí klíčového slova super. Statická metoda je přístupná přes jméno třídy. 49/54

50 Dědění versus kompozice Vytvářet bohatší třídy lze: Děděním tj. přidáváním zejména metod, např.: class B extends A { void m1(... ) {... void m2(... ) {... // relace: B is A Kompozicí tj. přidávání zejména referenčních atributů class C { B b = new B(... ); C c = new C(... ); class B { void m1(... ) {... void m2(... ) {... // relace: C has B and C Doporučuje se dávat přednost kompozici, dědění používat obezřetně. 50/54

51 Zapouzdření ( encapsulation ) Ve třídách a objektech lze ukrýt atributy, metody, konstruktory, vnitřní třídy a vnitřní interfejsy a tím podpořit spořádanost a bezpečnost. Inicializátory jsou skryté již tím, že nemají jméno. Míru zapouzdření určuje modifikátor viditelnosti členu či konstruktoru. modifikátor viditelnost public - odevšad protected - ve vlastním balíčku a v potomcích v jiných balíčcích - modifikátor se nepíše, chápe se jako package private tj. viditelný ve vlastním balíčku ( friend v C/C++ ) private - jen ve vlastní třídě ( a i z vnitřních tříd ) K nedostupným členům nějaké třídy lze přistupovat z jiné třídy jen pomocí neprivátních metod oné třídy. V interfejsech lze zapouzdřovat jen atributy a jen úrovní default. 51/54

52 Getry a setry Dobrovolná jmenná konvence pro přístupové metody k zejména privátním atributům, které jejich hodnotu vydávají ( tzv. getter, accessor ) anebo mění ( tzv. setter, mutator ) usnadňuje tvorbu nadstavbového softwaru. Tento způsob je podmínkou pro tvorbu tzv. Java beans. private int cenakusu = ; // atribut public int getcenakusu( ) { return cenakusu; // getter public void setcenakusu ( int cenakusu ) { // setter... this.cenakusu = cenakusu; private Point vrcholhory = ; // atribut public Point getvrcholhory ( ) { return vrcholhory ; // getter public void setvrcholhory ( Point vrcholhory ) { // setter... this.vrcholhory = vrcholhory ; 52/54

53 Getry a setry Getry vracející boolean často začínají is resp. has např.: isvisible( ) resp. hasnext( ). Pro jednorozměrná pole se používají getry a setry např. takto: private String[ ] line = { "A", "B", "C" ; public String getline( int index ) { return line[ index ] ; public void setline( int index, String line ) { this.line[ index ] = line ; 53/54

54 Inicializace statických atributů Když JVM zavede třídu či interfejs do paměti, inicializuje jejich statické atributy. U tříd i tzv. statickými inicializátory - ty připomínají metody bez hlavičky, mají přístup jen ke statickému kontextu, nic nevracejí, nemají signaturu, nevyznačují vyhazování výjimek a provádějí se jen jednou a to v pořadí zápisu. Nelze je volat, nejsou členy třídy a nedědí se. Syntakticky jsou velmi prosté: static {... class Priklad { static int j = 10, k, n; static { String value1 = System.getProperty( "key1" ) ; n = Integer.parse( value1 ) ; k = Integer.parseInt( System.getProperty( "key2" ) ) ; static Color[ ] c = new Color[ n ] ; static { for ( int i = 0; i < c.length; i++ ) c[ i ] = new Color( i, i*j, 0 ); // Execute as: java -Dkey1=value1 -Dkey2=value2 MyProgram 54/54

OOP - Objektově Orientované Programování

OOP - Objektově Orientované Programování OOP - Objektově Orientované Programování Programovat lze klasicky neobjektově - tedy s využitím jen primitivních typů a statického kontextu - tj. statických atributů, statických metod, statických inicializátorů

Více

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

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd 7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd Algoritmizace (Y36ALG), Šumperk - 7. přednáška 1 Třída jako zdroj funkcionality Třída v jazyku Java je programová jednotka tvořená

Více

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

Třída jako datový typ. A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické Třída jako datový typ A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické Třídy a objekty Věci okolo nás lze hierarchizovat do tříd (konceptů). Každá třída je reprezentována svými

Více

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

Třída jako datový typ. BD6B36PJV 01 Fakulta elektrotechnická České vysoké učení technické 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

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Struktura programu Vytvoření nové aplikace Struktura programu Základní syntaktické elementy První aplikace Verze pro akademický rok 2012/2013 1 Nová aplikace NetBeans Ve vývojovém

Více

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

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod. Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání

Více

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

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance

Více

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

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ 4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ OBJEKT Program v Javě je staticky strukturován na třídy, jejichž instance (objekty) za běhu dynamicky programu vznikají a zanikají. Objekt je nejprve

Více

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/04.0006

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/04.0006 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/04.0006 Lekce 1 Jazyk Java Tento projekt je spolufinancován Evropským sociálním fondem

Více

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

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20 Obsah 5 Obsah Předmluva k aktuálnímu vydání 15 1 Úvod k prvnímu vydání z roku 2000 16 Typografické a syntaktické konvence................ 20 2 Základní pojmy 21 2.1 Trocha historie nikoho nezabije................

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více

Teoretické minimum z PJV

Teoretické minimum z PJV Teoretické minimum z PJV Pozn.: následující text popisuje vlastnosti jazyka Java zjednodušeně pouze pro potřeby výuky. Třída Zavádí se v programu deklarací třídy což je část programu od klíčových slov

Více

Seminář Java II p.1/43

Seminář Java II p.1/43 Seminář Java II Seminář Java II p.1/43 Rekapitulace Java je case sensitive Zdrojový kód (soubor.java) obsahuje jednu veřejnou třídu Třídy jsou organizovány do balíků Hierarchie balíků odpovídá hierarchii

Více

typová konverze typová inference

typová konverze typová inference Seminář Java Programování v Javě II Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Programování v Javě (2) 1/ 36 Téma přednášky Rozhraní: použití, dědičnost Hierarchie

Více

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

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39 Programování v C# Hodnotové datové typy, řídící struktury Petr Vaněček 1 / 39 Obsah přednášky Referenční datové typy datové položky metody přístupové metody accessory, indexery Rozhraní Pole 2 / 39 Třídy

Více

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

8 Třídy, objekty, metody, předávání argumentů metod 8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním

Více

Základy objektové orientace I. Únor 2010

Základy objektové orientace I. Únor 2010 Seminář Java Základy objektové orientace I Radek Kočí Fakulta informačních technologií VUT Únor 2010 Radek Kočí Seminář Java Základy OO (1) 1/ 20 Téma přednášky Charakteristika objektově orientovaných

Více

1. Dědičnost a polymorfismus

1. Dědičnost a polymorfismus 1. Dědičnost a polymorfismus Cíl látky Cílem této kapitoly je představit klíčové pojmy dědičnosti a polymorfismu. Předtím však je nutné se seznámit se základními pojmy zobecnění neboli generalizace. Komentář

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

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

Úvod do programování - Java. Cvičení č.4 Úvod do programování - Java Cvičení č.4 1 Sekvence (posloupnost) Sekvence je tvořena posloupností jednoho nebo více příkazů, které se provádějí v pevně daném pořadí. Příkaz se začne provádět až po ukončení

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

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

11.5.2012. 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 Obsah přednášky 9 Základy programování (IZAPR, IZKPR) Přednáška 9 Základy dědičnosti, přístupová práva Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií

Více

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

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance

Více

Generické programování

Generické programování Generické programování Od C# verze 2.0 = vytváření kódu s obecným datovým typem Příklad generická metoda, zamění dva parametry: static void Swap(ref T p1, ref T p2) T temp; temp = p1; p1 = p2; p2 =

Více

1. Programování proti rozhraní

1. Programování proti rozhraní 1. Programování proti rozhraní Cíl látky Cílem tohoto bloku je seznámení se s jednou z nejdůležitější programátorskou technikou v objektově orientovaném programování. Tou technikou je využívaní rozhraní

Více

Programování v Javě I. Leden 2008

Programování v Javě I. Leden 2008 Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Leden 2008 Radek Kočí Seminář Java Programování v Javě (1) 1/ 45 Téma přednášky Datové typy Deklarace třídy Modifikátory

Více

Zápis programu v jazyce C#

Zápis programu v jazyce C# Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač

Více

Výčtový typ strana 67

Výčtový typ strana 67 Výčtový typ strana 67 8. Výčtový typ V této kapitole si ukážeme, jak implementovat v Javě statické seznamy konstant (hodnot). Příkladem mohou být dny v týdnu, měsíce v roce, planety obíhající kolem slunce

Více

Třída jako zdroj funkcí

Třída jako zdroj funkcí Třída jako zdroj funkcí Třída v jazyku Java je programová jednotka tvořená množinou identifikátorů, které mají třídou definovaný význam Základem uživatelského programu v jazyku Java je třída, ve které

Více

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

Programování v Javě I. Únor 2009 Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Únor 2009 Radek Kočí Seminář Java Programování v Javě (1) 1/ 44 Téma přednášky Datové typy Deklarace třídy Modifikátory

Více

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

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

Více

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

3. Třídy. Základní pojmy objektového programování. Třídy 3. Třídy Základní pojmy objektového programování Jak už víme, je Java objektovým programovacím jazykem. V úvodu této kapitoly si objasníme základní pojmy objektové teorie. Objekt představuje souhrn dat

Více

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

PŘETĚŽOVÁNÍ OPERÁTORŮ PŘETĚŽOVÁNÍ OPERÁTORŮ Jazyk C# podobně jako jazyk C++ umožňuje přetěžovat operátory, tj. rozšířit definice některých standardních operátorů na uživatelem definované typy (třídy a struktury). Stejně jako

Více

KTE / ZPE Informační technologie

KTE / ZPE Informační technologie 4 KTE / ZPE Informační technologie Ing. Petr Kropík, Ph.D. email: pkropik@kte.zcu.cz tel.: +420 377 63 4639, +420 377 63 4606 (odd. informatiky) Katedra teoretické elektrotechniky FEL ZČU Plzeň Největší

Více

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

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance

Více

Abstraktní třída a rozhraní

Abstraktní třída a rozhraní Abstraktní třída a rozhraní Někdy se může stát, zejména při psaní v hierarchické struktuře hodně nadřazených tříd, že tušíme, že bude ve zděděných třídách vhodné použít nějakou metodu. Tuto metodu ještě

Více

O autorovi O odborném korektorovi Úvod 17 Vývoj jazyka Java Java SE 8 Struktura této knihy Předchozí zkušenosti s programováním nejsou potřebné

O autorovi O odborném korektorovi Úvod 17 Vývoj jazyka Java Java SE 8 Struktura této knihy Předchozí zkušenosti s programováním nejsou potřebné O autorovi 15 O odborném korektorovi 15 Úvod 17 Vývoj jazyka Java 17 Java SE 8 19 Struktura této knihy 20 Klíčové znalosti a pojmy 20 Testové otázky 20 Odpovídá expert 20 Cvičení 20 Předchozí zkušenosti

Více

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

IB111 Programování a algoritmizace. Objektově orientované programování (OOP) IB111 Programování a algoritmizace Objektově orientované programování (OOP) OP a OOP Objekt Kombinuje data a funkce a poskytuje určité rozhraní. OP = objektové programování Vše musí být objekty Např. Smalltalk,

Více

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

Programování v C++ 2, 4. cvičení Programování v C++ 2, 4. cvičení statické atributy a metody, konstruktory 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Přístupová práva

Více

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

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 Ú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 KAPITOLA 1 Na úvod o Javě 15 Počítačový program 15 Vysokoúrovňový programovací

Více

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

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech 7 Formátovaný výstup, třídy, objekty, pole, chyby v programech Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost formátovanému výstupu,

Více

PREPROCESOR POKRAČOVÁNÍ

PREPROCESOR POKRAČOVÁNÍ PREPROCESOR POKRAČOVÁNÍ Chybová hlášení V C# podobně jako v C++ existuje direktiva #error, která způsobí vypsání chybového hlášení překladačem a zastavení překladu. jazyk C# navíc nabízí direktivu #warning,

Více

Seminář Java IV p.1/38

Seminář Java IV p.1/38 Seminář Java IV Seminář Java IV p.1/38 Rekapitulace Deklarace tříd Proměnné, metody, konstruktory, modifikátory přístupu Datové typy primitivní, objektové, pole Dědičnost Řídící konstrukce Podmínky, cykly

Více

Principy objektově orientovaného programování

Principy objektově orientovaného programování Principy objektově orientovaného programování Třídy a objekty doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz C E T

Více

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

IRAE 07/08 Přednáška č. 1 Úvod do předmětu OOP Objekt Proč OOP? Literatura, osnova předmětu viz. cvičení Základní prvek OOP sw inženýrství = model reálných objektů (věcí) člověk, auto, okno (ve windows), slovník, = model abstraktní

Více

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

11 Diagram tříd, asociace, dědičnost, abstraktní třídy 11 Diagram tříd, asociace, dědičnost, abstraktní třídy Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost diagramům tříd, asociaci,

Více

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

Paměť počítače. alg2 1 Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Data jsou v paměti reprezentována posloupnostmi bitů (bit = 0 nebo 1) Připomeňme: paměť je tvořena řadou 8-mi bitových

Více

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

Programování v C++ 3, 3. cvičení Programování v C++ 3, 3. cvičení úvod do objektově orientovaného programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Dokončení spojového

Více

Objektové programování

Objektové programování Objektové programování - přináší nové možnosti a styl programování - vytváří nový datový typ, který umí vše co standardní datové typy + to co ho naučíme - překladač se k tomuto typu chová stejně jako k

Více

Proměnné a datové typy

Proměnné a datové typy Proměnné a datové typy KAPITOLA 2 V této kapitole: Primitivní datové typy Proměnné Opakování Mezi základní dovednosti každého programátora bezesporu patří dobrá znalost datových typů. Ta vám umožní efektivní

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

Dědění, polymorfismus

Dědění, polymorfismus Programování v jazyce C/C++ Ladislav Vagner úprava Pavel Strnad Dědění. Polymorfismus. Dnešní přednáška Statická a dynamická vazba. Vnitřní reprezentace. VMT tabulka virtuálních metod. Časté chyby. Minulá

Více

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.

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. 23. Třídy, generické třídy, instance, skládání, statické metody a proměnné. Zapouzdření, konstruktory, konzistence objektu, zpřístupnění vnitřní implementace, modifikátory public a private. Polymorfismus,

Více

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda 1. Lze vždy z tzv. instanční třídy vytvořit objekt? 2. Co je nejčastější příčinou vzniku chyb? A. Specifikace B. Testování C. Návrh D. Analýza E. Kódování 3. Je defenzivní programování technikou skrývání

Více

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

Programování v C++ 1, 5. cvičení Programování v C++ 1, 5. cvičení konstruktory, nevirtuální dědění 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 3 Shrnutí minule procvičené

Více

10 Balíčky, grafické znázornění tříd, základy zapozdření

10 Balíčky, grafické znázornění tříd, základy zapozdření 10 Balíčky, grafické znázornění tříd, základy zapozdření Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost příkazům balíčkům, grafickému

Více

Java Výjimky Java, zimní semestr

Java Výjimky Java, zimní semestr Java Výjimky 1 Výjimky (exceptions) hlášení a ošetření chyb výjimka signalizuje nějaký chybový stav výjimka = instance třídy java.lang.throwable dvě podtřídy java.lang.error a java.lang.exception konkrétní

Více

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová Programové konvence, dokumentace a ladění 2. přednáška Alena Buchalcevová Proč dodržovat programové konvence? velkou část životního cyklu softwaru tvoří údržba údržbu provádí většinou někdo jiný než autor

Více

Jazyk C# (seminář 3)

Jazyk C# (seminář 3) Jazyk C# (seminář 3) Pavel Procházka KMI October 8, 2014 Motivace Největší využití v programování okenních aplikací a GUI knihoven. Data reprezentujeme pomocí objektů (tříd), máme tedy ucelený pohled na

Více

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

4.4.2012. 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 Základy programování (IZAPR, IZKPR) Přednáška 5 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky Příkazy cyklu -

Více

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

PB161 Programování v jazyce C++ Přednáška 7 PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z

Více

Osnova přednášky. Programové prostředky řízení Úvod do C# II. Přístup ke členům. Členy (Members)

Osnova přednášky. Programové prostředky řízení Úvod do C# II. Přístup ke členům. Členy (Members) Osnova přednášky Programové prostředky řízení Úvod do C# II. Členy (Members) Jmenné prostory (Namespaces) Třídy (Classes) Struktury (Structs) Pavel Balda Západočeská univerzita v Plzni, FAV, KKY 2 Členy

Více

Objektově orientované programování

Objektově orientované programování Objektově orientované programování Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 7 A0B36PR1 Programování 1 Jan Faigl, 2015 A0B36PR1 Přednáška 7: Objektově

Více

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

Vytváření a použití knihoven tříd Vytváření a použití knihoven tříd doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Prostory jmen motivace spolupráce

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu

Více

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

PB161 Programování v jazyce C++ Přednáška 7 PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz

Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz Upozornění pro čtenáře a uživatele této knihy Všechna práva vyhrazena. Žádná část této tištěné či elektronické knihy nesmí být reprodukována a šířena

Více

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

Třídy a dědičnost. A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické Třídy a dědičnost A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické Dnešní témata Dědičnost Kompozice Typ String Třídy a dědičnost Dopravní prostředek Vzdušný Pozemní Vodní

Více

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem Jazyk C++ 1 Blok 3 Objektové typy jazyka C++ Studijní cíl Ve třetím bloku bude představen a rozebrán nejdůležitější objektový typ jazyka C++ a to sice třída. Po absolvování bloku bude student schopen navrhovat

Více

6. Příkazy a řídící struktury v Javě

6. Příkazy a řídící struktury v Javě 6. Příkazy a řídící struktury v Javě Příkazy v Javě Příkazy v Javě Řídicí příkazy (větvení, cykly) Přiřazovací příkaz = Řízení toku programu (větvení, cykly) Volání metody Návrat z metody - příkaz return

Více

Generické typy. Podrobněji: The Java Language Specification ( Third Edition ) , 18

Generické typy. Podrobněji: The Java Language Specification ( Third Edition ) , 18 Generické typy jsou třídy či interfejsy deklarující tzv. typové parametry jimiž: - systematizují typovou kontrolu kompilátorem, - vyjadřují jasněji smysl, zlepšují čitelnost a robustnost programu, - ulehčují

Více

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu. Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus

Více

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

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové

Více

Abstraktní datové typy: zásobník

Abstraktní datové typy: zásobník Abstraktní datové typy: zásobník doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Abstraktní datové typy omezené rozhraní

Více

Design time - vytváří se program - metadata - vytváří se např. třída. Run time - běh programu - ukládá se do paměti počítače - vytváří se např.

Design time - vytváří se program - metadata - vytváří se např. třída. Run time - běh programu - ukládá se do paměti počítače - vytváří se např. Design time - vytváří se program - metadata - vytváří se např. třída Run time - běh programu - ukládá se do paměti počítače - vytváří se např. objekt rysy javy - zavedení jasného pořádku a etikety - přísné

Více

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

Bridge. Známý jako. Účel. Použitelnost. Handle/Body Bridge Bridge Známý jako Handle/Body Účel odděluje abstrakci (rozhraní a jeho sémantiku) od její konkrétní implementace předchází zbytečnému nárůstu počtu tříd při přidávání implementací používá se v době

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

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

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu Seminář Java Zavádění tříd Radek Kočí Fakulta informačních technologií VUT Duben 2008 Radek Kočí Seminář Java Zavádění tříd 1/ 16 JVM zavádí třídy dynamicky Class loader objekt schopný zavádět třídy abstraktní

Více

9. přednáška - třídy, objekty

9. přednáška - třídy, objekty třída String a její použití kolekce, typované kolekce 9. přednáška - třídy, objekty Algoritmizace (Y36ALG), Šumperk - 9. přednáška 1 Třída String Objekty knihovní třídy String jsou řetězy znaků Od ostatních

Více

Mnohotvarost (polymorfizmus)

Mnohotvarost (polymorfizmus) Mnohotvarost (polymorfizmus) TYPY MNOHOTVAROSTI... 2 PŘETĚŽOVÁNÍ METOD, PŘETĚŽOVÁNÍ OPERACÍ... 3 PŘETÍŽENÍ OPERÁTORŮ... 4 ČASTO PŘETĚŽOVANÉ OPERÁTORY... 4 PŘEPISOVÁNÍ... 7 VIRTUÁLNÍ METODY... 10 SEZNAM

Více

JAVA. Krátke poznámky:

JAVA. Krátke poznámky: JAVA Krátke poznámky: Vše je definováno ve třídách; Žádné funkce mimo třídy Skoro všetko je objekt, výnimka sú premenné (napr. int) Neexistuje operátor delete Rušenie objektov výlučne cez Garbage Collector

Více

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní Základy jazyka C# doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah přednášky Architektura.NET Historie Vlastnosti

Více

Objekty strana 11. Abstrakce je základní objektovou vlastností. Skutečnost, kterou chceme do programu promítnout,

Objekty strana 11. Abstrakce je základní objektovou vlastností. Skutečnost, kterou chceme do programu promítnout, Objekty strana 11 2. Objekty Java je objektově orientovaný programovací jazyk přenositelný na různé platformy. Pracuje tedy s objekty. Co to vlastně jsou objekty? Jedná se o abstrakci z reality, každý

Více

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

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1 24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE AUTOR DOKUMENTU: MGR. MARTINA SUKOVÁ DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 UČIVO: STUDIJNÍ OBOR: PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) INFORMAČNÍ TECHNOLOGIE

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

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

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické Třídy, polymorfismus A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické Polymorfizmus ~ vícetvarost Polymorfizmus základní vlastnost objektového přístupu základní princip polymorfismu:

Více

Programovací jazyk Java

Programovací jazyk Java 1 z 8 Programovací jazyk Java Enumerace (výčty) Složitější definice výčtového typu Konstanty anonymních typů Výčtový typ a datové struktury Java packaging JAR archivy CLASSPATH Apache Ant 10. přednáška

Více

KTE / ZPE Informační technologie

KTE / ZPE Informační technologie 7 KTE / ZPE Informační technologie Ing. Petr Kropík, Ph.D. email: pkropik@kte.zcu.cz tel.: +420 377 63 4639, +420 377 63 4606 (odd. informatiky) Katedra teoretické elektrotechniky FEL ZČU Plzeň - ternární

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

Objektově orientované programování

Objektově orientované programování 10. října 2011 Pragmatické informace Volitelný předmět, zápočet: zápočtový program(s dokumentací), aktivní účast na cvičení(body v CodExu), praktický test, zkouška: zkoušková písemka na objektový návrh

Více

Windows je registrovaná obchodní známka firmy Microsoft v USA a v ostatních zemích.

Windows je registrovaná obchodní známka firmy Microsoft v USA a v ostatních zemích. Sun, Sun Microsystems, Java a všechny obchodní známky a loga obsahující Sun nebo Java jsou ochrannými známkami nebo registrovanými ochrannými známkami firmy Sun Microsystems, Inc. v USA a v ostatních zemích.

Více

1. ÚVOD... 3 2. ZÁKLADY JAZYKA...

1. ÚVOD... 3 2. ZÁKLADY JAZYKA... Obsah 1. ÚVOD... 3 2. ZÁKLADY JAZYKA... 4 PROMĚNNÉ... 4 PRIMITIVNÍ DATOVÉ TYPY... 5 Deklarace proměnné promitivního typu...5 Konstanty... 6 Přetypování... 7 Přetečení... 7 VÝRAZY A OPERÁTORY... 8 Aritmetické

Více

Jazyk C# (seminář 6)

Jazyk C# (seminář 6) Jazyk C# (seminář 6) Pavel Procházka KMI 29. října 2014 Delegát motivace Delegáty a události Jak docílit v C# funkcionální práce s metodami v C je to pomocí pointerů na funkce. Proč to v C# nejde pomocí

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Řídicí struktury, standardní metody Problematika načítání pomocí Scanner Některé poznámky k příkazům Psaní kódu programu Metody třídy Math Obalové třídy primitivních datových

Více

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth Evropský sociální fond. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace Ing. Ondřej Guth Katedra teoretické informatiky Fakulta informačních technologií České vysoké učení technické v Praze

Více

Obsah přednášky. Postup při vytváření objektů. Postup při vytváření objektů. Alokace paměti. Inicializace hodnot atributů

Obsah přednášky. Postup při vytváření objektů. Postup při vytváření objektů. Alokace paměti. Inicializace hodnot atributů Základy programování (IZAPR, IZKPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky Postup při vytváření

Více

Dědičnost (inheritance)

Dědičnost (inheritance) Dědičnost (inheritance) Úvod Umožňuje objektům převzít (zdědit) členy jiných objektů a pouze je rozšířit o Auto: lze odvodit Vztah je osobní auto, cisterna jsou auta Základní pojmy Bázová třída (rodič)

Více