Dědičnost, rozhraní (interface)

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

Download "Dědičnost, rozhraní (interface)"

Transkript

1 Dědičnost, rozhraní (interface) Obsah kapitoly DĚDIČNOST... 1 CHYBNÉ POUŽITÍ DĚDIČNOSTI... 8 VÍCENÁSOBNÁ DĚDIČNOST VÍCEÚROVŇOVÁ HIERARCHIÍ TŘÍD ROZHRANÍ (INTERFACE) SEZNAM OBRÁZKŮ SEZNAM PROGRAMŮ Cílem kapitoly je ukázat možnosti opětného použití rozhraní (dědičnosti) a rozhraní. Klíčové pojmy: Dědičnost, rozhraní (interface). Dědičnost Dědění je proces, jímž jeden objekt získá vlastnosti a metody jiného. Slouží k podpoře systému hierarchické klasifikace. Dědění odstraňuje nadbytečnost při definování tříd se společnými vlastnostmi a metodami. Společné vlastnosti a metody se definují v základní třídě a specifické vlastnosti a metody se uvedou v odvozených třídách. Je-li třída U téměř shodná s T, bylo by vhodné, aby U mohla požádat T o použití jejích operací. T nadřízenou (nadřazenou) třídou, základní třída U podřízenou (podřazenou) třídou, odvozená třída Dědičnost umožňuje budovat software postupně: Nejprve vytvořit třídy umožňující vyřešit nejobecnější případ. Potom přidat specializovanější třídy, které dědí z prvních tříd. Mohou použít jejich operace a atributy. Pro vyjádření dědičnosti lze použít slovo je například: větroň je letadlo kapitola 11 1/22

2 Větroň je Letadlo Obrázek 1 Příklad UML diagramu, znázorňujícího dědičnost Dědičnost je proces, prostřednictvím kterého může jeden objekt získávat vlastnosti jiného objektu. Podporuje hierarchickou klasifikaci. Většina našich znalostí o okolním světě má hierarchickou strukturu. Gold Delicious jablko ovoce potrava Třída potrava má jisté vlastnosti: nutriční hodnotu, kalorie, atd. Lze je zpětně aplikovat na podtřídu ovoce. Třída ovoce má oproti třídě potrava jisté specifické vlastnosti: kyselé ovoce sladké a podobně. Třída jablko má oproti třídě ovoce další specifické vlastnosti: roste na stromě, má křehkou dužinu a podobně. Jablko Gold Delicious dědí všechny vlastnosti nadřazených tříd a přitom má jistou kvalitu, která jej činí jedinečným. Pokud bychom nevyužívali dědičnost, musel by mít každý objekt explicitně deklarovány všechny svoje vlastnosti. Dědičnost umožní deklarovat v rámci třídy pouze jedinečné vlastnosti. Ostatní vlastnosti může zdědit z nadřazených tříd. Objekty základní třídy se často ani nedefinují. Základní třída je zde proto, aby zapouzdřovala obecné vlastnosti a metody pro použití v odvozených třídách. Dedičnost Mechanismus, jehož prostřednictvím může 1 třída zdědit vlastnosti jiné třídy. Odvozená třída Základní třída Obrázek 2 UMLdiagram, znázorňující dědičnost kapitola 11 2/22

3 Obecný tvar zápisu dědění třídy: class odvozená: základní // definice třídy Přístupové specifikátory: private - privátní protected - chráněné veřejné internal interní můžeme používat pouze v rámci aktuálního programu Jak potomek dědí přístupová práva ke složkám předka určuje tabulka: Přístupový specifikátor Třída Potomci Ostatní Public ano ano ano internal protected ano ano ne protected ano ano ne internal ano ne ne private ano ne ne Pro privátní členy třídy z hlediska odvozené třídy platí: Jsou nepřístupné zachování zapouzdření. Veřejné členy jsou dostupné odvozeným třídám i jiným funkcím (včetně Mainu) soukromé členy nejsou dostupné odvozeným třídám, chráněné jsou. Program 1 Program ilustrující dědičnost třídy Y ze třídy X class X int i; X() // konstruktor X Console.WriteLine("Konstruktor X"); i=0; void nastav_i_x(int ii)i=ii; int vrat_i_x() Console.Write("vrat_i_X(): "); return i; ; class Y : X int i; Y() // konstruktor Y Console.WriteLine("Konstruktor Y"); i=0; void nastav_i_y(int ii)i=ii; int vrat_i_y() kapitola 11 3/22

