Mnohotvarost (polymorfizmus)
|
|
- Zdeněk Kučera
- před 7 lety
- Počet zobrazení:
Transkript
1 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 SEZNAM OBRÁZKŮ SEZNAMPROGRAMŮ Cílem kapitoly je ukázat možnosti použití mnohotvarosti v objektově orientovaném programování. Klíčové pojmy: Mnohotvarost, přepisování, přetěžování metod a operátorů, virtuální metody. Jsou dvě definice mnohotvarnosti : 1. Mnohotvarost je prostředek, jehož pomocí může být jediný název operace nebo atributu definován na základě více než jedné třídy a může nabývat různých implementací v každé z těchto tříd. 2. Mnohotvarost je vlastnost, jejímž prostřednictvím může atribut nebo proměnná ukazovat (obsahovat identifikátor) na objekty různých tříd v různých okamžicích. Jako příklad mnohotvarosti rozeberme práci s geometrickým tvarem Polygon Obrázek 1 Různé polygony Mohli bychom vytvořit třídu Polygon, která by umožňovala pracovat s různými polygony. Třída Polygon by mohla obsahovat operace: Vypočítat plochu metoda vzítplochu pro obecný polygon je to složitý algoritmus u některých podtříd to je jednoduchý algoritmus Uvažujeme objekt dvědtvar kapitola 12 1/12
2 v době překladu nemusíme vědět, do jaké třídy objekt patří (Tvar, Kruh, Ctverec, Trojúhelník) až za běhu se aktivuje odpovídající algoritmus výpočtu pro zprávu: dvědtvar.vzítplochu cílový objekt ví, jak spočítat svou plochu Následující diagram znázorňuje odvození tříd Kruh, Čtverec a Trojúhelník ze základní třídy Tvar. Tvar Nakresli() Smaž() Přesuň() VezmiBarvu() NastavBarvu() Kruh Čtverec Trojúhelník PřeklopSvisle() PřeklopVodorovně() Obrázek 2 Odvození tříd Kruh, Čtverec, Trojúhelník ze základní třídy Tvar Typy mnohotvarosti a) přetěžování (overloading) b) přepisování (overriding) c) dynamické vázání a) Přetěžování názvu nebo symbolu daný název (symbol) má několik operací (operátorů) definovaných v 1 třídě. Jak se zjistí konkrétní kód? Podle počtu a typu argumentů. b) Přepisování změna definované metody zadané v nadřízené třídě v některé z jejích podřízených tříd. c) Dynamické vázání vázání za běhu, pozdní vázání. Technika, jejímž prostřednictvím se konkrétní vykonávaná část kódu zjišťuje až za běhu aplikace kapitola 12 2/12
3 Přetěžování metod, přetěžování operací Zavedení stejnojmenných metod lišících se parametry. Příklad: produkt1.snížitcenu() produkt1.snížitcenu(procento) Přetěžování metod znamená, že dvě, nebo více metod má stejné jméno. Příbuzné činnosti lze realizovat stejnojmennou metodou - přehlednější program. Přetížené metody se mohou lišit typem, nebo počtem argumentů. Program 1 Přetížená metoda pro výpočet absolutní hodnoty Následující program ilustruje definování a použití přetížené metody abs. Jednotlivé přetížené metody se liší typem argumentu. using System; class Cislo public int abs(int n) return (n >= 0)? n : -n; public long abs(long n) return (n >= 0)? n : -n; public double abs(double n) return (n >= 0)? n : -n; class M static void Main() Cislo c=new Cislo(); Console.WriteLine("0", c.abs(-10)); Console.WriteLine("0", c.abs( l)); Console.WriteLine("0", c.abs(-10.01)); Console.ReadLine(); Program 2 Přetěžování metod, lišících se počtem argumentů Následující program uzkazuje použití přetížené metody sum s jedním a se dvěma argumenty. using System; class Soucty public double sum(float a) return a + a; public double sum(float a, float b) return a + b; kapitola 12 3/12
4 class M static void Main() Soucty s = new Soucty(); Console.WriteLine("0", s.sum(10)); Console.WriteLine("0", s.sum(10, 2)); Console.ReadLine(); Návratový typ není dostatečným rozdílem, který by dovolil přetížit metodu. Přetížení operátorů Přetížením operátoru je možné definovat novou funkčnost operátoru nad třídami, nebo strukturami, takže lze určité funkce zapisovat pomocí operátorů. Nejužitečnější je tato možnost u takových datových typů, kde je zřejmé, co který operátor dělá. Uživateli se tak nabídne možnost úsporného vyjádření. Přetěžování operátorů se podobá přetěžování metod. Přetížený operátor neztrácí svůj původní význam, ale vzhledem ke třídě, pro kterou je definovaný, získává další významy. Obecný tvar členské funkce operátoru: public static Návratový_typ operator#(seznam_argumentu) // Operace, která má být provedena Návratovým typem bývá často třída, pro kterou je operátor definovaný. Omezení pro přetěžování operátorů Priorita operátoru nemůže být měněna Nemůže být měněn počet operandů Nemůžeme přetížit operátory:. ::.*? Často přetěžované operátory +, ==,!= kapitola 12 4/12
5 Program 3 Přetížení operátoru + V následujícím programu je definovaná třída coord, která přetěžuje operátor + pro sčítání souřadnic dvou bodů. Třída coord má položky: Soukromé celočíselné proměnné x,y pro uchování souřadnic bodu. Dva konstruktory: Bez parametrů, který nuluje hodnoty x,y Se dvěmi parametry, které slouží pro nastavení hodnot souřadnic x,y Metodu getxy, která předává hodnoty souřadnic x,y do volající jednotky odkazem přes parametry. Metodu, která přetěžuje operator +, takže ji je možné použít pro sčítání souřadnic dvou bodů. V Mainu jsou vytvořeny dva body o1, o2 se zadanými souřadnicemi a třetí bod o3, jehož x- ová souřadnice se bude rovnat součtu x-ových souřadnic bodů o1 a o2 a jehož y-ová souřadnice se bude rovnat součtu y-ových souřadnic bodů o1 a o2. Součet se vytvoří pomocí přetíženého operátoru +. using System; class coord int x; int y; // Pretizeni konstruktoru dvojim zpusobem public coord()x=0;y=0; // bez inicializatoru public coord(int i,int j)x=i;y=j; // inicializator public void getxy(ref int i,ref int j) i=x;j=y; public static coord operator +(coord ob1,coord ob2) coord temp = new coord(); temp.x=ob1.x+ob2.x; temp.y=ob1.y+ob2.y; return temp; ; class Program static void Main() coord o1=new coord(10,10); coord o2=new coord(5, 3); coord o3=new coord(); int i=0,j=0; o3=o1+o2; // soucet dvou objektu - vola operator+() o3.getxy(ref i,ref j); Console.WriteLine("x=0 y=1",i,j); Console.ReadLine(); kapitola 12 5/12
6 Program 4 Přetížení operátoru == Jestliže přetěžujeme operátor ==, musíme též definovat přetížený operátor!=. Jestliže tak neučiníme, kompilátor nás na to upozorní. Metoda, která přetěžuje operátor== vrací hodnotu true, když souřadnice objektů, které přebírá jako parametry, jsou stejné. Jinak vrací hodnotu false. Metoda, která přetěžuje operátor!= vrací hodnotu true, když souřadnice objektů, které přebírá jako parametry, nejsou stejné. Jinak vrací hodnotu false. V Mainu jsou vytvořeny dva objekty a pro testování souřadnic je použit přetížený operátor ==. Tímto operátorem se otestuje rovnost obou souřadnic x a y. V případě, že se rovnají, vypíše se text: "Objekty mají stejné souřadnice", jinak se vypíše: "Objekty mají různé souřadnice". using System; class coord int x; int y; // Pretizeni konstruktoru dvojim zpusobem public coord()x=0;y=0; // bez inicializatoru public coord(int i,int j)x=i;y=j; // inicializator public void getxy(ref int i,ref int j) i=x;j=y; public static coord operator +(coord ob1,coord ob2) coord temp = new coord(); temp.x=ob1.x+ob2.x; temp.y=ob1.y+ob2.y; return temp; public static bool operator==(coord ob1,coord ob2) return ob1.x==ob2.x && ob1.y==ob2.y; public static bool operator!=(coord ob1, coord ob2) return ob1.x!= ob2.x ob1.y!= ob2.y; ; class Program static void Main() coord o1=new coord(10,10); coord o2=new coord(1, 10); if(o1==o2) Console.WriteLine("Objekty mají stejné souřadnice"); else Console.WriteLine("Objekty mají různé souřadnice"); Console.ReadLine(); kapitola 12 6/12
7 Přepisování Přepisování je změna definované metody zadané v základní třídě v některé z jejích odvozených tříd. Přepisované funkce mají stejný počet i typ parametrů na rozdíl od přetěžování. Následující diagram ukazuje přepsání metod Nakresli a Smaž v základní třídě v odvozených třídách, kde je možné pro uvedené činnosti použít jednodušší algoritmy. Tvar Nakresli() Smaž() Přesuň() VezmiBarvu() NastavBarvu() Kruh Nakresli() Smaž() Čtverec Nakresli() Smaž() Trojúhelník Nakresli() Smaž() Obrázek 3 Přepsání metod Nakresli a Smaž v odvozených třídách Program 5 Odvození tříd čtverec a obdélník ze základní třídy Tvar kapitola 12 7/12
8 Tvar Plocha Obvod Vypocty() Vypis() Čtverec a Vypocty() Obdélník a,b Vypocty() Obrázek 4 UML diagram pro základní třídu Tvar a odvozené třídy Ctverec a Obdélník using System; class Tvar // základní třída protected double Plocha, Obvod; public Tvar() Plocha = 0; Obvod = 0; public void Vypocty() Console.WriteLine("Vypocty jsou mozne pouze pro objekty tridy Čtverec, nebo Obdélník"); public void Vypis() Console.WriteLine("Plocha: 0", Plocha); Console.WriteLine("Obvod: 0", Obvod); ; class Čtverec : Tvar // první odvozená třída double a; public Čtverec(double x) a = x; public void Vypocty() Plocha = a * a; Obvod = 4 * a; // přepsání metody Vypocty ; class Obdélník : Tvar // druhá odvozená třída double a, b; public Obdélník(double x, double y) a = x; b = y; // přepsání metody Vypocty kapitola 12 8/12
9 public void Vypocty() Plocha = a * b; Obvod = 2 * (a + b); ; class Program static void Main() Tvar u = new Tvar(); Čtverec c1 = new Čtverec(10); c1.vypocty(); c1.vypis(); Console.WriteLine(); Obdélník o1 = new Obdélník(1, 2); o1.vypocty(); o1.vypis(); Console.WriteLine(); Console.ReadLine(); Vypíše se: Plocha: 100 Obvod: 40 Plocha: 2 Obvod: 6 Program by bylo možné rozšířit o další odvozené třídy a do základní třídy Tvar doplnit vlastnosti, společné pro všechny třídy například podle následujícího diagram: Tvar barva_cary barva_vyplne plocha vypis_plochy() kruh polomer plocha() Obrázek 5 Doplnění atributů do tříd ctverec strana plocha() pravtroj odvesna1 odvesna2 plocha() kapitola 12 9/12
10 Jediný název (plocha) nabývá různé implementace v různých třídách. Virtuální metody Virtuální metoda je členská funkce, která je deklarována v rámci základní třídy a je redefinovaná odvozenou třídou. V základní třídě se před jméno virtuální metody uvádí virtual. Virtuální metoda je implementací polymorfismu: Jedno rozhraní více metod Metoda, definovaná jako virtual je určena k tomu, aby byla převážena třídami, které od této třídy dědí. Metoda, která převáží virtuální metodu, používá modifikátor override, který indikuje, že chce nahradit metodu svou vlastní verzí. Modifikátor override je vyžadován, abyste neudělali chybu náhodným převážením metody v případech, kdy jste tak učinit nechtěli. Program 6 Použití virtuální metody Tento program je modifikací programu Program 5. Zde je metoda Vypocty definovaná jako virtuální. using System; class Tvar // základní třída protected double Plocha, Obvod; public Tvar() Plocha = 0; Obvod = 0; virtual public void Vypocty() Console.WriteLine("Vypocty jsou mozne pouze pro objekty tridy Čtverec, nebo Obdélník"); public void vypis() Console.WriteLine("Plocha: 0", Plocha); Console.WriteLine("Obvod: 0", Obvod); ; class Čtverec : Tvar // první odvozená třída double a; public Čtverec(double x) a = x; override public void Vypocty() Plocha = a * a; Obvod = 4 * a; // přepsání metody Vypocty ; class Obdélník : Tvar // druhá odvozená třída double a, b; kapitola 12 10/12
11 public Obdélník(double x, double y) a = x; b = y; // přepsání metody Vypocty override public void Vypocty() Plocha = a * b; Obvod = 2 * (a + b); ; class Program static void Main() int co; Tvar u = new Tvar(); Čtverec c1 = new Čtverec(10); Obdélník o1 = new Obdélník(1, 2); Console.WriteLine("Co chces pocitat:"); co = Int32.Parse(Console.ReadLine()); if (co == 1) u = c1; else u = o1; u.vypocty(); u.vypis(); Console.ReadLine(); Program vypíše: Co chces pocitat: 2 Plocha: 2 Obvod: kapitola 12 11/12
12 Seznam obrázků Obrázek 10 Různé polygony... 1 Obrázek 11 Odvození tříd Kruh, Čtverec, Trojúhelník ze základní třídy Tvar... 2 Obrázek 12 Přepsání metod Nakresli a Smaž v odvozených třídách... 7 Obrázek 13 UML diagram pro základní třídu Tvar a odvozené třídy Ctverec a Obdélník... 8 Obrázek 14 Doplnění atributů do tříd... 9 Seznamprogramů Program 10 Přetížená metoda pro výpočet absolutní hodnoty... 3 Program 11 Přetěžování metod, lišících se počtem argumentů... 3 Program 12 Přetížení operátoru Program 13 Přetížení operátoru ==... 6 Program 14 Odvození tříd čtverec a obdélník ze základní třídy Tvar... 7 Program 15 Použití virtuální metody kapitola 12 12/12
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íce14.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íceIB111 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íceC++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19
C++ přetěžování funkcí a operátorů 1 Přetěžování funkcí jazyk C++ umožňuje napsat více funkcí se stejným názvem, těmto funkcím říkáme přetížené přetížené funkce se musí odlišovat typem nebo počtem parametrů,
Více7. 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íceZá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íce8 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íceJazyk 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íceProgramová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íceGenerické 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íce1. 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íceMichal 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íce11.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íceKonstruktory a destruktory
Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,
VíceIAJCE Přednáška č. 6. logický celek, řešící dílčí část problému Příklad velmi špatného zápisu programu na výpočet obsahu obdélníku
Podprogramy zásady: jednu věc programovat pouze jednou podprogram logický celek, řešící dílčí část problému Příklad velmi špatného zápisu programu na výpočet obsahu obdélníku // nacteni strany 1 double
VíceKTE / 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Ú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ícePokroč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íce1. 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íceProměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.
Proměnná Pojmenované místo v paměti sloužící pro uložení hodnoty. K pojmenování můžeme použít kombinace alfanumerických znaků, včetně diakritiky a podtržítka Rozlišují se velká malá písmena Název proměnné
VíceSeminář 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íceIAJCE Přednáška č. 7. řízení semaforu na křižovatce = přepínání červená/oranžová/zelená
Výčtový typ Motivační příklad řízení semaforu na křižovatce = přepínání červená/oranžová/zelená const int CERVENA = 0; const int ORANZOVA = 1; const int ZELENA = 2; int prististav = CERVENA; while (true)
VíceIRAE 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Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií
1 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 12. října 2009 Organizace výuky Přednášky Teoretické základy dle normy jazyka C Cvičení Praktické úlohy odpřednášené látky Prostřední
VíceNMIN201 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íceProgramová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íceAlgoritmizace 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íceDě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íce3. 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íceVíce o konstruktorech a destruktorech
Více o konstruktorech a destruktorech Více o konstruktorech a o přiřazení... inicializovat objekt lze i pomocí jiného objektu lze provést přiřazení mezi objekty v původním C nebylo možné provést přiřazení
VícePočí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íceObjekt. 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íceLogické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false
Logické operace Datový typ bool může nabýt hodnot: o true o false Relační operátory pravda, 1, nepravda, 0, hodnoty všech primitivních datových typů (int, double ) jsou uspořádané lze je porovnávat binární
VíceProgramová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íceDynamicky 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íceNPRG031 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íceJazyk 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íceTří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íceObjektově 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ícepřetížení operátorů (o)
přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - deklarace pomocí funkčního
Vícetypová 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íceVýrazy a operátory. Operátory Unární - unární a unární + Např.: a +b
Výrazy a operátory i = 2 i = 2; to je výraz to je příkaz 4. Operátory Unární - unární a unární + Např.: +5-5 -8.345 -a +b - unární ++ - inkrement - zvýší hodnotu proměnné o 1 - unární -- - dekrement -
VíceVirtuální metody - polymorfizmus
- polymorfizmus - potomka lze použít v místě, kde je možné použít předka - v dosud probraných situacích byly vždy volány funkce, které jsou známy již v době překladu. V situaci, kdy v době překladu není
VíceÚ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íceZáklady C++ I. Jan Hnilica Počítačové modelování 18
Základy C++ I 1 Přechod z C na C++ jazyk C++ je nadmnožinou jazyka C z hlediska syntaxe se jedná o velmi podobné jazyky, spolu s dalšími jazyky "céčkovské" rodiny, jako je např. C# každý platný program
VíceC# konzole Podíl dvou čísel, podmínka IF
C# konzole Podíl dvou čísel, podmínka IF Tematická oblast Datum vytvoření 2013 Ročník 3 Stručný obsah Způsob využití Autor Kód Internetové technologie, programování Výpočet podílu v konzolové aplikaci
VíceZá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íce7 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íceTŘÍ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íceObjektové 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íceProgramování v jazyce C a C++
Programování v jazyce C a C++ Richter 1 Petyovský 2 1. března 2015 1 Ing. Richter Miloslav, Ph.D., UAMT FEKT VUT Brno 2 Ing. Petyovský Petr, UAMT FEKT VUT Brno C++ Stručná charakteristika Nesdíĺı normu
VíceÚ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íceStřední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace
Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace Předmět: Vývoj aplikací Téma: Datové typy Vyučující: Ing. Milan Káža Třída: EK3 Hodina: 5 Číslo: V/5 Programování v jazyce
VíceJazyk C++ I. Šablony 2
Jazyk C++ I Šablony 2 AR 2013/2014 Jazyk C++ I Třídy template class TVektor { T *a; int n; static int PocInstanci; public: TVektor(int _n = 0) : n(_n) { a = new T[n]; PocInstanci++; } ~TVektor()
VíceObsah. 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ícePaměť 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íceObsah 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íceObjektově 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ícePascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7
Pascal Katedra aplikované kybernetiky Ing. Miroslav Vavroušek Verze 7 Proměnné Proměnná uchovává nějakou informaci potřebnou pro práci programu. Má ve svém oboru platnosti unikátní jméno. (Připadne, musí
VíceVýč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ícePřetěžování operátorů
Karel Müller, Josef Vogel (ČVUT FIT) Přetěžování operátorů BI-PA2, 2011, Přednáška 4 1/31 Přetěžování operátorů Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky, Fakulta
VíceTeoretické 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Ú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íceJazyk C# (seminář 5)
Jazyk C# (seminář 5) Pavel Procházka KMI 23. října 2014 Přetěžování metod motivace Představme si, že máme metodu, která uvnitř dělá prakticky to samé, ale liší se pouze parametry V C# můžeme více metod
VíceKolekce, cyklus foreach
Kolekce, cyklus foreach Jen informativně Kolekce = seskupení prvků (objektů) Jednu již známe pole (Array) Kolekce v C# = třída, která implementuje IEnumerable (ICollection) Cyklus foreach ArrayList pro
VíceChová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íceAbstraktní 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íceOsnova 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íceDě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íce2) 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ícePokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++
Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++ Třídy v C++ Třídy jsou uživatelsky definované typy podobné strukturám v C, kromě datových položek (proměnných) však mohou obsahovat i funkce
Více11 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íce24. 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ícePolymorfismus. Č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íceIB015 Neimperativní programování. Časová složitost, Typové třídy, Moduly. Jiří Barnat Libor Škarvada
IB015 Neimperativní programování Časová složitost, Typové třídy, Moduly Jiří Barnat Libor Škarvada Sekce IB015 Neimperativní programování 07 str. 2/37 Časová složitost Časová složitost algoritmu IB015
VíceJazyk C++ I. Polymorfismus
Jazyk C++ I Polymorfismus AR 2013/2014 Jazyk C++ I Operátory Co to vůbec jsou operátory? Na co je používáme? AR 2013/2014 Jazyk C++ I 2 Operátory Můžeme si upravit operátory pro vlastní objektové typy?
VíceAbstraktní 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íceAbstraktní 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íceZá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íceOperační systémy. Cvičení 4: Programování v C pod Unixem
Operační systémy Cvičení 4: Programování v C pod Unixem 1 Obsah cvičení Řídící struktury Funkce Dynamická alokace paměti Ladění programu Kde najít další informace Poznámka: uvedené příklady jsou dostupné
VíceProgramování v C++ 2, 8. cvičení
Programování v C++ 2, 8. cvičení návrhový vzor iterátor 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 Shrnutí minule procvičené látky
VíceFunkč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íceint ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N
Struktura (union) - struktura a union jsou složené typy, které "v sobě" mohou obsahovat více proměnných - struktura obsahuje v každém okamžiku všechny své proměnné, union obsahuje (=je "aktivní") pouze
VíceJazyk C++, některá rozšíření oproti C
Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 1/22 Jazyk C++, některá rozšíření oproti C Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra
VíceProgramování II. Návrh programu I 2018/19
Programování II Návrh programu I 2018/19 Osnova přednášky Co víme? Objektový návrh programu. Příklad. Co víme? Třída Třída je popisem objektů se společnými vlastnostmi. class private:
VíceZpracoval: houzvjir@fel.cvut.cz
Zpracoval: houzvjir@fel.cvut.cz 10. Objektově orientované programování v C++. Přetěţování operátorů, generické funkce a třídy, výjimky, knihovny. (A7B36PJC) Obsah OOP v C++... 2 Pro připomenutí - Základní
VícePROGRAMOVÁNÍ V C++ CVIČENÍ
PROGRAMOVÁNÍ V C++ CVIČENÍ INFORMACE Michal Brabec http://www.ksi.mff.cuni.cz/ http://www.ksi.mff.cuni.cz/~brabec/ brabec@ksi.mff.cuni.cz gmichal.brabec@gmail.com PODMÍNKY ZÁPOČTU Základní podmínky společné
VíceDě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íceDefinice 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ícePB161 Programování v jazyce C++ Přednáška 9
PB161 Programování v jazyce C++ Přednáška 9 Právo friend Přetěžování operátorů Nikola Beneš 16. listopadu 2015 PB161 přednáška 9: friend, přetěžování operátorů 16. listopadu 2015 1 / 30 Reklama PB173 Tematicky
VíceDědičnost, rozhraní (interface)
Dědičnost, rozhraní (interface) Obsah kapitoly DĚDIČNOST... 1 CHYBNÉ POUŽITÍ DĚDIČNOSTI... 8 VÍCENÁSOBNÁ DĚDIČNOST... 10 VÍCEÚROVŇOVÁ HIERARCHIÍ TŘÍD... 11 ROZHRANÍ (INTERFACE)... 18 SEZNAM OBRÁZKŮ...
VíceC++ objektově orientovaná nadstavba programovacího jazyka C
C++ objektově orientovaná nadstavba programovacího jazyka C (1. část) Josef Dobeš Katedra radioelektroniky (13137), blok B2, místnost 722 dobes@fel.cvut.cz 5. května 2014 České vysoké učení technické v
VíceMartin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016
ZPRO cvičení 2 Martin Flusser Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague October 17, 2016 Outline I 1 Outline 2 Proměnné 3 Proměnné - cvičení 4 Funkce 5 Funkce
VíceMichal 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íceMichal 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íceAlgoritmizace 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ícePREPROCESOR 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íceZákladní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy
Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Procesor Procesorem je objekt, který vykonává algoritmem popisovanou
Více20. 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