Komponentenbasierte Softwareentwicklung mit dem .NET Framework 1 1. 2. 3. 4. 5. Einführung Architektur .NET Assemblies Die .NET Klassenbibliothek Software/Tools Gliederung 2 • • – – – – – – Entwicklung wiederverwendbarer Komponenten die .Net Komponentenarchitektur soll COM ablösen der Entwickler hat bei der Wahl der Programmiersprache freie Hand Sprachinteroperabilität / Sprachunabhängigkeit Plattformunabhängigkeit (Betriebsystem / Hardware) verteilte Anwendungen (Internet) entwickelt von Microsoft und seit 2002 verfügbar das .Net Framework ist eine Plattform die versucht verschiedene Aspekte der Softwareentwicklung zu vereinfachen: 1. Einführung 3 2. Architektur haben Zugriff auf eine umfangreiche Klassenbibliothek • 4 werden von einer Laufzeitumgebung (CLR) ausgeführt und verwaltet • .NET Programme: • liegen in Form einer Zwischensprache (CIL/MSIL) + Metadaten vor • • • • 5 Zielsprache aller auf die .NET Plattform abzielenden Compiler Virtuelle Stackmaschine CIL-Code ist untrennbar mit einer detaillierten Beschreibung der benutzten Typen verbunden (Metadaten) Just-In-Time Kompilierung statt Interpretation: • eine Methode wird bei ihrem ersten Aufruf in die Maschinensprache der Plattform übersetzt • weitere Aufrufe führen dann zur Ausführung des erzeugten „Native Code Image“ Common Intermediate Language • • • • Das CTS bildet die Basis für die Zusammenarbeit verschiedener Sprachen 6 Festlegung der Menge von Datentypen die einer .NET Sprache zur Verfügung stehen jede .NET Sprache muss sich auf diese Menge beschränken Regeln zur Deklaration, Verwendung und Verwaltung von Typen objektorientiertes Modell Common Type System im verwalteten Heap angelegte Objekte automatische Bereinigung durch den Garbage Collector direkt oder indirekt von System.Object abgeleitet • • • • können nicht direkt im Heap angelegt werden Methodenparameter, lokale Variablen, Rückgabewerte oder Felder eines Objektes Lebenszeit durch den Auf- und Abbau des Aktivierungssatzes am Methodenstack bestimmt von System.ValueType abgeleitet Werttypen: • • • Objekt-Referenzen: Common Type System (2) 7 Common Type System (3) 8 „Verpacken“ einer Instanz eines Werttyps in ein Objekt auf dem Heap jeder Werttyp kann so als System.Object verwendet werden die Klassendefinition des Werttyps beschreibt den zugehörigen Referenztyp • 9 „Auspacken“ einer geschachtelten (boxed) Werttypinstanz Unboxing: • • • Boxing: Common Type System (4) Events: • Ereignissmechanismus auf Basis von Delegaten Properties: • Get- / Set-Methoden Klassen: • vollständig qualifizierter Name • genau ein Basistyp (mit Ausnahme von System.Object) • beliebig viele Interfaces • Sichtbarkeit (public, private) • Methoden, Felder (Fields), Eigenschaften (Properties), Ereignisse (Events) • verschachtelte Typen (nested Types) Common Type System (5) - Objektmodell 10 11 namespace Namespace { class Beispiel { public char Property { get { return '1'; } } protected delegate void MethodPointer(int i); event MethodPointer Event; } } Bsp: C# Common Type System (6) - Objektmodell Darstellung der vom Compiler erzeugten Metadaten mittels ILASM Syntax ... 12 .method public hidebysig specialname instance char get_Property() cil managed { ... } .class private auto ansi beforefieldinit Beispiel extends [mscorlib]System.Object { // Property .property instance char Property() { .get instance char Namespace.Beispiel::get_Property() } • Common Type System (7) - Objektmodell ... // Delegate .class auto ansi sealed nested family MethodPointer extends [mscorlib]System.MulticastDelegate { .method public hidebysig virtual instance void Invoke(int32 i) runtime managed {} } ... Common Type System (8) - Objektmodell 13 } // end of class Beispiel .method private hidebysig specialname instance void remove_Event(class Namespace.Beispiel/MethodPointer 'value') cil managed synchronized { ... } ... // Event .event Namespace.Beispiel/MethodPointer Event { .addon instance void Namespace.Beispiel::add_Event( class Namespace.Beispiel/MethodPointer) .removeon instance void Namespace.Beispiel::remove_Event( class Namespace.Beispiel/MethodPointer) } .method private hidebysig specialname instance void add_Event(class Namespace.Beispiel/MethodPointer 'value') cil managed synchronized { ... } Common Type System (9) - Objektmodell 14 • • • • Die CLS sichert die Sprachinteroperabilität 15 Typen einer .NET Sprache können von anderen .NET Sprachen verwendet und erweitert werden Ausnahmen werden sprachunabhängig behandelt Untermenge des CTS (40 Regeln) damit ein Typ sprachunabhängig benutzt werden kann müssen alle öffentlich zugänglichen Elemente den Regeln der CLS entsprechen Common Language Specification • • • • • • nicht mehr referenzierte Objekte werden vom Garbage Collector automatisch entfernt Klassen können Finalizer-Methoden definieren in denen Ressourcen freigegeben werden diese Methoden werden aber nicht zu einem definierten Zeitpunkt aufgerufen sondern asynchron in einem eigenen Thread (Finalizer-Thread) ausgeführt um Ressourcen möglichst frühzeitig und zu einem determinierten Zeitpunkt freizugeben wird der DisposeMechanismus verwendet Interface IDisposable: Dispose() nach der Rückkehr aus dieser Methode ist das Objekt noch vorhanden aber möglicherweise nicht mehr nutzbar Automatische Speicherverwaltung 16 17 logische Einheit der: • Auslieferung • Versionierung • Sicherheit • • .NET Komponenten ausführbare Applikationen oder Klassenbibliotheken (.Exe / .Dll) vollständig selbstbeschreibend durch Metadaten (keine Registry-Einträge oder zusätzliche Typbibliotheken nötig) • • 3. .NET Assemblies eine Assembly besteht aus einer oder mehreren Dateien (Module und Ressourcen) muß ein Manifest enthalten (Metadaten zur genaueren Beschreibung der Assembly) Ressourcen: • Ressourcedateien enthalten beliebige Daten Modul: • zum Windows-Binärformat PE (Portable Executable) kompatible Dateien • enthält Definitionen von Typen + CIL-Code • nur innerhalb einer Assembly verwendbar • • Auslieferung 18 Auslieferung (2) Single File Assembly Multi File Assembly • • 19 Auflistung aller zur Assembly gehörigen Dateien Export aller öffentlichen Typen und Verweis auf die implementierenden Module Auflistung aller referenzierten Assemblies weitere Informationen über die Assembly • • • • enthält alle Informationen die die CLR benötigt um Typdefinitionen zu finden und zu laden: • Manifest 20 einfacher Name • Name des Moduls das das Manifest beinhaltet Version • Major . Minor . Build . Revision • z.B. 1.0.2017.41890 Sprache (Culture) • sprach- und länderspezifische Informationen • z.B. „neutral“, „en-US“, „ge-AT“ • • • Versionierung 21 22 Bsp: „MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=B7 7A 5C 56 19 34 E0 89“ starker Name (eindeutige Identifikation der Assembly) • Name, Version, Sprache, öffentlicher Schlüssel • digitale Signatur • • öffentlicher Schlüssel • der Entwickler einer Assembly kann diese mit einer digitalen Signatur „unterschreiben“ • Verfahren der „Public Key Cryptography“ • geheimer Schlüssel • Sicherung der Herkunft • Versionierung (2) XCOPY Deployment / DEL Uninstallation: • eine Anwendung, die private Assemblies benutzt, kann einfach durch Kopieren ihrer Verzeichnissstruktur an einen beliebigen Ort installiert werden • keine Registrierung nötig • 23 private Assemblies: • gehören zur Applikation mit der sie ausgeliefert werden und werden nur von dieser verwendet • befinden sich im Anwendungsverzeichniss oder in einem Unterverzeichniss dessen • benötigen nur einen einfachen Namen und eine Version • Versionierung (3) – Private und öffentliche Assemblies GAC: • zentrales Repository das Assemblies in verschiedenen Versionen nebeneinander beinhalten kann • vorkompilierte Native Code Images werden ebenfalls im GAC gehalten (Native Image Cache) • einsehbar über das Verzeichniss: \WinNT\assembly • 24 öffentliche Assemblies (shared assemblies): • können von mehreren Anwendungen verwendet werden • benötigen starken Namen • Installation im Global Assembly Cache (GAC) • Versionierung (4) – Private und öffentliche Assemblies Base Class Library: • von allen .NET Sprachen verwendbar • Programmierschnittstelle des .NET Frameworks • Kapselung der Windows-API (ähnlich MFC) • Hierarchie von Namensräumen mit System als Wurzel einige Bereiche: • System.Threading • System.Net • System.Reflection • System.Windows.Forms • System.XML usw. • • 4. Die Klassenbibliothek 25 enthalten im System.Data Namespace • • Weiterentwicklung von ADO (ActiveX Data Objects) Menge von Klassen zur Manipulation von Daten unabhängig von der Art und dem Ort der Datenquelle z.B. • Zugriff auf DB mittels verschiedener SQL Dialekte • andere Datenquellen • • ADO.NET 26 27 Namespace: System.Web • • • Weiterentwicklung der Active Server Pages Technologie zur dynamischen Zusammenstellung von Webseiten anstelle von Skriptsprachen in ASP stehen in ASP.NET beliebige .NET Sprachen zur Verfügung (damit auch die .NET Klassenbibliothek) für die Ausgabe im Browser werden Web Forms verwendet • • ASP.NET 28 System.Web.Services • • • • verteilte Dienste die unabhängig von Betriebssystem, Programmiersprache und Übertragungsprotokoll aufgerufen werden können benutzen ein XML-basiertes Protokoll SOAP (simple object access protocoll) wird dabei für RPC Aufrufe verwendet Methodenaufrufe und Rückgaben werden als XMLDokumente übertragen (z.B. über HTTP) • Web Services .Net Framework + SDK (v1.1): • C#-Compiler (csc.exe) • IL Dissassembler (ildasm.exe) • IL Assembler (ilasm.exe) • Framework SDK Dokumentation .NET Sprachen (über 40) • MS Visual Studio .NET • C#, MC++, Visual Basic.NET, Jscript.NET • Java (J#) • Perl, COBOL, Eiffel#, Haskell, • Smalltalk, Fortran .... • • 5. Software/Tools 29 Mono • Open Source Implementation der .Net Platform für Unix/Linux • http://www.mono-project.com Rotor • Shared Source Implementation von Microsoft • FreeBSD, Mac OS X, Windows SharpDevelop • Open Source Entwicklungsumgebung für .Net • http://www.icsharpcode.net/ • • • 30 • • • • 31 .Net Framework SDK Dokumentation Andrew Troelsen: C# and the .Net Platform, Apress, 2001 Richard Grimes: Programming with Managed Extensions for Microsoft Visual C++.Net, Microsoft Press, 2003 Wolfgang Beer, Dietrich Birngruber, Hanspeter Mössenböck, Albrecht Wöß: Die .Net-Technologie, dpunkt.verlag, 2003 Literatur