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

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

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

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

C++ programok fordítása

Számítógép és programozás 2

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

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

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

C programozási nyelv

3. Osztályok II. Programozás II

Alprogramok, paraméterátadás

Programozás C és C++ -ban

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

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

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

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

Osztály és objektum fogalma

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

12. gyakorlat Enum; Tárolási osztályok Preprocesszor utasítások; Moduláris programozás

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

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

Dr. Schuster György október 14.

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

Programozás C++ -ban

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

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

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

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

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

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

Google C++ style guide

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

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

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

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

A PROGAMOZÁS ALAPJAI 1. Függvény mint függvény paramétere. Függvény mint függvény paramétere. Függvény mint függvény paramétere

Programozás II gyakorlat. 6. Polimorfizmus

ISA szimulátor objektum-orientált modell (C++)

Az alábbi példában a Foo f(5); konstruktor hívása után mennyi lesz f.b értéke? struct Foo { int a, b; Foo(int c):a(c*2),b(c*3) {} };

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

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

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

Szoftver labor III. Tematika. Gyakorlatok. Dr. Csébfalvi Balázs

500. AA Megoldó Alfréd AA 500.

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

Programozási Nyelvek (C++) Összefoglaló

C++ programozási nyelv

Hardver modellezés SystemC-vel és SDL grafikus könyvtárral Visual Stúdió alatt

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

Mobil Informatikai Rendszerek

Programozási nyelvek Java

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

Programozás 1. Dr. Iványi Péter

C++ Gyakorlat jegyzet 8. óra

3D-s számítógépes geometria és alakzatrekonstrukció

és az instanceof operátor

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

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

C++ Gyakorlat jegyzet 7. óra

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. 11. Előadás: Esettanulmány

C++ Gyakorlat jegyzet 12. óra

OPENCV TELEPÍTÉSE SZÁMÍTÓGÉPES LÁTÁS ÉS KÉPFELDOLGOZÁS. Tanács Attila Képfeldolgozás és Számítógépes Grafika Tanszék Szegedi Tudományegyetem

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

Regionális forduló november 19.

Regionális forduló november 19.

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

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

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

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

Programozás C++ -ban

Programozási nyelvek (ADA)

Abstract osztályok és interface-ek. 7-dik gyakorlat

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Programozás 6. Dr. Iványi Péter

Programozás alapjai. 8. előadás

Programozási nyelvek JAVA EA+GY 1. gyakolat

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

Java és web programozás

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

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

1) Hány byte-on tárol a C++ egy karaktert (char)? implementáció-függő ( viszont lásd 79. megjegyzés ) 1 8 4

Programozás I. 1. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

3D-s számítógépes geometria és alakzatrekonstrukció

Információs Technológia

Programozási Nyelvek: C++

Osztályok. 4. gyakorlat

Java és web programozás

Programozás C++ -ban 2007/4

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?

C programozás. 1 óra Bevezetés

Java I. A Java programozási nyelv

Pénzügyi algoritmusok

Programozás 5. Dr. Iványi Péter

Globális operátor overloading

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Átírás:

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

ISMÉTLÉS Tagfüggvény kiemelése struct Particle { int x,y; unsigned char r,g,b; void rajzol(); }; void Particle::rajzol() { gout << move_to(x, y) << color (r, g, b) << dot; }

ISMÉTLÉS Interface - Implementation struct Particle { int x,y; unsigned char r,g,b; void rajzol(); }; void Particle::rajzol() { gout << move_to(x, y) << color (r, g, b) << dot; }

ISMÉTLÉS Láthatóság Miért jó elrejteni a mezőket? Mert akkor a program többi része nem fér hozzá, csak a tagfüggvényeken keresztül Ez biztonságos, és karbantartható kódot fog adni Láthatósági szintek: public: mindenki látja protected: örökösök látják csak private: senki más nem látja C++-ban a láthatóság típusszintű

ISMÉTLÉS Láthatóság struct Particle { Particle(int X, int Y); virtual void mozog( ); virtual void rajzol( ); protected: double x,y; unsigned char r,g,b; };

ISMÉTLÉS Osztály class Particle { public: Particle(int X, int Y); virtual void mozog( ); virtual void rajzol( ); protected: double x,y; unsigned char r,g,b; };

Implementáció elrejtése Külön fájlba tesszük a felületet és a megvalósítást Az interface helye a fejlécfájl (header,.h,.hpp) fájl lesz Az implementáció helye egy új.cpp fájl Így előre lefordítható lesz a típusunk (.o fájl), ez a tárgykód A program ( project ) pedig több tárgykódból készül el

Implementáció elrejtése particle.hpp #ifndef PARTICLE_HPP #define PARTICLE_HPP struct Particle { int x,y; unsigned char r,g,b; void rajzol(); }; particle.cpp #include particle.hpp void Particle::rajzol() { gout << move_to(x, y) << color (r, g, b) << dot; } #endif main.cpp #include particle.hpp int main() { Particle p; p.rajzol(); }

A projekt fogalma Forráskód fájlok (.cpp fájlok) A.h/.hpp fájlokra a.cpp fájlokból úgyis hivatkozunk Fordítási beállítások lib hozzáadása, pl. SDL Warning level Optimalizáció Target (grafikus/konzol, release/debug, application/lib) Makefile, Solution

Példa projekt (Code::Blocks) <Option title="feladat" /> <Add option="-o2" /> <Linker> <Add option="-s" /> <Add library="graphics" /> </Linker> <Add library="sdlmain" /> <Unit filename="main.cpp" />

