Bevezetés a Programozásba II 4. előadás. Adattípusok hordozhatósága

Hasonló dokumentumok
Alkalmazott modul: Programozás 6. előadás. Strukturált programozás: újrafelhasználható adattípusok

Bevezetés a programozásba Előadás: Fordítási egység

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

Vizuális, eseményvezérelt programozás XI.

Bevezetés a Programozásba II 2. előadás. Adattípusok megvalósítása egységbe zárással. Adattípusok megvalósítása egységbe zárással

Bevezetés a Programozásba II 3. előadás. Biztonságos adattípusok megvalósítása. Biztonságos adattípusok megvalósítása

GPU Lab. 5. fejezet. A C++ fordítási modellje. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!

Gregorics Tibor Tanácsok modularizált programok készítéséhez 1

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

Bevezetés a Programozásba II 3. előadás. Biztonságos adattípusok megvalósítása

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

C programozási nyelv

3. Osztályok II. Programozás II

Bevezetés a programozásba I.

Pénzügyi algoritmusok

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

C++ programok fordítása

Programozási nyelvek (ADA)

2. előadás Programegység, fordítási egység, könyvtári egység, beágyazás, blokkszerkezet, alprogramok, csomagok

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Bevezetés a programozásba II 1. gyakorlat. A grafikus könyvtár használata, alakzatok rajzolása

Programozás II. 2. Dr. Iványi Péter

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

C++ Gyakorlat jegyzet 7. óra

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

Bevezetés a programozásba előadás: Öröklődés

Bevezetés a programozásba I.

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

Bevezetés a Programozásba II 12. előadás. Adatszerkezetek alkalmazása (Standard Template Library)

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

Programozás alapjai 2.Gy: A C nyelv alapjai P R O

Bevezetés a Programozásba II 8. előadás. Polimorfizmus Giachetta Roberto

Programozási Nyelvek (C++) Gyakorlat

Bevezetés a programozásba Előadás: A const

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

Programozás II gyakorlat. 4. Öröklődés

Bevezetés a programozásba. 8. Előadás: Függvények 2.

Bevezetés a programozásba I 8. gyakorlat. C++: szövegfolyamok, intelligens tömbök

Mintavételes szabályozás mikrovezérlő segítségével

Programozás C++ -ban

Programozás alapjai Bevezetés

Osztály és objektum fogalma

Programozás I. 5. Előadás: Függvények

Alkalmazott modul: Programozás. C++ alapismeretek. C++ alapismeretek Történet

Bevezetés a programozásba I 8. gyakorlat. C++: szövegfolyamok, intelligens tömbök. Adatfolyamok Hibalehetőségek

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET)

Bevezetés a programozásba. 9. Előadás: Rekordok

Szerző Lővei Péter LOPSAAI.ELTE IP-08PAEG/25 Daiki Tennó

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

A programozás alapjai 1 Rekurzió

Programozás II. 6.Öröklés Dr. Iványi Péter

PROGRAMOZÁSI NYELVEK - CPP. ELŐADÁS JEGYZET

1. Alapok. Programozás II

C vagy C++? Programozási Nyelvek és Fordítóprogramok Tanszék. Pataki Norbert. Programozási Nyelvek I.

Adatbázis és szoftverfejlesztés elmélet

Mérnöki programozás 7. Szerkesztette: dr. Vass Péter Tamás

C programozás. 1 óra Bevezetés

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Java programozási nyelv 6. rész Java a gyakorlatban

Programozási alapismeretek 1. előadás

Bevezetés a programozásba. 6. Előadás: C++ bevezető

Programozás C és C++ -ban

Alkalmazott modul: Programozás 2. fejezet. C++ alapismeretek. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Globális operátor overloading

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET) Cserép Máté.

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Szoftver technológia. Build systems. Cserép Máté ELTE Informatikai Kar 2019.

Programozás II. 4. Dr. Iványi Péter

Programozás I. gyakorlat

és az instanceof operátor

Dr. Schuster György október 14.

Bevezetés a programozásba. 11. Előadás: Esettanulmány

Bevezetés a programozásba I.

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Programozás alapjai 9.Gy: Struktúra 2.

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

15. Programok fordítása és végrehajtása

Programozási nyelvek Java

Algoritmizálás és adatmodellezés tanítása 1. előadás

