Title: OOP
1OOP
- 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árení dále rozširitelných
(otevre-ných) systému - Pro umožnení objektove orientovaného návr-hu
poskytují dnešní programovací jazyky (vý-vojová
prostredí) speciální datové typy - objektový typ (object) Turbo Pascal 5.0 a vyšší
- trída (class) ObjectPascal (Delphi), C, C,
Java
2Programovací jazyk C
- Vyvinutý v rámci platformy MS .NET
- Jedná se o objektove orientovaný jazyk
- Založen na jazycích C a Java
- Syntaxe C je podobná syntaxi jazyka C
- Lze jej využít k tvorbe napr.
- desktopových aplikací
- webových aplikací, webových služeb a stránek
- programu pro mobilní zarízení (PDA, mobilní
telefony) - databázových programu
3Program v jazyce C
- Tvoren trídami a jejich cleny (members)
- Trídy a další datové typy jsou organizovány ve
jmenných prostorech (namespace) a mo-hou být
vnorovány do jiných tríd - Vstupním bodem každého programu v C je metoda
(funkce obsažená v typu trída) Main - muže být v programu pouze jedna
- jedná se o statickou metodu
- návratovým typem muže být void nebo int
- muže prijímat parametry z príkazové rádky OS
4Datový typ trída class (1)
- Datový typ definovaný uživatelem
- Poskytuje mechanismus pro modelování entit, s
nimiž manipulují aplikace - Charakterizuje vlastnosti a chování objektu
- Je možné ji definovat pomocí klícového slova
class - Muže obsahovat následující cleny
- konstanty (constants)
- datové položky (fields)
5Datový typ trída class (2)
- metody (methods)
- vlastnosti (properties)
- události (events)
- operátory (operators)
- indexery (indexers)
- konstruktory instance (instance constructors)
- destruktory (destructors)
- statické konstruktory (static constructors)
- vnorené deklarace typu (nested type declarations)
6Datový typ trída class (3)
- Každý clen uvnitr trídy má svoji tzv.
prístup-nost (accessibility) urcující, jakým
zpusobem je nebo není prístupný (viditelný)
zvencí - Nejcasteji se používá prístupnost
- public (verejná)
- prístup k danému clenu není nijak omezován
- clen je prístupný uvnitr i vne dané trídy
- private (privátní, soukromá)
- daný clen je prístupný pouze uvnitr trídy, v níž
je defi-nován - jedná se o implicitní prístupnost k clenu
7Datový typ trída class (4)
- Príklad trídyclass Ctverec private int
strana - public Ctverec(int pocatecniStrana)
-
- strana pocatecniStrana
-
- public int UrciObsah()
- return stranastrana
8Datový typ trída class (5)
- Na základe datového typu trída lze vytvorit její
instanci - Instanci typu trída oznacujeme jako objekt
- Objekt je vytváren pomocí klícového slova new
(zpusobí vyvolání konstruktoru) - PríkladCtverec cc new Ctverec(5)neboCtver
ec c new Ctverec(5)
9Jmenný prostor (1)
- Jmenný prostor (namespace) predstavuje
po-jmenovaný kontejner pro další identifikátory
(napr. trídy) - Používán k seskupení a k rozlišení
identifiká-toru - Ruzné jmenné prostory mohou obsahovat stejné
identifikátory - Dva identifikátory se stejným názvem nelze
zamenit, pokud se nacházejí v ruzných jmen-ných
prostorech
10Jmenný prostor (2)
- Jmenný soubor je možné definovat pomocí klícového
slova namespace - Každý jmenný prostor má prístup typu public
- Identifikátor lze zprístupnit pomocí oznacení
jmenného prostoru (jmenných prostoru),
napr.System.Console.WriteLine()kde - System jmenný prostor
- Console trída
- WriteLine metoda
11Jmenný prostor (3)
- Pomocí klícového slova using je možné da-ný
jmenný prostor zaradit do aktuálního obo-ru
platnosti - Pro zprístupnení identifikátoru pak není nutné
uvádet oznacení jmenného prostoru - Príkladusing SystemConsole.WriteLine()
12Pretežování metod
- Pretež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 muže vyskytovat ve více
variantách - pretežované metody musí mít rozdílný seznam
formálních parametru, tj. musí se lišit poctem
formálních parametru nebo jejich typy - na základe použitých skutecných parametru (v
dobe volání) je rozhodnuto, která varianta bude
použita
13Preddefinované datové typy (1)
- Jazyk C poskytuje sadu preddefinovaných datových
typu, 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í teckové notace
volat - Všechny tyto struktury poskytují napr. meto-du
ToString, která umožnuje prevést císelnou hodnotu
na její textové vyjádrení
14Preddefinované datové typy (2)
Typ
Popis
Velikost
Typový ekvivalent
sbyte
celocíselný typ
8 b
System.SByte
se znaménkem
short
celocíselný typ
16 b
System.Int16
int
celocíselný typ
32 b
System.Int32
long
celocíselný typ
64 b
System.Int64
byte
celocíselný typ
8 b
System.Byte
bez znaménka
ushort
celocíselný typ
16 b
System.UInt16
uint
celocíselný typ
32 b
System.UInt32
ulong
celocíselný typ
64 b
System.UInt64
float
reálný typ (s jednoduchou presností)
32 b
System.Single
double
reálný typ (s dvojitou presností)
64 b
System.Double
15Preddefinované datové typy (3)
Typ
Popis
Velikost
Typový ekvivalent
bool
logický (booleovský) typ
8 b
System.Boolean
char
znakový typ (Unicode)
16 b
System.Char
decimal
penežní hodnoty (28 platných císlic)
128 b
System.Decimal
object
koren objektové hierarchie
System.Object
string
posloupnost znaku (retezec)
16 b / znak
System.String
- Poznámka
- datové typy string a object jsou popsány jako
trídy (nikoliv jako struktury)
16Hodnotové a referencní typy (1)
- Každý typ v jazyce C je prímo nebo neprí-mo
odvozen od trídy object - Hodnotové typy (value types)
- jejich promenné prímo nesou (obsahují) svá data
- každá promenná má svou vlastní kopii dat
- zmena hodnoty jedné promenné neovlivnuje hodnotu
promenné jiné - jsou ukládány na zásobníku
- patrí mezi ne vetšina preddefinovaných typu
(vyj-ma object a string) a výctové typy - pro vytvorení vlastních hodnotových typu slouží
struktury
17Hodnotové a referencní typy (2)
- Referencní (odkazové) typy (reference types)
- jejich promenné ukládají odkaz (referenci) na
data (objekty) - pokud dojde k prirazení promenné, tak dojde ke
zkopírování odkazu - je možné, aby dve promenné obsahovaly odkaz na
stejný objekt - operace nad jednou promennou muže ovlivnit
objekt, na nejž se odkazuje promenná jiná - v pameti jsou ukládány na spravované halde
(managed heap)
18Predávání parametru metodám (1)
- Parametry predávané hodnotou
- deklarovány bez použití modifikátoru ref nebo out
- u hodnotových typu
- dochází k predání kopie dat ze skutecného
parametru do parametru formálního - zmeny provedené uvnitr metody nad formálním
para-metrem nijak neovlivnují hodnotu parametru
skutec-ného - u referencních typu
- dochází pouze k predání odkazu
- jestliže metoda hodnotu prijatého objektu zmení,
pak se zmena projeví i v puvodním objektu - skutecný parametr musí být v dobe volání
inicia-lizovaný, tj. musí mít prirazenou hodnotu
19Predávání parametru metodám (2)
- Parametry predávané odkazem
- pred formálním i skutecným parametrem musí být
uveden modifikátor ref - nedochází k vytvorení nového pametového místa pro
formální parametr - formální parametr reprezentuje stejné pametové
místo, které náleží parametru skutecnému - všechny zmeny provedené nad formálním para-metrem
se promítají do parametru skutecného - skutecný parametr musí být v dobe volání
inicia-lizovaný, tj. musí mít prirazenou hodnotu
20Predávání parametru metodám (3)
- Parametry výstupní
- pred formálním i skutecným parametrem musí být
uveden modifikátor out - podobné chování jako u parametru predávaných
odkazem - všechny zmeny provedené nad formálním para-metrem
se promítají do parametru skutecného - skutecný parametr nemusí být v dobe volání
ini-cializovaný, tj. nemusí mít prirazenou
hodnotu - v prubehu metody mu musí být prirazena hodnota
21Principy OOP
- Objektove orientované programování vychá-zí ze
trech základních principu (rysu) - zapouzdrení (encapsulation)
- dedicnost (inheritance)
- polymorfismus
22Zapouzdrení
- Trída muže obsahovat libovolné množství clenu
- Pri správném objektove orientovaném prístu-pu by
však mela být data skryta (zapouzdrena) uvnitr
trídy - K jednotlivým objektum by se melo pristupo-vat
prostrednictvím metod nebo vlastností - Toto snižuje nebezpecí vzniku chyby a umož-nuje
tvurci modifikovat vnitrní reprezentaci trídy
23Dedicnost (1)
- Jedná se o prostredek, který umožnuje dosáh-nout
snadné rozširitelnosti a znovupoužitel-nosti již
existujících cástí programu - Dovoluje definovat novou trídu (B), která vznikne
pouze pridáním nových clenu k tem, které již byly
definovány v rámci jiné trídy (A) - Trída
- A se stává bezprostredním predkem trídy B
- B je bezprostredním potomkem trídy A
24Dedicnost (2)
- Necht je dána trídaclass 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áklade lze definovat jejího potomka
25Dedicnost (3)
- Informace o bezprostredním predkovi se zapi-suje
v definici trídy (za jejím názvem odde-lena
dvojteckou) - Príkladclass DatumRoz Datum public
DatumRoz (byte d, byte m, ushort r)
base(d, m, r) public void PrictiDen()
public void OdectiDen() private byte
DniVMesici()
26Dedicnost (4)
- Jestliže trída B je potomkem trídy A, tak jsou
tríde B automaticky dostupné všechny cleny (vyjma
konstruktoru instancí, statických kon-struktoru a
destruktoru ) trídy A, aniž by bylo nutné je
znovu definovat - Ríkáme, že trída B dedí cleny trídy A
- Jestliže pri definici trídy v jazyku C
neuve-deme žádného predka, je jejím predkem
auto-maticky trída object (System.Object)
27Dedicnost (5)
- Každá definovaná trída automaticky dedí cleny
definované ve tríde object (napr. metodu
ToString) - Zdedené datové položky bývají obvykle
inicia-lizovány vyvoláním konstruktoru predka - Konstruktor predka se volá pomocí klícového slova
base, které je uvedeno za hlavickou konstruktoru
potomka (oddeleno dvojteckou) - Príkladpublic DatumRoz(byte d, byte m, ushort
r) base(d, m, r)
28Dedicnost (6)
- Platí, že promenné typu trída A (predchudce) je
možné priradit promennou typu trída B
(následníka) opacné prirazení není možné - Lze provést prirazení tvaru
- objekt predka objekt potomka
- PríkladDatum d new Datum(1, 1,
2000)DatumRoz dRoz new DatumRoz(2, 8,
2010)d dRoz
29Polymorfismus (1)
- Rys umožnující, aby akce uskutecnované nad
ruznými objekty byly pojmenovány stejne, pricemž
ale jejich realizace je ruzná (podle toho, nad
kterým objektem se provádejí) - Nástrojem pro realizaci polymorfismu jsou tzv.
virtuální metody - Virtuální metody
- obsahují ve své definici klícové slovo virtual
- implementace virtuálních metod muže být na úrovni
potomka nahrazena implementací jinou
30Polymorfismus (2)
- umožnují volat ruzné verze stejné metody na
zá-klade typu objektu urceného dynamicky za behu
programu - proces nahrazení implementace zdedené virtuální
metody se oznacuje jako predefinování (potlacení,
overriding) metody - metoda realizující odlišnou implementaci na
úrov-ni potomka musí ve své definici obsahovat
klícové slovo override - nová implementace metody (na úrovni potomka) muže
volat puvodní implementaci téže metody (na úrovni
predka) pomocí klícového slova base, jež se
zapisuje v príkazové cásti metody
31Polymorfismus (3)
- poznámky
- klícová slova virtual a override nelze použít u
soukromých (privátních) metod - signatura metody, která provádí predefinování,
musí být stejná (vcetne návratového typu) jako
signatura puvodní metody - metoda s klícovým slovem override je rovnež
vir-tuální a muže být na úrovni dalšího potomka
opet pre-definována
32Vlastnosti (1)
- Cleny trídy umožnující prístup k
charakteris-tickým atributum objektu nebo trídy,
napr. - délka retezce
- velikost fontu
- titulek okna
- jméno zákazníka
- apod.
- Predstavují rozšírení datových položek
- pojmenované cleny s daným datovým typem
- používají stejnou syntaxi pro své zprístupnení
33Vlastnosti (2)
- Na rozdíl od datových položek nereprezentují
pametové místo pro uložení hodnoty - Prekladac automaticky prevádí zprístupnení
vlastností na volání prístupových metod - Prístupové metody specifikují príkazy, jež mají
být provedeny pri - ctení hodnoty vlastnosti
- zmene hodnoty vlastnosti (zápisu)
34Vlastnosti (3)
- Prístupové metody jsou zapisovány pomocí
klícových slov - get uvozuje prístupovou metodu pro ctení
- set uvozuje prístupovou metodu pro zápis
- Zapisovaná data jsou prístupovým metodám (set)
predávána pomocí vestaveného (skry-tého)
parametru value - Konvence
- soukromé datové položky jsou psány s malým
po-cátecním písmenem, zatímco verejné vlastnosti
s pocátecním písmenem velkým
35Vlastnosti (4)
- Príkladclass Ctverec private int
strana public int Strana get
return strana set - strana value
36Vlastnosti (5)
- Necht je dána deklaraceint sCtverec c new
Ctverec(5) - Vlastnost Strana lze zprístupnit
- pro ctení napr.s c.Strana (volá
c.Strana.get) - pro zápis napr.c.Strana 2s (volá
c.Strana.set) - Vlastnost muže obsahovat pouze metodu
- get vlastnost urcena jen pro ctení
- set vlastnost urcena jen pro zápis
37Vlastnosti (6)
- Omezení vlastnosti
- vlastnost nelze použít jako parametr s
modifiká-torem ref nebo out (za vlastností se
skrývá prí-stupová metoda nikoliv pametové místo) - vlastnost muže obsahovat jednu prístupovou
me-todu get a jednu prístupovou metodu set
(ne-smí obsahovat žádné jiné metody, datové
polož-ky nebo vlastnosti) - prístupové metody nesmí prijímat žádné paramet-ry
(zapisovaná data jsou u metody set predává-na
prostrednictvím value) - u vlastností nelze používat modifikátor const
38Vlastnosti (7)
- Jestliže metody get, resp. set provádejí pouze
operace, které slouží k prectení, resp. prirazení
do datové položky, pak je možné jejich príkazovou
cást vynechat - Príkladclass Ctverec public int Strana
get set -
39Události (1)
- Cleny trídy umožnující objektu nebo tríde
reagovat na zprávy (události) - Program muže definovat metody, které mají za úkol
zpracovat príchozí zprávy, napr. - stisknutí klávesy
- stisknutí tlacítka myši
- pohyb myši
- apod.
- Metoda realizující zpracování (obsluhu) zprá-vy
(reagující na zprávu) se oznacuje jako tzv. event
handler (obslužná metoda)
40Udá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ícového slova event
- Metod obsluhujících události muž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 -