Einführung in .NET

Inhalte:

Thematik
Die Programmiersprache C#  oder VB.NET ist eine der
Basissprachen für die Entwicklung von
.NET-Anwendungen.
Die Sprache integriert die neuen Konzepte und
Technologien und eröffnet damit neue Möglichkeiten. 

Für wen ?
Dieser Kurs richtet sich an Entwickler,
die noch wenig Erfahrung mit
Programmiersprachen haben.

Das sollten Sie mitbringen !
Programmier Kenntnisse in einer
höheren Programmiersprache.

Was bringt es Ihnen ?
Neben einer Einführung in C# und Visual Studio 2008  lernen sie auch .NET Technologien wie ADO.NET, Windows Forms,  und WebServices kennen.

Dauer 5 Tage

Der Kurs wird wunschgemäß in C# oder VB.NET gehalten

Seminare in C# oder in VB.NET

Einführung in .NET
Objektorientiert programmieren mit .NET
NET Framework Programmierung

Windows Forms Anwendungen
Vektor-orientierte Oberflächen mit WPF

Web Programmierung

Verteilte Anwendungen mit WCF

Andere Seminare
COM-Programmierung mit der ATL
OOP mit C++
Programmieren mit C
OOP mit Java

<<   Die Net Plattform

Was stellt uns das Framework zur Verfügung ?
Technologien und die Tools für skalierbare Anwendungen mit Fokus Intranet / Internet,
aber nicht nur.

Unterstützt werden plattformneutrale Technologien und Protokolle wie
SOAP = HTTP +  XML. Das .Net-Framework - mehr als eine Klassenbibliothek.

Die Common-Language-Runtime,
ihre Aufgaben : Garbage Collection, eingebautes Typsystem, dadurch
sprachübergreifend, einfache Installation, Versionierung vorhanden und
vor allem Security.

<<   Managed Code

"Hello World", unsere erste Console Anwendung mit dem Notepad erstellt.
In .Net gibt es keinen Code außerhalb von Klassen.

Bei mehreren tausend Klassen bedarf es einer gewissen Ordnung - der Namespace.
Ein Namespace verschafft uns Zugriff auf Namen, nicht auf Code.
"using" erspart Schreibarbeit.
Hat der Compiler Probleme damit, dann bitte voll qualifizieren. 

Wie wird der Code im Managed Execution Environment ausgeführt ? 
Code just in time oder komplett kompilieren mit Ngen ?
 
Wie wird das Programm kompiliert ?
Was bekommen wir ?  Ein Assembly, eine ausführbare Einheit.
Was enthält ein Assembly ? Code und viel Information dazu - die Metadaten.

Der "Missel" (MSIL) Code arbeitet wie eine Den können wir uns anschauen, dafür gibt es den Disassembler ILDASM.

<<   Das Visual Studio

Was bietet uns die IDE ? Eine einzige Oberfläche für alle Projekte. 
Innerhalb einer Solution sind Projekte in unterschiedlichen Programmiersprachen möglich.

Aussehen der IDE und ShortCuts der Tastaturprofile können angepasst werden.
Ein integrierter Internetbrowser ist vorhanden. Features wie die dynamische Hilfe,
der Objekt-Browser etc.

Welche Projekte können erstellt werden ?

Der Server Explorer ermöglicht  den Zugriff auf Server - Ressourcen wie EventLogs
und Services. Problemloser Zugriff auf den SQL Server, ein Umschalten zum 
SQL-Enterprise-Manager ist nicht mehr erforderlich.

Welche Möglichkeiten zum Debuggen stehen zur Verfügung ?

<<   Datentypen

CTS, ein gemeinsames Typsystem für alle Sprachen, die Basis für das 
Sprachübergreifende Programmieren.

Alle Typen in .Net  sind Objekte, auch einfache Typen wie short oder int.
Diese Objekte werden aber als Wert-Typen auf dem Stack und nicht auf dem
Heap angelegt.

Enums gehören ebenfalls dazu, sie können durch beliebige Typen implementiert werden, 
außer durch char. 

Namensgebung: Pascal und camelCasing, wo bleibt die wirklich sinnvolle 
ungarische Notation ?