4 ; Console.Write("vrat_i_Y(): "); return i; class Program static void Main() Y y=new Y(); Console.WriteLine("0", y.vrat_i_y()); Console.WriteLine("0", y.vrat_i_x()); y.nastav_i_y(20); // volání metod třídy Y Console.WriteLine("0", y.vrat_i_y()); // Přístup ke vnořenému objektu: // vnější.vnitřní.metoda() y.nastav_i_x(10); // volání metod třídy X Console.WriteLine( "0",y.vrat_i_X()); Vypíše se: Konstruktor X Konstruktor Y vrat_i_y(): 0 vrat_i_x(): 0 vrat_i_y(): 20 vrat_i_x(): 10 Konstruktory nemají parametry, nastavení hodnot privátních proměnných provádíme veřejnými metodami. Zápis dědičnosti pomocí diagramu UML: Maturant je Student Obrázek 3 UML diagram příkladu dědičnosti třídy Maturant ze třídy Student Program 2 Dědičnost: Maturant je student class student protected string jmeno; protected double prumer; student(string s,double p) jmeno=s; prumer=p; kapitola 11 4/22

5 void vypis() Console.WriteLine("0 1",jmeno,prumer); ; class maturant: student double prum_mat; maturant(string s,double p,double pmat): base ( s, p) // konstruktor odvozené třídy maturant // musí předat parametry konstruktoru základní třídy student prum_mat=pmat; void vypis() Console.WriteLine("0 1",jmeno,prum_mat); ; class Program static void Main() student S1=new student("petr",1.6); student S2=new student("pavel",2.7); maturant S3=new maturant("josef",2.5,1.9); S1.vypis(); S2.vypis(); S3.vypis(); Vypíše se: Petr 1,6 Pavel 2,7 Josef 1, kapitola 11 5/22

6 Z jedné třídy může být odvozeno více různých tříd. PocetKol Delka Vozidlo +Vozidlo(int pk,int d) +zobraz() PocPas osobni +osobni(int pp, int pk, int d) +zobr() nakladni naklad +nakladni(int n, int pk,int d) +zobr() Obrázek 4 UML diagram příkladu dědičnosti tříd osobni a nakladni ze třídy Vozidlo Program 3 Osobní i nákladní je vozidlo class Vozidlo int PocetKol; int Delka; // Konstruktor Vozidlo(int pk,int d) PocetKol=pk; Delka=d; void zobraz() Console.WriteLine("Počet kol: 0", PocetKol); Console.WriteLine("Delka:0 ", Delka); ; class osobni: Vozidlo int PocPas; kapitola 11 6/22

7 // Konstruktor odvozené třídy musí převzít i parametry // pro konstruktor základní třídy osobni(int pp,int pk, int d):base(pk,d) PocPas=pp; void zobr() zobraz(); Console.WriteLine("Pocet pasazeru:0 ", PocPas); ; class nakladni: Vozidlo int naklad; // Konstruktor odvozené třídy musí převzít i parametry // pro konstruktor základní třídy nakladni(int n,int pk, int d):base(pk,d) naklad=n; void zobr() zobraz(); Console.WriteLine("Naklad:0 ", naklad); ; class Program static void Main() osobni O=new osobni(5,4,2); nakladni N=new nakladni(30000,12,6); Console.WriteLine("osobni: "); O.zobr(); Console.WriteLine("nakladni: "); N.zobr(); Vypíše se: osobni: Počet kol: 4 Delka:2 Pocet pasazeru:5 nakladni: Počet kol: 12 Delka:6 Naklad: kapitola 11 7/22

8 Obrázek 5 UML diagram pracovníků školy Osoba Zaměstnanec školy Učitel Uklízečka Interní Externí Chybné použití dědičnosti Převrácená hierarchie Osoba Zaměstnanec školy Učitel Obrázek 6 Špatné znázornění hierarchie zaměstnanců (šipky mají být otočené) Nesprávné použití dědičnosti U dědičnosti je vazba mezi odvozenou a základní třídou určena slovem je například: Automobil je vozidlo. Nelze říct: Motor je automobil. Zde je možné vazbu mezi jednotlivými třídami určit slovem má, což ukazuje na kompozici. (Automobil má motor.) Situaci zde nezlepší ani otočení šipek. Nelze říct: Automobil je motor kapitola 11 8/22

9 Automobil Motor Brzdy Kolo Motor Brzdy Kolo Automobil Obrázek 7 Nevhodně použitá dědičnost Program 4 Žárovka je světlo class Svetlo protected bool a; void Rosvit()a=true; void Zhasni()a=false; void Zobraz() if (a)console.writeline("svetlo sviti"); else Console.WriteLine("Svetlo nesviti"); ; class Zarovka : Svetlo int prikon; void Zobraz() if (a) Console.WriteLine("Žárovka svítí"); else Console.WriteLine("Žárovka nesvítí"); void NastavPrikon() Console.WriteLine("\nZadej prikon zarovky: "); prikon = Int32.Parse(Console.ReadLine()); void ZobrazPrikon() Console.WriteLine("Prikon zarovky je: 0 W", prikon); kapitola 11 9/22

