piatok 6. októbra 2017

Automatizácia programovania

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 getset.
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