ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11...

32
Szoftvertervezés és -fejlesztés II. előadás http://nik.uni-obuda.hu/sztf2 Szénási Sándor [email protected] Óbudai Egyetem,Neumann János Informatikai Kar Programozási Paradigmák Programozási paradigmák, Számítási modellek

Transcript of ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11...

Page 1: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés II. előadáshttp://nik.uni-obuda.hu/sztf2

Szénási Sá[email protected]

Óbudai Egyetem,Neumann János Informatikai Kar

Programozási Paradigmák

Programozási paradigmák, Számítási modellek

Page 2: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Paradigmák jellemzői

Imperatív paradigmák

Funkcionális programozás

Logikai programozás

Adatfolyam programozás

Programozási Paradigmák

Page 3: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Programozási nyelvek (számítási modellek) osztályozása azokjellemzői alapján, amely meghatározza– Az alapvető szintaktikát (jelölésmódot)

– Az adatok és műveletek felépítésének módját

– A feldolgozás módját

• Választási szempontjai– Feladat jellege

– Hardver nyújtotta lehetőségek

– Kor aktuális trendjei

• Tárgy keretein belül vizsgált paradigmák– Gépi kód

– Procedurális/strukturált programozás

– Objektum-orientált programozás

– Funkcionális programozás

– Logikai programozás

– Adatfolyam programozás

• Nincs egyértelmű programozási paradigma-nyelv kapcsolat

3

Programozási paradigma

Page 4: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Absztrakciós szint fogalma– A gépi megvalósítás részleteitől vett „távolság”

– Relatív fogalom, csak összehasonlításként értelmezhető

• Trend: egyre magasabb szint elérése– Technikai fejlettség egyre többet enged meg

– Szoftverfejlesztés hatékonysága is ezt igényli (hibatűrés, karbantarthatóság)

– Fejlesztői igények is ezt erősítik (sebesség)

• Hatékonyság kérdése– Alacsonyszintű nyelvek

• Szabad kezet ad• A program minőségét a programozó képességei befolyásolják

– Magasszintű nyelvek• Korlátozott funkciókkal bír (feladat orientáltan)• A hatékonyságot a végrehajtó motor biztosítja

• Magasszintű nyelvek megvalósítása– Fordítóprogram használata

– Interpreter megvalósítás

4

Absztrakciós szint

Page 5: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Imperatív– Megadás módja: hogyan kell megoldani?

– Program tipikus felépítése• Utasítások és parancsok• Vezérlési szerkezetek• Főprogram (belépési pont)

– Előnyei• Egyszerű/gépközeli megvalósítás (Neumann architektúra)• Programkészítés szabadsága

• Deklaratív– Megadás módja: mit kell megoldani?

– Program tipikus felépítése• Típusok, szabályok, függvények definíciója• Ismert tények/adatok meghatározása• Elvárt eredmény/probléma specifikálása

– Előnyei• Általában magasabb absztrakciós szint• Optimalizáció/párhuzamosítás lehetősége

5

Problémaleírás jellege

Page 6: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Közvetlen vezérlésű végrehajtás– A végrehajtási sorrendet az utasítások sorrendje határozza meg

– Tipikusan imperatív nyelvekre jellemző

– Automatikusan nem optimalizálható (párhuzamos végrehajtás)

• Adatvezérelt végrehajtás (mohó kiértékelés) – Egy-egy művelet azonnal végrehajtódik, ha a művelethez szükséges adatok

rendelkezésre állnak

– Ha nincsenek mellékhatások, akkor jól párhuzamosítható

– Egyszerűen megvalósítható

• Igényvezérelt végrehajtás (lusta kiértékelés)– A műveletek csak akkor hajtódnak végre, ha azok a végeredmény eléréséhez

szükségessé válnak

– Lehetővé válik a szimbolikus végrehajtás, és ebből adódó optimalizálás

– Speciális adatszerkezetek pl. végtelen listák kezelése (generátorok)

– Hatékony, mivel csak a szükséges feladatokat végzi el

– Gyakran együtt jár a memoization technikával

– Komplex, nagy memóriaigénnyel járhat

6

Végrehajtás folyamata

Page 7: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Számítási modelleken alapuló architektúrák megjelenése

7

Számítási modellek „versenye”

1950 1960 1970 1980 1990 2000

Neumann-féle számítási modell

Adatfolyam számítási modell

Funkcionális számítási modell

Logikai alapú számítási modell

2010

Page 8: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Eseményvezérelt paradigma– Események váltódnak ki

