170 likes | 280 Views
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
E N D
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) • 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: • 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 • 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; }