Programozásmódszertan

1960-as évek végéig monolitikus programozás.
jellemzői:

bulletEgy programozó egy program
bulletA programoknak nincs szerkezete.

A jó program legfontosabb kritériumai:

bulletjól áttekintheto szerkezete van, jól dokumentált és bebizonyítható módon azt csinálja, amit célul tuztem ki neki.

Megoldások:

Moduláris programozás (Oszd meg és uralkodj elv)

A megoldandó feladat komlexitását csökkentjük. A gyakorlat alakította ki (heurisztikus)

bulletTop-Down dekompenzáció: A feladatot részfeladatokra bontjuk, majd azokat további részfeladatokra, míg kezelheto méretu részproblémákhoz nem jutunk, melynek kódja amodul. Ehhez megvannak a megfelelo módszerek.
bulletButton-Up kompozíció: A részfeladatokbó végül össze kell építeni a programot, nincs módszer arra hogyan kell a modulokat összefűzni, plámne nincs eszköz mely bebizonyítja hogy a modulok együtt jól fognak dolgozni.

Előnyök:

bulletRészprogramok könnyen áttekinthetők
bulletKönnyebben megírható
bulletKönnyebben tesztelhető
bulletTöbb modul írható egy időben (párhuzamos problémamegoldás)
bulletKönnyebben javítható
bulletA modulok szabványosíthatók
bulletModulkönyvtárakban tárolhatók
bulletÚjrafelhasználhatók

Sruktúrált programozás

Matematikai alapokon nyugszik

Dijkstro: Hiearchikus programozás módszertana. A Top-Down dekompenzácilót egászíti ki:

bulletAz eredeti feladat részfeladatra bontása, keletkezik egy absztrakt program, mely egy absztrakt számítógépen muködik és mivel az eredeti specifikációból indulunk ki bizonyítható módon azt is csinálja.
bulletFinomítás, mely csökkenti az absztrakciót (egy részproblémát kifejtek) újabb absztrakt gépen újabb utasításkészlet mellett megint bizonyíthatóan muködik.
bulletTovábbi finomítások, míg egy konkrét gép konkrét utasításkészletéig eljutok.

Végeredmény egy bizonyítottan helyes program, probléma elfogadhatatlanul nagyobb munka árán.

Megoldás: A bizonyítás lépéseit elhagyva megközelítoleg jó program, melyeket tesztekkel ellenorzök.

Boehm Jackopini 1964 Minden minden algoritmikus program vezérlési szerkezete leírható 3 vezérlőszerkezet segítségével.

 

 

 

 

Mills 1968 bebizonyítja, azzal a megköttéssel:

bulletMinden imperativ program szerkezete egy szekvencia
bulletMinden szekvencia elemnek egy belépési és egy kilépéi pontja lehet. (tiszta szerkezet, részekre tagolható, egyik rész kimenete a másik rész bemenete)
bulletMinden szekvencia belőlről tetszőlegesen struktúrálható.

A strukturális programozás elvét később Mills nevéhez kötötték.

Dijkstro irányzat: A funkcionális és adatmodell kezelése párhuzamosan. Elsődleges a funkcionális modell, ha a funkcionális modelben új elem jelenik meg, az adatmodelt is finomítani kell. Ezzel a módszerrel minden feladat megoldható

Jakson-Warnil irányzat: Az adatmodell az elsődleges, mely a három vezérlszerkezettel megadható.

bulletFix rekordformátum: iteráció
bulletváltozó rekordhossz: iteráció + szelekció
bulletfix hosszúságú rekord szekvencia

Az adatok szerkezetét kell feltárni és ez egyértelmuen meghatározza a program tervét. Adatkezelő programokban alkalmazzák.

Wirth: Olyan programnyelv, mely struktúrált programok létrehozását segíti.

bulletA foprogram törzsében csak eljáráshívások vannak (1.szint részproblémákra bontás, melyeket egy-egy eljárás ír le) szekvencia.
bulletAz eljárásoknak tetszoleges szerkezete lehet, újabb függvény és eljáráshívásokat tartalmazhat (további részproblémákra bontás)

Objektumorientált programozás OOP

1969 Alen Key dilplomamunkája egér, ikon, ablak, menürendszer

1972 konkrét elképzelések OOP és SMALTALK programozási nyelv

1981 Eiffel + eljárásorientált nyelvek egy részében OOP eszközrendszer

Nem matematilkai nyelv

bulletAz adat és a funkcionális modell nem elválasztható. Az adatok és a rajtuk végrehajthaó muveletek elváladszthatatlanok
bulletezek is algoritmikus nelvek