– Ezeket eseménykezelők fogadják

– Megfelelő interfészen keresztül kommunikálnak egymással

– Minden egyéb paradigmához kapcsolódhat

• Generikus programozás– Algoritmus írása konkrét típusok nélkül

– Modern OOP nyelvek is támogatják

• Metaprogramozás– Programkészítés magas absztrakciós szintje

– Maga a programkód is változhat futás közben

8

Másodlagos paradigmák

Page 9: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Paradigmák jellemzői

Imperatív paradigmák

Funkcionális programozás

Logikai programozás

Adatfolyam programozás

Programozási Paradigmák

Page 10: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Problémaleírás imperatív– Egy algoritmust adunk meg utasítások sorozatával

– Tehát a program magát a megoldás menetét tartalmazza

• Számítások alapelemei az adatok és a rajtuk végzett műveletek– Nevesített adatelemeket változónak nevezzük

– Meghatározott memória vagy regiszterhelyekben helyezkednek el

– A műveletek ezen változók értékét módosítják

• Végrehajtás állapotátmenet szemantikát követ– A végrehajtás során az aktuális állapotot az összes deklarált változó (és további

technikai adatok) aktuális értéke határozza meg

– A program futása során a rendszer egyik állapotból a másikba lép át

• Végrehajtás vezérlés módja közvetlen vezérlés– Az utasításokat a megadott sorrendben hajtja végre

– Tipikusan egy belépési ponttól halad valamely kilépési pont felé

• Absztrakciós szint– Tipikusan alacsony

– Mai nyelvek nagy osztálykönyvtárai ezt elfedik

10

Imperatív paradigmák általános jellemzői

Page 11: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Mellékhatások megjelenése– Az imperatív nyelvek megengedik a többszöri értékadást

– Változók aktuális értéke emiatt múltérzékeny (ugyanaz a változó különböző pillanatokban más-más értéket tartalmazhat)

– Ez mellékhatásokhoz vezethet

• Párhuzamosítás lehetősége– Alapvetően soros végrehajtást feltételez

– Kiegészíthető a párhuzamosan futtatható részek megjelölésének lehetőségével, ez azonban nem automatizálható

• Kommunikáció biztosítása• Szinkronizáció biztosítása• Adatmegosztás biztosítása

• Paradigma előnyei– Legrégebbi és legelterjedtebb (egyszerű fordítók)

– Általános számítási feladatokra nagyon jól használható

– Könnyen és hatékonyan implementálható

– Neumann-féle számítógép közvetlenül támogatja

11

Imperatív paradigma korlátai

Page 12: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Imperatív megvalósítás

• Gépi kód (1. generációs nyelvek)– Adott processzor utasításrendszeréhez igazodik

– Emberi szemmel nézve csak számok sorozata

– Előnyei• A lehető leghatékonyabb (memória, futásidő, stb.)• A hardver minden lehetősége kiaknázható segítségével

– Hátrányai• Minden más (karbantarthatóság, fejlesztés sebessége, stb.)

• Assembly (2. generációs nyelvek)– Ugyanaz mint a gépi kód, csak már szöveges utasításokat használ

– Számos magas szintű funkció (memóriacím helyett címkék, stb.)

– Még mindig a megadott processzorhoz tartozó utasítások

– Szükség van valamilyen fordítóprogramra

– Előnyei• A gépi kód minden előnye elérhető itt is• Sokkal barátságosabb a fejlesztő számára

12

Alacsony szintű nyelvek

Page 13: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Ismétlődő feladatok kezelése– Eljárások és függvények (szubrutinok) megjelenése

– Minden ilyen alprogramnak jól meghatározott feladata van

– A program folyamatában így megjelenhetnek függvényhívások is

– Ezzel együtt jár számos technikai jellemző• Paraméterek megjelenése• Függvény visszatérési értékének megjelenése• Verem kezelése

• Program felépítése– Megjelenik egy kiemelt „főprogram”, ez indul el a program indításakor

• Programozási stílus ennek megfelelően változik– Program felbontása kisebb alkotóelemekre

– Felülről lefelé bontás

– Moduláris programozás lehetőségei

• Strukturált és procedurális paradigma– A két paradigma tipikusan együtt jár

– Alapelveik mai napig elfogadottak és számos más paradigmában megjelennek

13

Procedurális programozási paradigma (3. generációs nyelvek)

Page 14: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Cél: nagyobb, áttekinthető programok készítése