10 class Program static void Main() Zarovka Z=new Zarovka(); Z.Rosvit(); Z.Zobraz(); Z.Zhasni(); Z.Zobraz(); Z.NastavPrikon(); Z.ZobrazPrikon(); Vypíše se: Žárovka svítí Žárovka nesvítí Zadej prikon zarovky: 100 Prikon zarovky je: 100 W Vícenásobná dědičnost JEDEN OBJEKT JE INSTANCÍ VÍCE NEŽ JEDNÉ TŘÍDY V C# NENÍ ZAVEDENA Dopravní letadlo je letadlo je dopravní prostředek Reálný svět často vyžaduje podtřídy s vícenásobnou dědičností. Některé OO jazyky ji nepodporují (C#, Java, Smalltalk), některé ano (C++, Eiffel). Řešením vícenásobné dědičnosti v C# je rozhraní kapitola 11 10/22

11 Společnost Klient Interní klient Externí klient Obrázek 8 UML diagram vícenásobné dědičnosti Víceúrovňová hierarchií tříd Nepleťme si vícenásobnou dědičnost s víceúrovňovou hierarchií tříd ta v C# existuje: A +a +A(int b) +~A() B +a + B(int c,int b):a(b) +~B() C -k + C(int c, int b, int d ) +~C() Obrázek 9 Příklad UML diagramu pro víceúrovňovou hierarchii tříd kapitola 11 11/22

12 Program 5 Víceúrovňová hierarchie tříd class A int a; A(int b) Console.WriteLine("Konstruktor A"); a=b; ; class B: A int a; B(int c,int b):base(b) Console.WriteLine("Konstruktor B"); a=c; ; class C: B int a; C(int c,int b,int d):base(b,d) Console.WriteLine("Konstruktor C"); a=c; ; class Program static void Main() C o=new C(10,20,30); Vypíše se: Konstruktor A Konstruktor B Konstruktor C Program 6 Víceúrovňová hierarchie - doplněno V dalším programu jsou v jednotlivých třídách doplněny metody pro výpis hodnot privátních proměnných. class A int a; A(int b) Console.WriteLine("Konstruktor A"); kapitola 11 12/22

13 ; a = b; void vypis_a_a() Console.WriteLine(a); class B : A int a; B(int c, int b) : base(b) Console.WriteLine("Konstruktor B"); a = c; void vypis_a_b() Console.WriteLine(a); ; class C : B int a; C(int c, int b, int d) : base(b, d) Console.WriteLine("Konstruktor C"); a = c; void vypis_a_c() Console.WriteLine(a); ; class Program static void Main() // Vytvoření nového objektu a předání hodnot privátním // proměnným v jednotlivých třídách. C o = new C(10, 20, 30); o.vypis_a_a(); o.vypis_a_b(); o.vypis_a_c(); Pomocí objektu odvozené třídy můžeme přistupovat k veřejným proměnným a metodám základní třídy, ale ne naopak pomocí objektu základní třídy nemůžeme přistupovat k veřejným datům a metodám odvozené třídy. Soukromé položky jsou přístupné jedině pomocí veřejných metod kapitola 11 13/22

14 Program 7 Maturant je student a je osoba Chráněné (protected) položky jsou kromě vlastních tříd přístupné z odvozených tříd ne však z Mainu. Máme základní třídu Osoba, z ní je odvozena třída Student a z ní třída Maturant. class Osoba protected string jmeno; protected int vek; Osoba(string j,int v) jmeno=j; vek = v; void vypis() Console.WriteLine("\nOsoba:"); Console.WriteLine("jmeno: 0", jmeno); Console.WriteLine("vek: 0", vek); ; class Student : Osoba protected double prumer; Student(string j, int v,double p) : base(j,v) prumer = p; new void vypis() Console.WriteLine("\nStudent:"); Console.WriteLine("jmeno: 0", jmeno); Console.WriteLine("vek: 0", vek); Console.WriteLine("prumer: 0", prumer); ; class Maturant : Student double matprum; Maturant(string j, int v, double p,double mp) : base(j, v,p) matprum = mp; new void vypis() Console.WriteLine("\nMaturant:"); Console.WriteLine("jmeno: 0", jmeno); kapitola 11 14/22

15 Console.WriteLine("vek: 0", vek); Console.WriteLine("prumer: 0", prumer); Console.WriteLine("prumer z maturitnich predmetu: 0", matprum); ; class Program static void Main() Osoba O = new Osoba("Adam", 50); Student S = new Student("Josef", 17, 2.1); Maturant M = new Maturant("Petr", 18, 2.2, 1.9); O.vypis(); S.vypis(); M.vypis(); Program 8 Třídění student dle jména a průměru Hledání nejlepšího studenta a třídění studentů dle jména a průměru class Student string jmeno; double prum; Student(string jm, double pr) jmeno = jm; prum = pr; static void prohod(ref Student a, ref Student b) Student pom; pom = a; a = b; b = pom; static void tridjmen(ref Student[] V2) int j; for (int i = 0; i < V2.Length - 1; i++) for (j = i; j < V2.Length; j++) if (V2[i].jmeno[0] > V2[j].jmeno[0]) prohod(ref V2[i], ref V2[j]); static void tridprum(ref Student[] V2) kapitola 11 15/22