4. Öröklődés. Programozás II

Mobil Informatikai Rendszerek

Vizuális, eseményvezérelt programozás X. V 1.0

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés. Szekvenciális fájlkezelés Fájlok használata

A Code::Blocks fejlesztőkörnyezet

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

Mindenki abból a három tantárgyból tesz szigorlatot, amelyet hallgatott.

Programozás C++ -ban 2007/1

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Maximum kiválasztás tömbben

A feladat lényege egy felhasználói típusnak a zsák típusnak a megvalósítása.

Bevezetés a Programozásba II 5. előadás. Objektumorientált programozás és tervezés

Programozás II gyakorlat. 8. Operátor túlterhelés

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Bevezetés, a C++ osztályok. Pere László

Átírás:

Pázmány Péter Katolikus Egyetem Információs Technológiai és Bionikai Kar Bevezetés a Programozásba II 4. előadás 2014.03.03. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

Programok tördelése A strukturált programozás során a programot adattípusok segítségével valósítjuk meg, amelyek újrafelhasználhatóan implementálunk a típus könnyen átvihető, és használható más alkalmazásokban ennek korlátot szab, hogy a típusokat leíró kódrészeket át kell másolnunk más programokba nagyobb programok esetén a típusok egy fájlban történő elhelyezése jelentősen megnövelheti a fájlméretet, ami rontja az áttekinthetőséget amennyiben a programkódot többet készítik, eleve problémás egy közös fájlon dolgozni PPKE ITK, Bevezetés a programozásba II 4:2

Programok tördelése A programunkat nem csak egy, de több forrásfájlban is elhelyezhetjük, azaz a programkódot több fájlba is tördelhetjük minden típus külön fájlba kerülhet, így függetlenedik a többi kódtól, és könnyen hordozható lesz, és felhasználható más alkalmazásokban a fejlesztők a saját fájljaikon dolgoznak, és nem zavarják más munkáját forrásfájl forrásfájl forrásfájl program PPKE ITK, Bevezetés a programozásba II 4:3

Programok fordítása A több fájlban létrehozott programkód együttesen fogja megoldani a feladatot, ehhez a környezetnek gondoskodnia kell arról, hogy a fájlok tartalma egy futtatható állományba kerüljön A program fordítása során a fordítóprogram (compiler) feladata az egyes fájlok kódjának átalakítása gépi kódra, míg a szerkesztőprogram (linker) feladata ezen gépi kódok összeillesztése egy futtatható állománnyá ezt kiegészítheti az előfordító, amely előzetes átalakításokat végez a kódon Fordítási egységnek nevezzük a nyelvnek az az egysége, ami a fordítóprogram egyszeri lefuttatásával, a program többi részétől elkülönülten lefordítható PPKE ITK, Bevezetés a programozásba II 4:4

Programok fordítása forrásfájl forrásfájl (feldolgozva) gépi kód előfordítás fordítás szerkesztés forrásfájl forrásfájl (feldolgozva) gépi kód program PPKE ITK, Bevezetés a programozásba II 4:5

Forrásfájlok C++-ban a fordítási egységek két forrásfájlból állhatnak: a fejlécfájl (header,.h,.hpp) tartalmazza a típusok felületét, rekordokat, metódusok és alprogramok deklarációját tartalmazhatja az alprogramok megvalósítását is, de ez nem kötelező a törzsfájl (source,.cpp) tartalmazza az alprogramok, metódusok definícióját, megvalósítását A beépített könyvtárak is ilyen fájlokból tevődnek össze, a programjaikban sokszor hivatkozunk fejlécfájlokra (pl.: iostream, string, vector, ), amelyekhez megfelelő törzsfájlok tartoztak (általában előre lefordítva) PPKE ITK, Bevezetés a programozásba II 4:6

Forrásfájlok Az előfordító befordítja a törzsfájlokba a megjelölt fejlécfájlok tartalmát, ekkor azok teljes tartalma bekerül a törzsfájlunkba ehhez az #include direktívát használjuk az "..."-ben jelölt fájlokat az aktuális könyvtárban, a <...>-ben jelölt fájlokat a központi könyvtárban keresi amennyiben a befordított fejlécfájlokban van további hivatkozás, akkor azokat is belefordítja, és így tovább Az így előállított kódot a fordítóprogram fordítja le gépi kódra (.o,.obj) A szerkesztőprogram összeilleszti a különböző fájlokat, és elkészíti a futtatható állományt (.exe) PPKE ITK, Bevezetés a programozásba II 4:7