A fordítás menete Preprocesszor Forráskódok értelmezése, típusok feltérképezése (pl. méret miatt). Forrásfájlonként egy tárgykód (object,.o) fájl létrehozása. Ebben gépi kódú részletek vannak, előkészítve a csatlakozási pontokat A linker összeköti a tárgykódokat undefined reference : egyik tárgykódban sincs feloldva egy csatlakozási pont, pl függvényhíváshoz nem található függvény implementáció

Preprocesszor direktívák #ifdef / #ifndef AZONOSITO, #endif A fordításba a következő részletet akkor tegye/ne tegye bele, ha definiálva van az AZONOSITO #define AZONOSITO [ÉRTÉK] Egy azonosító definiálása, lehet az értéke konstans vagy képlet, fordítási időben behelyettesítődik #include <X> vagy X Az adott fájl tartalmát ide illessze be. A <> azt jelenti, hogy szabványos elérési úton keresse, a pedig hogy az adott.cpp könyvtárában.

Fejlécfájl kerete particle.hpp #ifndef PARTICLE_HPP #define PARTICLE_HPP struct Particle { int x,y; unsigned char r,g,b; void rajzol(); }; Csak egyszer szerkeszthető a kódba: a következő #include alkalmával ez már definiálva van #endif

Ökölszabályok.cpp fájlt nem inkludálunk Egy fájlba egy téma kerül, sokszor ez egyetlen típus Nincs körkörös hivatkozás Pl.: struct A {B b;}; struct B {A a;}; nincs, de mutatót és referenciát szabad tenni (mert ismert a mérete) Az ebből felmerülő problémák feloldhatóak előre deklarált típusokkal. (pl. #include particle.hpp helyett csak annyi, hogy struct Particle;) Majd a linker szól, ha nincs meg az implementáció. Ilyenkor csak mutató és referencia használható

Fordítási egység Fordítási egység az, ami önállóan fordítható A C++ nyelvben minden.cpp fájl önálló fordítási egység Moduláris programozás Felgyorsítja a fordítást: csak a megváltozott forráskódokhoz tartozó egységek fordulnak újra A személyi felelősség értelmezhető a rendszer alkotóelemeire: önállóan tesztelhető modulok Strukturális / moduláris programozás

Linker A fordítási egységekből közös binárist állít elő Néhány hibalehetőség: Nincs meg egy függvény, vagy egy változó: undefined reference Ugyanaz a változó a fejlécfájlban deklarálva mindegyik azt beszerkesztő fordítási egységben globális, egymással ütköznek linkeléskor: multiple definition extern : valahol majd deklarálva lesz, a többiek tudjanak róla, hogy van. Pontosan egy helyen deklarálod is. extern groutput& gout; esetleg static, ha mindenhol külön-külön akarod

A könyvtár Egy vagy több fordítási egység, amik jól körülhatárolható célra együtt használhatóak Előre lefordítható (pl. libgraphics.a) Nehezen túlbecsülhető szerepe van egy programnyelv tekintetében, hogy képes-e könyvtárakat kezelni Pl. PLanG nem, ezért mindent neked kell csinálni Újrafelhasználható eredmények http://gnuwin32.sourceforge.net/ http://devpaks.org/

Könyvtárak Példák: SDL, STL, stb.. Nagyon sok van, a legtöbb feladatot valaki más már megcsinálta, neked elég felhasználni Természetesen meg kell tanulni használni A saját widgetkészlet jó példa könyvtárra: Jól körülírható célra készült Újrafelhasználható Mások is használhatják, ha van dokumentáció (lesz) Könyvtáron belül következetes stílus

Könyvtár létrehozása A project ne tartalmazzon main() függvényt IDE: A target legyen library parancssor: g++ -c forras1.cpp forras2.cpp Fordítás után indítható bináris helyett libx.a fájl jön létre (.lib is lehet más fordítóknál) A libx.a és az X.hpp együtt használható, csak a projectet kell beállítani Második beadandóban a maximális pontszámért így kell majd fordítani

Könyvtár fordítása : előtte particle.hpp #ifndef PARTICLE_HPP #define PARTICLE_HPP struct Particle { int x,y; unsigned char r,g,b; void rajzol(); }; particle.cpp #include particle.hpp void Particle::rajzol() { gout << move_to(x, y) << color (r, g, b) << dot; } #endif main.cpp #include particle.hpp int main() { Particle p; p.rajzol(); }

Könyvtár fordítása : utána particle.hpp #ifndef PARTICLE_HPP #define PARTICLE_HPP struct Particle { int x,y; unsigned char r,g,b; void rajzol(); }; libparticle.a gépi kódú tartalom #endif main.cpp #include particle.hpp int main() { Particle p; p.rajzol(); }

Könyvtár tartozékai Fejlécfájl Előrefordított kód és/vagy forráskód Dokumentáció Lehetőleg több, mint kommentek a fejlécfájlban html, pdf,... Esetleg dinamikus könyvtár fájlok (.dll) Esetleg példaprogramok és tutorial Esetleg néhány IDE számára projectfájl

Összefoglalás Az implementáció elrejtése a konzisztencia megőrzésének legbiztosabb eszköze Az implementáció külön fájlba, külön fordítási egységbe helyezhető A fordítási egységek önállóan fejleszthetőek, tesztelhetőek Fordítási egységekből, azok halmazaiból könyvtár készíthető A moduláris programozás segít a többfős csapatok munkájában