560 likes | 680 Views
Other Services. Public Web Services. XML. XML. Biz Tier Logic. Building Block Services. Smarter Clients. XML. XML. Internal Services. OS Services. XML. OS Services. HTML. XML. XML. Servers Data, Hosts. Smarter Devices. Biz Logic & Web Service.
E N D
Other Services Public Web Services XML XML Biz Tier Logic Building Block Services Smarter Clients XML XML Internal Services OSServices XML OS Services HTML XML XML Servers Data, Hosts SmarterDevices Biz Logic & Web Service Anwendungen der nächsten Generation Anwendungen werdenWebServices Standard Browsers Offene Internet Protokolle (HTTP, SMTP, XML, SOAP) Anwendungen rufenweltweit lose gekoppelteDienstleistung auf
Service FederationLose gekoppelte Dienstleistungen XML BusinessPartners .NETBuilding Block Services EDIFACT Open Standards: TCP/IP XML HTTP SMTPSOAP X12 Finance WebServiceProvider News Enterprise Applikationen B2B Website Order/Sales Dept. SQL ServerXML .NETEnterprise Server Knowledge Management Accounting BizTalkMessaging ExchangeWebStorage
.NET Building Block Services • Verteilte, XML-basierte Dienste • Arbeiten online oder offline (Intranet) Identity Notification, Messaging Personalization XML Storage Calendar Directory and Search Software Delivery
Open Internet Protocols Firewalls können für den Zugriff auf WebServices konfiguriert werden. WebServices Internal Corporate Services Your Sales Data Service Your Internal Billing Service Passport – Identity Service Directory and Search Service Microsoft Building Block Services Personalization Service Software Delivery Service Calendaring Service Schematized Storage Service Notification & Msg Service Geographic Mapping Service Web Services Built by 3rd Parties Greenwich Mean Time Service Credit Card Statement Service …
Data & XML Base Classes Web Service Web Service COMInterfaces Web Services UserInterface Common Language Runtime .NET Framework XML
Framework, Languages and Tools VB C++ C# JScript … Visual Studio.NET Common Language Specification Web Services User Interface Data and XML Base Class Library Common Language Runtime
Thread Support COM Marshaler Type Checker Exception Manager Security Engine Debug Engine IL to Native Compilers Code Manager Garbage Collector Common Language Runtime Class Loader
Typsystem Kontext Concurrency Transaktionen Loader Remoting Warum eine Runtime?Einheitliches Integrationsmodell Layer (VBRUNxx.DLL) (MSVCRT.DLL) Layer (VBRUNxx.DLL) (MSVCRT.DLL) Common Language Runtime (MSCOREE.DLL) (MSCORLIB.DLL) Microsoft Transaction Server (MTXEX.DLL) COM+ Runtime (OLE32.DLL) COM Runtime (OLE32.DLL)
Übersicht VB C# C++ ASM Code Compiler Compiler Compiler IL Code IL Code IL Code Common Language Runtime JIT Compiler Betriebssystem
BasicsManaged Code • Sämtlicher Code wird unter Aufsicht der Common Language Runtime ausgeführt • Runtime führt Sicherheitsüberprüfungen aus • Runtime übernimmt Speicherverwaltung und Fehlerbehandlung (à GC, Exceptions) • Runtime führt Versionsprüfungen aus • Dieser Code wird als Managed Code bezeichnet
BasicsMicrosoft Intermediate Language • Compiler erzeugen keinen native Code sondern eine prozessorunabhängige Zwischensprache • Sprachintegration erfolgt auf Codeebene • MSIL – Microsoft Intermediate Language • MSIL wird oft auch mit IL bezeichnet
BasicsCode wird kompiliert • IL-Code wird vor der Ausführung immer (!) durch Compiler in echten Maschinencode übersetzt • Unabhängigkeit von Hardwareplattformen • unter Windows CE bereits mit einemIL-Vorläufer im Einsatz
Klasse A (1) Methodenaufruf Methode 1 (IL) Klasse B Methode 2 (IL) Methode 1 (IL) Methode 1 (ASM) Methode 3 (IL) Methode 2 (IL) Methode 4 (IL) JIT Compiler (2) IL-Code durch native Code ersetzen BasicsCode wird kompiliert
BasicsImplikationen • Die IL unterscheidet sich von „reinen“ Assemblersprachen • komplexe Datentypen und Objekte sind fester Bestandteil • Konzepte wie Vererbung und Polymorphie werden von vornherein unterstützt
BasicsImplikationen • Sprachen werden gleichwertig, da alle Compiler MSIL-Code erzeugen • „eine C# Klasse kann von einer VB.NET Klasse abgeleitet sein“ • einheitliche Fehlerbehandlung • Compilerbau wird einfacher • kein eigenes Typsystem • keine eigene Standardbibliothek • Sprachen sind „per Definition“ interoperabel
BasicsCommon Type System • Das Typsystem wandert vom Compiler in die Runtime • Typen werden eindeutig • „ein String unter C# und ein String unter VB.NET sind identisch“ • Sprachen werden interoperabel, da sie das gleiche Typsystem benutzen • CTS – Common Type System
Common Type SystemDas Objektmodell Object Value Type Boolean Int64 Byte Enum SByte Char Single Type Currency TimeSpan Typen im Namespace System DateTime String TypedRef. Decimal UInt16 Double Array UInt32 Guid UInt64 Exception Int16 Void Int32 Delegate
Common Type SystemGleichheit und Identität von Objekten • Zwei Objekte sind gleich, wenn deren Inhalte gleich sind • Zwei Objekte sind identisch, wenn sie die gleiche Instanz referenzieren • Gleichheit definiert sich über die virtuelle Methode System.Object.Equals • identisch: System.Object.Equals = true • gleich: System.Object.Equals.Value = true
Bestandsaufnahme • Die Common Language Runtime ermöglicht unabhängig von Programmiersprachen eine durchgängig objekt- und komponentenorientierte Programmierung • .NET Sprachen sollten sich auf die Typen beschränken, die über das Common Type System definiert sind
Modul MSIL-Code für Typ A MSIL-Code für Typ B MSIL-Code für Typ C Metadaten für die Typen A, B und C Metadaten und ReflectionÜbersetzen von Sourcen Source Code Typ A {…} Compiler (C#, VB.NET, etc.) Typ B {…} Typ C {…}
Metadaten und Reflection • Ein Modul dient als Container für Typen • Ein Modul enthält • den IL-Code der Typen • Beschreibung der Typen • Die Beschreibung der Typen wird mit Metadaten bezeichnet • Jedes Modul enthält Metadaten • Compiler erstellt Metadaten „on the fly“
Metadaten und Reflection • Metadaten sind für alle Module auf die gleiche Art und Weise aufgebaut • Einheitliches Format !!! • Metadaten eines Moduls können zur Laufzeit ausgelesen und geändert werden • Diesen Vorgang nennt man Reflection • .NET Framework stellt entsprechende Klassen über den Namespace System.Reflection bereit
.NET Framework Windows API ASP VB Forms MFC & ATL Warum ein Framework?Einheitliches Programmiermodell
Base Class Library System.Web System.WinForms Services UI Design ComponentModel Description HtmlControls Discovery WebControls Protocols System.Drawing Caching Security Drawing2D Printing Configuration SessionState Imaging Text System.Data System.Xml ADO SQL XSLT Serialization Design SQLTypes XPath System Collections IO Security Runtime InteropServices Configuration Net ServiceProcess Remoting Diagnostics Reflection Text Serialization Globalization Resources Threading
C# using System; namespace HelloWorld { public class Class1 { public static void Main() { Console.WriteLine("Hello, World!"); } } } VB.NET Imports System Namespace HelloWorld Class Class1 Shared Sub Main() Console.WriteLine("Hello, World!") End Sub End Class End Namespace Hello, World! Alternativ: Module Module1 Sub Main() Console.WriteLine("Hello, World!") End Sub End Module
Hello, World: C# IL .namespace HelloWorld { .class public auto ansi Class1 extends [mscorlib]System.Object { .method public hidebysig static void Main() il managed { .entrypoint .maxstack 8 IL_0000: ldstr "Hello, World!" IL_0005: call void [mscorlib]System.Console::WriteLine(class System.String) IL_000a: ret } .method public hidebysig specialname rtspecialname instance void .ctor() il managed { .maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void [mscorlib]System.Object::.ctor() IL_0006: ret } } }
C# und VB.NET Gemeinsamkeiten • Namespaces • Enthalten Typdefinitionen und Namespaces • Typdefinitionen • Klassen, Strukturen, Interfaces, Delegates ... • Elemente von Typen • Konstanten, Felder, Methoden, Properties, Events, Operatoren, Konstruktoren, Destruktoren • Organisation der Dateien • Keine Header-Dateien, Programmcode ist “in-line” • Die Reihenfolge der Deklarationen ist ohne Bedeutung
Stabile und dauerhafte Software • Automatisches Speichermanagement • Keine Speicherlecks oder „wilde Pointer“ • Garbage Collection • C# und VB.NET kommen ohne Pointer aus • Eingebauter Typ: String • Benutzerdefinierte Referenztypen • Große Auswahl an Kollektionen • Referenz- und Ausgabeparameter (out , ref) • 99% der Pointer werden nicht mehr benötigt • C#: Dennoch sind Pointer über unsafe-Code verfügbar • Exceptions • Error Handling von Anfang an bedacht • Typsicherheit (type safety) • Keine uninitialisierten Variablen • Keine unsichere Casts • Versionsverwaltung • Wurde von Grund auf berücksichtigt
Alles ist wirklich ein Objekt • C#/VB.NET vereinen Klassen und „primitive types“ • Alles ist ein Objekt ohne die Performance-Probleme anderer Systeme Dim s as String, o as Object o = s • Einfach und erweiterbar • Man kann neue „primitive types“ erzeugen • Intuitiv in Syntax und Semantik • VB.NET: Variant entfällt • COM-Interop: • Transparenter Zugriff auf COM-Objekte • .NET-Objekte über COM nutzbar
int i = 123; string s = "Hello world"; 123 i "Hello world" s int j = i; string t = s; 123 j t Zwei Arten von Typen
123 i } o System.Int32 “Boxing” 123 } “Unboxing” 123 j Boxing und Unboxing • Jeder Datentyp kann als Objekt gespeichert oder übergeben werden int i = 123; object o = i; int j = (int)o;
Implementation Inheritance • Einfachvererbung (single inheritance) • Auch über Sprachgrenzen hinweg • Abstrakte Klassen, finale Klassen • Implementierung von beliebig vielen Interfaces • Elemente einer Klasse • Konstanten, Felder, Methoden, Konstruktoren, Destruktoren, Operatoren (C#) • Properties, Indexer (C#), Events (VB.NET) • Verschachtelte Typen • Statische Elemente • Virtuelle Methoden • VB.NET: Alle Methodenimmer virtuell • Zugriffsschutz • public, protected, internal, private public class Person { private int YOB; public int YearOfBirth { get { return YOB; }; set { YOB = value; }; } public int GetAgeToday() { return Today()-YearOfBirth; } }
Operator Overloading (C#) • Die meisten Operatoren können überladen werden • Arithmetische, Vergleichs-, Logik- und Bedingungsoperatoren • Allerdings nicht: Zuweisungsop., Spezialop. (sizeof, new, is, typeof) class Matrix { ... Matrix operator +(Matrix l, Matrix r) { Matrix e = new Matrix(); e = l mit r verknüpfen return e; } } ... Matrix a = new Matrix(...), b = new Matrix(...); Matrix c = a + b;
Public Interface Interface1 End Interface Public Sub M1() Public Property P1 As String Public Interface Interface2 End Interface Inherits Interface1 Public Sub M2() Public Property P2 As String Interface InheritanceInterface erbt von Interface
Property public class Button: Control { private string caption; public string Caption { get { return caption; } set { caption = value; Repaint(); } } } Button b = new Button(); string s = b.Caption; b.Caption = "OK";
Indexer (C#) public class ListBox: Control { private string[] items; public string this[int index]{ get { return items[index]; } set { items[index] = value; Repaint(); } } } ListBox listBox = new ListBox(); string s = listBox[0] listBox[0] = "hello"; listBox[1] = "world";
Strukturen • Zusammenschluss vonDaten und Code • Werttyp • Keine Vererbung • LeichtgewichtigerDatencontainer struct Point { private double m_x, m_y; public Point(double x, double y) { m_x = x; m_y = y; } public double x{ get {return m_x;} set {m_x = value;} } ... public static Point operator+(Point l, Point r) { return new Point(l.x+r.x, l.y+r.y); } public override string ToString() { return "(" + m_x + ", " + m_y + ")"; } }
Attribute public class OrderProcessor { [WebMethod] public void SubmitOrder(PurchaseOrder order) {...} } [XmlRoot("Order", Namespace="urn:acme.b2b-schema.v1")] public class PurchaseOrder { [XmlElement("shipTo")] public Address ShipTo; [XmlElement("billTo")] public Address BillTo; [XmlElement("comment")] public string Comment; [XmlElement("items")] public Item[] Items; [XmlAttribute("date")] public DateTime OrderDate; }
Ausnahmebehandlung Try auszuführende Anweisungen Catch e As COMException Fehlerbehandlung Catch e As Exception ... Catch When Err.Number = 5 ... Catch ... Finally Abschließende Behandlung, auch ohne Fehler End Try
Delegates 1:1 Delegate Empfänger MulticastDelegate 1:n Empfänger Empfänger n:1 Delegate Empfänger Delegate MulticastDelegate n:m Empfänger MulticastDelegate Empfänger
C# C# und VB.NET VB.NET
WebForms • Keine Scriptsprachen mehr! • Verwenden „echter“ Sprachen: VB.NET, C#, ... • Seite wird beim ersten Aufruf komplett auf dem Server kompiliert • Kompiliat wird beim Aufruf gerendert • Browser bekommen „reines“ HTML zu sehen • Seiten können serverseitigeUI-Controls verwenden • Diese Controls werden WebControls genannt
Web/Windows Form Controls VS.NET Designers VS.NET Class Generator Managed Provider myDataSet <xml>…</xml> DataSet-Command DataReader “<xml>…</xml>” Cust Order Item Command Connection XmlReader String Stream XmlText- Reader XmlNode- Reader XmlDocument TextReader ADO.NET Architektur
Assemblies • .NET Anwendungen bestehen aus Assemblies • Assembly = Komponente • Ein Assembly ist ein Container für Module • Sämliche Sicherheits- und Versionsüberprüfungen durch die CLR erfolgen auf der Basis von Assemblies !!!
Source Code (app1.vb) Typ A {…} Typ B {…} Typ C {…} Assembly (app1.dll) Modul MSIL-Code für Typ A MSIL-Code für Typ B MSIL-Code für Typ C Manifest Metadaten für die Typen A, B und C AssembliesÜbersetzen von Sourcen Compiler (C#, VB.NET, etc.)
Assemblies • Sobald ein Modul kompiliert ist, gehört es zu einem Assembly • Compiler erstellt Assembly „on the fly“ • .NET Framework stellt entsprechende Klassen über den Namespace System.Reflection.Emit bereit • Die im Modul vorhandenen Typen sind nur innerhalb des Assemblies bekannt
Assembly (app1.dll) Modul 2 (app3.dll) Modul 1 (app2.dll) MSIL-Code für Typ F MSIL-Code für Typ G MSIL-Code für Typ D MSIL-Code für Typ E Manifest Metadaten für F und G Metadaten für D und E AssembliesContainer für mehrere Module
AssembliesManifest • Jedes Assembly enthält genau ein Manifest • Das Manifest beschreibt das Assembly • Keine Headerdateien • Keine Typenbibliothek
AssembliesManifest • Das Manifest beinhaltet • Assembly-Identität = Name + Version + Ländercode • Liste der Module, aus denen das Assembly besteht • Referenzierte Assemblies • Exportierte Typen und Resourcen • Attribute