lA C++ programozás Windows környezetben Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21./0. lA Windows üzenetvezérelt működése lAz üzenetközvetítés folyamata lProgramtervezési eszközök lProgramozás Borland C++ Builder környezetben lA Borland C++ Builder integrált fejlesztő környezete
Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21./1. lProgramtervezési eszközök Az objektum orientált programozás kifejlesztésének egyik célja a nagyméretű programok (akár 1 millió sor is!) fejlesztéséhez eszközt adni. Ez az eszköz, az objektum orientált programozási nyelv, illetve integrált fejlesztő környezetben megtestesülő formái a szoftverek fejlesztésének nem minden lépését támogatják. A szoftverfejlesztési folyamat szokásos lépései a következők: feladatspecifikáció feladatelemzés architekturális tervezés részletes tervezés implementálás egy programnyelven tesztelés A fenti, úgynevezett vízesés modellben az utolsó két lépést támogatja egy korszerű objektum orientált programfejlesztő környezet, pl. a Microsoft Visual C++, vagy a Borland Builder C++. Mivel nagy rendszerek esetében a megelőző lépések is legalább ennyire fontosak, támogatásukra is létrehoztak eszközöket. Ezek a CASE (Computer Aided Software Engineering), számítógéppel segített szoftverfejlesztési eszközök.
Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21./2. A legismertebb CASE szoftver a Rational Corporation által készített Rational Rose Modeler, mely a Booch, Rumbaugh és Jacobson által kidolgozott elvek egyesítésével létrehozott UML (Unified Modeling Language), Egyesített Modellező Nyelv szoftveres realizálása. Az UML nyelv célja szoftverrendszerek összetevőinek, kapcsolatrendszerüknek megadása, megkonstruálása, ábrázolása és dokumentálása. Ehhez különféle nézetek és diagramok állnak rendelkezésre. Fontosak az osztályhierarchiára, a külső felhasználókra, az objektumok együttműködésére, a tevékenységek, események időbeliségére, az objektumok állapotára, a rendelkezésre álló szoftverkomponensekre és a rendszerbe betervezett hardverelemek telepítésére vonatkozó nézetek, diagramok. Gyakran alkalmazzák a fejlesztett rendszer modellezésénél a különféle modelleket: az objektummodellt (osztályhierarchia, öröklés), a funkcionális modellt (adatfolyam ábrák, források, tárolók, adatnyelők) és a dinamikus modellt (kommunikációk, események, állapotok).
Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21./3. A Windows operációs rendszer alatt futó programok jelentősen különböznek az eddigi programjaink által reprezentált DOS-os programoktól. Windows környezetben több alkalmazás futhat egyidejűleg: folyamat (process) alapú multitasking, és egy alkalmazásban több tevékenység folyhat egyidőben: többszálú (multi threads) multitasking. A felhasználói interakciók (egér, billentyű) hatásának eljuttatása az egyidőben futó processzek, ill. szálak egyikéhez az üzenetvezérelt működés révén valósul meg. Az alkalmazások ablakokban futnak és az aktuális felhasználói interakció címzettje az aktív ablakhoz tartozó alkalmazói program, illetve azon belül az ablakban érintett vezérlő (nyomógomb, input mező, stb.) objektum megfelelő tagfüggvénye. Egy nyomógomb megnyomása úgy is felfogható, hogy az operációs rendszer értesíti az aktív ablakot az adott nyomógomb lenyomása eseményről. Az üzenetvezérelt működés az operációs rendszer és az alkalmazói program kapcsolattartásának formája. lA Windows üzenetvezérelt működése
Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21./4. Üzenetvezérelt működés esetén bármelyik ablak bármelyik kezelőelemének mindig készen kell állnia arra, hogy használják, azaz a kezelőelem objektum egy üzenetet kapjon. A Windows operációs rendszer objektum orientált felépítésű. Objektumainak jelentős része a felhasználói kapcsolattartást szolgálja: ablakok, nyomógombok, listák, menük, ikonok, szövegablakok, stb. Ezen objektumok működését többszáz tagfüggvény biztosítja, melyek az operációs rendszer Alkalmazásprogramozói interfészének (API, Application Programming Interface) részei. Az operációs rendszer a felhasználótól érkező üzeneteket a Bemeneti várakozó sorban (System Queue) fogadja, ahonnan átkerülnek azon futó program várakozó sorába, amelyiknek az ablakából származnak. Mindegyik futó programnak saját input várakozó sora van. Az alkalmazói programok innen veszik ki a nekik szóló következő üzenetet és válaszolnak rá.
i.Program queue i-1.Program queue Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21./5. Az üzenetközvetítés folyamata Windows A 'K' billentyú lenyomása K Az i. felhasználói program Rendszer queue Üzenetek olva- sása és továbbítása Megjelenítést végző API függvény Az i. program ablaka WinMain függvény Az üzenetközvetítő ciklus i. Program queue Ablakkezelő függvény üzenet értelmezése, feldolgozása Forrás: Benkő Tiborné - Kuzmina, Jekatyerina - Kiss Zoltán - Tamás Péter - Tóth Bertalan : Könnyű a Windowst programozni ComputerBooks K., Budapest
Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21./6. A Windows programokban nem main(){}, hanem WinMain(){} függvény van. Ez hozza létre az alkalmazói program főablakát és indítja az üzenetkezelő ciklust. // Borland Builder Project1.cpp #include #pragma hdrstop USERES("Project1.res"); USEFORM("Unit1.cpp", Form1); // WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0; } //
Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21./7. Az üzenetközvetítő ciklus csak egyszerű átalakítást hajt végre az üzeneten, majd átadja az operációs rendszernek. Azért nem közvetlenül az Ablakkezelő függvénynek, hogy az operációs rendszer rangsorolhasson a különböző alkalmazói programoktól visszakapott és végrehajtásra váró üzenetek között, felügyelhesse a programok futását. Ha az adott felhasználói program van soron, az operációs rendszer meghívja az Ablakkezelő függvényét az adott üzenettel, mint paraméterrel. Az Ablakkezelő függvény feladata az ablaknak címzett összes üzenet megfelelő kezelése. Emiatt egy switch többszörös elágaztató szerkezet van benne, ahol az egyes ágak egy-egy üzenetfajta kezeléséért felelősek. Az ablakkezelő függvény nem köteles minden kapott üzenettel foglalkozni. Az üzenetek lekezelése gyakran az operációs rendszer API függvényén keresztül történik. Fontos megjegyezni, hogy a Windows alkalmazói programokban sok közös rész van, mint pl. az előző Project1.cpp fájl teljes tartalma. Ezeket a közös részeket a korszerű integrált programozói környezetek, mint pl. a Borland C++ Builder, megírják helyettünk. Eszközkapcsolatok (Device Contexts): Az alkalmazói programnak az ablakba íráshoz, rajzoláshoz egy eszközmeghajtón keresztül az ablakhoz kapcsolatot kell létesítenie. Az eszközkapcsolat létrehozható és megszüntethető, akár programfutás közben többször is. Ez a működés is többnyire automatikus.
Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21./8. A Windows alatt futó alkalmazói programok sokféle erőforrást használnak. Az erőforrás olyan objektum, amelyeket a program használ, de előzetesen kellett a programon kívül definiálni. Pl.: menük, kurzorok, ikonok, bitképek, stb. A szükséges erőforrás-állományt általában a programozói környezet támogatásával, erőforrás szerkesztővel hozzuk létre, melyet a programozói környezet a programunk által közvetlenül használható.RES állományformára fordít automatikusan. A Windows operációs rendszer nem tárolja az alkalmazás ablakainak tartalmát. Az ablak átméretezése, elfedés megszüntetése, stb. után az alkalmazói programnak kell gondoskodni a tartalom megjelenítéséről egy Paint() tagfüggvényhívással. A Windows 32 bites verzióiban megszűnt a memória szegmens:offset tagolása, a teljes memória egybefüggően címezhető, továbbá a merevlemezen található virtuális memória a tényleges RAM memória folytatásaként használható. A 32 bites adatszélességből az következik, hogy az int típus 4 bájtos lett.
Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21./9. A C++ Builder jellemzői: lProgramozás Borland C++ Builder környezetben Nagy termelékenységű drag and drop vizuális programfejlesztés vizuális komponensekkel, gazdag komponenskönyvtárral (RAD) Minimális programozói kód írását igényli Kétutas fejlesztés: vizuális oldalon és programkód oldalon Varázslókkal segíti az egyes programozói tevékenységeket Példaprogramokat, oktatópéldákat, beépített kézikönyvet nyújt Objektum és komponens alapú fejlesztés Kliens/szerver alkalmazások fejlesztésének erőteljes támogatása Nagy teljesítményű adatbázis fejlesztés Hatékony nyomkövetés, hibakiszűrés, debug funkciók és még nagyon sok más professzionális lehetőség.
Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21./10. lA Borland C++ Builder integrált fejlesztő környezete Ablaktervező Komponens paletta Szöveg- szerkesztő Objektum- kezelő Osztály- vizsgáló Főmenü Eszközsor
Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21./11. Főmenü: A szoftver összes lehetőségének menüpontokon keresztüli elérésére. Fontosabb főmenüpontok: File, View, Project, Run, Help. Eszközsor: A legfontosabb funkciók gyors elérését szolgáló ikonok találhatók rajta. Testre szabhatók,azaz az igényeknek megfelelően cserélhetők az ikonok. Komponens paletta: Elsősorban vizuális komponensek, program építőelemek könnyű kiválasztására és a programba illesztésére. Pl. nyomógombok, ablak-formok, menük, listák, görgetőlecek, input dobozok és még sok egyéb. Ablaktervező: Az alkalmazói program különféle ablakainak megépítésére ad kiinduló alapot, melyre a komponenseket elhelyezhetjük, ott beállíthatjuk, a programunk kezelői interfészét, ablakainak megjelenését kialakíthatjuk. Objektumkezelő: Az objektumok tulajdonságainak (az adattagok értékeinek) megadására, megváltoztatására, valamint az objektumon bekövetkező eseményeket lekezelő tagfüggvények kiválasztására ad kényelmes eszközt. Szövegszerkesztő: a C++ programkód írására, megjelenítésére, szerkesztésére, a programfutás nyomkövetésére szolgál. Osztályvizsgáló: A programmodulban szereplő osztályok, változók, függvények áttekintő megjelenítésére, azok közötti gyors mozgásra szolgál.