Haladó Programozás Reflexió OE-NIK HP.

Slides:



Advertisements
Hasonló előadás
C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)”
Advertisements

Osztály leszármaztatás
Krizsán Zoltán iit 1.1.  Aszinkron történésről értesítés egy vagy több objektum számára.  Delegátumok segítségével valósítja meg a C#.  event típus,
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
OE-NIK HP Haladó Programozás Windows Communication Foundation A szolgáltatás, a hoszt és az ügyfél elkészítése.
Programozás III KOLLEKCIÓK 2..
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Öröklődés 2..
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
© Kozsik Tamás JavaBeans Nagyon divatos technológia Nem tévesztendő össze az Enterprise Java Beans technológiával Programozási konvenciók gyűjteménye.
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Követelmények Bevezetés a Javába Első java program írása Dokumentációk
Tömbök ismétlés Osztályok Java-ban Garbage collection
Az objektum-orientált tervezési alapelvek kritikai vizsgálata
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 3. rész – Osztályok I.
WEB Technológiák Dr. Pance Miklós – Kolcza Gábor Miskolci Egyetem.
C# tagfüggvények.
JSP és JavaBean JavaServer Pages és Java Beans Fabók Zsolt Általános Informatikai Tanszék Miskolci Egyetem.
C# osztályok Krizsán Zoltán 1.0.
C# tagfüggvények.
Krizsán Zoltán iit 1.2.  Nem kell vizuális felületnek lennie.  Delegátumok segítségével valósíthatja meg a.NET. Krizsán Zoltán iit Delegátumok C#-ban2.
Entity framework Krizsán Zoltán
OE-NIK HP Haladó Programozás WCF kivételkezelés. OE-NIK HP Haladó Programozás Windows Communication Foundation A szolgáltatás, a hoszt és az ügyfél elkészítése.
Annotációk a Java 5 nyelvben Kozsik Tamás. Annotációk Módosítószavak bővítése A programszöveg elemeihez rendelhetők –Csomagokhoz, típusokhoz, metódusokhoz,
P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.
ARCHITECTArchitect AcademyFoundationsInsidersMCPtréningekvizsgákgyakorlatprojektek Novák István eEvangelist – „Dive deeper” Grepton Zrt. Technológiai vezető.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
J.Zs.Cs.: Vizuális programozás (c) 2010 Vizuális programozás Fájl- és állományrendszer kezelés Névtér: System.IO.
A PHP 5 újdonságai Az OOP terén. Miről lesz szó? Osztályok kezelése – Új direktívák – Konstruktor – Destruktor Interfészek Kivételkezelés.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
Java programozási nyelv Filekezelés
Java programozási nyelv Metódusok
Java programozási nyelv Adatbekérés konzolról
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
Programozás III KOLLEKCIÓK.
HTML ÉS PHP (Nagyon) rövid áttekintés. ADATBÁZISRENDSZEREK MŰKÖDÉSI SÉMÁJA Felh. interakció DB Connector MySQL ? A gyakorlaton:
Haladó Programozás Delegáltak, események OE-NIK HP 1.
DLL használata és készítése Feladat
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
Assembly/DLL Reflexió
„Designer-barát” játéklogika
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Adatkonverziók Erőforrások
Web programozás és haladó fejlesztési technikák – C#
Dependency Injection Tesztduplikátumok, Mock-ok, Fake-ek Feladat
Web programozás és haladó fejlesztési technikák
Thread és Task.
Függvénysablonok használata
Előadás másolata:

Haladó Programozás Reflexió OE-NIK HP

