OOP OOP (Object Oriented Programming)

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

(instance konkrétní třídy)
Seminář C++ 5. cvičení Dědičnost Ing. Jan Mikulka.
Programovací jazyk C++
Třída SIMSET je druhou standardní systémovou třídou, která obsahuje prostředky pro práci se spojovými seznamy. KRUHOVÉ SPOJOVÉ SEZNAMY Spojový seznam –
Programování funkcí v Excelu
OOP OOP (Object Oriented Programming)
25/08/20141 Typ struktura (1) Datový typ struktura ( struct ) je agrego- vaný heterogenní datový typ Jedná se o skupinu několika proměnných, které mohou.
Pole, ukazatele a odkazy
ÚVOD DO CPP 7 Dědičnost - pokračování
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
Konstanty jsou datové objekty jejich hodnoty nelze v programu měnit Deklarace Const jméno = hodnota Příklad: Textový řetězec ZPRAVA Const ZPRAVA = “Zadej.
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
C++ Přednáška 3 Konstantní a statické členy tříd, ukazatel this, konstantní instance třídy Ing. Jiří Kulhánek , kat. 352, VŠB TU Ostrava 2004.
Čtvrté cvičení Objektové programování Objektový model v Javě
Materiály k přednášce Úvod do programování Ondřej Čepek.
J a v a Začínáme programovat Lucie Žoltá. Odkazy - oficiální stránky (překladače, help, metody, vývojové prostředí NetBeans,...)
Objekty v CLIPSu RNDr. Jiří Dvořák, CSc.
C# - datové typy Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
C# - Exceptions (výjimky)
PHP – Základy programování
Objektové programování
C# - funkce a procedury Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
08/04/20151 Delegáty (1) Delegát (delegate) je datový typ, který definuje signaturu metody Delegáty bývají rovněž označovány jako typo- vě bezpečné ukazatele.
Počítače a programování 1
Konstanty u jsou datové objekty u jejich hodnoty nelze v programu měnit u Deklarace Const jméno = hodnota Příklad: Textový řetězec ZPRAVA Const ZPRAVA.
VISUAL BASIC PRALG.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
Algoritmizace a programování Objektově orientované programování - 16 Mgr. Josef Nožička IKT Algoritmizace a programování
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
IB111 Programování a algoritmizace
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
OSNOVA: a) Přetížení členských funkcí b) Dědičnost tříd Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 2 pro obor EST BPC2E.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
13/04/20151 Indexery (1) Členy třídy (struktury) umožňující třídě (struk- tuře) používat hranaté závorky a pracovat s ní podobně jako s polem (používat.
13/04/20151 Datový typ třída – class (1) Datový typ definovaný uživatelem Poskytuje mechanismus pro modelování entit, s nimiž manipulují aplikace Charakterizuje.
Databázové modelování
Principy OOP Objektově orientované programování vychá-zí ze třech základních principů (rysů): zapouzdření (encapsulation) dědičnost (inheritance) polymorfismus.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Pokročilé programování v C++ (část B)
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Jaroslav BURDYS 4IT.  Čistě OOP jazyk (objektově orientovaný programovací jazyk)  Objekty založeny na tzv. objektových typech: Struktura (struct)
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Datové typy a operátory Základní programové.
Překladače 6. Sémantická analýza
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
Programování OPERÁTOR SIZEOF, FUNKCE, POLE JAKO PARAMETRY FUNKCÍ ERIK KRÁL.
SOFTWAROVÁ PODPORA PRO VYTVÁŘENÍ FUZZY MODELŮ Knihovna fuzzy procedur Ing. Petr Želasko, VŠB-TU Ostrava.
Programování v jazyce C++ Speciality jazyka C++, úvod do OOP.
Makra v Excelu syntaxe. Zápis nahraného makra SubEnd Sub O klíčová slova Sub a End Sub – začátek a konec makra O komentáře O text za znakem ', až do konce.
Typ struktura (1) Datový typ struktura (struct) je agrego-vaný heterogenní datový typ Jedná se o skupinu několika proměnných, které mohou mít různé datové.
Úvod do C# - OOP Jaroslav BURDYS 4IT.
PV178 – Úvod do vývoje v C#/.NET
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Výukový materiál zpracován v rámci projektu
Programovací jazyk C Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jitka Vlčková. Dostupné z Metodického portálu ISSN.
Rysy MS Windows Možnost multitaskingu a multithreadingu
Návrhový vzor Flyweight
Funkce výstupu (2) Funkce printf: deklarována v: stdio.h
Dynamické proměnné (1) Proměnné, jejichž počet a (nebo) velikost pa-měti využívané těmito proměnnými se v prů-běhu programu mění Dynamické proměnné lze.
Oblast platnosti identifikátoru (1)
Typ pole (1) Proměnná typu pole představuje kolekci proměnných stejného datového typu, které mohou být označovány společným jménem (identifikátorem) Pole.
Programování v prostředí Borland Delphi
C# přehled vlastností.
Typ ukazatel (1) Proměnné typu ukazatel (pointer) uchovávají paměťovou adresu Hodnota ukazatele říká, kde (na jaké adrese) se v paměti nachází nějaký objekt.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Transkript prezentace:

OOP OOP (Object Oriented Programming) je založeno na myšlence, že program provádí jisté akce nad jistými objekty, které reprezentují data dovoluje vytváření dále rozšiřitelných (otevře-ných) systémů Pro umožnění objektově orientovaného návr-hu poskytují dnešní programovací jazyky (vý-vojová prostředí) speciální datové typy: objektový typ (object): Turbo Pascal 5.0 a vyšší třída (class): C#, C++, Java, ObjectPascal (Delphi) 27/01/2018

Programovací jazyk C# Vyvinutý v rámci platformy MS .NET Jedná se o objektově orientovaný jazyk Založen na jazycích C++ a Java Syntaxe C# je podobná syntaxi jazyka C Lze jej využít k tvorbě např.: desktopových aplikací webových aplikací, webových služeb a stránek programů pro mobilní zařízení (PDA, mobilní telefony) databázových programů 27/01/2018

Program v jazyce C# Tvořen třídami a jejich členy (members) Třídy a další datové typy jsou organizovány ve jmenných prostorech (namespace) a mo-hou být vnořovány do jiných tříd Vstupním bodem každého programu v C# je metoda (funkce obsažená v typu třída) Main: může být v programu pouze jedna jedná se o statickou metodu návratovým typem může být void nebo int může přijímat parametry z příkazové řádky OS 27/01/2018

Datový typ třída – class (1) Datový typ definovaný uživatelem Poskytuje mechanismus pro modelování entit, s nimiž manipulují aplikace Charakterizuje vlastnosti a chování objektů Je možné ji definovat pomocí klíčového slova class Může obsahovat následující členy: konstanty (constants) datové položky (fields) 27/01/2018

Datový typ třída – class (2) metody (methods) konstruktory instance (instance constructors) statické konstruktory (static constructors) finalizery (finalizers) vlastnosti (properties) události (events) indexery (indexers) operátory (operators) vnořené deklarace typů (nested type declarations) 27/01/2018

Datový typ třída – class (3) Každý člen uvnitř třídy má svoji tzv. přístup-nost (accessibility) určující, jakým způsobem je nebo není přístupný (viditelný) zvenčí Nejčastěji se používá přístupnost: public (veřejná): přístup k danému členu není nijak omezován člen je přístupný uvnitř i vně dané třídy private (privátní, soukromá): daný člen je přístupný pouze uvnitř třídy, v níž je defi-nován jedná se o implicitní přístupnost k členu 27/01/2018

Datový typ třída – class (4) Příklad třídy: class Ctverec { private int strana; public Ctverec(int pocatecniStrana) { strana = pocatecniStrana; } public int UrciObsah() { return strana*strana; } } 27/01/2018

Datový typ třída – class (5) Na základě datového typu třída lze vytvořit její instanci Instanci typu třída označujeme jako objekt Objekt je vytvářen pomocí klíčového slova new (způsobí vyvolání konstruktoru) Příklad: Ctverec c; c = new Ctverec(5); nebo Ctverec c = new Ctverec(5); 27/01/2018

Jmenný prostor (1) Jmenný prostor (namespace) představuje po-jmenovaný kontejner pro další identifikátory (např. třídy) Používán k seskupení a k rozlišení identifiká-torů Různé jmenné prostory mohou obsahovat stejné identifikátory Dva identifikátory se stejným názvem nelze zaměnit, pokud se nacházejí v různých jmen-ných prostorech 27/01/2018

Jmenný prostor (2) Jmenný prostor je možné definovat pomocí klíčového slova namespace Každý jmenný prostor má přístup typu public Identifikátor lze zpřístupnit pomocí označení jmenného prostoru (jmenných prostorů), např.: System.Console.WriteLine(…); kde: System – jmenný prostor Console – třída WriteLine – metoda 27/01/2018

Jmenný prostor (3) Pomocí klíčového slova using je možné da-ný jmenný prostor zařadit do aktuálního obo-ru platnosti Pro zpřístupnění identifikátoru pak není nutné uvádět označení jmenného prostoru Příklad: using System; Console.WriteLine(…); 27/01/2018

Přetěžování metod Přetěžování metod – overloading: dovoluje deklarovat více než jedenu metodu se stejným oborem platnosti a se stejným jménem jedna metoda se tak může vyskytovat ve více variantách přetěžované metody musí mít rozdílný seznam formálních parametrů, tj. musí se lišit počtem formálních parametrů nebo jejich typy na základě použitých skutečných parametrů (v době volání) je rozhodnuto, která varianta bude použita 27/01/2018

Předdefinované datové typy (1) Jazyk C# poskytuje sadu předdefinovaných datových typů, které se nachází ve jmenném prostoru System Jednotlivé datové typy (vyjma typu string a object) jsou synonymy struktur, které obsahují metody  tyto metody lze pomocí tečkové notace volat Všechny tyto struktury poskytují např. meto-du ToString, která vrací řetězec reprezen-tující současný objekt 27/01/2018

Předdefinované datové typy (2) Popis Velikost Typový ekvivalent sbyte celočíselný typ se znaménkem 8 b System.SByte short celočíselný typ 16 b System.Int16 int celočíselný typ 32 b System.Int32 long celočíselný typ 64 b System.Int64 byte celočíselný typ bez znaménka 8 b System.Byte ushort celočíselný typ 16 b System.UInt16 uint celočíselný typ 32 b System.UInt32 ulong celočíselný typ 64 b System.UInt64 float reálný typ (s jednoduchou přesností) 32 b System.Single double reálný typ (s dvojitou přesností) 64 b System.Double 27/01/2018

Předdefinované datové typy (3) Popis Velikost Typový ekvivalent bool logický (booleovský) typ 8 b System.Boolean char znakový typ (Unicode) 16 b System.Char decimal peněžní hodnoty (28 platných číslic) 128 b System.Decimal object kořen objektové hierarchie System.Object string posloupnost znaků (řetězec) 16 b / znak System.String Poznámka: datové typy string a object jsou popsány jako třídy (nikoliv jako struktury) 27/01/2018

Hodnotové a referenční typy (1) Každý typ v jazyce C# je přímo nebo nepří-mo odvozen od třídy object Hodnotové typy (value types): jejich proměnné přímo nesou (obsahují) svá data každá proměnná má svou vlastní kopii dat změna hodnoty jedné proměnné neovlivňuje hodnotu proměnné jiné jsou ukládány na zásobníku patří mezi ně většina předdefinovaných typů (vyj-ma object a string) a výčtové typy pro vytvoření vlastních hodnotových typů slouží struktury 27/01/2018

Hodnotové a referenční typy (2) Referenční (odkazové) typy (reference types): jejich proměnné ukládají odkaz (referenci) na data (objekty) pokud dojde k přiřazení proměnné, tak dojde ke zkopírování odkazu je možné, aby dvě proměnné obsahovaly odkaz na stejný objekt operace nad jednou proměnnou může ovlivnit objekt, na nějž se odkazuje proměnná jiná v paměti jsou ukládány na spravované haldě (managed heap) 27/01/2018

Předávání parametrů metodám (1) Parametry předávané hodnotou: deklarovány bez použití modifikátoru ref nebo out u hodnotových typů: dochází k předání kopie dat ze skutečného parametru do parametru formálního změny provedené uvnitř metody nad formálním para-metrem nijak neovlivňují hodnotu parametru skuteč-ného u referenčních typů: dochází pouze k předání odkazu jestliže metoda hodnotu přijatého objektu změní, pak se změna projeví i v původním objektu skutečný parametr musí být v době volání inicia-lizovaný, tj. musí mít přiřazenou hodnotu 27/01/2018

Předávání parametrů metodám (2) Parametry předávané odkazem: před formálním i skutečným parametrem musí být uveden modifikátor ref nedochází k vytvoření nového paměťového místa pro formální parametr formální parametr reprezentuje stejné paměťové místo, které náleží parametru skutečnému všechny změny provedené nad formálním para-metrem se promítají do parametru skutečného skutečný parametr musí být v době volání inicia-lizovaný, tj. musí mít přiřazenou hodnotu 27/01/2018

Předávání parametrů metodám (3) Parametry výstupní: před formálním i skutečným parametrem musí být uveden modifikátor out podobné chování jako u parametrů předávaných odkazem všechny změny provedené nad formálním para-metrem se promítají do parametru skutečného skutečný parametr nemusí být v době volání ini-cializovaný, tj. nemusí mít přiřazenou hodnotu v průběhu metody mu musí být přiřazena hodnota 27/01/2018

Principy OOP Objektově orientované programování vychá-zí ze třech základních principů (rysů): zapouzdření (encapsulation) dědičnost (inheritance) polymorfismus 27/01/2018

Zapouzdření Třída může obsahovat libovolné množství členů Při správném objektově orientovaném přístu-pu by však měla být data skryta (zapouzdřena) uvnitř třídy K jednotlivým objektům by se mělo přistupo-vat prostřednictvím metod nebo vlastností Toto snižuje nebezpečí vzniku chyby a umož-ňuje tvůrci modifikovat vnitřní reprezentaci třídy 27/01/2018

Dědičnost (1) Jedná se o prostředek, který umožňuje dosáh-nout snadné rozšiřitelnosti a znovupoužitel-nosti již existujících částí programu Dovoluje definovat novou třídu (B), která vznikne pouze přidáním nových členů k těm, které již byly definovány v rámci jiné třídy (A) Třída: A se stává bezprostředním předkem třídy B B je bezprostředním potomkem třídy A 27/01/2018

Dědičnost (2) Nechť je dána třída: class Datum { private byte den, mesic; private ushort rok; public Datum(byte d, byte m, ushort r) {…} public string GetDatum() {…} public bool JePrestupnyRok() {…} } Na jejím základě lze definovat jejího potomka 27/01/2018

Dědičnost (3) Informace o bezprostředním předkovi se zapi-suje v definici třídy (za jejím názvem – oddě-lena dvojtečkou) Příklad: class DatumRoz : Datum { public DatumRoz (byte d, byte m, ushort r) : base(d, m, r) {…} public void PrictiDen() {…} public void OdectiDen() {…} private byte DniVMesici() {…} } 27/01/2018

Dědičnost (4) Jestliže třída B je potomkem třídy A, tak jsou třídě B automaticky dostupné všechny členy (vyjma konstruktorů instancí, statických kon-struktorů a finalizerů ) třídy A, aniž by bylo nutné je znovu definovat Říkáme, že třída B dědí členy třídy A Jestliže při definici třídy v jazyku C# neuve-deme žádného předka, je jejím předkem auto-maticky třída object (System.Object) 27/01/2018

Dědičnost (5) Každá definovaná třída automaticky dědí členy definované ve třídě object (např. metodu ToString) Zděděné datové položky bývají obvykle inicia-lizovány vyvoláním konstruktoru předka Konstruktor předka se volá pomocí klíčového slova base, které je uvedeno za hlavičkou konstruktoru potomka (odděleno dvojtečkou) Příklad: public DatumRoz(byte d, byte m, ushort r) : base(d, m, r) {…} 27/01/2018

Dědičnost (6) objekt předka = objekt potomka; Platí, že proměnné typu třída A (předchůdce) je možné přiřadit proměnnou typu třída B (následníka) – opačné přiřazení není možné Lze provést přiřazení tvaru: objekt předka = objekt potomka; Příklad: Datum d = new Datum(1, 1, 2000); DatumRoz dRoz = new DatumRoz(2, 8, 2010); d = dRoz; 27/01/2018

Polymorfismus (1) Rys umožňující, aby akce uskutečňované nad různými objekty byly pojmenovány stejně, přičemž ale jejich realizace je různá (podle toho, nad kterým objektem se provádějí) Nástrojem pro realizaci polymorfismu jsou tzv. virtuální metody Virtuální metody: obsahují ve své definici klíčové slovo virtual implementace virtuálních metod může být na úrovni potomka nahrazena implementací jinou 27/01/2018

Polymorfismus (2) umožňují volat různé verze stejné metody na zá-kladě typu objektu určeného dynamicky za běhu programu proces nahrazení implementace zděděné virtuální metody se označuje jako předefinování (potlačení, overriding) metody metoda realizující odlišnou implementaci na úrov-ni potomka musí ve své definici obsahovat klíčové slovo override nová implementace metody (na úrovni potomka) může volat původní implementaci téže metody (na úrovni předka) pomocí klíčového slova base, jež se zapisuje v příkazové části metody 27/01/2018

Polymorfismus (3) poznámky: klíčová slova virtual a override nelze použít u soukromých (privátních) metod signatura metody, která provádí předefinování, musí být stejná (včetně návratového typu) jako signatura původní metody metoda s klíčovým slovem override je rovněž vir-tuální a může být na úrovni dalšího potomka opět pře-definována 27/01/2018

Vlastnosti (1) Členy třídy umožňující přístup k charakteris-tickým atributům objektu nebo třídy, např.: délka řetězce velikost fontu titulek okna jméno zákazníka apod. Představují rozšíření datových položek: pojmenované členy s daným datovým typem používají stejnou syntaxi pro své zpřístupnění 27/01/2018

Vlastnosti (2) Na rozdíl od datových položek nereprezentují paměťové místo pro uložení hodnoty Překladač automaticky převádí zpřístupnění vlastností na volání přístupových metod Přístupové metody specifikují příkazy, jež mají být provedeny při: čtení hodnoty vlastnosti změně hodnoty vlastnosti (zápisu) 27/01/2018

Vlastnosti (3) Přístupové metody jsou zapisovány pomocí klíčových slov get: uvozuje přístupovou metodu pro čtení set: uvozuje přístupovou metodu pro zápis Zapisovaná data jsou přístupovým metodám (set) předávána pomocí vestavěného (skry-tého) parametru value Konvence: soukromé datové položky jsou psány s malým po-čátečním písmenem, zatímco veřejné vlastnosti s počátečním písmenem velkým 27/01/2018

Vlastnosti (4) Příklad: class Ctverec { private int strana; public int Strana { get { return strana; } set { strana = value; } } } 27/01/2018

Vlastnosti (5) Nechť je dána deklarace: int s; Ctverec c = new Ctverec(5); Vlastnost Strana lze zpřístupnit: pro čtení – např.: s = c.Strana; (volá c.Strana.get) pro zápis – např.: c.Strana = 2*s; (volá c.Strana.set) Vlastnost může obsahovat pouze metodu: get: vlastnost určena jen pro čtení set: vlastnost určena jen pro zápis 27/01/2018

Vlastnosti (6) Omezení vlastnosti: vlastnost nelze použít jako parametr s modifiká-torem ref nebo out (za vlastností se skrývá pří-stupová metoda nikoliv paměťové místo) vlastnost může obsahovat jednu přístupovou me-todu get a jednu přístupovou metodu set (ne-smí obsahovat žádné jiné metody, datové polož-ky nebo vlastnosti) přístupové metody nesmí přijímat žádné paramet-ry (zapisovaná data jsou u metody set předává-na prostřednictvím value) u vlastností nelze používat modifikátor const 27/01/2018

Vlastnosti (7) Jestliže metody get, resp. set provádějí pouze operace, které slouží k přečtení, resp. přiřazení do datové položky, pak je možné jejich příkazovou část vynechat Příklad: class Ctverec { public int Strana { get; set; } } 27/01/2018

Události (1) Členy třídy umožňující objektu nebo třídě reagovat na zprávy (události) Program může definovat metody, které mají za úkol zpracovat příchozí zprávy, např.: stisknutí klávesy stisknutí tlačítka myši pohyb myši apod. Metoda realizující zpracování (obsluhu) zprá-vy (reagující na zprávu) se označuje jako tzv. event handler (obslužná metoda) 27/01/2018

Události (2) Parametry obslužné metody musí odpovídat definici prototypu funkce, která se nazývá delegát (delegate, zástupce) Definice: delegáta se provádí pomocí delegate události pomocí klíčového slova event Metod obsluhujících události může být více a jejich návratovým typem je typ void Odkaz na obslužnou metodu se: do události vkládá pomocí operátoru += z události odebírá pomocí operátoru -= 27/01/2018