halad programoz s n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Haladó Programozás PowerPoint Presentation
Download Presentation
Haladó Programozás

Loading in 2 Seconds...

play fullscreen
1 / 26

Haladó Programozás - PowerPoint PPT Presentation


  • 77 Views
  • Uploaded on

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ó.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Haladó Programozás' - kaipo


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
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

OE-NIK HP

halad programoz s1

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

reflexi
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

halad programoz s2

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

attrib tumok
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

p lda attrib tumok haszn lat ra

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

halad programoz s3

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

dynamic link library shared object
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

a ford t si folyamat
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

static linking
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

dynamic linking
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

dll el r se a net keretrendszerben
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

dll k sz t se
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

halad programoz s4

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

1 l p s egyedi attrib tum l trehoz sa

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

2 l p s tagok megjel l se attrib tumokkal
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

3 l p s elemz s reflexi seg ts g vel
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

feladat
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

otthoni feladat
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

otthoni feladat1
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

irodalomjegyz k alapismeretek
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

irodalomjegyz k magasszint ismeretek
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

forr sok
Források
  • Miklós Árpád prezentációja

OE-NIK HP