Programozsi nyelvek Talata Istvn Programozs feladatok megfogalmazsa szmtgp

  • Slides: 19
Download presentation
Programozási nyelvek Talata István

Programozási nyelvek Talata István

Programozás feladatok megfogalmazása számítógép számára végrehajtója a számítógép hardvere és operációs rendszere bináris alakban,

Programozás feladatok megfogalmazása számítógép számára végrehajtója a számítógép hardvere és operációs rendszere bináris alakban, 0 – 1 sorozat formában kerül végrehajtásra egy programozási nyelv: a szabályrendszer, amelyben megírják a feladatot (programot) a számítógép számára

Alacsony szintű programnyelvek gépi kód bájtok sorozataként kerül megírásra a program, adatokat konkrét regiszterek

Alacsony szintű programnyelvek gépi kód bájtok sorozataként kerül megírásra a program, adatokat konkrét regiszterek között mozgatva n tipikusan 10 -es számrendszerben is be lehet vinni a bájtok értékeit n példa gépi kódú programra: 180, 2, 178, 65, 205, 33, 205, 32 n assembly n n a gépi kódú programstruktúra megőrződik, de angol szavak rövidítéseivel helyettsítik az utasításkódokat és karakterkombinációkkal a regiszterek számait példa assembly utasításra: mov ah, 2 assembler lefordítja gépi kódba használat előtt makroassembly: amikor már több gépi kódú utasítás sorozatának felel meg egy assembly utasítás (makro)

Magas szintű programnyelvek számítógépkonfigurációtól független a feladat leírása a szabályrendszerében Fajtái: n általános célú

Magas szintű programnyelvek számítógépkonfigurációtól független a feladat leírása a szabályrendszerében Fajtái: n általános célú programnyelvek cél: sokféle feladat programozására lehessen használni n speciális célú programnyelvek speciális feladatokat lehet vele egyszerűen megoldani pl. : SQL – adatbáziskezelésre kifejlesztett A továbbiakban magas szintű, általános célú programnyelvekkel foglalkozunk

A programozás menete n n n n n forrásprogram megírása (kötött szintaktika) ennek lefordítása

A programozás menete n n n n n forrásprogram megírása (kötött szintaktika) ennek lefordítása (fordítóprogram – compiler segítségével) hibakezelés kapjuk: tárgyprogram felhasznált segédprogramok, rutinok hozzácsatolása (linkage editor) hibakezelés kapjuk: végrehajtható program futtatás eredmények

A forrásprogram elkészítésének folyamata algoritmus megfogalmazása Főbb építőelemek: n szekvencia (egymás utániság) n elágazás

A forrásprogram elkészítésének folyamata algoritmus megfogalmazása Főbb építőelemek: n szekvencia (egymás utániság) n elágazás (feltételes utasítás) lehet logikai értékvizsgálattól függő kétirányú vagy változó értékétől függö többszörös elágazás n ciklus (visszacsatolás) lehet elöltesztelő vagy hátultesztelő a programnyelv utasításaira való átfogalmazás n n utasítások leírására tipikusan elég ASCII szövegszerkesztő praktikusabb egy fejlesztői környezetben írni a programot (beépített segítség utasításkészlethez, szintaktikai kiemelés ill. ellenőrzés)

Algoritmus megfogalmazása Lehetséges megvalósítási módjai: n n n szöveges megfogalmazás folyamatábra D-diagram (D=Dijkstra) több

Algoritmus megfogalmazása Lehetséges megvalósítási módjai: n n n szöveges megfogalmazás folyamatábra D-diagram (D=Dijkstra) több részdiagramból áll össze csak egy kimenő él van egy elemi szerkezetben áttekinthetőbb n n blokkdiagram (téglalapokra írva minden lépés, téglalapok egymáson belül is elhelyezkedhetnek) struktogram (esetleg vonalakkal felosztott téglalaprészek elágazásoknál, fentről lefelé vannak az egymás után következő lépések)

 folyamatábra blokkdiagram beolvas: p q=1 Ismételd q=2 q amíg q < p igaz

folyamatábra blokkdiagram beolvas: p q=1 Ismételd q=2 q amíg q < p igaz q<p Eredmény: q hamis Eredmény: q

