Polymorfismus. Porovnání jazyků z hlediska polymorfismu Jazyky C, C++, C# Jazyk Java PHP a jiné Na závěr souhrn vlastností jednotlivých jazyků
|
|
- Zdeněk Šmíd
- před 6 lety
- Počet zobrazení:
Transkript
1 Polymorfismus Porovnání jazyků z hlediska polymorfismu Jazyky C, C++, C# Jazyk Java PHP a jiné Na závěr souhrn vlastností jednotlivých jazyků
2 Jazyk C Jazyk C ve větší míře nepodporuje polymorfismus vůbec Absence tříd, pouze struktury Pouze přetěžování funkcí vytváří dojem koerce datových typů Silně typovaný jazyk
3 Jazyk C++ Implemetuje polymorfismus již velmi intenzivně Vyvinut na základě zkušeností s jazykem Simula, C, ADA První komerční implementace již roku 1983 Multiparadigmatický jazyk Dědičnost, vícenásobná dědičnost, šablony, přetěžování (i operátorů)
4 Jazyk C++ Dědičnost, vícenásobná dědičnost class Employee { public: Employee(const char* szname); ~Employee(); unsigned short getage() const { return m_sage; void setage(unsigned short sage) { m_sage = sage; private: char* m_szname; unsigned short m_sage; ; class Waiter : public Employee { public:.... ;
5 Modifikátory dědění: public class Base { public: int m_public; Base(int A); private: int m_private; protected: int m_protected; ; class Derived : public Base { public: Derived(int B) : Base(B) { m_public = 1; // Tohle lze m_protected = 2; // Tohle lze m_private = 3; // Vyvolá chybu ; int main() { Derived d; d.m_public = 1; // Tohle lze d.m_protected = 2; // Vyvolá chybu d.m_private = 3; // Vyvolá chybu
6 Modifikátor dědění: public modifikátor Base modifikátor Derived přístup z Derived přístup z venku public public Ano Ano protected protected Ano Ne private private Ne Ne
7 Modifikátory dědění: private class Base { public: int m_public; Base(int A); private: int m_private; protected: int m_protected; ; class Derived : private Base { public: Derived(int B) : Base(B) { m_public = 1; // Tohle lze m_protected = 2; // Tohle lze m_private = 3; // Vyvolá chybu ; int main() { Derived d; d.m_public = 1; // Vyvolá chybu d.m_protected = 2; // Vyvolá chybu d.m_private = 3; // Vyvolá chybu
8 Modifikátor dědění: private modifikátor Base modifikátor Derived přístup z Derived přístup z venku public private Ano Ne protected private Ano Ne private private Ne Ne
9 Modifikátory dědění: protected class Base { public: int m_public; Base(int A); private: int m_private; protected: int m_protected; ; class Derived : protected Base { public: Derived(int B) : Base(B) { m_public = 1; // Tohle lze m_protected = 2; // Tohle lze m_private = 3; // Vyvolá chybu ; int main() { Derived d; d.m_public = 1; // Vyvolá chybu d.m_protected = 2; // Vyvolá chybu d.m_private = 3; // Vyvolá chybu
10 Modifikátor dědění: protected modifikátor Base modifikátor Derived přístup z Derived přístup z venku public protected Ano Ne protected protected Ano Ne private private Ne Ne Jaký je rozdíl oproti dědědí typu private? Třída, která dědí Derived má stále uvnitř k vlastnostem přístup!
11 Vícenásobná dědičnost Class Employee { ; Class Singer : public Employee { ; Class Waiter : public Employee { ; Co se nyní stane když chceme vytvořit zpívajícího číšníka? Class SingingWaiter : public Singer, public Waiter { ; SingingWaiter podědí vlastnosti tříd Singer a Waiter, ale jak to bude se třídou Employee? SingingWaiter bude obsahovat dvě kopie třídy Employee! Každá ze rodičovských tříd ji totiž vnitřně inicializuje.
12 Vícenásobná dědičnost Tomuto lze zamezit použitím tzv. virtuální základní třídy: class Singer : public virtual Employee { ; class Waiter : virtual public Employee { ; // Na pořadí nezáleží class SingingWaiter : public Singer, public Waiter { ; SingingWaiter už nyní obsahuje jen jednu třídu Employee, kterou třídy Singer a Waiter sdílí. Nejednoznačnosti v případě stejného názvu vlastnosti nebo metody v rodičovských třídách se řeší pomocí operátoru rozlišení. void SingingWaiter::DoSomething() { Singer::DoThings() Waiter::DoThings()
13 Spřátelené třídy (funkce) Někdy existuje potřeba, aby jedna třída, která není s druhou třídou společensky spjatá měla přístup k jejím soukromým vlastnostem nebo metodám. //class TvOvladac; - není třeba dopředně deklarovat! class Televize { private: unsigned int m_ucisloprogramu; public: Televize(); ; friend class TvOvladac; class TvOvladac { Public: TvOvladac(); void PrepniProgram(Televize &Tv, unsigned int uprogram) { Tv.m_uCisloProgramu = uprogram; ;
14 Virtuální metody Jedním z jevů polymorfismu v přírodě je schopnost potomků vylepšovat nebo měnit vlastnosti svých předků. Tento aspekt polymorfismu je v jazyce C++ (a mnoha jiných) realizován pomocí tzv. virtuálních metod. Class ZakladniTrida { Public: Trida(); ; virtual void Metoda(); Class OdvozenaTrida : publoc ZakladniTrida { Public: OdvozenaTrida(); void Metoda(); ; Klíčové slovo virtual také vynucuje použití tzv. dynamické vazby namísto statické. Umožňuje také skrývání metod vynecháním jejich parametrů v potomkovi.
15 Abstraktní třídy Někdy je potřeba definovat jakéhosi kostlivce, který sice nemůže existovat sám o sobě, ale všechny ostatní existence schopné třídy jsou od něj odvozené. Jedná se o tzv. rozhraní popisující pouze jak by měly objekty daného druhu vypadat. Praktickou ukázkou můžou být tzv. Streamy: Class Stream { Public: Stream() { Virtual Int Read(void* pdata,unsigned int usize) = 0; Virtual Int Write(void* pdata,unsigned int usize) = 0; Virtual Int Tell() = 0; // Použití čistě virtuálních metod => třída Stream je abstraktní ; Class FileStream : public Stream { Class NetworkStream : public Stream { Class GzipStream : public Stream { Samotná abstraktní třída Stream neříká jak se mají data z daného zařízení číst,ale říká jak mají přístupové třídy vypadat.
16 Šablony v C++ Šablony jsou přímou realizací myšlenky parametrického polymorfismu Jedná se o snahu oddělit algoritmus a datové typy pro větší znovupoužitelnost algoritmů V C++ je implementována pomocí klíčového slova template<> Poprvé implementováno v jazyku ADA Masivní použití šablonových tříd v knihovně STL
17 Jednoduché šablony template <class T> class Conteiner { private: const int m_size = 500; T* m_con[m_size]; ; Můžeme tak pracovat s anonymním typem T. Je možné také vytvářet multišablony. Často se však stává, že potřebujeme trošku specifikovat implementaci daného algoritmu. Např. třídící algoritmus je odlišný pro číselné prvky a řetězcové prvky. K tomuto se používá tzv. specializace (zúžení) šablony Od standardu C++11 lze také použít defaultní specializaci
18 Specializace šablon Mějme šablonu kontejneru, jehož kód je sice obecný, ale pro určitý datový typ se musí kód odlišit. template <class T> class MyArray { public: void Sort();. ; template <> class MyArray<char*> { public: void Sort(); ; MyArray<int> A; MyArray<char*> B; Ve druhém případě kompilátor pozná, že má použít specializovanou implementaci a tudíž i jinou třídící metodu. U multišablon lze provést i tzv. částečnou specializaci.
19 Jazyk C# V otázce polymorfismu jazyk C# místy vylepšuje vlastnosti jazyka C++ Dědičnost a způsob dědění je stejný jako v jazyce C++ Jazyk C++ je vhodnější pro programátory, kteří chtějí sáhnout i nízkoúrovňové věci Garbage-collecting Nepodporuje templatovou specializaci tříd Nepodporuje vícenásobné dědění (jen pro rozhraní)
20 Vlastnosti (GET,SET) V jazyce C# není nutné implementovat pro danou soukromou vlastnost get a set metody stylem jaký známe z C++. Můžeme to vidět na následující ukázce: C++ class MyClass { private: int m_nmyvalue; public: int getmyvalue() const { return m_nmyvalue; void setmyvalue(const int nval) { if (nval > 10) m_nmyvalue = nval; else m_nmyvalue = 0; ; C# class MyClass { public int MyValue { get; set { if (value > 10) MyValue = value; else MyValue = 0; ;
21 Interface Jazyk C# odděluje pojem rozhraní a abstraktní třídy. Interface obsahuje pouze kostru, ale nemůže implementovat žádný kód je možné dědit vícenásobně od několika interface Abstraktní třída může obsahovat a implementovat kód, avšak stejně jako u interface nelze vytvořit její instanci, jen od ní dědit. public interface ISteerable { SteeringWheel wheel { get; set; ; public interface IBrakable { BrakePedal brake {get; set; public class Vehicle : ISteerable, IBrakable { public SteeringWheel wheel { get; set; public BrakePedal brake { get; set; public Vehicle() { wheel = new SteeringWheel(); brake = new BrakePedal();
22 Boxing/Unboxing Díky této vlastnosti můžeme v C# nahlížet na všechno tak, jakoby bylo odvozené od superobecné třídy object. Boxing je (implicitní) možnost odkazovat se na specifickou třídu nebo typ pomocí typu object Unboxing je (explicitní) možnost získat z obecného typu object libovolný specifický typ. Int A = 123; object B = A; int C = (int)b; V reálné případě však boxing a unboxing umožňuje překlenout typickou mezeru všech jazyků mezi typem a referencí na daný typ.
23 Polymorfické modifikátory v C# Jazyk C# nemá čistě virtuální metodu, pouze abstraktní třídu. Pokud má být třída abstraktní je třeba jí deklarovat s klíčovým slovem abstract. Oproti C++ umožňuje C# deklarovat třídu nebo vlastnost, která je terminální tj. již není možné od ní dále dědit/zdědit jí. K tomu se používá klíčové slovo sealed. Pokud následní předefinuje virtuální metodu, bylo v jazyce C# kvůli přehlednosti zavedeno klíčové slovo override, které musí následník uvést v deklaraci metody. Je tak zřejmé, že tato deklarace přepisuje danou virtuální metodu předka a nedefinuje další. V C# také existují dva druhy konstant: const a readonly. Zatímco const definuje konstantu, která i po zdědění zůstává pořád stejná, readonly definuje sice konstantu, ale tu si může třída na kterékoliv úrovni dědění zvolit readonly tak může být sice konstanta, ale jiná pro každého následníka.
24 Polymorfické modifikátory v C# Oproti C++ přibyl v C# ještě navíc přístupový modifikátor internal. Ten umožňuje, aby k vlastnosti nebo metodě mohlo být přistoupeno jen v daném assembly tzn. máme-li třídu, která je součástí frameworku v DLL knihovně. Vlastnosti a metody v této třídě označené jako internal budou viditelné jen uvnitř DLL knihovny, ale ne mimo ní. Program používající framework neuvidí tyto metody a vlastnosti. Klíčové slovo internal lze použít i pro třídy celá třída tak nemusí být viditelná vně frameworku.
25 Podpora částečných deklarací Jazyk C# umožňuje roztrhat deklaraci třídy na více míst v kódu pomocí klíčového slova partial. Tato vlastnost snadno zhorší čtivost kódu, ale na řadě míst může pomoci. SouborA.cs partial class Trida { private int vlastnosta { get; set; public void MetodaA() { public Trida(); SouborB.cs partial class Trida { public void MetodaB() { publiv int vlastnostb() { get; set
26 Jazyk Java Java je ve svých jazykových vlastnostech překonávána jazykem C# Naopak výhodou Javy oproti většině jazykům je jeho použitelnost na skoro všech myslitelných platformách. V tom se snad Javě může vyrovnat pouze jazyk C nebo C++ Java podobně jako C# nepodporuje vícenásobnou dědičnost Klíčové slovo super stejně jako base v C# nebo operátor rozlišení v C++
27 Další rozdíly Javy, C# a C++ Java podporuje generické typy (šablony), ale nepodporuje jejich specializaci (tzn. ani defaultní) Oproti C# nepodporuje částečné deklarace tříd. Nepodporuje vlastnosti podobně jako C# - nutné implementovat get a set metody Generika v C# a Javě nejsou Turingovsky kompletní (na rozdíl od C++) C# a Java používají (package nebo namespace) k logickému členění kódu.
28 Další podobnosti Java stejně jako C# podporuje terminální třídu pomocí klíčového slova final V jazyce Java je unboxing implicitní na rozdíl od C# kde je explicitní V Javě neexistuje slovo virtual, ale pouze jediné abstract. Použití je stejné jako v C# Dědění se vynucuje pomocí klíčového slova extends
29 Jazyk PHP Jazyk PHP od verze 3 (lépe od verze 4) podporuje OOP a s ním i základní polymorfické vlastnosti Celá implementace objektů byla přepsána ve verzi 5 především s ohledem na výkon Podporuje abstraktní třídy, terminální třídy i virtuální metody Virtuální metody pouze na principu statické vazby (není tabulka virtuálních metod při běhu) Neexistují generika (jedná se o slabě typovaný jazyk
30 Polymorfismus v PHP class Animal { var $name; function construct($name) { $this->name = $name; class Dog extends Animal { function speak() { return "Woof, woof!"; class Cat extends Animal { function speak() { return "Meow..."; $animals = array(new Dog('Skip'), new Cat('Snowball')); foreach($animals as $animal) { print $animal->name. " says: ". $animal->speak(). '<br>';
31 Trik pro přetížení metody v PHP class myclass { public function overloadedmethod() { if ( func_num_args() > 1 ) { $param1 = func_get_arg(0); $param2 = func_get_arg(1); $this->_overloadedmethodimplementation2($param1,$param2) else { $param1 = func_get_arg(0); $this->_overloadedmethodimplementation1($param1) protected function _overloadedmethodimplementation1($param1) {... protected function _overloadedmethodimplementation2($param1,$param2) {...
32 PHP PHP nepodporuje přetěžování metod Zavedení polymorfismu (ikdyž slabého) do jazyka PHP přineslo spoustu výhod. Díky němu mohla vzniknou velká řada frameworků. Jednoduchost jazyka umožnila vytvoření např. platformy HipHop
33 Jazyky, které se sem nevešly Ruby je jazyk používaný pro webové programování, na rozdíl od PHP je těžce objektový, polymorfismus na pokročilé úrovni Python podporuje polymorfismus. Generika jsou podporována pomocí duck-typing, ale nepodporuje přetěžování Perl nepodporuje přetěžování, odvozování tříd v omezené míře Pascal má pouze parametrický polymorfismus
34 Souhrn Ze studovaných jazyků je C# je v ohledech polymorfismu nejvyspělejší Jazyk Java má své přednosti jinde než v polymorfismu, avšak i ten je na vysoké úrovni Jazyk C++ má polymorfismus také na vysoké úrovni a s novým standardem C++11 se může rovnat jazyku C#, oproti oběma zmíněným má výhodu nativního běhu na většině platforem PHP je příkladem jazyka s nepříliš vyvinutým polymorfismem, avšak i tato nízká míra jeho implementace otevřela spoustu nových možností
35 Zdroje Stephen Prata: C++ Primer 6th Edition Andrei Alexandrescu: Advanced C
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
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
Ú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
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,
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á
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
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 =
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
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;
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
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
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é
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ý
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
Ú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
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,
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ář
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
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
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ů
1 - Úvod do platformy.net. IW5 - Programování v.net a C#
1 - Úvod do platformy.net IW5 - Programování v.net a C# Strana 1 Obsah přednášky Objektově orientované paradigma.net Framework Základní rysy jazyka C# Strana 2 Objektová orientace C# implementuje základní
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,
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
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í
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í
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
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ě
PB161 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
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
PB161 Základy OOP. Tomáš Brukner
PB161 Základy OOP Tomáš Brukner Sylabus - Co je to OOP? Jaké jsou základní principy OOP? Jak se projevují v C++? https://cs.wikipedia.org/wiki/strahovská_knihovna SELECT * FROM books WHERE pages < 250
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í
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,
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ýč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
PB161 Programování v jazyce C++ Přednáška 10
.. PB161 Programování v jazyce C++ Přednáška 10 Šablony Nikola Beneš 23. listopadu 2015 PB161 přednáška 10: šablony 23. listopadu 2015 1 / 29 K zamyšlení Jaký je rozdíl mezi new int[10] a new int[10]()?
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č)
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
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
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
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
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
Kód, který se nebude často měnit
Factory Method Úvod - problém Mějme obchod s auty: public class OrderCars { public Car ordercar(string model) { Car car; Při přidání nového modelu je nutné upravit if(model.equals("mark IV")) car = new
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é
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ě
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.
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
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
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:
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
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
Platforma.NET 4. hodina dnes to bude ideologické
Platforma.NET 4. hodina dnes to bude ideologické Aleš Keprt Ales.Keprt@upol.cz říjen 2006 Doporučená literatura 1. Duffy J. Professional.NET Framework 2.0. Wrox Press, 2006. 2. Wikipedia.NET Framework
PB161 Programování v jazyce C++ Přednáška 1
.. PB161 Programování v jazyce C++ Přednáška 1 Organizace Úvod do OOP v C++ Nikola Beneš 21. září 2015 PB161 přednáška 1: organizace, úvod do OOP v C++ 21. září 2015 1 / 39 Cíle předmětu 1. vysvětlit základy
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
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
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í
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
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
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í
PB161 Programování v jazyce C++ Přednáška 10
PB161 Programování v jazyce C++ Přednáška 10 Šablony Nikola Beneš 27. listopadu 2017 PB161 přednáška 10: šablony 27. listopadu 2017 1 / 33 Šablony PB161 přednáška 10: šablony 27. listopadu 2017 2 / 33
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
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ů
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:
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
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č
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í
Datové abstrakce v programovacích jazycích
Datové abstrakce v programovacích jazycích Motivace Strukturovat rozsáhlé programy Dovolit separátní překlad Možné formy strukturování: Podprogramy původní forma abstrakce -abstrakce výpočtů Moduly kontejnery
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
Objektově orientované programování v PHP 5. Martin Klíma
Objektově orientované programování v PHP 5 Martin Klíma OOP & PHP 5 V PHP 5 konečně značné rozšíření OOP Blíží se to moderním programovacím jazykům jako Java nebo C# Výhody OOP Zapouzdření (nové modifikátory
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
OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC
OMO 4 - Creational design patterns A Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC Ing. David Kadleček, PhD. kadlecd@fel.cvut.cz, david.kadlecek@cz.ibm.com 1 Creational
Jazyk 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()
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ů
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
OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PŘÍKLADECH 8 Proudová knihovna 8.1 Hierarchie proudů... 8-1 8.2 Standardně zavedené proudy... 8-1 8.
David MATOUŠEK OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PØÍKLADECH Praha 2011 David Matoušek Objektové programování v C++ v pøíkladech Lektoroval Ing. Bohumil Brtník, Ph.D. Bez pøedchozího písemného svolení nakladatelství
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
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ů
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
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
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
Komponenty v.net. Obsah přednášky
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 Rozdíl mezi COM a.net Distribuce komponent Programování
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í
Jakub Čermák <jakub@jcermak.cz> http://www.jcermak.cz. Microsoft Student Partner
Jakub Čermák http://www.jcermak.cz Microsoft Student Partner Úvod, příklady použití, trocha teorie Struktura aplikace Typy obecně, primitivní typy, speciální typy Podmínky, cykly, namespaces
PB161 Programování v jazyce C++ Přednáška 3
PB161 Programování v jazyce C++ Přednáška 3 Reference, const Přetěžování funkcí Statické atributy a metody Dědičnost a kompozice Nikola Beneš 5. října 2015 PB161 přednáška 3: reference, const, přetěžování,
Pokročilé schopnosti OOP
Kapitola 7 Pokročilé schopnosti OOP V kapitole 6 jste absolvovali základy objektově orientovaného programování v PHP. V této kapitole budeme na těchto základech stavět. Seznámíte se s několika vyspělejšími
Matematika v programovacích
Matematika v programovacích jazycích Pavla Kabelíková am.vsb.cz/kabelikova pavla.kabelikova@vsb.cz Úvodní diskuze Otázky: Jaké programovací jazyky znáte? S jakými programovacími jazyky jste již pracovali?
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
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................
PB161 Programování v jazyce C++ Přednáška 4
PB161 Programování v jazyce C++ Přednáška 4 Přetěžování funkcí Konstruktory a destruktory Nikola Beneš 9. října 2017 PB161 přednáška 4: přetěžování funkcí, konstruktory, destruktory 9. října 2017 1 / 20
PB přednáška (23. listopadu 2015)
PB161 10. přednáška (23. listopadu 2015) Šablony Motivace snaha o co nejmenší duplikaci kódu co když máme kód, který chceme použít pro různé typy? generická funkce (maximum, minimum, swap, ) kontejnery
Objektově orientované programování v jazyce Python
Objektově orientované programování v jazyce Python Co to je objektově orientované programování Python není přímo objektově orientovaný jazyk, ale podporuje nejdůležitější části objektově orientovaného
Zpracoval: 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í
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í
PB přednáška (21. září 2015)
PB161 1. přednáška (21. září 2015) Cíle předmětu 1. vysvětlit základy OOP 2. seznámit s možnostmi jazyka C++ 3. (zavést a) podpořit praktické programátorské schopnosti 4. nadchnout do (nebo alespoň neodradit
Úvod - problém. Při přidání nového modelu je nutné upravit. Kód, který se nebu de často měnit. n Mějme obchod s auty:
Factory Method Úvod - problém n Mějme obchod s auty: public class OrderCars { public Car ordercar(string model) { Car car; Při přidání nového modelu je nutné upravit if(model.equals("mark IV")) { car =
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é
První kapitola úvod do problematiky
První kapitola úvod do problematiky Co je to Flex Adobe Flex je ActionSript (AS) framework pro tvorbu Rich Internet Aplications (RIA), tedy knihovna AS tříd pro Flash. Flex používáme k vytvoření SWF souboru
UJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/
UJO Framework revoluční architektura beans verze 0.80 http://ujoframework.org/ Pavel Pone(c), září 2008 Historie rok 2004 upravené objekty z frameworku Cayenne nevýhodou byla špatná typová kontrola rok
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í
10 Generické implementace
10 Generické implementace Main Entry: 1 ge ner ic Pronunciation: j&-'ner-ik Function: adjective Etymology: French générique, from Latin gener-, genus birth, kind, class 1 a : relating to or characteristic
Jazyk C++ I. Polymorfismus
Jazyk C++ I Polymorfismus AR 2013/2014 Jazyk C++ I Úvod Metody s časnou vazbou jsou překládány jako obyčejné céčkovské funkce. Této metodě je předán jako první implicitní parametr this. Rozdíl mezi obyčejnou