1 / 26

Haladó Programozás

Haladó Programozás. A reflexió jelentése Attribútumok fogalma és használata DLL használata és készítése Feladat. Haladó Programozás. A reflexió jelentése Attribútumok fogalma és használata DLL használata és készítése Feladat. Reflexió.

kaipo
Download Presentation

Haladó Programozás

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Haladó Programozás A reflexió jelentése Attribútumok fogalma és használata DLL használata és készítése Feladat OE-NIK HP

  2. Haladó Programozás A reflexió jelentése Attribútumok fogalma és használata DLL használata és készítése Feladat OE-NIK HP

  3. Reflexió • Azt a megoldást nevezzük reflexiónak, amikor egy program futási időben saját maga vagy egy másik szerelvény felépítését, tulajdonságait elemzi A reflexió segítségével felderíthetők a lefordított kódban található nyelvi elemek és vizsgálható szinte minden jellemzőjük. Lehetőség van például • a típusok (osztályok és struktúrák) tagjainakfelsorolására, • a típusokhoz és tagjaikhoz rendelt attribútumok felderítésére és elemzésére, • külső (ismeretlen típusú) objektumok létrehozására, • külső (ismeretlen típusú) objektumok tagfüggvényeinek meghívására, • szerelvények adatainak lekérdezésére, valamint • új szerelvények futási idejű létrehozására és lefordítására. • Reflexió segítségével szinte bármilyen művelet végrehajtható • Privát mezők módosíthatók, privát metódusok hívhatók, osztályok védett konstruktor segítségével is példányosíthatók... • Figyelembe kell venni, hogy a reflexió igen l-a-s-s-ú Egy metódushívás reflexió használatával akár 50-100-szor lassabb lehet, mint közvetlenül OE-NIK HP

  4. Haladó Programozás A reflexió jelentése Attribútumok fogalma és használata DLL használata és készítése Feladat OE-NIK HP

  5. Attribútumok • Az attribútumok a .NET típusokhoz és tagjaikhoz kapcsolható, futási időben is lekérdezhető kiegészítő információk Az attribútumok segítségével a típusok és tagjaik tetszőleges jelzőkkel, tulajdonságokkal láthatók el, amelyek az adott típus vagy tag viselkedését leírhatják és módosíthatják. Az attribútumok révén a programok viselkedése a forrásnyelv elemeitől független, a programozó által definiálható, az egyes típusokat és tagjaikat leíró egyéb információkkal (metaadatokkal) befolyásolható. • Az egyedi attribútumok alkalmazásának általános lépései: 1. Egyedi attribútumosztály létrehozása Az attribútumokat külön, önálló osztályként kell létrehozni. 2. Más osztályok és/vagy tagjaik megjelölése az egyedi attribútummal A megjelölés eredményeként fordításkor létrejön és a metaadatok közé kerül egy példány az adott attribútumból. Az ajánlott „...Attribute” névvégződés használatkor elhagyható. 3. A lefordított programok futási idejű elemzése reflexió segítségével Az elkészült szerelvényeket be kell tölteni, majd ezt követően tagjaik a megfelelő osztályok reflexiós metódusai segítségével elemezhetők. OE-NIK HP

  6. Attribútumok Példa attribútumok használatára using System; using System.Web.Services; using System.Runtime.InteropServices; [assembly: AssemblyVersion("1.0.0.0")] [Serializable] [ComVisible(true)] public class SpecialAttribute: Attribute { public SpecialAttribute() { } [WebMethod] public TestMethod() { Console.WriteLine("Webszolgáltatásból elérhető metódus vagyok."); } [DllImport("kernel32.dll", CharSet = CharSet.Ansi)] private static extern int GetCurrentProcessId(); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 OE-NIK HP

  7. Haladó Programozás A reflexió jelentése Attribútumok fogalma és használata DLL használata és készítése Feladat OE-NIK HP

  8. Dynamic Link Library / Shared Object • Külön fordított, a programhoz futási időben kapcsolódik • Program modul, ami tartalmazhat programkódot, megosztott erőforrásokat, melyek elérhetők más modulokból • A memóriába csak egyszer töltődik be, több program is használhatja OE-NIK HP

  9. A fordítási folyamat • Object File: Egy köztes kód-reprezentáció, a fordító generálja a forráskód lefordítása után • Tartalmazza: az értelmezett, fordított kódot és relokációs adatokat, utóbbit a linker használja a futtatható állomány generálásához • .NET keretrendszer esetén a relokációs adatok nem közvetlen címek FORRÁS (.cpp, .pas, .c, .cs, .*) ELŐFELDOLGOZÁS, FORDÍTÁS KÜLSŐ LIBRARY-K (.o, .obj, .so, .dll) OBJECT FILE (.o, .obj) LINKELÉS FUTTATHATÓ FILE (.exe) OE-NIK HP

  10. Static linking • Az összes használt függvény/ erőforrás a programban van • Ezek helye a fordítóprogram számára ismert • Így fordításkor az ezekre történő hivatkozás STATIKUS, vagyis az adott kód a program saját címterületén található • Ugyanazt a függvényt több program is külön-külön betölti  pazarlás • A Klasszikus (nem overlay) DOS programok (pl: Turbo Pascal Program SomeFunct1 SomeFunct2 SomeFunct3 Constant1 Constant2 Constant3 Main Code . @SomeFunct3 . . @SomeFunct1 . . OE-NIK HP

  11. Dynamic linking • Egyes függvények/erőforrások a programon kívül vannak • Ezek helye a fordítóprogram számára nem ismert • Így fordításkor az ezekre történő hivatkozás DINAMIKUS, vagyis az adott kód a memóriában mindig máshol található, futási időben derül ki a pontos hely (a betöltést az OS végzi) • Ugyanazt a függvényt több program is együtt használja  megosztott erőforrás (~ Shared Object) • A Legtöbb modern program Program 1 . @SomeFunct2 . DLL SomeFunct2 SomeFunct3 Program 2 . @SomeFunct3 . OE-NIK HP

  12. DLL elérése a .NET keretrendszerben • Platform Invoke (P/Invoke: natív bytekód hívása felügyelt környezetből)  DllImport • using System.Runtime.InteropServices; • [DllImport("winmm.dll", SetLastError = true)] staticexternbool PlaySound(string pszSound, UIntPtr hmod, uint fdwSound); • string fname = @"c:\Windows\Media\tada.wav";PlaySound(fname, UIntPtr.Zero, 1); • Szignatúrák, importok: www.pinvoke.net • Felügyelt DLL hívása • Referencia hozzáadása: Project/Add reference • Ezután a DLL-ben tárolt névtér és az abban tárolt osztályok/metódusok a szokványos módon elérhetőek OE-NIK HP

  13. DLL készítése • 1 solution, 2 projekt: DLL készítő + DLL használó programok • A DLL-t készítő alkalmazás típusa: Class Library • A DLL-t használó alkalmazás referenciái közé fel kell venni a DLL file-t (a Visual Studio segít: akár magát a projektet is fel tudjuk venni, mint referenciát) • A DLL file alapértelmezetten mindig a készülő EXE file mellé másolódik • A referencia hozzáadása után a DLL-t használó alkalmazásban a DLL névtere és osztálya(i) szokványosan elérhetőek OE-NIK HP

  14. Haladó Programozás A reflexió jelentése Attribútumok fogalma és használata DLL használata és készítése Feladat OE-NIK HP

  15. Az attribútumokat kötelező a System.Attribute osztályból származtatni. A közös nyelvspecifikáció (CLS) előírja, hogy egyedi attribútumok csak a System.Attribute osztályból származtathatók. A Microsoft C# fordítója ebben a tekintetben kizárólag CLS-kompatibilis osztályokat enged meg, tehát kikényszeríti ennek az előírásnak a betartását. 1. lépés – Egyedi attribútum létrehozása • Az attribútumok maguk is osztályok Az attribútumok rendelkezhetnek kötelező és opcionális paraméterekkel. A paramétereket az attribútum konstruktora kapja meg (ennek módját lásd később). Az újonnan megadott egyedi attribútummal kapcsolatban külön megjelölhetjük az alábbiakat: • A programok mely elemeire alkalmazható (osztályok, metódusok, mezők, paraméterek...) • Egyszer vagy többször is alkalmazható-e egy elemre • Az új attribútummal megjelölt elemek leszármazottai örököljék-e az attribútum értékét Alapértelmezésben az attribútumok minden lehetséges programelemre alkalmazhatók, elemenként csak egyszer szerepelhetnek és öröklődnek. OE-NIK HP

  16. 2. lépés – Tagok megjelölése attribútumokkal • Az attribútumok a közvetlenül mögöttük álló tagra vonatkoznak Bizonyos esetekben, amikor ez a viselkedés nem egyértelmű vagy nem értelmezett, az attribútum neve előtt – kettősponttal elválasztva – egy előtagot kell alkalmazni. Nem egyértelmű például, hogy egy közvetlenül valamely metódus előtt álló attribútum a metódusra vagy visszatérési értékére vonatkozik, ezért utóbbi esetben a „return” előtagra van szükség. Emellett például egy szerelvény szintű attribútum „mögött” álló tag fogalmának nincs értelme, ezért itt az „assembly” előtagot kell alkalmazni. • Az attribútumokat szögletes zárójelek között kell megadni, paramétereiket pedig a nevük mögött zárójelek között felsorolva Fordításkor automatikusan létrejön (és a szerelvény metaadatai közé kerül) az egyes elemekhez megadott attribútumok egy-egy példánya. Ezzel tulajdonképpen egy deklaratív programozási elem jelenik meg a kódban. A megadott attribútum konstruktora által előírt paraméterek kötelezők, ezek mellett pedig paraméter=érték formátumban az attribútumosztály bármely nyilvános tulajdonságának is érték adható (ezek az opcionális paraméterek). OE-NIK HP

  17. 3. lépés – Elemzés reflexió segítségével • A reflexióhoz a System.Type metaosztály számos metódust ad Ezek segítségével az egyes osztályok minden elemére vonatkozóan rendkívül részletes információk kaphatók, felderíthető az osztályok őstípusa, meghívhatók az egyes konstruktorok és metódusok... • Az attribútumok felderítése a System.Type, a System.Attribute és a System.Reflection.CustomAttributeData osztályok metódusaival egyaránt lehetséges A System.Type osztály konkrét objektumok elemeire vonatkozó reflexiós metódusai között vannak attribútumokra vonatkozó általános metódusok is. A System.Attribute osztály statikus metódusokat biztosít az egyedi attribútumok lekérdezéséhez. A System.Reflection.CustomAttributeData osztály tulajdonságai és GetCustomAttributes() metódusa segítségével úgy is vizsgálhatók az egyedi attribútumok, hogy eközben nem jön létre belőlük új példány. Ez egy kevésbé kényelmesen használható, de nagy biztonsági kockázatú programoknál fontos lehetőség, hiszen az attribútumok konstruktorai idegen kódot tartalmazhatnak. OE-NIK HP

  18. Feladat • Készítsünk attribútumosztályt, amellyel egy másik osztályhoz, illetve annak bármely metódusához és tulajdonságához megadhatjuk az utolsó módosítás dátumát, idejét és leírását! • Az attribútum-osztályt rakjuk egy külön DLL-be • A DLL tartalmazzon egy demonstrációs osztályt, amelybe helyezzünk el egy egyszerű összeadó és kiíró eljárást, valamint egy statikus és egy nem-statikus adattagot is! Használjuk az attribútumokat ezen az osztályon • Reflexió segítségével kérdezzünk le információkat ezen a DLL-en Ötletek: • Az attribútumnál az ős a System.Attribute osztály legyen • Az új attribútum felhasználási lehetőségeit (például azt, hogy csak osztályokhoz, metódusokhoz és tulajdonságokhoz legyen illeszthető) az AttributeUsage attribútummal határozzuk meg • A szükséges egyéb információkat (dátum/idő, leírás) a konstruktorban vegyük át OE-NIK HP

  19. Otthoni feladat Készítsünk egy komplex számok kezelését lehetővé tévő osztályt, melynek tagjainál az előző feladatban létrehozott attribútum segítségével adjuk meg az utolsó módosítás dátumát és leírását! Ötletek: • A valós és imaginárius részt tároljuk külön-külön mezőben • Az osztály biztosítson saját összeadási és kivonási műveletet • A teszteléshez most is érdemes külön programot készíteni (ennek segítségével a megadott attribútumok is vizsgálhatók lesznek) OE-NIK HP

  20. Új attribútumunk használatban Megoldás (2) Complex.cs OE-NIK HP

  21. Otthoni feladat Készítsünk programot, amely megvizsgálja az előző feladatban elkészített, saját attribútumokkal megjelölt osztályt (a forráskód felhasználása nélkül), majd megjeleníti az egyes tagok utolsó módosítására vonatkozó adatokat! Ötletek: • Az egyszerűség kedvéért konzolos alkalmazást készítsünk • Külön írjuk ki az osztály, illetve az egyes tagok utolsó módosításaira vonatkozó adatokat (példa az alábbi képernyőfotón) OE-NIK HP

  22. Irodalomjegyzék (alapismeretek) • C. Nagel, B. Evjen, J. Glynn, M. Skinner, K. Watson, A. Jones:Professional C# 2005 Kiadó: Wiley Publishing, Inc., 2006ISBN: 978-0-7645-7534-1Web: http://www.wiley.com/, http://www.wrox.com/Nyelv: angolTerjedelem: 1540 oldal Reflexió: 17–19. o.Reflexió és attribútumok: 305–325. o. • Microsoft Corp., Visual Studio Developer Center Reflexió és attribútumok: http://msdn2.microsoft.com/en-us/library/cxz4wk15(VS.80).aspx OE-NIK HP

  23. Irodalomjegyzék (magasszintű ismeretek) • Albert I., Balássy Gy., Charaf H., Erdélyi T., Horváth Á., Levendovszky T., Péteri Sz., Rajacsics T.: A .NET Framework és programozása Kiadó: Szak Kiadó, 2004ISBN: 963-9131-62-8Web: http://www.szak.hu/Nyelv: magyarTerjedelem: 868 oldal Reflexió: 95–110. o.Attribútumok: 544–552. o. • J. Richter: CLR via C#, Second Edition Kiadó: Microsoft Press, 2006ISBN: 978-0-7356-2163-3Web: http://www.wintellect.com/Nyelv: angolTerjedelem: 736 oldal Reflexió és attribútumok: 387–405. o. OE-NIK HP

  24. Források • Miklós Árpád prezentációja OE-NIK HP

  25. OE-NIK HP

  26. OE-NIK HP

More Related