Reflexió A reflexió az a képesség, amellyel a program önmaga struktúráját és viselkedését futásidőben analizálni és alakítani tudja Magas szintű nyelv kell hozzá (Java, PHP, … C#) Különböző mértékű támogatás a nyelvekben C#: System.Reflection névtér C#-ban a leggyakoribb használati módja a futásidőben végrehajtott típusanalízis De lehetséges típusok futásidejű létrehozása is: System.Reflection.Emit A típusok futásidejű vizsgálatát a fordító által a szerelvényben elhelyezett leíró információ (metaadat) teszi lehetővé Szerelvény = assembly: .exe, .dll (egyszerűsítés) Szerelvény metaadatai: függőségek, benne található típusok stb. Típus metaadatai: általa implementált interfészek, ősosztályok; tagjai stb. Tag metaadatai: láthatóság; metódusok paraméterei; tulajdonságokat alkotó metódusok stb. Hátránya: NAGYON LASSÚ!!! OE-NIK HP

Metaadat Visual Studio Command Prompt / Ildasm.exe, Ctrl+M OE-NIK HP

Reflexiót kihasználó eszközök és technológiák ILSpy, Reflector, … .NET dll-ek, exék kódjának tanulmányozását engedik meg Intellisense, Properties és más IDE-szolgáltatások Több .NET technológia (szerializáció, .NET Remoting, WCF) Tesztek OE-NIK HP

Futásidejű típusanalízis - Assembly Assembly a = Assembly.GetExecutingAssembly(); Assembly a = Assembly.LoadFrom(„Path.To.Assembly”); Assembly a = Assembly.Load(bytes); Assembly a = type.Assembly; a.GetTypes() – típusok kinyerése a.EntryPoint – belépési pont (metódus, exék esetén) OE-NIK HP

Futásidejű típusanalízis - Type Type t = assembly.GetType(„Type.Name.In.Assembly”); Type t = typeof(int); Type t = typeof(T); Type t = obj.GetType(); Type t = Type.GetType(„Type.Name.In.Any.Assembly”); Ha nem az aktuálisan végrehajtódó szerelvényben vagy az mscorlib.dll-ben van, akkor ún. „assembly-qualified name” megadása szükséges t.FullName, t.AssemblyQualifiedName – nevek különféle formában t.BaseType, t.IsSubclassOf(anotherType), t.IsAssignableFrom(anotherType) – ős, utód vizsgálat typeName can be the type name qualified by its namespace or an assembly-qualified name that includes an assembly name specification. See AssemblyQualifiedName. If typeName includes the namespace but not the assembly name, this method searches only the calling object's assembly and Mscorlib.dll, in that order. If typeName is fully qualified with the partial or complete assembly name, this method searches in the specified assembly. If the assembly has a strong name, a complete assembly name is required. TopNamespace.SubNameSpace.ContainingClass+NestedClass, MyAssembly, Version=1.3.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089

Futásidejű típusanalízis – MethodInfo, PropertyInfo, FieldInfo PropertyInfo pi = t.GetProperty("PropName"); PropertyInfo[] pis = t.GetProperties(); FieldInfo fi = t.GetField("FieldName"); FieldInfo[] fis = t.GetFields(); MethodInfo mi = t.GetMethod("MethodName"); MethodInfo mis = t.GetMethods(); Általában átadható BindingFlags paraméter, amivel a keresés szűkíthető/konfigurálható PropertyInfo pi = t.GetProperty("PropName", BindingFlags.Static | BindingFlags.NonPublic) Nem publikus (privát) tagok is megkaphatók Ez (elsősorban) nem arra való, hogy kijátsszuk a láthatóságokat! OE-NIK HP

Reflektált kódelemek használata futásidőben A reflexióval elért típusok példányosíthatók, a metódusok, tulajdonságok, mezők használatba vehetők futásidőben Type listType = typeof(List<int>); MethodInfo addMethod = listType.GetMethod("Add"); PropertyInfo countProperty = listType.GetProperty("Count"); object listInstance = Activator.CreateInstance(listType); object methodResult = addMethod.Invoke(listInstance, new object[] { 8 }); // null object propertyResult = countProperty.GetValue(listInstance); // 1 OE-NIK HP

Feladat Készítsünk olyan osztályt, amely automatikus szerkesztő GUI-t képes készíteni tetszőleges típusú példány számára A szerkesztő felületet a beadott példány tulajdonságainak vizsgálatával készítjük el OE-NIK HP

Attribútumok A fordító által generált metaadat mellé saját metaadat is felvehető Szerelvény, típus vagy tagok esetében is System.Attribute osztály utódai Léteznek beépített attribútumtípusok különféle célokra, vagy saját Attribute utód is létrehozható Használata speciális formában történik Névtér, osztály, metódus, tulajdonság, mező stb. fölött – attribútumtól függően – [XXX], ha az Attribute utódosztály neve XXXAttribute [Obsolete("Do not use this method, use New() instead.")] static void OldMethod() { } static void NewMethod() { } static void Main(string[] args) { OldMethod(); //Warningot eredményez } Példa src: http://www.codeproject.com/Articles/2933/Attributes-in-C OE-NIK HP

Attribútumok CallerMemberName Ha a paraméter nem kap értéket, akkor a hívó neve kerül bele protected void OnPropertyChanged([CallerMemberName] string propertyName = null) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } class Settings : Bindable { private string setting1; public string Setting1 get { return setting1; } set { setting1 = value; OnPropertyChanged(); } } OE-NIK HP

Attribútumok Szerializáció (=adat tárolható formába alakítása, a példában bináris) [Serializable] class Settings { public string Setting1 { get; set; } public int Setting2 { get; set; } [NonSerialized] private int temp; } class Program static void Main(string[] args) Settings settings = new Settings(); //... BinaryFormatter formatter = new BinaryFormatter(); using (FileStream stream = new FileStream("settings.dat", FileMode.Create)) formatter.Serialize(stream, settings); } //mentett információ visszaolvasása: FileMode.Open, Deserialize() A példában bináris, de van még csomó más féle. OE-NIK HP

Saját attribútum Saját attribútum létrehozása Attribútum elérése reflexióval Az eddig említett módszerek is ezt használják [AttributeUsage(AttributeTargets.Property)] class HelpAttribute : Attribute { public string HelpURL { get; private set; } public HelpAttribute( string helpURL) this.HelpURL = helpURL; } [Help("http://path.to.my.help.for.setting1.html")] public string Setting1 { get; set; } //PropertyInfo propertyInfo = typeof(Settings).GetProperty("Setting1"); HelpAttribute helpAttribute = propertyInfo.GetCustomAttribute<HelpAttribute>(); Console.WriteLine(helpAttribute.HelpURL); OE-NIK HP

Feladat Egészítsük ki az előzőleg létrehozott GUI-szerkesztőt a következő funkcionalitással: Lehessen tetszőleges „barátságos” nevet megadni a tulajdonságoknak – a tulajdonság eredeti neve helyett ez legyen kiírva Lehessen megtiltani, hogy a tulajdonság számára létrejöjjön szerkesztő OE-NIK HP