<<   Bedingungen und Schleifen

Scope : Eine Variable in einem Block darf im umschließenden Eltern Bock 
nicht erneut definiert werden. 

Bedingte Anweisungen: "if" und "else"
.
"switch-case" vermeidet lange "else-if" Ketten. Als Konstanten sind die folgenden
Typen möglich :int, char, enum und string und implizit konvertierbare.
Es ist kein "Fall Through" erlaubt, dafür gibt es das "goto", aber bitte nur dafür !

Es gibt 4 Anweisungen für Schleifen:  " while", "do", "for" und "foreach".

Es gibt auch noch "break" und "continue"

<<   Arrays

Die Größe des Arrays ist nicht Bestandteil des Arrays.

Arrays werden immer mit "new" angelegt, auch wenn man es nicht so schreibt.  
Arrays sind Objekte in .Net, sie werden auf dem Heap angelegt.
Arrays haben Methoden.

Mehrdimensionale Arrays. 

Der Zugriff bei Arrays erfolgt über den Index.
Nützlich: das Length Property und die GetLength Methode.   

Wie übergebe ich Arrays in Funktionen, wie greife ich darauf zu ?
Der Zugriff auf die Command-Line-Argumente.

<<   Exceptions

Warum Exceptions ? Die Realisierung mit try / catch.
Vorsicht! Exception Objekte sind nur im Catch Block gültig.

Verschiedene Exception Klassen in .Net.

Mehrfache Catch Blöcke : zuerst spezifische Exceptions dann allgemeine 
Exceptions abfangen. Abgeleitete Exception Klassen dürfen nicht hinter Basis 
Klassen stehen.

Bitte Exceptions auch nur für Ausnahmen verwenden, nicht für den  normalen
Programmablauf !

Mit "throw" Exceptions auslösen. 
 

<<   Grundlagen der Objekt-Orientierten Programmierung

Überbegriffe bilden, "Klassifizieren" tun wir ständig, warum nicht auch beim
Programmieren.

Die Klasse ist der Bauplan, das Programm arbeitet letztendlich mit Objekten.

Wie finde ich Klassen ? Durch Abstrahieren.
Warum ist Verkapselung so wichtig ? Wie werde ich darin von C# unterstützt ?

Code wieder verwenden durch Vererbung, sie stellt eine "Ist" - Beziehung dar.
Es gibt auch die "Hat" - Beziehung, die Aggregation 

Eine Klasse kann in .Net Code nur von einer Klasse erben.

Über eine Objekt-Liste iterieren und je nach Objekt-Typ reagieren - Der Polymorphismus, 
ein Highlight von OOP.

Abstrakte Klassen liefern Code, fordern aber auch eine Implementierung.

<<   Klassen

Variable sollten grundsätzlich privat sein.

Für den Zugriff verwenden wir dann "public Propertys". Hierin kann man auch den Zugriff
kontrollieren, sie bieten einen intuitiven Zugriff.
Die beiden Zugriffs-Accessoren "get" und "set", wie erfolgt der Zugriff ?
Wir können auch den Schreibzugriff verbieten, das "ReadOnly" Property.

Objekte werden mit "new" auf dem Stack angelegt. Was genau liegt auf dem Heap,
und was liegt auf dem Stack ?

Das Initialisieren der Objekte erfolgt über Konstruktoren.

Damit Objekte immer initialisiert sind, liefert uns der Compiler einen 
Default-Konstruktor, dieser ist unsichtbar außer im ILDASM.
Was macht denn dieser Default-Konstruktor ? Warum ist es oft sinnvoll, den vom
Compiler generierten Default-Konstruktor  ggf. zu überschreiben ?

Objekte sollten vielfältig initialisiert werden können, die Funktionsüberladung
kommt uns hier gerade recht - wir haben ja nur einen Namen, den Klassennamen.

Mehrere Konstruktoren können redundanten Code erzeugen, Abhilfe schafft die
Initialisierungsliste, mit der wir innerhalb eines Konstruktors weitere Konstruktoren
aufrufen können.

