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