A programozási nyelvek fejlődése Mondatszerű algoritmusleírás pl. : COBOL, egy utasítására példa: ADD A

A programozási nyelvek fejlődése Mondatszerű algoritmusleírás pl. : COBOL, egy utasítására példa: ADD A TO B GIVING C n Strukturált programozás pl. : Pascal, ebben eljárások és függvények blokkjainak a megadásából jön létre a program n Hordozható assembly pl. : C, memóriacímek (mutatók) és memóriafoglalás rugalmas kezelése n Objektumorientált programozás pl. : C++, Small. Talk, Java n objektumok tulajdonságokkal / állapotokkal, n objektum-hierarchia: objektumok osztályokhoz tartoznak, osztályok közöti hierarchiát öröklődés határozza meg Egyéb: logikai programozás (pl. : Prolog), funkcionális programozás (pl. Clean) n

Alapnyelvek ALGOL (ALGOrithmic Language) n 1960 -as évektől, tudományos számításokra tervezték BASIC (Beginner’s All

Alapnyelvek ALGOL (ALGOrithmic Language) n 1960 -as évektől, tudományos számításokra tervezték BASIC (Beginner’s All purpose Symbolic Instruction Code) n 1964 -től, kezdetben egyetemisták részére fejlesztették ki C n 1970 -es évek eleje, UNIX kifeljesztéséhez hozta Dennis Ritchie létre COBOL (COmmon Business Oriented Language) n 1959, nyilvántartások kezeléséhez fejlesztették ki FORTRAN (FORmula TRANslator)) n 1957, numerikus számításokhoz, manapság is elterjedt Pascal n 1970, ALGOL alapján hozták létre

További nyelvek Ada 95: Pascalból, objektumorientált C++: C-ből, objektumorientált C#: C + + ötvözve

További nyelvek Ada 95: Pascalból, objektumorientált C++: C-ből, objektumorientált C#: C + + ötvözve MS Visual Basic elemekkel, objektumorientált Clean: 1987, funkcionális nyelv Delphi: 1995, Turbo Pascal 7. 0 -ból, objektumorientált Eiffel: 1980 -as évek második fele, ALGOL-ból, szoftverfejlesztéshez termelési környezetekben Java: 1996, virtuális gépre van hozzá szükség, objektumorientált Digitális tévét vezérlö apró készülékek programozásához jött létre – ez a projekt elhalt, a WWW születése után a Netscape és a Microsoft is beépítette böngészőjébe, népszerű lett. LISP: 1950 -es évektől, az első funkcionális nyelv. Modula-2 (1970 -es évek), Modula-3 (1980 -as évek): Pascalból Perl: 1991, szövegfeldolgozásra PHP: hypertext preprocessor: Java, C, Perl nyelvekre épül

Szabványosítás Egy programnyelv szabályai különböző disztribucíók esetén kissé eltérhetnek egymástól n pl. : a

Szabványosítás Egy programnyelv szabályai különböző disztribucíók esetén kissé eltérhetnek egymástól n pl. : a Borland Turbo Pascal több utasítást ismer, mint a Pascal A szabványoknak két fő típusa van: n n DIM P(100) szabadalmaztatott szabványok (cégek esetén) konszenzusos szabványok (szabványok létrehozásával foglalkozó szervezetek, pl. ANSI, IEEE alakítják ki) Előnye a konszenzusos szabványnak, hogy segítségével könnyebben létrehozhatók jobban hordozható programok A legtöbb nyelvnek több verziója van (kiadási évhez kötődően, pl. ALGOL 68), előre be szokták jelenteni, hogy a következő verzióban jópár év múlva mi fog megszünni, hogy a programozók erre felkészülhessenek

GOTO feltétel nélküli vezérlésátadás (ugrás) nem elegáns használni n n több nyelvben már nem

