.NET Framework Essentials - Diuf

Werbung
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
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
Herunterladen