Enthält eine Klasse einen Konstruktor mit Parametern stellt der Compiler keinen 
Default-Konstruktor zur Verfügung, wird er gebraucht, müssen wir ihn schreiben.

Konstruktoren können keinen Wert zurückgeben, sie haben keinen Return Wert,
sie können aber Exceptions werfen und die können wir abfangen.

Brauchen alle Objekte einer Klasse die gleiche Information, reicht dafür eine einzige
Variable für alle Objekte, die ist statisch, dafür gibt es auch "static" Propertys.

<<   Einführung in Windows Forms

Windows Frorms ist ein Framework um Client-Anwendungen zu schreiben, die 
die grafische Oberfläche verwenden. Wir finden hier ein durchgängiges
objektorientiertes Programmiermodell vor.

Unsere erste Form ist mit dem Notepad geschrieben.  
Jede Windows Forms Applikation besteht aus einer eigenen Klasse, abgeleitet 
von System.Windows.Forms.Form und aus der Klasse Application für die Message-Loop.

Die gleiche Anwendung mit Visual Studio erstellt, welcher Code wird generiert, 
was braucht Visual Studio zusätzlich ?

Wie ist die generelle Vorgehensweise eine Form zu erstellen ?
Welche Controls stehen uns zur Verfügung ?

Windows Forms ermöglicht dynamische Layouts, "Anchoring" und "Docking".
Ihre Verwendung ist intuitiv durch die Unterstützung im Designer

<<   Windows Forms : Menüs, Dialoge, Toolbar und Statusbar

Für die Menüs stehen 4 Klassen zu Verfügung .
Wie werden diese zur Erstellung von Menüs verwendet ? 

Die Common Dialog Boxen in .Net, ihre Verwendung ist einfach und intuitiv.

Eigene Dialoge: Wie erhält der Dialog Daten für die Anzeige, wie ist der Aufruf ? 
Wie erhalte ich vom Dialog geänderte Daten zurück ?

Platz sparend : Der Tabbed Dialog.

Die Toolbar in Windows Windows Forms. Sie verwendet eine ImageList Klasse. 
Zur Erstellung der Toolbar bekommen wir eine sehr gute Unterstützung von 
dem Designer in Windows Forms. Interessant ist der Eventhandler : Es ist ganz
einfach die Toolbar mit  vorhandenen Menüpunkten zu synchronisieren.

Wir erstellen auch eine Statusbar, zur Anzeige von Text und Zeit. Wie ist die
Ansteuerung ?

Auch für ComboBoxen gibt es Unterstützung vom Designer.

<<   Einführung in relationale Datenbanken

Datenbanken  speichern ihre Informationen in Tabellen ab.

Über die SQL Sprache kann leicht auf die Inhalte zugegriffen werden.

Eine Tabelle enthält Datensätze. Sie sind in den einzelnen Zeilen oder Reihen
abgebildet. 

Ein Datensatz besteht aus einer ID (dem Primary Key ) und verschiedenen Daten. 

Theoretisch könnten alle Daten in einer Tabelle abgespeichert sein, performanter 
ist es mit mehreren Tabellen zu arbeiten, somit sind auch ganz einfach Master-Detail 
Beziehungen möglich :

Die Master - Tabelle erhält einen Bezug auf die Detail - Tabelle in Form eines 
Foreign Key (FK), dieser ist ein Primary Key in der Detail Tabelle.
Die Verbindung erfolgt über eine Relation, wir haben somit eine rationale Datenbank.

<<   Datenzugriff mit ADO.Net

Wir haben hier ein neues Konzept und keine Weiterentwicklung von ADO
Es ermöglicht skalierbare Anwendungen für Intranet und Internet.

Es gibt 2 Betriebsarten, den verbundenen Betrieb, realisiert mit einem 
clientseitigen Vorwärts-Lese-Cursor, dem DataReader und dem nicht 
verbundenen Betrieb mit einer "InMemory" - Datenbank, dem DataSet.

Anhand von Anwendungs-Szenarien werden wir beide Betriebsarten behandeln.