GOTO feltétel nélküli vezérlésátadás (ugrás) nem elegáns használni n n több nyelvben már nem is létezik ez az utasítás vagy csupán végtelen ciklusból való kiugrásra lehetséges a használata a probléma vele többrétű n n átláthatatlanná teheti a programstruktúrát , hibakeresést megnehezíti a fordítóprogram nem tudja miatta jól meghatározni a program erőforrás - vagy memóriaigényét kivételkezelés programnyelvi támogatása kiválthatja a szükségességét FORTRAN 0 vezette be, COBOL támogatja Pascalban cimkére ugorhat blokkon belül, C-ben cimkére ugorhat fügvényen belül Modula-3 -ban nincs GOTO (de van RETURN visszatérni elájrásokból, függvényekből), Java-ban nincs GOTO

BASIC ún. P-kód (pszeudo kód) készül a fordítás során n ezt interpreter értelmezi minden

BASIC ún. P-kód (pszeudo kód) készül a fordítás során n ezt interpreter értelmezi minden futtatás során – ezért a futás relatíve lassú Visual BASIC 5. 0 -tól kezdve már gépi kódú fordítást is lehet készíteni A Visual BASIC objektumalapú nyelv, és csak részben objektumorientált nyelv (nincs benne osztályhierarchia) BASIC alapokra épít, egyszerű felépítésű nagyban függ a hardvertől és az operációs rendszertől (pl. MS Visual BASIC csak MS Windowsos platformon működik)

Az elkészült programok futtatása Fordítóprogramos programnyelv esetén: az elkészült forrásprogramot (más néven forráskódot) egy

Az elkészült programok futtatása Fordítóprogramos programnyelv esetén: az elkészült forrásprogramot (más néven forráskódot) egy fordítóprogram lefordítja gépi kódú programmá n n gyorsan futtatható a lefordított program a programnyelvek többsége ilyen ( pl. ALGOL, FORTRAN, C, Pascal) Interpreteres programnyelv esetén: az elkészült programot egy interpreter program segítségével futtatják, az utasításonként sorra veszi a forrásprogramot, értelmezi azt, majd végrehajtja n n más elnevezés ilyen programnyelvekre: szkript nyelvek Példák ilyen nyelvekre: PHP, Bash, ASP, Perl, Javascript, Python, Lua

HTML lapokba ágyazott programok Internetes böngészéskor : HTML lapokba ágyazott programok futhatnak bizonyos szkript

HTML lapokba ágyazott programok Internetes böngészéskor : HTML lapokba ágyazott programok futhatnak bizonyos szkript nyelveken. n Példák erre: Javascript, VBScript, Python, PHP Fajtái: host oldali szkript nyelv: a böngészőben futnak Pl. : Javascript, VBScript n n szerver oldali szkript nyelv: a webszerveren futnak, nem a böngészőben Pl. : Python, PHP

BASIC példaprogram 10 REM NEGYZETSZAMOK OSSZEGE 20 REM LEGFELJEBB 100 -IG TERJEDO SZAMOK 30

BASIC példaprogram 10 REM NEGYZETSZAMOK OSSZEGE 20 REM LEGFELJEBB 100 -IG TERJEDO SZAMOK 30 DIM P(100), Q(100) 40 A=0 50 INPUT P 60 INPUT Q 70 FOR J=INT(P) TO INT(Q) 80 A=A+J^2 90 NEXT J 100 PRINT A 110 END

Pascal példaprogram lnko; {legnagyobb közös osztó} var x, y: integer; { a két szám

Pascal példaprogram lnko; {legnagyobb közös osztó} var x, y: integer; { a két szám tárolására} begin readln(x, y); { beolvas} write('LNKO(', x, ', ', y, ')='); { bemenõ adatok} while x <> y do begin if x > y then x: = x - y else y: = y - x; end; writeln(x); { eredmény kiírása } end.

C példaprogram #include <stdio. h> #define ESZ 7 int main (void) { int i,

C példaprogram #include <stdio. h> #define ESZ 7 int main (void) { int i, j, s; int tomb[ESZ] = {23, 12, 100, 6, 55, 24, 2}; for (i=ESZ-2; i>=0; i--) { for (j=0; j<=i; j++) { if (tomb[j] > tomb[j+1]) { s = tomb[j]; tomb[j] = tomb[j+1]; tomb[j+1] = s; } } } printf("A rendezett tomb: nn"); for (i=0; i<ESZ; i++) printf("%d ", tomb[i]); return 0; }