• Program felépítése– Elemi utasítások

– Ezeket összekapcsoló struktúrák• Szekvencia• Elágazás• Ciklus

• Megjelenik számos elvi újdonság– A fenti szerkezetek egymásba ágyazhatóak

– Változók életciklusa

• Bizonyítható, hogy a fentiek véges számú alkalmazásával megoldható minden kiszámítható probléma (Böhm-Jacopini 1966, Dijkstra 1968)

• Ezt számos utasítás megszegi (goto, return, break, continue)

• A feladat felbontása tipikusan fa szerkezetet eredményez

• Nyelvek: Cobol, Fortran, Pascal, C, stb.

14

Strukturált programozási paradigma

Page 15: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Szükségessége: szoftverkrízis

• Alapvető elemei az objektumok, amelyek egyben tartalmazzák– Az adatokat

– Az ezeken végezhető műveleteket

• Alulról felfelé való felbontást alkalmaz

• A paradigma újdonságai– Egységbezárás (adatelrejtés)

– Öröklődés/Kompozíció

– Polimorfizmus

• Magasabb absztrakciós szintet biztosít, ahol a program felépítése:– Objektum létrehozása

– Objektumok egymás közt üzeneteket küldenek

• Háttérben viszont ugyanúgy imperatív megvalósítást feltételez

• Osztály alapú/prototípus alapú nyelvek

• Előnyei: karbantarthatóság, újrafelhasználhatóság, stb.

• Nyelvek: Smalltalk, C++, C#, Java, stb.15

Objektumorientált programozási paradigma

Page 16: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Paradigmák jellemzői

Imperatív paradigmák

Funkcionális programozás

Logikai programozás

Adatfolyam programozás

Programozási Paradigmák

Page 17: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• A program célja egy matematikai függvény kiértékelése

• Problémaleírás deklaratív– Típusdefiníciók (alaptípusok, párok, n-esek, listák)

– Függvénydefiníciók sorozata• Függvény neve• Függvény paraméterei• Függvény törzse (kifejezés)

– Egy kiértékelhető kezdő kifejezés

• Nincsenek parancsok– Parancsok helyett csak függvények jelenhetnek meg

– Nincsenek benne változók, így nyilván nem értelmezhetők ciklusok

– Ezeket rekurzió segítségével lehet helyettesíteni

• Saját típusok– Egyszerű egyedi értékek: számok, stb.

– Megszokott adatszerkezetek: rendezett n-esek, listák, halmazok, stb.

– Speciális szerkezetek: végtelen listák, generátorok, stb.

– A típusokat általában meg tudja állapítani a rendszer

17

Funkcionális programozási paradigma

Page 18: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Számítások alapelemei a függvények és ezek alkalmazásai– Függvény lehet nevesített vagy névtelen

– Névtelen függvények megadásának módja lehet a lambda-kalkulus• absztrakció: λx.(x*x+1)• applikáció (alkalmazás): λx.(x*x+1) 5

• Függvények elsőosztályú entitások– Adatokhoz hasonlóan kezelhetők

– Eltárolhatók változóban

– Kliens-szerver rendszerben a művelet is átküldhető adatként

• Függvények magasabbrendűek– Függvény átadható paraméterként/lehet visszatérési érték

– Műveleteket lehet velük végezni

• Mintaillesztés– Ugyanaz a függvény megjelenhet különböző paraméterekkel

– Hasonló mint az overloading, de annál többet tud

– Pl. listák esetében lista szétbontásra használható

18

Függvények szerepe

Page 19: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• „Változók” használatának korlátai– Csak egyszeri értékadás engedélyezett (érték kötése)

– Tehát egy változónak a program futása során mindig ugyanannyi az értéke

– Ezért egy változó bármikor helyettesíthető az értékével

• Hivatkozási helyfüggetlenség– Ha a változók értéke nem változhat, akkor ez a kifejezésekre is igaz

– Tehát egy kifejezés/függvény értéke mindig ugyanannyi• A program bármely pontján• A futás bármelyik pillanatában

• Ez lehetővé tesz egy magas szintű automatikus ptimalizálást– Memoization

– Párhuzamosítás

• Funkcionális nyelvek típusai– Tiszta nyelvek: a változóknak nincsenek mellékhatásai

– Nem tiszta: bizonyos mellékhatások megjelenhetnek

• Időbeli állapotváltozás– Többszöri értékadás nincs, de új változókat létre lehet hozni

19

Mellékhatások hiánya