Innerhalb des Visual Studio ist es ganz einfach auf den SQL-Server zuzugreifen.
Das erspart ein ständiges Wechseln vom Enterprise - Manager zum Visual Studio. 
Für unsere Arbeiten erstellen wir uns zunächst eigene Tabellen im Visual Studio.

Der DataReader empfiehlt sich für Datenanzeige in List- und ComboBoxen, 
die Daten sollen nur gelesen werden.

Welche Klassen sind im verbundenen Betrieb erforderlich ?

Welche Provider stehen uns für die unterschiedlichen Datenbanken zur Verfügung ?

Möchte man neben der Anzeige von Daten auch die Daten verändern und 
rückwärts scrollen, dann bietet sich der DataSet an. 

DataSets enthalten neben Tabellen auch Constraints und Relationen und 
ermöglichen auf diese Weise schon eine Vorabprüfung bei bestimmten 
Veränderungen der Daten innerhalb des DataSets. Sie ersparen dadurch einen 
fehlerhaften Zugriff auf die Datenbank.

DataSets arbeiten völlig losgelöst von ihrer Datenquelle, d.h. sie 
müssen nicht ihre Daten immer von Datenbanken beziehen. Andere Quellen sind
z.B. XML - Files und Web-Services.

Wie arbeiten wir mit einem DataSet ohne Datenbank ?
Welche Klassen haben wir zur Verfügung um ein eigenes Schema zu erstellen ?
Der XSD-Designer, ein nützliches Tool. Darin erstellen wir unser Schema.

Wir stellen Daten im DataSet mit Hilfe eines DataGrid dar, die Daten  werden
per Programm hinzugefügt.

Wie schreiben wir DataSets in XML-Files, welche Schreib-Modi stehen zur Verfügung ?

Nachdem wir gesehen haben, wie ein DataSet funktioniert, arbeiten wir mit dem
Data-Adapter-Wizard vom Visual Studio und erzeugen mit minimalen Code eine
funktionierende Anwendung.

Der Wizard erzeugt einen Typed DataSet und den erforderlichen Code für den
DataAdapter. Über den DataAdapter erfolgt der Query auf die Datenbank.
Mit einem Befehl können wir auch Änderungen im DataSet wieder in der Datenbank
speichern.

Die dazu nötigen Command - Objekte sind im DataAdapter Objekt enthalten. 
Der DataAdapter ist das Verbindungsglied zwischen Datenbank und DataSet. 
Hierüber erfolgt der Zugriff zum Lesen und zum Update.

<<   XML-WebServices

WebServices sind programmierbare Komponenten im Intranet oder Internet.

Der Aufruf erfolgt in XML codiert, das Protokoll ist HTTP, das zusammen kennen wir
auch als SOAP. 

Das bringt bedeutende Vorteile: Da XML und HTTP auf allen gängigen
Betriebssystemen vorhanden ist, bietet sich der WebService als ideale
Betriebssystem-Unabhängige-Verbindungs-Komponente an. 

Funktionalität in welcher Sprache auch immer geschrieben oder vorhanden, kann
relativ einfach auf der einen Maschine in einen Web Service verpackt werden.
Der Web-Service mag hier nur als Wrapper dienen. 

Dieser Service kann von jeder Maschine verwendet werden, die XML über HTTP
ansteuern kann. Das Internet / Intranet werden somit zu Business Layer.

Das bringt aber auch Nachteile : Sicherheit ist mehr denn je gefragt.

Wir erstellen einen einfachen Web-Service, der rechnen kann. Wie geht das
im Visual Studio ?

Wie kann ich meinen WebService testen ? Das geht sehr komfortabel im VS Studio.

Was ist UDDI ? Was ist WSDL ?

Wie steuere ich einen WebService über einen Proxy an ? 

<<   Deploying

Es gibt verschiedene Arten Software zu verpacken. Zunächst sollte ein
Release Build für das Projekt erstellt werden.

Über XCOPY verteilen, für  Internet Downloads können .cab Files erstellt werden, 
sie sind komprimiert.

Wir haben auch die Möglichkeit ein Windows Installer Package zu erstellen, dafür gibt
es ein Setup Projekt.

Wie wird ein Setup Programm für eine Windows Forms Anwendung erstellt ?