16 int j; for (int i = 0; i < V2.Length - 1; i++) for (j = i; j < V2.Length; j++) if (V2[i].prum > V2[j].prum) prohod(ref V2[i], ref V2[j]); static Student Lepsi(Student S1, Student S2) return (S1.prum < S2.prum)? S1 : S2; class Pokus static void Main() Student[] V2 = new Student[] new Student("Josef",1.5), new Student("Jan",1.2), new Student("Petr",2.5), new Student("Pavel",2.1), new Student("Eva",1.9), new Student("Zuzana",1.95), new Student("Adam",2.45), new Student("Filip",2.75), new Student("Kateřina",3.5), ; Student Nej = new Student("aaa", 5); // Student.tridjmen(ref V2); foreach (Student s in V2) Nej=Student.Lepsi(Nej,s); Console.WriteLine("Nejlepsi je: 0, ktery ma prumer: 1", Nej.jmeno,Nej.prum); /* Student.tridprum(ref V2); foreach (Student s in V2) Console.WriteLine("0\t1", s.jmeno, s.prum);*/ Program 9 Nalezení nejlepšího studenta Položky jméno a prum jsou zde veřejné. Pokud by nebyly veřejné, je třeba k nim přistupovat pomocí přístupových metod. class Student string jmeno; double prum; kapitola 11 16/22

17 Student(string jm, double pr) jmeno = jm; prum = pr; string VratJmeno() return jmeno; double VratPrumer() return prum; static Student Lepsi(Student S1, Student S2) return (S1.prum < S2.prum)? S1 : S2; class Pokus static void Main() Student[] V2 = new Student[] new Student("Josef",1.5), new Student("Jan",1.2), new Student("Petr",2.5), new Student("Pavel",2.1), new Student("Eva",1.9), new Student("Zuzana",1.95), new Student("Adam",2.45), new Student("Filip",2.75), new Student("Kateřina",3.5), ; Student Nej = new Student("aaa", 5); foreach (Student s in V2) Nej=Student.Lepsi(Nej,s); Console.WriteLine("Nejlepsi je: 0, ktery ma prumer: 1", Nej.VratJmeno(),Nej.VratPrumer()); Využití přepsané (overriding) funkce ToString() pro rozložení objektu na položky. class Student string jmeno; double prum; Student(string jm, double pr) jmeno = jm; prum = pr; kapitola 11 17/22

18 static Student Lepsi(Student S1, Student S2) return (S1.prum < S2.prum)? S1 : S2; class Pokus static void Main() Student[] V2 = new Student[] new Student("Josef",1.5), new Student("Jan",1.2), new Student("Petr",2.5), new Student("Pavel",2.1), new Student("Eva",1.9), new Student("Zuzana",1.95), new Student("Adam",2.45), new Student("Filip",2.75), new Student("Kateřina",3.5), ; Student Nej = new Student("aaa", 5); foreach (Student s in V2) Nej=Student.Lepsi(Nej,s); Console.WriteLine("Nejlepsi je 0",Nej); Rozhraní (interface) Bylo řečeno, že jazyk C# (na rozdíl od C++) neumožňuje vícenásobnou dědičnost - řešením je použití rozhraní. Odvozování tříd je výkonný mechanismus, ale skutečnou sílu dědičnosti poznáte při odvozování rozhraní. Rozhraní můžeme chápat jako smlouva základní třídy s odvozenou třídou. Rozhraní v základní třídě deklaruje určité funkční členy a odvozená třída se zavazuje, že tyto funkční členy bude implementovat. Pokud tak neučiní, vznikne chyba již při překladu. Srovnání rozhraní s třídami: Třídy mají vlastnosti a metody a podle toho se chovají. Ve třídě není odděleno to, co se má dělat od toho, jak se to má dělat. Rozhraní toto oddělení co od jak poskytuje. Neobsahuje implementaci metody, ale pouze její název. Místo implementace metod pomocí rozhraní definujeme, jak má být objekt v určitém okamžiku implementován. Díky rozhraní lze vytvořit sadu souvisejících metod a vlastností, které je možné zahrnout do implementace vybrané třídy nezávisle na jejím umístění v dědičné hierarchii kapitola 11 18/22