Page 20: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Végrehajtás vezérlés módja tipikusan lusta kiértékelés– A program tartalmaz egy kezdeti kiértékelendő kifejezést

– A végrehajtó motor ez alapján értékeli ki a további kifejezéseket

– A végeredmény a kezdeti kifejezés értéke

• Kiértékelés módja választható– Általában a lusta kiértékelés az alapértelmezett

– Teljesítményokokból kikényszeríthető a mohó kiértékelés is

• Lusta kiértékelés előnyei– A kiértékelő motor felépít(het) egy teljes kifejezésgráfot

– Ez alapján van lehetősége ezt• Szimbolikus módszerekkel egyszerűsíteni• Kiértékelés során bizonyos részeket elhagyni

• Párhuzamosítási lehetőség– Nagyon jól automatizálható

– Elhozta a funkcionális nyelvek reneszánszát

20

Funkcionális nyelvek működése

Page 21: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Végtelen rekurzió lehetősége– Farok-rekurzió: ha a függvényhívás utolsó lépése a rekurzív hívás

– Ebben az esetben a hívott függvény használhatja a hívó vermét

– Ezzel elérhető végtelen rekurzió

– Ez a gyakorlatban jól kihasználható• Generátorok• Eseménykezelés végtelen ciklusa

• Előnyök– Magas absztrakciós szint, kifejező kód

– Hatékony kiértékelés és optimalizáció (párhuzamosítás)

• Hátrányai– Bizonyos feladatokra nem alkalmas

– Egyszerű dolgok is nehézséget okozhatnak (I/O)

• Gyakorlati megvalósítások– Funkcionális nyelvek: LISP, Haskell, Clean, Erlang, F#

– Hagyományos nyelvekbe beépülve: C++, C#, Java lambda kifejezések

21

Funkcionális nyelvek specialitásai

Page 22: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Egy rendezést megvalósító funkcionális program(részlet)

22

Funkcionális programozás példa

függvények

rendez [ ] = [ ]

rendez [első : többi] =

egyesít ( rendez ( válogat (x → x < első) többi ) )

első

( rendez ( válogat (x → x > első) többi ) )

válogat feltétel [ ] = [ ]

válogat feltétel [ x : y ]

ha (feltétel) = [ x : válogat feltétel y]

különben = válogat feltétel y

Kezdőkifejezés

Start = rendez [ 5 , 8 , 9 , 1 , 7 , 4 ]

Page 23: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Paradigmák jellemzői

Imperatív paradigmák

Funkcionális programozás

Logikai programozás

Adatfolyam programozás

Programozási Paradigmák

Page 24: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Funkcionális paradigma része, ami elsőrendű logikán alapul

• Számítások alapelemei szabályok és tények– Klóz: véges számú literál diszjunkciója

pl. T1 T2 T3

– Horn-klóz: egy nem negált tagot tartalmazó klózpl. T1 T2 T3 másképp írva

T3 T1 T2

– Szabály (feltétellel rendelkező klóz): fej ← testkövetkezmény ← feltétel1 feltétel2 ...

– Tény (feltétel nélküli klóz)következmény ← igazkövetkezmény

• Program erősen korlátos– Nincsenek objektumok, sem megszokott adattípusok

– Elsőrendű logikát csak részben fedi le

– Ciklus helyett rekurzió

– Feltétel helyett a szabályok helyes megválasztása

24

Logikai programozás paradigma

Page 25: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Problémaleírás deklaratív– Szabályok felsorolása (problématér leírása)

– Tények felsorolása

– Célállítás/kérdés meghatározása

• Célállítás típusai– Egy feltevés igaz-e vagy sem?

– Létezik-e valami ami a feltételnek megfelel?

– Stb.

• Rekurzió támogatása– Kifejezések tartalmazhatnak rekurziót

– Rekurzív típusok is használhatók (lista)

• Nyelvi specialitások– Saját nyelvi elemek támogatják a túl mély rekurziók elkerülését

– Nyelvi elemekkel lehet irányítani a keresés folyamatát

25

Probléma meghatározása

Page 26: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Következtető motor a szabályok és tények alapján dönt– Levezetési szabályokat alkalmaz amíg nem jut egy végeredményhez

– Lehetséges kimenetek• Pozitív válasz: a célállítás kikövetkeztethető a megadott tényekből• Negatív válasz: a kezdeti cél nem következtethető ki• Nincs válasz: végtelen ciklus vagy túl nagy a probléma tér

