Grundlagen des Microsoft .NET Frameworks Master Seminar Advanced Software Engineering Topics Patric Zbinden 1. Mai 2003
Übersicht Die .NET Stategie Common Language Runtime (CLR) Programming in .NET (C#, VB.NET) .NET Framework Klassenbibliothek Datentechnik (ADO.NET) Web Forms (ASP.NET) Weitere Themen 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 e-business 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 JVM 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 erfordert gemeinsame Typen Zwei Kategorien Referenz-Typen Werte-Typen
Referenz- vs. Werte-Typen Interne Behandlung der CLR
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; // Wertetyp object box = i; // Referenztyp -> Boxing Unboxing: 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 http://www.oberon.ethz.ch/lightning/
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 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 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 Active-X Data Object) ADO.NET Windows Applikation ADO (Microsoft Active-X Data Object) Standardisiertes Modell für Datenzugriff ADO.NET DataSet Web Forms XML B2B DB DataSet DB Provider
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) Mit .NET 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 erlaubt Trennung von HTML/XHTML ASPX Header Codebehind Klasse wird kompiliert DLL im Unterverzeichnis /bin <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="Test1.WebForm1" %>
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 durch verstecktes HTML Formularfeld Verschlüsselt
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 .NET Framework Version 1.1 PDAs Mobiltelefone .NET Framework Version 1.1 SQL Server CE
Deployment Auslieferung von Software Vor .NET Mit .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 Übergang zu .NET 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