Programozási nyelvek
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 program 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 között mozgatva tipikusan 10-es számrendszerben is be lehet vinni a bájtok értékeit példa gépi kódú programra: 180, 2, 178, 65, 205, 33, 205, 32 assembly 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: általános célú programnyelvek cél: sokféle feladat programozására lehessen használni 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 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) 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: szekvencia (egymás utániság) 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 ciklus (visszacsatolás) lehet elöltesztelő vagy hátultesztelő a programnyelv utasításaira való átfogalmazás 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: 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 blokkdiagram (téglalapokra írva minden lépés, téglalapok egymáson belül is elhelyezkedhetnek) struktogram (esetleg vonalakkal felosztott téglalap-részek elágazásoknál, fentről lefelé vannak az egymás után következő lépések)
folyamatábra blokkdiagram beolvas: p beolvas: p q=1 q=1 Ismételd q=2q q=2q amíg q < p q<p Eredmény: q igaz 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 TO B GIVING C 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 Hordozható assembly pl.: C, memóriacímek (mutatók) és memóriafoglalás rugalmas kezelése Objektumorientált programozás pl.: C++, SmallTalk, Java objektumok tulajdonságokkal / állapotokkal, 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)
Alapnyelvek Pascal ALGOL (ALGOrithmic Language) 1960-as évektől, tudományos számításokra tervezték BASIC (Beginner’s All purpose Symbolic Instruction Code) 1964-től, kezdetben egyetemisták részére fejlesztették ki C 1970-es évek eleje, UNIX kifeljesztéséhez hozta Dennis Ritchie létre COBOL (COmmon Business Oriented Language) 1959, nyilvántartások kezeléséhez fejlesztették ki FORTRAN (FORmula TRANslator)) 1957, numerikus számításokhoz, manapság is elterjedt Pascal 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 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 pl.: a Borland Turbo Pascal több utasítást ismer, mint a Pascal A szabványoknak két fő típusa van: 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 DIM P(100)
GOTO feltétel nélküli vezérlésátadás (ugrás) nem elegáns használni 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ű á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 FORTRAN0 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 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)
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 program 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, 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:\n\n"); for (i=0; i<ESZ; i++) printf("%d ", tomb[i]); return 0;