Grundlagen des Microsoft .NET Frameworks Master Seminar Advanced Software Engineering Topics Patric Zbinden 1. Mai 2003 Übersicht (1) (2) (3) (4) Die .NET Stategie Common Language Runtime (CLR) Programming in .NET (C#, VB.NET) .NET Framework Klassenbibliothek (1) Datentechnik (ADO.NET) (2) Web Forms (ASP.NET) (3) Weitere Themen (5) Fazit .NET Strategie Was ist .NET ► Framework für Software Entwicklung ► Interface zu Windows services und API ► Produktgruppen Entwicklungstools (Programmiersprachen, Visual Studio.NET, .NET Framework SDK) Spezialisierte Server (SQL, Exchange, BizTalk) WebServices Geräte (Windows CE, PocketPC) .NET Strategie ► Verteiltes Rechnen (XML Web Services) Remoting Architektur basierend auf offene Internet Standards (HTTP, XML, SOAP) ► Komponenten Infrastruktur COM war zu komplex ► Enterprise services ► Web Technologie ► Einfaces Deployment, Zuverlässigkeit, Sicherheit, … .NET Enterprise Servers ► ► ► ► ► ► ► ► ► ► Microsoft Application Center 2000 to deploy and manage highly available and scalable Web applications. Microsoft BizTalk Server 2002 to build XML-based business processes across applications and organizations. Microsoft Commerce Server 2002 for quickly building scalable e-commerce solutions. Microsoft Content Management Server 2001 to manage content for dynamic ebusiness Web sites. Microsoft Exchange Server 2000 to enable messaging and collaboration anytime, anywhere. Microsoft Host Integration Server 2000 for bridging to data and applications on mainframe legacy systems. Microsoft Internet Security and Acceleration Server 2000 for SSL-secured, fast Internet connectivity. Microsoft Mobile Information 2001 Server to enable application support by mobile devices like cell phones. Microsoft SharePoint™ Portal Server 2001 to find, share, and publish business information. Microsoft SQL Server™ 2000 to store, retrieve, and analyze structured XML data. Component Infrastructure ► Vor COM existierte kein einfacher Weg um Bibliotheken ohne Source Code zu integrieren. ► COM Vorteil: Sprachunabhängig, Internet tauglich (DCOM) Nachteile: ► Kompliziert (COM identity, lifetime, binary layout rules…) ► Keine Sprachintegration (keine Vererbung, keine Exceptions, …) Common Language Runtime (CLR) ► Wie: Java Virtual Machine ► Virtuelle Maschine für Intermediate Language IL Code. ► Aufgaben Ausführung von Code Typenkontrolle Sicherheitsüberprüfungen Garbage collection … Ausführbare Dateien ► Datei-Endungen: EXE, DLL ► Windows Portable Executable (PE) Standard CLR Ausführung ► Kein Interpreter! ► Verschiedene Compiler für die Erzeugung von Maschinencode Global Assembly Cache (GAC) Just-In-Time (JIT) Compiler ► Vergleich mit der JVM: Interpreter Erweiterungen: HotSpot Compiler JVM vs. CLR ► CLR Ausgerichtet für verschiedene Programmiersprachen Im Moment für Windows-Systeme (Mono Projekt Linux) ► JVM Nur für Java Erhältlich auf den meisten Plattformen Common Type System (CTS) ► Interoperabilität Typen ► Zwei Kategorien Referenz-Typen Werte-Typen erfordert gemeinsame Referenz- vs. Werte-Typen ► Interne Behandlung der CLR Managed Heap Managed Heap Mein Objekt Mein Wert Referenz Stack Stack Referenz- vs. Werte-Typen ► Konsequenzen für Programmierer Zuweisung: a = b Gleichheit: a == b Initialisierung Werte-Typen ► Unterkategorien Basis-Typen („build-in types“, „primitive types“) Werden von der CLR implementiert Benutzerdefinierte Wertetypen In C# mit dem Schlüsselwort struct (anstatt mit class) erzeugte Typen. Aufzählungstypen In C# mit dem Schlüsselwort enum erzeugt. Basis-Typen ► ► ► ► ► ► ► ► ► ► ► ► ► Boolean (true oder false) Byte (0 .. 255) Char (Unicode Zeichen) DateTime (Zeit- und Datumswert) Decimal (28 signifikante Dezimalstellen) Double (64-Bit Fliesskomma Zahl) GUID (128-Bit) Int16 (16-Bit Zahl mit Vorzeichen) Int32 (32-Bit Zahl mit Vorzeichen) Int64 (64-Bit Zahl mit Vorzeichen) Sbyte (-128 .. 127) Single (32-Bit Fliesskomma Zahl) TimeSpan (Zeitspanne mit Vorzeichen) Referenz-Typen ► Unterkategorien Selbstbeschreibende Typen ►Array Typen ►Klassen Benutzerdefinierte Klassen Gekapselte Wertetypen (boxed classes) ►Delegates Zeiger-Typen (Pointer) Interface-Typen Boxing / Unboxing ► Boxing: Konvertierung von Wertetyp zu Referenztyp Beispiel int i = 20; object box = i; ► Unboxing: // Wertetyp // Referenztyp -> Boxing Umgekehrte Operation Beispiel int j = (int)box; // Unboxing ► Vergleich mit Java: Explizite Boxing Klassen Objektorientiere Konzepte ► Die CLR unterstützt OO Konzepte (wie Kapselung, Vererbung und Polymorphismus) Klassen Methoden Felder Statische Felder/Methoden Innere Klassen Interfaces u.s.w. Programmiersprachen ► C# ► Visual Basic.NET (auch: VB.NET) ► C++ ► Viele weitere Sprachen APL, COBOL, Delphi, Eiffel, Forth, Fortran, Haskel, J#, JScript.NET, Mercury, Mondrian, Oberon, Pascal, Perl, Python, RPG, Scheme, S# Viele sind aber noch in Beta-Phase C# ► Neue Programmiersprache ► Objekt-orientiert ► Nur einfache Vererbung (Mehrfache Vererbung nur über Interfaces) ► Designierter Nachfolger von C++. (Auch beeinflusst von Java) ► Ausgerichtet auf .NET Framework C# vs. Java ► Viele Gemeinsamkeiten aber auch Unterschiede Syntax Java C# super base final class sealed class extends : package namespace (kein Schlüsselwort notwendig) overrides (Methoden sind bereits virtuell, d.h. überschreibbar) virtual weitere… C# ► Aufzählungstypen Typen-Kontrolle public enum DayOfWeek { Sunday = 0, Monday = 1, Tuesday = 2, Wednesday = 3, Thursday = 4, Friday = 5, Saturday = 6 } C# - Funktionsparameter public static void SwitchValues(ref int a, ref int b) { int c = a; a = b; b = c; } public static int Main(string[] args) { int a = 10; int b = 20; SwitchValues(ref a, ref b); Console.WriteLine(a + " " + b); return 0; } Ausgabe: 20 10 C# - foreach Schleife public static int Main(string[] args) { int[] aInt = {1, 2, 2, 3, 5, 7}; foreach (int j in aInt) Console.WriteLine(j); return 0; } Ausgabe: 1 2 2 3 5 7 C# - Properties ► Verwendung wie Felder, aber funktioniert wie Methoden Beispiel: Anstelle von zwei Methoden getVisible(), setVisible(…) public bool Visible { get { return _bVisible; } set { if (_bVisible != value) { if (_bVisible) Hide(); else Show(); _bVisible = value; } } } C# - Indexers ► Zugriff auf Elemente eines Arrays: int[] a = {3, 4}; a[i] = 1; Console.Write(a[i]); // Ausgabe: 1 ► Indexer ermöglicht diesen Syntax auch für andere Klassen zu verwenden: string s = “Test“; Console.Write(s[0]); // Ausgabe: T C# - Indexers (2) ► Wie ein Property mit dem Namen „this“ und mit Argument(e) in eckigen Klammern. public virtual int this[int row, int col] { get { … } set { … } } C# - Operator overloading ► ► Bekannt in C++ In Java nicht vorhanden public struct Complex { public int real; public int imaginary; public Complex(int real, int imaginary) { this.real = real; this.imaginary = imaginary; } public static Complex operator +(Complex c1, Complex c2) { return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary); } } C# - Events / Delegates ► Delegate: Typensicherer Funktionszeiger public delegate void ClickHandler(int x, int y); public class Test { public event ClickHandler Click; public void Test() { this.Click += new ClickHandler(OnClick); } private void OnClick(int x, int y) { //... Event behandeln } } Visual Basic.NET ► Vollwertige Objekt-orientierte Programmiersprache ► Threading ► Windows Services ► Historische Überreste von DOS Zeiten wurden entfernt, Anpassungen für CTS Variant-Datentyp SET / LET / OPTION BASE / GOSUB / ON x GOTO / etc. ► Weitere Neuheiten (z.B. AndAlso, OrElse Operatoren) Visual Basic.NET (1) ► Nachteile: Umstellung für Visual Basic Programmierer ist gross. Auch für Einsteiger ist der Lernaufwand grösser. Viele neue Schlüsselwörter Portierung von VB6 Projekten nur sehr beschränkt möglich. .NET Klassenbibliothek ► Vorher: Win32 API, MFC, ATL, VB, … ► .NET Framework bietet OO-Bibliothek mit über viel Funktionalität verteilt in über 100 Namespaces .NET Klassenbibliothek (1) Namespace Beschreibung System Allgemeine Klassen, die häufig verwendet werden. System.CodeDom Zum Parsen von Source-Code Dokumenten. System.CodeDom.Compiler Klassen zum Erzeugen von Compiler System.Collections Klassen zum Erzeugen von Listen, Hashtables, Warteschlagen etc. System.ComponentModel Klassen, die für die Implementation von Laufzeit- und Designzeit-Verhalten von Komponenten. System.Configuration Zum Abspeichern und Laden von Konfigurationseinstellungen System.Data Die zentralen Klassen von ADO.NET System.Data.Odbc Zugriff auf Daten via ODBC System.Data.OleDb Zugriff auf Daten via OleDb System.Data.OracleClient Für Oracle optimierte ADO.NET Schicht System.Data.SqlClient Für Microsoft SQL Server optimierte ADO.NET Schicht .NET Klassenbibliothek (2) System.Diagnostics Erlaubt Interaktion mit Systemprozessen, Zugriff auf EventLogs und Perfomance Counters. System.DirectoryServices Ermöglicht den Zugriff auf ActiveDirectory System.Drawing GDI+ Grafikfunktionen System.Drawing.Drawing2D Bietet 2-dimensionale Vektorgrafik Funktionalitäten. System.Drawing.Printing Ermöglicht Zugriff zu Druck-Funktionalitäten. System.EnterpriseServices Bietet Grundstrukturen Unternehmenssoftware. System.Globalization Ermöglicht Implementation von Anwendungen für verschiedene Kulturen (Sprachen, Kalender, Währungen, Zahlenformate, String-Sortierordnung etc.) System.IO Klassen für synchrone und asynchrone Ein/Ausgabefunktionen System.Net Bietet einfache Schnittstellen zu gängigen Kommunikationsprotokollen. System.Net.Sockets Erlaubt Programmierung von Netzwerkanwendungen, die auf Windows Sockets aufbauen. System.Reflection Bietet Reflection-Funktionalität für .NET Sprachen .NET Klassenbibliothek (3) System.Runtime.InteropServices Bietet Zugang zu nicht .NET Bibliotheken, z.B. zu COM System.Runtime.Remoting Für die Erstellung von verteilten Anwendungen. System.Runtime.Serialization Bietet Unterstützung für die Serialisierung. System.Security .NET Sicherheitskonzept System.Security.Cryptography Ermöglicht die Verwendung von verschiedenen kryptographischen Diensten. System.ServiceProcess Erlaubt Windows Service Anwendungen zu entwickeln. System.Text Textfunktionalitäten, Codierungen (Unicode, UTF-8, …) System.Text.RegularExpression Reguläre Ausdrücke System.Threading Ermöglicht Multithreading-Anwendungen zu entwickeln. System.Web Grundklassen von ASP.NET System.Web.Services Ermöglicht die Erstellung von WebServices System.Web.UI ASP.NET WebForms System.Windows.Forms WinForms System.XML XML Parser ADO.NET ► ADO (Microsoft ActiveX Data Object) Windows Applikation Standardisiertes Modell für Datenzugriff ► ADO.NET Web Forms DataSet DB DB Provider XML DataSet B2B ADO.NET - Dataset ADO.NET - Designer ► DataSet Design basiert auf XML Schema ► Visual Studio.NET Import/Export von Datenbank Designer Web Forms (ASP.NET) ► Vor .NET: ASP (Active Server Pages) Skriptsprache (keine Typen, kein Kompilieren) Keine Trennung von Darstellung und Code ► Mit .NET „Visual Programming“ Einfache Integration anderer .NET Bibliotheken Objekt-Orientiert XML/XSL Web Forms - Server Controls ► Server Controls = Dynamische Komponenten, die auf dem Webserver laufen <form id="Form1" method="post" runat="server"> <asp:Button id="Button1" runat="server" Text="Button"/> </form> Web Forms – „Codebehind“ ► „Codebehind“-Technik HTML/XHTML erlaubt Trennung von ASPX Header <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="Test1.WebForm1" %> Codebehind Klasse ►wird kompiliert DLL im Unterverzeichnis /bin Web Forms – „Codebehind“ ► ASPX-Seite erbt Button1 von WebForm1 public class WebForm1 : System.Web.UI.Page { protected System.Web.UI.WebControls.Button Button1; private void Button1_Click(object sender, System.EventArgs e) { // Code } // anderer Code } Web Forms - ViewState ► Problem: Kontext! ► Ansatz Application-Kontext Session-Kontext ► Implementiert durch Cookie (oder falls Cookie abgeleht wurde mit SessionID in URL) ViewState-Kontext ► Problem: ► Implementiert ► Verschlüsselt durch verstecktes HTML Formularfeld Web Forms – User Controls ► Web User Control Wie gewöhnliches WebForm Beim Rendern wird kein HTML Header erzeugt z.B. für Navigationsleiste ► Custom Control Eigenes Server Control Eigene Events z.B. für spezielle Buttons Localization & Globalization ► Was ist Localization? Sprache der Benutzeroberfläche Datum & Zeit Formate, String Indexing, … ► Cultures Beispiele: ”en-US”, ”de-CH”, ”fr-CH” ► Ressourcen Ressourcen (.resx) Sprachabhängige Ressourcen (.de.resx) Kompilierte Ressourcen (.dll, de-CH.dll) Fallback-Prinzip Localization & Globalization ► Windows Form Design-Time Properties: Localizable, Language Windows Forms Resource Editor (Winres.exe) Mobile Programming ► Software für PDAs Mobiltelefone ► .NET Framework Version 1.1 SQL Server CE Deployment ► Auslieferung ► Vor von Software .NET EXE-Datei DLLs in Windows\System32 (Versionsprobleme) ActiveX DLLs registrieren (regsvr32.exe) Tools wie InstallShield ► Mit .NET EXE-Datei und abhängige DLLs in ein Verzeichnis kopieren Für komplexere Dinge wie Webapplikationen oder Windows Services Setups (MSI-Datei) generieren. Tools für .NET Entwickler ► Microsoft .NET Framework SDK Command-Line Tools Compiler Gratis [108 MB] http://www.microsoft.com/net/ ► Microsoft Visual Studio .NET verschiedene Editionen ► Alternativen Borland Delphi 7 Studio (nur für Delphi) Borland C# Builder (noch nicht fertig!) Fazit ► Neue Dimension von Windows Programmierung C++/MFC/COM… zu kompliziert Visual Basic 6 nicht OO ► Übergang zu .NET Radikale Änderungen Unterstützung für „unsafe“ Code, Einbindung von anderen Bibliotheken (z.B. COM) ► Neuer Komfort elegantes Konzept für Webapplikationen WebServices (Neues Konzept von Software) Fertig! ► Fragen? ► Diskussion