Forrásfájlok Típusainkat, alprogramjaikat elhelyezhetjük külön fájlokban a típus a deklarációs részét a fejlécfájlba, a megvalósítási részét a törzsfájlba tesszük a két fájl nevének ajánlatos megegyeznie a fejlécfájlban, vagy a törzsfájlban meg kell adnunk, ha további fájlbeillesztésre van szükségünk (ha a fejlécfájlban már írtunk valamilyen hivatkozást, ezt nem kell újra beírnunk a törzsfájlba) a törzsfájlban megadjuk a hozzátartozó fejlécfájl nevét A fejlécfájlban nem adjuk meg a használt névtereket (pl. std), csak az egyes típusoknál hivatkozunk rájuk PPKE ITK, Bevezetés a programozásba II 4:8

Forrásfájlok Mivel a teljes fejlécfájl kód bekerül a törzsfájlunkba, ezért a törzsfájl tartalmát egy az egyben behelyezhetjük a fejlécfájlba ugyanúgy elhelyezhetjük a típus megvalósítását a típus felületén belül, nem kell szétválasztanunk a kódot ekkor ugyanúgy fordítódik a programkód, de nem külön objektumfájlba helyeződik (az eredmény ugyanaz) akkor érdemes alkalmazni, amikor a megvalósítási részt nem akarjuk szétválasztani, elrejteni a felülettől A főprogramunk (main függvény) fájlja (main.cpp) célszerűen nem tartalmaz típusokat, alprogramokat, csak a hivatkozásokat a többi fájlra PPKE ITK, Bevezetés a programozásba II 4:9

Forrásfájlok Pl.: type1.hpp type3.hpp type2.hpp type3.cpp main.cpp main.o type2.o program.exe PPKE ITK, Bevezetés a programozásba II 4:10

Fejlécfájlok Egy fejlécfájlt többször is beilleszthetünk a programunkba, ekkor ugyanaz a kód többször is bekerülhet, ami ahhoz vezet hogy valami többször is deklarálva lehet Egy előfordítási direktíva gondoskodik arról, hogy egy fájl csak egyszer kerüljön beillesztésre a #define utasítással nevet adhatunk egy kódsorozatnak az #ifndef #endif elágazásban lekérdezhetjük, hogy már definiálva van-e egy adott kódsorozat célszerű az egész fájlt az elágazásba helyezni, így garantáltan nem ismétlődik a tartalom PPKE ITK, Bevezetés a programozásba II 4:11

Fejlécfájlok A biztonság érdekében minden fejlécfájlunk tartalmazza: #ifndef name #define name // a fájl tartalma #endif A name általában megegyezik a fájl nevével, de bármit írhatunk oda (konvenció szerint csupa nagy betűvel írjuk) A törzsfájlok nem kerülhetnek be többször a kódba, ezért azok esetében nem kell védelemről gondoskodni PPKE ITK, Bevezetés a programozásba II 4:12

Példa Feladat: Valósítsuk meg a racionális szám típusát külön fordítási egységben. létrehozzuk a rational.hpp fejlécfájlt, valamint a rational.cpp forrásfájlt, ezekbe helyezzüka típust, a főprogram egy külön törzsfájlba (main.cpp) kerül mindkét törzsfájl hivatkozni fog a fejlécfájlra rational.hpp main.cpp rational.cpp PPKE ITK, Bevezetés a programozásba II 4:13

Példa Megoldás (rational.hpp): #ifndef RATIONAL_HPP // védelem a többszörös behelyezés ellen #define RATIONAL_HPP #include <iostream> // nincs névtérhasználat megadva class Rational { } // racionális szám típusa // további operátorok a típushoz: Rational operator+(int e, Rational r); #endif // RATIONAL_HPP PPKE ITK, Bevezetés a programozásba II 4:14

Példa Megoldás (rational.cpp): #include <iostream> #include "rational.hpp" // a racionális típus használata using namespace std; // főprogram: int main() { Rational t[5]; } PPKE ITK, Bevezetés a programozásba II 4:15

