IB111 Programování a algoritmizace

Slides:



Advertisements
Podobné prezentace
(instance konkrétní třídy)
Advertisements

ÚVOD DO C++ 3 TŘÍDY a objekty - POKRAČOVÁNÍ
Stručný úvod do UML.
Seminář C++ 5. cvičení Dědičnost Ing. Jan Mikulka.
HYPERTEXT PREPROCESSOR. PROGRAMOVÁNÍ. DEFINICE POJMŮ Problém Problém nevyřešený, nežádoucí stav obvykle vyžaduje nějaké řešení Neřešitelný problém Neřešitelný.
Spojové struktury Spojová struktura ( linked structure ):
ÚVOD DO CPP 7 Dědičnost - pokračování
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
1NPRG054 Vývoj vysoce výkonného software /2013 David Bednárek Domácí úkol.
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.
Polymorfismus Dědičnost
Programování v C++ Cvičení.
● SWIG - Simplified Wrapper and Interface Generator ● + google a diskusní fóra ● nástroj zjednodušující (a sjednocující)
Čtvrté cvičení Objektové programování Objektový model v Javě
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
Datové struktury. 2 Co je datová struktura v C datový typ složený z jiných datových typů nejjednodušší datová struktura je pole. všechny jeho prvky jsou.
Struktury, qsort, mergesort BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií.
State. State – kontext a problém Kontext  chování objektu má záviset na jeho stavu, který se typicky mění za běhu Neflexibilní řešení  metody obsahují.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
Seminář C++ 9. cvičení Šablony Ing. Jan Mikulka. Šablony ► template – vzory, podle kterých může překladač tvořit skupiny podobných tříd nebo funkcí, které.
Práce se soubory. * soubory patří k základním datovým prvkům v počítači * převážná většina programovacích jazyků má podporu určité formy práce se soubory.
Proč programovat v LS objektově Jiří Krákora, Alliance Healthcare.
Základy algoritmizace a programování
PB161 Jmenné prostory, I/O proudy PB161 | Jmenné prostory, IO proudy PB161 – Programování v jazyce C++ Objektově Orientované Programování.
Přehled současných způsobů tvorby programů
Objektové orientované programování Objektově orientované problémy v PHP Lukáš Masopust 2008.
Objektové programování
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
PB161 – Programování v jazyce C++ Objektově Orientované Programování
Seminář C++ 4. cvičení Objekty Ing. Jan Mikulka. Co je objekt ► obraz třídy i instance ► třída – definovaná za pomocí klíčového slova class ► instance.
6. cvičení Polymorfismus
Počítače a programování 1
PB161 Právo friend, přetěžování operátorů, přetypování PB161 | Friend, operátory PB161 – Programování v jazyce C++ Objektově Orientované Programování.
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í
PB161 Principy OOP - rozhraní, dědičnost PB161 | Principy OOP - Dědičnost, rozhraní
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.
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
Šesté cvičení Výjimky Balíky.
Principy OOP Objektově orientované programování vychá-zí ze třech základních principů (rysů): zapouzdření (encapsulation) dědičnost (inheritance) polymorfismus.
Objektově orientovaný přístup (úvod)
Decorator. Rozšiřuje objekty o dodatečné chování  rozšiřuje konkrétní objekty, ne třídy  rozšiřuje objekt dynamicky, tj. za běhu Upřednostňuje kompozici.
Pokročilé programování v C++ (část B)
Service layer. Service layer – úvod Problém  Vytvoření API aplikace  Odstínění bussiness logiky a transakčního chování od zbytku aplikace  Kam s aplikační.
Strategy. Motivace Různé algoritmy pro stejnou akci Hromada kódu v mnoha podmínkách Důsledky  Komplexnost  Špatná čitelnost  Těžká správa kódu  Těžka.
Iterator Iterator – Problém struct Item { int _value; Item * _next; Item( int value, Item * next ) : _value( value ), _next( next ) { } }; void Print(
Template Method. Motivační příklad – reálný svět Čaj 1) Uvař vodu 2) Dej do hrnku sáček čaje 3) Zalij hrnek 4) Přisyp cukr a vymačkej citrón Káva 1) Uvař.
Iterator. C historie int * rand_numbers(int n) { int *numbers = malloc(n * sizeof(int)); int *it = numbers; while (it < numbers + n) *it++ = rand(); //
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA:
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í v jazyce C++ Speciality jazyka C++, úvod do OOP.
Vývojová prostředí Objektově Orientované Programování OB21-OP-EL-KON-DOL-M Orbis pictus 21. století.
Y36PJC Programování v jazyce C/C++
Úvod do C# - OOP Jaroslav BURDYS 4IT.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Y36PJC Programování v jazyce C/C++
Výukový materiál zpracován v rámci projektu
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Algoritmizace a programování
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Bridge.
Programování v prostředí Borland Delphi
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
ZAL – 7. cvičení 2016.
Transkript prezentace:

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, Ruby Relativně málo rozšířené v dnešní praxi OOP = objektově orientované programování Objekty jsou podporovány, ovšem ne všechno musí být nutně jen objekty. Např. C++, Java, … Dnes velice rozšířený přístup

Terminologie Třída Objekt Základní vlastnosti objektů v OOP Typ objektu Objekt Instance třídy Struktura – atributy (data) a metody (funkce) Základní vlastnosti objektů v OOP Abstrakce Zapouzdření Polymorfismus

Základní paradigmata OOP Datová abstrakce Zavedeme vlastní datový typ Struktura dat Operace nad těmito daty Oddělujeme rozhraní od implementace Zapouzdření prvků třídy Dědičnost Možnost rozšířit existující objekty Polymorfismus Stejné rozhraní k různým objektům (díky zděděným společným vlastnostem).

Zapouzdření Strukturální programování od sebe odděluje data a algoritmy (programový kód). OOP data zapouzdřuje v objektech a práce s nimi je umožněna přes definované rozhraní (pomocí metod objektu). Díky zapouzdření není třeba znát detaily implementace, ale stačí znát a používat rozhraní objektu. Díky zapouzdření je také možné změnit implementaci pokud použijeme stejné rozhraní. Díky „utajení“ je také možné vyhnout se chybám při náhodné nebo nesprávné přímé modifikaci dat. Umožňuje rozdělit úkoly v týmu programátorů.

Zapouzdření – příklad v C struct student { int narozeni_rok, narozeni_mesic, narozeni_den; float studijni_prumer; char jmeno[30]; int vypocitej_vek(); };

Zapouzdření – příklad v Pythonu class student: narozeni_rok, narozeni_mesic, narozeni_den = 0,0,0 studijni_prumer, jmeno = 0.0, "“ def vypocitej_vek(self): …

Zapouzdření Data a metody ve třídě mohou být několika typů podle jejich „viditelnosti“ public – k datům a proměnným je volný přístup Správný OOP program by měl ponechat public pouze metody, ne data. private – metody a data nejsou přístupná z jiných částí kódu něž z metod této třídy protected – metody a data nejsou volně přístupné, ale jsou přístupné potomkům této třídy.

Zapouzdření - příklad ePeněženka – rozhraní třídy class penezenka { private: int koruny, halire; public: penezenka () { koruny = halire = 0; }; void nabij (int k); BOOL zaplat (int k, int h); void vypis_aktualni_stav(); };

Zapouzdření - příklad Implementace void penezenka::nabij (int k) { koruny+=k; } BOOL penezenka::zaplat (int k, int h) { long zbytek = koruny*100+halire – (k*100+h); if(zbytek<0) return FALSE; koruny = zbytek /100; halire = zbytek%100; return TRUE; }

Zapouzdření - příklad Použití: penezenka moje, cizi; moje.nabij(100); moje.zaplat(2,50); moje.vypis_aktualni_stav(); cizi.nabij(5); cizi.vypis_aktualni_stav(); void penezenka::nabij (int k) { koruny+=k; } moje: 100 cizi: 5

Zapouzdření - Python Python nezná „private“ členy třídy class MyClass: i = 12345 def f(self): return 'hello world' Python nezná „private“ členy třídy Domluva: co začíná znakem „_“ je neveřejné Specialitka: co začíná „__“ tak se upraví

Python - příklad

Dědičnost Dědičnost umožňuje rozšiřování funkčnosti třídy. Potomek je nová třída založená na třídě původní (rodičovské). Potomek přebírá vlastnosti rodiče a může být dál rozšiřován (nová data a metody).

Dědičnost - příklad Základní objekt (rodič) bude člověk. Potomky budou student, zaměstnanec a učitel. Každý člověk má základní atributy jako jméno, příjmení, datum narození a adresu. Studenti mají navíc studijní průměr, a jsou zapsáni v určitém ročníku. Zaměstnanci mají plat a ten je jim posílán na nějaký bankovní účet. Učitelé jsou zaměstnanci, ale mají konzultační hodiny a učí nějaké předměty

Dědičnost - příklad Člověk Student Zaměstnanec Učitel

Příklad v Pythonu

Dědičnost – příklad v C++ class clovek { public: char jmeno[20],prijmeni[30]; int narozeni_rok, narozeni_masic, narozeni_den; char adresa [100]; int vypocitej_vek(); }; class student : public clovek { int rocnik; float prumer; }; class zamestnanec : public clovek { int plat; char IBAN [20]; }; class ucitel : public zamestnanec { char konzultacky[50]; list_of_subjects *uci; };

Dědičnost – příklad v C++ clovek c; zamestnanec z ; ucitel u; int v1= c.vypocitej_vek(); int v2= z.vypocitej_vek(); c = u; // i učitel je člověk z = c; // NELZE – ne každý člověk je zaměstnanec

Polymorfismus Polymorfismus = jednotné zacházení s různými (polymorfními) objekty mající některé společné zděděné vlastnosti. Polymorfismus v praxi znamená, že je možné mít různé třídy s metodami se stejnými parametry. Mohu tak odlišit chování potomků. Pozdní vazba – late binding Polymorfismus umožňuje mít stejně pojmenované metody s různými parametry. Parametry se mohou lišit v počtu a/nebo typu. Mluvíme o tzv. přetížení metod (funkcí).

Příklad v Pythonu

Polymorfismus - příklad void penezenka::zaplat (int k, int h) { long zbytek = koruny*100+halire – (k*100+h); if(zbytek<0) return FALSE; koruny = zbytek /100; halire = zbytek%100; return TRUE; } void penezenka::zaplat (int k) { long zbytek = koruny – k; if(zbytek<0) return FALSE; koruny = zbytek; return TRUE; } void penezenka::zaplat (void) { long zbytek = koruny – 10; if(zbytek<0) return FALSE; koruny = zbytek; return TRUE; }

Polymorfismus - příklad penezenka moje; moje.nabij(100); moje.zaplat(10,0); moje.zaplat(10); moje.zaplat(); moje.vypis_aktualni_stav();

Oprátory new, delete v C++ Vytvoření objektu a jeho rušení pomocí dynamické alokace paměti. penezenka *moje = new penezenka; moje -> nabij(100); moje -> zaplat(5,50); delete moje;

Konstruktory, destruktory Metody, které jsou (automaticky) volány při vytváření/rušení instance objektu. Vhodné pro Inicializaci proměnných Alokaci/dealokaci paměti

Kontruktory - příklad class student { private: float prumer; char *jmeno; public: student () {prumer=0.0; jmeno=NULL; } student(float p,char *j) { prumer=p; jmeno = (char*)malloc(strlen(j)+1); if(jmeno)strcpy(jmeno,j); } ~student() { if(jmeno) free(jmeno); } … };

Příklad v Pythonu

Přetěžování operátorů v C++ Mohu přetížit (změnit) běžné operátory Např. +, -, += Přetížit lze téměř všechny operátory Nelze přetížit ., ?:, sizeof, ::, .* Přetížení operátorů velice usnadňuje používání tříd/objektů programátory

Přetěžování operátorů - příklad class komplex { public: float Re, Im; komplex (float r, float i) { Re=r; Im=i; }; komplex komplex::operator+=(komplex &b) { Re+=b.Re; Im+=b.Im; return *this; }; komplex komplex::operator+(komplex &b) return komplex (Re + b.Re, Im + b.Im); komplex a(1,0), b(2,0); komplex c = a + b; c+= komplex(1,5);

Přetěžování operátorů v Pythonu

Přetěžování operátorů v Pythonu