19 Rozhraní je jakousi formou dohody mezi dvěma částmi kódu. Jakmile je jednou rozhraní definováno a je řečeno, že nějaká třída toto rozhraní implementuje, může se jakákoli klientská třída spolehnout na to, že skutečně bude obsahovat implementaci všech metod zahrnutých v daném rozhraní. Rozhraní jsou důležitou součástí v C# a mají významné postavení v programování založeném na komponentách. Rozhraní představuje definici chování, které třída implementuje. Rozhraní nikdy neobsahuje žádnou implementaci. Důsledkem toho jsou omezení: Nemůžete vytvořit instance rozhraní. V rozhraní nejsou povoleny žádné položky ani statické. V rozhraní nejsou povoleny žádné konstruktory. V rozhraní nemůžete psát modifikátor přístupu všechny položky jsou implicitně veřejné. Do rozhraní nemůžete vnořovat žádné typy (výčty, struktury, třídy, rozhraní, nebo zástupce) Není povoleno odvozovat rozhraní ze struktury nebo třídy Rozhraní vypadá jako definice třídy. Může obsahovat: metody vlastnosti indexery Žádná z těchto položek nemá tělo. Třída může dědit od jiné třídy, nebo od jednoho nebo i více rozhraní. Když třída dědí od rozhraní, musí implementovat všechny metody a vlastnosti definované v tomto rozhraní. Od rozhraní lze zdědit jen jména metod a vlastností, nikoliv konkrétní kód. Rozhraní pomáhají zobecnit třídy, neboť k definici proměnné mohou být místo jmen tříd nebo jmen struktur použita jména rozhraní. Třída pak může volat metody nebo vlastnosti, které jsou definované v rozhraní. Následující program ilustruje použití rozhraní Zvetseni, které je implementované v odvozené třídě KresleniCary. Bylo by možné definovat další odvozené třídy, které by implementovali rozhraní Zvetseni pro kružnici, čtverec a další geometrické útvary. Program 10 Implementace interface Zvetseni v odvozené třídě KresleniCary interface Zvetseni void ZvetseniX(int faktor); class KresleniCary : Zvetseni string cara; kapitola 11 19/22

20 KresleniCary(string cara) this.cara = cara; void ZvetseniX(int faktor) string puvcara = cara; for (int i = 1; i < faktor; i++) cara += puvcara; void NakresliCaru() Console.WriteLine(cara); class Program static void Main() KresleniCary KC = new KresleniCary("-"); KC.ZvetseniX(2); KC.NakresliCaru(); for (int i = 1; i < 5; i++) KC.ZvetseniX(i); KC.NakresliCaru(); Následující program ilustruje použití více rozhraní. Program 11 Dvě rozhraní Máme definovány dvě rozhraní: IsourXY, Ivypis Implementaci rozhraní můžeme testovat operátorem is. interface IsourXY void NastavX(int x); int VratX(); void NastavY(int y); int VratY(); interface Ivypis void Vypis(); class sourxy :IsourXY, Ivypis int x; int y; void NastavX(int x) this.x = x; int VratX() return x; void ZobrazX() Console.WriteLine("0", x); void NastavY(int y) kapitola 11 20/22

21 this.y = y; int VratY() return y; void ZobrazY() Console.WriteLine("0", y); void NastavXY() Console.SetCursorPosition(VratX(), VratY()); void Vypis() Console.WriteLine("Výpis textu na nastavenou pozici"); class Program static void Main() sourxy B = new sourxy(); if (B is IsourXY) Console.WriteLine("Je implementovano rozhrani IsourXY"); if (B is Ivypis) Console.WriteLine("Je implementovano rozhrani Ivypis"); B.NastavX(40); B.NastavY(12); B.NastavXY(); B.Vypis(); V programu je test, zda objekt B implementuje rozhraní IsourXY a Ivypis. Jestliže ano, jsou vypsány příslušné texty kapitola 11 21/22

22 Seznam obrázků Obrázek 1 Příklad UML diagramu, znázorňujícího dědičnost... 2 Obrázek 2 UMLdiagram, znázorňující dědičnost... 2 Obrázek 3 UML diagram příkladu dědičnosti třídy Maturant ze třídy Student... 4 Obrázek 4 UML diagram příkladu dědičnosti tříd osobni a nakladni ze třídy Vozidlo... 6 Obrázek 5 UML diagram pracovníků školy... 8 Obrázek 6 Špatné znázornění hierarchie zaměstnanců (šipky mají být otočené)... 8 Obrázek 7 Nevhodně použitá dědičnost... 9 Obrázek 8 UML diagram vícenásobné dědičnosti Obrázek 9 Příklad UML diagramu pro víceúrovňovou hierarchii tříd Seznam programů Program 1 Program ilustrující dědičnost třídy Y ze třídy X... 3 Program 2 Dědičnost: Maturant je student... 4 Program 3 Osobní i nákladní je vozidlo... 6 Program 4 Žárovka je světlo... 9 Program 5 Víceúrovňová hierarchie tříd Program 6 Víceúrovňová hierarchie - doplněno Program 7 Maturant je student a je osoba Program 8 Třídění student dle jména a průměru Program 9 Nalezení nejlepšího studenta Program 10 Implementace interface Zvetseni v odvozené třídě KresleniCary Program 11 Dvě rozhraní kapitola 11 22/22

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

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

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

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

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

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

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

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

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