• Tételbizonyítási módszer: SLD rezolúció– Egyesítés: két kifejezés egyesíthető, ha változóik helyére Prolog kifejezéseket

helyezve azok azonossá tehetők

– Redukció: egy klóz fej és a célsorozat első céljának egyesítése. Ha sikeres, akkor a klóz törzse a cél helyére kerül

• A végrehajtás vezérlési módja lusta kiértékelés– Célállítás közvetlen ellenőrzése

– Egyesítés és redukció végrehajtása

– Visszalépéses keresés• ha sikeres a helyettesítés, akkor továbblép a következő célra• ha nem, akkor visszalép és másik egyesítéssel próbálkozik

26

Következtető motor működése

Page 27: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Használhatósága– Tudás kifejezése az implementáció ismerete nélkül

– Alkalmas a tudás eltárolására konkrét használati eset nélkül

– Szakértői rendszerek, mesterséges intelligencia

– Természetes nyelvi feldolgozás

– Nagy rendszerek esetén nehezen áttekinthető

• Előnyei– Sokféle kérdésre tud választ adni

– A feladat megoldásán túl levezetést is ad

• Konkrét nyelvi megvalósítások– Prolog és variánsai

– Pl. IBM Watson egy része

27

Logikai programozás használhatósága

Page 28: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Rokonsági kapcsolatokon alapuló szabályok

28

Logikai programozás példa

Szabályok

Szülő(X,Y) ← Apa(X,Y)

Szülő(X,Y) ← Anya(X,Y)

Testvér(X,Y) ← Szülő(Z, X) Szülő(Z, Y)

Tények

Anya(Klári, Jancsi)

Apa(Péter, Jancsi)

Apa(Péter, Ilona)

Anya(Klári, Zoltán)

Kérdések

? Testvér(Jancsi, Ilona)

Testvér Jancsi és Ilona?

? Testvér(?, Ilona)

Kik Ilona testvérei (ha vannak)?

? Testvér(?, ?)

Kik testvérek (ha vannak)?

Page 29: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Paradigmák jellemzői

Imperatív paradigmák

Funkcionális programozás

Logikai programozás

Adatfolyam programozás

Programozási Paradigmák

Page 30: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Az adaton van a hangsúly, a műveletek másodlagosak

• Számítások alapelemei az adatok és a hozzájuk rendelt adatműveletek

• Problémaleírás imperatív (más paradigmák)

• A végrehajtási szemantika az adatfolyam szemantika– Adatok kiértékelése rendelkezésre álláskor

– Adatvezérelt (mohó kiértékelés)

• A bemenő adatok áthaladnak az adatáramlási diagramon, ennek eredményeképpen jönnek létre a kimenő adatok

30

Adatfolyam-elvű programozási paradigma

...

......

Page 31: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Program felépítése– Bemenet, kimenet

– Kettő közötti kapcsolatok (adatfolyam) kialakítása

• Tipikus felhasználási kör– Adatgyűjtő eszközök

– Műszervezérlés

– Ipari automatizálás

• Jellemzői– Jól párhuzamosítható

– Bizonyos feladatok látványosan leírhatóaksegítségével

• Konkrét nyelv– LabVIEW

31

Adatfolyam-elvű programozási paradigma

Page 32: ProgramozásiParadigmák - Óbudai Egyetemusers.nik.uni-obuda.hu/sztf2/Paradigmak.pdf · 11 Imperatív paradigma korlátai. szenasi.sandor@nik.uni-obuda.hu Szoftvertervezés és -fejlesztés

Szoftvertervezés és -fejlesztés [email protected]

• Javasolt/felhasznált irodalom– Sergyán Szabolcs, Vámossy Zoltán és Miklós Árpád diasorozatai, Óbudai

Egyetem, AAO tárgy

– Sima, Fountain, Kacsuk: Korszerű számítógép-architektúrák tervezésitér-megközelítésben, SZAK Kiadó, 1998

– Fóthi Á.: Bevezetés a programozáshoz, ELTE Eötvös Kiadó, 2005

– Pap, Szlávi, Zsakó: μlógia19 – Módszeres programozás: Programozási tételek, ELTE TTK, 2002

– Gregorics Tibor: A programozás alapjai – Tervezés

– Papp Zoltán: Lambda-kalkulus

– Lehet Csató: Logikai és funkcionális programozás

– Magyar Attila: LabVIEW

– Túri József Attila: A logikai programozás és alkalmazásai a Prolog programozási nyelvben

32

Irodalomjegyzék