Hernyák Zoltán Magasszintű Programozási Nyelvek I. A számítógép programozása Hernyák Zoltán Web: http://dragon.ektf.hu/aroan, E-Mail: aroan@aries.ektf.hu Magasszintű Programozási Nyelvek I. Eszterházy Károly Főiskola Számítástudományi tsz http://aries.ektf.hu 1
Nyékiné Gaizler Judit: Programozási nyelvek, Kiskapu, Budapest, 2003. Kötelező irodalom: Nyékiné Gaizler Judit: Programozási nyelvek, Kiskapu, Budapest, 2003. Dr. Kovács Emőd, Hernyák Zoltán, Radványi Tibor, Király Roland: A C# programozási nyelv a felsőoktatásban (http://aries.ektf.hu/csharptk) Ajánlott irodalom: Juhász I.: Magasszintű programozási nyelvek 1. Elektronikus jegyzet. Debreceni Egyetem, 2003. http://mobidiak.inf.unideb.hu/mobirobi/listdocument.mobi?id=112
A programkészítés lépései Valós probléma megtalálása Megoldása (adott tudomány) Modellezése (Algoritmus tárgy) Lekódolása (Programozás tárgy) 3
A program készítés lépései: A probléma megtalálása A programozás alapjai A program készítés lépései: A probléma megtalálása A probléma megértése A megoldás módszereinek felkutatása Az algoritmus felállítása A programozási nyelv kiválasztása Az algoritmus kódolása 4
a használható programozási elemek segítségével… A "C" programozási nyelv Kódolás: a választott programozás nyelv szintaktikai szabályainak figyelembevételével… a használható programozási elemek segítségével… az adott nyelv futtatórendszerének ismeretében… helyes működésű programszöveg készítése. 5
Memória + Mikroprocesszor A programozás alapjai Forráskód Programozó Tárgykód Compiler Futtatható kód Linker Operációs rendszer + Futtató rendszer Futtató környezet Memória + Mikroprocesszor 6
Fordítóprogram veszi észre Fordítási időben A programozás alapjai Hibatípusok Szintaktikai hiba Fordítóprogram veszi észre Fordítási időben A fordítás folyamata itt le is áll A programozási nyelv szabályainak megszegéséből eredő hibák 7
Szemantikai hiba (run-time error) A programozás alapjai Hibatípusok Szemantikai hiba (run-time error) A programozó veszi észre programtesztelés (futási idő!) közben A „program nem azt csinálja” amit kellene A program szabálytalan műveletet végez, és leáll a futása Az algoritmus rosszul kódolásából ered 8
Ismeri a nyelv szabályait, és nem követ el szintaktikai hibákat A programozás alapjai A „jó” programozó Ismeri a nyelv szabályait, és nem követ el szintaktikai hibákat Jó algoritmizálási képességgel rendelkezik, és nem követ el szemantikai hibákat Hogyan lehet ezt elérni: Tanulás Gyakorlás !!! 9
Fordítás lépései: Lexikai elemzés Szintaktikai elemzés A programozás alapjai Fordítás lépései: Lexikai elemzés Szintaktikai elemzés Szemantikai elemzés Kódgenerálás 10
A program szövegének szétdarabolása A programozás alapjai 1. Lexikai elemzés: A program szövegének szétdarabolása A programot felépítő lexikális elemek (többkarakteres) szimbólum Szimbólikus név Címke Megjegyzés Literál szétválasztása 11
2. Szintaktikai elemzés: A programozás alapjai 2. Szintaktikai elemzés: A lexikai elemekből álló kifejezések előállítása, azok helyességének ellenőrzése Megfelelő sorrendű elemek Az elemek típusai ismert és megfelelő 12
A szintaktikai (már ellenőrzötten helyes) kifejezések közötti A programozás alapjai 3. Szemantikai elemzés: A szintaktikai (már ellenőrzötten helyes) kifejezések közötti ‘értelembeli’ ellenőrzés, összefüggések felfedezése, hibák felfedezése, hibátlan kód esetén annak esetleges optimalizációja 13
A szintaktikai kifejezések alapján gépi kódú utasítások generálása A programozás alapjai 4. kódgenerálás: A szintaktikai kifejezések alapján gépi kódú utasítások generálása ( ez egyszerű nyelvi transzformáció ) Processzor-specifikus gépi utasítások Kód-optimalizálás Futási sebességre Memóriafoglalásra Kódhosszra 14
Imperatív nyelvek Eljárásorientált Objektum-orientált Nyelvek osztályozása Imperatív nyelvek Eljárásorientált Objektum-orientált Deklaratív nyelvek Funkcionális nyelvek Logikai nyelvek Máselvű nyelvek 15
A programkészítés lépései Imperatív nyelvek Értékadó utasításokból áll Programvezérlési szerkezetek Elágazás: mikor milyen értékadó utasítást kell végrehajtani Ciklus: hányszor kell végrehajtani az értékadó utasításokat 16
A programkészítés lépései Imperatív nyelvek / Eljárás-orientált Áttekinthetőség miatt alprogramokat szervezünk (eljárások, függvények) Az alprogramokból modulokat építünk Deklaráljuk a modulok interface-ét A főprogram blokkja indítja el az utasítás-folyamot Az utasítások jól követhető, a programozó által megtervezett sorrendben lépésről-lépésre hajtódnak végre A program véget ér amikor a főprogram utolsó utasításának végrehajtása is befejeződik 17
A programkészítés lépései Imperatív nyelvek / Objektum-orientált Áttekinthetőség miatt funkcionális egységeket (osztályokat) építünk Deklaráljuk az osztályok interface-ét Az osztályok új típusként jelentkeznek, melyből a programozó példányokat készít A példányok egymással kommunikálnak A főprogram készíti el a kezdeti példányokat, és ‘felkéri őket’ a működésre A program befejeződik a főprogram utolsó utasításának befejeződésekor 18
A programkészítés lépései 2. Deklaratív nyelvek A programozó részproblémák megoldását írja meg, vázolja fel A megoldandó problémának (fő-probléma) is leírja a megoldási módját A futtató rendszer a beépített logikával ‘felgöngyölíti’ a megoldást a fő-problémából kiindulva A programozó a program működésére kevés befolyással bír 19
A programkészítés lépései 2. Deklaratív nyelvek / Funkcionális A programozó függvényeket programoz le A függvényeknek input argumentumai vannak, és output értékeket produkálnak A bonyolultabb függvényeket al-függvények kompozíciójaként lehet felírni A függvények input argumentumai is függvények Általában minden függvény, még az is függvény, ami első pillanatban nem annak látszik A program futása befejeződik, amint a fő függvény-kifejezés output értékeinek kiszámítása elkészül 20
A programkészítés lépései 2. Deklaratív nyelvek / Logikai Logikai igaz állításokat (tények) fogalmazunk meg a matematikai formális logika módszereivel Paraméteres logikai kifejezéseket is építhetünk logikai operátorok és a tények felhasználásával Megfogalmazunk egy fő logikai kifejezést (kérdés) A program futása során a beépített futtató elv kiértékeli a kérdést, amelynek erdeménye vagy IGAZ vagy HAMIS lesz A program futása megáll, ha a kérdés logikai eredménye kiértékelődött 21
Forráskód felépítő elemek Alapvető szintaktikai elemek Forráskód felépítő elemek Karakterek Lexikális egységek Szintaktikai egységek Utasítások Programegységek Fordítási egységek Program 22
Alapvető szintaktikai elemek Karakterkészlet Betűk + számjegyek + spec. szimbólumok A saját azonosítókat csak angol ABC karaktereiből készíthetjük el? kódlapfüggetlenség, ( ASCII plain text file ) Lokális nyelv teljes karakterkészlete felhasználható? természetesebb, olvashatóbb kódlapfüggő forráskód 23
Alapvető szintaktikai elemek Lexikai elemek Több karakterből állnak össze Többkarakteres szimbólum (pl ‘<=‘ ) Szimbólikus név (utasítás, változó, … neve) Címke (programsor ‘neve’) Megjegyzés (szabad szöveg) Literál (szövegbe beleírt (inline) konstans) 24
Azonosító névképzési szabályai Alapvető szintaktikai elemek Azonosító névképzési szabályai Azonosító = valamely programozási eszköz elnevezése. Az eszközt az első hivatkozás előtt deklarálni kell (meg kell adni a nevét, és hogy ‘mit értünk’ ezen a néven) A névválasztásnak szabályai vannak. 25
Azonosító névképzési szabályai Alapvető szintaktikai elemek Azonosító névképzési szabályai Betűvel vagy aláhúzással kezdődik. Betűvel, számjeggyel, aláhúzással folytatódhat. Hossza sokszor nem korlátos, de nem jellemző a nagyon hosszú nevek használata. Kis/nagybetűk különbözőnek számítanak!? 26