Folie 1 Seminar: Komponentenorientierte Softwareentwicklung und Hypermedia Sebastian Heybach Daniel Böhner Folie 2 Übersicht Entstehung von.net CLR & MSIL XML und SOAP als Transportkontrolle JIT-Kompilation Assemblies Die.NET-Klassenbibliothek Remoting Aussichten für die Zukunft 1
Folie 3 Entstehung von.net Ursprünglichen Entwicklungsnamen: COM 2.0 NGWS (Next Generation Windows Services) IT-Welt strebt nach Komfortabilität und Standardisierung Beispiel Windows: Verwaltung von Treibern Maus- Druckerunterstützung Ähnlich bei.net Zusammenfassung vieler Funktionen Folie 4 Entstehung von.net Reaktion auf eine veränderte Hardwarewelt, kleinere leistungsfähigere Hardware PDAs Handhelds eingebettete Systeme (Videorecorder etc.) Smartphones Zunehmende Vernetzung Applikationen arbeiten verteilt nicht monolithisch auf einem Rich Client Server stellt Komponenten bereit, Thin Clients bedienen sich 2
Folie 5 Entstehung von.net Neue Vermarktung von Software Kein Verkauf als Einzelprodukt Zugriff auf einzelne (entfernte) Komponenten, Abrechnung nach Gebrauch Dauer Umfang Nutzungsfrequenz Abonnement Stichwort Outsourcing von Funktionalität TCO (Total Cost of Ownership) senken Software kostengünstiger und besser wartbar Folie 6 Entstehung von.net Breiter werdende Hardwarelandschaft erfordert einheitliche Programmierschnittstelle Steigende Komplexität vorhandener Microsoft-Lösungen wie Win32API, COM oder ASP Komplexität API DDE COM OLE Automation OCX ActiveX DCOM COM+.NET 1990 1993 2000 Zeit 3
Folie 7 Entstehung von.net Sun vertritt die Strategie der sprachlichen Monokultur: Alle sollen mit Java programmieren keine Interoperabilitätsprobleme Strategie nicht durchsetzbar C++ und VB häufigst genutzten Programmiersprachen Microsoft erkennt Pluralität des Sprachmarktes an Jede Programmiersprache hat ihre Vor- und Nachteile Problemabhängige Eignung Forderung an.net Plattformunabhängigkeit Sprachunabhängigkeit Folie 8 CLR & MSIL Hochsprache: Abstraktion von der zugrunde liegenden Maschinensprache Compiler übernimmt Umwandlung Zwischenschaltung einer Virtual Machine: Compiler erstellt in Maschinen-C. der VM um Anschließend Umwandlung in Maschinencode der Hardware Bei.NET: Bildung einer Runtime (Common Language Runtime): Stellt Dienste (Speicherverwaltung, Funktionsbibliotheken etc.) Common : versteht sämtlicher 4
Folie 9 CLR & MSIL Durch Kompilation von Quellcode in entsteht MSIL- (Microsoft Intermediate Language), kurz IL Im IL- Metadaten über sich selbst und zum Ablauf benötigte Komponenten gespeichert im Manifest [Beispiel 1 Hello World in C#, VB.NET und die MSIL-s] CLR wandelt Zwischencode in prozessorspezifischen (Native ) CLR kann nicht zwischen unterscheiden Sprachintegration Folie 10 XML und SOAP als Transportkontrolle Kommunikation stark entkoppelter Systeme immer mehr via XML als Datenformat SOAP als Träger für entfernte Methodenaufrufe definiert: Endpunkt Methodenname Parameter Übersetzung des Resultats in XML SOAP als kleinster gemeinsamer Nenner bei dieser Kommunikation 5
Folie 11 Plattformübergreifende Kommunikation erfordert neben einheitlichem Transportformat ein einheitliches Typsystem Bisher nicht der Fall String in C/C++: Abschluß mit 0-Byte String in Delphi: vorangestelltes Längenbyte Typsystem primitive Typen: Ganzzahlen, Wahrheitswerte etc. komplexe Typen: Strukturen, Felder, Klassen etc. Folie 12 Verwirklichung mit dem (Common Type System) Keine.NET-Sprache bringt ihr eigenes Typsystem mit Sie implementieren das, bzw. Untermenge daraus, das CLS (Common Language Specification) Verschiedene Namen der CLS-Typen in den In IL gleiche Bezeichnung [Beispiel 2 Typisierung in IL] 6
Folie 13 ermöglicht sprachübergreifende Nutzung von Objekten anderer Sogar sprachübergreifende Vererbung ist möglich [Beispiel 3 Vererbung zwischen ] Folie 14.NET ist ohne Einschränkung objektorientiert Datentypen (auch primitive) erben von System.Object Referenztypen Werttypen performanter, da keine Dereferenzierung Unterscheidung in.net zwischen Wert- und Referenztypen Werttypen erben von System.ValueType und damit nur indirekt von System.Object z. B. Primtivtypen, Strukturen und Enumerations Gesonderte Behandlung durch die CLR Ablage auf dem Stack oder innerhalb von Referenztypen auf dem Heap 7
Folie 15 struct Artikel { int Nummer; float Preis; } class Kunde { int Nummer; Artikel letzterartikel; }... int j; j = 2004; Artikel a; a.nummer = 999; a.float = 13.5; Kunde k; k.nummer = 43; k.letzterartikel.nummer = 998; k.letzterartikel.preis = 18.99; j a k Stack Heap 2004 999 13.5 43 998 18.99 Folie 16 Keine Einschränkung für Werttypen hinsichtlich objektorientierter Behandlung Console.WriteLine(1.41421356.ToString()); int i; i. 8
Folie 17 Erzwingung der Behandlung von Werttypen als Referenztypen Boxing Vergleichbar mit Java-Wrapperklassen Folie 18 Stack Heap int i = 77; object o; o = i; 77 77 9
Folie 19 In C/C++ Funktionszeiger nicht kontrollierbar, ob wirklich Verweis auf richtige Funktion Lösung in.net mit typisierten Funktionszeigern (Delegates) Kontrolle über richtige Parameter und Rückgabe [Beispiel 4 Delegates] Folie 20 Mehrfachzuweisung an Delegate-Variable möglich delegate void OnClickHandler(object eventsource); OnClickHandler clickevent; void button1_onclick(object eventsource) {...} void textbox1_onclick(object eventsource) {...}... clickevent += new OnClickHandler(button1_OnClick); clickevent += new OnClickHandler(textbox1_OnClick); clickevent(this); 10
Folie 21 Übersicht Entstehung von.net CLR & MSIL XML und SOAP als Transportkontrolle JIT-Kompilation Assemblies Die.NET-Klassenbibliothek Remoting Aussichten für die Zukunft Folie 22 JIT-Kompilation Übersetzung eines Hochsprachenprogramms in Maschinencode auf dem System des Anwenders Vorteil: optimierung für jede Zielplattform Just in Time-Kompilation: PreJIT: Kompilation bei der Installation JIT: Bei Aufruf (Standard in.net) Option EconoJIT: schnellstmöglich, keine optimierung Kaum Verzögerung durch Bedarfskompilation von Methoden Höhere Sicherheit, bei jeder Kompilation Prüfung des Benutzers und der benötigten Komponenten (Managed ) 11
Folie 23 JIT-Kompilation C#- Quellcode VB.NET- Quellcode Anderer Quellcode C#- Compiler VB.NET- Compiler Anderer Compiler Entwicklung MSIL JIT-Compiler Laufzeit Ausführbarer Folie 24 Assemblies Assemblies: Ergebnis der Kompilierung eines Projekts evtl. mit mehreren Quelldateien ergibt eine ausführbare Datei (Assembly), dll oder exe dll = exe ohne Einstiegspunkt, dll benötigt exe als Host Bisher: COM stellt Funktionen global bereit dll-hölle durch COM-Prinzip zentral verwaltete Metadaten in der Registry neue COM-Komponenten können alte überschreiben Versionskonflikte, Beeinträchtigung anderer Anwendungen Undurchschaubarkeit 12
Folie 25 Assemblies Rückkehr zum C-Prinzip, benötigte dll-datei (Assembly in.net) liegt im selben Verzeichnis wie Programm Weiterhin globale Komponenten im GAC (Global Assembly Cache) Im GAC mehrere Versionen einer Assembly möglich Suchreihenfolge der.net-clr nach Assemblies eigenes Verzeichnis GAC (Shared Assemblies) Assemblies im eigenen Verzeichnis = Private Assemblies für andere Anwendungen nicht sichtbar Wegfall der globalen Registrierung Redundanz, aber größere Sicherheit & Stabilität Folie 26 Assemblies Wie werden Assemblies vor Namenskonflikten und Sabotage geschützt? Normaler Verweis: nur durch Dateiname ohne Erweiterung Lösung: Strong Names Dateiname, Version, Schlüssel (& Kulturinformation) Ablage des Schlüssels der benutzten Assembly im eigenen Manifest Public-Key-Verfahren Überprüfung der Authentizität beim Laden des Programms.assembly extern mscorlib {.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ).ver 1:0:5000:0 } //.z\v.4.. 13
Folie 27 Die.NET-Klassenbibliothek Auch FCL (Framework Class Library) oder BCL (Base Class Library) Im.NET Framework enthalten Version 1.1: 2303 öffentliche Klassen Version 2.0: 3913 öffentliche Klassen (noch nicht veröffentlicht) Einige der Klassen gemäß Standard 335 oder CLI (Common Language Infrastructure) der ECMA (European Association for Standardizing Information and Communication Systems) Allen stehen diese objektorientierten Basisklassendienste in gleicher Weise zur Verfügung Ersetzung der einzelnen Standardbibliotheken durch eine einzige Folie 28 Die.NET-Klassenbibliothek FCL verteilt auf mehrere Shared Assemblies (im GAC) FCL bietet Funktionen z. B. für Zugriff auf Dateisystem Anzeige von Fenstern Druck Remoting Serialisierung Grafik Datenbankzugriff FCL stellt Dienste zur Verfügung ähnlich wie die Java-Klassenbibliothek 14
Folie 29 Remoting Für Anwendungen die über mehrere Rechner verteilt sind Im Gegensatz zu WebServices eher für ein lokales Netz WebServices benötigen einen WebServer und sind für breite Nutzerschicht über das Internet Remoting leichtgewichtiger, jeder Rechner auf dem Server- Anwendung läuft, kann als Host dienen einfache Intranet-Technologie Nachrichtenaustausch in serialisierter Form (bestimmt durch Formatter) über Channels [Beispiel 5 Remoting] Folie 30 Für Microsoft sprachliche Pluralität wichtig Viele Einige wichtige werden hier weiter erläutert 15
Folie 31 C# gehört zur C/C++ Familie viele Eigenschaften von Java geerbt Neuentwicklung und keine Weiterentwicklung C++, da C++ zu komplex geworden und.net-sicherheitsund Stabilitätskonzept ausgehebelt würden Standard.NET-Sprache.NET Framework in C# entwickelt Folie 32 Visual Basic.NET Noch viele VB6-Programmierer, daher entstand VB.NET Diskussion, ob Standardsprache, aber Ruf von VB Unprofessionalität Kompatibel zu VB6 (Wizard für Portierung), einige Konstrukte nicht, oder sind nicht mehr.net-zeitgemäß Ersetzung der Standardbibliotheken durch die FCL Im Gegensatz zu VB6 komplett objektorientiert, mit Features wie Polymorphie, Überladen und Vererbung 16
Folie 33 Visual Basic.NET VB.NET Neuentwicklung mit Syntax-Ähnlichkeit zu VB6 VB.NET soll RAD-Sprache werden (Rapid Application Development) Automatisierung von wiederkehrenden, zeitaufwändigen Teilaufgaben Folie 34 J# Ursprünglich Java als Standardsprache für.net geplant Rechtsstreit mit Sun Verbot für Java-Implementationen in.net C# wurde zur Standardsprache Beilegung des Streites Oktober 2001 Microsoft Java-Implementation J# Microsoft-Strategie Entwickler zum Wechsel zu bringen JUMP to.net (Java User Migration Path to Microsoft.NET) 17
Folie 35 J# Keine Erzeugung von Java Byte sondern MSIL Voll kompatibel bis auf RMI (Remote Method Invocation) JNI (Java Native Interface) Applets System.Console.WriteLine("FCL oder JCL"); oder System.out.println("FCL oder JCL"); [Beispiel 6 Kompatibilität J# Java] Folie 36 VC++ 7.0 Anders als alle anderen Produziert standardmäßig prozessorabhängigen 100% kompatibel zu VC++ 6.0 Verbesserte MFC Durch Managed Extensions Integration in.net Auslaufendes Modell C# Kernsprache Anwendung in systemnahen, performanceorientierten Programmierungen für Gerätetreiber und High-Speed-Algorithmen Unmanaged- durch Nichtbenutzung der FCL 18
Folie 37 Andere Sprachen JScript.NET von Microsoft zur Portierung von JScript-Seiten Delphi for.net von Borland Eiffel von ISE Inc. COBOL von Fujitsu Software Corporation Oberon von der ETH Zürich Erleichterung der Sprachwahl durch die FCL Basisdienste in allen gleich Folie 38 C# Quellcode VB.NET Quellcode Anderer.NET Quellcode C++ Quellcode andere nicht.net-fähige Sprache C# Compiler VB.NET Compiler Compiler VC++ Compiler 7.0 Compiler Managed Managed Managed Managed Unmanaged Assemby in IL- (Managed ) Assemby in IL- (Managed ) Assemby in IL- (Managed ) Assemby in IL- (Managed ) JIT Native Native Native Native Native Native Betriebssystem 19
Folie 39 Aussichten für die Zukunft Lauffähigkeit unter jetzigen & zukünftigen Windows Versionen (wie 64 Bit) steht außer Frage Bisher keine echte Plattformunabhängigkeit Entscheidend wie Umgang mit Unix-Gemeinde, Gerüchte: Begrenztes Framework für Unix ASP.NET auf Apache-Servern Projekte für freie.net Implementationen z. B. www.go-mono.com Erst dann global echte Konkurrenz für Java C# liegt als Standard bei der ECMA vor C# wäre erste Sprache auf anderen Betriebssystemen C#: Weiterentwicklung professioneller Sprachkonstrukte wie Templates Folie 40 20