OMO. 2 - Objektově orientovaný přístup
|
|
- Danuše Černá
- před 7 lety
- Počet zobrazení:
Transkript
1 OMO 2 - Objektově orientovaný přístup Objekty, třídy a hierarchie tříd Interface a abstraktní třídy Dědičnost Message passing Class diagramy a příklady systémů modelovaných pomocí OOP Volba správného přístupu Rozdíl mezi asociací, agregací a kompozicí Dědičnost versus kompozice Polymorfismus SOLID Správná reprezentace Ing. David Kadleček, PhD. kadlecd@fel.cvut.cz, david.kadlecek@cz.ibm.com 1
2 Objektový přístup Problém se snažím řešit tak, že ho kompletně strukturuji do objektů, které mezi sebou komunikují. Objekty intuitivně volím tak, aby co nejvíce odpovídaly objektům z reálného světa. Problém Procedurální nebo funkcionální přístup Objektový přístup výběr peněz vklad peněz převod peněz mezi účty Jaký přístup je lepší? zákazník účet peníze Záleží na problému, který řeším 2
3 Objekt Objekt do sebe zapouzdřuje proměnné, které reprezentují jeho stav a metody, které s tímto stavem pracují (vracet hodnotu, upravit hodnotu ) Uvnitř objektu má všechno přístup ke všemu. Z vnějšího světa lze volat pouze veřejné metody (public) a napřímo pracovat pouze s veřejnými proměnnými (narozdíl od private). Objekt Jiný objekt 3
4 Objekt Program Karel - Karel stojí na nějaké pozici a když chce, tak se usmívá. Dětský programátor může Karla posouvat dopředu, dozadu a řídit jestli se usmívá. Při návrhu nechci, aby programátor mohl přímo nastavovat pozici Karla, ale pomocí jednoduchých programovacích pokynů ho posouval. public class Karel { private int position; public boolean issmiling; public int getposition() { return position; public Karel(int position){ this.position = position; private void updateposition(int step){ position = position + step; public void stepforward() { updateposition(1); ; public void stepbackward() { updateposition(-1); ; public class BabyProgrammer { public static void main(string[] args){ Karel mykarel = new Karel(10); mykarel.issmiling = false; mykarel.stepforward(); mykarel.stepforward(); mykarel.stepbackward(); mykarel.issmiling = true; System.out.println("Position is " + mykarel.getposition()); 4
5 Třída Třída je předpis pro tvorbu objektů - instancí této třídy. Z každé třídy mohu vytvořit N instancí (objektů). Ty se od sebe liší pouze stavem. instancování Proměnné Metody Stav Alfonz Metody 5
6 Dědičnost Při dědičnosti třída potomka přebírá vlastnosti předka Potomek může přepoužívat proměnné a metody předka pokud je nepředefinuje Java nepodporuje tento typ dědičnosti 6
7 Hierarchie tříd Příklad z přírody: 7
8 Hierarchie tříd Příklad z UML: 8
9 Interface Interface (neboli rozhraní) je předpis proto, jaké metody musí třída implementovat (realizovat). Třída musí implementovat všechny metody - ne jen některé => interface tedy definuje kompaktní skupinu spolu souvisejících funkcionalit a předdefinovává rozhraní kterým budu k objektu přistupovat. Interface Bicycle { void changecadence(int newvalue); void changegear(int newvalue); void speedup(int increment); void applybrakes(int decrement); public class SpecializedVengeBicycle implements Bicycle{ int cadence = 0; int speed = 0; int gear = 1; public void changecadence(int newvalue) { cadence = newvalue; public void changegear(int newvalue) { gear = newvalue; public void speedup(int increment) { speed = speed + increment; public void applybrakes(int decrement) { speed = speed - decrement; void printstates() { System.out.println("cadence:" + cadence + " speed:" + speed + " gear:" + gear); 9
10 Interface Implements - třída implementuje interface (realizuje jeho metody) Extends - interface extenduje (dědí) vlastnosti rodičovského interface Třída může implementovat více interface najednou Příklad rozhraní v Java Collection API 10
11 Abstraktní třída Abstraktní třída je taková, kterou nelze instanciovat (nelze od ní vytvořit objekt) Uvnitř abstraktní třídy jsou implementované metody, které pak přebírají potomci této abstraktní třídy public abstract class AbstractEmployee { private String name; private String address; private int number; public abstract double computepay(); public abstract int getnumber(); public AbstractEmployee(String name, String address, int number) { this.name = name; this.address = address; public void mailcheck() { System.out.println("Mailing check to" + this.name + " " + this.address); public String getname() { return name; public String getaddress() { return address; public void setaddress(string newaddress) { address = newaddress; Uvnitř abstraktní třídy mohu definovat abstraktní metody, které nemají implementaci. Tedy jako bych definoval rozhraní, které pak musí implementovat potomci této abstraktní třídy 11
12 Rozdíl mezi abstraktní třídou a interface Interface - všechny proměnné jsou automaticky public static final a metody public. Abstraktní třída - lze definovat také proměnné, které nejsou static a final a metody mohou být public, protected, private Abstraktní třídu použiji, jestliže: Chci sdílet kód mezi více třídami a neexistuje neabstraktní předek těchto tříd Třídy jsou mezi sebou úzce spjaté - sdílí mezi sebou mnoho proměnných a metod Potřebujeme předepsat i metody, které neslouží k vnější komunikaci s objektem, tedy private a protected. Chci předefinovat proměnné, které nejsou static a final. Interface použiji, jestliže: Vytvářím vnější rozhraní k objektům - vytvářim veřejné API ke své komponentě Chci, aby i objekty z jiné class hierarchie implementovaly stejné rozhraní Předepisuju pouze metody a nikoliv jejich implementaci - mým cílem není, aby třídy sdílely implementaci Chci předepsat třídě, aby implementovala metody z více rozhraní 12
13 Komunikace mezi objekty Objektové orientovaný přístup je definovaný jako zapouzdření proměnných a metod do objektů, které si mezi sebou posílají zprávy. Tzv. message passing je předávání zpráv mezi dvěma objekty. Příkladem je komunikace mezi objekty v Smalltalk. Jaká je analogie z reálného života? Malý Karlík se rozhodne, že napíše dopis své babičce. Vezme papír, vezme tužku, napíše dopis a odnese ho na poštu. Pak se vrátí domu a jde spát Dopis přijde babičce do její schránky Babička když každé ráno pouští psa Alíka, tak kontroluje svou schránku Jednoho rána je celá radostí bez sebe, ve schránce je dopis od jejího jediného vnoučka, vnouček ji prosí o jeho oblíbené sušenky, tak se babička sebere a ihned začne péct sušenky Jaká je realizace v Java pomocí standardního message passingu? Hlavní program zavolá na objektu Karlik metodu sendmessage() a předá jí referenci na objekt Babicka Metoda sendmessage() v objektu Karlik zavola synchronně metodu receivemessage() na objektu babicka, z této metody se vola další metoda bakecookie() Objekt Karlik čeká než babička dopeče buchty, hlavní program čeká na Karlika Java ve skutečnosti neimplementuje opravdový message passing mezi objekty => Synchronní komunikace mezi objekty se děje jednoduše přes provolání metody druhého objektu, thread je blokován Asynchronní posílání zpráv si musíte doprogramovat nebo využít nějakou existující nadstavbu (např. jms, kafka,...) 13
14 Class diagram Class diagram je UML diagram pro grafické zobrazení tříd, jejich vlastností a vztahů mezi nimi Je možné jít do většího detailu a zobrazit i metody a úroveň přístupu 14
15 Příklady systémů modelovaných objektovým přístuem Tento systém reprezentuje knihovnu: Mám knihovnu, ta spravuje N účtů, N knih a disponuje jedním katalogem U účtů evidujeme v jakém jsou stavu a pro jakého člena jsou otevřeny V knihovně se půjčují knihy, abychom je mohli elektronicky evidovat a vyhledávat, tak jsou opatřeny čarovým kódem a RFID Ke katalogu můžeme přistupovat pomocí rozhraní pro vyhledávání a správu Systém vhodný pro realizaci pomocí OOP 15
16 Příklady systémů modelovaných objektovým přístuem Tento class model reprezentuje systém pro správu objednávek Systém vhodný pro realizaci pomocí OOP 16
17 Příklady systémů modelovaných objektovým přístupem Tento class diagram ukazuje třídy a rozhraní v package java.io. Ukazuje, že i Java knihovny jsou realizovány pomocí OOP. Při debuggování Javy je zřejmá hierarchie tříd a modularizace, je jednoduše pochopitelné trasovat co se právě děje Negativem je, že neustále procházíte desítkami vrstev tříd a jejich předků, kde v každé metodě je pár řádků kódu (stack trace se nevejde ani na jednu stránku) Java je realizovaná pomocí OOP 17
18 Jak budu modelovat neuronovou síť? Animace: Chci realizovat aplikaci pro výpočet v neuronové síti (nebo jiném výpočetním grafu). Na vstup mi přichází signál, který se přenáší po vazbách mezi nody (neurony). V neuronu se sečtou signály ze všech příchozích vazeb (s příslušnými váhami) a na tento součet se aplikuje funkce. Pak signál pokračuje k dalším neuronům až dorazí na výstup. Token Function Neuron Connection vstup h1 g1 w1 w2 NetIterator f1 f2 výstup v1 TokenSynchronizer a přidávám další třídy, abych byl schopný systém realizovat pomocí OOP. A to jsem ještě nenapsal ani řádku kódu 18
19 Jak budu modelovat neuronovou síť? g1 vstup h1 Versus: w1 w2 f1 f2 výstup v1 public double f(double in){ return Math.atan(in) Vystup1 = f ( w1 * g1( v1 * h1 (...)) + w2 *g2(...) ) Vystup2 = f (... => Systém nevhodný pro realizaci pomocí OOP kde výpočet hodnot na výstupu realizuji pomocí pomocí pár řádků kódu a bez nutnosti složité objektové reprezentace 19
20 Vztah mezi dvěma objekty Asociace Dědičnost Realizace Závislost Agregace Kompozice 20
21 Rozdíl mezi agregací, kompozicí a asociací Liší se od sebe primárně sílou vazby Asociace - objekty mají zcela nezávislý životní cyklus, realizována jako proměnná držící referenci na instanci nebo proměnná na vstupu metody, jakákoliv multiplicita. Agregace - objekty mají zcela nezávislý životní cyklus, vlastněný objekt nemůže mít dalšího vlastníka, realizována jako proměnná držící referenci na instanci. Nemůže vytvářet cykly, multiplicita 1:1 nebo 0:N. Kompozice - objekty mají svázaný životní cyklus, jeden objekt vlastní druhý a s jeho zánikem i ten druhý zaniká, realizována jako proměnná držící referenci na instanci nebo zanořená (inner) třída. Nemůže vytvářet cykly, multiplicita 1:1 nebo 0:N. 21
22 Asociační třída Asociační třídu potřebuji v případě, že vazby mezi objekty za dvou různých tříd mají různý stav. 22
23 Asociační třída - Java realizace public class Person { Co navigabilita? Je lepší obousměrná vazba nebo jednosměrná? Obousměrná vazba znamená, že při každé změně vazby z jedné strany musím upravit i druhý směr Jednosměrná vazba je jednodušší na správu, ale neumožňuje efektivně hledat z obou stran - jak zjistím v jakých všech objektech Company je Person zaměstnán? public class Employment { long salary; Interval period; Company company; Person person; public Person getperson() { return person; public class Company { public Set<Employment> employments; Set <Person> getemployees(){ Set<Person> employees = new HashSet<>(); for(employment employment: employments){ employees.add(employment.getperson()); return employees; 23
24 Je lepší dědičnost nebo kompozice? Mám následující class hierarchii => ne příliš podobná zvířata jsou od sebe v class hierarchii vzdálena 24
25 Je lepší dědičnost nebo kompozice? Absence struktury je menší zlo než špatná struktura 25
26 Je lepší dědičnost nebo kompozice? Specifikace podle které dělam kompozici Co je Lego? Kostky, ze kterých dělám kompozici 26
27 Je lepší dědičnost nebo kompozice? Dědičnost má výhodu v tom, že zavádí pravidla a minimalizuje duplicity v kódu Dědičnost je nicméně extrémně silná vazba, kterou zavádím do svého systému. Strukturální zásahy do hierarchie tříd ve chvíli, kdy už mám implementován komplexní systém, jsou extrémně pracné Pro nějaké problémy nelze rigidní hierarchii tříd ani sestavit Při návrhu je dobré si dopředu dobře rozmyslet, které struktury a pravidla jsou natolik pevné, že je můžu fixovat pomocí dědičnosti. Tam, kde vím, že budu v budoucnosti potřebovat flexibilitu, tak radši volím kompozici Kompozice má nevýhodu, že někdy končí duplicitami v kódu a je mnohem více benevolentnější - tedy hloupý programátor může udělat značné škody 27
28 SOLID - jak psát dobře udržovatelný OOP kód Single Responsibility Principle Třída má pouze jeden účel a jednu zodpovědnost a všechny její metody by měly sloužit k plnění tohoto účelu. Proč? Čím méně bude třída plnit účelů, tím bude méně důvodů do této třídy zasahovat. Např. je vhodné rozdělit formátování a generování reportů do různých třid. Open/Closed Principle Třídy by měly být otevřené pro rozšiřování a uzavřené pro modifikaci. V existujících třídách by měl probíhat pouze bug fixing, ale nová funkcionalita by měla přicházet do potomků třidy. Důvodem je opět minimalizace zásahů do již hotového kódu Liskov Substitution Principle Objekt je vždy možné nahradit objektem z třídy potomka. Kód pak nemusí kontrolovat s jakým konkrétním podtypem pracuje, Důvodem je, abychom nemuseli v kódu provádět nepříjemné kontroly typu a řešit různé side effekty. Interface Segregation Principle Více klient specifických rozhraní je lepší než jedno víceůčelové rozhraní. Důvodem je, že to více specifických rozhraní vede k menšímu couplingu. Např. PersistenceManager implementuje interfacecy DBReader a DBWriter Dependency inversion Principle Abstrakce nezávisí na detailech, ale detaily závisí na abstrakcích. High level moduly by neměly záviset na low level modulech. Naopak obojí by mělo záviset na abstrakcích. Důvodem je, že high level moduly se lépe přepoužívají, jestliže ignorují implemntační detaily low level modulů. Příkladem je dependency injection a rozdělení high level modulů a low level modulů do různých packages 28
29 Polymorfismus Polymorfní virus - virus, který má v různých časech nebo v různých svých generacích odlišnou formu. Dosahuje to tím, že do svého kódu vkládá náhodně instrukce, které nemění funkcionalitu viru, nicméně slouží k maskování. Virus navíc sám sebe zakryptuje. VBR (Volume Boot Record) - Inicializační sektor na disku ze kterého se začíná nahrávat operační systém Polymorfismus v Javě (a obecně v OOP) znamená, že: v rámci té samé třídy mám metody, které mají stejné jméno (jiné parametry), ale jiné chování V třídě potomka a předka mám metody, které mají stejné jméno (stejné parametry), ale jiné chování 29
30 Polymorfismus Overloading Vytvoření více metod se stejným jménem metody, ale různými parametry. Různými parametry je zde míněno jiný počet parametrů nebo jiné typy parametrů metody se stejnými parametry nemůžou mít různé návratové typy děje se mezi metodami v rámci té samé třídy Overriding Předefinování metody předka metodou potomka s identickými parametry a návratovým typem je možné upravit access level, aby byl méně restriktivní návratový typ může být potomkem původního návratového typu potomek nemůže vyhazovat novou výjimku nelze dělat override statické nebo final metody 30
31 Polymorfismus - overloading Různé počty parametrů class Adder{ static int add(int a,int b){return a+b; static int add(int a,int b,int c){return a+b+c; class TestOverloading1{ public static void main(string[] args){ System.out.println(Adder.add(11,11)); System.out.println(Adder.add(11,11,11)); Různé typy parametrů class Adder{ static int add(int a, int b){return a+b; static double add(double a, double b){return a+b; class TestOverloading2{ public static void main(string[] args){ System.out.println(Adder.add(11,11)); System.out.println(Adder.add(12.3,12.6)); Různé návratové typy class Adder{ static int add(int a, int b){return a+b; static double add(int a, int b){return a+b; class TestOverloading2{ public static void main(string[] args){ System.out.println(Adder.add(11,11)); System.out.println(Adder.add(12,12)); => Compile Time Error: method add(int,int) is already defined in class Adder 31
32 Polymorfismus - overriding Co se děje bez overloadingu class Vehicle{ void run(){ System.out.println("Vehicle is running"); class Bike extends Vehicle{ public static void main(string args[]){ Bike obj = new Bike(); obj.run(); //=> Output:Vehicle is running Po úpravě class Vehicle{ void run(){ System.out.println("Vehicle is running"); class Bike2 extends Vehicle { void run() { System.out.println("Bike is running safely"); public static void main(string args[]) { Bike2 obj = new Bike2(); obj.run(); //=> Output:Bike is running 32
33 Polymorfismus - overriding Od Javy 5 je možné změnit při overloadingu i návratový typ z předka na potomka - tzv. kovariantní typ class A{ A get(){return this; class B1 extends A{ B1 get(){return this; void message(){ System.out.println("Covariant return type"); public static void main(string args[]){ new B1().get().message(); 33
34 Správná reprezentace Absence struktury (zde objektové reprezentace) je menší zlo než špatná struktura Pozor zejména na nesprávné relace, jejich směr a multiplicitu Správná objektová reprezentace je co nejbližší reálnému světu ve kterém žijeme Pokud neimplementujeme reálný systém, tak by reprezentace měla být co nejbližší systému, který realizujeme. Když programujete tuto počítačovou hru, tak po přečtení knihy na OPP budete intuitivně vytvářet složitou class hierarchii, která reprezentuje typologii potvor a typologii překážek. Pak začnete vyhodnocovat pozici SuperMaria podle absolutní pixel pozice přečtené z obrazovky. Obojí je špatně. Místo složité typologie vám stačí obálka (šířka a výška) předmětu, id ikony/textury pro zobrazení a flagy definující chování. Místo odečítání pozice z pixelů na obrazovce realizujete uvnitř programu fyzikální model, který počítá aktuální pozice a kolize s předměty; a zobrazní je jen projekce do aktuálního zobrazovacího zařízení v aktuálním rozlišení. 34
public class Karel { private int position; public boolean issmiling; public int getposition() { return position;
Objekty, třídy a hierarchie tříd Interface a abstraktní třídy Dědičnost Message passing Class diagramy a příklady systémů modelovaných pomocí OOP Volba správného přístupu Rozdíl mezi asociací, agregací
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í
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
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
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ě
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,
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ě
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ář
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í
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
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í
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ů
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
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
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,
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
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
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
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í
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ý
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
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:
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í
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
Ú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
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
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í
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ýč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
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á
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,
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
IoC/DI. Tomáš Herceg Microsoft MVP (ASP.NET) www.dotnetcollege.cz
IoC/DI Tomáš Herceg Microsoft MVP (ASP.NET) www.dotnetcollege.cz SOLID 5 pravidel pro testovatelný kód Na netestovatelném kódu se IoC/DI používá špatně SOLID Single Responsibility Principle Každá třída
Programování II. Třídy a objekty (objektová orientovanost) 2018/19
Programování II Třídy a objekty (objektová orientovanost) 2018/19 Osnova přednášky Objektový přístup (proč potřebujeme objekty). Třídy, objekty,... Příklad. Proč potřebujeme objekty? Udržovatelnost softwaru
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 =
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
Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí
Kolekce obecně Seznamy a iterátory 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 Kolekce ::= homogenní sada prvků
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,
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ů
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á
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
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
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
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
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ů
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;
TÉMATICKÝ OKRUH Softwarové inženýrství
TÉMATICKÝ OKRUH Softwarové inženýrství Číslo otázky : 24. Otázka : Implementační fáze. Postupy při specifikaci organizace softwarových komponent pomocí UML. Mapování modelů na struktury programovacího
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
Java a XML. 10/26/09 1/7 Java a XML
Java a XML Java i XML jsou přenositelné V javě existuje podpora pro práci s XML, nejčastější akce prováděné při zpracování XML: načítání XML elementů generování nových elementů nebo úprava starého zápis
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ý'
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
Projekty pro výuku programování v jazyce Java
JIHOČESKÁ UNIVERZITA V ČESKÝCH BUDĚJOVICÍCH Pedagogická fakulta Katedra informatiky Akademický rok: 2006/2007 TEZE BAKALÁŘSKÉ PRÁCE Projekty pro výuku programování v jazyce Java Jméno: František Přinosil
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
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
Principy OOP při tvorbě aplikací v JEE. Michal Čejchan
Principy OOP při tvorbě aplikací v JEE Michal Čejchan Témata přednášky Principy OOP - připomenutí Úvod - co nás vede k používání OOP Reálný svět - jak (ne)používáme OOP Nedostatky na úrovni programovacích
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
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
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ý'
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ý'
Návrhové vzory OMO, LS 2014/2015
Návrhové vzory OMO, LS 2014/2015 Motivace Cílem objektového návrhu je strukturu aplikace navrhnout tak, aby splňovala následující kritéria: snadná rozšiřitelnost účelnost testovatelnost dokumentovatelnost
Programování II. Modularita 2017/18
Programování II Modularita 2017/18 Modul? Osnova přednášky Vývoj programování Modularita Příklad Vývoj programování Paradigmata programování Jak a proč se jazyky vyvíjejí? V čem se OOP liší od předchozích
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ší
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í
Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu
Seminář Java Zavádění tříd Radek Kočí Fakulta informačních technologií VUT Duben 2008 Radek Kočí Seminář Java Zavádění tříd 1/ 16 JVM zavádí třídy dynamicky Class loader objekt schopný zavádět třídy abstraktní
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++ 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é
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. 1. Odkrokujte následující program a s použitím notace z přednášky sledujte stav paměti
Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo
Statické proměnné a metody Tomáš Pitner, upravil Marek Šabo Úvod Se statickou metodou jsme se setkali už u úplně prvního programu - Hello, world! public class Demo { public static void main(string[] args)
Modelování informačních systémů s využitím jazyka UML. Jaroslav Šmarda
Modelování informačních systémů s využitím jazyka UML Jaroslav Šmarda Využití jazyka UML při vývoji IS na příkladu jednoduché aplikace pro evidenci knih Model IS Modelování případů užití Diagram případů
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
Obsah. October 2, Polymorfizmus. Typologie testování. Problém polymorfizmu. Vady/Anomálie. Vazební sekvence ČVUT FEL, K13132
OO testování Radek Mařík ČVUT FEL, K13132 October 2, 2014 Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 1 / 55 Obsah 1 Kĺıčové OO vlastnosti Dědičnost Řízení přístupu Polymorfizmus 2 Testování
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ýchozí a statické metody rozhraní. Tomáš Pitner, upravil Marek Šabo
Výchozí a statické metody rozhraní Tomáš Pitner, upravil Marek Šabo Výchozí a statické metody rozhraní Java 8 přidává ohledně metod v rozhraní nové možnosti. Neuvidíme je tedy ve starém kódu a mnozí vývojáři
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
Abstraktní datové typy: zásobník
Abstraktní datové typy: zásobník doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Abstraktní datové typy omezené rozhraní
Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth
Evropský sociální fond. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace Ing. Ondřej Guth Katedra teoretické informatiky Fakulta informačních technologií České vysoké učení technické v Praze
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
Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.
1 Grafické rozhraní Studijní cíl Tento blok je věnován vytváření programů s využitím grafického rozhraní (GUI). Vysvětlen bude základní filozofie pro vytváření aplikací s GUI ve srovnání s konzolovými
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. 1. Odkrokujte následující program a s použitím notace z přednášky sledujte stav paměti
Vytváření a použití knihoven tříd
Vytváření a použití knihoven tříd doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Prostory jmen motivace spolupráce
Ú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
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
Čipové karty Lekařská informatika
Čipové karty Lekařská informatika Následující kód je jednoduchou aplikací pro čipové karty, která po překladu vytváří prostor na kartě, nad kterým jsou prováděny jednotlivé operace a do kterého jsou ukládány
Objektově orientované programování
Objektově orientované programování Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 7 A0B36PR1 Programování 1 Jan Faigl, 2015 A0B36PR1 Přednáška 7: Objektově
Java - výjimky. private void vstup() throws IOException {... }
Java - výjimky Tato kapitola ukazuje na několika příkladech práci s výjimkami v Javě. Klíčové pojmy: Výjimka, hierarchie výjimek, zachytávání výjimek, blok try-catch, tvorba vlastních výjimek, propagace
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
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
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
Algoritmizace a programování
Algoritmizace a programování Struktura programu Vytvoření nové aplikace Struktura programu Základní syntaktické elementy První aplikace Verze pro akademický rok 2012/2013 1 Nová aplikace NetBeans Ve vývojovém
Vyřešené teoretické otázky do OOP ( )
Vyřešené teoretické otázky do OOP (16. 1. 2013) 1) Vyjmenujte v historickém pořadí hlavní programovací paradigmata a stručně charakterizujte každé paradigma. a) Naivní chaotičnost, špatná syntaxe a sémantika
Ú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í
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. 1. Odkrokujte následující program a s použitím notace z přednášky popište stav paměti
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.
Neměnné objekty. Tomáš Pitner, upravil Marek Šabo
Neměnné objekty Tomáš Pitner, upravil Marek Šabo Neměnné objekty Neměnný (immutable) objekt nemůže být po jeho vytvoření modifikován Bezpečně víme, co v něm až do konce života bude Tudíž může být souběžně
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í.
Virtuá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í
Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování.
Jakub Klemsa Jan Legerský Objektově orientované programování klemsjak@fjfi.cvut.cz jan.legersky@gmail.com 30. října 2012 návrhový vzor (design pattern) obecné řešení problému, které se využívá při návrhu
Vzor Továrna - Factory
1 SW_07 Návrhový vzor: Továrna - Factory 1. Jednoduchá továrna - Simple Factory 2. Tovární metoda - Factory Method 3. Abstraktní továrna - Abstract Factory Vzor Továrna - Factory 2 Kontext: při vytváření
public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());
Anotace a Hibernate Aleš Nosek, Ondřej Vadinský, Daniel Krátký Anotace v Javě Anotace jsou novinkou v Javy verze 5. Anotace umožňují doplnit kód Javy o dodatečné informace. Zapisují se přímo do zdrojového