1, Objektum (A változó általánosítása)

bulletVan állapta (atributumai), az állapotot tetszolegesen komplex adatok segítségével irjuk le (adatelemek + szerkezet).
bulletVan viselkedése ez módszereknek hívjuk (fügvények és eljárások írják le.)
bulletAz objektumok állapotának lekérdezésére (mi az értéke)
bulletEgyik állapotból másik állapotba vivő módszerek (értékváltoztatás)
bulletAzonosság: Egy objektum csak önmagával azonos és minden mástól különbözo.
bulletAzonos állapotban vannak-e
bulletUgyanarról az objektumról van-e szó

2, Osztály (a típus fogalmának általánosítása)

bulletAz azonos attributumú és módszerű objektumok együttese az osztály
bulletAz objektumok az osztály példányai

3, Bezárás (A hatáskör fogalmának általánosítása)

bulletolyan eszközrendszer, mely segítségével megmondhatom, hogy az osztály attributumaiból és módszereibol kívülről mi látszik. (igazi OOP-nél attributumokból semmi, a módszerek egy része, de ezeknek is csak a specifikációs része)
bulletAbsztrakció: mely során a specifikáció és az implementáció elválik, de ezt szabadon előírhatom.

4, Öröklés (Az újrafelhasználhatóság csúcsa)

bulletszuper osztály elsődleges a kapcsolatban, alosztály csak hozzá kapcsolódhat.
bulletAlosztály
Örökli a szuperosztály attributumait és módszereit
Új attributumokat és módszereket definiálhat ezek mellé
Elhagyhat belőlük
Átnevezheti az atributumokat és módszereket
Megváltoztathatja a láthatósági viszonyokat
Felülbírálhatja a módszerek implementációit
bulletlehetőségek:
Egy alosztálynak egy szuperosztály lehet (1-szeres öröklodést támogató nyelvek) A hiearchia alakja egy FA.
Egy alosztálynak több szuperosztálya lehet (töbszörös öröklodést támogató nyelvek) A hierarchia elkja egy GRÁF

5, Polimorfizmus (többalakúság)

bulletpéldány polimorfizmus (egy konkrét háromszög példánya a háromszög osztálynak is és a poligom osztálynak is.)
bulletmódszer polimorfuzmus: Az alosztály újraimplementálhat egy módszert kérdés melyik kód fut le. Ezt a kötés mondja meg.

6, Kötés

bulletKorai kötés: fordításkor eldől, hogy a meghívott módszerhez melyik kód tartozik.
bulletKésői kötés: futás közben dol el, hogy a módszerspecifikációhoz melyik kód tartozik.
bulletMinden példány tudja melyik osztály közvetlen példánya (aktuális példány)
bulletMinden példány egy jól definiált példány aktuális példánya
bullet(előny, pl. Ha egy módszer (A) hív egy másikat (B) a másikat újraimplementálom és meghívom (A)-t. ez esetben az újraimlementált fut le az első esetbe az eredeti)

7, Üzenet (az objektumok közötti kapcsolat)

bulletOsztályokat definiálok
bulletElhelyezem az öröklodési hiearchiákat
bulletOsztályokon belől objektumokat származtatok
bulletA program futása közben az objektumok működnek, hatnak egymásra, üzeneteket küldenek egymásnak, válaszolnak az üzenetekre.
bulletAz üzenet nem más mint egy módszer meghívása (eljárás vagy függvényhívás)

Objetumorientált nyelvek lehetnek

Tiszta

bulletCsak az objektumorientált eszközrendszer van
bulletVan egy standard osztályhiearchia. A programozó mindig ezt a hiearchiát bővíti, ezekhez fűz objektumokat...
bulletMinden eszköz objektum (az osztály, a módszer és az attributum is)
bulletSmalltalk, Eiffel

Hibrid

bulletEljárásorientált nyelvek objektumorientált eszközrendszerrel kiegészítve.
bulletC++

Java a kettő között

A TP6.0 jellemzése

Osztályt csak a legkülső szinten lehet definiálni.
Csak önálló osztályokat lehet definiálni.
Egyszeres öröklodés (Object(szuperosztály név).
Az osztályt típusként értelmezi (TYPE név = object).
Az eszközrendszert a rekordon építi fel

bulletattributm rekordmező
bulletmódszerspecifikáció rekordmező

pl.:

TYPE név = object (szuperosztály)

mezoleírások (pl.: X1,X2 : integer)

módszerspecifikáció (pl.: procedure P1)

PRIVATE (Kívülrol nem látszik)

mezoleírások

módszerspecifikáció

end;

...

Procedure P1

begin

...

end;