Vývojové vetvy
a paradigmy programovania
1.
štrukúrované
(procedurálne)
2.
OOP
3.
Komponentové
1. Štrukturované programovanie:
Sa sústreduje na návrh
imperatívnych programov, ktoré implementujú algoritmy prostredníctvom
riadiacich konštrukcií: sekvencia, selekcia, iterácia. Zjemnovanie zložitosti
dekompozícia. Štrukt. alg možeme môžeme charakterizovať induktívno-rekurzívnym
spôsobom:
1.
Každý krok je
štrukturovaným alg
2.
Zákl. riadiace
konštrukcie (sekvencia, selekcia, iterácia) – sú tak isto štruk. Alg
3.
štrukt alg je
všetko to, čo získame opakovaným
použitím premís položených v kroku 1 a 2 tohto postupu.
Funkcia:
-
je základnou
stavebnou jednotkou štrukt programu (podprogram).
-
je ideálne ak
jedna funkcia rieši práve jeden algoritmus – dosiahne sa efektívna úlohová
dekompozícia.
Hlavná funkcia:
-
je vstupný bod
programu, má výsadné postavenie.
-
nekoncentruje sa
na samostatné riešenie problému
-
úlohou je
dekompozícia problému na jednotlivé podproblémi – ktoré sú potom delegované
rôznym funkciám.
Argumenty:
-
sú vstupné dáta
špecifikované pri volaní funkcie
Formálny parameter:
-
prostriedok
pomocou ktorého bude funkcia schopná argument prijať a uchovať
-
predstavujú
lokálne premenné funkcie určené len na absorbciu argument.
Mechanizmy odovzdávania argumentov formálnym parametrom
(hodnotou, odkazom):
Argument hodnotou:
-
je vždy vytvorená
kópia arg (pôvodného dát. objektu), ktorá je následne poskytnutá volanej
funkcií.
-
získaný duplikát
je možné aj modifikovať, to neovplyvní pôvodný arg.
-
je bezpečnejším
mechanizmom
-
vyššie požiadavky
na dostupný alokačný pamäťový priestor – pri frekventovanejšom výkone
mechanizmu.
Argument odkazom:
-
funkcií je
poskytnutá pamäťová adresa, na ktorej je dát. objekt situovaný.
-
funkcia má
k nej priamy prístup, je schopná ho
modifikovať (nebezpečné, možnosť porušenia dátovej integrity)
-
eliminácia
pamäťového zaťaženia
-
vš. funkcie
získajú pamäťovú adresu a tým pádom sú dosiahnuteľné.
Návratová hodnota:
-
funkcia pri
dokončení svojej činnosti podáva správu o jej výsledku hlavnej funkcií.
-
funkcie bez
návratovej hodnoty sú zo sémantického hladiska totožné s procedúrami.
Globálne dátové objekty:
-
sú zapúzdrené
v glob premenných
-
mechanizmus, kt
umožňuje transport dát medzi viacerými funkciami navzájom.
-
majú k nim
prístup vš. funkcie, kt. sa nachádzajú v príslušnej prekladovej jednotke
Rekurzia:
1.
Priama:
o
v určitom
bode svojho spracovania volaná funkcia aktivuje „samu seba“
o
pri každom zrode
novej inštancie funkcie sa musí táto funkcia rozhodnúť či parciálna časť
problému, kt. rieši predstavuje rekurzívny, alebo základný prípad.
o
končí vtedy, keď
niektorá inštancia narazí na základný prípad
2.
Nepriama:
o
nekonečná
rekurziac nemôže existovať – tento stav je nebezpečný, hrozí vyčerpanie
systémových prostriedkov.
o
variácia priamej –
rekurzívne volaná funk. aktivuje inú použ. definovanú funkciu a táto zase
spätne volá pôvodnú funkciu.
2. Objektovo Orientované programovanie (OOP):
Snaži sa riešiť separáciu dátových obj. a funkcií(podprogramov),
kt. s týmito dátovými obj. manipulujú
1.
Objekt je základná
logická entita – je charakterizovaná svojim:
o
identifikátorom
(jednoznačné určenie obj. v sys),
o
vlastnosťami (sú
dané jeho atribútmi, atribút – určený na úschovu dát obj.),
o
činnosťami
(reprezentované jeho metódami, behaviorálna zložka, činnosti vykonávané obj.)
2.
Objekt je
výsledkom objektového modelovania – vytváranie virtuálnych ekvivalentov fyz.
obj.
3.
Zapuzdrenie. Princíp
obj. abstrakcie – sústredenie len tie vlastnosti a činnosti, kt. sú
významné
4.
Každý obj je
svojprávnou jednotkou – obsahuje vlastné atribúty a metódy.
5.
Ukrývanie dát -
obj je z vonkajšieho pohľadu čiernou skrinkou – iné obj nevidia jeho
atribúty ani metódy.
6.
Ukrývynie
implementácie - s dátami obj môžu priamo narábať len metódy obj.
7.
Atribúty obj
formujú jeho vnútornú pamäť – stav obj môže byť diagnostikovaný prostred. metód
na to určených.
8.
Mechanizmus správ
– komunikácia medzi používateľ -> obj. alebo obj -> obj. Protokol správ –
kolekcia správ na ktoré dokáže obj. reagovať, zabezpečuje „ktorá metóda bude
aktivovaná“. 1 správa na 1 metódu. Po vykonaní činnosti podá správu
o výsledku používateľa. OBR.
(str.17,1.4)
9.
Správy
o
bezparametrické –
nenesú so sebou dáta, sú len na zistenie akt. stavu obj.
o
parametrické –
integrujú dáta, kt. modifikujú akt stav obj.
10.
Hladisko časovej
latencie
o
synchrónne – obj.
A nemože realizovať žiadne iné aktivity pokiaľ metóda obj B nedokončí
svoju činnosť.
o
asynchrónne - eliminuje časovú latenciu, pretože objekt A nieje znehybnený počas behu
činnosti B a môže pokračovať v práci.
11.
Protokol správ –
verejné prístupné rozhranie (použivateľ má prístup)
12.
Obj s funkčne
spriaznenými atribútmi a metódami patria do rovnakej triedy objektov.
13.
Dedičnosť obj.:
o
potomkovia
preberajú char. črty svojich rodičov
o
triedy môžu
vytvárať rôzne varianty dedičnosti
o
jednoduchá
(od jedného rodiča), viacnásobná (od viacerých súčasne)
o
môžu už
k zdedeným vlastnostiam pridávať nové činnosti
o
potomkovia
sú funkčne vyspelý minimálne ako predkovia
o
sú vlastne
vyspelejší – pretože sa môžu rozširovať
o
potomok sa
môže objaviť všade tam kde je očakávaný jeho rodič – naopak to nefunguje
14.
Asociatívne
relácie – obj môže vzniknúť zložením iných obj. Pri konštrukcií zložitých obj.
Nadradený obj potom môže delegovať právomoci na rôzny počet vnorených obj.
o
agregácia –
nadradený obj komunikuje pomocou správ a tým môžu podobjekty pracovať bez
nadr obj.
o
kompozícia –
podobjekty nemôžu bez nadradeného obj pracovať
15.
Polymorfizmus – Ak
dva obj reagujú na zaslanie totožnej správy odlišne. Úzko to súvisí
s dedičnosťou a umožńuje to vzájomnú substitáciu obj (potomkovia sú
schopný zastúpiť svojich predkov).
3. Hybridné a čisto OOP progr jazyky
hybridné: vývoj štruktúrovaného
a OO softwáru : C#, C++, Visual Basic, Delphi, Java.
čisto OOP: pre potreby umelej
inteligencie, obj. nieje závislý od hlavnej funkcie prog. : Smalltalk, CLOS,
Eiffel, ESP a Object-Prolog.
4. Komponentové programovanie:
Je modulárnou nadstavbou OOP.
Pomocou obj. vytvára komponenty – softvérové jednotky vyššieho kvalitatívneho
stupňa. Možno zhotoviť samostatné programové súčiastky, z ktorých sa potom
zhotový finálny program:
- Aplikácia je konečnou
neprázdnou množinou komponentov
- Jeden z komponentov ap.
je primárny, bázový – zabez. jadrovú funkcionalitu. (pr. načítavanie bmp)
- Ap. môže byť tvorená ľub.
prípustnou množinou ďaľších (komplementárnych) komponentov. (pr. graf.
transfor. bmp)
- každý komponent má tieto
vlastnosti:
a) Identifikácia – jednoznačne identifikovateľný
aj v ap aj v sys.
b)
Zapúzdrenie – zapúzdruje vš. funkcionalitu v sebe. obsahuje v sebe
sériu obj. s delegovanými právomocami. Komunikujú
mechanizmom
posielania správ
c)
rozhranie - verejne prístupné rozhrania
– pomocou kt. využívajú používatelia ich služby.
d)
pripravenosť na použitie – vždy pôsobí ako hotová soft. súčiastka
e)
opätovná použiteľnosť – môže sa použiť koľkokrát chceme
f)
anonymita používateľov – funkcionalita je uplne oddelená od jeho aplikácie
g)
interoperabilita – komp. musia byť schopné medzi sebou spolupracovať.
- vybrané komp. môžu vytvárať
celky kt. sa samy môžu stať komponentami. podobne ako u OOP na princípoch
agregácie a kompozícií – nadradený komponent a súprava podkomponentov.
5. OOP v jazyku C# 3.O
Jazyk C# bol vytvorený
špeciálne pre potreby vývojovo-exekučnej
platformy Microsoft .NET Framework pre vytváranie poč. apl. pre OS Win
a Web.
6. Trieda ako abstraktný objektový dátový typ.
- je odkazový obj. dátový typ.
- predstavuje abstraktný
dátový typ, ktorého deklarácia špecifikuje vlastnosti a činnosti objektov,
kt. z tejto triedy vzniknú.
- vývojár musí najprv zaviesť
deklarácie tried a až potom ich môže inštanciovať.
7. Deklarácia triedy
class T
-> hlavička triedy
{
.... -> telo triedy
}
T – je
identifikátor triedy – jednoznačné pomenovanie triedy. Nesmie začínať číslom,
medzery, kľúčové slová.
class –
klúčové slovo, kompilátor vie že sa chystáme deklarovať triedu ako nový použiv.
deklarovaný odkazový dát. typ.
Internal
– je implicitne priradený prístupový
modifikátor, kt. vymedzuje viditeľnosť a oblasť platnosti triedy. Je
prístupná pre všetky ostatné dátové typy.
Public –
verejne prístupná trieda je viditeľná pre akýkoľvek externý, a teda
klientský zdrojový kód.
Telo – ({...}),
tu sa nachádzajú definície členov triedy.
Členy –
k základným patria atribúty
(dátové položky) a metódy. Okrem
nich môžu byť aj vlastnosti či delegáti.
// Deklarácia Triedy.
class Zamestnanec
{
// Definície atribútov (dátových
položiek). – musia byť súkromné, zákl. princíp OOP ukrývanie dát.
private
string priezvisko;
private int mzda;
// Definícia konštruktora. – je špec. metóda triedy, zodpovedá
za korektnú inicializáciu jej základných inštancií. Nesmie – void.
public Zamestnanec(string priezvisko, int mzda)
{
this.priezvisko
=priezvisko; this – je identifikátorom
špeciálnej odkazovej premennej.
}
// Definícia prístupových metód.
public string PrecitatPriezvisko ()
{
return
priezvisko;
}
public void NastavitPriezvisko(string
priezvisko)
{
this.priezvisko = priezvisko;
} ....mzda potom
analogicky
}
. – operátor
priameho prístupu.
8. Inštanciácia triedy a použitie zrodenej
inštancie
Inštanciácia – proces zrodu
inštancie triedy (objektu).
New - Trieda
je inštanciovaná týmto operátorom.
T obj = new T();
T – je
identifikátor triedy
obj – je
identifikátor odkazovej premennej
T obj –
predstavuje definíciu odkazovej premennej s identifikátorom obj.
T – keďže
typom definovanej odkazovej premenej je trieda,
tak do odkazovej premenej bude ulozená objektová referencia, ktorá je
nasmerovaná na inštanciu triedy.
new T() – operátor
new vykoná tieto činnosti
a)
na riadenej halde
(je vyhradený dynamický pamatový priestor) vyhľadá a alokuje dostatocne
velký priestor
b)
vytvorí ínštanciu
triedy, umiestni ju do alokovanej pamate. verejne prístupný konštruktor –
automaticky.
c)
vráti typovo silnú
objek. referenciu na vytvorenú inštanciu triedy.
Vždy ked treba pracovať s vytvoreným objektom, sa musí použiť
odkazová premenná, v ktorej je umiestnená objektová referencia ukazujúca
na daný objekt.
9. Konštruktory
Môžeme ich rozdeliť:
1.
Inštančný konštr.
Implicitný
inštančný konštr.
Explicitný
inštančný konštr.
Bezparametrický
Parametrický
2.
Statický konštr.
Implictný inšt. konštr. – je verejne prístupný a bezparametrický
class A
{
//Telo triedy je
prázdne. Kompiláror do neho automatický vloží implicitný bezparametrický
inštančný konštruktor.
}
Explicitný bezparametrický inšt konštr – do tela triedy sa umiestni definícia inšt. konštruktora
bez parametra (s prázdnou signatúrou). môže sa v triede objaviť len raz.
class B
{
public B()
{
//telo
bezparametrického konštruktora.
}
}
Explicitný parametrický inšt konštr. – signatúra je naplnená množinou formálnych parametrov.
môže sa objaviť aj viackrát ale len v tedy ked sa odlišujú zoznamami
svojich formálnych parametrov.
class C
{
public C(int x)
{
//telo
parametrického konštruktora.
}
}
Preťaženosť konštruktora – ak je v tele triedy je jedna definícia expl.
bezpar. inšt. konštr. a viacero def. expl param inšt konst. Ak je trieda
navrhnutá korektne, kompilátor dokáže vždy určiť cielový konstruktor.
10. Statický konstruktor a statické členy
inštančných tried
Význam spočíva
v inicializácií statických dávtových členov triedy. Pomocou modifikátora static. Sú implicitne definované ako súkromné. Môžu sa
vyskytovať aj iné statické členy (metódy,vlastnosti). Definícia
static T()
{
// telo statického
konštruktora
}
T – je názov inštančnej resp.
statickej triedy, v k torej deklarácií je statický konštruktor
uložený.
a) statický konštruktor je
implicitne súkromný (explicitne nesmie obsahovať žiadne prísupové modifikátory)
b) je vždy bezparametrický
c) nemôže byť preťažený. niesu
prípustné žiadne iné verzie stat. konštruktora
d) je automaticky volaný
virtuálnym exukučným systémom
e) môže sa vyskytovať iba
v telách tried a nie štruktúr.
11. Mechanizmus typovej inferencie (MTI)
Kompilátor jazyka C# 3.0
dokáže automaticky určiť dátový typ lokálnej hodnotovej alebo odkazovej
premenej podľa jej inicializačného výrazu. Implicitné stanovenie dátového typu
lokálnej premenj uskutočnuje mechanizmus typovej inferencie.
var obj = new T();
alebo
var obj = new T(a1,a2, ... an);
var – je
kľúčové slovo indikujúce, že typ lokálnej premenej bude implicitne infernovaný
obj –
identifikátor lokálnej premenej
T – názov
triedy, ktorej inštancia je vytváraná
a1,a2 – sú
argumenty, ktoré sú poskytované formálnym paramtetrom konštruktora T.
Dátový typ lokálnej premenej
je pomocou MTI určený vždy v čase prekladu zdrojového kódu. Je to
dynamická väzba medzi lokálnou premenou a jej dátovým typom.
12. Skalárne inštančné vlastnosti triedy.
je programovou konštrukciou,
ktorá zapuzdruje dve prístupové metódy get
a set.
public string Meno
{
get { return meno;
}
set { meno = value; }
}
get – obsahuje
zdrojový kód, ktorý poskytne hodnotu dátovej položky používatelovi
set – sa
k slovu dostáva pri potrebe zmeniť hodnotu dátovej položky.
value – je
premenná, tu je uložená samotná inicializačná hodnota.
13. Automaticky implementované skalárne inštančné
vlastnosti
môžeme ich charakterizovať
takto:
a)
prístupová metóda get získava hodnotu súkromnej dátovej
položky inštancie triedy
b)
prístupová metóda set modifikuje hodnotu súkromnej
dátovej položky inštancie triedy
Kvoli zapracovaniu pokročilej
aplikačnej logiky môžeme ponechať kompletné zostavenie tiel prístupových
vlastností a vytvorenie definícií spriaznených dátovcýh položiek
kompilátoru.
// Deklarácia triedy, ktorá využíva automaticky
implementované sklarárne inšt. vlastnosti
class MP3Prehravac
{
public string
Značka { get; set; }
public byte
KapacitaVGB { get; set; }
public ushort
PocetPiesni { get; set; }
}
Do tiel príslušných vlastností
umiestnime len deklarácie prístupových metód get a set.
14. Indexované inštančné vlastnosti triedy
nám umožńuje inicializovať
inštanciu triedy podobne, ako keby bola táto inštancia poľom. nazýva sa aj
„indexer“.
public T1 this[T2 i]
{
get { /* Zdrojový kod pristupovej metody get.
*/ }
set { /* Zdrojový
kod pristupovej metody set. */ }
}
T1 – je dátový
typ indexovanej vlastnosti a súčasne aj dátový typ množiny dátových
položiek, s ktorými je indexovaná vlastnosť asociovaná.
this – je
identifikátor indexovanej vlastnosti
T2 – je dátový
typ formálneho parametra indexovanej vlastnosti.
i – je
identifikátor formálneho parametra indexovanejvlastnosti. formálny parameter
uchováva index.
a) definície indexovaných
vlastností sa môžu nachádzať v deklarácií tried
b) indexované vlastnosti môžu
byť preťažené.
Toto sa týka triedy vektor.
Pre prístup prostredníctvom
indexovanej vlastnosti je dôležitá hodnota indexu, pretoze len na základe nej
vieme urcit, s ktorou zložkou vektora budeme pracovat. Toto viacestné
rozhodovanie je riešené príkazom switch,
ktorý operuje s hodnotou formálneho parametra i. Ak i=0, tak prístupová metoda get vráti hodnotu dátovej polozky
x – teda hodnotu 1 zlozky vektora. A i bude mimo hranic intervalu
<0,2> bude spustený kod vo vetve default.
15. Finalizér
je špeciálna metoda triedy,
ktorej ulohou je vykonať finalizacne práce predtým, ako bude inštancia triedy
uvoľnená z riadenej haldy.
~T()
{
//Telo finalizéra.
}
T – je
identifikátor triedy, v ktorej tele sa finalizér nachádza
platia tieto zásady:
-
fin sa môže
vyskytovať iba v telách tried (odkazových dat. typov), nikdy nie
v telách struktur (hod. dat. typ)
-
nema ziadnu
navratovu hodnotu, nemozno ani pouzit void
-
musi byť vzdy
bezparametricky – nemoze definovat ziadne form. parametre
-
nesmie sa stat
predmetom pretazenia – jedna trieda jeden finalizer
-
ak bazova trieda
explicitne definuje svoj fin, ten nieje dedený odvodenou triedou.
-
nesmie byt volany
priamo klientskym zdrojovm kodom. pretoze je v pripade potreby implicitne
aktivovany aut. sprav pamate
-
fin v tele
triedy -> kompilator aut. vlozi do jeho tela kod, kt. bude volat finalizér
primarnej sys. bazovej triedy System.Object
-
finalizacia
instancii tried na riadenej halde je nedeterministicka, nemozno presne
predikovať kedy bude fin. spusteny
-
na rozdiel od
konstruktora. nesmie byt fin. staticky.
Implicitná fin – sa týka len
tych instancii, kt. vznikli z tried, ktore explicitne nedefinujú svoje
finalizery.
Explicitná fin – ak instancia
vzisla z triedy s explicitne definovaným finalizerom.
16. Deštruktory v jazyku C++ a finalizéry
v jazyku C# 3.0
Syntaktický obraz final jazyk
C# je tak istý ako C++, ale majú významné sémantické rozdiely.
C++ je finalizácia inštancií
tried deterministická
C# nedetermistická.
V tomto jazyku nemôžeme finalizér aktivovať priamo, pretože túto
kompetenciu za vývojára preberá virtuálny exekučný systém.
Žiadne komentáre:
Zverejnenie komentára