Ú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

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

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

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

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

Programování v C++ 1, 6. cvičení Programování v C++ 1, 6. cvičení dědičnost, polymorfismus 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

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

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

24. listopadu 2013, Brno Připravil: David Procházka

24. listopadu 2013, Brno Připravil: David Procházka 24. listopadu 2013, Brno Připravil: David Procházka Dědičnost Základy objektového návrhu Časná a pozdní vazba Strana 2 / 22 Obsah přednášky 1 Časná a pozdní vazba 2 Rozhraní pro dědičnost 3 Konstruktory

Více

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33 Objekt jako proměnná Objekty a metody Objekt = proměnná referenčního typu vznik pomocí new, chování viz pole jako referenční proměnná minulý semestr Stack Heap objekt ref this 10 20 atr1 atr2 jinyobjekt

Více

20. Projekt Domácí mediotéka

20. Projekt Domácí mediotéka Projekt Domácí mediotéka strana 211 20. Projekt Domácí mediotéka 20.1. Základní popis, zadání úkolu V projektu Domácí mediotéka (Dome) se jednoduchým způsobem evidují CD a videa. Projekt je velmi jednoduchý

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

Základy objektově orientovaného programování (OOP)

Základy objektově orientovaného programování (OOP) Základy objektově orientovaného programování (OOP) Obsah Obsah... 1 Cíl kapitoly... 1 Jazyky procedurální a objektově orientované... 2 Pojem objekt... 2 Pojem třída... 4 Znázornění třídy v diagramech UML...

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

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

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

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

NPRG031 Programování II 1 / :25:46

NPRG031 Programování II 1 / :25:46 NPRG031 Programování II 1 / 26 28. 2. 2018 11:25:46 Objekty Svět se skládá z objektů! konkrétní x abstraktní hmatatelné x nehmatatelné (letadlo) x (chyba v programu) Objekty mohou obsahovat jiné objekty

Více

NMIN201 Objektově orientované programování 1 / :36:09

NMIN201 Objektově orientované programování 1 / :36:09 NMIN201 Objektově orientované programování 1 / 26 8.10.2013 15:36:09 Objekty Svět se skládá z objektů! konkrétní x abstraktní hmatatelné x nehmatatelné (letadlo) x (chyba v programu) Objekty mohou obsahovat

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

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

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

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Dynamicky vázané metody. Pozdní vazba, virtuální metody Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:

Více

Programování II. Abstraktní třída Vícenásobná dědičnost 2018/19

Programování II. Abstraktní třída Vícenásobná dědičnost 2018/19 Programování II Abstraktní třída Vícenásobná dědičnost 2018/19 Osnova přednášky Polymorfismus - důsledky. Abstraktní třída. Vícenásobná dědičnost. Polymorfismus - důsledky Polymorfismus Polymorfismus je

Více

Objekt. základní prvek v OOP. má vlastnosti. má metody. vznikne vytvoření nové instance definován pomocí třídy

Objekt. základní prvek v OOP. má vlastnosti. má metody. vznikne vytvoření nové instance definován pomocí třídy 3. ročník Objekt základní prvek v OOP má vlastnosti charakterizují objekt (barva, počet osob) má metody definují to, co objekt umí (vypni motor, připoj se) vznikne vytvoření nové instance definován pomocí

Více

Dědičnost. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 23.března

Dědičnost. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 23.března Dědičnost Cíle lekce Cílem lekce je naučit se pracovat a využívat dědičnosti při návrhu a tvorbě programů. Lekce je zaměřena hlavně na jednoduchou dědičnost. Bude rovněž vysvětlen rozdíl mezi dědičností

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

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

State. Známý jako. Účel. Použitelnost. Stav, Object for States. umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu

State. Známý jako. Účel. Použitelnost. Stav, Object for States. umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu State State Známý jako Stav, Object for States Účel umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu Použitelnost chování objektu závisí na jeho stavu, který se mění za

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

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