Példa Megoldás (rational.cpp): #include "rational.hpp" // szükséges a fejlécfájl használata using namespace std; // itt adjuk meg a névtérhasználatot void Rational::simplify(unsigned int& a, unsigned int& b){ } int operator*=(int& e, Rational r) { } PPKE ITK, Bevezetés a programozásba II 4:16

Példa Feladat: Valósítsuk meg a téglalap és szín típusokat külön fordítási egységben. a színt csak egy fejlécfájlban (color.hpp) helyezzük el, a téglalapnak pedig készítünk külön fejlécfájlt (rectangle.hpp), és törzsfájlt (rectangle.cpp) color.hpp rectangle.hpp main.cpp rectangle.cpp PPKE ITK, Bevezetés a programozásba II 4:17

Példa Megoldás (color.hpp): class Color { friend genv::canvas& operator<<( genv::canvas& c, Color col); }; genv::canvas& operator<<(genv::canvas& c, ){ c << genv::color(col._r, col._g, col._b); // több helyen is jelölnünk kell a // névtérhasználatot return c; } PPKE ITK, Bevezetés a programozásba II 4:18

Programkönyvtárak Az azonos tevékenységi körben készített újrafelhasználható típusokat, esetleges további alprogramokat összegyűjthetünk egy gyűjteménybe, amely így egységesen tartalmazza egy adott feladatcsoport kapcsán használható tartalmat pl. grafikus felület létrehozása és kezelése, adatbáziskezelés, alapvető adatszerkezetek és algoritmusok a gyűjtemény egyben kezelhető, publikálható, később bővíthető az így létrehozott gyűjteményeket nevezzük programkönyvtáraknak (library) a programok jelentős része támaszkodik programkönyvtárakra a működés során PPKE ITK, Bevezetés a programozásba II 4:19

Programkönyvtárak Az alapvető programkönyvtárakat nevezzük nyelvi könyvtáraknak közvetlenül a nyelvvel és a fejlesztőkörnyezettel együtt publikálják (pl. C++ standard library) a legtöbb program számára szükséges funkciókat biztosítja, pl. konzol képernyő kezelése, fájlok, alapvető adatszerkezetek Megvalósításában egy programkönyvtár lehet nyílt forrású: közvetlenül a forrásfájlokat tartalmazza zárt forrású: nem tartalmazza a (teljes) forrást, csak a gépi kódú lefordított változatát PPKE ITK, Bevezetés a programozásba II 4:20

Programkönyvtárak típusai A futtatás szempontjából a programkönyvtár lehet: statikus: amelynek tartalma teljes egészében bekerül az eredmény alkalmazás kódjába fordítási időben előnye, hogy csak a fordítás után a programkönyvtár már nem játszik szerepet kezdetben minden programkönyvtár statikus volt a forráskód közvetlen használata mindig statikus programkönyvtárat ad zárt forráskód esetén a programkönyvtár lefordított változata mellett (.a,.la) meg kell adnunk a fejlécfájlokat (.h,.hpp) is, hogy a típusokat a kódban használni tudjuk PPKE ITK, Bevezetés a programozásba II 4:21

Programkönyvtárak típusai A futtatás szempontjából a programkönyvtár lehet: dinamikus: amelynek tartalma egy külön állományban helyezkedik el, és futás közben töltődik be a memóriába pl. Windows esetén a Dinamic-linked Library (DLL) előnye, hogy nem kell a forráskódot egy állományba fordítani ha nem sikerül betölteni a könyvtárat, futási idejű hibát kapunk speciálisan a könyvtár lehet megosztott (shared library), vagyis egyszerre több alkalmazás is használhatja az operációs rendszer számos megosztott programkönyvtárat tartalmaz PPKE ITK, Bevezetés a programozásba II 4:22

Programkönyvtárak használata program program forrása programkönyvtár programkönyvtár fejléce (.h) program gépi kódja programkönyvtár forrása (.a) futtatás statikus szerkesztés program PPKE ITK, Bevezetés a programozásba II 4:23

Programkönyvtárak használata program program forrása programkönyvtár programkönyvtár fejléce (.h) program gépi kódja programkönyvtár forrása (.dll) futtatás dinamikus szerkesztés program PPKE ITK, Bevezetés a programozásba II 4:24