Pokud neuvedeme override, vznikne v synu nová (nevirtuální) metoda (a pochopitelně se nezavolá, jak bychom

Pokud neuvedeme override, vznikne v synu nová (nevirtuální) metoda (a pochopitelně se nezavolá, jak bychom Poznámky k virtuálním metodám aneb co když zkoušíme překladač zlobit... Pokud neuvedeme override, vznikne v synu nová (nevirtuální) metoda (a pochopitelně se nezavolá, jak bychom chtěli). Pokud neuvedeme

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

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

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

7.5 Diagram tříd pokročilé techniky

7.5 Diagram tříd pokročilé techniky 7.5 Diagram tříd pokročilé techniky Stereotypy - jeden ze základních prostředků rozšiřitelnosti UML - pro modelovací konstrukce neexistující v UML, ale podobné předdefinované v UML definované uživatelem

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

Ú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

Dalším příkladem může být například výstup dat na různá zařízení, souborů, grafických rozhraní, sítě atd.

Dalším příkladem může být například výstup dat na různá zařízení, souborů, grafických rozhraní, sítě atd. 1. Zapouzdření Cíl látky Tento blok nejdříve přiblíží zásadu zapouzdření a odpoutání kódu a po té na relacích, jako jsou asociace, agregace a kompozice, vysvětlí jak lze objektový zdrojový kód zapouzdřovat

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

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

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

Programování II. Dědičnost změna chování 2018/19

Programování II. Dědičnost změna chování 2018/19 Programování II Dědičnost změna chování 2018/19 Osnova přednášky Rozšíření chování. Změna chování. Příklad. Rozšíření chování Když rozšiřujeme chování Můžeme bezpečně použít to, co už máme. Nehrozí žádný

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

Java - řazení objektů

Java - řazení objektů Java - řazení objektů Kapitola seznamuje se základními principy řazení objektů Klíčové pojmy: Přirozené řazení, absolutní řazení, ideální porovnávatelná třída ŘAZENÍ OBJEKTŮ U objektů není příliš jasné,

Více

11. Dědičnost. Dědičnost strana 103

11. Dědičnost. Dědičnost strana 103 Dědičnost strana 103 11. Dědičnost V této kapitole si vysvětlíme jeden ze základních pojmů objektově orientovaného programování dědičnost (inheritance). S ní souvisejí i následující témata: předek a potomek

Více

Dědičnost. seskupování tříd do hierarchie. potomek získá všechny vlastnosti a metody. provádí se pomocí dvojtečky za názvem třídy.

Dědičnost. seskupování tříd do hierarchie. potomek získá všechny vlastnosti a metody. provádí se pomocí dvojtečky za názvem třídy. 3. ročník Dědičnost seskupování tříd do hierarchie nadtyp-podtyp potomek získá všechny vlastnosti a metody kromě označených jako private provádí se pomocí dvojtečky za názvem třídy Polymorfismus všude

Více

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám. 13 Rozhraní, výjimky 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 rozhraním a výjimkám. Doba nutná k nastudování 2 2,5 hodiny

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Dynamická alokace paměti Jazyky C a C++ poskytují programu možnost vyžádat si část volné operační paměti pro

Více

Chování konstruktorů a destruktorů při dědění

Chování konstruktorů a destruktorů při dědění Dědičnost V objektově orientovaném programování je dědičnost způsob, jak vytvořit novou třídu použitím již existujících definic jiných tříd. Takto vytvořené třídy přebírají vlastnosti a metody svého předka

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

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

9. Polymorfismus a rozhraní

9. Polymorfismus a rozhraní Polymorfismus a rozhraní strana 73 9. Polymorfismus a rozhraní Tato kapitola navazuje na základní informace o objektech v kapitole 2, zde se budeme zabývat přetěžováním metod, polymorfismem a rozhraními.

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

Třída. Atributy. Operace

Třída. Atributy. Operace Class Diagrams Třída Atributy Operace Třída Třída je jakýsi prototyp objektů. Za třídou si můžeme představit množinu jejích instancí. Každý objekt dané třídy má stejnou množinu atributů (proměnných) a

Více

Jazyk C++ II. Šablony a implementace

Jazyk C++ II. Šablony a implementace Jazyk C++ II Šablony a implementace AR 2013/2014 Jazyk C++ II Úvod Dědičnost a kompozice nejsou vždy tou správnou odpovědí na požadavky znovupoužitelnosti kódu. Proto máme možnost definování určité třídy

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

Objektově orientovaný přístup

Objektově orientovaný přístup Objektově orientovaný přístup 1 Historie programovacích jazyků 1945: John von Neumann článek o nové metodě pro ukládání programů 1945: Grace Hopper poprvé termín "bug" 1946: Konrad Zuse Plankalkul - první

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

7.5 Diagram tříd pokročilé techniky

7.5 Diagram tříd pokročilé techniky 7.5 Diagram tříd pokročilé techniky Stereotypy - jeden ze základních prostředků rozšiřitelnosti UML - pro modelovací konstrukce neexistující v UML, ale podobné předdefinované v UML definované uživatelem

Více

návrhový vzor Singleton.

návrhový vzor Singleton. KAPITOLA 2 Návrhový vzor Singleton Jazyk PHP 5 vám pomocí klíčových slov public, protected a private umožňuje kontrolovat, kdo získá přístup k určitým atributům a metodám třídy. Dále vám jazyk PHP 5 umožňuje

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

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

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Využití OOP v praxi -- Knihovna PHP -- Interval.cz Page 1 of 6 Knihovna PHP Využití OOP v praxi Po dlouhé teorii přichází na řadu praxe. V následujícím textu si vysvětlíme možnosti přístupu k databázi pomocí různých vzorů objektově orientovaného programování

Více

Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo

Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo Viditelnost Přístup ke třídám i jejim prvkům lze (podobně jako např. v C++) regulovat. Přístupem se rozumí jakékoli použití dané třídy, prvku

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

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

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň

Více

Programování II. Polymorfismus

Programování II. Polymorfismus Programování II Polymorfismus Osnova přednášky Vztah přetížení, překrytí a protected přístupu. Co je polymorfismus? Příklad. Přetížení, překrytí, protected Přetížení x překrytí Přetížením řešíme doplnění

Více

Funkční objekty v C++.

Funkční objekty v C++. Funkční objekty v C++. Funkční objekt je instance třídy, která má jako svou veřejnou metodu operátor (), tedy operátor pro volání funkce. V dnešním článku si ukážeme jak zobecnit funkci, jak používat funkční

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

OOT Objektově orientované technologie

OOT Objektově orientované technologie OOT Objektově orientované technologie Logická struktura systému (Diagram tříd) Daniela Szturcová Institut geoinformatiky, HGF Osnova Třídy Statický pohled na systém Atributy a operace, řízení přístupu

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

Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.

Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object. Objekty v PHP 5.x This is an object-oriented system. If we change anything, the users object. Objektové PHP Objekty se poprvé objevili v PHP ve verzi 4. Nepříliš zdařilý pokus. Programátoři získali nedůvěru

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

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března Polymorfismus Cíle lekce Cílem lekce je vysvětlit význam pojmu polymorfismus jako základní vlastnosti objektově orientovaného programování. Lekce objasňuje vztah časné a pozdní vazby a jejich využití.

Více

C# - OOP (object oriented programming)

C# - OOP (object oriented programming) C# - OOP (object oriented programming) Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí OOP proč? Velmi využívaný přístup k programování

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

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ Vstupy a výstupy pokračování Kódování textů Texty (řetězce nebo znaky) v jazyce C# jsou v paměti uloženy v kódování označovaném běžně Unicode (kódová stránka 1200).

Více

7.3 Diagramy tříd - základy

7.3 Diagramy tříd - základy 7.3 Diagramy tříd - základy - popisuje typy objektů a statické vztahy mezi nimi Objednávka -datumpřijetí -předplacena -číslo -cena +vyřiď() +uzavři() {if Objednávka.zákazník.charakteristika = 'nejistý'

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

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

Zapouzdření. Tomáš Pitner, upravil Marek Šabo Zapouzdření Tomáš Pitner, upravil Marek Šabo Co je zapouzdření Naprosto zásadní vlastnost objektového přístupu, možná nejzásadnější Jde o spojení dat a práce s nimi do jednoho celku - objektu Data jsou

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++ Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++ Dědičnost tříd Dědičnost umožňuje vytvářet nové třídy z tříd existujících tak, že odvozené třídy (tzv. potomci) dědí vlastnosti

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

7.3 Diagramy tříd - základy

7.3 Diagramy tříd - základy 7.3 Diagramy tříd - základy - popisuje typy objektů a statické vztahy mezi nimi Objednávka -datumpřijetí -předplacena -číslo -cena +vyřiď() +uzavři() {if Objednávka.zákazník.charakteristika = 'nejistý'

Více

IRAE 07/08 Přednáška č. 7. Začátek (head)

IRAE 07/08 Přednáška č. 7. Začátek (head) Fronta (Queue) FIFO First In First Out (první dovnitř první ven) Vložení položky (Enqueue) Vyjmutí položky (Dequeue) Přidávání prvků Konec (Tail) Začátek (head) na jedné straně (konec) Odebírání prvků

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

Ú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

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

Diagramy tříd - základy

Diagramy tříd - základy Diagramy tříd - základy - popisuje typy objektů a statické vztahy mezi nimi Objednávka Zákazník -datumpřijetí -předplacena -číslo -cena +vyřiď() +uzavři() {if Objednávka.zákazník.charakteristika = 'nejistý'

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

Abstraktní třídy, polymorfní struktury

Abstraktní třídy, polymorfní struktury Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní třídy, polymorfní struktury BI-PA2, 2011, Přednáška 9 1/32 Abstraktní třídy, polymorfní struktury Ing. Josef Vogel, CSc Katedra softwarového inženýrství

Více