You are on page 1of 220

Grundlagen

der Softwareentwicklung

Official Academic Course

This page intentionally left blank

Microsoft Official Academic Course

Grundlagen der
Softwareentwicklung,
Prfung 98-361

Impressum
REDAKTION
DIRECTOR OF SALES
EXECUTIVE MARKETING MANAGER
MICROSOFT SENIOR PRODUCT MANAGER
EDITORIAL PROGRAM ASSISTANT
CONTENT MANAGER
PRODUCTION EDITOR
CREATIVE DIRECTOR
COVER DESIGNER
TECHNOLOGY AND MEDIA

Bryan Gambrel
Mitchell Beaton
Chris Ruel
Merrick Van Dongen, Microsoft Learning
Jennifer Lartz
Micheline Frederick
Amy Weintraub
Harry Nolan
Jim OShea
Tom Kulesa/Wendy Ashenberg

Titelfoto: Mit freundlicher Genehmigung von: Pgiam/iStockphoto


Satz: Aptara, Inc., Garamond. Druck und Bindung: Bind Rite Robbinsville.
Titeldruck: Bind Rite Robbinsville.
Copyright 2012 John Wiley & Sons, Inc. Alle Rechte vorbehalten.
Ohne vorherige schriftliche Genehmigung des Verlags bzw. Zahlung einer angemessenen Gebhr je Exemplar
an Copyright Clearance Center, Inc. 222 Rosewood Drive, Danvers, MA 01923 (Internet: www.copyright.com)
darf kein Teil dieser Verffentlichung vervielfltigt, in einem Datenabrufsystem gespeichert oder bertragen
werden, unabhngig davon, auf welche Art und Weise oder mit welchen Mitteln (elektronisch, mechanisch, durch
Fotokopieren, Aufzeichnen, Einscannen usw.) dies geschieht, es sei denn, dies erfolgt in bereinstimmung mit
Paragraf 107 oder 108 des Urheberrechtsgesetzes der Vereinigten Staaten von 1976. Genehmigungsanfragen an
den Verlag sind an Permissions Department, John Wiley & Sons, Inc., 111 River Street, Hoboken, NJ 07030-5774,
(201)748-6011, Fax (201)748-6008 (Internet: http://www.wiley.com/go/permissions) zu richten.
Microsoft, ActiveX, Excel, InfoPath, Microsoft Press, MSDN, OneNote, Outlook, PivotChart, PivotTable, PowerPoint,
SharePoint, SQL Server, Visio, Visual Basic, Visual c#, Visual Studio, Windows, Windows 7, Windows Mobile,
Windows Server und Windows Vista sind entweder eingetragene Marken oder Marken der Microsoft Corporation
in den Vereinigten Staaten und/oder anderen Lndern. Andere in diesem Dokument aufgefhrte Produkt- und
Firmennamen sind mglicherweise Marken der jeweiligen Eigentmer.
Die Firmen, Organisationen, Produkte, Domnennamen, E-Mail-Adressen, Logos, Personen, Orte und Ereignisse
in diesen Beispielen sind erfunden. hnlichkeiten mit echten Firmen, Organisationen, Produkten, Domnennamen,
E-Mail-Adressen, Logos, Personen, Orten oder Ereignissen sind rein zufllig und nicht beabsichtigt.
Das Buch gibt die Ansichten und Meinungen des Autors wieder. Die in diesem Buch enthaltenen Informationen
werden ohne ausdrckliche, gesetzliche oder konkludente Gewhrleistungen zur Verfgung gestellt. Weder die
Autoren, John Wiley & Sons, Inc., Microsoft Corporation noch deren Wiederverkufer oder Hndler haften fr
Schden, die tatschlich oder angeblich durch dieses Buch entweder direkt oder indirekt verursacht wurden.
John Wiley & Sons, Inc. wurde im Jahr 1807 gegrndet und vermittelt seit ber 200 Jahren qualittsvolles Wissen,
um Menschen auf der ganzen Welt bei der bedarfsgerechten Verwirklichung ihrer beruflichen Ambitionen zu
untersttzen. Unser Unternehmen baut auf dem Prinzip von Verantwortung fr eine Gesellschaft auf, der wir
unsere Dienste anbieten und in der wir leben und arbeiten. Im Jahr 2008 starteten wir eine Initiative im Bereich
Corporate Citizenship, eine globale Bemhung zur Bewltigung kologischer, sozialer, wirtschaftlicher und ethischer
Herausforderungen, auf die wir im Rahmen unserer Geschftsttigkeit stoen. Themenkomplexe waren unter anderem
die CO2-Belastung der Umwelt, Papierspezifikationen und Beschaffung, ethisches Verhalten im Unternehmen und
auf Lieferantenseite sowie die Untersttzung der Gemeinschaft und die Frderung von karitativen Projekten. Weitere
Informationen erhalten Sie auf unserer Website: www.wiley.com/go/citizenship.
ISBN978-0-470-88911-4
Gedruckt in den Vereinigten Staaten von Amerika
10987654321

www.wiley.com/college/microsoft oder
gebhrenfreie MOAC-Rufnummer: 1+(888) 764-7001 (nur USA und Kanada).

WILEY-ENDBENUTZER-LIZENZVERTRAG
FR MOAC-E-BOOK UND INHALTE
FR KURSLEITER
Introduction | iii

Dies ist der auf John Wiley and Sons, Inc. (Wiley) beschrnkte Endbenutzer-Lizenzvertrag, der Ihre Verwendung des
geschtzten Microsoft Official Academic Course E-Book (MOAC-E-Book) von Wiley und der zugehrigen Inhalte
(Inhalte fr Kursleiter) regelt. INDEM SIE AUF DAS MOAC-E-BOOK ODER DIE INHALTE FR KURSLEITER ZUGREIFEN
BZW. DIESE DATEN HERUNTERLADEN ODER VERWENDEN, ERKENNEN SIE DIE BESTIMMUNGEN DIESES VERTRAGS AN.
FALLS SIE DIE BESTIMMUNGEN NICHT ANERKENNEN, SIND SIE NICHT BERECHTIGT, AUF DAS MOAC-E-BOOK ODER
DIE INHALTE FR KURSLEITER ZUZUGREIFEN, SIE HERUNTERZULADEN ODER ZU VERWENDEN.
Lizenz:
Hiermit gewhrt Wiley dem Mitglied des Microsoft IT Academy-Programms, dem Kursleiter oder Kursteilnehmer, das
bzw. der Rechte unter diesem Vertrag ausbt, (Ihnen, Sie) eine nicht ausschlieliche und nicht bertragbare
Lizenz zur Verwendung des MOAC-E-Books und der Inhalte fr Kursleiter ausschlielich zu den folgenden
Bestimmungen, und Sie erkennen diese Lizenz an:
a. Sie erkennen an, dass die MOAC-E-Books und Inhalte fr Kursleiter fr einen begrenzten Zeitraum
an Sie lizenziert werden und dass Ihre Verwendung den Bestimmungen dieses Vertrags unterliegt.
b. Nachfolgend finden Sie zwei separate Teile mit Nutzungsrechten. Fr Sie gilt nur einer dieser Teile.
i. Wenn Sie ein aktives Mitglied des Microsoft IT Academy-Programms sind:
1.
2.

3.

4.
5.

Sie erkennen an, dass die MOAC-E-Books ausschlielich zur Verwendung durch Ihre
Kursleiter und Ihre Kursteilnehmer vorgesehen sind.
Sie sind berechtigt, nur so viele Kopien des jeweiligen MOAC-E-Book-Titels herunterzuladen,
wie fr Ihre Kursleiter zur Durchfhrung Ihres Kurses, in dem der entsprechende MOACE-Book-Titel gelehrt wird, bzw. fr die Kursteilnehmer zur Teilnahme an diesem Kurs
erforderlich sind.
Sie drfen MOAC-E-Book-Titel ausschlielich an die Leiter und Teilnehmer von Kursen
zum betreffenden MOAC-E-Book-Titel weitergeben. Zulssig sind nur die folgenden
Weitergabemethoden:
o E-Mail
o Sicheres USB-Gert, das direkt in die persnlichen Gerte der Kursteilnehmer
eingesteckt wird
o Kennwortgeschtzte Website, auf die nur Ihre Kursleiter und Kursteilnehmer zugreifen
knnen
Sie drfen Inhalte fr Kursleiter nur an Ihre Kursleiter verteilen, damit sich diese auf einen
Ihrer Kurse, in dem der zugehrige MOAC-E-Book-Titel gelehrt wird, vorbereiten und diesen
durchfhren knnen.
Vor der Bereitstellung des Zugriffs auf ein MOAC-E-Book teilen Sie jeder Person mit, dass sie
nur dann auf ein MOAC-E-Book zugreifen oder dieses verwenden kann, wenn sie sich damit
einverstanden erklrt, bei der Verwendung des MOAC-E-Books folgende Bestimmungen
einzuhalten:
o Die Person verwendet das MOAC-E-Book ausschlielich fr ihre persnlichen
Schulungszwecke.
o Die Person installiert das MOAC-E-Book nur auf einem Gert, das ihr gehrt oder unter
ihrer Kontrolle steht.
o Die Person darf das MOAC-E-Book weder vollstndig noch in Teilen kopieren, ndern,
drucken, bermitteln, bertragen, verffentlichen, posten, anzeigen, verlinken,
weiterleiten oder verteilen.
o Die Person verwendet den MOAC-E-Book-Titel nur fr die Dauer des Kurses, an dem sie
teilnimmt und in dem der MOAC-E-Book-Titel gelehrt wird, oder fr einen Zeitraum von
einhundertundachtzig (180) Tagen, wobei der lngere Zeitraum mageblich ist; danach
muss die Person smtliche Kopien des MOAC-E-Book-Titels, die sich in ihrem Besitz
oder unter ihrer Kontrolle befinden, auf sichere Weise lschen.
o Bei der Verwendung der MOAC-E-Book-Titel durch die Person sind auerdem alle
zustzlichen Bestimmungen oder Lizenzen einzuhalten, die fr den MOAC-E-Book-Titel
gelten, diesem beiliegen oder darin enthalten sind.

iv | Wiley-endbenutzer-lizenzvertrag fr moac-e-book und inhalte fr kursleiter


6.

Vor der Bereitstellung des Zugriffs auf Inhalte fr Kursleiter teilen Sie jedem Kursleiter mit,
dass er nur dann auf die Inhalte fr Kursleiter zugreifen oder diese verwenden kann, wenn
er sich damit einverstanden erklrt, bei der Verwendung der Inhalte fr Kursleiter folgende
Bestimmungen einzuhalten:
o Der Kursleiter verwendet die Inhalte fr Kursleiter ausschlielich zur Vorbereitung und
Durchfhrung Ihrer Schulungssitzung.
o Der Kursleiter installiert die Inhalte fr Kursleiter nur auf einem Gert, das ihm gehrt
oder unter seiner Kontrolle steht.
o Der Kursleiter darf die Inhalte fr Kursleiter weder vollstndig noch in Teilen kopieren,
ndern, drucken, bermitteln, bertragen, verffentlichen, posten, anzeigen, verlinken,
weiterleiten oder verteilen.
o Der Kursleiter verwendet die Inhalte fr Kursleiter nur fr die Dauer des Kurses, in
dem der zugehrige MOAC-E-Book-Titel gelehrt wird, oder fr einen Zeitraum von
einhundertundachtzig (180) Tagen, wobei der lngere Zeitraum mageblich ist; danach
muss der Kursleiter smtliche Kopien der Inhalte fr Kursleiter, die sich in seinem Besitz
oder unter seiner Kontrolle befinden, auf sichere Weise lschen.
o Bei der Verwendung der Inhalte fr Kursleiter durch den Kursleiter sind auerdem alle
zustzlichen Bestimmungen oder Lizenzen einzuhalten, die fr die Inhalte fr Kursleiter
gelten, diesen beiliegen oder darin enthalten sind.

ii. Wenn Sie ein Student sind, erkennen Sie Folgendes an und erklren sich damit

einverstanden:
1.
Sie nehmen derzeit an einem Kurs eines Mitglieds des IT Academy-Programms teil, in dem
das MOAC-E-Book gelehrt wird.
2.
Sie verpflichten sich, die MOAC-E-Books ausschlielich fr Ihre persnlichen
Schulungszwecke zu verwenden.
3.
Sie installieren das MOAC-E-Book nur auf einem Gert, das Ihnen gehrt oder unter Ihrer
Kontrolle steht.
4.
Sie drfen das MOAC-E-Book weder vollstndig noch in Teilen kopieren, ndern, drucken,
bermitteln, bertragen, verffentlichen, posten, anzeigen, verlinken, weiterleiten oder verteilen.
5.
Bei der Verwendung der MOAC-E-Book-Titel durch Sie sind auerdem alle zustzlichen
Bestimmungen oder Lizenzen einzuhalten, die fr den MOAC-E-Book-Titel gelten, diesem
beiliegen oder darin enthalten sind.
c. Sofern in Abschnitt b oben nicht ausdrcklich autorisiert, sind Sie nicht berechtigt, MOAC-E-Books oder
Inhalte fr Kursleiter vollstndig oder in Teilen hochzuladen, zu kopieren, zu ndern, zu bermitteln, zu
bertragen, Bearbeitungen davon zu erstellen, diese weiterzuleiten oder zu verteilen, den Quellcode
von MOAC-E-Books oder Inhalten fr Kursleiter durch Dekompilierung oder anderweitig zu erstellen. Sie
sind nicht berechtigt, Kopien von vollstndigen MOAC-E-Books oder Inhalten fr Kursleiter zu drucken;
Sie sind jedoch berechtigt, einzelne Seiten oder Abschnitte der MOAC-E-Book-Kapitel ausdrcklich zur
Verwendung im Kurs zu drucken. Sie sind nicht berechtigt, das MOAC-E-Book oder Inhalte fr Kursleiter
insgesamt oder in Teilen fr den Erhalt einer geldwerten Gegenleistung mittels Verkauf, Weiterverkauf,
Verleih, bertragung, Vermietung oder andere Arten der Verwertung des MOAC-E-Books oder der
Inhalte fr Kursleiter zu verwenden. Wenn Sie ein MOAC-E-Book oder Inhalte fr Kursleiter Dritten
bertragen, endet Ihre Lizenz automatisch. Diese Kndigung besteht zustzlich zu oder anstelle von
billigkeitsrechtlichen, zivilrechtlichen oder sonstigen Abhilfeansprchen, die Wiley zur Verfgung stehen.
d. Sie verwenden den entsprechenden MOAC-E-Book-Titel und Inhalte fr Kursleiter nur fr die Dauer
des Kurses, in dem der jeweilige MOAC-E-Book-Titel gelehrt wird, oder fr einen Zeitraum von
einhundertundachtzig (180) Tagen, wobei der lngere Zeitraum mageblich ist; danach mssen Sie
smtliche Kopien des MOAC-E-Book-Titels und der Inhalte fr Kursleiter, die sich in Ihrem Besitz oder
unter Ihrer Kontrolle befinden, auf sichere Weise lschen.
e. DIE MOAC-E-BOOKS UND INHALTE FR KURSLEITER WERDEN WIE BESEHEN UND WIE
VERFGBAR OHNE GARANTIEN JEGLICHER ART LIZENZIERT.
f. Sie erkennen an, dass smtliche Rechte (einschlielich ohne Einschrnkung Urheberrechte, Patente
und Geschftsgeheimnisse) an den MOAC-E-Books und den Inhalten fr Kursleiter das alleinige und
ausschlieliche Eigentum von Wiley und seinen Lizenzgebern sind. Durch die Annahme dieses Vertrags
werden Sie nicht Eigentmer der MOAC-E-Books und der Inhalte fr Kursleiter, doch Sie verfgen ber
eine eingeschrnkte Lizenz zur Verwendung des MOAC-E-Books und der Inhalte fr Kursleiter nach den
Bestimmungen dieses Vertrags. Sie verpflichten sich, das MOAC-E-Book und die Inhalte fr Kursleiter
vor der unerlaubten Verwendung, dem Hochladen, Herunterladen, der Vervielfltigung oder Verteilung
zu schtzen. Darber hinaus verpflichten Sie sich, kein MOAC-E-Book und keine Inhalte fr Kursleiter
zu bersetzen, zu dekompilieren, zu disassemblieren oder anderweitig zurckzuentwickeln (Reverse
Engineering). Wiley behlt sich alle Ihnen in diesem Vertrag nicht ausdrcklich gewhrten Rechte vor.

Vorwort des Herausgebers


Mit seiner Microsoft Official Academic Course-Reihe verfolgt Wiley als Bildungsverlag die Vision,
Teilnehmer und Kursleiter mit den Fhigkeiten und Kenntnissen auszustatten, die sie bentigen,
um die Technologien von Microsoft effektiv in allen Aspekten ihres Privat- und Berufslebens
zu nutzen. Nur mit qualitativ hochwertigen Inhalten knnen Kursleiter und Teilnehmer die
Microsoft-Softwaretools optimal nutzen und produktiver arbeiten. Wir sehen es als unseren Auftrag
an, mit unseren Lehrprogrammen zuverlssige Bildungsbegleiter frs Leben zu entwickeln.
Um diese Mission zu erfllen, hat sich Wiley mit Microsoft zusammengetan, um
Weiterbildungsprogramme fr Information Worker, IT-Experten und Entwickler zu erschaffen,
die hchsten Qualittsanforderungen gengen. Die im Rahmen dieser Partnerschaft entstandenen
Kursunterlagen tragen den Markennamen Microsoft Official Academic Course. So ist fr
Kursleiter und Kursteilnehmer gleichermaen gewhrleistet, dass die Inhalte der Lehrbcher
vollstndig von Microsoft untersttzt werden und qualitativ hochwertige Informationen und
Anleitungen zu den Microsoft-Produkten bieten. Die Lehrbcher der Microsoft Official Academic
Course-Reihe sind noch auf eine weitere Art offiziell: Es handelt sich hierbei nmlich um offiziell
genehmigtes Schulungsmaterial fr Mitglieder der Microsoft IT Academy.
Die Microsoft Official Academic Course-Reihe ist auf die Mitarbeiterfortbildung ausgerichtet.
Diese Programme richten sich an Kursteilnehmer, die ins Berufsleben eintreten, ihren Arbeitsplatz
wechseln oder sich als Information Worker, IT-Experte oderEntwickler beruflich umorientieren
mchten. Die Microsoft Official Academic Course-Programme beinhalten authentische, am
Arbeitsleben orientierte Szenarien mit vielen Projekten, bungen, Fallbeispielen und Bewertungen
und sind damit speziell auf den Bedarf der genannten Zielgruppe abgestimmt.
Die Microsoft Official Academic Course-Reihe ist eng verbunden mit der umfangreichen
Erforschung und Analyse der Aufgabengebiete, anhand derer die Microsoft Technology Associate
(MTA)- und Microsoft Certified Information Technology Professional (MCITP)-Prfungen
entwickelt werden. Die Lehrbcher orientieren sich an realen Kompetenzen fr reale Arbeitspltze.
Indem die Kursteilnehmer die Projekte und bungen bearbeiten, verbessern sie ihren Wissensstand
und lernen, wie sie die neuesten Microsoft-Technologien fr alltgliche Aufgaben anwenden
knnen. Die so erlangten Referenzen wirken sich positiv auf ihren Lebenslauf aus, sodass sie
leichter einen neuen Arbeitsplatz finden, ihren aktuellen Arbeitsplatz behalten oder in ihrer
Ausbildung vorankommen.
Das Konzept des lebenslangen Lernens hat heutzutage oberste Prioritt. Aufgabengebiete und auch
gesamte Arbeitsplatzkategorien verndern sich mittlerweile so schnell, dass auf lange Sicht nur
wettbewerbsfhig und produktiv bleiben kann, wer seine Fhigkeiten und Kompetenzen stndig
erweitert. Das Microsoft Official Academic Course-Lehrangebot ist auf die Vorbereitung zu den
Microsoft-Zertifizierungsprfungen ausgerichtet und bietet den Teilnehmern die Mglichkeit,
Fhigkeiten und Wissen zu erwerben und effektiv aufzufrischen. Wiley als offizieller akademischer
Verlag von Microsoft untersttzt die Kursteilnehmer durch die Entwicklung und den Vertrieb
dieser Kurse.
Bildungsverlage mssen heutzutage qualitativ hochwertige Druckerzeugnisse und stabile
elektronische Inhalte liefern. Durch den Zusammenschluss von Microsoft Official Academic
Course-Produkten, WileyPLUS und Microsoft-Zertifizierungen sehen wir uns besser in der Lage,
Kursteilnehmern wie Kursleitern effiziente Schulungslsungen anzubieten.
Bonnie Lieberman
General Manager und Senior Vice President
www.wiley.com/college/microsoft oder
gebhrenfreie MOAC-Rufnummer: 1+(888) 764-7001 (nur USA und Kanada).

| v

Vorwort
Willkommen beim Microsoft Official Academic Course (MOAC)-Programm fr Grundlagen
der Softwareentwicklung. MOAC ist ein Zusammenschluss von Microsoft Learning und dem
Verlag John Wiley & Sons, Inc. Microsoft stellt in Partnerschaft mit Wiley eine Reihe von
Lehrbchern bereit, die den Kursleitern berzeugende und innovative Unterrichtslsungen und den
Kursteilnehmern hochwertige Lernerfahrungen bieten. Unsere Lehrbcher tragen die professionelle
Handschrift der Microsoft-Entwickler und werden von einem Verlag herausgegeben, der weltweit
fr die didaktische Qualitt seiner Produkte bekannt ist. Mit ihnen lsst sich in kurzer Zeit ein
maximaler Wissenstransfer erzielen. Sie bieten den Kursteilnehmern viele Anregungen, damit
sie ihr Potenzial mit ihren neu erworbenen technischen Fhigkeiten voll ausschpfen und dieses
produktiv in ihr Unternehmen einbringen knnen.
Da diese Wissensbasis aus dem Hause Microsoft stammt, den Entwicklern der Microsoft Certified
Technology Specialist (MCTS)-, Microsoft Certified Professional (MCP)- und Microsoft Technology
Associate (MTA)-Prfungen (www.microsoft.com/learning/certification), knnen Sie sicher sein,
dass immer die aktuellen Themen behandelt werden, die fr Ihren persnlichen und beruflichen
Erfolg mageblich sind. Durch die direkte Beteiligung von Microsoft entsprechen die Inhalte der
MOAC-Lehrbcher immer dem aktuellen Stand. Sie werden damit bestmglich auf die erfolgreiche
Teilnahme an den Zertifizierungsprfungen und auf Ihren beruflichen Erfolg vorbereitet.

Das Microsoft Official Academic Course-Programm

Die Microsoft Official Academic Course-Reihe bildet ein umfassendes Programm fr Kursleiter und
Institutionen, mit dem sich die Softwaretechnologien von Microsoft fundiert vermitteln lassen. Mit der
MOAC-Reihe erkennen wir an, dass es aufgrund des technologischen Wandels und der raschen Folge,
mit der Microsoft neue Studienplnen entwickelt, jenseits von Schulungsanleitungen noch einen
weiteren Bedarf an Instrumenten gibt, die fr das erfolgreiche Unterrichten eines Kurses von Belang
sind. Das MOAC-Programm ist bestrebt, systematisch Lsungen fr diese Bedrfnisse anzubieten.
Sokann sichergestellt werden, dass die Kurse fr die Leiter und die Teilnehmer erfolgreich und
lohnend sind. Dazu gehrt die Vorbereitung der Kursleiter auf die technischen Aspekteund die
Lehrplne im Falle neuer Softwareversionen; die Software muss den Kursteilnehmern zur Erlangung
praktischer Fertigkeiten sowie fr Bewertungs- und Validierungszwecke zu Hause zur Verfgung
gestellt werden; die Schulungsrume sind mit den fr Unterricht und praktische bungseinheiten
erforderlichen Tools auszustatten. Das alles bietet das MOAC-Programm, weil es wichtig frden
reibungslosen Ablauf von interessanten Microsoft-Softwareschulungen ist. Mit dem unten
dargestellten Modell setzen wir einen Mastab, mit dem wir sicherstellen, dass wir Sie als Kursleiter
bei Ihrem Ziel nmlich anschaulichen Unterricht zu bieten nachhaltig untersttzen knnen.
Bei Ihrer Suche nach geeigneten Unterrichtsmaterialien knnen Sie dieses Modell vielleicht zu
Vergleichszwecken mit verfgbaren Schulungsprodukten verwenden:

vi |

www.wiley.com/college/microsoft oder
gebhrenfreie MOAC-Rufnummer: 1+(888) 764-7001 (nur USA und Kanada).

Illustrierte Fhrung durch das Lehrbuch

Didaktische Besonderheiten

Das MOAC-Lehrbuch fr Grundlagen der Softwareentwicklung deckt alle Lernziele fr die


MTA-Prfung 98-361 ab, diese werden als Themen und Lernziele dieser Lektion bezeichnet.
Die Microsoft Technology Associate (MTA)-Prfungsziele werden im gesamten Lehrbuch
hervorgehoben. Speziell fr das Microsoft Official Academic Course-Programm wurden viele
didaktische Besonderheiten entwickelt.
Die umfangreichen Verfahrensanweisungen und die technischen Konzepte, die sich
durch das gesamte Lehrbuch erstrecken, geben sowohl den Kursteilnehmern als auch den
Kursleitern wichtige Impulse. Die folgende illustrierte Fhrung durch das Lehrbuch macht
den Leser mit der enormen Funktionsvielfalt vertraut, durch die sich Lehrplne des Microsoft
Official Academic Course-Programms auszeichnen. Im Folgenden finden Sie eine Liste der
wichtigsten Funktionen der einzelnen Lektionen. Diese soll die Kursteilnehmer auf gelungene
IT-Weiterbildungen und Zertifizierungsprfungen sowie auf berufliche Erfolge vorbereiten:
Jede Lektion beginnt mit einer Aufstellung der Themen und Lernziele der Lektion.
Dies ist weitaus mehr als eine Standardliste. In den Themen und Lernzielen der
jeweiligen Lektion werden die in der Lektion vermittelten Softwarekenntnisse den
relevanten Prfungszielen gegenbergestellt.
Durch viele prgnante Schritt-fr-Schritt-Anweisungen lernen die Kursteilnehmer
neue Funktionen kennen, und sie erhalten die Gelegenheit zur Durchfhrung praktischer
bungen. Die nummerierten Schritte vermitteln ausfhrliche Informationen und helfen
den Kursteilnehmern, die Software zu erlernen.
Illustrationen, darunter insbesondere Bildschirmabbildungen, bieten den Kursteilnehmer
beim Bearbeiten der bungen ein visuelles Feedback. Diese Abbildungen akzentuieren
die Schlsselkonzepte, bieten optische Hinweise zu den einzelnen Schritten und
ermglichen den Kursteilnehmern, ihre Fortschritte zu berprfen.
Listen der wichtigsten Begriffe bringen den Kursteilnehmern zu Beginn jeder Lektion
den wichtigen technischen Wortschatz nahe. Spter in der Lektion werden diese Begriffe
in Fett- und Kursivschrift dargestellt und gleichzeitig definiert.
Durch Hilfen fr den Leser werden in allen Lektionen einschlgige Stellen
gekennzeichnet. Sie informieren die Kursteilnehmer, warum ein Thema fr sie relevant
ist (Fazit) oder bieten hilfreiche Tipps (Hinweis). Hilfen fr den Leser bieten auch
zustzliche relevante oder Hintergrundinformationen, die den Nutzen der Lektion erhhen.
Mit dem Zusatz Bereit fr die Zertifizierung werden Textstellen gekennzeichnet, die ein
bestimmtes Zertifizierungsziel behandeln. Er bietet den Kursteilnehmern die Mglichkeit,
ihr Verstndnis dieses bestimmten MTA-Ziels zu berprfen und den betreffenden
Abschnitt der Lektion gegebenenfalls noch einmal zu wiederholen. MOAC bereitet
umfassend auf die MTA-Zertifizierung vor.
Fragen am Ende der Lektion: Der Wissenstest enthlt eine Vielzahl von unterschiedlichen
Fragetypen (Multiple-Choice- und Richtig/Falsch-Fragen, Zuordnungen und Lckentexte).
bungen am Ende der Lektion: Durch Fallszenarien mit Wissens- und Kenntnistests
sowie praxisorientierte und arbeitsbezogene bungen knnen die Kursteilnehmer anhand
von Projekten unter Beweis stellen, ob sie das Gelernte anwenden knnen.
www.wiley.com/college/microsoft oder
gebhrenfreie MOAC-Rufnummer: 1+(888) 764-7001 (nur USA und Kanada).

| vii

viii | Illustrierte Fhrung durch das Lehrbuch

Besonderheiten in den Lektionen

Einfhrung in die
objektorientierte
Programmierung

LEKTION

Themen und Lernziele dieser Lektion

THEMEN UND LERNZIELE DIESER LEKTION


Fertigkeiten/Konzepte

MTA-Prfungsziel

Nummer des
MTA-Prfungsziels

Erluterungen zu Objekten

Die Grundlagen von


Klassen verstehen

2.1

Erluterungen zu Werten
und Verweisen

Computerspeicherung
und Datentypen verstehen

1.1

Erluterungen zur Kapselung

Kapselung verstehen

2.4

Erluterungen zur Vererbung

Vererbung verstehen

2.2

Erluterungen zur Polymorphie

Polymorphie verstehen

2.3

Erluterungen zu Schnittstellen

Kapselung verstehen

2.4

SCHLSSELBEGRIFFE
Zugriffsmodifizierer

Kapselung

Polymorphie

Accessoren

Ereignisse

Eigenschaften

Abstrakte Klassen

Vererbung

Verweistyp

Automatisch implementierte
Eigenschaften

Schnittstellen

Versiegelte Klassen

Klasse

Methode

Signatur

Namespace

Statische Zahlen

Objekte

Werttyp

Konstruktoren
Delegaten

Schlsselbegriffe

Einfhrung in das Programmieren | 3

Abbildung 1-1 zeigt beispielsweise ein Flussdiagramm, bei dem zwei Zahlen eingegeben
und miteinander verglichen werden. Anschlieend wird die grere Zahl ausgegeben.

Sie sind Softwareentwickler bei der Northwind Corporation. Sie arbeiten als Teil
eines Teams, das Computerprogramme entwickelt, die komplexe Geschftsprobleme
lsen. Alle von Ihnen geschriebenen Programme mssen leicht zu verstehen und
ber einen lngeren Zeitraum zu verwalten sein. Daher mssen Sie Programme mit
Techniken entwickeln, die die Wiederverwendung von Code, die Erweiterbarkeit
und Zusammenarbeit frdern. Darber hinaus sollten Sie Ihre Programme auf realen
Unternehmenskonzepten modellieren, wie z. B. Kunden, Produkten, Lieferanten und
Interaktionen zwischen ihnen, anstatt die Programme berwiegend als Listen von
Methoden zu betrachten.

Abbildung 1-1
Ein einfaches Flussdiagramm,
das zwei Zahlen vergleicht
und die grere der beiden
ausgibt

START

Eingabe x

Eingabe y

32

x > y?

Informative
Diagramme

Hilfe fr den Leser vom


Typ Querverweis

REF

Weitere Informationen
zum Erstellen eigener
Datentypen erhalten
Sie in Lektion 2.

C# stellt mehrere integrierte Datentypen bereit, die Sie in Ihren Programmen verwenden
knnen. Sie knnen auch neue Typen definieren, indem Sie eine Datenstruktur wie class
oder struct definieren. Dieses Kapitel konzentriert sich auf einige der am hufigsten
verwendeten integrierten Datentypen.
Tabelle 1-3 listet mehrere hufig verwendete integrierte Datentypen auf, die in C#
verfgbar sind. Die in der Tabelle aufgefhrten Gren gelten fr einen Computer
mit einem 32-Bit-Betriebssystem wie Windows 7 (32-Bit-Version). Fr ein
64-Bit-Betriebssystem wie Windows 7 (64-Bit-Version) gelten andere Gren.

Tabelle 1-3
Herkmmliche in C#
verwendete integrierte
Datentypen

HINWEIS

Die vorzeichenlosen
Versionen von short,
int und long sind
ushort, uint und ulong.
Die vorzeichenlosen
Typen haben die
gleiche Gre wie
die Versionen mit
Vorzeichen, speichern
aber mehr Bereiche an
nur positiven Werten.

Datentyp

Grsse

Wertebereich

byte

1 Byte

0 bis 255

char

2 Byte

U+0000 bis U+ffff (Unicode-Zeichen)

short

2 Byte

-32.768 bis 32.767

int

4 Byte

-2.147.483.648 bis 2.147.483.647

long

8 Byte

-9.223.372.036.854.775.808 bis
9.223.372.036.854.775.807

4 Byte

1,5 10-45 bis 3,4 1038

double

8 Byte

5,0e-324 bis 1,7e308

bool

2 Byte

Wahr oder falsch

Zeichenkette

Null oder mehr Unicode-Zeichen

float

Ausgabe y

Ausgabe x

STOPP

Einfhrung in das Programmieren | 9

Nein

Ja

Wie Sie sehen fhrt dieses Flussdiagramm alle erforderlichen Schritte zum Ausfhren der
Operation in korrekter Reihenfolge auf. Die Ablaufsteuerung beginnt mit dem Startsymbol
und endet mit dem Stoppsymbol. Die Symbole fr die Ein- und Ausgabe sowie fr die
Verarbeitung verfgen immer ber einen einzelnen Einstiegs- und Ausstiegspunkt. Im
Gegensatz dazu findet sich beim Entscheidungssymbol ein Einstiegspunkt aber mehrere
Ausstiegspunkte. Sie knnen ein Flussdiagramm testen, indem Sie einen Probelauf
durchfhren. Bei einem solchen Probelauf durchlaufen Sie manuell die Schritte des
Flussdiagrams mit Testdaten, um festzustellen, ob die richtigen Pfade eingehalten werden.

EINFHRUNG IN ENTSCHEIDUNGSTABELLEN
Enthlt ein Algorithmus viele Bedingungen, lsst sich der Algorithmus besser durch
Entscheidungstabellen darstellen, da dieses Format kompakter und besser lesbar ist.
Tabelle 1-2 zeigt eine Entscheidungstabelle zur Berechnung eines Rabatts. Diese Tabelle
generiert einen Rabatt in Prozent in Abhngigkeit der Menge der gekauften Produkte.
Die dicken Linien in der Entscheidungstabelle unterteilten die Tabelle in vier Quadranten.
Der erste Quadrant (oben links) gibt die Bedingungen (Menge < 10, usw.) an. Der
zweite Quadrant (oben rechts) legt die Regeln fest. Die Regeln stellen die mglichen
Kombinationen der Ergebnisse der einzelnen Bedingungen dar. Der dritte Quadrant (unten
links) gibt die Aktion (in diesem Fall Rabatt) an, und der letzte Quadrant (unten rechts)
gibt die Aktionen an, die den einzelnen Regeln entsprechen.

Alle Datentypen, die in Tabelle 1-3 aufgefhrt sind, sind Werttypen mit Ausnahme
von string. String ist ein Verweistyp. Die Variablen, die direkt auf den Werttypen
basieren, enthalten den Wert. Bei einem Verweistyp enthlt die Variable die Adresse
des Speicherbereichs, an dem die tatschlichen Daten gespeichert werden. In Lektion 2
erfahren Sie mehr ber die Unterschiede zwischen Wert- und Verweistypen.

ERLUTERUNGEN ZU ARRAYS
Ein Array ist eine Auflistung von Elementen, auf die mithilfe eines eindeutigen
Indexes zugegriffen werden kann.
Ein Array in C# wird hufig verwendet, um eine Auflistung von Elementen eines
hnlichen Typs darzustellen. Der folgende Code zeigt ein Beispiel einer Array-Deklaration:
int[] numbers = { 1, 2, 3, 4, 5 };

Diese Deklaration erstellt ein Array, dass ber die Namenszahlen identifiziert wird. Dieses
Array kann eine Auflistung von fnf Ganzzahlen speichern. Diese Deklaration initialisiert
auch die einzelnen Arrayelemente entsprechend durch die Zahlen 1 bis 5.
Auf jedes Arrayelement kann mithilfe eines Indexes direkt zugegriffen werden. In .NET
Framework sind Arrayindizes nullbasiert. Das bedeutet, dass Sie fr den Zugriff auf das erste
Element Index 1 verwenden, fr den Zugriff auf das zweite Element Index 2 und so weiter.
Fr den Zugriff auf ein einzelnes Arrayelement verwenden Sie den Namen des Arrays,
auf den der in eckige Klammen eingeschlossene Index folgt. So gibt beispielsweise
numbers[0] einen Wert 1 aus dem oben deklarierten Array zurck und numbers[4]
den Wert 5. Auerhalb seiner definierten Grenzen darf nicht auf ein Array zugegriffen

www.wiley.com/college/microsoft oder
gebhrenfreie MOAC-Rufnummer: 1+(888) 764-7001 (nur USA und Kanada).

Illustrierte Fhrung durch das Lehrbuch | ix

44 | Lektion 2
2. ndern Sie den Code der Program-Klasse wie folgt:
class Program
{
static void Main(string[] args)
{
Rectangle rect = new Rectangle
{ Length = 10.0, Width = 20.0 };
Console.WriteLine(Shape Name: {0}, Area: {1},
Rectangle.ShapeName,
rect.GetArea());
}
}
3. Whlen Sie Debuggen > Starten ohne Debuggen aus. Ein Konsolenfenster wird
geffnet, und der Name und die Flche des Shapes werden angezeigt.
4. SPEICHERN Sie das Projekt.

PAUSE. Lassen Sie das Projekt zur Verwendung in der nchsten bung geffnet.

BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie die
Grundlagen von
Klassen?
2.1

Wenn die Instanz einer Klasse erstellt wird, wird fr jedes Instanzenfeld eine separate
Kopie erstellt. Es wird doch nur eine Kopie eines statischen Felds von allen Instanzen
freigegeben.
Auf einen statischen Member kann von einem Instanzenobjekt nicht verwiesen
werden. Stattdessen wird ber den Klassennamen (wie Rectangle.ShapeName
in der obigen bung) auf einen statischen Member verwiesen. Es ist nicht mglich, den
this-Schlsselwortverweis mit einer statischen Methode oder Eigenschaft zu verwenden, da
das this-Schlsselwort nur fr den Zugriff auf Instanzenobjekte verwendet werden kann.

Erluterungen zu Werten und Verweisen


FAZIT

Ein Werttyp speichert einen Wert direkt, whrend ein Verweistyp nur einen Verweis auf
einen tatschlichen Wert speichert.

Hilfe fr den Leser vom Typ Fazit

Ein Werttyp speichert Daten direkt in dem Arbeitsspeicher. Verweistypen speichern


dagegen nur einen Verweis auf einen Speicherbereich. Hier sind die tatschlichen
Daten im Speicherbereich gespeichert, auf den verwiesen wird. Die meisten integrierten
grundlegenden Datentypen (wie bool, int, char, double usw.) sind Werttypen.
Benutzerdefinierte Datentypen, die mit dem Schlsselwort struct erstellt werden, sind
auch Werttypen. Verweistypen umfassen die Typen, die mithilfe der Schlsselwrter
object, string, interface, delegate und class erstellt werden.

4 | Lektion 1

Grundlegendes zu Strukturen

Tabelle 1-2
Eine Entscheidungstabelle
zur Berechnung von
Rabatten

Das Schlsselwort struct wird verwendet, um benutzerdefinierte Typen zu erstellen,


die aus kleinen Gruppen von verwandten Feldern bestehen. Strukturen sind
Werttypen im Gegensatz zu Klassen, die Verweistypen sind.
Strukturen werden mit dem Schlsselwort struct folgendermaen definiert:

Menge < 10

Menge < 50

Menge < 100

5 %

10 %

15 %

20 %

Rabatt

public struct Point


{
public double X, Y;
}

N
N

Um herauszufinden, welche Aktion angewendet werden soll, mssen Sie die einzelnen
Bedingungen evaluieren, um die passende Regel zu finden und anschlieend die Aktion
whlen, die in der Spalte mit der passenden Regel angegeben ist. Ist der Wert fr Menge
in den Testdaten beispielsweise 75, ist das Ergebnis der ersten Regel Nein, das Ergebnis
der zweiten Regel ebenfalls und das Ergebnis der dritten Regel Ja. Deshalb whlen Sie
die Aktion aus der Spalte (N, N und J), wodurch der Rabatt auf 15 % festgelegt wird.

Strukturen knnen die meisten Elemente enthalten, die Klassen enthalten knnen. Dazu
gehren Konstruktoren, Methoden, Eigenschaften usw. Wie Sie im nchsten Abschnitt

Einfhrung in C#
C# ist eine beliebte hhere Programmiersprache, mit der Sie
Computerprogramme in einem lesbaren Format schreiben knnen. C# ist ein
Teil von .NET Framework und profitiert von der Laufzeituntersttzung und den
Klassenbibliotheken, die von .Framework bereitgestellt werden.
Wie im vorherigen Abschnitt beschrieben, bentigen Computer genaue und vollstndige
Anweisungen, um eine Aufgabe auszufhren. Diese Ansammlungen von Anweisungen
werden Computerprogramme oder einfach nur Programme genannt.
Ganz vereinfacht ausgedrckt nutzen Computer das Binrsystem zur Darstellung von
Informationen und Code. In diesem System wird jeder Wert lediglich durch die beiden
Symbole 0 und 1 dargestellt. Ein Computerprogramm, das unter Verwendung des
Binrsystems geschrieben wurde, wird als Binrcode bezeichnet.
Das Programmieren eines Computers mithilfe von Binrcode ist fr nicht triviale
Aufgaben sehr schwierig. Deshalb haben Wissenschaftler und Computertechniker mehrere
Abstraktionsebenen zwischen Mensch und Computer errichtet. Diese Abstraktionen
enthalten Software (z. B. Betriebssysteme, Compiler und verschiedenen Laufzeitsysteme),
die dafr verantwortlich ist, ein (visuell) lesbares Programm in ein maschinenlesbares
Programm zu bersetzen.
Die meisten modernen Programme werden in einer hheren Programmiersprache
wie C#, Visual Basic oder Java geschrieben. Mit diesen Sprachen knnen Sie
przise Anweisungen in visuell lesbarer Form schreiben. Anschlieend bersetzt ein
Sprachcompiler die hhere Programmiersprache in eine niedrige Programmiersprache,
die vom Laufzeitausfhrungssystem verarbeitet werden kann.
Jede Programmiersprache stellt einen eigenen Satz an Vokabeln und Grammatik
(auch bekannt als Syntax) bereit. In diesem Kurs erfahren Sie, wie Sie mit der
C#-Programmiersprache in .NET Framework programmieren. .NET Framework stellt eine
Ausfhrungsumgebung fr die Laufzeit fr das C#-Programm bereit. Das Framework enthlt
darber hinaus Klassenbibliotheken, die eine Menge an wiederverwendbaren Kernfunktionen
zur Verfgung stellen, die Sie direkt in Ihrem C#-Programm verwenden knnen.

Allgemeine Grundlagen der Softwareentwicklung | 77

Bei BubbleSort werden zwei Elemente verglichen, um zu prfen, ob sie sich in der
richtigen Reihenfolge befinden. Wenn dies nicht der Fall ist, werden sie getauscht. Der
Algorithmus fhrt damit so lange fort, bis die gesamte Liste die gewnschte Reihenfolge
aufweist. Der Name BubbleSort leitet sich von der Funktionsweise des Algorithmus ab:
Whrend der Algorithmus ausgefhrt wird, steigen die kleineren Elemente wie Blasen im
Wasser immer weiter nach oben, das heit, an den Anfang der Liste.
Visualisieren wir BubbleSort nun mithilfe eines Beispiels. Angenommen, Sie mchten alle
Elemente in der folgenden Liste in aufsteigender Reihenfolge anordnen: (20, 30, 10, 40). Diese
Elemente sollten vom kleinsten zum grten sortiert werden. Der BubbleSort-Algorithmus
versucht, diese Aufgabe in einem oder mehreren Durchlufen zu lsen, wobei die Liste der
Elemente in jedem Durchlauf vollstndig berprft wird. Wenn der Algorithmus Elemente
erkennt, die sich nicht in der richtigen Reihenfolge befinden, werden sie getauscht. Der
Algorithmus wird beendet, wenn die gesamte Liste berprft wurde, ohne dass Elemente
getauscht wurden. Wenn keine Elemente getauscht wurden, bedeutet dies, dass sie sich in
der richtigen Reihenfolge befinden und die Liste vollstndig sortiert wurde.
Tabelle 3-1
Erster Durchlauf mit
BubbleSort

Schritt Vorher

Nachher

Kommentare

20, 30, 10, 40

20, 30, 10, 40

Der Algorithmus vergleicht die ersten


zwei Elemente (20 und 30). Da sie sich
in der richtigen Reihenfolge befinden,
mssen sie nicht getauscht werden.

20, 30, 10, 40

20, 10, 30, 40

Der Algorithmus vergleicht die nchsten


zwei Elemente (30 und 10). Da sie
sich nicht in der richtigen Reihenfolge
befinden, werden sie getauscht.

20, 10, 30, 40

20, 10, 30, 40

Der Algorithmus vergleicht die nchsten


zwei Elemente (30 und 40). Da sie sich
in der richtigen Reihenfolge befinden,
mssen sie nicht getauscht werden.

WEITERE INFORMATIONEN

bersichtliche
Tabellen

.NET Framework stellt drei Hauptkomponenten zur Verfgung: eine Umgebung fr die Laufzeitausfhrung,
einen Satz von Klassenbibliotheken, der viele wiederverwendbare Funktionen bereitstellt und einen
Sprachcompiler fr C#, Visual Basic und verwaltetem C++. .NET Framework untersttzt mehrere
Programmiersprachen sowie das Hinzufgen zustzlicher Sprachen zum System. Obwohl die Syntax
und das Vokabular der einzelnen Sprachen unterschiedlich sein knnen, kann jede Sprache die vom
Framework bereitgestellten Basisklassenbibliotheken verwenden.

Hilfe fr den Leser


vom Typ Weitere
Informationen

Wie in Tabelle 3-1 ersichtlich ist, wurde vom BubbleSort-Algorithmus am Ende des ersten
Durchlaufs ein Tausch vorgenommen, und es ist mglich, dass die Elemente nicht noch
richtig sortiert sind. Daher fhrt BubbleSort einen weiteren Durchlauf fr die Liste durch
(siehe Tabelle 3-2).
Tabelle 3-2
Zweiter Durchlauf mit
BubbleSort

Schritt Vorher

Nachher

Kommentare

20, 10, 30, 40

10, 20, 30, 40

Der Algorithmus vergleicht die ersten


zwei Elemente (20 und 10). Da sie
sich nicht in der richtigen Reihenfolge
befinden, werden sie getauscht.

10, 20, 30, 40

10, 20, 30, 40

Der Algorithmus vergleicht die nchsten


zwei Elemente (20 und 30). Da sie sich
in der richtigen Reihenfolge befinden,
mssen sie nicht getauscht werden.

10, 20, 30, 40

10, 20, 30, 40

Der Algorithmus vergleicht die nchsten


zwei Elemente (30 und 40). Da sie sich
in der richtigen Reihenfolge befinden,
mssen sie nicht getauscht werden.

www.wiley.com/college/microsoft oder
gebhrenfreie MOAC-Rufnummer: 1+(888) 764-7001 (nur USA und Kanada)

x | Illustrierte
Lesson 1 Fhrung durch das Lehrbuch

68 | Lektion 3

Grundlegendes zu Softwaretests
Bei Softwaretests wird berprft, ob die Implementierung den Anforderungen des
Systems entspricht.
In der Softwaretestphase wird die Qualitt des Endprodukts sichergestellt. Es werden
mgliche Diskrepanzen zwischen den im Anforderungsdokument beschriebenen
Erwartungen und dem tatschlichen Verhalten identifiziert.
Die Tester zhlen zu den wichtigsten Mitarbeitern in der Softwaretestphase. Sie
berprfen die funktionierende Anwendung, um sicherzustellen, dass sie die festgelegten
Anforderungen erfllt. Wenn diese Tester Fehler in der Anwendung erkennen, weisen
sie den jeweiligen Fehler dem Mitarbeiter zu, der ihn am besten beheben kann.
Beispielsweise wird ein Codefehler wieder einem Entwickler zugewiesen, damit er den
Fehler beheben kann.

Grundlegendes zur Releaseverwaltung

Die Releaseverwaltung dient dazu, die Installation, Bereitstellung und Untersttzung


der Softwareversionen zu verwalten.
Die Releaseverwaltung umfasst Aktivitten wie Verpacken und Bereitstellen der Software,
Verwalten von Softwarefehlern und Verwalten von Softwarenderungsanforderungen.
In der Phase der Releaseverwaltung spielen die folgenden Personen die wichtigste Rolle:
Releasemanager: Der Releasemanager koordiniert verschiedene Teams und
Geschftseinheiten, um die zeitgerechte Verffentlichung eines Softwareprodukts
zu gewhrleisten.
Bedienungspersonal: Diese Mitarbeiter stellen sicher, dass das System wie zugesagt
geliefert wird. Diese Aktivitt knnte zum Beispiel folgende Aufgaben umfassen:
Brennen von DVDs und ihr Versand bei Bestellungseingang oder die fortlaufende
Unterhaltung eines SaaS (Software as a Service)-Systems. Das Bedienungspersonal
ist auch fr die Verffentlichung von Systemupdates (z. B. Fehlerkorrekturen oder
neue Funktionen) verantwortlich.
Mitarbeiter des technischen Supports: Diese Mitarbeiter interagieren mit den
Kunden und geben ihnen Hilfestellung bei der Behebung von Problemen mit ihrem
System. Der technische Support kann ntzliche Metriken dazu erstellen, welche
Bereiche des Systems fr Benutzer am schwierigsten sind und mglicherweise
in der nchsten Version der Anwendung aktualisiert werden mssen.

BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie die
AnwendungslebenszyklusVerwaltung und ihre
Aktivitten?
3.1

Grundlegendes zu Softwaretests
FAZIT

Schrittweise bungen

Bei Softwaretests wird die Software im Hinblick auf die festgelegten Anforderungen
geprft. Die Tests werden nach Abschluss der meisten Entwicklungsarbeiten
durchgefhrt.
Wie bereits erwhnt, wird bei Softwaretests berprft, ob eine Softwareanwendung
erwartungsgem funktioniert und alle geschftlichen und technischen Anforderungen
erfllt. Wenn das erwartete Verhalten vom tatschlichen Verhalten des Systems abweicht,
wird ein Softwarefehler protokolliert und schlielich an eine Person weitergeleitet, die fr
dessen Behebung verantwortlich ist.

46 | Lektion 2

wird von der Laufzeit festgestellt, dass die Inhalte nicht in der Variablen, sondern im
Speicherbereich gespeichert werden, auf den die Variable verweist.

Softwaretests knnen funktionale und nicht funktionale Tests umfassen. Funktionale


Tests beziehen sich auf die Funktionsanforderungen des Systems. Hierbei werden die

KOPIEREN VON WERT- UND VERWEISTYPEN


VERWENDEN Sie das Projekt, das Sie in der vorherigen bung gespeichert haben, um die
folgenden Schritte auszufhren:
1. Fgen Sie den folgenden Code nach der Rectangle-Klassendefinition hinzu, um eine
Point-Struktur zu erstellen:

Hinweis Bereit fr die


Zertifizierung

Hilfe fr den
Leser vom Typ
Hinweis

HINWEIS

Es ist mglich, eine


Struktur zu erstellen,
ohne den new-Operator
zu verwenden. Sie
knnen einfach mit
Point p1; eine Variable
des struct-Typs
erstellen.

Einfhrung in das Programmieren | 7


HINWEIS

Abbildung 1-3
Programmauflistung mit
Zeilennummern

Bildschirmabbildungen

Wenn Sie die Variable


eines Verweistyps in
eine andere Variable
des gleichen Typs
kopieren, werden nur
die Verweise kopiert.
Als Folge verweisen
beide Variablen nach
dem Kopiervorgang auf
das gleiche Objekt.

struct Point
{
public double X, Y;
}
2. ndern Sie den Code der Main-Methode folgendermaen:
static void Main(string[] args)
{
Point p1 = new Point();
p1.X = 10;
p1.Y = 20;
Point p2 = p1;
p2.X = 100;
Console.WriteLine(p1.X = {0}, p1.X);
Rectangle rect1 = new Rectangle
{ Length = 10.0, Width = 20.0 };
Rectangle rect2 = rect1;
rect2.Length = 100.0;
Console.WriteLine(rect1.Length = {0},
rect1.Length);
}
3. Whlen Sie Debuggen > Starten ohne Debuggen aus. Ein Konsolenfenster wird
geffnet und zeigt die Werte fr p1.X und rect1.Length an.
4. SPEICHERN Sie das Projekt.

PAUSE. Lassen Sie das Projekt zur Verwendung in der nchsten bung geffnet.
Hier erstellt der erste Teil des Programms eine Kopie des Werttyps Point, und der
zweite Teil erstellt eine Kopie des Verweistyps Rectangle.
Analysieren wir zunchst, wie die Kopie eines Werttyps erstellt wird. Wenn die folgende
Anweisung ausgefhrt wird, wird eine neue Variable p2 im Arbeitsspeicher erstellt, und
der Inhalt wird aus der Variablen p1 kopiert:
Point p2 = p1;

REF

Weitere Informationen
zu Klassen erhalten Sie
in Lektion 2.

REF

Weitere Informationen
zu Methoden erhalten
Sie in Lektion 2.

HINWEIS

Jeder C#-Anweisung
muss mit einem
Semikolon (;)
abgeschlossen werden.

Ein C#-Programm besteht aus mindestens einer Klasse. Eine Klasse ist eine Sammlung
von Daten und Methoden. So definiert beispielsweise der Code aus Abbildung 1-3
eine einzelne Klasse namens Program bestehend aus den Zeilen fnf bis elf. Eine
Klasse wird mittels des Schlsselworts class, gefolgt vom Klassennamen, definiert.
Der Inhalt einer Klasse wird zwischen einer ffnenden geschweiften Klammer ({) und
einer schlieenden geschweiften Klammer (}) definiert.
Zeile 3 des Codes aus Abbildung 1-3 definiert einen Namespace namens Lesson01.
Namespaces werden verwendet, um Klassen zu organisieren und eindeutig zu identifizieren.
Der Namespace und die Klassennamen bilden zusammen einen vollqualifizierten
Klassennamen. Der vollqualifizierte Klassenname der Program-Klasse lautet beispielsweise
Lesson01.Program. C# erfordert, dass der vollqualifizierte Name einer Klasse eindeutig
ist. Infolgedessen ist eine weitere Klasse mit Namen Program im Namespace Lesson01
nicht mglich, dafr eine Klasse namens Program in einem anderen Namespace,
beispielsweise Lesson02, schon. Hier ist die im Namespace Lesson02 definierte
Klasse Program eindeutig ber den vollqualifizierten Klassennamen Lesson02.
Program identifizierbar.

Nachdem diese Anweisung ausgefhrt wurde, wird die Variable p2 erstellt, und der
Inhalt von Variable p1 wird in Variable p2 kopiert. p1 und p2 besitzen eigene
Wertestze in den jeweiligen Speicherbereichen. Wenn folglich die folgende Anweisung
ausgefhrt wird:
p2.X = 100;

wirkt sich dies nur auf den Wert X aus, der dem Speicherbereich der Variablen p2
entspricht. Der Wert X fr die Variable p1 bleibt unberhrt.

Von .NET Framework wird eine Vielzahl an ntzlichen Klassen bereitgestellt, die
in viele Namespaces eingeordnet sind. Der System-Namespace enthlt einige der am
hufigsten verwendeten Basisklassen. Eine solche Klasse im System-Namespace ist die
Console-Klasse. Die Console-Klasse bietet Funktionen fr die Ein-und Ausgabe von
Daten in die Konsolenanwendung. Zeile 9 des Codes aus Abbildung 1-3 bezieht sich auf
die Console-Klasse und ruft dessen WriteLine-Methode auf. Fr einen eindeutigen Zugriff
auf die WriteLine-Methode mssen Sie den Code in etwa wie folgt schreiben:
System.Console.WriteLine ("Hallo Welt!");

Klassennamen tauchen des fteren im Code auf. Dann jedes Mal den vollqualifizierten
Klassennamen schreiben zu mssen, ist mhsam und macht das Programm
unbersichtlich. Zu Lsung des Problems knnen Sie die C#-Direktive using einsetzen
(siehe Code in Zeile 1, Abbildung 1-3). Mit der using-Direktive knnen Sie Klassen auch
ohne vollqualifizierten Namen in einem Namespace verwenden.
Die Program-Klasse definiert eine einzelne Methode ber den Namen Main (siehe Zeile
7 bis 10 des Code in Abbildung 1-3). Main ist eine besondere Methode, da sie auch
als Einstiegspunkt in ein Programm dient. Wenn die Laufzeit ein Programm ausfhrt,

www.wiley.com/college/microsoft oder
gebhrenfreie MOAC-Rufnummer: 1+(888) 764-7001 (nur USA und Kanada)

Illustrierte Fhrung durch das Lehrbuch | xi

Allgemeine Grundlagen der Softwareentwicklung | 69

Funktionen getestet, die die Basisfunktionalitt des Systems ausmachen. Beispielsweise


werden Tests durchgefhrt, ob Benutzer Waren zu einem Warenkorb hinzufgen knnen.
Diese Tests sind wichtige Funktionstests fr eine E-Commerce-Website. Im Vergleich
dazu beinhalten nicht funktionale Tests das Testen von Softwareattributen, die nicht zur
Basisfunktionalitt gehren, sondern vielmehr zu den nicht funktionalen Anforderungen
der Software, wie Skalierbarkeit, Benutzerfreundlichkeit und Sicherheit.

HINWEIS

Es gilt zu beachten, dass in der Softwaretestphase nur Fehler gefunden werden knnen,
aber es kann nicht garantiert werden, dass keine Fehler vorliegen. Komplexe Software
verfgt ber eine sehr groe Anzahl von mglichen Ausfhrungspfaden und viele
Parameter, die das Verhalten beeinflussen knnen. Es ist nicht realisierbar und hufig
auch nicht mglich, alle verschiedenen Situationen, auf die eine solche Software trifft,
in einer Produktionsumgebung zu testen.

Hilfe fr den Leser vom


Typ Hinweis

Grundlegendes zu Testmethoden
Softwaretestmethoden werden im Allgemeinen in zwei Kategorien unterteilt:
White-Box- und Black-Box-Tests.
Traditionell gibt es zwei umfassende Methoden fr Softwaretests:
Black-Box-Test
White-Box-Test
Bei Black-Box-Tests wird die Software als Black Box behandelt und der Schwerpunkt auf
Eingaben und Ausgaben gelegt. Bei dieser Testmethode werden keine Kenntnisse ber die
innere Funktionsweise des zu testenden Systems angewendet. Im Gegensatz dazu nutzen die
Tester bei White-Box-Tests ihre Kenntnisse ber die innere Funktionsweise des zu testenden
Systems. Beispielsweise haben die Tester bei White-Box-Tests Zugriff auf den Quellcode.
Diese zwei Testmethoden ergnzen sich. Mit Black-Box-Tests wird in der Regel
sichergestellt, dass eine Softwareanwendung alle festgelegten Anforderungen erfllt.
Mit White-Box-Tests wird dagegen sichergestellt, dass fr jede Methode oder Funktion
entsprechende Testflle verfgbar sind.

Zusammenfassung der
vermittelten Kenntnisse

Grundlegendes zu Teststufen
Die Tests werden in verschiedenen Lebenszyklusphasen der Anwendungsentwicklung
durchgefhrt. Verschiedene Teststufen geben an, welche Tests in welcher Phase im
Lebenszyklus durchgefhrt werden.
Teststufen werden dadurch definiert, in welcher Phase im Softwareentwicklungslebenszyklus
die Tests durchgefhrt werden. Es gibt fnf verschiedene Teststufen:

Grundlegendes zu Datenbanken | 173

Komponententest: Bei Komponententests wird die Funktionalitt einer Codeeinheit


berprft. Beispielsweise kann bei einem Komponententest bewertet werden,
ob eine Methode den richtigen Wert zurckgibt. Ein Komponententest ist ein
White-Box-Test und wird hufig von dem Entwickler durchgefhrt, der den Code
schreibt. Bei Komponententests wird hufig ein automatisiertes Tool verwendet,
das die Entwicklung von Fllen vereinfachen und auch nachverfolgen kann, ob
eine Codenderung zu einem Fehlschlagen von vorhandenen Komponententests
fhrt. Visual Studio verfgt ber integrierte Untersttzung fr Komponententests.
Sie knnen Open Source-Tools wie NUnit auch zum Automatisieren von
Komponententests fr den .NET Framework-Code verwenden.
Integrationstest: Bei Integrationstests wird die Schnittstelle zwischen den
Softwarekomponenten geprft. Integrationstests knnen whrend der Entwicklung

ZUSAMMENFASSUNG DER VERMITTELTEN KENNTNISSE


In dieser Lektion haben Sie Folgendes gelernt:
In einer relationalen Datenbank werden Informationen in Tabellen organisiert. Eine
Tabelle ist eine Liste mit Zeilen und Spalten.
Das Entwerfen relationaler Datenbanken ist der Prozess zur Bestimmung der
passenden relationalen Datenbankstruktur, mit der die Geschftsanforderungen
erfllt werden knnen.
Entittsbeziehungsdiagramme werden zur Modellierung von Entitten, deren
Attributen und den Beziehungen zwischen Entitten verwendet. Mithilfe der
Entittsbeziehungsdiagramme knnen Sie bestimmen, welche Daten in einer
Datenbank gespeichert werden mssen.
Der Datennormalisierungsprozess stellt sicher, dass ein Datenbankentwurf keine
Fehler enthlt, die zum Verlust der Datenintegritt fhren knnen. Die meisten
Entwurfsprobleme knnen gelst werden, indem sichergestellt wird, dass die
Tabellen die Anforderungen der dritten Normalform erfllen.
Structured Query Language (SQL) enthlt Anweisungen wie z. B. SELECT, INSERT,
UPDATE und DELETE, um mit relationalen Daten zu arbeiten.
Eine gespeicherte Prozedur besteht aus einer Anzahl von SQL-Anweisungen,
die in einer Datenbank gespeichert sind. Gespeicherte Prozeduren knnen
von mehreren Anwendungen verwendet werden.
Die XmlReader-Klasse und die XmlWriter-Klasse bieten eine schnelle, Vorwrtsmethode
zum Lesen oder Schreiben von XML-Daten ohne Zwischenspeicherung. Die
XmlDocument-Klasse ist eine In-Memory-Darstellung von XML-Daten und ermglicht
die Navigation im XML-Dokument und dessen Bearbeitung.
Die DataSet-Klasse stellt eine In-Memory-Darstellung von relationalen Daten dar.
Die DataAdapter-Klasse fungiert als Brcke zwischen Datenquelle und DataSet.
Der DataAdapter speichert die Datenverbindung und die Datenbefehle zum
Herstellen einer Verbindung mit der Datenquelle.

64 | Lektion 2

Wissenstest

Kompetenztest

Wissenstest
Lckentext
Ergnzen Sie die Lcken der folgenden Stze mit dem richtigen Wort oder den richtigen Wrtern.

Szenario 2-1: Erstellen von Eigenschaften

1. Eine Tabelle in der _______________ darf in keiner Spalte mehrere Werte in


derselben Datenreihe enthalten.

Sie mssen eine Klasse namens Product erstellen, die ein Produkt darstellt. Die Klasse
hat eine einzige Eigenschaft namens Name. Benutzer der Product-Klasse sollen den Wert
der Name-Eigenschaft abrufen und festlegen knnen. Allerdings soll jeder Versuch, den
Wert von Name auf eine leere Zeichenfolge oder auf einen Nullwert festzulegen, eine
Ausnahme auslsen. Auerdem sollen die Benutzer der Product-Klasse auf keine anderen
Datenmember der Product-Klasse zugreifen knnen. Wie erstellen Sie so eine Klasse?

2. In der _______________ mssen alle Nichtschlsselspalten funktional vom


gesamten Primrschlssel abhngig sein.
3. In der _______________ darf keine funktionale Abhngigkeit zwischen
Nichtschlsselattributen bestehen.

Szenario 2-2: Erstellen einer Struktur

4. Die grundlegenden Entwurfsblcke in einem Entittsbeziehungsdiagramm sind


_______________, _______________ und _______________.

Sie entwickeln ein Spiel, in dem der Standort eines Ziels im dreidimensionalen Raum
dargestellt werden muss. Der Standort wird mithilfe von drei ganzzahligen Werten
identifiziert, die als x, y und z bezeichnet werden. Sie erstellen tausende dieser Strukturen
im Programm, und Sie bentigen eine leichte, effiziente Mglichkeit zur Speicherung dieser
Daten im Arbeitsspeicher. Auerdem ist es unwahrscheinlich, dass Sie andere Typen aus
diesem Standorttyp vererben mssen. Wie mssen Sie den Standort im Programm darstellen?

5. Die _______________-Klausel in einer SELECT-Anweisung berprft jede Zeile


auf eine Bedingung und entscheidet ber die Aufnahme in das Resultset.
6. Das mit der using-Anweisung verwendete Objekt muss die Schnittstelle
_______________ implementieren.
7. Die _______________-Anweisung aus T-SQL kann zur Erstellung einer
gespeicherten Prozedur verwendet werden.

Kenntnistest
Szenario 2-1: berschreiben der ToString-Methode
Angenommen, Sie schreiben Code fr eine Product-Klasse. Die Product-Klasse enthlt
den Namen und den Preis eines Produkts. Sie mssen die Methode ToString der
Basisklasse (System.Object) berschreiben, um dem aufrufenden Code Informationen
ber die Objekte der Product-Klasse bereitstellen zu knnen. Welchen Code mssen Sie
fr die Product-Klasse schreiben, damit diese Anforderung erfllt wird?

Szenario 2-2: Erstellen und Behandeln von Ereignissen


Stellen Sie sich vor, Sie schreiben Code zur Erstellung und Behandlung von Ausnahmen
in Ihrem Programm. Die Klasse SampleClass muss die folgende Schnittstelle
implementieren:

Fallszenarien

public delegate void SampleDelegate();


public interface ISampleEvents
{
event SampleDelegate SampleEvent;
void Invoke();
}

Sie mssen Code fr SampleClass und fr eine Testmethode schreiben, die eine Instanz
von SampleClass erstellt und das Ereignis aufruft. Welchen Code mssen Sie schreiben?

www.wiley.com/college/microsoft oder
gebhrenfreie MOAC-Rufnummer: 1+(888) 764-7001 (nur USA und Kanada)

In diesem Buch verwendete


Hervorhebungen und Konventionen
In diesem Buch werden wichtige Informationen und spezielle Schritte durch bestimmte
Schriftarten, Symbole und berschriftskonventionen hervorgehoben. Weitere
Informationen zu den Hervorhebungen in den Lektionen finden Sie im Abschnitt
Illustrierte Fhrung durch das Lehrbuch.

Konvention

Bedeutung


Kurze Zusammenfassung der Inhalte des folgenden
Abschnitts.

FAZIT

BEREIT FR DIE ZERTIFIZIERUNG 


Weist auf eine Textstelle hin, die ein spezielles

Zertifizierungsziel behandelt. Damit erhalten Sie die


Mglichkeit, Ihr Verstndnis eines bestimmten
MTA-Ziels zu berprfen und den entsprechenden Abschnitt
gegebenenfalls noch einmal zu wiederholen.

Hilfen fr den Leser werden in einem schattierten Feld am
HINWEIS*
*
Textrand angezeigt. Die Hilfe fr den Leser vom Typ Hinweis
bietet hilfreiche Tipps im Zusammenhang mit bestimmten
Aufgaben oder Themen.
Diese Querverweise verweisen auf Informationen, die an
REF
anderer Stelle im Lehrbuch errtert wurden, oder beschreiben interessante Besonderheiten, die im aktuellen
Thema oder in der bung nicht direkt behandelt werden.

Alt + Tab Ein Pluszeichen (+) zwischen zwei Tastennamen bedeutet,

dass beide Tasten gleichzeitig gedrckt werden mssen.


Tasten, die Sie whrend einer bung drcken mssen,
werden in der hier angezeigten Schriftart dargestellt.

Beispiel

xii |

Wichtige Begriffe sind fett und kursiv formatiert, wenn sie


definiert werden.

www.wiley.com/college/microsoft oder
gebhrenfreie MOAC-Rufnummer: 1+(888) 764-7001 (nur USA und Kanada)

Programm zur Untersttzung der Kursleiter

Die Microsoft Official Academic Course-Programme werden durch eine groe Auswahl
an Ressourcen, wie unter anderem illustrierte Lehrbcher, begleitet und bilden so
ein schlssiges didaktisches Paket. Diese Ressourcen bieten alle Materialien, die ein
Kursleiter fr den Unterricht bentigt. Zu den online erhltlichen Ressourcen gehren:
Die MSDN Academic Alliance stellt einfache und preiswerte Entwicklertools,
Produkte und Technologien fr Kursleiter und Teilnehmer zur Verfgung, die fr
bungen, im Schulungsraum und auf den PCs der Kursteilnehmer verwendet werden
knnen. Qualifizierte MOAC-Anwender erhalten eine Drei-Jahres-Mitgliedschaft.
Hinweis: Microsoft Windows Server 2008, Microsoft Windows 7 und Microsoft
Visual Studio knnen zur Verwendung in diesem Kurs von den Kursteilnehmern von
MSDN AA heruntergeladen werden.
Das Kursleiterhandbuch enthlt Lsungen fr alle bungen im Lehrbuch sowie
Lehrplne fr verschiedene Kurszeitrume. Es enthlt zudem Zusammenfassungen
der Kapitel und Lektionshinweise. Das Kursleiterhandbuch ist auf der Website mit
Begleitmaterialien (http://www.wiley.com/college/microsoft) erhltlich.
Die Testdatenbank enthlt hunderte Fragen unterschiedlicher Art (Multiple-Choiceund Richtig/Falsch-Fragen, Fragen mit Kurzantwort und ausfhrlicher Antwort) und
steht zum Download auf der Website mit Begleitmaterialien fr Kursleiter (www.
wiley.com/college/microsoft) zur Verfgung. Hier wird auch ein vollstndiger
Lsungsschlssel angeboten.
Fr gute Prsentationen im Schulungsraum steht ein vollstndiger Satz von
PowerPoint-Prsentationen und Bildern auf der Website mit Begleitmaterialien
fr Kursleiter (http://www.wiley.com/college/microsoft) zur Verfgung. Fr jede
Lektion werden rund 50 PowerPoint-Folien bereitgestellt. Diese Prsentationen
sind zugeschnitten auf die textlichen Inhalte und die Themen und Lernziele und
sollen die wichtigsten Konzepte vermitteln. Alle im Text verwendeten Bilder stehen
auf der Website mit Begleitmaterialien fr Kursleiter zur Verfgung (http://www.
wiley.com/college/microsoft). Sie knnen die Bilder entweder in Ihre PowerPointPrsentationen integrieren oder eigene Overheadfolien und Handzettel erstellen.
Indem Sie diese Bilder als Diskussionsgrundlage verwenden, richten Sie die
Aufmerksamkeit der Kursteilnehmer auf die wichtigsten im Kurs behandelten
Technologien und auf deren effektiven Einsatz am Arbeitsplatz.
Wenn Sie eine mglichst hohe Schulungsqualitt erzielen mchten, gibt es keine
bessere Ideen- und Inspirationsquelle als Kollegen. Das Wiley Faculty Network
bringt Kursleiter und Technologien zusammen, erleichtert den Austausch von
bewhrten Verfahren und erhht die didaktische Effizienz. Zu den Aktivitten
des Faculty Network gehren Schulungen und Lernprogramme zu bestimmten
Technologien, virtuelle Seminare, der Austausch von Erfahrungen und Ideen unter
Gleichgesinnten, persnliche Beratung und gemeinsame Nutzung von Ressourcen.
Weitere Informationen erhalten Sie unter www.WhereFacultyConnect.com.

www.wiley.com/college/microsoft oder
gebhrenfreie MOAC-Rufnummer: 1+(888) 764-7001 (nur USA und Kanada)

| xiii

xiv | Programm zur Untersttzung der Kursleiter

MSDN ACADEMIC ALLIANCE KOSTENLOSE


DREI-JAHRES-MITGLIEDSCHAFT FR QUALIFIZIERTE ANWENDER!
Die Microsoft Developer Network Academic Alliance (MSDN AA) ist die einfachste
und preiswerteste Mglichkeit fr Universitten, um die neuesten Entwicklertools,
Produkte und Technologien von Microsoft in bungen, Schulungsrumen und auf
den PCs der Kursteilnehmer verfgbar zu machen. Das MSDN AA-Programm
mit jhrlicher Mitgliedschaft richtet sich an Institute, die Mathematik, Informatik,
Naturwissenschaften und Technik (MINT-Fcher) lehren. Die Mitgliedschaft bietet
eine Komplettlsung, damit die akademischen Labore, Fakultten, Dozenten und
Studenten auf dem neuesten Stand der Technik bleiben.
Die im Rahmen des MSDN AA-Programms vorhandene Software wird den in Frage
kommenden Fakultten von der Wiley/Microsoft-Verlagspartnerschaft kostenfrei zur
Verfgung gestellt.
Zustzlich zu diesem kostenfreien Angebot erhlt die Fakultt Zugang zum
Faculty Connection and Academic Resource Center von Microsoft. Es braucht
Zeit und Vorbereitung, um das Interesse der Studenten zu halten und ihnen ein
grundlegendes Verstndnis der Theorie zu vermitteln. Die Microsoft Faculty
Connection ist darauf ausgerichtet, Dozenten und Professoren der MINT-Fcher
durch die Bereitstellung von Artikeln, Lehrstoffen und Tools bei dieser Aufgabe
zu untersttzen, um die heutigen Studenten technischer Fcher zu motivieren
und zu inspirieren.
* Details dazu erhalten Sie von Ihrem Wiley-Vertreter.
Weitere Informationen ber das MSDN Academic Alliance-Programm finden Sie
unter:
http://msdn.microsoft.com/academic/
Hinweis: Microsoft Windows Server 2008, Microsoft Windows 7 und Microsoft
Visual Studio knnen zur Verwendung in diesem Kurs von den Kursteilnehmern von
MSDN AA heruntergeladen werden.

Wichtige Webadressen und Telefonnummern

Den Wiley-Vertreter fr Hochschulbildung in Ihrer Nhe finden Sie unter


http://www.wiley.com/college. Klicken Sie auf den Link Whos My Rep?
imoberen Seitenbereich, oder whlen Sie die gebhrenfreie MOAC-Nummer:
1+(888) 764-7001 (nur USA und Kanada).
Weitere Informationen ber die Microsoft Certified Technology Specialist-Zertifizierung
und die Prfung finden Sie unter www.microsoft.com/learning/mcp/mcp.

www.wiley.com/college/microsoft oder
gebhrenfreie MOAC-Rufnummer: 1+(888) 764-7001 (nur USA und Kanada)

Programm zur Untersttzung der Kursteilnehmer

Zustzliche Ressourcen

Website mit Begleitmaterialien (www.wiley.com/college/microsoft)


Die Website mit Begleitmaterialien zur MOAC-Reihe fr Kursteilnehmer enthlt alle Ressourcen,
Trainingsdateien und Weblinks, die in Verbindung mit diesem Kurs verwendet werden.

Wiley Desktop Editions


Bei den Wiley Desktop Editions zur MOAC-Reihe handelt es sich um aktuelle elektronische
Versionen der gedruckten Lehrbcher. Die Kursteilnehmer sparen bei Erwerb der Desktop
Edition bis zu 50 % (des in den USA geltenden Verkaufspreises) im Vergleich zur gedruckten
Ausgabe. Dafr erhalten sie ein langlebiges Lehrbuch, das sich berall hin mitnehmen lsst.
Die Wiley Desktop Editions bieten den Kursteilnehmern zahlreiche Zusatzleistungen, auf die
sie bei anderen elektronischen Lehrbuchlsungen verzichten mssen.
Die Wiley Desktop Editions werden nicht auf Abonnementbasis vertrieben. Vielmehr knnen
die Kursteilnehmer die Lehrbcher direkt auf ihren Computer herunterladen. Damit erwerben sie
Besitz an den Bchern und knnen die Inhalte beliebig lange nutzen. Mit dem Download einer
Wiley Desktop Edition auf den Computer erhalten die Kursteilnehmer unmittelbaren Zugriff auf
alle Inhalte, ohne online sein zu mssen. Wenn sie Teile des Buchs bevorzugt in Papierform lesen,
knnen sie sich diese auch ausdrucken. Die Kursteilnehmer haben zudem Zugriff auf die in die
Wiley Desktop Editions integrierten Unterrichtsmaterialien. Durch Markierungen im Text und
Einfgen und Austauschen von Notizen knnen sie ihre elektronische Ausgabe beim Lesen oder
im Kurs mhelos personalisieren.

Info ber die Microsoft Technology Associate


(MTA)-Zertifizierung

Vorbereiten von Mitarbeitern auf Technologien von morgen


Nahezu alle Unternehmen weltweit sind von der aktuellen Technologie geprgt. Es wird
immer wichtiger, sich Grundkenntnisse ber die Funktionsweise der Informationstechnologie
anzueignen und ihre Auswirkungen auf ein modernes Arbeitsumfeld in Wissenschaft und
Wirtschaft zu verstehen, insbesondere fr Menschen, die sich fr informationstechnisch
ausgerichtete Berufe interessieren. Darum hat Microsoft die Microsoft Technology Associate
(MTA)-Zertifizierung ins Leben gerufen. Das ist ein neues Einsteigerzertifikat, das
grundlegendes IT-Wissen bescheinigt. Es eignet sich fr Teilnehmer, die sich in einem Beruf
mit informationstechnischer Ausprgung etablieren mchten.
Die Microsoft Technology Associate (MTA)-Zertifizierung ebnet den Weg zu weiteren
weltweit anerkannten Zertifizierungsprogrammen wie Microsoft Certified Technology
Specialist (MCTS) und Microsoft Certified IT Professional (MCITP). Die MTA-Zertifizierung
ist das fhrende Zertifikat fr Menschen, die sich in einem IT-Beruf oder einem hnlichen
Bereich mit starker informationstechnischer Ausprgung etablieren mchten.
www.wiley.com/college/microsoft oder
gebhrenfreie MOAC-Rufnummer: 1+(888) 764-7001 (nur USA und Kanada)

| xv

xvi | Programm zur Untersttzung der Kursteilnehmer

MTA-Kandidatenprofil
Das MTA-Zertifizierungsprogramm ist speziell fr Interessenten mit mittlerem
oder hherem Bildungsabschluss geeignet, die in einem wissenschaftlichen oder
wirtschaftlichen Umfeld im IT-Bereich arbeiten mchten. Es bietet den Teilnehmern
eine Zertifizierung fr IT-Grundlagen und Grundlagen der Softwareentwicklung. Als
neuer empfohlener Einstiegspunkt in die Zertifizierungen fr Microsoft-Technologien
richtet sich die MTA-Zertifizierung speziell an Personen ohne Vorkenntnisse. Sie
kann ausschlielich in Bildungseinrichtungen erworben werden und lsst sich leicht in
bestehende Lehrplne integrieren.

MTA zur Untersttzung der Kursleiter und Motivation der Teilnehmer


MTA setzt einen neuen Standard zur Messung und berprfung grundlegender
IT-Kenntnisse direkt im Schulungsraum, ohne Budget und Lehrkrfte zu belasten.
Institutionen, die die anspruchsvollen MTA-Zertifizierungsprfungen anbieten,heben
sich durch Innovation von anderen Anbietern in der Branche ab. Die erschwingliche
Prfungsreihe fhrt auf einfache und praktische Weise zu verschiedenen
IT-Einsteigerzertifikaten. DerMTA-Abschluss bietet den Kursteilnehmern die Mglichkeit,
ohne grere zeitliche Investitionen berufliche Perspektiven im IT-Sektor auszuloten und
schafft die Grundlage und das Vertrauen fr das erfolgreiche Bestehen von Aufbaukursen
sowie fr knftige berufliche Vorhaben.
Den Kursteilnehmern wird mit dem MTA-Abschluss neben ihrer ersten MicrosoftZertifizierung ein Sprungbrett fr weitere, fortgeschrittene IT-Leistungsnachweise
geboten, so z. B. die Microsoft Certified Technology Specialist (MCTS)-Zertifizierung.

Anbieten von MTA-Prfungen: Die MTA-Campuslizenz


Die Einfhrung eines neuen Zertifizierungsprogramms war fr Schulungsanbieter noch
nie so einfach wie mit der MTA-Campuslizenz. Durch eine Jahreslizenz fr den MTACampus entfllt die Notwendigkeit von Budgetantrgen und des wiederholten Erwerbs von
Prfungsgutscheinen. Ab jetzt knnen Sie fr eine geringe Jahrespauschale nach Belieben
MTA-Prfungen fr die Kursteilnehmer und Dozenten Ihrer Bildungseinrichtung anbieten.
Mit der MTA-Campuslizenz knnen Sie bequem und kostengnstig IT-Einsteigerzertifikate
verleihen, die die Dozenten untersttzen und die Kursteilnehmer motivieren, da sie das
Fundament fr ihre berufliche Zukunft bilden.
Die MTA-Campuslizenz ist erhltlich bei Certiport, dem exklusiven Anbieter fr
Microsoft MTA-Prfungen.
Weitere Informationen zur Microsoft Technology Associate-Zertifizierung und zu den
Prfungen finden Sie unter www.microsoft.com/learning/mta.

www.wiley.com/college/microsoft oder
gebhrenfreie MOAC-Rufnummer: 1+(888) 764-7001 (nur USA und Kanada)

Programm zur Untersttzung der Kursteilnehmer | xvii

Aktivieren Sie den kostenlosen MTA-bungstest!

Durch den Kauf dieses Buchs sind Sie zur Teilnahme an einem kostenlosen MTA-bungstest
(im Wert von 30 USD) von GMetrix berechtigt. Rufen Sie die Website www.gmetrix.com/
mtatests auf, und geben Sie den folgenden Validierungscode ein, um Ihren kostenlosen Test
einzulsen: MTA98-361-A19875B7D810
Mit GMetrix Skills Management System erhalten Sie alles, was Sie zum ben fr die
Microsoft Technology Associate (MTA)-Zertifizierung bentigen.
Testmerkmale im berblick:
Auf die Microsoft Technology Associate (MTA)-Prfungsziele ausgerichtete
bungstests
GMetrix MTA-bungstests simulieren die tatschliche MTA-Testumgebung
ber 50 Fragen decken alle Lernziele ab
Fortschritt im eigenen Tempo, Test zum spteren Fortfahren sichern, zu
bersprungenen Fragen zurckkehren
Detaillierter, druckbarer Ergebnisbericht mit markierten Bereichen zur weiteren
berprfung
Um eine optimale MTA-Vorbereitung zu erhalten, knnen Sie noch heute den kostenlosen
MTA-bungstest von GMetrix machen!
Wenn Sie Support bei technischen Problemen bei der Installation oder Codeaktivierung
bentigen, senden Sie eine E-Mail an support@gmetrix.com.

www.wiley.com/college/microsoft oder
gebhrenfreie MOAC-Rufnummer: 1+(888) 764-7001 (nur USA und Kanada)

Danksagung

MOAC MTA IT-Grundlagen Bearbeiter

Wir mchten den vielen Bearbeitern danken, die das Manuskript eingehend geprft und uns im Dienste qualitativ
hochwertiger Unterrichtsmaterialien ihr wertvolles Feedback bermittelt haben:
Yuke Wang, University of Texas in Dallas
Palaniappan Vairavan, Bellevue College
Harold Buz Lamson, ITT Technical Institute
Colin Archibald, Valencia Community College
Catherine Bradfield, DeVry University Online
Robert Nelson, Blinn College
Kalpana Viswanathan, Bellevue College
Bob Becker, Vatterott College
Carol Torkko, Bellevue College
Bharat Kandel, Missouri Tech
Linda Cohen, Forsyth Technical Community College
Candice Lambert, Metro Technologiezentren
Susan Mahon, Collin College
Mark Aruda, Hillsborough Community College
Claude Russo, Brevard Community College

xviii |

David Koppy, Baker College


Sharon Moran, Hillsborough Community College
Keith Hoell, Briarcliffe College and Queens
College CUNY
Mark Hufnagel, Lee County School District
Rachelle Hall, Glendale Community College
Scott Elliott, Christie Digital Systems, Inc.
Gralan Gilliam, Kaplan
Steve Strom, Butler Community College
John Crowley, Bucks County Community College
Margaret Leary, Northern Virginia Community College
Sue Miner, Lehigh Carbon Community College
Gary Rollinson, Cabrillo College
Al Kelly, University of Advancing Technology
Katherine James, Seneca College

www.wiley.com/college/microsoft oder
gebhrenfreie MOAC-Rufnummer: 1+(888) 764-7001 (nur USA und Kanada)

Inhalte im berblick
1 Einfhrung in das Programmieren 1
2 Einfhrung in die objektorientierte Programmierung 32
3 Allgemeine Grundlagen der Softwareentwicklung 65
4 Grundlegendes zu Webanwendungen 85
5 Grundlegendes zu Desktopanwendungen 120
6 Grundlegendes zu Datenbanken 142
AnhangA 177
Index179

www.wiley.com/college/microsoft oder
gebhrenfreie MOAC-Rufnummer: 1+(888) 764-7001 (nur USA und Kanada)

|xix

Inhalt
Lektion 1: Einfhrung in das
Programmieren1
Lernzieltabelle 1
Schlsselbegriffe 1
Grundlegendes zur Computerprogrammierung 2
Einfhrung in die Algorithmen 2
Einfhrung in C# 4

Grundlegendes zu Entscheidungsstrukturen 11
Die if-Anweisung 11
Die if-else-Anweisung 13
Die switch-Anweisung 15

Erluterungen zur Vererbung 48


Grundlagen zu abstrakten und versiegelten Klassen 50
Erben von der Object-Klasse 51
Umwandlung zwischen Typen 52

Erluterungen zur Polymorphie 53


Grundlagen zu den Schlsselwrtern override
und new 55

Erluterungen zu Schnittstellen 56
Zusammenfassung der vermittelten Kenntnisse 58
Wissenstest59
Kompetenztest64
Kenntnistest64

Grundlegendes zu Wiederholungsstrukturen 17
Erluterungen zur while-Schleife 17
Erluterungen zur do-while-Schleife 19
Grundlegendes zur for-Schleife 20
Grundlegendes zur foreach-Schleife 21
Erluterungen zur Rekursion 22

Erluterungen zur Ausnahmebehandlung 23


Behandeln von Ausnahmen 24
Verwenden von try-catch-finally 25

Zusammenfassung der vermittelten Kenntnisse 26


Wissenstest27
Kompetenztest30
Kenntnistest31

Lektion 2: Einfhrung in die


objektorientierte
Programmierung32
Lernzieltabelle 32
Schlsselbegriffe 32
Erluterungen zu Objekten 33
Der objektorientierte Ansatz 33
Erluterungen zu Klassen 33

Erluterungen zu Werten und Verweisen 44


Grundlegendes zu Strukturen 44
Grundlegendes zur Speicherbelegung 45

Erluterungen zur Kapselung 47


Erluterung zu Zugriffsmodifizierern 48

Lektion 3: Allgemeine Grundlagen der


Softwareentwicklung65
Lernzieltabelle 65
Schlsselbegriffe 65
Grundlegendes zur
Anwendungslebenszyklus-Verwaltung66
Grundlegendes zur Anforderungsanalyse 66
Grundlegendes zum Entwurfsprozess 67
Grundlegendes zur Softwareentwicklung 67
Grundlegendes zu Softwaretests 68
Grundlegendes zur Releaseverwaltung 68

Grundlegendes zu Softwaretests 68
Grundlegendes zu Testmethoden 69
Grundlegendes zu Teststufen 69

Grundlegendes zu Datenstrukturen 70
Erluterungen zu Arrays 70
Verstehen von Warteschlangen 72
Verstehen von Stapeln 73
Verknpfte Listen 74

Grundlegendes zu Sortieralgorithmen 76
Verstehen von BubbleSort 76
Verstehen von QuickSort 79

Zusammenfassung der vermittelten Kenntnisse 81


Wissenstest81
Kompetenztest83
Kenntnistest84

www.wiley.com/college/microsoft oder
gebhrenfreie MOAC-Rufnummer: 1+(888) 764-7001 (nur USA und Kanada)

|xxi

xxii | Inhalt

Lektion 4: Grundlegendes zu
Webanwendungen85
Lernzieltabelle 85
Schlsselbegriffe 85
Grundlegendes zur Webseitenentwicklung 85
Grundlegendes zu HTML 86
Grundlegendes zu CSS 88
Grundlegendes zu JavaScript 92
Grundlegendes zur clientseitigen und serverseitigen
Programmierung94

Grundlegendes zur ASP.NETWebanwendungsentwicklung95


Grundlegendes zum Lebenszyklus und
Ereignismodell der ASP.NET-Seite 96
Grundlegendes zur Zustandsverwaltung 99

Grundlegendes zum IIS-Webhosting 104


Grundlegendes zu IIS 105
Erstellen von virtuellen Verzeichnissen und
Websites105
Bereitstellen von Webanwendungen 106

Grundlegendes zur Webdienstentwicklung 107


Einfhrung in SOAP 107
Einfhrung in WSDL 108
Erstellen von Webdiensten 108
Konsumieren von Webdiensten 112

Zusammenfassung der vermittelten


Kenntnisse115
Wissenstest115
Kompetenztest118
Kenntnistest119

Lektion 5: Grundlegendes zu
Desktopanwendungen120
Lernzieltabelle 120
Schlsselbegriffe 120
Grundlegendes zu Windows
Forms-Anwendungen120
Erstellen eines Windows-Formulars 121
Grundlegendes zum Windows
Forms-Ereignismodell123
Verwenden der visuellen Vererbung 123

Grundlegendes zu Multiple Document Interface (MDI)


Anwendungen126

Grundlegendes zu konsolenbasierten
Anwendungen129
Arbeiten mit Befehlszeilenparametern 130

Grundlegendes zu Windows-Diensten 131


Erstellen eines Windows-Diensts 132

Zusammenfassung der vermittelten


Kenntnisse137
Wissenstest138
Kompetenztest140
Kenntnistest141

Lektion 6: Grundlegendes zu
Datenbanken142
Lernzieltabelle 142
Schlsselbegriffe 142
Grundlegendes zu relationalen
Datenbankkonzepten142
Grundlegendes zu Datenbanken 143
Grundlegendes zu relationalen
Datenbankkonzepten143
Grundlegendes zum relationalen
Datenbankentwurf144
Grundlegendes zu Entittsbeziehungsdiagrammen 144
Grundlegendes zur Datennormalisierung 146

Grundlegendes zu Abfragemethoden fr
Datenbanken149
Verwenden von SQL-Abfragen 150
Verwenden von gespeicherten Prozeduren 159

Grundlegendes zu den Methoden fr


Datenbankverbindungen164
Verwenden von Flatfiles 164
Verwenden von XML 167
Verwenden von DataSet 170

Zusammenfassung der vermittelten Kenntnisse 173


Wissenstest173
Kompetenztest176
Kenntnistest176
AnhangA 177
Index179

www.wiley.com/college/microsoft oder
gebhrenfreie MOAC-Rufnummer: 1+(888) 764-7001 (nur USA und Kanada)

Einfhrung in das
Programmieren

LEKTION

THEMEN UND LERNZIELE DIESER LEKTION


Fertigkeiten/Konzepte

MTA-Prfungsziel

Nummer des MTA-Prfungsziels

Grundlegendes zur Computer- Computerspeicherung und


programmierung
Datentypen verstehen

1.1

Grundlegendes zu
Entscheidungs strukturen

1.2

Entscheidungsstrukturen von
Computern verstehen

Grundlegendes zu
Die richtige Methode zur
Wiederholungs strukturen
Behandlung von Wiederholungen
identifizieren

1.3

Erluterungen zur
Ausnahmebe handlung

1.4

Fehlerbehandlung verstehen

SCHLSSELBEGRIFFE
Algorithmus

do-while-Schleife

Konstante

Array

Entscheidungsstrukturen

Methoden

Ausnahme

Entscheidungstabelle

Operator

Binrcode

finally-Block

Binrsystem

Flussdiagramm

Hhere
Programmiersprache

case

foreach-Schleife

Rekursion

Computerprogramme

for-Schleife

switch-Anweisung

(Programme)

if-Anweisung

switch-Block

Datentypen

if-else-Anweisung

try-catch-finally-Block

default-Anweisung

Klasse

Variable
while-Schleife

Angenommen, Sie sind Softwareentwickler bei der Northwind Corporation. Ein Teil
Ihrer Arbeit besteht darin, Computerprogramme zur Lsung von Geschftsproblemen
zu entwickeln. Zu Ihrer Arbeit gehrt das Analysieren von Kundenauftrgen zum
Festlegen von Rabatten, das Aktualisieren von Bestandsinformationen fr tausende
von Artikeln des Firmeninventars und das Schreiben von interaktiven Berichten, mit
denen Benutzer Daten sortieren und filtern knnen.
Fr Sie ist es von entscheidender Bedeutung, dass Ihre Programme exakt
den Spezifikationen entsprechen. Zudem mssen Sie sicherstellen, dass alle
Berechnungen richtig und vollstndig sind. Die Programme, die Sie schreiben,
mssen stabil laufen und sollten in der Lage sein, Fehlermeldungen anzuzeigen,
ohnedie Datenverarbeitung zu unterbrechen.
1

2 | Lektion 1
Die Programmiersprache, die Sie verwenden, bietet Ihnen verschiedene Tools und
Techniken zum Erledigen Ihrer Aufgaben. Je nach Aufgabe whlen Sie die Datentypen
und Steuerelementstrukturen, die sich am besten zur Lsung des Problems eignen.

Grundlegendes zur Computerprogrammierung

FAZIT

Ein Computerprogramm besteht aus einer Reihe von przisen Anweisungen zum
Erfllen einer Aufgabe. In diesem Abschnitt erfahren Sie, wie Sie Algorithmen und
Computerprogramme zur Lsung eines bestimmten Problems schreiben. Neben dem
Schreiben Ihres ersten Computerprogramms mit der Programmiersprache C# erfahren
Sie auch etwas ber die grundlegende Struktur von Computerprogrammen und dem
Kompilieren und Ausfhren eines Programms. Darber hinaus erhalten Sie Informationen
zur Datenein- und ausgabe.

Einfhrung in die Algorithmen


Ein Algorithmus ist eine Sammlung geordneter und begrenzter Schritte zur Lsung
eines bestimmten Problems.
Der Begriff Algorithmus bezieht sich auf eine Methode zur Problemlsung. Algorithmen
knnen in Deutsch beschrieben werden, aber solche Beschreibungen werden aufgrund der
Komplexitt und Mehrdeutigkeit einer natrlichen Sprache oft fehlinterpretiert. Deshalb
werden fr Algorithmen hufig einfache und przisere Formate wie Flussdiagramme,
Entscheidungsbume und Entscheidungstabellen eingesetzt, die einen Algorithmus als
Diagramm, Tabelle oder Graph darstellen. Diese Techniken werden hufig vor dem Schreiben
von Programmen eingesetzt, um die Lsung verstndlicher zu machen.
Diese Tools zur Algorithmenentwicklung knnen Ihnen dabei helfen, auf einfache Weise
eine Lsung zu generieren. Allerdings werden die Tools nicht direkt von einem Computer
untersttzt. Damit ein Computer einen Algorithmus verarbeiten kann, mssen Sie ein
formelleres Computerprogramm in einer Programmiersprache wie C# schreiben. Mehr dazu
erfahren Sie im nchsten Abschnitt.
In der Zwischenzeit befasst sich dieser Abschnitt der Lektion mit zwei Verfahren zur
Darstellung des Algorithmus, den Flussdiagrammen und den Entscheidungstabellen. Diese sind
prziser als eine natrliche Sprache, aber weniger formell und einfacher anzuwenden als eine
Computersprache.

EINFHRUNG IN FLUSSDIAGRAMME
Ein Flussdiagramm ist eine grafische Darstellung eines Algorithmus. Ein Flussdiagramm
wird in der Regel mit Standardsymbolen erstellt. Tabelle1-1 zeigt einige herkmmliche
Flussdiagrammsymbole.
Flussdiagrammsymbol

Beschreibung

Tabelle 1-1
Allgemeine
Flussdiagrammsymbole

Beginn oder Ende eines Algorithmus

Prozess oder rechnerische Operaon

Eingabe- oder Ausgabeoperaon

Entscheidungsbildende Operaon

Angabe des Kontrollflusses

Einfhrung in das Programmieren | 3

Abbildung 1-1 zeigt beispielsweise ein Flussdiagramm, bei dem zwei Zahlen eingegeben
und miteinander verglichen werden. Anschlieend wird die grere Zahl ausgegeben.

Abbildung 1-1
Ein einfaches Flussdiagramm,
das zwei Zahlen vergleicht
und die grere der beiden
ausgibt

START

Eingabe x

Eingabe y

x > y?

Nein

Ausgabe y

Ja
Ausgabe x

STOPP

Wie Sie sehen fhrt dieses Flussdiagramm alle erforderlichen Schritte zum Ausfhren der
Operation in korrekter Reihenfolge auf. Die Ablaufsteuerung beginnt mit dem Startsymbol
und endet mit dem Stoppsymbol. Die Symbole fr die Ein- und Ausgabe sowie fr die
Verarbeitung verfgen immer ber einen einzelnen Einstiegs- und Ausstiegspunkt. Im
Gegensatz dazu findet sich beim Entscheidungssymbol ein Einstiegspunkt aber mehrere
Ausstiegspunkte. Sie knnen ein Flussdiagramm testen, indem Sie einen Probelauf
durchfhren. Bei einem solchen Probelauf durchlaufen Sie manuell die Schritte des
Flussdiagrams mit Testdaten, um festzustellen, ob die richtigen Pfade eingehalten werden.

EINFHRUNG IN ENTSCHEIDUNGSTABELLEN
Enthlt ein Algorithmus viele Bedingungen, lsst sich der Algorithmus besser durch
Entscheidungstabellen darstellen, da dieses Format kompakter und besser lesbar ist.
Tabelle 1-2 zeigt eine Entscheidungstabelle zur Berechnung eines Rabatts. Diese Tabelle
generiert einen Rabatt in Prozent in Abhngigkeit der Menge der gekauften Produkte.
Diedicken Linien in der Entscheidungstabelle unterteilten die Tabelle in vier Quadranten.
Der erste Quadrant (oben links) gibt die Bedingungen (Menge < 10, usw.) an. Der
zweite Quadrant (oben rechts) legt die Regeln fest. Die Regeln stellen die mglichen
Kombinationen der Ergebnisse der einzelnen Bedingungen dar. Der dritte Quadrant (unten
links) gibt die Aktion (in diesem Fall Rabatt) an, und der letzte Quadrant (unten rechts)
gibt die Aktionen an, die den einzelnen Regeln entsprechen.

4 | Lektion 1
Tabelle 1-2
Eine Entscheidungstabelle
zur Berechnung von
Rabatten

Menge < 10

Menge < 50

Menge < 100

5 %

10 %

15 %

20 %

Rabatt

Um herauszufinden, welche Aktion angewendet werden soll, mssen Sie die einzelnen
Bedingungen evaluieren, um die passende Regel zu finden und anschlieend die Aktion
whlen, die in der Spalte mit der passenden Regel angegeben ist. Ist der Wert fr Menge
in den Testdaten beispielsweise 75, ist das Ergebnis der ersten Regel Nein, das Ergebnis
der zweiten Regel ebenfalls und das Ergebnis der dritten Regel Ja. Deshalb whlen Sie
die Aktion aus der Spalte (N, N und J), wodurch der Rabatt auf 15 % festgelegt wird.

Einfhrung in C#
C# ist eine beliebte hhere Programmiersprache, mit der Sie
Computerprogrammeineinem lesbaren Format schreiben knnen. C# ist ein
Teil von .NET Framework und profitiert von der Laufzeituntersttzung und den
Klassenbibliotheken, die von .Framework bereitgestellt werden.
Wie im vorherigen Abschnitt beschrieben, bentigen Computer genaue und vollstndige
Anweisungen, um eine Aufgabe auszufhren. Diese Ansammlungen von Anweisungen
werden Computerprogramme oder einfach nur Programme genannt.
Ganz vereinfacht ausgedrckt nutzen Computer das Binrsystem zur Darstellung von
Informationen und Code. In diesem System wird jeder Wert lediglich durch die beiden
Symbole 0 und 1 dargestellt. Ein Computerprogramm, das unter Verwendung des
Binrsystems geschrieben wurde, wird als Binrcode bezeichnet.
Das Programmieren eines Computers mithilfe von Binrcode ist fr nicht triviale
Aufgaben sehr schwierig. Deshalb haben Wissenschaftler und Computertechniker mehrere
Abstraktionsebenen zwischen Mensch und Computer errichtet. Diese Abstraktionen
enthalten Software (z. B. Betriebssysteme, Compiler und verschiedenen Laufzeitsysteme),
die dafr verantwortlich ist, ein (visuell) lesbares Programm in ein maschinenlesbares
Programm zu bersetzen.
Die meisten modernen Programme werden in einer hheren Programmiersprache
wie C#, Visual Basic oder Java geschrieben. Mit diesen Sprachen knnen Sie
przise Anweisungen in visuell lesbarer Form schreiben. Anschlieend bersetzt ein
Sprachcompiler die hhere Programmiersprache in eine niedrige Programmiersprache,
dievom Laufzeitausfhrungssystem verarbeitet werden kann.
Jede Programmiersprache stellt einen eigenen Satz an Vokabeln und Grammatik
(auch bekannt als Syntax) bereit. In diesem Kurs erfahren Sie, wie Sie mit der
C#-Programmiersprache in .NET Framework programmieren. .NET Framework stellt eine
Ausfhrungsumgebung fr die Laufzeit fr das C#-Programm bereit. Das Framework enthlt
darber hinaus Klassenbibliotheken, die eine Menge an wiederverwendbaren Kernfunktionen
zur Verfgung stellen, die Sie direkt in Ihrem C#-Programm verwenden knnen.

WEITERE INFORMATIONEN
.NET Framework stellt drei Hauptkomponenten zur Verfgung: eine Umgebung fr die Laufzeitausfhrung,
einen Satz von Klassenbibliotheken, der viele wiederverwendbare Funktionen bereitstellt und einen
Sprachcompiler fr C#, Visual Basic und verwaltetem C++. .NET Framework untersttzt mehrere
Programmiersprachen sowie das Hinzufgen zustzlicher Sprachen zum System. Obwohl die Syntax
und das Vokabular der einzelnen Sprachen unterschiedlich sein knnen, kann jede Sprache die vom
Framework bereitgestellten Basisklassenbibliotheken verwenden.

Einfhrung in das Programmieren | 5

In diesem Kurs entwickeln Sie Code mittels einer integrierten Entwicklungsumgebung


(IDE). Zum Schreiben des Codes knnen Sie sowohl Visual Studio als auch die kostenlose
Visual Studio Express-Version verwenden. Beide Tools bieten Ihnen eine hchst produktive
Umgebung zum Entwickeln und Testen Ihrer Programme.
SCHREIBEN EINES C#-PROGRAMMS
VORBEREITUNG. Fhren Sie die folgenden Schritte durch, um ein C#-Programm zu
schreiben.

HINWEIS

C# ist eine Sprache,


bei der die Gro-/
Kleinschreibung
beachtet wird.
Infolgedessen kommt
es beispielsweise zu
einem Syntaxfehler,
wenn Sie Class statt
class eingeben.

1. Starten Sie Visual Studio. Whlen Sie Datei > Neues Projekt. Whlen Sie die Vorlagen
der Visual C#-Konsolenanwendung.
2. Geben Sie IntroducingCS in das Feld Name ein. Stellen Sie sicher, dass das
Kontrollkstchen Projektmappenverzeichnis erstellen aktiviert ist, und geben Sie in
das Feld Projektmappenname Lektion01 ein. Klicken Sie auf OK, um das Projekt zu
erstellen.
3. Wenn das Projekt erstellt wurde, werden Sie feststellen, dass Visual Studio bereits eine
Datei mit dem Namen Program.cs erstellt und eine Vorlage fr Sie geschrieben hat.
4. ndern Sie die Vorlage, damit sie dem folgenden Code entspricht:
using System;
Namespace Lesson01
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Hallo Welt!);
}
}
}
5. Whlen Sie Debuggen > Starten ohne Debuggen, oder drcken Sie STRG+F5.
6. Wie in Abbildung 1-2 zu sehen, wird die Ausgabe des Programms in einem
Befehlsfenster angezeigt.

Abbildung 1-2
Programmausgabe in einem
Befehlsfenster

EINE WEITERE
MGLICHKEIT

Sie knnen das Programm auch ausfhren, indem Sie ein Befehlsfenster (cmd.exe)
ffnen und dann zum Ausgabeordner des Projekts navigieren. Dies ist standardmig
der Unterordner bin\debug unterhalb des Projektspeicherorts. Starten Sie das
Programm, indem Sie den Namen des Programms in das Befehlsfenster eingeben und
die EINGABETASTE drcken.

7. Drcken Sie eine beliebige Taste, um das Befehlsfenster zu schlieen.

PAUSE. Lassen Sie das Projekt zur Verwendung in der nchsten bung geffnet.

6 | Lektion 1

Das soeben erstellte Programm ist recht schlicht in seiner Ausfhrung, hilft aber dabei, die
Struktur, Erstellung und Ausfhrung eines Programms zu verstehen. Reden wir zunchst
einmal ber die Erstellung und Ausfhrung. Hier sehen Sie, was passiert, wenn Sie die
Option Debuggen > Starten ohne Debuggen aus dem oben aufgefhrten Schritt 5 whlen:
1. Visual Studio ruft den C#-Compiler auf, um den C#-Code in eine niedrige
Programmiersprache, den Common Intermediate Language (CIL)-Code, zu bersetzen. Dieser Code auf niedriger Ebene wird in einer ausfhrbaren Datei namens
(Lesson01.exe) gespeichert. Der Name der Ausgabedatei kann gendert werden,
indem die Projekteigenschaften gendert werden.
2. Anschlieend bernimmt Visual Studio die Projektausgabe und fordert eine
Ausfhrung durch das Betriebssystem an. An dieser Stelle wird Ihnen im
Befehlsfenster die Ausgabe angezeigt.
3. Wenn das Programm beendet ist, zeigt Visual Studio die folgende Meldung an:
Drcken Sie eine beliebige Taste, um den Vorgang fortzusetzen. . . . Beachten
Sie, dass die Meldung nur angezeigt wird, wenn Sie das Programm ber die Option
Starten ohne Debuggen ausfhren.

HINWEIS

Wenn Sie die Menoption Debug > Starten ohne Debuggen whlen, zeigt
Visual Studio automatisch die Aufforderung Drcken Sie eine beliebige Taste,
um fortzufahren an. Das Befehlsfenster bleibt dann offen, sodass Sie die
Ausgabe berprfen knnen. Wenn Sie allerdings die Option Debug > Debuggen
startenwhlen, wird das Befehlsfenster geschlossen, sobald die Ausfhrung des
Programms abgeschlossen ist. Es ist wichtig zu wissen, dass die Option Debuggen
starten Debugfunktionen bereitstellt. Dazu zhlen die Mglichkeit, die Ausfhrung
eines Programms an einem bestimmten Punkt anzuhalten und den Wert verschiedener
Variablen im Speicher zu berprfen.
Wenn Sie keine integrierte Entwicklungsumgebung (IDE) wie Visual Studio verwenden,
knnen Sie das Programm manuell ber die Befehlszeilentools kompilieren. Mit Visual
Studio geht das Testen von Programmen jedoch schneller und einfacher.

HINWEIS

Bevor der Common Intermediate Language (CIL)-Code ausgefhrt werden kann,


muss er zunchst fr die Architektur des Computers, auf dem er ausgefhrt wird,
bersetzt werden. Das Laufzeitausfhrungssystem von .NET Framework verarbeitet
die bersetzung im Hintergrund mithilfe eines Prozesses, der als Just-In-TimeKompilierung bezeichnet wird.

GRUNDLEGENDES ZUR STRUKTUR EINES C#-PROGRAMMS


In diesem Abschnitt der Lektion erfahren Sie etwas ber die strukturellen Elemente
des einfachen C#-Programms, das Sie im vorherigen Abschnitt erstellt haben.
Abbildung 1-3 zeigt das Programm, das Sie im vorherigen Abschnitt erstellt haben, mit
Zeilennummern an. Diese Nummern werden im gesamten Abschnitt verwendet, um auf
verschiedene Strukturen im Programm zu verweisen.

HINWEIS

Damit Zeilennummern in Visual Studio angezeigt werden knnen, whlen Sie das
Men Extras > Optionen. Erweitern Sie dann den Knoten Text-Editor, und
whlen Sie C#. Klicken Sie abschlieend im Anzeigeabschnitt auf die Option
Zeilennummern.

Einfhrung in das Programmieren | 7


Abbildung 1-3
Programmauflistung mit
Zeilennummern

REF

Weitere Informationen
zu Klassen erhalten Sie
in Lektion 2.

REF

Weitere Informationen
zu Methoden erhalten
Sie in Lektion 2.

HINWEIS

Jeder C#-Anweisung
muss mit einem
Semikolon (;)
abgeschlossen werden.

Ein C#-Programm besteht aus mindestens einer Klasse. Eine Klasse ist eine Sammlung
von Daten und Methoden. So definiert beispielsweise der Code aus Abbildung 1-3
eine einzelne Klasse namens Program bestehend aus den Zeilen fnf bis elf. Eine
Klasse wird mittels des Schlsselworts class, gefolgt vom Klassennamen, definiert.
Der Inhalt einer Klasse wird zwischen einer ffnenden geschweiften Klammer ({) und
einerschlieenden geschweiften Klammer (}) definiert.
Zeile 3 des Codes aus Abbildung 1-3 definiert einen Namespace namens Lesson01.
Namespaces werden verwendet, um Klassen zu organisieren und eindeutig zu identifizieren.
Der Namespace und die Klassennamen bilden zusammen einen vollqualifizierten
Klassennamen. Der vollqualifizierte Klassenname der Program-Klasse lautet beispielsweise
Lesson01.Program. C# erfordert, dass der vollqualifizierte Name einer Klasse eindeutig
ist. Infolgedessen ist eine weitere Klasse mit Namen Program im Namespace Lesson01
nicht mglich, dafr eine Klasse namens Program in einem anderen Namespace,
beispielsweise Lesson02, schon. Hier ist die im Namespace Lesson02 definierte
Klasse Program eindeutig ber den vollqualifizierten Klassennamen Lesson02.
Program identifizierbar.
Von .NET Framework wird eine Vielzahl an ntzlichen Klassen bereitgestellt, die
in viele Namespaces eingeordnet sind. Der System-Namespace enthlt einige der am
hufigsten verwendeten Basisklassen. Eine solche Klasse im System-Namespace ist die
Console-Klasse. Die Console-Klasse bietet Funktionen fr die Ein-und Ausgabe von
Daten in die Konsolenanwendung. Zeile 9 des Codes aus Abbildung 1-3 bezieht sich auf
die Console-Klasse und ruft dessen WriteLine-Methode auf. Fr einen eindeutigen Zugriff
auf die WriteLine-Methode mssen Sie den Code in etwa wie folgt schreiben:
System.Console.WriteLine ("Hallo Welt!");

Klassennamen tauchen des fteren im Code auf. Dann jedes Mal den vollqualifizierten
Klassennamen schreiben zu mssen, ist mhsam und macht das Programm
unbersichtlich. Zu Lsung des Problems knnen Sie die C#-Direktive using einsetzen
(siehe Code in Zeile 1, Abbildung 1-3). Mit der using-Direktive knnen Sie Klassen auch
ohne vollqualifizierten Namen in einem Namespace verwenden.
Die Program-Klasse definiert eine einzelne Methode ber den Namen Main (siehe Zeile
7 bis 10 des Code in Abbildung 1-3). Main ist eine besondere Methode, da sie auch
als Einstiegspunkt in ein Programm dient. Wenn die Laufzeit ein Programm ausfhrt,

8 | Lektion 1

startet dieses immer bei der Main-Methode. Ein Programm kann viele Klassen enthalten,
und jede Klasse kann viele Methoden haben, allerdings sollte es nur eine Main-Methode
geben. Eine Methode kann wiederum andere Methoden aufrufen. In Zeile 9 ruft die
Main-Methode die WriteLine-Methode der System.Console-Klasse auf, um eine
Zeichenfolge im Befehlsfenster anzuzeigen. So wird die Meldung angezeigt.

HINWEIS

Die Main-Methode muss als statisch deklariert werden. Eine statische Methode kann
auch dann fr eine Klasse aufgerufen werden, wenn keine Instanz der Klasse erstellt
wurde. Mehr darber erfahren Sie in der folgenden Lektion.

GRUNDLEGENDES ZU VARIABLEN
Variablen ermglichen eine Zwischenspeicherung whrend der Programmausfhrung.
Die Variablen in C# sind Platzhalter, die zum Speichern von Werten eingesetzt werden.
Eine Variable hat einen Namen und einen Datentyp. Der Datentyp einer Variablen
bestimmt, welche Werte diese enthalten kann und welche Art von Operationen auf dieser
ausgefhrt werden knnen. Die folgende Deklaration erstellt beispielsweise eine Variable
mit der Bezeichnung Anzahl des Datentyps int und weist der Variablen den Wert 10 zu.
int number = 10;

Wenn eine Variable deklariert ist, wird im Computerspeicher ein Speicherort angelegt,
der gro genug ist, den Wert fr den zugehrigen Datentyp zu speichern. So bentigt
beispielsweise eine Variable vom Datentyp int auf einem 32-Bit-Computer zwei Bytes
an Arbeitsspeicher. Der Wert einer Variablen kann durch einen weitere Zuweisung wie:
number = 20; gendert werden.

Der obige Code ndert den Inhalt des Speicherorts, der ber die Namensnummer
identifiziert wird.

HINWEIS

Ein Variablennamen muss mit einem Buchstaben oder einem Unterstrich beginnen und
darf nur Buchstaben, Zahlen oder Unterstriche enthalten. Ein Variablenname darf 255
Zeichen nicht berschreiten. Eine Variable muss auch innerhalb des Bereichs, in dem
sie definiert ist, eindeutig sein.

GRUNDLEGENDES ZU KONSTANTEN
Konstanten sind Datenfelder oder lokale Variablen, deren Wert nicht gendert
werden kann.
Konstanten werden mit dem const-Schlsselwort deklariert. Eine Konstante kann
beispielsweise wie folgt deklariert werden:
const int i = 10;

Dadurch wird eine Konstante i vom Datentyp int deklariert und ein Wert von 10
gespeichert. Nach der Deklaration kann der Wert der Konstante nicht gendert werden.

ERLUTERUNGEN ZU DATENTYPEN
Datentypen geben den Typ der Daten an, mit denen Sie in einem Programm arbeiten.
Der Datentyp definiert die Gre des Arbeitsspeichers, der zum Speichern der Daten
bentigt wird sowie die Operationen, die mit den Daten durchgefhrt werden knnen.

Einfhrung in das Programmieren | 9

REF

Weitere Informationen
zum Erstellen eigener
Datentypen erhalten
Sie in Lektion 2.

C# stellt mehrere integrierte Datentypen bereit, die Sie in Ihren Programmen verwenden
knnen. Sie knnen auch neue Typen definieren, indem Sie eine Datenstruktur wie class
oder struct definieren. Dieses Kapitel konzentriert sich auf einige der am hufigsten
verwendeten integrierten Datentypen.
Tabelle 1-3 listet mehrere hufig verwendete integrierte Datentypen auf, die in C#
verfgbar sind. Die in der Tabelle aufgefhrten Gren gelten fr einen Computer
mit einem 32-Bit-Betriebssystem wie Windows 7 (32-Bit-Version). Fr ein
64-Bit-Betriebssystem wie Windows 7 (64-Bit-Version) gelten andere Gren.

Tabelle 1-3
Herkmmliche in C#
verwendete integrierte
Datentypen

HINWEIS

Die vorzeichenlosen
Versionen von short,
int und long sind
ushort, uint und ulong.
Die vorzeichenlosen
Typen haben die
gleiche Gre wie
die Versionen mit
Vorzeichen, speichern
aber mehr Bereiche an
nur positiven Werten.

Datentyp

Grsse

Wertebereich

byte

1 Byte

0 bis 255

char

2 Byte

U+0000 bis U+ffff (Unicode-Zeichen)

short

2 Byte

-32.768 bis 32.767

int

4 Byte

-2.147.483.648 bis 2.147.483.647

long

8 Byte

-9.223.372.036.854.775.808 bis
9.223.372.036.854.775.807

float

4 Byte

1,5 10-45 bis 3,4 1038

double

8 Byte

5,0e324 bis 1,7e308

bool

2 Byte

Wahr oder falsch

Zeichenkette

Null oder mehr Unicode-Zeichen

Alle Datentypen, die in Tabelle 1-3 aufgefhrt sind, sind Werttypen mit Ausnahme
von string. String ist ein Verweistyp. Die Variablen, die direkt auf den Werttypen
basieren, enthalten den Wert. Bei einem Verweistyp enthlt die Variable die Adresse
des Speicherbereichs, an dem die tatschlichen Daten gespeichert werden. In Lektion 2
erfahren Sie mehr ber die Unterschiede zwischen Wert- und Verweistypen.

ERLUTERUNGEN ZU ARRAYS
Ein Array ist eine Auflistung von Elementen, auf die mithilfe eines eindeutigen
Indexes zugegriffen werden kann.
Ein Array in C# wird hufig verwendet, um eine Auflistung von Elementen eines
hnlichen Typs darzustellen. Der folgende Code zeigt ein Beispiel einer Array-Deklaration:
int[] numbers = { 1, 2, 3, 4, 5 };

Diese Deklaration erstellt ein Array, dass ber die Namenszahlen identifiziert wird. Dieses
Array kann eine Auflistung von fnf Ganzzahlen speichern. Diese Deklaration initialisiert
auch die einzelnen Arrayelemente entsprechend durch die Zahlen 1 bis 5.
Auf jedes Arrayelement kann mithilfe eines Indexes direkt zugegriffen werden. In .NET
Framework sind Arrayindizes nullbasiert. Das bedeutet, dass Sie fr den Zugriff auf das erste
Element Index 1 verwenden, fr den Zugriff auf das zweite Element Index 2 und so weiter.
Fr den Zugriff auf ein einzelnes Arrayelement verwenden Sie den Namen des Arrays,
auf den der in eckige Klammen eingeschlossene Index folgt. So gibt beispielsweise
numbers[0] einen Wert 1 aus dem oben deklarierten Array zurck und numbers[4]
den Wert 5. Auerhalb seiner definierten Grenzen darf nicht auf ein Array zugegriffen

10 | Lektion 1

REF

Arrays werden
ausfhrlicher in
Lektion 3 Allgemeine
Grundlagen der
Softwareentwicklung
behandelt.

werden. Sie erhalten beispielsweise eine Fehlermeldung, wenn Sie versuchen, auf das
Arrayelement numbers[5] zuzugreifen.

ERLUTERUNGEN ZU OPERATOREN
Operatoren sind Symbole, die angeben, welche Operation auf den Operanden
durchzufhren ist, ehe ein Ergebnis zurckgegeben wird.
Zu den Beispielen fr Operatoren zhlen +, -, *, / und so weiter. Operanden knnen
Variablen, Konstanten, Literale usw. sein. Je nachdem, wie viele Operanden involviert
sind, gibt es drei Arten von Operatoren:
Unre Operatoren: Unre Operatoren arbeiten nur mit einem Operanden. Zu den
Beispielen zhlen ++x, x++ oder isEven, wobei x ein Integer-Datentyp und isEven ein
boolescher Datentyp ist.
Binre Operatoren: Die binren Operatoren arbeiten mit zwei Operanden. Zu den
Beispielen zhlen x + y oder x> y.
Ternre Operatoren: Ternre Operatoren arbeiten mit drei Operanden. In C# gibt es
nur den ternren Operator ?.
Oftmals erfordern Ausdrcke mehr als einen Operator. In diesem Fall muss der
Compiler bestimmen, welcher Operator Vorrang vor den anderen hat. Tabelle 1-4 listet
die C#-Operatoren in ihrer Rangfolge auf. Je hher sich ein Operator in der Tabelle
befindet, desto hher ist auch sein Rang. Operatoren mit einem hheren Rang werden
vor Operatoren mit einem niedrigen Rang evaluiert. Operatoren, die in der gleichen Zeile
erscheinen, haben dieselbe Rangfolge.

Tabelle 1-4
Operatorrangfolge in C#

Kategorie

Operatoren

Primr

x.y f(x) a[x] x++ x -- new


typeof checked unchecked

Unr

+ - ! ~ ++x --x (T)x

Multiplikativ

*/%

Additiv

+-

Umschalt

<< >>

Relationale und Typenprfung

< > <= >= is as

Gleichheit

== !=

Logisches UND

&

Logisches XOR

Logisches ODER

Bedingtes UND

&&

Bedingtes ODER

||

Bedingtes ternr

?:

Zuweisung

= *= /= %= += -= <<= >>= &= ^= |=

Der unre Inkrementoperator (++) fgt 1 zum Wert eines Bezeichners hinzu. Dagegen
subtrahiert der Dekrementoperator (--) 1 vom Wert eines Bezeichners. Das unre
Inkrement und Dekrement kann als Prfix oder Suffix verwendet werden. Zum Beispiel:

Einfhrung in das Programmieren | 11


int x = 10;
x++; //Wert von x ist jetzt 11
++x; //Wert von x ist jetzt 12

Die Art, wie unre Inkrement- und Dekrementoperatoren arbeiten, wenn sie als Teil einer
Zuweisung verwendet werden, kann sich auf die Ergebnisse auswirken. Insbesondere
wenn unre Inkrement- und Dekrementoperatoren als Prfixe verwendet werden, wird
der aktuelle Wert des Bezeichners vor der Erhhung bzw. Verringerung zurckgegeben.
Wenn sie andererseits als Suffix verwendet werden, wird der Wert des Bezeichners
zurckgegeben, nachdem die Erhhung bzw. Verringerung abgeschlossen ist. Das
folgende Codebeispiel zeigt auf, was das bedeutet:
int y = x++; // der Wert von y ist 12
int z = ++x; // der Wert von z ist 14

In der ersten Anweisung wird der Wert von x vor dem Inkrementvorgang zurckgegeben.
Infolgedessen ist, nachdem die Anweisung ausgefhrt wurde, der Wert von y 12 und der
Wert von x 13. Im Gegensatz dazu wird in der zweiten Anweisung der Wert von x erhht,
ehe dessen Wert fr die Zuordnung zurckgegeben wird. Somit ist nach Ausfhrung der
Anweisung der Wert fr x und z 14.

ERLUTERUNGEN ZU METHODEN
Methoden sind Codeblcke, die eine Reihe von Anweisungen enthalten. Methoden
knnen ber Argumente Eingaben erhalten und einen Wert an den Aufrufer zurckgeben.

BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie die
Bedeutung der
wesentlichen Elemente
der Programmierung wie
Variablen, Datentypen,
Operatoren und
Methoden?
1.1

Im vorherigen Codebeispiel haben Sie etwas ber die Main-Methode erfahren. Methoden
finden Sie im Programm dort, wo Aktionen stattfinden. Genauer gesagt besteht eine
Methode aus einer Reihe von Anweisungen, die ausgefhrt werden, wenn die Methode
aufgerufen wird.
Die Main-Methode gibt keinen Wert an den aufrufenden Code zurck. Dies wird durch
die Verwendung des void-Schlsselworts deutlich gemacht. Msste die Methode einen
Wert zurckgeben, wrde der passende Datentyp fr den Rckgabewert anstelle von void
verwendet werden.
Klassenmember knnen ber Modifizierer wie statisch, ffentlich oder privat verfgen.
Diese Modifizierer geben an, wie und wo auf Klassenmember zugegriffen werden kann.
Mehr ber diese Modifizierer erfahren Sie in Lektion 2.

Grundlegendes zu Entscheidungsstrukturen

FAZIT

Entscheidungsstrukturen fhren die Mglichkeit einer Entscheidungsfindung in


ein Programm ein. Sie ermglichen Ihnen eine Verzweigung zu verschiedenen
Codeabschnitten in Abhngigkeit vom Wert wahr eines booleschen Ausdrucks.
Bei den Steuerelementstrukturen fr die Entscheidungsfindung in C# handelt es sich
um if-, if-else- und switch-Anweisungen. In den folgenden Abschnitten werden diese
Anweisungen genauer beschrieben.

Die if-Anweisung
Die if-Anweisung fhrt nur dann eine bestimmte Anweisungssequenz aus, wenn der
entsprechende boolesche Ausdruck wahr ergibt.

12 | Lektion 1

Gelegentlich kommt es vor, dass eine Reihe von Anweisungen nur ausgefhrt werden
sollen, wenn eine bestimmte Bedingung wahr ist. In C# erreichen Sie dies ber die
if-Anweisung. Fhren Sie die folgenden Schritte durch, um ein Programm zu erstellen,
das eine if-Anweisung enthlt.
VERWENDEN DER IF-ANWEISUNG
VORBEREITUNG. Fhren Sie die folgenden Anweisungen durch, um die If-Anweisung zu
verwenden:

1. Fgen Sie ein neues Konsolenanwendungsprojekt namens If_Statement zur


Projektmappe Lektion01 hinzu.
2. Fgen Sie den folgenden Code zur Main-Methode der Program.cs-Klasse hinzu:
int number1 = 10;
int number2 = 20;
if (number2 > number1)
{

Console.WriteLine ("Zahl2 ist grer als Zahl1");
}
3. Whlen Sie Debuggen > Starten ohne Debuggen, oder drcken Sie STRG+F5.
4. Sie sehen die Ausgabe des Programms in einem Befehlsfenster.
5. Drcken Sie eine beliebige Taste, um das Befehlsfenster zu schlieen.

PAUSE. Lassen Sie das Projekt zur Verwendung in der nchsten bung geffnet.
Die Funktionen dieses Codes gleichen denen des Flussdiagramms aus Abbildung 1-4.
Abbildung 1-4
Flussdiagramm-quivalent
der if-Anweisung des
Beispiels

START

n1 = 10

n2 = 20

n2 > n1?

Nein

Ja
Ausgabe
"n2 ist > n1"

STOPP

Hier wird die Ausgabeanweisung nur ausgefhrt, wenn der boolesche Ausdruck in
Klammern wahr ergibt. Ergibt der Ausdruck falsch, wird das Steuerelement an die
Anweisung bergeben, die der if-Anweisung folgt.

Einfhrung in das Programmieren | 13

Im C#-Code sind die Klammern um die Bedingung erforderlich. Die geschweiften


Klammern sind jedoch optional, wenn nur eine Anweisung im Codeblock vorhanden ist.
Somit entspricht die if-Anweisung dem Folgenden:
if (number2 > number1)
Console.WriteLine ("Zahl2 ist grer als Zahl1");

Betrachten Sie im Gegensatz dazu dieses Beispiel:


if (number2 > number1)
Console.WriteLine ("Zahl2 ist grer als Zahl1");
Console.WriteLine(Zahl2);

Hier ist nur die erste Console.WriteLine-Anweisung Teil der if-Anweisung. Die zweite
Console.WriteLine-Anweisung wird unabhngig vom Wert des booleschen Ausdrucks
immer ausgefhrt.
Aus Grnden der bersichtlichkeit ist es immer eine gute Idee, die Anweisung zu
umschlieen, die bedingt in geschweiften Klammern ausgefhrt werden muss.
Wie das folgende Beispiel zeigt, knnen if-Anweisungen auch innerhalb anderer
if-Anweisungen geschachtelt werden:
int number1 = 10;
if (number1 > 5)
{
Console.WriteLine("Zahl1 ist grer als 5");
if (number1 < 20)
{
Console.WriteLine ("Zahl1 ist kleiner als 20");
}
}

Da beide Bedingungen wahr ergeben, wrde dieser Code die folgende Ausgabe generieren:
Zahl1 ist grer als 5
Zahl1 ist kleiner als 20

Aber was wrde passieren, wenn der Wert von number1 vor der Ausfhrung der ueren
if-Anweisung 25 statt 10 ergibt? In diesem Fall ergibt der erste boolesche Ausdruck wahr,
aber der zweite boolesche Ausdruck falsch, sodass folgende Ausgabe generiert wird:
Zahl1 ist grer als 5

Die if-else-Anweisung
Die if-else-Anweisung ermglicht Ihnen mit dem Programm eine Aktion auszufhren,
wenn der boolesche Ausdruck als wahr ausgewertet wird und eine andere Aktion,
wenn der boolesche Ausdruck als falsch ausgewertet wird.
Fhren Sie die folgenden Schritte durch, um ein Beispielprogramm zu erstellen, das die
if-else-Anweisung verwendet.
VERWENDEN DER IF-ELSE-ANWEISUNG
VORBEREITUNG. Um die if-else-Anweisung zu verwenden, gehen Sie wie folgt vor:

1. Fgen Sie ein neues Konsolenanwendungsprojekt namens ifelse_Statement zur


Projektmappe Lektion01 hinzu.

14 | Lektion 1
2. Fgen Sie den folgenden Code zur Main-Methode der Program.cs-Klasse hinzu:
TestIfElse(10);
3. Fgen Sie dann die folgende Methode zur Program.cs-Klasse hinzu:
public static void TestIfElse (Int n)
{
if (n < 10)
{
Console.WriteLine ("n ist kleiner als 10");
}
else if (n < 20)
{
Console.WriteLine ("n ist kleiner als 20");
}
else if (n < 30)
{
Console.WriteLine ("n ist kleiner als 30");
}
else
{
Console.WriteLine ("n ist grer oder gleich 30");
}
}
4. Whlen Sie Debuggen > Starten ohne Debuggen, oder drcken Sie STRG+F5.
5. Sie sehen die Ausgabe des Programms in einem Befehlsfenster.
6. Drcken Sie eine beliebige Taste, um das Befehlsfenster zu schlieen.
7. ndern Sie den Code der Main-Methode, um die TestIfElse-Methode mit verschiedenen Werten aufzurufen. Beachten Sie, wie ein anderen Zweig der If-else-Anweisung
aufgrund der nderungen ausgefhrt wird.

PAUSE. Lassen Sie das Projekt zur Verwendung in der nchsten bung geffnet.
Hier kombiniert der Code der TestIfElse-Methode mehrere If-else-Anweisungen, um
mehrere Bedingungen zu testen. Ist der Wert von n beispielsweise 25, dann ergeben
die ersten beiden Bedingungen (n < 10 und n < 20) falsch, die dritte Bedingung aber
wahr. Infolgedessen druckt die Methode die folgende Ausgabe:
n ist kleiner als 30

Dieses C#-Programm entspricht dem Flussdiagramm in Abbildung 1-5.

Einfhrung in das Programmieren | 15


Abbildung 1-5

START

Flussdiagramm-quivalent
der if-else-Anweisung des
Beispiels

n < 10?

Ja

Ausgabe
"n < 10"

Ja

Ausgabe
"n < 20"

Ja

Ausgabe
"n = > 30"

Nein
n < 20?

Nein
n < 30?

Nein
Ausgabe
"n = > 30"

STOPP

Die switch-Anweisung
Die switch-Anweisung ermglicht Mehrfachverzweigungen. In vielen Fllen kann
die Verwendung einer switch-Anweisung eine komplexe Kombination von if-elseAnweisungen vereinfachen.
HINWEIS

Der Ausdruck nach


der case-Anweisung
muss ein konstanter
Ausdruck sein und
muss ein Datentyp
sein, der mit der
switch-Anweisung
bereinstimmt.

Die switch-Anweisung besteht aus dem switch-Schlsselwort, gefolgt von einem


Ausdruck in Klammern und gefolgt von einem switch-Block. Der switch-Block
kann eine oder mehrere case-Anweisungen oder eine default-Anweisung enthalten.
Wenndie switch-Anweisung ausgefhrt wird, wird das Steuerelement abhngig vom
Wert des switch-Ausdrucks an eine passende case-Anweisung bergeben. Wenn der
Ausdruck mit keiner der case-Anweisungen bereinstimmt, wird das Steuerelement
an die default-Anweisung bergeben. Der switch-Ausdruck muss in Klammern
eingeschlossen sein.
Fhren Sie die folgenden Schritte durch, um ein Programm zu erstellen, das einfache
Ausdrcke mit der switch-Anweisung auswertet.
VERWENDEN DER SWITCH-ANWEISUNG
VORBEREITUNG. Gehen Sie wie folgt vor, um die switch-Anweisung zu verwenden:

1. Fgen Sie ein neues Konsolenanwendungsprojekt namens switch_Statement zur


Projektmappe Lektion01 hinzu.
2. Fgen Sie den folgenden Code zur Main-Methode der Program.cs-Klasse hinzu:
TestSwitch(10, 20, +);

16 | Lektion 1

HINWEIS

Die Console.Write- und


die Console.WriteLineMethode knnen
Formatzeichenfolgen
wie Ergebnisse: {0}
zur Formatierung der
Ausgabe verwenden.
Hier steht die
Zeichenfolge {0} fr
das erste Argument,
das nach der
Formatzeichenfolge
angegeben ist. In
der TestSwitchMethode wird die
Formatzeichenfolge
{0} durch den
Wert des folgenden
Arguments ersetzt.

3. Fgen Sie die folgende Methode zur Program.cs-Klasse hinzu:


public static void TestSwitch(int op1, int op2, char opr)
{
int result;
switch (opr)
{
case +:

result = op1 + op2;

break;
case :

result = op1 op2;

break;
case *:

result = op1 * op2;

break;
case / :

result = op1 / op2;

break;
default:

Console.WriteLine(Unbekannter Operator);

return;
}
Console.WriteLine(Result: {0}, result);
return;
}
4. Whlen Sie Debuggen > Starten ohne Debuggen, oder drcken Sie STRG+F5.
5. Sie sehen die Ausgabe des Programms in einem Befehlsfenster.
6. Drcken Sie eine beliebige Taste, um das Befehlsfenster zu schlieen.
7. ndern Sie den Code der Main-Methode, um die TestSwitch-Methode mit
verschiedenen Werten aufzurufen. Beachten Sie, wie ein anderen Zweig der
switch-Anweisung aufgrund der nderungen ausgefhrt wird.

PAUSE. Lassen Sie das Projekt zur Verwendung in der nchsten bung geffnet.
Hier akzeptiert die TestSwitch-Methode zwei Operanden (op1 und op2) und einen
Operator (opr) und wertet den resultierenden Ausdruck aus. Der Wert des switchAusdrucks wird mit den case-Anweisungen im switch-Block verglichen. Wenn eine
bereinstimmung vorliegt, werden die Anweisungen, die auf die bereinstimmung
folgen, ausgefhrt. Gibt es bei keiner case-Anweisung eine bereinstimmung, wird das
Steuerelement an den optionalen Standardzweig bergeben.
Beachten Sie, dass nach jedem Fall (case) eine break-Anweisung folgt. Mit der
break-Anweisung wird die switch-Anweisung beendet, und das Steuerelement wird
an die nchste Anweisung auerhalb des switch-Blocks bergeben. Durch die
break-Anweisung wird sichergestellt, dass nur ein Zweig ausgefhrt wird. Darber
hinaus werden Programmierfehler vermieden. Wenn Sie Code nach der case-Anweisung
angeben, mssen Sie diesen mit einer break-Anweisung abschlieen (oder mit einer
anderen Kontrollanweisung, beispielsweise return), um zu verhindern, dass die
Programmsteuerung mit der folgenden case-Anweisung fortgesetzt wird.

Einfhrung in das Programmieren | 17

BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie
die Bedeutung
der ComputerEntscheidungsstrukturen
wie Verzweigung und
Wiederholung?
1.2

HINWEIS

Wenn jedoch kein Code nach der case-Anweisung angegeben wird, kann das
Steuerelement ruhig fr alle nachfolgenden case-Anweisungen fortgesetzt werden. Der
folgende Code veranschaulicht mgliche Vorteile:
public static void TestSwitchFallThrough()
{
DateTime dt = DateTime.Today;
switch (dt.DayOfWeek)
{
case DayOfWeek.Monday:
case DayOfWeek.Tuesday:
case DayOfWeek.Wednesday:
case DayOfWeek.Thursday:
case DayOfWeek.Friday:

Console.WriteLine(Today is a weekday);

break;
default:

Console.WriteLine(Today is a weekend day);

break;
}
}
Wenn hier der Wert des Ausdrucks dt.DayofWeek DayOfWeek.Monday ist, kommt
es zu einer bereinstimmung mit der ersten case-Anweisung. Da aber kein Code oder
keine control-transfer-Anweisung angegeben ist, wird die Ausfhrung in der nchsten
Anweisung fortgesetzt. Infolgedessen wird im Befehlsfenster die MeldungHeute ist ein
Wochentag angezeigt.
Sie knnen sich fr if-else-Anweisungen oder fr eine switch-Anweisung entscheiden.
Dabei hngt die Entscheidung von der Grundlage des Vergleichs und der Lesbarkeit
des Codes ab. So trifft beispielsweise der Code der TestIfElse-Methode Entscheidungen
basierend auf Bedingungen, die sich besser fr die Verwendung mit if-else-Anweisungen
eignen. Bei der TestSwitch-Methode basieren die Entscheidungen auf konstanten Werten,
sodass der Code besser lesbar ist, wenn er als switch-Anweisung geschrieben wird.

Grundlegendes zu Wiederholungsstrukturen
FAZIT

C# untersttzt vier verschiedene Steuerelementstrukturen, durch die Programme sich


wiederholende Aufgaben ausfhren knnen: die while-Schleife, die do-while-Schleife,
die for-Schleife und die foreach-Schleife
Diese sich wiederholende control-Anweisungen knnen eingesetzt werden, um die
Anweisungen im Schleifenkrper abhngig von dem Kriterium zum Beenden der Schleife
wiederholt auszufhren.
Eine Schleife kann auch durch eine der vielen control-transfer-Anweisungen, die
das Steuerelement auerhalb der Schleife bertragen, beendet werden. Bei diesen
Anweisungen handelt es sich um die break-, goto-, return- und throw-Anweisungen.
Abschlieend kann die continue-Anweisung eingesetzt werden, um das Steuerelement an
die nchste Iteration der Schleife weiterzugeben, ohne die Schleife zu verlassen.

Erluterungen zur while-Schleife


Die while-Schleife wiederholt die Ausfhrung einer Anweisung, bis ein bestimmter
boolescher Ausdruck als falsch ausgewertet wird.

18 | Lektion 1
HINWEIS

Bei der while-Schleife


muss der boolesche Test
in Klammern gesetzt
werden. Wenn mehr
als eine Anweisung
als Teil der whileSchleife ausgefhrt
werden muss, mssen
diese Anweisungen
zusammen in
geschweiften Klammern
eingeschlossen werden.

Die allgemeine Form der while-Schleife sieht wie folgt aus:


while (boolean test)
statement

Hier wird ein boolescher Test zu Beginn der Schleife ausgefhrt. Wenn der Test wahr
ergibt, wird der Schleifenkrper ausgefhrt und der Test wiederholt. Wenn der Test
falsch ergibt, wird die Schleife beendet, und das Steuerelement wird zu nchsten
Anweisung bertragen, die der Schleife folgt.
Da der boolesche Test vor Ausfhrung der Schleife ausgefhrt wird, ist es mglich, dass
der Krper einer while-Schleife nie ausgefhrt wird. Dies geschieht, wenn der Test zum
ersten Mal falsch ergibt.
Fhren Sie die folgenden Schritte durch, um ein Programm zu erstellen, in dem die
while-Schleife verwendet wird.
VERWENDEN DER WHILE-SCHLEIFE
VORBEREITUNG. Fhren Sie folgende Aufgaben durch, um die while-Schleife zu verwenden:

1. Fgen Sie ein neues Konsolenanwendungsprojekt namens while_Statement zur


Projektmappe Lektion01 hinzu.
2. Fgen Sie den folgenden Code zur Main-Methode der Program.cs-Klasse hinzu:
WhileTest();
3. Fgen Sie die folgende Methode zur Program.cs-Klasse hinzu:
private static void WhileTest()
{
int i = 1;
while (i <= 5)
{
Console.WriteLine(Der Wert von i = {0}, i);
i++;
}
}
4. Whlen Sie Debuggen > Starten ohne Debuggen, oder drcken Sie STRG+F5.
5. Sie sehen die Ausgabe des Programms in einem Befehlsfenster.
6. Drcken Sie eine beliebige Taste, um das Befehlsfenster zu schlieen.

PAUSE. Lassen Sie das Projekt zur Verwendung in der nchsten bung geffnet.
In dieser bung wird der Wert 1 zur Variablen i zugewiesen. Anschlieend wird die
Bedingung in der while-Schleife ausgewertet. Da die Bedingung wahr ist (1 < = 5),
wird der Code innerhalb der while-Anweisung ausgefhrt. Der Wert von i wird im
Befehlsfenster ausgegeben und dann um 1 auf 2 erhht. ber das Steuerelement erfolgt
dann eine Rckgabe an die while-Anweisung, und die Bedingung wird erneut ausgewertet.
Da die Bedingung noch erfllt ist (2 < = 5), wird der Anweisungsblock nocheinmal
ausgefhrt. Die Schleife wird fortgesetzt, bis der Wert von i 6 betrgt und dieBedingung
in der while-Schleife falsch ergibt (6 < = 5). Die obige Methode generiert die folgende
Ausgabe, wenn sie ausgefhrt wird:
Der Wert von i = 1
Der Wert von i = 2
Der Wert von i = 3
Der Wert von i = 4
Der Wert von i = 5
Das Flussdiagramm-quivalent zu dieser while-Schleife ist in Abbildung 1-6 dargestellt.

Einfhrung in das Programmieren | 19


Abbildung 1-6
Das Flussdiagrammquivalent des Beispiels der
while-Schleife

START

i=1

i < = 5?

Nein

Ja
Ausgabe i

i=i+1

STOPP

Die Anweisung in der Schleife, die den Wert von i erhht, spielt eine wichtige Rolle.
Wenn Sie diese Anweisung auslassen, wird die Bedingung nie erfllt, und Sie erhalten
eine unendliche Schleife.
In den meisten Fllen bentigen Sie fr eine gut durchdachte Schleife die folgenden drei
Komponenten:
HINWEIS

Um eine Endlosschleife
zu vermeiden, mssen
Sie die Schleife so
gestalten, dass diese
beendet wird.

1. Initialisierer: Der Initialisierer setzt den Schleifenzhler auf den korrekten Anfangswert.
Im obigen Beispiel wird die Variable i auf 1 gesetzt, ehe die Schleife beginnt.
2. Schleifentest: Der Schleifentest gibt die Beendigungsbedingung fr die Schleife an.
Im obigen Beispiel ist der Ausdruck (i < = 5) der Bedingungsausdruck.
3. Beendigungsausdruck: Der Beendigungsausdruck ndert den Wert fr den
Schleifenzhler so, dass die Beendigungsbedingung erfllt wird. Im obigen Beispiel
ist der Ausdruck i++ der Beendigungsausdruck.

Erluterungen zur do-while-Schleife


HINWEIS

Bei der do-whileSchleife muss der


boolesche Test in
Klammern gesetzt
werden. Wenn mehr
als eine Anweisung
als Teil der do-whileSchleife ausgefhrt
werden muss, mssen
diese Anweisungen
zusammen in
geschweiften Klammern
eingeschlossen werden.

Die do-while-Schleife wiederholt die Ausfhrung eines Anweisungsblocks, bis ein


bestimmter boolescher Ausdruck als falsch ausgewertet wird. Bei der do-whileSchleife wird die Bedingung am Ende der Schleife getestet.
Die do-while Schleife hnelt der while-Schleife. Im Gegensatz zur while-Schleife muss
der Textkrper der do-while-Schleife allerdings mindestens einmal ausgefhrt werden.
Die allgemeine Form der do-while Schleife sieht wie folgt aus:
do
statement
while (boolean test);

Fhren Sie die folgenden Schritte durch, um ein Programm zu erstellen, in dem die
do-while-Schleife verwendet wird.

20 | Lektion 1

VERWENDEN DER DO-WHILE SCHLEIFE


VORBEREITUNG. Fhren Sie folgende Aufgaben durch, um die do-while-Schleife zu
verwenden:
1. Fgen Sie ein neues Konsolenanwendungsprojekt namens dowhile_Statement zur
Projektmappe Lektion01 hinzu.
2. Fgen Sie den folgenden Code zur Main-Methode der Program.cs-Klasse hinzu:
DoWhileTest();
3. Fgen Sie die folgende Methode zur Program.cs-Klasse hinzu:
private static void DoWhileTest()
{
int i = 1;
do
{
Console.WriteLine(Der Wert von i = {0}, i);
i++;
}
while (i <= 5);
}
4. Whlen Sie Debuggen > Starten ohne Debuggen, oder drcken Sie STRG+F5.
5. Sie sehen die Ausgabe des Programms in einem Befehlsfenster.
6. Drcken Sie eine beliebige Taste, um das Befehlsfenster zu schlieen.
PAUSE. Lassen Sie das Projekt zur Verwendung in der nchsten bung geffnet.
In dieser bung gelangt das Steuerelement direkt in die Schleife, nachdem der Variablen
i der Wert 1 zugewiesen wurde. An dieser Stelle wird der Code innerhalb des do-whileAnweisungsblocks ausgefhrt. Insbesondere wird der Wert von i in das Befehlsfenster
geschrieben und um 1 auf 2 erhht. Anschlieend wird die Bedingung fr die do-whileSchleife ausgewertet. Da die Bedingung immer noch erfllt ist (2 < = 5), erfolgt ber
das Steuerelement eine Rckgabe an die do-while-Anweisung, und der Anweisungsblock
wird erneut ausgefhrt. Die Schleife wird fortgesetzt, bis der Wert von i 6 betrgt und
die Bedingung in der do-while-Schleife falsch ergibt (6 < = 5). Die obige Methode
generiert, wenn sie ausgefhrt wird, dieselbe Ausgabe wie die WhileTest-Methode.

HINWEIS

Bei der for-Schleife


mssen die drei
Steuerelementausdrcke
in Klammern
eingeschlossen werden.
Wenn mehr als eine
Anweisung als Teil der
Schleife ausgefhrt
werden muss, mssen
diese Anweisungen
zusammen in
geschweiften Klammern
eingeschlossen werden.

Ob eine while-Schleife oder eine do-while-Schleife gewhlt wird, hngt davon ab, ob die
Schleife mindestens einmal ausgefhrt werden soll. Wenn Sie die Schleife null mal oder
mehrere Male ausfhren mchten, whlen Sie die while-Schleife. Wenn Sie im Gegensatz
dazu die Schleife einmal oder mehrmals ausfhren, whlen Sie die do-while-Schleife.

Grundlegendes zur for-Schleife


Die for-Schleife kombiniert die drei Elemente einer Iteration
(Initialisierungsausdruck, Ausdruck der Beendigungsbedingung und Zhlausdruck)
zu einem lesbareren Code.
Die for-Schleife hnelt der while-Schleife. Sie ermglicht einer Anweisung oder einem
Anweisungsblock so lange ausgefhrt zu werden, bis ein Ausdruck falsch ergibt. Die
allgemeine Form der for-Schleife sieht wie folgt aus:
for (init-expr; cond-expr; count-expr)

statement

Einfhrung in das Programmieren | 21

Wie Sie sehen, kombiniert die for-Schleife die drei wesentlichen Steuerelementausdrcke
einer Iteration. Dies fhrt zu einem besser lesbaren Code. Die for-Schleife eignet sich
besonders zum Erstellen von Iterationen, die eine bestimmte Anzahl von Malen ausgefhrt
werden mssen.
Fhren Sie die folgenden Schritte durch, um ein Programm zu erstellen, in dem die
for-Schleife verwendet wird.
VERWENDEN DER FOR-SCHLEIFE
VORBEREITUNG. Fhren Sie folgende Aufgaben durch, um die for-Schleife zu
verwenden:

1. Fgen Sie ein neues Konsolenanwendungsprojekt namens for_Statement zur


Projektmappe Lektion01 hinzu.
2. Fgen Sie den folgenden Code zur Main-Methode der Program.cs-Klasse hinzu:
ForTest();
3. Fgen Sie die folgende Methode zur Program.cs-Klasse hinzu:
private static void ForTest()
{
for(int i = 1; i<= 5; i++)
{
Console.WriteLine(Der Wert von i = {0}, i);
}
}
4. Whlen Sie Debuggen > Starten ohne Debuggen, oder drcken Sie STRG+F5.
5. Sie sehen die Ausgabe des Programms in einem Befehlsfenster.
6. Drcken Sie eine beliebige Taste, um das Befehlsfenster zu schlieen.

PAUSE. Lassen Sie das Projekt zur Verwendung in der nchsten bung geffnet.
Die ForTest-Methode generiert, wenn sie ausgefhrt wird, dieselbe Ausgabe wie
die WhileTest-Methode. Hier wird die Variable i innerhalb des Bereichs der forSchleife ausgefhrt, und ihrem Wert wird 1 zugewiesen. Die Schleife wird solange
wiederholt, solange der Wert von i kleiner oder gleich 5 ist. Nach dem Schleifenkrper
wird der Zhlausdruck (count-expr) ausgewertet, und das Steuerelement wird an den
Bedingungsausdruck (cond-expr.) zurckgegeben.
Alle Steuerelementausdrcke einer for-Schleife sind optional. Sie knnen beispielsweise
alle Ausdrcke weglassen, um eine Endlosschleife wie die folgende zu erstellen:
for (; ;)
{
//do nothing
}

Grundlegendes zur foreach-Schleife


Die foreach-Schleife eignet sich fr die Iteration durch die Elemente einer Sammlung.
Die foreach-Schleife kann als erweiterte Version der for-Schleife fr eine Iteration durch
Sammlungen wie Arrays oder Listen betrachtet werden. Die allgemeine Form der foreachAnweisung sieht wie folgt aus:
foreach (ElementType-Element in einer Sammlung)
statement

22 | Lektion 1

Die Steuerelementausdrcke fr die foreach-Schleife mssen in Klammern eingeschlossen


werden. Wenn mehr als eine Anweisung als Teil der Schleife ausgefhrt werden muss,
mssen diese Anweisungen zusammen in geschweiften Klammern eingeschlossen werden.
Fhren Sie die folgenden Schritte aus, um ein Programm zu erstellen, das veranschaulicht,
wie die foreach-Schleife eine einfache Mglichkeit fr eine Iteration durch eine
Sammlung bereitstellt.
VERWENDEN DER FOREACH-SCHLEIFE
VORBEREITUNG. Gehen Sie wie folgt vor, um die foreach-Schleife zu verwenden:

1. Fgen Sie ein neues Konsolenanwendungsprojekt namens foreach_Statement zur


Projektmappe Lektion01 hinzu.
2. Fgen Sie den folgenden Code zur Main-Methode der Program.cs-Klasse hinzu:
ForEachTest();
3. Fgen Sie die folgende Methode zur Program.cs-Klasse hinzu:
private static void ForEachTest()
{
int[] numbers = { 1, 2, 3, 4, 5 };
foreach (int i in numbers)
{
Console.WriteLine(Der Wert von i = {0}, i);
}
}
4. Whlen Sie Debuggen > Starten ohne Debuggen, oder drcken Sie STRG+F5.
5. Sie sehen die Ausgabe des Programms in einem Befehlsfenster.
6. Drcken Sie eine beliebige Taste, um das Befehlsfenster zu schlieen.

PAUSE. Lassen Sie das Projekt zur Verwendung in der nchsten bung geffnet.
In dieser bung durchluft die Schleife nacheinander alle Elemente der Sammlung,
nummeriert diese und zeigt sie im Befehlsfenster an. Diese Methode erzeugt die gleiche
Ausgabe wir die ForTest-Methode.

Erluterungen zur Rekursion


Rekursion ist eine Programmiertechnik, mit der eine Methode sich selbst aufruft, um
ein Ergebnis zu berechnen.
Rekursion und Iteration sind miteinander verknpft. Sie knnen eine Methode schreiben,
die die gleichen Ergebnisse mit Rekursion oder Iteration generiert. Welche Methode Sie
whlen, hngt in der Regel von der Art des Problems ab. Beispielsweise ist eine rekursive
Lsung eleganter, wenn Sie die Lsung eines Problems in Form einer kleineren Version
desselben Problems definieren knnen.
Das Beispiel der faktoriellen Operation aus der Mathematik macht das Konzept deutlicher.
Die allgemeine rekursive Definition fr Fakultt (n geschrieben!) lautet wie folgt:
1 if n = 0,
n! =

(n 1)! n if n > 0.
Gem dieser Definition betrgt die Fakultt 1, wenn die Zahl 0 ist. Ist die Zahl grer als
null, ist die Fakultt die Zahl multipliziert mit der Fakultt der nchst kleineren Zahl. So

Einfhrung in das Programmieren | 23

knnen Sie beispielsweise 3! wie folgt herunterbrechen: 3! = 3 * 2! > 3 * 2 * 1! > 3


* 2 * 1 * 0! > 3 * 2 * 1 * 1 > 6.
Fhren Sie die folgenden Schritte durch, um ein Programm zu erstellen, das eine rekursive
Lsung fr ein faktorielles Problem darstellt.
VERWENDEN DER REKURSIVEN METHODE
VORBEREITUNG. Fhren Sie die folgenden Aktionen aus, um eine rekursive Methode zu
verwenden:

1. Fgen Sie ein neues Konsolenanwendungsprojekt namens RecursiveFactorial zur


Projektmappe Lektion01 hinzu.
2. Fgen Sie den folgenden Code zur Main-Methode der Program.cs-Klasse hinzu:
Factorial(5);
3. Fgen Sie die folgende Methode zur Program.cs-Klasse hinzu:
public static int Factorial(int n)
{
if (n == 0)
{
return 1; //base case
}
else
{
return n * Factorial(n - 1); //recursive case
}
}
4. Whlen Sie Debuggen > Starten ohne Debuggen, oder drcken Sie STRG+F5.
5. Sie sehen die Ausgabe des Programms in einem Befehlsfenster.
6. Drcken Sie eine beliebige Taste, um das Befehlsfenster zu schlieen.
7. ndern Sie die Main-Methode, um einen anderen Wert an die faktoriellen Methode zu
bergeben, und beachten Sie die Ergebnisse.

PAUSE. Lassen Sie das Projekt zur Verwendung in der nchsten bung geffnet.
Wie bereits in der obigen bung gezeigt, besteht die rekursive Lsung aus zwei
voneinander abgegrenzten Teilen:
BEREIT FR DIE
ZERTIFIZIERUNG
Erkennen Sie die
passenden Methoden
fr die Behandlung von
Wiederholungen?
1.3

Basisfall: Dies ist der Teil, der die Beendigungsbedingung angibt und die Methode
nicht erneut aufruft. Der Basisfall bei der faktoriellen Methode ist n == 0. Ist kein
Basisfall im rekursiven Algorithmus enthalten, erstellen Sie eine Endlosschleife. Eine
Endlosschleife fhrt dazu, dass der Computer nicht mehr ber ausreichend Speicher
verfgt und eine System.StackOverflowException-Ausnahme auslst.
Rekursiver Fall: Dies ist der Teil, der den Algorithmus zum Basisfall hin verschiebt.
Der rekursive Fall bei der faktoriellen Methode ist der else-Teil, durch den Sie die
Methode erneut aufrufen, der Wert sich aber weniger zum Basisfall hinbewegt.

Erluterungen zur Ausnahmebehandlung

FAZIT

.NET Framework untersttzt die standardmige Ausnahmebehandlung zum Auslsen


und Behandeln von Laufzeitfehlern. In diesem Abschnitt erfahren Sie, wie Sie mithilfe
der Schlsselwrter try, catch und finally Ausnahmen behandeln.

24 | Lektion 1

Eine Ausnahme ist eine Fehlerbedingung, die bei der Ausfhrung eines C#-Programms
entsteht. Wenn dies geschieht, wird von der Laufzeit ein Objekt erstellt, das den
Fehler darstellt und auslst. Wenn Sie die Ausnahme nicht mittels eines geeigneten
Ausnahmebehandlungscode abfangen, wird die Ausfhrung des Programms beendet.
Wenn Sie beispielsweise versuchen, eine ganze Zahl durch null zu teilen, wird
eine DivideByZeroException-Ausnahme ausgelst. Im .NET Framework wird eine
Ausnahme durch die Verwendung eines Objekts der System.Exception-Klasse oder
einer davon abgeleiteten Klasse dargestellt. Es gibt vordefinierte Ausnahmeklassen,
die hufig vorkommende Fehlersituationen darstellen. Dazu zhlt die bereits
erwhnte DivideByZeroException. Wenn Sie eine Anwendung entwerfen, die die
anwendungsspezifischen Ausnahmen auslst, sollten Sie eine Ausnahmeklasse erstellen,
die sich von der System.Exception-Klasse ableitet.

Behandeln von Ausnahmen


Platzieren Sie den Code, der die Ausnahmen auslst, zum Behandeln von Ausnahmen
in einem try-Block, und platzieren Sie den Code, der die Ausnahmen behandelt, in
einem catch-Block.
Die folgende bung veranschaulicht die Verwendung eines try-catch-Blocks zur
Ausnahmebehandlung. Bei der bung wird die File.OpenText-Methode zum ffnen einer
Festplattendatei verwendet. Im Normalfall lsst sich diese Anweisung gut ausfhren. Fehlt
allerdings die Datei, oder liegt keine Berechtigung zum Lesen der Datei vor, wird eine
Ausnahme ausgelst.
BEHANDELN VON AUSNAHMEN
VORBEREITUNG. Fhren Sie zum Behandeln von Ausnahmen die folgenden Schritte durch:

1. Fgen Sie ein neues Konsolenanwendungsprojekt namens HandlingExceptions zur


Projektmappe Lektion01 hinzu.
2. Fgen Sie den folgenden Code zur Main-Methode der Program.cs-Klasse hinzu:
ExceptionTest();
3. Fgen Sie die folgende Methode zur Program.cs-Klasse hinzu:
private static void ExceptionTest()
{
StreamReader sr = Null;
try
{
sr = File.OpenText(@c:\data.txt);
Console.WriteLine(sr.ReadToEnd());
}
catch (FileNotFoundException fnfe)
{
Console.WriteLine(fnfe.Nachricht);
}
catch(Exception ex)
{
Console.WriteLine(ex.Nachricht);
}
}

Einfhrung in das Programmieren | 25



HINWEIS

Die StreamReaderKlasse ist Teil des


System.IO-Namespace.
Wenn Sie diesen Code
ausfhren, mssen Sie
eine using-Direktive
fr den System.
IO-Namespace
hinzufgen.

HINWEIS

HINWEIS

Ein try-Block muss


ber mindestens einen
catch-Block oder einen
ihm zugeordneten
finally-Block verfgen.

4. Erstellen Sie eine Textdatei ("Daten.txt") mit dem Editor oder Visual Studio auf
Laufwerk C. Die Datei kann auch an einem anderen Speicherort erstellt werden. In diesem Fall mssen Sie daran denken, den Speicherort der Datei im Programm zu ndern.
Geben Sie Text in die Datei ein.
5. Whlen Sie Debuggen > Starten ohne Debuggen, oder drcken Sie STRG+F5.
6. Der Inhalt der Textdatei wird in einem Befehlsfenster angezeigt.
7. Drcken Sie eine beliebige Taste, um das Befehlsfenster zu schlieen.
8. Lschen Sie die Datei Daten.txt, und fhren Sie das Programm erneut aus. Dieses
Mal erhalten Sie eine FileNotFoundException-Ausnahme, und im Ausgabefenster wird
eine entsprechende Meldung angezeigt.

PAUSE. Lassen Sie das Projekt zur Verwendung in der nchsten bung geffnet.
In der ExceptionTest-Methode darf die Reihenfolge der beiden catch-Blcke nicht
verndert werden. Die spezifischeren Ausnahmen mssen vor den generischen
Ausnahmen aufgefhrt werden, da sonst Kompilierungsfehler auftreten.
Um eine Ausnahme zu behandeln, schlieen Sie die Anweisungen, die die Ausnahme
auslsen knnten, in einen try-Block ein. Anschlieend knnen Sie catch-Blcke
zur Behandlung einer oder mehrerer Ausnahmen hinzufgen. In diesem Beispiel
behandeln wir nicht nur die spezifischere FileNotFoundException-Ausnahme, sondern
wir verwenden auch den catch-Block mit allgemeineren Ausnahmen, um alle anderen
Ausnahmen abzufangen. Der Ausnahmename fr einen catch-Block muss in Klammern
eingeschlossen werden. Die Anweisungen, die ausgefhrt werden, wenn eine Ausnahme
abgefangen wird, mssen in geschweiften Klammern eingeschlossen werden.
Die Codeausfhrung stoppt, wenn eine Ausnahme eintritt. Die Laufzeit sucht nach
einer catch-Anweisung, die mit dem Typ der Ausnahme bereinstimmt. Wenn der erste
catch-Block die ausgelste Ausnahme nicht abfngt, verschiebt sich das Steuerelement
in den nchsten catch-Block usw. Wenn die Ausnahme in der Methode nicht behandelt
wird, berprft die Laufzeit die catch-Anweisung im aufrufenden Code und setzt die
Verarbeitung der restlichen Aufrufliste fort.

Verwenden von try-catch-finally


Der finally-Block wird in Verbindung mit dem try-Block verwendet. Der finally-Block wird immer ausgefhrt, ungeachtet der Auslsung einer Ausnahme. Der
finally-Block wird oft zum Schreiben von Bereinigungscode verwendet.
Wenn eine Ausnahme auftritt, bedeutet das oft, dass einige Zeilen des Codes nach der
Ausnahme nicht ausgefhrt wurden. Dies kann einen modifizierten Code oder ein
instabiles Programm zur Folge haben. Um solche Situationen zu vermeiden, knnen Sie
mit der finally-Anweisung gewhrleisten, dass ein bestimmter Bereinigungscode immer
ausgefhrt wird. Dazu zhlt u.a. das Schlieen von Verbindungen, das Freigeben von
Ressourcen oder das Festlegen von Variablen auf deren erwartete Werte. Betrachten wir
nun einen finally-Block in der folgenden bung.
VERWENDEN VON TRY-CATCH-FINALLY
VORBEREITUNG. Fhren Sie die folgenden Schritte aus, um die try-catch-finally-Anweisung
zu verwenden:

1. Fgen Sie ein neues Konsolenanwendungsprojekt namens trycatchfinally


Projektmappe Lektion01 hinzu.
2. Fgen Sie den folgenden Code zur Main-Methode der Program.cs-Klasse hinzu:
TryCatchFinallyTest();

26 | Lektion 1

BEREIT FR DIE
ZERTIFIZIERUNG
Wissen Sie, wie Fehler
in Ihrem Programm
behandelt werden?
1.4

3. Fgen Sie die folgende Methode zur Program.cs-Klasse hinzu:


private static void TryCatchFinallyTest()
{
StreamReader sr = null;
try
{
sr = File.OpenText(Daten.txt);
Console.WriteLine(sr.ReadToEnd());
}
catch (FileNotFoundException fnfe)
{
Console.WriteLine(fnfe.Nachricht);
}
catch (Exception ex)
{
Console.WriteLine(ex.Nachricht);
}
finally
{
if (sr != null)
{

sr.Close();
}
}
}
4. Erstellen Sie eine Textdatei ("Daten.txt") mit dem Editor oder Visual Studio auf
Laufwerk C. Die Datei kann auch an einem anderen Speicherort erstellt werden. In diesem Fall mssen Sie daran denken, den Speicherort der Datei im Programm zu ndern.
Geben Sie Text in die Datei ein.
5. Whlen Sie Debuggen > Starten ohne Debuggen, oder drcken Sie STRG+F5.
6. Der Inhalt der Textdatei wird in einem Befehlsfenster angezeigt.
7. Drcken Sie eine beliebige Taste, um das Befehlsfenster zu schlieen.
8. Lschen Sie die Datei Daten.txt, und fhren Sie das Programm erneut aus. Dieses
Mal erhalten Sie eine FileNotFoundException-Ausnahme, und im Ausgabefenster wird
eine entsprechende Meldung angezeigt.

In dieser bung stellt das Programm sicher, dass das StreamReader-Objekt geschlossen ist
und alle Ressourcen freigegeben werden, wenn der Vorgang abgeschlossen ist. Der Code
im finally-Block wird immer ausgefhrt, ungeachtet der Auslsung einer Ausnahme.

Z U S A M M E N FA S S U N G D E R V E R M I T T E LT E N K E N N T N I S S E
In dieser Lektion haben Sie Folgendes gelernt:
Ein Algorithmus ist ein Satz geordneter und begrenzter Schritte zur Lsung eines
bestimmten Problems. Es kann hilfreich sein, einen Algorithmus als Flussdiagramm
oder Entscheidungstabelle auszudrcken, ehe Sie ein formelles Computerprogramm
generieren.
Die C#-Programmiersprache ist ein Teil von .NET Framework und profitiert von der
Laufzeituntersttzung und den Klassenbibliotheken in .NET Framework.
Main ist eine spezielle Methode, da sie auch als Einstiegspunkt in ein Programm dient.
Wenn die Laufzeit ein Programm ausfhrt, startet dieses immer bei der Main-Methode.
Variablen in C# sind Platzhalter, die zum Speichern von Werten eingesetzt werden.
Eine Variable hat einen Namen und einen Datentyp. Der Datentyp einer Variablen
bestimmt, welchen Wert diese enthalten kann und welche Art von Operation auf
dieser ausgefhrt werden kann.

Einfhrung in das Programmieren | 27

Operatoren sind Symbole, beispielsweise +, -, * und /, die angeben, welche Operation


vor der Rckgabe eines Ergebnisses auf einem oder mehrere Operanden ausgefhrt wird.
if-else-Anweisungen ermglichen Ihnen mit dem Programm eine bestimmte Aktion
auszufhren, wenn der boolesche Ausdruck als wahr ausgewertet wird und eine
andere Aktion, wenn der boolesche Ausdruck als falsch ausgewertet wird.
Die switch-Anweisung ermglicht Mehrfachverzweigungen. In vielen Fllen kann
die Verwendung einer switch-Anweisung eine komplexe Kombination von if-elseAnweisungen vereinfachen.
C# untersttzt vier verschiedene Steuerelementstrukturen, durch die Programme sich
wiederholende Aufgaben ausfhren knnen: die while-Schleife, die do-while-Schleife,
die for-Schleife und die foreach-Schleife.
Die while- und do-Schleifen fhren einen Anweisungsblock so lange aus, bis ein
bestimmter boolescher Ausdruck als falsch ausgewertet wird. Bei der do-whileSchleife wird die Bedingung am Ende der Schleife getestet.
Die for-Schleife kombiniert die drei Elemente einer Iteration also die
Initialisierungsanweisung, die Beendigungsbedingung und die Inkrement/DekrementAnweisung zu einem besser lesbaren Code.
Die foreach-Schleife eignet sich fr die Iteration durch die Elemente einer Sammlung.
Die Rekursion ist eine Programmiertechnik, mit der eine Methode sich selbst aufruft,
um ein Ergebnis zu berechnen.
.NET Framework untersttzt die standardmige Ausnahmebehandlung zum Auslsen
und Behandeln von Laufzeitfehlern. Platzieren Sie den Code, der Ausnahmen auslst,
zum Behandeln von Ausnahmen in einem try-Block, und platzieren Sie den Code, der
die Ausnahmen behandelt, in einem catch-Block.
Der finally-Block wird in Verbindung mit dem try-Block verwendet. Der finally-Block
wird immer ausgefhrt, ungeachtet der Auslsung einer Ausnahme. Der finally-Block
wird oft zum Schreiben von Bereinigungscode verwendet.

Wissenstest
Lckentext
Ergnzen Sie die Lcken der folgenden Stze mit dem richtigen Wort oder den richtigen
Wrtern.
1. Bei der
-Anweisung wird eine Anweisungsliste mit einer zugewiesenen
Beschriftung ausgewhlt, die dem Wert eines Ausdrucks entspricht.
2. Bei der
-Schleife wird die Bedingung am Ende anstatt am Anfang der
Schleife getestet.
3. Der einzige Operator, der drei Argumente annimmt, ist der
-Operator.
4. Die
-Schleife ist die kompakteste Mglichkeit fr eine Iteration durch die
Elemente in einer Sammlung.
5. Auf einem 32-Bit-Computer beansprucht eine Variable des Datentyps int
Byte an Speicher.
6. Um auf das erste Element in einem Array zuzugreifen, verwenden Sie einen Index
von
.
7.
ist eine Programmiertechnik, mit der eine Methode sich selbst aufruft, um
ein Ergebnis zu berechnen.
8.
sind Datenfelder oder lokale Variablen, deren Wert nicht verndert werden kann.
9. Wenn ein Algorithmus viele Bedingungen einbezieht, ist
ein kompaktes und
lesbares Format fr die Darstellung des Algorithmus.
10. Ein(e)
ist die grafische Darstellung eines Algorithmus.

28 | Lektion 1

Multiple-Choice
Kreisen Sie den Buchstaben ein, der der Antwort am besten entspricht.
1. Schreiben Sie den folgenden Codeausschnitt:
int n = 20;
int d = n++ + 5;
Welchen Wert hat d, nachdem dieser Codeausschnitt ausgefhrt wurde?
a. 25
b. 26
c. 27
d. 28
2. Schreiben Sie den folgenden Codeausschnitt:
private static void WhileTest()
{
int i = 1;
while (i < 5)
{
Console.WriteLine(Der Wert von i = {0}, i);
i++;
}
}
Wie oft wird die while-Schleife in diesem Codeausschnitt ausgefhrt?
a. 0
b. 1
c. 4
d. 5
3. Schreiben Sie den folgenden Codeausschnitt:
int number1 = 10;
int number2 = 20;
if (number2 > number1)
Console.WriteLine(Zahl1);
Console.WriteLine(Zahl2);
Welche Ausgabe wird angezeigt, nachdem dieser Codeausschnitt ausgefhrt wurde?
a. number1
b. number2
c. number1
number2
d. number2
number1
4. Wenn in einer switch-Anweisung keine der case-Anweisungen mit dem switch-Ausdruck bereinstimmt, wird die Steuerung an welche Anweisung bergeben?
a. break
b. continue
c. default
d. return
5. Sie mssen Code schreiben, mit dem eine Verbindung mit einer Datenbank getrennt
wird, und Sie mssen sicherstellen, dass der Code immer ausgefhrt wird, ungeachtet
der mglichen Auslsung einer Ausnahme. Wo sollten Sie diesen Code schreiben?
a. In einem try-Block
b. In einem catch-Block

Einfhrung in das Programmieren | 29

c. In einem finally-Block
d. In der Main-Methode
6. Sie mssen Werte zwischen 0 und 255 speichern. Auerdem mssen Sie sicherstellen,
dass Ihr Programm nicht zu viel Arbeitsspeicher bentigt. Mit welchem Datentyp
mssen Sie diese Werte speichern?
a. byte
b. char
c. short
d. int
7. Wenn im rekursiven Algorithmus der Basisfall fehlt, erstellen Sie eine Endlosschleife.
Eine Endlosschleife lst eine Ausnahme im Programm aus. Welche Ausnahme wird
vom Programm in diesem Fall ausgelst?
a. OutOfMemoryException
b. StackOverflowException
c. DivideByZeroException
d. InvalidOperationException
8. Sie lernen einen sich wiederholenden Algorithmus in C# zu entwickeln. Sie schreiben
die folgende Methode:
private static void ForTest()
{
for(int i = 1; i < 5;)
{
Console.WriteLine(Der Wert von i = {0}, i);
}
}

Wie oft wird die for-Schleife in diesem Code durchlaufen?


a. 0
b. 4
c. 5
d. unendlich
9. Welche der folgenden C#-Funktionen sollten Sie verwenden, um Code zu organisieren und global eindeutige Typen zu erstellen?
a. Assembly
b. Namespace
c. Klasse
d. Datentyp
10. Sie schreiben den folgenden Codeausschnitt:
int[] numbers = {1, 2, 3, 4};
int val = numbers[1];
Auerdem erstellen Sie eine Variable vom Typ RectangleHandler wie folgt:
RectangleHandler handler;
Welchen Wert hat die Variable val, nachdem dieser Codeausschnitt ausgefhrt
wurde?
a. 1
b. 2
c. 3
d. 4

30 | Lektion 1

Kompetenztest
Szenario 1-1: bertragen einer Entscheidungstabelle in ein C#-Programm
Sie entwickeln eine Anwendung zur Rechnungsstellung, die auf Grundlage der
Absatzmenge eines Produkts die Prozentstze fr Rabatte berechnet. Die Logik fr die
Berechnung der Rabatte wird in der folgenden Entscheidungstabelle aufgefhrt. Wenn Sie
eine C#-Methode schreiben mssten, die die gleiche Logik zur Berechnung von Rabatten
verwendet, wie wrden Sie dieses Programm schreiben?
Menge < 10

Menge < 50

Menge < 100

5 %

10 %

15 %

20 %

Rabatt

Szenario 1-2: bertragen eines Flussdiagramms in ein C#-Programm


Sie entwickeln eine Bibliothek mathematischer Funktionen. Zuerst entwickeln Sie
folgendes Flussdiagramm, das den Algorithmus fr die Berechnung der Fakultt einer
Zahl beschreibt. Sie mssen ein entsprechendes C#-Programm fr dieses Flussdiagramm
schreiben. Wie wrden Sie dieses Programm schreiben?

START

Eingabe n

fact = 1

n > 1?

Ja
fact = fact *n

n=n1

Ausgabe fact

STOPP

Nein

Einfhrung in das Programmieren | 31

Kenntnistest
Szenario 1-3: Behandeln von Ausnahmen
Sie schreiben Code fr eine einfache arithmetische Bibliothek. Sie entscheiden sich,
eine Methode namens Divide zu erstellen, von der die zwei Argumente x und y
angenommen werden, und die den Wert von x/y zurckgibt. Sie mssen jede arithmetische
Ausnahme abfangen, die mglicherweise aufgrund von Fehlern in der Arithmetik,
der Typumwandlung oder den Datentypenumwandlungen ausgelst wird. Sie mssen
zudem jede andere Ausnahme abfangen, die mglicherweise vom Code ausgelst wird.
Um diese Anforderungen zu erfllen, mssen Sie einen korrekt strukturierten Code zur
Ausnahmebehandlung erstellen. Wie wrden Sie dieses Programm schreiben?

Szenario 1-4: Erstellen eines rekursiven Algorithmus


Sie entwickeln eine Bibliothek von Hilfsprogrammfunktionen fr die Anwendung.
Sie mssen eine Methode schreiben, die einen Integer-Wert annimmt und eine Anzahl
bedeutender Stellen darin zhlt. Sie mssen ein rekursives Programm schreiben, um dieses
Problem zu lsen. Wie wrden Sie dieses Programm schreiben?

LEKTION

Einfhrung in die
objektorientierte
Programmierung

THEMEN UND LERNZIELE DIESER LEKTION


Fertigkeiten/Konzepte

MTA-Prfungsziel

Nummer des
MTA-Prfungsziels

Erluterungen zu Objekten

Die Grundlagen von


Klassen verstehen

2.1

Erluterungen zu Werten
und Verweisen

Computerspeicherung
und Datentypen verstehen

1.1

Erluterungen zur Kapselung

Kapselung verstehen

2.4

Erluterungen zur Vererbung

Vererbung verstehen

2.2

Erluterungen zur Polymorphie

Polymorphie verstehen

2.3

Erluterungen zu Schnittstellen

Kapselung verstehen

2.4

SCHLSSELBEGRIFFE
Zugriffsmodifizierer

Kapselung

Polymorphie

Accessoren

Ereignisse

Eigenschaften

Abstrakte Klassen

Vererbung

Verweistyp

Automatisch implementierte
Eigenschaften

Schnittstellen

Versiegelte Klassen

Klasse

Methode

Signatur

Namespace

Statische Zahlen

Objekte

Werttyp

Konstruktoren
Delegaten

Sie sind Softwareentwickler bei der Northwind Corporation. Sie arbeiten als Teil
eines Teams, das Computerprogramme entwickelt, die komplexe Geschftsprobleme
lsen. Alle von Ihnen geschriebenen Programme mssen leicht zu verstehen und
ber einen lngeren Zeitraum zu verwalten sein. Daher mssen Sie Programme mit
Techniken entwickeln, die die Wiederverwendung von Code, die Erweiterbarkeit
und Zusammenarbeit frdern. Darber hinaus sollten Sie Ihre Programme auf realen
Unternehmenskonzepten modellieren, wie z. B. Kunden, Produkten, Lieferanten und
Interaktionen zwischen ihnen, anstatt die Programme berwiegend als Listen von
Methoden zu betrachten.

32

Einfhrung in die objektorientierte Programmierung | 33

Erluterungen zu Objekten

FAZIT

Objektorientierte Programmierung ist eine Programmiertechnik, bei der Objekte


verwendet werden. Objekte sind eigenstndige Datenstrukturen, die aus Eigenschaften,
Methoden und Ereignissen bestehen. Eigenschaften geben die Daten an, die durch
ein Objekt dargestellt werden, Methoden geben das Verhalten eines Objekts an und
Ereignisse ermglichen die Kommunikation zwischen Objekten.

Der objektorientierte Ansatz


Ein Softwareobjekt ist vom Konzept her einem Objekt der realen Welt hnlich.
Sie finden einen Einstieg in objektorientiertes Denken, indem Sie reale Objekte wie
Autos, Handys, Musikplayer usw. genauer betrachten: All diese Objekte weisen einen
Zustand und ein Verhalten auf. Zum Beispiel haben Autos nicht nur verschiedene
Zustnde (z. B. Modellname, Farbe, aktuelle Geschwindigkeit, Kraftstofffllstand),
sondern auch verschiedene Verhaltensweisen (z. B. Beschleunigen, Bremsen,
Gangwechsel). Zudem bemerken Sie, dass einige Objekte einfacher und andere komplexer
sind. Die meisten komplexen Objekte (wie ein Auto) bestehen aus kleineren Objekten,
die wiederum einen eigenen Zustand und ein eigenes Verhalten aufweisen. Und obwohl
ein Auto ein komplexes Objekt ist, mssen Sie nur ein paar Dinge wissen, um mit ihm zu
interagieren. Whrend Sie beispielsweise ein Auto fahren, lsen Sie ein Verhalten wie das
Beschleunigen oder Bremsen einfach aus. Die vielen tausend internen Details, die unter
der Motorhaube geschehen, brauchen Sie nicht zu verstehen.
Ein Softwareobjekt ist vom Konzept her einem Objekt der realen Welt hnlich. Innerhalb
der Softwareumgebung speichert ein Objekt seinen Zustand in Feldern und macht sein
Verhalten durch Methoden verfgbar. Wenn eine Methode fr ein Objekt aufgerufen wird,
erhalten Sie eine klar definierte Funktion, ohne sich ber die innere Komplexitt des
Objekts oder der Methode Gedanken machen zu mssen. Das Konzept des Ausblendens
der Komplexitt wird als Kapselung bezeichnet. Es ist eines der vielen Funktionen der
objektorientierten Programmierung, ber die Sie in dieser Lektion mehr erfahren werden.

Erluterungen zu Klassen
Eine Klasse ist die Vorlage, aus der einzelne Objekte erstellt werden.
In der realen Welt bentigen Objekte eine Vorlage, die definiert, wie sie erstellt werden
sollen. Alle Objekte, die aus der gleichen Vorlage erstellt werden, sehen hnlich aus
und verhalten sich auf hnliche Weise. Denken Sie beispielsweise ber ein bestimmtes
Autofabrikat und -modell nach.
In der Softwarewelt ist eine Klasse die Vorlage, aus der einzelnen Objekte erstellt werden.
Ein Objekt wird auch als eine Instanz einer Klasse bezeichnet.
ERSTELLEN EINER KLASSE
VORBEREITUNG. Bevor Sie mit diesen Schritten beginnen, mssen Sie Microsoft Visual
Studio starten und ein neues Konsolenanwendungsprojekt mit dem Namen Lesson02
ffnen. Fhren Sie dann die folgenden Aufgaben aus:
1. Fgen Sie dem Projekt eine neue Visual C#-Klasse namens Rectangle hinzu.
2. Ersetzen Sie den Code fr die Rectangle-Klasse durch folgenden Code:
class Rectangle
{
private double length;

34 | Lektion 2
private double width;
public Rectangle(double l, double w)
{
length = l;
width = w;
}
public double GetArea()
{
return length * width;
}
}
3. Whlen Sie Erstellen > Lesson02 aus, um das Projekt zu erstellen. Stellen Sie sicher,
dass keine Fehler auftreten.

PAUSE. Lassen Sie das Projekt zur Verwendung in der nchsten bung geffnet.
HINWEIS

Jede Klasse ist die


Definition eines neuen
Datentyps. Daher wird
eine Klassendefinition
manchmal auch als
Typbezeichnet.

Sie haben gerade eine neue C#-Klasse namens Rectangle erstellt. Eine neue Klasse wird mit dem
Schlsselwort class definiert. Hier hat die Rectangle-Klasse zwei Datenfelder: length und width.
Diese Felder werden mithilfe des Zugriffsmodifizierers private definiert. Ein Zugriffsmodifizierer
gibt an, welcher Bereich des Codes Zugriff auf ein Feld hat. Zum Beispiel beschrnkt der
Zugriffsmodifizierer public nicht den Zugriff, aber der Zugriffsmodifizierer private beschrnkt
den Zugriff innerhalb der Klasse, in der das Feld definiert ist.
Diese Klasse definiert auch eine Methode namens GetArea. Aber was genau ist eigentlich
eine Methode?

ERLUTERUNGEN ZU METHODEN
Eine Methode ist ein Codeblock, der eine Reihe von Anweisungen enthlt.

HINWEIS

Der Name einer


Methode, die
Parameterliste und
die Reihenfolge
der Datentypen der
Parameter werden
zusammen als die
Signatur der Methode
anerkannt. Eine
Methodensignatur muss
innerhalb einer Klasse
eindeutig sein.

In der Softwarewelt definiert eine Methode die Aktionen oder Vorgnge, die von einer
Klasse untersttzt werden. Eine Methode wird durch die Angabe der Zugriffsebene,
des Rckgabewerts, des Namens der Methode und einer optionalen Parameterliste in
runden Klammern gefolgt von einem Codeblock in geschweiften Klammern definiert.
Im vorherigen Beispiel definiert die Klasse Rectangle beispielsweise eine einzelne
Methode mit dem Namen GetArea. Fr GetArea ist die Zugriffsebene public, der
Rckgabetyp ist double, der Methodenname ist GetArea, die Parameterliste ist leer
und der Codeblock ist eine einzelne Rckgabeanweisung.
Eine Methode kann dem aufrufenden Code einen Wert zurckgeben. Wenn es nicht
beabsichtigt ist, mit der Methode einen Wert zurckzugeben, wird der Rckgabetyp vom
Schlsselwort void bestimmt. Die Methode muss die Anweisung return verwenden, um
einen Wert zurckzugeben. Die return-Anweisung beendet die Ausfhrung der Methode
und gibt den angegebenen Wert an den aufrufenden Code zurck. Der Datentyp des von
einer Methode zurckgegebenen Werts muss mit dem Rckgabetyp bereinstimmen, der
in der Meldungszeile der Methode angegeben ist.
Um zum obigen Beispiel zurckzukehren: Der Rckgabetyp der Methode GetArea
ist double. Das bedeutet, dass die GetArea-Methode einen Wert vom Typ double
zurckgeben muss. Die GetArea-Methode erfllt diese Anforderung durch die Rckgabe
des Ausdrucks length * width, der ein double-Wert ist.
Der folgende Code definiert eine InitFields-Methode, die zwei Parameter vom Typ
double annimmt und void zurckgibt:
public void InitFields(double l, double w)
{
length = l;
width = w;
}

Einfhrung in die objektorientierte Programmierung | 35

Die Methode InitFields nimmt zwei Parameter an und verwendet die jeweiligen
Parameterwerte, um die Lnge und Breite des Datenfelds zuzuweisen. Wenn der
Rckgabewert einer Methode ungltig ist, kann eine Rckgabeanweisung ohne Wert
verwendet werden. Wenn, wie in der InitFields-Methode, keine Rckgabeanweisung
verwendet wird, wird die Ausfhrung der Methode beendet, sobald das Ende des
Codeblocks erreicht ist. Die InitFields-Methode kann verwendet werden, um den Wert
der Datenfelder ordnungsgem zu initialisieren. Wie Sie aber im folgenden Abschnitt
erfahren, geben Ihnen Konstruktoren bereits eine Mglichkeit, eine Klasse zu initialisieren.

GRUNDLAGEN ZU KONSTRUKTOREN
Konstruktoren werden fr die Initialisierung der Datenmember des Objekts verwendet.
Konstruktoren sind bestimmte Klassenmethoden, die ausgefhrt werden, wenn die
neue Instanz einer Klasse erstellt wird. Konstruktoren werden fr die Initialisierung der
Datenmember des Objekts verwendet. Konstruktoren mssen ber genau den gleichen
Namen wie die Klasse verfgen und haben keinen Rckgabetyp. Es knnen fr eine Klasse
mehrere Konstruktoren jeweils mit einer einzigartigen Signatur definiert werden.
Ein Konstruktor, der keine Argumente akzeptiert, wird als Standardkonstruktor
bezeichnet. Wenn eine Klasse ohne einen Konstruktor definiert ist, wird ein unsichtbarer
Standardkonstruktor automatisch generiert, der keine Aufgaben ausfhrt.
Es ist oft sinnvoll, zustzliche Konstruktoren zu besitzen, um mehr Mglichkeiten der
Initialisierung eines Objekts bereitzustellen. Die oben definierte Rectangle-Klasse stellt
nur eine Mglichkeit dar, das Objekt zu erstellen und zu initialisieren: durch den Aufruf
des Konstruktors, der zwei Parameter akzeptiert, beide vom Datentyp default.

ERSTELLEN VON OBJEKTEN


Objekte werden aus den Vorlagen erstellt, die von Klassen definiert sind.
ERSTELLEN EINES OBJEKTS
VORBEREITUNG. Verwenden Sie fr diese Aktivitt das Konsolenanwendungsprojekt
(Lesson 02), das Sie in der vorherigen bung erstellt haben. Fhren Sie anschlieend
folgende Schritte aus:
1. ndern Sie den Code der Program-Klasse wie folgt:
class Program
{
static void Main(string[] args)
{
Rectangle rect = new Rectangle(10.0, 20.0);
double area = rect.GetArea();
Console.WriteLine(Bereich von Rectangle: {0},
Bereich);
}
}
2. Whlen Sie Debuggen > Starten ohne Debuggen aus. Ein Konsolenfenster wird
geffnet, das die Flche des Rechtecks anzeigt.
3. SPEICHERN Sie das Projekt.
PAUSE. Lassen Sie das Projekt zur Verwendung in der nchsten bung geffnet.
Die Klasse Rectangle stellt nur eine Mglichkeit dar, eine Instanz der Klasse zu
erstellen: durch den Aufruf eines Konstruktors mit zwei Argumenten des Datentyps
double. Hier erstellen Sie ein Objekt mithilfe des Schlsselworts new gefolgt vom
Aufruf des entsprechenden Klassenkonstruktors.

36 | Lektion 2
HINWEIS

Klassen und Objekte


sind unterschiedlich.
Eine Klasse definiert
die Vorlage fr ein
Objekt, ist aber selbst
kein Objekt. Ein
Objekt ist dagegen eine
konkrete Instanz einer
Klasse, jedoch keine
Klasse selbst.

HINWEIS

Eigenschaften werden oft


als intelligente Felder
bezeichnet, weil sie Code
fr die berprfung der
Datenkonsistenz oder
-gltigkeit enthalten
knnen.

Wenn der Code ausgefhrt wird, wird ein Objekt vom Typ Rectangle im Heapspeicher
erstellt. Ein Verweis auf diesen Arbeitsspeicher wird in der Variablen rect gespeichert, und
die Variable rect wird im Stapel gespeichert. Weiter unten in diesem Codeblock knnen
Sie rect verwenden, um auf das soeben erstellte Objekt zu verweisen und es zu bearbeiten.
Indem Sie den Verweis des Objekts verwenden, knnen Sie auf die Klassenmember
zugreifen. Zum Beispiel ruft der Code die GetArea-Methode fr das Objekt auf, und der
von der Methode zurckgegebene Wert wird in dem Bereich der Variablen gespeichert.
Auf die Datenfelder, length und width des Objekts rect kann hier nicht zugegriffen
werden, weil sie in der Klassendefinition als private gekennzeichnet sind.

GRUNDLAGEN ZU EIGENSCHAFTEN
Eigenschaften ermglichen es, sicher und flexibel auf Klassendaten zuzugreifen.
Eigenschaften sind Klassenmember, auf die wie auf Datenfelder zugegriffen werden kann,
die aber Code wie eine Methode enthalten. Eigenschaften werden hufig verwendet, um
die Datenfelder einer Klasse kontrollierter zur Verfgung zu stellen. Ein private-Feld kann
zum Beispiel mithilfe einer public-Eigenschaft verfgbar gemacht werden. Es ist aber
nicht erforderlich, die Eigenschaften auf diese Weise zu verwenden.
Eine Eigenschaft verfgt ber zwei Accessoren: get und set. Der get-Accessor
wird fr die Rckgabe des Eigenschaftswerts verwendet, und der set-Accessor fr die
Zuweisung eines neuen Werts zur Eigenschaft. Eine Eigenschaft wird oft als public
definiert und hat konventionsgem immer einen Namen, der mit einem Grobuchstaben
beginnt. Im Gegensatz dazu beginnen private-Datenfelder nach der Konvention mit einem
Kleinbuchstaben.
ERSTELLEN VON EIGENSCHAFTEN
VERWENDEN Sie das Projekt, das Sie in der vorherigen bung gespeichert haben. Fhren

Sie dann die folgenden Aufgaben aus:


1. ndern Sie den Code der Klasse Rectangle (siehe unten). In diesem Code wird der
Konstruktor entfernt, und zwei Eigenschaften werden eingefgt:

class Rectangle
{
private double length;
private double width;
public double Length
{
get
{
return length;
}
set
{
if ( value > 0.0)

length = value;
}
}
public double Width
{
get
{
return width;
}

Einfhrung in die objektorientierte Programmierung | 37


set
{
if ( value > 0.0)
width = value;
}
}
public double GetArea()
{
return length * width;
}
}
2. ndern Sie dann den Code der Program-Klasse wie folgt:
class Program
{
static void Main(string[] args)
{
Rectangle rect = new Rectangle();
rect.Length = 10.0;
rect.Width = 20.0;
double area = rect.GetArea();
Console.WriteLine(

Bereich von Rectangle: {0}, area);
}
}


HINWEIS

Nach dem blichen


Programmierschema
mssen alle
Datenfelder einer
Klasse als private
deklariert werden.
Der Zugriff auf
diese private-Felder
findet ber publicEigenschaften statt,
die die Datenwerte auf
Gltigkeit berprfen.

3. Whlen Sie Debuggen > Starten ohne Debuggen aus. Ein Konsolenfenster wird
geffnet, das die Flche des Rechtecks anzeigt.
4. SPEICHERN Sie das Projekt.

PAUSE. Lassen Sie das Projekt zur Verwendung in der nchsten bung geffnet.
In dieser bung haben Sie die Klasse Rectangle um zwei Eigenschaften erweitert:
Length und Width. Eigenschaften werden hufig mit einem public-Zugriffsmodifizierer
definiert. Im Code fr die Length-Eigenschaft gibt der get-Accessor einfach den Wert
des Datenfelds length zurck. Jedoch berprft der set-Accessor den der Eigenschaft
zugewiesenen Wert (mithilfe des Schlsselworts value) und ndert das Datenfeld length
nur, wenn der Wert positiv ist. Die private-Felder length und width werden auch als
Untersttzungsfelder fr die Eigenschaften bezeichnet, die sie jeweils verfgbar machen.
Die Rectangle-Klasse deklariert zudem keinen expliziten Konstruktor. In diesem Fall
mssen die Benutzer der Klasse (Main-Methode) den Standardkonstruktor verwenden und
sich auf Eigenschaften zum Initialisieren der Klassendaten verlassen.
Die Main-Methode verwendet die Eigenschaften Length und Width, um die Daten
fr das rect-Objekt festzulegen. Der Versuch, fr Length oder Width einen negativen
Wert festzulegen, wird ignoriert. In diesem Fall haben die Datenfelder zudem noch ihren
ursprnglichen Wert 0.
Wenn Sie Eigenschaften definieren, knnen Sie entweder den get- oder set-Accessor
ausschlieen. Wenn Sie keinen set-Accessor einfgen, bieten Sie keine Mglichkeit,
den Wert der Eigenschaft festzulegen. Als Ergebnis haben Sie eine schreibgeschtzte
Eigenschaft. Auf der anderen Seite bieten Sie keine Mglichkeit, den Wert der Eigenschaft
abzurufen, wenn Sie den get-Accessor nicht einfgen. Infolgedessen haben Sie eine
lesegeschtzte Eigenschaft.

GRUNDLEGENDES ZU AUTOMATISCH IMPLEMENTIERTEN EIGENSCHAFTEN


Automatisch implementierte Eigenschaften vereinfachen Eigenschaftendeklarationen.

38 | Lektion 2

In C# wurden automatisch implementierte Eigenschaften ab Version 3 eingefgt. Dadurch


soll die Eigenschaftendeklaration vereinfacht werden, wenn es keine zustzliche Logik
gem den get- und set-Accessoren gibt. Ohne die Gltigkeitsprfungen sind z. B. die
Length- und Width-Eigenschaften wie folgt definiert:
private double length;
private double width;
public double Length
{
get
{
return length;
}
set
{
length = value;
}
}
public double Width
{
get
{
return width;
}
set
{
width = value;
}
}

Im Vergleich dazu wird aus der vereinfachten Syntax fr die Eigenschaftendeklaration mit
in C# automatisch implementierten Eigenschaften Folgendes:
public double Length { get; set; }
public double Width { get; set; }

In diesem Fall werden die Untersttzungsfelder fr die Eigenschaften im Hintergrund


definiert. Auerdem kann der Code nicht direkt auf sie zugreifen.
Die mit Standardkonstruktoren verwendeten automatisch implementierten Eigenschaften
knnen auch die Erstellung und Initialisierung von Objekten vereinfachen. Zum Beispiel
kann ein Objekt jetzt erstellt und wie folgt initialisiert werden:
static void Main(string[] args)
{
Rectangle rect = new Rectangle
{ Length = 10.0, Width = 20.0 };
Console.WriteLine(
Bereich von Rectangle: {0}, rect.GetArea());
}

VERWENDEN DES SCHLSSELWORTS THIS


Das Schlsselwort this kann fr den Zugriff auf Member aus den Konstruktoren,
Instanzmethoden und Accessoren der Instanzeigenschaften heraus verwendet werden.

Einfhrung in die objektorientierte Programmierung | 39

Das this-Schlsselwort verweist auf die aktuelle Instanz der Klasse. Sie knnen das
Schlsselwort this verwenden, um auf einen beliebigen Member des aktuellen Objekts zu
verweisen. Beispielsweise wurde weiter oben in diesem Kapitel die Rectangle-Klasse wie
folgt geschrieben:
class Rectangle
{
private double length;
private double width;
public Rectangle(double l, double w)
{
length = l;
width = w;
}
public double GetArea()
{
return length * width;
}
}

Sie htte jedoch auch wie folgt geschrieben werden knnen:


class Rectangle
{
private double length;
private double width;
public Rectangle(double l, double w)
{
this.length = l;
this.width = w;
}
public double GetArea()
{
return this.length * this.width;
}
}

HINWEIS

In C# werden die
Zeichen // verwendet,
um dem Code
einzeilige Kommentare
hinzuzufgen. Text nach
den //-Zeichen wird
vom Compiler ignoriert.
Mehrzeilige Kommentare
beginnen mit den
Zeichen /* und enden mit
den Zeichen */.

Wie Sie im zweiten Beispiel sehen knnen, wurde das Schlsselwort this innerhalb des
Konstruktors und der GetArea-Methode verwendet, um auf die Datenfelder des aktuellen
Objekts der Rectangle-Klasse zu verweisen. Obwohl es nicht notwendig war, das
Schlsselwort this in diesem Fall zu verwenden, bietet die Verwendung mehr Flexibilitt
bei der Benennung der Methodenparameter. Beispielsweise knnen Sie den Konstruktor
wie folgt definieren:
public Rectangle(double length, double width)
{
// die Parameternamen length und width
// Schatten der length- und width-Klassenmember
// in diesem Bereich
this.length = length;
this.width = width;
}

Im Rahmen der Definition des Rectangle-Konstruktors verweisen die Namen length


und width jetzt auf den bergebenen Parameter. Die Namen der Datenfelder wurden
schattiert. Auf sie kann nur mithilfe des Schlsselworts this zugegriffen werden.

40 | Lektion 2

GRUNDLEGENDES ZU DELEGATEN
Delegaten sind spezielle Typen, mit denen eine Methode mit einer bestimmten
Signatur gekapselt wird.
Delegaten sind besondere Objekte, die einen Verweis auf eine Methode mit einer
bestimmten Signatur enthalten knnen. Ein Delegat wird durch das Schlsselwort
delegate definiert. Beispielsweise knnen Sie einen Delegaten wie folgt definieren:
public delegate void RectangleHandler(Rectangle rect);

Die Delegatdefinition gibt die Signatur der Methode an, deren Verweis von einem
Delegatobjekt gespeichert werden kann. In dem obigen Code definieren Sie beispielsweise
einen RectangleHandler-Delegaten, der Verweise auf eine Methode enthalten kann, die
void zurckgibt und einen einzelnen Parameter des Typs Rectangle akzeptiert.
Wenn Sie also eine Methode mit einer hnlichen Signatur haben, ist sie ein idealer
Kandidat fr die Zuweisung zu einer Delegatinstanz. Zum Beispiel:
public void DisplayArea(Rectangle rect)
{
Console.WriteLine(rect.GetArea());
}

Der Delegattyp kann verwendet werden, um eine Variable zu deklarieren, die auf eine
beliebige Methode mit der gleichen Signatur wie der Delegat verweisen kann. Beispiel:
RectangleHandler handler;

Sie weisen anschlieend mit der folgenden Syntax dem Delegaten die Methode zu:
handler += new RectangleHandler(DisplayArea);

Alternativ knnen Sie die folgende Kontextmensyntax verwenden:


handler += DisplayArea;

Beachten Sie, dass die Syntax den Additionsvorgang verwendet. Dies bedeutet, dass
Sie mehr als eine Methode (kompatibler Signatur) zuordnen knnen. Dadurch wird eine
Aufrufliste einer oder mehrerer Methoden erstellt.
Schlielich kann ein Delegat von einer Methoden aufrufenden Syntax wie folgt
aufgerufen werden:
Rectangle rect = new Rectangle(10, 20);
handler(rect);

Wenn der Delegat auf diese Weise aufgerufen wird, werden alle Methoden in der
Aufrufliste aufgerufen. Im konkreten Beispiel verweist das Handlerobjekt auf nur eine
DisplayArea-Methode. Daher wird die DisplayArea-Methode mit dem rect-Objekt als
Parameter aufgerufen.
Unter vielen anderen Anwendungen bilden Delegaten die Grundlage fr
Ereignisdeklarationen, wie im nchsten Abschnitt besprochen.

ERLUTERUNGEN ZU EREIGNISSEN
Ereignisse sind eine Mglichkeit, mit der eine Klasse andere Klassen oder Objekte
benachrichtigen kann, wenn etwas Interessantes passiert. Eine die Benachrichtigung
bermittelnde Klasse wird als Verleger eines Ereignisses bezeichnet. Eine die
Benachrichtigung empfangende Klasse wird als Abonnent eines Ereignisses bezeichnet.
Ereignisse sind im Zusammenhang einer grafischen Benutzeroberflche (Graphical
User Interface, GUI) leicht verstndlich. Wenn beispielsweise ein Benutzer auf eine
Schaltflche klickt, tritt ein Click-Ereignis ein. Mehrere Benutzeroberflchenelemente

Einfhrung in die objektorientierte Programmierung | 41

knnen dieses Ereignis abonnieren und ihren visuellen Zustand entsprechend ndern
(z. B. sind einige Steuerelemente aktiviert oder deaktiviert). Bei dieser Art von
Ereigniskommunikation mssen die Ereignisverleger nicht wissen, welche Objekte die
ausgelsten Ereignisse abonnieren.
Ereignisse sind nicht nur auf die GUI-Programmierung beschrnkt. In der Tat spielen
Ereignisse eine wichtige Rolle in .NET Framework-Klassenbibliotheken als eine
Mglichkeit fr Objekte, nderungen an ihrem Zustand anzuzeigen. Sie werden in allen
Programmen mit Ereignissen arbeiten.
Wenn Sie Ereignisse definieren, bentigen Sie in der Regel zwei Informationen:
Einen Delegaten, der das Ereignis mit seinen Handlermethoden verbindet.
Eine Klasse, die die Ereignisdaten enthlt. Die Klasse wird in der Regel von der
EventArgs-Klasse abgeleitet.
Um ein Ereignis zu definieren, knnen Sie einen benutzerdefinierten Delegaten
verwenden. Wenn Ihr Ereignis keine ereignisspezifischen Daten enthlt, reicht in den
meisten Fllen jedoch die Verwendung vordefinierter Delegat-EventHandler aus. Der
EventHandler-Delegat wird wie folgt definiert:
public delegate void EventHandler(Object sender, EventArgs e);

Hier ist der sender-Parameter ein Verweis auf das Objekt, das das Ereignis auslst. Der
e-Parameter ist ein Verweis auf ein Ereignisdatenobjekt, das keine Ereignisdaten enthlt.
Die EventArgs-Klasse wird von Ereignissen verwendet, die beim Auslsen eines
Ereignisses keine ereignisbezogenen Informationen an einen Ereignishandler bergeben.
Wenn der Ereignishandler ereignisbezogene Informationen bentigt, muss die Anwendung
aus der EventArgs-Klasse eine Klasse fr die ereignisbezogenen Daten ableiten.
VERFFENTLICHEN UND ABONNIEREN VON EREIGNISSEN
VERWENDEN Sie zum Durchfhren der folgenden Aufgaben das Projekt, das Sie in der
vorherigen bung gespeichert haben:

HINWEIS

Das EventArgs.EmptyFeld stellt ein Ereignis


ohne Ereignisdaten
dar. Dieses Feld
entspricht einer
schreibgeschtzten
Instanz der EventArgsKlasse.

1. ndern Sie den Code der Klasse Rectangle folgendermaen:


class Rectangle
{
public event EventHandler Changed;
private double length;
public double Length
{
get
{
return length;
}
set
{
length = value;
Changed(this, EventArgs.Empty);
}
}
}
2. ndern Sie den Code der Program-Klasse wie folgt:
class Program
{
static void Main(string[] args)
{
Rectangle r = new Rectangle();

42 | Lektion 2

HINWEIS

Der Code in der


r_Changed-Methode
verwendet einen
Umwandlungsoperator,
um einen ObjektDatentyp in den
Rectangle-Datentyp
zu konvertieren. Die
Umwandlung wird
spter in dieser Lektion
im Abschnitt mit dem
Titel Umwandlung
zwischen Typen
erklrt.

r.Changed += new EventHandler(r_Changed);


r.Length = 10;
}
static void r_Changed(object sender, EventArgs e)
{
Rectangle r = (Rectangle)sender;
Console.WriteLine(
Value Changed: Length = {0},
r.Length);
}
}
3. Whlen Sie Debuggen > Starten ohne Debuggen aus. Ein Konsolenfenster ffnet sich
mit dem Hinweis, dass der Wert der Length-Eigenschaft gendert wurde.
4. SPEICHERN Sie das Projekt.

PAUSE. Lassen Sie das Projekt zur Verwendung in der nchsten bung geffnet.
In dem Beispiel, das Sie gerade abgeschlossen haben, definiert die Rectangle-Klasse
ein Changed-Ereignis, das beim ndern der Length-Eigenschaft des Rectangle-Objekts
aufgerufen wird. Der Delegat des Changed-Ereignisses ist vom Typ EventHandler. In
der Rectangle-Klasse wird das Changed-Ereignis aufgerufen, wenn der set-Accessor der
Length-Eigenschaft aufgerufen wird.
Sie abonnieren das Changed-Ereignis in der Main-Methode, indem Sie die r_ChangedMethode als Ereignishandler fr das Ereignis mithilfe des folgenden Codes anhngen:
r.Changed += new EventHandler(r_Changed);

Die Signatur der r_Changed-Methode erfllt die Anforderungen des EventHandlerDelegaten. Die r_Changed-Methode wird aufgerufen, sobald Sie in der Main-Methode den
Wert der Length-Eigenschaft festlegen.
Der obige Code verwendet den Operator += anstelle des einfachen Zuweisungsoperators
(=), um den Ereignishandler anzuhngen. Mit der Verwendung des +=-Operators stellen
Sie sicher, dass der Ereignishandler einer dem Ereignis bereits angehngten Liste von
Ereignishandlern hinzugefgt wird. Diese Technik erlaubt es, mehrere Ereignishandler
zu besitzen, die auf ein Ereignis reagieren knnen. Wenn Sie den Zuweisungsoperator
(=) verwenden, um den neuen Ereignishandler zuzuweisen, werden alle vorhandenen
Ereignishandler berschrieben, die an das Ereignis angefgt sind. Als Ergebnis wird der
neu angefgte Ereignishandler nur ausgelst, wenn das Ereignis aufgerufen wird.

ERLUTERUNGEN ZU NAMESPACES
Ein Namespace ermglicht es Ihnen, Code zu organisieren und einzigartige
Klassennamen zu erstellen.
Ein Namespace ist ein Sprachenelement, das es Ihnen ermglicht, Code zu organisieren und
global eindeutige Klassennamen zu erstellen. Angenommen, Sie erstellen eine Klasse mit
dem Namen Widget. Die Chancen stehen gut, dass ein anderes Unternehmen auch Code
liefern wird, der eine Klasse mit dem Namen Widget enthlt. Es stellt sich die Frage, wie
Sie in diesem Fall die Mehrdeutigkeit in Namen handhaben. Die Lsung besteht darin, den
Code innerhalb eines Namespaces zu organisieren. Nach einer allgemeinen Konvention wird
der Firmenname im Namespace verwendet. Beispielsweise knnten Sie Folgendes umsetzen:
namespace CompanyA
{
public class Widget { }
}

Einfhrung in die objektorientierte Programmierung | 43

und
namespace CompanyB
{
public class Widget { }
}

Hier kann auf die Klasse von dem Namespace CompanyA eindeutig durch den
vollqualifizierten Klassennamen CompanyA.Widget verwiesen werden, whrend das
andere Widget eindeutig als CompanyB.Widget identifiziert werden kann.
.NET Framework verwendet Namespaces umfassend zur Organisation aller seiner
Klassen. Beispielsweise gruppiert der System-Namespace alle grundlegenden Klassen.
Der System.Data-Namespace organisiert Klassen fr den Datenzugriff. hnlich wird der
System.Web-Namespace fr webspezifische Klassen verwendet.
Durch die Verwendung von Namespaces besteht natrlich die Gefahr, dass sehr lange vollstndig
qualifizierte Klassenname entstehen, die zu unbersichtlichen Programmen und einer Unmenge
an Eingaben fhren knnen. C# lst dieses Problem ber die Verwendung der using-Direktive.
Sie knnen die using-Direktive am Anfang der Klassendatei wie folgt verwenden:
using System.Text;

Sobald Sie einem Namespace die using-Direktive hinzugefgt haben, mssen Sie Klassen
aus dem Namespace in der Datei nicht vollstndig qualifizieren.

ERLUTERUNGEN ZU STATISCHEN MEMBERN


Statische Member gehren zu einer Klasse anstatt zu einzelnen Objekten.
Die Klassenmember, die bisher in diesem Abschnitt besprochen wurden (z. B.
Datenfelder, Methoden und Eigenschaften), funktionieren auf Basis einzelner Objekte.
Solche Mitglieder werden als Instanzmember bezeichnet, weil sie erst verwendet werden
knnen, nachdem eine Instanz einer Klasse erstellt wurde. Das Schlsselwort static
dagegen wird fr die Deklaration von Membern verwendet, die keinen individuellen
Objekten angehren, sondern einer Klasse selbst. Solche Klassenmember werden als
statische Member aufgerufen. Ein gngiges Beispiel fr einen statischen Member ist die
bekannte Main-Methode, die als Einstiegspunkt fr Ihr Programm dient.
ERSTELLEN STATISCHER MEMBER
VERWENDEN Sie das Projekt, das Sie in der vorherigen bung gespeichert haben. Fhren
Sie dann die folgenden Schritte aus:

1. ndern Sie den Code der Klasse Rectangle folgendermaen:

class Rectangle
{
public static string ShapeName
{
get { return Rectangle; }
}
public double Length { get; set; }
public double Width { get; set; }
public double GetArea()
{
return this.Length * this.Width;
}
}

44 | Lektion 2

2. ndern Sie den Code der Program-Klasse wie folgt:

class Program
{
static void Main(string[] args)
{
Rectangle rect = new Rectangle
{ Length = 10.0, Width = 20.0 };
Console.WriteLine(Shape Name: {0}, Area: {1},
Rectangle.ShapeName,
rect.GetArea());
}
}

3. Whlen Sie Debuggen > Starten ohne Debuggen aus. Ein Konsolenfenster wird
geffnet, und der Name und die Flche des Shapes werden angezeigt.
4. SPEICHERN Sie das Projekt.

PAUSE. Lassen Sie das Projekt zur Verwendung in der nchsten bung geffnet.

BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie die
Grundlagen von
Klassen?
2.1

Wenn die Instanz einer Klasse erstellt wird, wird fr jedes Instanzenfeld eine separate
Kopie erstellt. Es wird doch nur eine Kopie eines statischen Felds von allen Instanzen
freigegeben.
Auf einen statischen Member kann von einem Instanzenobjekt nicht verwiesen
werden. Stattdessen wird ber den Klassennamen (wie Rectangle.ShapeName
in der obigen bung) auf einen statischen Member verwiesen. Es ist nicht mglich, den
this-Schlsselwortverweis mit einer statischen Methode oder Eigenschaft zu verwenden, da
das this-Schlsselwort nur fr den Zugriff auf Instanzenobjekte verwendet werden kann.

Erluterungen zu Werten und Verweisen


FAZIT

Ein Werttyp speichert einen Wert direkt, whrend ein Verweistyp nur einen Verweis auf
einen tatschlichen Wert speichert.
Ein Werttyp speichert Daten direkt in dem Arbeitsspeicher. Verweistypen speichern
dagegen nur einen Verweis auf einen Speicherbereich. Hier sind die tatschlichen
Daten im Speicherbereich gespeichert, auf den verwiesen wird. Die meisten integrierten
grundlegenden Datentypen (wie bool, int, char, double usw.) sind Werttypen.
Benutzerdefinierte Datentypen, die mit dem Schlsselwort struct erstellt werden, sind
auch Werttypen. Verweistypen umfassen die Typen, die mithilfe der Schlsselwrter
object, string, interface, delegate und class erstellt werden.

Grundlegendes zu Strukturen
Das Schlsselwort struct wird verwendet, um benutzerdefinierte Typen zu erstellen,
die aus kleinen Gruppen von verwandten Feldern bestehen. Strukturen sind
Werttypen im Gegensatz zu Klassen, die Verweistypen sind.
Strukturen werden mit dem Schlsselwort struct folgendermaen definiert:
public struct Point
{
public double X, Y;
}

Strukturen knnen die meisten Elemente enthalten, die Klassen enthalten knnen. Dazu
gehren Konstruktoren, Methoden, Eigenschaften usw. Wie Sie im nchsten Abschnitt

Einfhrung in die objektorientierte Programmierung | 45


HINWEIS

Strukturen werden
meist verwendet, um
einfache Typen zu
erstellen. Wenn Sie
eine sehr komplexe
Struktur erstellen,
empfiehlt es sich,
stattdessen eine Klasse
zu verwenden.

Abbildung 2-1
Visualisieren eines Werttyps
im Arbeitsspeicher

lernen, sind Strukturen jedoch Werttypen, whrend Klassen Verweistypen sind. Im Gegensatz
zueiner Klasse kann eine Struktur nicht von einer anderen Klasse oder Struktur erben.

Grundlegendes zur Speicherbelegung


Nachdem Sie einen Wert oder Text in eine Zelle eingegeben haben, knnen Sie ihn
auf unterschiedliche Art und Weise ndern. Sie knnen auch die Inhalte vollstndig
entfernen, einen anderen Wert fr den alten Wert eingeben oder Ihre Eingaben ndern.
Werttypen lassen sich gut von Verweistypen unterscheiden, indem Sie visualisieren, wie
jeder von ihnen im Speicher dargestellt wird. Abbildung 2-1 zeigt, wie Werttypen im
Speicher erstellt werden. Wenn Sie beispielsweise eine Variable vom Typ int erstellen,
wird ein benannter Speicherbereich erstellt, den Sie zum Speichern eines Werts vom Typ
int verwenden knnen. Anfangs, wenn Sie keinen Wert ausdrcklich zuweisen, wird
der Standardwert des Datentyps (fr int ist der Standardwert 0) im Speicherbereich
gespeichert. Wenn dann eine Zuordnung erfolgt, wird die vom Variablennamen identifizierte
Speicheradresse mit dem neuen Wert (10 bei der Zuordnung in Abbildung 2-1) aktualisiert.
Codeansicht

Speicheransicht
number

int number;

0
number

number = 10;

10

Werfen Sie nun einen Blick auf Abbildung 2-2, die einen Verweistyp zeigt, genauer
gesagt, den string-Datentyp. Wenn Sie eine Variable vom Typ string erstellen, wird ein
Speicherbereich erstellt, der von diesem Namen identifiziert wird. Dieser Speicherbereich
enthlt jedoch nicht den Inhalt der Zeichenfolge. Vielmehr speichert diese Variable die
Speicheradresse (einen Verweis) des Speicherorts, an dem die Zeichenfolge tatschlich
gespeichert ist.
Abbildung 2-2
Visualisieren eines
Verweistyps im
Arbeitsspeicher

Codeansicht

Speicheransicht
name

string name;

null

address

data

m100

"Northwind"

name
name = "Northwind";

m100

Wenn am Anfang kein Wert zugewiesen ist, hat die Variable den Wert NULL (einen
Nullverweis, diese Variable verweist also nicht auf eine gltige Speicheradresse). Dann in
der nchsten Anweisung:
name = Northwind;

wird die Zeichenfolge Nordwind in einem bestimmten Speicherbereich erstellt (sagen


wir in diesem Fall, die Speicheradresse ist m100), und die Speicheradresse wird im
Variablennamen gespeichert. Spter, wenn der Wert des Variablennamens abgerufen wird,

46 | Lektion 2

wird von der Laufzeit festgestellt, dass die Inhalte nicht in der Variablen, sondern im
Speicherbereich gespeichert werden, auf den die Variable verweist.
KOPIEREN VON WERT- UND VERWEISTYPEN
VERWENDEN Sie das Projekt, das Sie in der vorherigen bung gespeichert haben, um die
folgenden Schritte auszufhren:

HINWEIS

Es ist mglich, eine


Struktur zu erstellen,
ohne den new-Operator
zu verwenden. Sie
knnen einfach mit
Point p1; eine Variable
des struct-Typs
erstellen.

HINWEIS

Wenn Sie die Variable


eines Verweistyps in
eine andere Variable
des gleichen Typs
kopieren, werden nur
die Verweise kopiert.
Als Folge verweisen
beide Variablen nach
dem Kopiervorgang auf
das gleiche Objekt.

1. Fgen Sie den folgenden Code nach der Rectangle-Klassendefinition hinzu, um eine
Point-Struktur zu erstellen:

struct Point
{
public double X, Y;
}

2. ndern Sie den Code der Main-Methode folgendermaen:

static void Main(string[] args)


{
Point p1 = new Point();
p1.X = 10;
p1.Y = 20;
Point p2 = p1;
p2.X = 100;
Console.WriteLine(p1.X = {0}, p1.X);
Rectangle rect1 = new Rectangle
{ Length = 10.0, Width = 20.0 };
Rectangle rect2 = rect1;
rect2.Length = 100.0;
Console.WriteLine(rect1.Length = {0},
rect1.Length);
}

3. Whlen Sie Debuggen > Starten ohne Debuggen aus. Ein Konsolenfenster wird
geffnet und zeigt die Werte fr p1.X und rect1.Length an.
4. SPEICHERN Sie das Projekt.

PAUSE. Lassen Sie das Projekt zur Verwendung in der nchsten bung geffnet.
Hier erstellt der erste Teil des Programms eine Kopie des Werttyps Point, und der
zweite Teil erstellt eine Kopie des Verweistyps Rectangle.
Analysieren wir zunchst, wie die Kopie eines Werttyps erstellt wird. Wenn die folgende
Anweisung ausgefhrt wird, wird eine neue Variable p2 im Arbeitsspeicher erstellt, und
der Inhalt wird aus der Variablen p1 kopiert:
Point p2 = p1;

Nachdem diese Anweisung ausgefhrt wurde, wird die Variable p2 erstellt, und der
Inhalt von Variable p1 wird in Variable p2 kopiert. p1 und p2 besitzen eigene
Wertestze in den jeweiligen Speicherbereichen. Wenn folglich die folgende Anweisung
ausgefhrt wird:
p2.X = 100;

wirkt sich dies nur auf den Wert X aus, der dem Speicherbereich der Variablen p2
entspricht. Der Wert X fr die Variable p1 bleibt unberhrt.

Einfhrung in die objektorientierte Programmierung | 47

Jetzt soll analysiert werden, wie das Kopieren zwischen Verweistypen funktioniert. In diesem
Fall wird beim Ausfhren der folgenden Anweisung eine neue Variable rect2 erstellt. Wie
zuvor, werden die Inhalte von rect1 in den Speicherbereich von rect2 kopiert:
Rectangle rect2 = rect1;

Da die Rectangle-Klasse ein Verweistyp ist, stellt der Inhalt der Variablen rect1 einen
Verweis auf einen Speicherbereich dar, der ein Rectangle-Objekt enthlt. Folglich weisen
nach der oben aufgefhrten Initialisierung sowohl rect1 als auch rect2 auf den
gleichen Speicherbereich und folglich auf das gleiche Rectangle-Objekt hin. Mit anderen
Worten: Es gibt nur ein Rectangle-Objekt im Arbeitsspeicher und rect1 sowie rect2
verweisen darauf. Die nchste Anweisung ndert die Lnge des Rectangle-Objekts:
rect2.Length = 100.0;
BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie die
Themen Datentypen
und Speicherbelegung?
1.1

Diese Anweisung verweist auf den Speicherbereich, auf den rect2 zeigt (der zufllig
mit dem Speicherbereich identisch ist, auf den rect1 zeigt). Zudem wird die Lnge
des Rectangle-Objekts gendert. Wenn Sie nun versuchen, ber Objekt rect1 auf den
gleichen Speicherbereich zu verweisen, erhalten Sie das genderte Objekt, und der
folgende Code zeigt den Wert rect1.Length = 100 an:
Console.WriteLine(rect1.Length = {0},
rect1.Length);

WEITERE INFORMATIONEN

Objekte sind immer belegter Speicher im Heap. Der Heap ist der verfgbare Arbeitsspeicher,
der einem Programm zur Laufzeit fr die dynamische Speicherbelegung zur Verfgung steht. Im
Gegensatz dazu knnen einige Datenelemente im Ausfhrungsstapel oder in der Aufrufliste erstellt
werden. In dem Stapel erstellte Elemente sind die Methodenparameter und lokalen Variablen, die in
einer Methode deklariert werden. Der Stapelspeicher wird freigegeben, wenn der Stapel entladen
wird (wenn eine Methode zum Beispiel zurckgegeben wird). Der Arbeitsspeicher im Heap wird
automatisch vom Garbage Collector freigegeben, wenn die Objekte nicht mehr eingesetzt werden
(d. h. keine weiteren Objekte auf sie verweisen).

Erluterungen zur Kapselung


FAZIT

Die Kapselung ist ein Mechanismus zum Ausblenden von Informationen, mit dem
Code leicht zu warten und zu verstehen ist.
Die Kapselung ist ein Mechanismus, um den Zugriff auf eine Klasse oder Klassenmember
zu beschrnken und Entwurfsentscheidungen auszublenden, die sich wahrscheinlich
ndern. Die Kapselung bietet Klassendesignern die Flexibilitt, bei Bedarf einen Abschnitt
des Codes zu ndern, ohne den restlichen Code bearbeiten zu mssen, der den Code
verwendet. Wenn Sie Informationen ausblenden, blenden Sie die damit verbundene
Komplexitt ebenso aus. Infolgedessen knnen Sie mithilfe der Kapselung Code
schreiben, der einfacher zu verstehen und zu verwalten ist.
In den vorherigen bungen konnten Sie die Kapselung im Einsatz sehen, als Sie die
Datenmember als private deklarierten und eine Datenfeldinitialisierung ber einen
Konstruktor erzwangen. Da die Datenmember von den Benutzern der Klasse ausgeblendet
werden, kann der Entwickler der Rectangle-Klasse die Namen der Datenfelder ndern,
ohne dass nderungen im aufrufenden Code erforderlich sind.
Eigenschaften bieten eine gute Mglichkeit, Datenfelder zusammen mit begleitender
Logik zu kapseln. Auch mit Zugriffsmodifizierern wie private und public knnen Sie
die Zugriffsebene fr einen Klassenmember oder fr die Klasse selbst steuern.
In diesem Abschnitt erfahren Sie mehr ber Zugriffsmodifizierer und ihre Funktionsweise.

48 | Lektion 2
HINWEIS

Erluterung zu Zugriffsmodifizierern

Sie sollten die


restriktivste
Zugriffsebene
verwenden, die fr
einen Typmember
sinnvoll ist.

Zugriffsmodifizierer steuern, wo ein Typ oder ein Typmember verwendet werden kann.
Alle Typen und Typmember haben eine Zugriffsebene, die angibt, wo die Klasse oder
ihre Member im Code verwendet werden knnen. Die Zugriffsebene kann mit einem
derZugriffsmodifizierer festgelegt werden, die in Tabelle 2-1 angegeben sind.

Tabelle 2-1
Zugriffsmodifizierer

Zugriffsmodifizierer

Beschreibung

public

Der Zugriff ist nicht eingeschrnkt.

private

Der Zugriff ist auf die Klasse mit dem Inhalt beschrnkt.

protected Der Zugriff ist auf die Klasse mit dem Inhalt und auf jede davon direkt oder indirekt
abgeleitete Klasse beschrnkt. (Weiter unten in dieser Lektion im Abschnitt Erluterungen
zur Vererbung erfahren Sie mehr ber abgeleitete Klassen.)
internal

Der Zugriff ist auf den Code in der gleichen Assembly beschrnkt.

protected internal Eine Kombination aus geschtzten und internen Zugriffsmodifizierern. Das bedeutet, dass
der Zugriff auf jeden Code in der gleichen Assembly und nur auf abgeleitete Klassen in einer
anderen Assembly beschrnkt wird.

HINWEIS

BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie das
Thema Kapselung?
2.4

Nach dem Kompilieren von C#-Code wird die Ausgabe von ausfhrbarem Code,
der ineiner DLL-Datei oder einer EXE-Datei enthaltenen ist, auch als Assembly
bezeichnet. Eine Assembly ist eine Einheit von ausfhrbarem Code, der eigenstndig
versioniert und installiert werden kann.
Zugriffsmodifizierer sind in Namespacedeklarationen nicht zulssig, der ffentliche
Zugriff wird fr Namespaces impliziert. Klassen der obersten Ebene (direkt unter einem
Namespace deklariert) knnen nur public oder internal sein. Der Zugriffsmodifizierer
internal ist der Standard fr eine Klasse, wenn kein Zugriffsmodifizierer angegeben
ist. (Beispielsweise hat die in der vorherigen bung definierte Rectangle-Klasse
standardmig einen internen Zugriff.) Auf eine geschachtelte Klasse kann nicht weniger
restriktiv zugegriffen werden als auf die Klasse, die darin enthalten ist.

Erluterungen zur Vererbung

FAZIT

Die Vererbung ist eine Funktion der objektorientierten Programmierung, die es


ermglicht, einmal eine Klasse zu entwickeln und den Code dann immer wieder
als Grundlage fr neue Klassen zu verwenden. Die Vererbung ermglicht Ihnen,
neue Klassen zu erstellen, die die in vorhandenen Klassen definierten Funktionen
wiederverwenden, erweitern und ndern. Die Klasse, die die Funktionen erbt, wird als
abgeleitete Klasse bezeichnet, und die Klasse, deren Funktionen geerbt werden, wird
Basisklasse genannt. Eine abgeleitete Klasse erbt alle Funktionen der Basisklasse und
kann auch zustzliche Funktionen definieren, die sie von der Basisklasse unterscheiden.

Einfhrung in die objektorientierte Programmierung | 49


HINWEIS

Im Gegensatz zu
Klassen wird fr
Strukturen keine
Vererbung untersttzt.

Angenommen, Sie mchten einen Satz von Klassen erstellen, der Polygone wie Rechtecke
oder Dreiecke beschreibt. Die Klassen besitzen allgemeine Eigenschaften wie Breite und
Lnge. In diesem Fall erstellen Sie eine Basisklasse Polygon, mit den Eigenschaften
Width und Length. Die abgeleiteten Klassen Rectangle und Triangle erben diese
Eigenschaften und bieten gleichzeitig eigene Funktionen. In der folgenden bung wird
dieses Konzept genauer erlutert.
ERSTELLEN ABGELEITETER KLASSEN
VERWENDEN Sie zum Ausfhren der folgenden Aufgaben das Projekt, das Sie in der
vorherigen bung gespeichert haben:
1. Fgen Sie eine neue Klasse namens Polygon folgendermaen hinzu:
class Polygon
{
public double Length { get; protected set; }
public double Width { get; protected set; }
}

2. ndern Sie die Rectangle-Klasse folgendermaen:

class Rectangle: Polygon


{
public Rectangle(double length, double width)
{
Length = length;
Width = width;
}
public double GetArea()
{
return Width * Length;
}
}

3. ndern Sie nun den Code der Main-Methode folgendermaen:

static void Main(string[] args)


{
Rectangle rect = new Rectangle(10, 20);
Console.WriteLine(
Width={0}, Length={1}, Area = {2},
rect.Width, rect.Length, rect.GetArea());
}

4. Whlen Sie Debuggen > Starten ohne Debuggen aus. Ein Konsolenfenster wird
geffnet und zeigt die Breite, Lnge und die Flche des Rechtecks an.
5. SPEICHERN Sie das Projekt.

PAUSE. Lassen Sie das Projekt zur Verwendung in der nchsten bung geffnet.
Um eine abgeleitete Klasse zu definieren, setzen Sie einen Doppelpunkt nach dem Namen
der abgeleiteten Klasse, gefolgt vom Namen der Basisklasse. Hier ist die Polygon-Klasse
die Basisklasse fr die Rectangle-Klasse.

50 | Lektion 2

Die Length- und Width-Eigenschaften in der Polygon-Klasse sind mit einem geschtzten
Zugriffsmodifizierer fr den set-Accessor deklariert. Dies bedeutet, dass der Zugriff
auf den set-Accessor nur innerhalb der Polygon-Klasse und ihren abgeleiteten Klassen
verfgbar ist. Dennoch knnen Sie den Wert der Length- und Width-Eigenschaften in der
Main-Methode abrufen. Sie erhalten aber eine Fehlermeldung, wenn Sie versuchen, den
Eigenschaften einen Wert zuzuweisen.
Die Rectangle-Klasse erbt alle nicht privaten Daten und Verhaltensweisen der
Polygon-Klasse. Die Rectangle-Klasse definiert darber hinaus zustzliche Funktionen
(GetArea-Methode), die in der Basisklasse nicht verfgbar sind.

Grundlagen zu abstrakten und versiegelten Klassen


Die abstrakten Klassen bieten die allgemeine Definition einer Basisklasse, die fr mehrere
abgeleitete Klassen freigegeben werden kann. Die versiegelten Klassen bieten andererseits
vollstndige Funktionen, knnen aber nicht als Basisklassen verwendet werden.
In der vorherigen bung haben Sie eine GetArea-Methode fr die Rectangle-Klasse
definiert. Angenommen, Sie mchten eine andere Klasse mit dem Namen Triangle
vom Polygon-Typ erstellen. Hierfr bentigen Sie eine GetArea-Methode in der TriangleKlasse, die die Flche eines Dreiecks berechnet.
Hufig fungieren Basisklassen als Repository fr allgemeine Funktionen. Im Fall von
Polygon kann das Polygon die Flche nicht ohne Informationen ber den Shape-Typ
berechnen. In der Regel knnen erwartungsgem alle Klassen des Polygon-Typs ihre
Flche berechnen. Solche Erwartungen knnen mithilfe eines abstract-Schlsselworts
andie Basisklasse bergeben werden.
ERSTELLEN ABSTRAKTER KLASSEN
VERWENDEN Sie das Projekt, das Sie in der vorherigen bung gespeichert haben, und
fhren Sie die folgenden Schritte aus.

1. ndern Sie die Polygon-Klasse folgendermaen:

abstract class Polygon


{
public double Length { get; protected set; }
public double Width { get; protected set; }
abstract public double GetArea();
}
2. ndern Sie die Rectangle-Klasse folgendermaen:
class Rectangle: Polygon
{
public Rectangle(double length, double width)
{
Length = length;
Width = width;
}
public override double GetArea()
{
return Width * Length;
}
}
3. Beachten Sie, dass keine nderung an der Main-Methode erforderlich ist.
4. Whlen Sie Debuggen > Starten ohne Debuggen aus. Ein Konsolenfenster wird
geffnet und zeigt die Breite, Lnge und die Flche des Rechtecks an.
5. SPEICHERN Sie das Projekt.

PAUSE. Lassen Sie das Projekt zur Verwendung in der nchsten bung geffnet.

Einfhrung in die objektorientierte Programmierung | 51

HINWEIS

Sie knnen keine


Instanzen einer
abstrakten Klasse
erstellen.

Diese Version der Polygon-Klasse definiert eine Methode namens GetArea. Der
Hauptgrund zum Hinzufgen dieser Methode zur Basisklasse besteht darin, dass die
Basisklasse jetzt eine gemeinsame Vorlage von Funktionen fr die abgeleiteten Klassen
bereitstellen kann. Wie besprochen, hat aber die Polygon-Basisklasse nicht genug
Informationen zum Berechnen der Flche des Shapes. Dieses Problem kann gelst
werden, indem die Methode als abstrakt gekennzeichnet wird. Eine abstrakte Methode
enthlt eine Definition, bietet aber keine Implementierung (Methodentext). Wenn alle
Member einer Klasse abstrakt sind, muss die Klasse selbst als abstrakt gekennzeichnet
werden. Eine abstrakte Klasse kann nicht instanziiert werden.
Abgeleitete Klassen knnen eine Implementierung einer abstrakten Klasse bieten, um eine
konkrete Klasse (keine abstrakte Klasse) zu erstellen. Die abgeleiteten Klassen bieten eine
Implementierung einer abstrakten Methode, indem sie sie in einer abgeleiteten Klasse
berschreiben. Zum Beispiel berschreibt die Rectangle-Klasse die abstrakte GetAreaMethode der Basisklasse und bietet eine vollstndige Implementierung. Als Ergebnis ist
die Rectangle-Klasse keine abstrakte Klasse mehr und kann direkt instanziiert werden.
Versiegelte Klassen werden dagegen definiert, wenn die Implementierung abgeschlossen
ist und keine Klasse geerbt werden soll. Eine versiegelte Klasse kann mithilfe des
Schlsselworts sealed folgendermaen erstellt werden:
sealed class Rectangle: Polygon
{
// Klassenmember hier
}

HINWEIS

C# untersttzt
nicht das Vererben
mehrerer Basisklassen,
auch hufig als
Mehrfachvererbung
bezeichnet.

Da Rectangle eine versiegelte Klasse ist, kann sie nicht als Basisklasse verwendet
werden. Klassenmember knnen auch als versiegelt gekennzeichnet werden, damit sie
ineiner abgeleiteten Klasse nicht berschrieben werden. Beispiel:
sealed public override double GetArea()
{
return Width * Length;
}

Diese Deklaration stellt sicher, dass die GetArea-Methode in einer abgeleiteten Klasse
nicht berschrieben werden kann.

Erben von der Object-Klasse


Die Object-Klasse ist die ultimative Basisklasse aller Klassen in .NET Framework.
Alle Klassen in .NET Framework erben entweder direkt oder indirekt von der ObjectKlasse. Als Sie beispielsweise die folgende Klasse oben in dieser Lektion deklariert
haben:
class Polygon
{
public double Length { get; protected set; }
public double Width { get; protected set; }
}

war sie funktional mit der folgenden Deklaration gleichwertig:


class Polygon: Object
{
public double Length { get; protected set; }
public double Width { get; protected set; }
}

52 | Lektion 2

Jedoch mssen Sie die Polygon-Klasse nicht auf letztere Weise deklarieren, da die
Vererbung von der Object-Klasse implizit angenommen wird. Im Rahmen dieser
Vererbung kann eine abgeleitete Klasse die Methoden der Object-Klasse berschreiben.
Zwei der am hufigsten angewendeten Methoden sind die folgenden:
Equals: Untersttzt den Vergleich zwischen zwei Objekten und gibt true zurck,
wenn beide Objekte denselben Wert haben.
ToString: Gibt eine Zeichenfolgendarstellung der Klasse zurck. Standardmig
wird der vollstndige Name der Klasse zurckgegeben. Es ist oft sinnvoll, diese
Methode zu berschreiben, damit eine Zeichenfolgendarstellung des aktuellen
Zustands des Objekts zurckgegeben wird.
Das folgende Beispiel zeigt, wie die ToString-Methode in der Rectangle-Klasse
berschrieben werden kann:
class Rectangle: Polygon
{
public Rectangle(double length, double width)
{
Length = length;
Width = width;
}
public override double GetArea()
{
return Width * Length;
}
public override string ToString()
{
return String.Format(
Width = {0}, Length = {1},
Width, Length);
}
}

Umwandlung zwischen Typen


In C# ermglicht die Laufzeit die Umwandlung eines Objekts in einen seiner
Basistypen.
Abgeleitete Klassen haben eine is-a-Beziehung zu ihrer Basisklasse. Zum Beispiel knnen
wir sagen, dass das Rechteck ein Polygon ist. Folglich hat ein Objekt der Rectangle-Klasse
in diesem Fall zwei Datentypen: Das Objekt ist ein Rechteck sowie ein Polygon.
In C# ermglicht die Laufzeit die Umwandlung eines Objekts in seine Klasse oder eine
seiner Basisklassen. Beispiel:
Polygon p = new Rectangle(10, 20);

Hier wird ein neues Rectangle-Objekt erstellt und in seinen Basistyp Polygon
umgewandelt. C# bentigt hierfr keine spezielle Syntax, da die Umwandlung in einen
Basistyp als sichere Konvertierung betrachtet wird.

Einfhrung in die objektorientierte Programmierung | 53

Die Umwandlung ist auch umgekehrt mglich. Beispiel:


Object o = new Rectangle(10, 20);

Rectangle r = (Rectangle) o;

Hier wird ein Rectangle-Objekt zuerst einem Objekt (der ultimativen Basisklasse)
zugewiesen, und das resultierende Objekt wird dann wieder in Rectangle umgewandelt.
Fr die letztere Zuweisung ist eine explizite Umwandlung erforderlich, da ein
allgemeineres Objekt in ein weniger allgemeines Objekt konvertiert wird. Die Laufzeit
berprft, ob der Wert der Variablen o mit der Rectangle-Klasse kompatibel ist. Wenn
der Wert von o zur Ausfhrungszeit nicht der Rectangle-Klasse entspricht, lst die
Laufzeit eine System.InvalidCastException aus.

ERLUTERUNGEN ZUM IS-OPERATOR


Um Laufzeitfehler wie InvalidCastException zu vermeiden, kann der is-Operator
verwendet werden, um zu berprfen, ob die Umwandlung vor der eigentlichen
Ausfhrung der Umwandlung zugelassen ist, wie im folgenden Beispiel:
if (o is Rectangle)
{
Rectangle r = (Rectangle) o;
HINWEIS

Wenn Sie den


as-Operator zum
Konvertieren eines
Typs verwenden, ist
die Operatorprfung
nicht erforderlich. Sie
knnen einfach den
Rckgabewert gegenber
NULL berprfen.

BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie das
Thema Vererbung?
2.2

Hier berprft die Laufzeit den Wert des Objekts o. Dann wird die Cast-Anweisung nur
ausgefhrt, wenn o ein Rectangle-Objekt enthlt.

ERLUTERUNGEN ZUM AS-OPERATOR


Eine anderer ntzlicher Umwandlungsoperator ist der as-Operator. Der as-Operator ist
der Umwandlungsoperation hnlich. Doch im Fall des as-Operators wird bei unmglicher
Typkonvertierung NULL zurckgegeben und keine Ausnahme ausgelst. Betrachten Sie
beispielsweise den folgenden Code:
Rectangle r = o as Rectangle;
if (r != null)
{
// etwas tun
}

Wenn es zur Laufzeit nicht mglich ist, den Wert der Variablen o in ein RectangleObjekt umzuwandeln, wird der Variablen r ein Wert von NULL zugewiesen. Es werden
keine Ausnahmen ausgelst.

Erluterungen zur Polymorphie


FAZIT

Polymorphie ist die Fhigkeit abgeleiteter Klassen, allgemeine Funktionen mit


Basisklassen zu teilen, aber dennoch eigenes einzigartiges Verhalten zu definieren.

Sie entwickeln eine Anwendung, mit der Benutzer mit anderen Arten von Polygonen
arbeiten knnen. Ihre Auflistung enthlt mehrere Typen von Polygonen, z. B. ein Rechteck,
ein Dreieck und ein Quadrat. Jedes Polygon bietet Ihnen eine eigene Implementierung
der Draw-Methode. Wenn Sie mit dieser Sammlung arbeiten, kennen Sie nicht unbedingt

54 | Lektion 2

genau das Shape, mit dem Sie arbeiten. Sie mchten aber, dass jedes Mal die richtige
Draw-Methode aufgerufen wird. Polymorphie ermglicht Ihnen, genau dies zu tun.
Polymorphie ermglicht es den Objekten einer abgeleiteten Klasse, zur Laufzeit
als Objekte der Basisklasse behandelt zu werden. Wenn eine Methode zur Laufzeit
aufgerufen wird, wird ihr genauer Typ bestimmt, und von der abgeleiteten Klasse wird
dieentsprechende Methode aufgerufen.
VERWENDEN VON POLYMORPHIE
VERWENDEN Sie zum Durchfhren der folgenden Schritte das Projekt, das Sie in der
vorherigen bung gespeichert haben:

1. ndern Sie die Polygon-Klasse folgendermaen:


class Polygon
{
public virtual void Draw()
{
Console.WriteLine(Zeichnen: Polygon);
}
}

2. ndern Sie die Rectangle-Klasse folgendermaen:


class Rectangle: Polygon
{
public override void Draw()
{
Console.WriteLine(Zeichnen: Rectangle);
}
}

3. Fgen Sie eine neue Klasse namens Triangle folgendermaen hinzu:


class Triangle: Polygon
{
public override void Draw()
{
Console.WriteLine(Zeichnen: Triangle);
}
}

4. ndern Sie die Main-Methode wie folgt:


static void Main(string[] args)
{
List<Polygon> polygons = new List<Polygon>();
polygons.Add(new Polygon());
polygons.Add(new Rectangle());
polygons.Add(new Triangle());

Einfhrung in die objektorientierte Programmierung | 55


foreach (Polygon p in polygons)
{
p.Draw();
}
}

5. Whlen Sie Debuggen > Starten ohne Debuggen aus. Ein Konsolenfenster wird
geffnet und zeigt die Zeichnungsnachricht fr jedes Polygon an.
6. SPEICHERN Sie das Projekt.

PAUSE. Lassen Sie das Projekt zur Verwendung in der nchsten bung geffnet.
In dieser bung werden die Definitionen der Polygon- und Rectangle-Klasse vereinfacht,
um das Konzept der Polymorphie zu hervorzuheben. Die Basisklasse stellt eine einzelne
Draw-Methode bereit. Das Schlsselwort virtual ist hier von zentraler Bedeutung. Es
ermglicht abgeleiteten Klassen, die Methode zu berschreiben.
Sowohl die Rectangle- als auch die Triangle-Klasse berschreiben die Draw-Methode der
Basisklasse mit ihrer eigenen Definition und mithilfe des Schlsselworts override. Die
Main-Methode generiert nach der Ausfhrung die folgende Ausgabe:
Drawing: Polygon
Drawing: Rectangle
Drawing: Triangle

Der List<Polygon>-Datentyp kann eine Auflistung von Objekten speichern, die entweder
vom Typ Polygon sind oder Typen sind, die von Polygon abgeleitet werden. Die
foreach-Schleife durchluft eine Sammlung von Polygon-Objekten. Der zugrunde
liegende Typ des ersten Objekts ist Polygon, aber die zweiten und dritten Objekte in
der Sammlung sind tatschlich Rectangle- und Triangle-Objekte, die zufllig als Polygone
umgewandelt wurden. Die Laufzeit untersucht den tatschlich zugrunde liegenden Typ
und ruft die berschriebene Methode aus der abgeleiteten Klasse auf. Das ist der Grund,
warum die abgeleitete Klassenversion der Draw-Methode sowohl fr Rectangle- als auch
fr Triangle-Objekte aufgerufen wird.

Grundlagen zu den Schlsselwrtern override und new


Das Schlsselwort override ersetzt einen Basisklassenmember in einer abgeleiteten
Klasse. Mit dem Schlsselwort new wird in der abgeleiteten Klasse ein neuer
Member des gleichen Namens erstellt, und die Implementierung der Basisklasse wird
ausgeblendet.
Wenn eine Basisklasse einen virtuellen Member definiert, verfgt die abgeleitete Klasse
ber zwei Optionen zum Verarbeiten: Die abgeleitete Klasse verwendet entweder das
override-Schlsselwort oder das new-Schlsselwort. Das override-Schlsselwort hat
Vorrang vor der Basisklassendefinition des Members. Hier ruft das Objekt der abgeleiteten
Klasse den berschriebenen Member anstelle des Basisklassenmembers auf.
Im Vergleich wird bei Verwendung des new-Schlsselworts eine neue Definition des
Members erstellt, und der Basisklassenmember ist ausgeblendet. Wenn die abgeleitete
Klasse jedoch in eine Instanz der Basisklasse umgewandelt wird, knnen die
ausgeblendeten Member der Klasse noch aufgerufen werden.

56 | Lektion 2
HINWEIS

Wenn der Methode


in der abgeleiteten
Klasse nicht das newSchlsselwort oder das
override-Schlsselwort
vorangestellt ist, gibt
der Compiler eine
Warnung aus. Die
Methode verhlt sich
dann so, als ob das
new-Schlsselwort
vorhanden wre.

Um diese Konzepte besser zu verstehen, ndern Sie die Triangle-Methode aus der
vorherigen bung folgendermaen:
class Triangle: Polygon
{
public new void Draw()
{
Console.WriteLine(Zeichnen: Triangle);
}
}

Dann ndern Sie den Code in der Main-Klasse folgendermaen:


Triangle t = new Triangle();
t.Draw();
Polygon p = t;
p.Draw();

Das Programm erzeugt die folgende Ausgabe:


Drawing: Triangle
Drawing: Polygon

BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie das
Thema Polymorphie?
2.3

Wenn die Draw-Methode direkt fr das Objekt der abgeleiteten Klasse aufgerufen wird,
wird hier die neue Version der Methode verwendet. Wird die Methode jedoch ausgefhrt,
wenn die abgeleitete Klasse als Basisklasse umgewandelt wird, wird ausgeblendete
Basisklassenversion der Draw-Methode ausgefhrt.

HINWEIS

Die System.Object-Klasse stellt eine ToString-Methode zur Verfgung. Gem der


Konvention sollten Sie diese Methode verwenden, um die fr Menschen lesbare
Darstellung fr eine Klasse zurckzugeben. Wenn Sie Ihre Typen erstellen, ist es
empfehlenswert, diese Methode zu berschreiben, um lesbare Informationen ber die
Objekte zurckzugeben.

Erluterungen zu Schnittstellen
FAZIT

HINWEIS

Gem der Konvention


beginnen alle
Schnittstellen in
.NET Framework
mit einem groen
I. Auch wenn Sie
Ihre Schnittstellen so
benennen knnen, wie
Sie mchten, befolgen
Sie am besten die
Frameworkkonvention.

Schnittstellen werden dazu verwendet, Vertrge zu erstellen, durch die Objekte


miteinander interagieren knnen, ohne die Implementierungsdetails zu kennen.
Schnittstellen werden ber das interface-Schlsselwort definiert. Eine
Schnittstellendefinition besteht aus einer Reihe von Signaturen fr Methoden,
Eigenschaften, Delegaten, Ereignissen oder Indexen. Eine Schnittstellendefinition
kann nicht aus jedem Datenfeld oder aus beliebigen Implementierungsdetails, wie
Methodentexten, bestehen.
Eine allgemeine im System-Namespace definierte Schnittstelle ist der IComparableNamespace. Das ist eine einfache Schnittstelle, die wie folgt definiert ist:
interface IComparable
{
int CompareTo(object obj);
}

Einfhrung in die objektorientierte Programmierung | 57

Die IComparable-Schnittstelle verfgt ber eine einzelne Methode (CompareTo), die ein
Objekt akzeptiert und ein int zurckgibt. Der Rckgabewert dieser Methode enthlt das
Ergebnis des Vergleichs des angegebenen Parameters mit dem aktuellen Objekt. Gem
der Dokumentation der CompareTo-Methode gilt Folgendes:
Wenn die Instanz gleich dem Parameter ist, gibt CompareTo 0 zurck.
Wenn der Parameterwert kleiner als die Instanz ist oder der Parameter NULL ist,
wird ein positiver Wert zurckgegeben.
Wenn der Parameterwert grer als die Instanz ist, wird ein negativer Wert
zurckgegeben.
Wenn der Parameter kein kompatibler Typ ist, wird ArgumentException ausgelst.
Wie entscheidet IComparable, wie zwei Rectangle-Objekte oder zwei EmployeeObjekte verglichen werden? Es wird keine Entscheidung getroffen. Die Klassen,
die an solchen Vergleichen interessiert sind, mssen die IComparable-Schnittstelle
implementieren, indem sie einen Methodentext fr die CompareTo-Methode bereitstellen.
Jede Klasse, die IComparable implementiert, kann in der CompareTo-Methode frei ihre
eigene benutzerdefinierte Vergleichslogik bereitstellen.
VERWENDEN DER ICOMPARABLE-SCHNIT TSTELLE
VERWENDEN Sie zum Durchfhren der folgenden Schritte das Projekt, das Sie in der
vorherigen bung gespeichert haben:

1. ndern Sie die Rectangle-Klasse folgendermaen:


class Rectangle: Polygon, IComparable
{
public double Length { get; set; }
public double Width { get; set; }
public override void Draw()
{
Console.WriteLine(Zeichnen: Rectangle);
}
public double GetArea()
{
return Length * Width;
}
public int CompareTo(object obj)
{
if (obj == null)
return 1;
if (!(obj is Rectangle))
throw new ArgumentException();
Rectangle target = (Rectangle)obj;
double diff = this.GetArea() - target.GetArea();

58 | Lektion 2
if (diff == 0)
return 0;
else if (diff > 0)
return 1;
else return -1;
}
}

3. Dann ndern Sie die Main-Methode folgendermaen:


static void Main(string[] args)
{
Rectangle rect1 = new Rectangle
{ Length = 10, Width = 20 };
Rectangle rect2 = new Rectangle
{ Length = 100, Width = 200 };
Console.WriteLine(rect1.CompareTo(rect2));
}

4. Whlen Sie Debuggen > Starten ohne Debuggen aus. Ein Konsolenfenster wird
geffnet. Es zeigt den Wert 1 an, weil die Flche von rect1 kleiner ist als die
Flche von rect2.
5. SPEICHERN Sie das Projekt.

Hier wird die Rectangle-Klasse von der Polygon-Klasse abgeleitet, und sie implementiert
die IComparable-Schnittstelle. Eine Klasse, die eine Schnittstelle implementiert, muss alle
in dieser Schnittstelle deklarierten Methoden implementieren.
Eine Schnittstelle ist einer abstrakten Klasse hnlich, aber es gibt einige deutliche
Unterschiede. Zum einen bietet eine abstrakte Klasse eine unvollstndige
Implementierung, whrend eine Schnittstelle gar keine Implementierung bietet. Eine
Klasse kann auch mehrere Schnittstellen implementieren, ist aber darauf beschrnkt, nur
von einer einzelnen Basisklasse zu erben.
BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie das
Thema Kapselung?
2.4

Wie sollen Sie also entscheiden, ob Sie eine abstrakte Klasse oder eine Schnittstelle
verwenden? Eine Mglichkeit besteht darin zu berprfen, ob eine is-a- Beziehung
zwischen den beiden Konzepten vorliegt. Wenn beispielsweise eine Vererbungsbeziehung
zwischen SalariedEmployee und Employee besteht, knnen Sie eine abstrakte Klasse
zum Standardisieren allgemeiner Funktionen in abgeleiteten Klassen verwenden. Auf der
anderen Seite gibt es keine is-a-Beziehung zwischen Employee und IComparable.
Die Vergleichsfunktion wird daher am besten als Schnittstelle implementiert.

ZUSAMMENFASSUNG DER VERMITTELTEN KENNTNISSE


In dieser Lektion haben Sie Folgendes gelernt:
Die objektorientierte Programmierung ist eine Programmiertechnik, bei der
Objekte verwendet werden. Objekte sind eigenstndige Datenstrukturen, die aus
Eigenschaften, Methoden und Ereignissen bestehen. Eigenschaften geben die Daten
an, die durch ein Objekt dargestellt werden, Methoden geben das Verhalten eines
Objekts an und Ereignisse ermglichen die Kommunikation zwischen den Objekten.
Eine Klasse ist die Vorlage, aus der einzelne Objekte erstellt werden.
Konstruktoren werden fr die Initialisierung des Datenmembers eines Objekts verwendet.

Einfhrung in die objektorientierte Programmierung | 59

Das Schlsselwort this kann fr den Zugriff auf Member aus den Konstruktoren,
Instanzmethoden und Accessoren der Instanzeigenschaften heraus verwendet werden.
Delegaten sind spezielle Typen, mit denen eine Methode mit einer bestimmten
Signatur gekapselt wird.
Ereignisse sind eine Mglichkeit, mit der eine Klasse andere Klassen oder Objekte
benachrichtigen kann, wenn etwas Interessantes passiert. Die Klasse, die eine
Benachrichtigung sendet, wird als Verleger des Ereignisses bezeichnet. Die Klasse,
diedie Benachrichtigung erhlt, ist der Abonnent des Ereignisses.
Namespaces ermglichen es Ihnen, Code zu organisieren und einzigartige
Klassennamen zu erstellen.
Das Schlsselwort static wird fr die Deklaration von Membern verwendet, die keinen
individuellen Objekten angehren, sondern einer Klasse selbst.
Ein Werttyp speichert einen Wert direkt, whrend ein Verweistyp nur einen Verweis
auf einen tatschlichen Wert speichert.
Das Schlsselwort struct wird verwendet, um benutzerdefinierte Typen zu
erstellen, die aus kleinen Gruppen von verwandten Feldern bestehen. Strukturen
sindWerttypen, whrend die Klassen Verweistypen sind.
Die Kapselung ist ein Mechanismus, um den Zugriff auf eine Klasse oder einen
Klassenmember zu beschrnken und Entwurfsentscheidungen auszublenden, die sich
wahrscheinlich ndern. Die Kapselung bietet Klassendesignern die Flexibilitt, bei
Bedarf einen Abschnitt des Codes zu ndern, ohne den restlichen Codes bearbeiten
zu mssen, der diesen Code verwendet.
Ein Zugriffsmodifizierer gibt an, welcher Bereich des Codes Zugriff auf ein Feld hat.
Beispielsweise schrnkt ein public-Zugriffsmodifizierer den Zugriff nicht ein, sondern ein
private-Zugriffsmodifizierer beschrnkt den Zugriff in der Klasse, in der das Feld definiert ist.
Die Vererbung ermglicht Ihnen, neue Klassen zu erstellen, die die in vorhandenen
Klassen definierten Funktionen wiederverwenden, erweitern und ndern. Die Klasse,
die die Funktionen erbt, wird als abgeleitete Klasse bezeichnet, und die Klasse, deren
Funktionen geerbt werden, wird Basisklasse genannt.
Die Polymorphie ist die Fhigkeit abgeleiteter Klassen, allgemeine Funktionen mit Basisklassen
zu teilen, aber dennoch ihre eigenen einzigartigen Verhaltensweisen zu definieren.
Das Schlsselwort override ersetzt einen Basisklassenmember in einer abgeleiteten
Klasse. Mit dem Schlsselwort new wird in der abgeleiteten Klasse ein neuer Member des
gleichen Namens erstellt, und die Implementierung der Basisklasse wird ausgeblendet.

Wissenstest
Lckentext
Ergnzen Sie die Lcken der folgenden Stze mit dem richtigen Wort oder den richtigen
Wrtern.
1. Ein(e) _________ ist ein Entwurf eines Objekts.
2. Eine Klasse, die keine vollstndige Implementierung bereitstellt, muss mit dem
Schlsselwort __________ deklariert werden.
3. Klassen, mit denen Vergleiche untersttzt werden sollen, mssen die
Schnittstelle IComparable implementieren und dann einen Textkrper fr die
__________-Methode bereitstellen.
4. Sie knnen den __________-Operator verwenden, um zu berprfen, ob die
Umwandlung eines Typs in einen anderen erlaubt ist.

60 | Lektion 2
5. Drei Hauptmerkmale einer objektorientierten Programmiersprache sind _________,
__________ und _ _________.
6. Sie knnen __________ zum Gruppieren verwandter Klassen verwenden, um
Namenskonflikte zu verringern.
7. Das __________-Schlsselwort bezieht sich auf die aktuelle Instanz einer Klasse.
8. Ein(e) __________ ist ein Typ, der auf eine Methode verweist.
9. Ein(e) __________ ist ein Werttyp, whrend es sich bei einer/einem __________ um einen
Verweistyp handelt.
10. Sie knnen das __________-Schlsselwort dazu verwenden, einen Member zu deklarieren, der
anstelle eines bestimmten Objekts der Klasse selbst angehrt.

Multiple-Choice
Kreisen Sie den Buchstaben ein, der der Antwort am besten entspricht.
1. Sie mchten den Zugriff einer Methode auf die enthaltende Klasse oder eine Klasse
begrenzen, die von der enthaltenden Klasse abgeleitet ist. Welcher Zugriffsmodifizierer ist fr
diese Methode empfehlenswert?
a. public
b. private
c. protected
d. internal
2. Sie haben in einer Klasse eine Methode namens Render definiert. Diese Methode stellt
Funktionen zum Rendern von Bitmapdateien auf dem Bildschirm bereit. Sie mchten, dass
die abgeleiteten Klassen diese Funktion ablsen, um das Rendern zustzlicher Bildformate
zuuntersttzen. Sie mchten zudem, dass die Render-Methode der abgeleiteten Klassen selbst
dann ausgefhrt wird, wenn eine abgeleitete Klasse in die Basisklasse umgewandelt wird.
Welches Schlsselwort sollten Sie bei der Definition der Render-Methode in der Basisklasse
verwenden?
a. abstract
b. virtual
c. new
d. overrides
3. Sie haben die Klasse AdvMath definiert, die erweiterte mathematische Funktionen definiert.
Sie mchten nicht, dass die Funktionen dieser Klasse von abgeleiteten Klassen geerbt werden.
Welches Schlsselwort sollten Sie fr die Definition der AdvMath-Klasse verwenden?
a. sealed
b. abstract
c. private
d. internal
4. Sie mssen eine Abfragefunktion fr einige der Klassen bereitstellen. Der Algorithmus
derAbfrage wird wahrscheinlich fr jede Klasse unterschiedlich sein. Auerdem haben nicht
alle Klassen eine is-a-Beziehung miteinander. Wie sollten Sie diese Funktion untersttzen?
a. Fgen Sie der Basisklasse die Abfragefunktion mit dem Zugriffsmodifizierer public
hinzu.
b. Lassen Sie alle Klassen von einer abstrakten Basisklasse erben, und berschreiben Sie
dieBasisklassenmethode, um eine eigene Abfragefunktion bereitzustellen.
c. Lassen Sie die Klassen von einer Basisklasse erben, mit der die Abfragefunktion
bereitgestellt wird.
d. Erstellen Sie eine allgemeine Schnittstelle, die von allen Klassen implementiert wird.
5. Welche der folgenden Klassenelemente sollten Sie verwenden, um das Verhalten einer Klasse
zu definieren?
a. Methode
b. Eigenschaft
c. Ereignis

d. Delegat

Einfhrung in die objektorientierte Programmierung | 61

6. Sie schreiben Code fr eine Klasse namens Product. Sie mssen sicherstellen, dass
die Datenmember der Klasse zu ihren richtigen Werten initialisiert werden, sobald
Sie ein Objekt der Product-Klasse erstellen. Der Initialisierungscode sollte immer
ausgefhrt werden. Was mssen Sie tun?
a. Erstellen Sie in der Product-Klasse eine statische Methode, um die Datenmember
zu initialisieren.
b. Erstellen Sie in der Product-Klasse einen Konstruktor, um die Datenmember zu
initialisieren.
c. Erstellen Sie in der Product-Klasse eine statische Eigenschaft, um die
Datenmember zu initialisieren.
d. Erstellen Sie in der Product-Klasse ein Ereignis, um die Datenmember zu
initialisieren.
7. Sie erstellen eine neue Klasse namens Square, die von der Polygon-Klasse
abgeleitet wird. Die Polygon-Klasse hat folgenden Code:
class Polygon
{
public virtual void Draw()
{
// zustzlicher Code. . .
}
}

Die Draw-Methode in der Square-Klasse muss neue Funktionen bereitstellen, aber


sie soll auch die Polygon-Klassenimplementierung der Draw-Methode ausblenden.
Welches Codesegment mssen Sie dafr verwenden?
a. class Square: Polygon
{
public override void Draw()
{
// zustzlicher Code. . .
}
}
b. class Square: Polygon
{
public new void Draw()
{
// zustzlicher Code. . .
}
}
c. class Square: Polygon
{
public virtual void Draw()
{
// zustzlicher Code. . .
}
}

62 | Lektion 2

d. class Square: Polygon


{
public static void Draw()
{
// zustzlicher Code. . .
}
}
8. Sie erstellen eine neue Klasse namens Rectangle. Sie schreiben folgenden Code:
class Rectangle: IComparable
{
public double Length { get; set; }
public double Width { get; set; }
public double GetArea()
{
return Length * Width;
}
public int CompareTo(object obj)
{
// wird fertig gestellt
}
}

Sie mssen die Definition der CompareTo-Methode fertig stellen, um einen Vergleich
der Rectangle-Objekte zu ermglichen. Welchen der folgenden Codes mssen Sie
schreiben?
a. public int CompareTo(object obj)
{
Rectangle target = (Rectangle)obj;
double diff = this.GetArea() target.GetArea();
if (diff == 0)
return 0;
else if (diff > 0)
return 1;
else return 1;
}

b. public int CompareTo(object obj)


{
Rectangle target = (Rectangle)obj;
double diff = this.GetArea() target.GetArea();
if (diff == 0)
return 1;
else if (diff > 0)
return 1;
else return 0;
}

Einfhrung in die objektorientierte Programmierung | 63

c. public int CompareTo(object obj)


{
Rectangle target = (Rectangle)obj;
if (this == target)
return 0;
else if (this > target)
return 1;
else return 1;
}
d. public int CompareTo(object obj)
{
Rectangle target = (Rectangle)obj;
if (this == target)
return 1;
else if (this > target)
return 1;
else return 0;
}
9. Sie schreiben Code fr eine neue Methode namens Process:
void Process(object o)
{
}

Der Code erhlt einen Parameter vom Typ object. Sie mssen dieses Objekt in
den Typ Rectangle umwandeln. Manchmal ist der an die Methode weitergegebene
Wert o kein gltiger Rectangle-Wert. Sie mssen sicherstellen, dass der Code bei
der Konvertierung keine System.InvalidCastException-Fehler verursacht. Welche
der folgenden Codezeilen mssen Sie in der Process-Methode verwenden, um das
zuerreichen?
a. Rectangle r = (Rectangle) o;
b. Rectangle r = o as Rectangle;
c. Rectangle r = o is Rectangle;
d. Rectangle r = (o != null) ? o as rectangle: (Rectangle) o;
10. Sie schreiben Code, um die Ausnahmen in einem Programm zu behandeln. Sie
definieren dazu wie folgt einen Delegaten namens RectangleHandler:
public delegate void RectangleHandler(Rectangle rect);

Auerdem erstellen Sie folgendermaen eine Variable vom Typ RectangleHandler:


RectangleHandler handler;

Spter im Programm mssen Sie der Methodenaufrufliste der Handlervariablen eine


Methode namens DisplayArea hinzufgen. Die Signatur der DisplayArea-Methode
entspricht der Signatur der RectangleHandler-Methode. Jeder von Ihnen geschriebene
Code sollte sich nicht auf vorhandenen Code zum Ereignishandling auswirken.
Welche der folgenden Codezeilen sollten Sie hinsichtlich dieser Einschrnkungen
schreiben?
a. handler = new RectangleHandler(DisplayArea);
b. handler = DisplayArea;
c. handler += DisplayArea;
d. handler = DisplayArea;

64 | Lektion 2

Kompetenztest
Szenario 2-1: Erstellen von Eigenschaften
Sie mssen eine Klasse namens Product erstellen, die ein Produkt darstellt. Die Klasse
hat eine einzige Eigenschaft namens Name. Benutzer der Product-Klasse sollen den Wert
der Name-Eigenschaft abrufen und festlegen knnen. Allerdings soll jeder Versuch, den
Wert von Name auf eine leere Zeichenfolge oder auf einen Nullwert festzulegen, eine
Ausnahme auslsen. Auerdem sollen die Benutzer der Product-Klasse auf keine anderen
Datenmember der Product-Klasse zugreifen knnen. Wie erstellen Sie so eine Klasse?

Szenario 2-2: Erstellen einer Struktur


Sie entwickeln ein Spiel, in dem der Standort eines Ziels im dreidimensionalen Raum
dargestellt werden muss. Der Standort wird mithilfe von drei ganzzahligen Werten
identifiziert, die als x, y und z bezeichnet werden. Sie erstellen tausende dieser Strukturen
im Programm, und Sie bentigen eine leichte, effiziente Mglichkeit zur Speicherung dieser
Daten im Arbeitsspeicher. Auerdem ist es unwahrscheinlich, dass Sie andere Typen aus
diesem Standorttyp vererben mssen. Wie mssen Sie den Standort im Programm darstellen?

Kenntnistest
Szenario 2-1: berschreiben der ToString-Methode
Angenommen, Sie schreiben Code fr eine Product-Klasse. Die Product-Klasse enthlt
den Namen und den Preis eines Produkts. Sie mssen die Methode ToString der
Basisklasse (System.Object) berschreiben, um dem aufrufenden Code Informationen
ber die Objekte der Product-Klasse bereitstellen zu knnen. Welchen Code mssen Sie
fr die Product-Klasse schreiben, damit diese Anforderung erfllt wird?

Szenario 2-2: Erstellen und Behandeln von Ereignissen


Stellen Sie sich vor, Sie schreiben Code zur Erstellung und Behandlung von Ausnahmen
in Ihrem Programm. Die Klasse SampleClass muss die folgende Schnittstelle
implementieren:
public delegate void SampleDelegate();
public interface ISampleEvents
{
event SampleDelegate SampleEvent;
void Invoke();
}

Sie mssen Code fr SampleClass und fr eine Testmethode schreiben, die eine Instanz
von SampleClass erstellt und das Ereignis aufruft. Welchen Code mssen Sie schreiben?

Allgemeine
Grundlagen der
Softwareentwicklung

LEKTION

THEMEN UND LERNZIELE DIESER LEKTION


Fertigkeiten/Konzepte

MTA-Prfungsziel

Nummer des
MTA-Prfungsziels

Grundlegendes zur
Verstehen der
Anwendungslebenszyklus- AnwendungslebenszyklusVerwaltung Verwaltung

3.1

Grundlegendes zu Softwaretests Verstehen der


Anwendungslebenszyklus Verwaltung

3.1

Grundlegendes zu
Datenstrukturen

Verstehen von Algorithmen


und Datenstrukturen

3.3

Grundlegendes zu
Sortieralgorithmen

Verstehen von Algorithmen


und Datenstrukturen

3.3

SCHLSSELBEGRIFFE
Akzeptanztest

Entwurfsprozess

Softwareentwicklung

AnwendungslebenszyklusVerwaltung (Application Lifecycle


Management, ALM)

Integrationstest

Softwaretests

Verknpfte Liste

Sortieralgorithmen

QuickSort

Stapel

Warteschlange

Systemtest

Regressionstest

Komponententest

Releaseverwaltung

White-Box-Test

Arrays
Black-Box-Test
BubbleSort
Datenstrukturen

Anforderungsanalyse

Sie sind Softwareentwickler bei der Northwind Corporation. Sie arbeiten als Teil eines
Teams, das Computerprogramme entwickelt, die komplexe Geschftsprobleme lsen.
Als Entwickler mssen Sie mit den verschiedenen Phasen des Anwendungslebenszyklus
vertraut sein, da Sie in mehreren Phasen dieses Zyklus eine wichtige Rolle spielen. Zum
Beispiel sind Sie nicht nur an der Entwurfs- und Entwicklungsphase des Lebenszyklus
beteiligt, sondern Sie mssen auch whrend der Testphase hufig mit dem Softwaretestteam
interagieren. Manchmal fhren Sie sogar selbst die Tests durch, sodass Sie grundlegende
Kenntnisse ber diesen Prozess haben mssen.
65

66 | Lektion 3

Bei der Softwareentwicklung verwenden Sie verschiedene Typen von Datenstrukturen


und Algorithmen. Daher mssen Sie wissen, welche Datenstruktur fr die anstehende
Aufgabe zu verwenden ist und welche Auswirkung Ihre Auswahl auf die Leistung hat.
Sie sollten auch allgemeine Kenntnisse ber die verschiedenen Sortiermethoden haben.

Grundlegendes zur Anwendungslebenszyklus-Verwaltung


FAZIT

Die Anwendungslebenszyklus-Verwaltung (Application Lifecycle Management,


ALM) besteht aus einer Reihe von Aktivitten, die mit einem neuen Softwareprodukt
zusammenhngen, angefangen von seiner Entwicklung bis hin zur Produktreife und Stilllegung.
Die Entwicklung einer Softwareanwendung umfasst weit mehr als nur das Schreiben
von Code. Es mssen auch verschiedene andere Aktivitten in der richtigen Reihenfolge
ausgefhrt werden, um eine erfolgreiche Anwendung zu entwickeln. Diese Aktivitten
werden zusammen als Anwendungslebenszyklus-Verwaltung (ALM) bezeichnet. Einige
der Aktivitten des ALM-Prozesses sind in Abbildung 3-1 dargestellt, einschlielich
Anforderungen, Entwurf, Entwicklung, Tests, Bereitstellung und Releaseverwaltung.

Abbildung 3-1
AnwendungslebenszyklusVerwaltung

Anforderungen

Entwurf

Wartung

Tests

Entwicklung

In diesem Abschnitt lernen Sie die verschiedenen Aktivitten und Rollen kennen, die
zur jeweiligen Phase im ALM-Prozess gehren.
Der Anwendungslebenszyklus beginnt, wenn ein Bedarf nach einer neuen
Softwareanwendung besteht. Der Auftraggeber des Projekts ist normalerweise der
Geschftsleiter. Er analysiert den Bedarf, berprft, wie das Projekt in die Gesamtstrategie
des Unternehmens passt, regelt die Finanzierung und leitet die Anwerbung von
Mitarbeitern fr das Projekt ein.
Wahrscheinlich stellt der Geschftsleiter zuerst einen Projektmanager ein. Der
Projektmanager ist fr die gesamte Ausfhrung des Projekts verantwortlich. Im
Umfang seiner Hauptaufgaben muss er gewhrleisten, dass das Budget fr das Projekt
nicht berschritten wird und dass das Projekt termingerecht abgeschlossen wird. Der
Projektmanager ist auch fr die Einstellung von Teammitgliedern und fr die Frderung
der Zusammenarbeit innerhalb des Teams verantwortlich.

Grundlegendes zur Anforderungsanalyse


Bei der Anforderungsanalyse werden die genauen Geschftsanforderungen an ein
neues Softwaresystem ermittelt.

Allgemeine Grundlagen der Softwareentwicklung | 67

Die Anforderungsanalyse ist einer der wichtigsten Schritte im Anwendungslebenszyklus.


Przise, vollstndige, gut dokumentierte Anforderungen sind ganz entscheidend fr den
Erfolg des Projekts. Diese Anforderungen knnen funktional oder nicht funktional sein.
Funktionale Anforderungen geben genau an, fr welche Ziele das System konzipiert wird.
Im Gegensatz dazu stellen nicht funktionale Anforderungen Qualittsanforderungen dar,
wie Skalierbarkeit, Sicherheit, Zuverlssigkeit usw.
Fr die Analyse des jeweiligen Bedarfs und die Formulierung von Anforderungen, die
vom Entwicklungsteam beachtet werden mssen, ist ein Business Analyst zustndig.

Grundlegendes zum Entwurfsprozess


In der Entwurfsphase werden Plne, Modelle und die Architektur fr die
Implementierung der Software entwickelt.
Im Entwurfsprozess werden detaillierte technische Spezifikationen generiert, die fr die
Entwicklung des Systems genutzt werden. Das Ergebnis des Entwurfsprozesses ist eine
Reihe von technischen Modellen und Spezifikationen, die den Entwicklern und anderen
Teammitgliedern whrend der Softwareentwicklung wertvolle Hinweise und Anweisungen
liefern. Das Ergebnis des Entwurfsprozesses ist eher abstrakt und nicht konkret.
Zudiesem Zeitpunkt gibt es kein reales System, mit dem Sie interagieren knnen.
In dieser Phase des ALM-Prozesses spielen ein Architekt und ein User Experience
Designer die bedeutendsten Rollen:
Architekt: Ein Architekt entwirft die technische Vorlage fr ein System. Dies
umfasst die Identifizierung der Komponenten und Dienste, ihres Verhaltens sowie
ihrer Interaktion untereinander und mit externen Komponenten.
User Experience Designer: Ein User Experience Designer sorgt fr das
optimale Bedienerlebnis des Systems. Dies umfasst die Erstellung der
Benutzeroberflchenelemente, die Navigation zwischen verschiedenen Formularen,
Bildschirmen oder Seiten usw.

Grundlegendes zur Softwareentwicklung


In der Entwicklungsphase wird der Entwurf mithilfe von Softwarecode, Datenbanken
und hnlichen Inhalten implementiert.
Die Softwareentwicklung stellt die Phase des ALM-Prozesses dar, in dem die
Geschftsanforderungen anhand des in der vorherigen Phase erstellten Entwurfs in
funktionierendem Code implementiert werden. Am Ende dieser Phase liegt ein konkretes
Ergebnis in Form eines Softwaresystems vor, mit dem Benutzer interagieren knnen.
Folgende Mitarbeiter sind bei der Softwareentwicklung besonders wichtig:
Entwickler: Entwickler schreiben Code basierend auf den vom Business Analyst
erfassten Anforderungen, der vom Architekten festgelegten Architektur und der vom
User Experience Designer entwickelten Benutzeroberflche.
Datenbankadministratoren (DBAs): Datenbankadministratoren sind fr die
Implementierung und Wartung der Softwaredatenbanken verantwortlich. Sie planen
auch die Datenintegritt, -sicherheit und -geschwindigkeit.
Technische Redakteure: Sie erstellen die Systemhandbcher und Hilfedateien,
diespter im Lieferumfang der Anwendung enthalten sind.
Inhaltsentwickler: Inhaltsentwickler sind Fachgebietsexperten, die den Inhalt
fr das System entwickeln. Wenn die Anwendung beispielsweise eine Website fr
Filmrezensionen ist, reicht die Bereitstellung der Website alleine nicht aus. Sie
mssen auch sicherstellen, dass die Website gengend Inhalte aufweist, um das
Interesse der Nutzer zu wecken.

68 | Lektion 3

Grundlegendes zu Softwaretests
Bei Softwaretests wird berprft, ob die Implementierung den Anforderungen des
Systems entspricht.
In der Softwaretestphase wird die Qualitt des Endprodukts sichergestellt. Es werden
mgliche Diskrepanzen zwischen den im Anforderungsdokument beschriebenen
Erwartungen und dem tatschlichen Verhalten identifiziert.
Die Tester zhlen zu den wichtigsten Mitarbeitern in der Softwaretestphase. Sie
berprfen die funktionierende Anwendung, um sicherzustellen, dass sie die festgelegten
Anforderungen erfllt. Wenn diese Tester Fehler in der Anwendung erkennen, weisen
sie den jeweiligen Fehler dem Mitarbeiter zu, der ihn am besten beheben kann.
Beispielsweise wird ein Codefehler wieder einem Entwickler zugewiesen, damit er den
Fehler beheben kann.

Grundlegendes zur Releaseverwaltung

Die Releaseverwaltung dient dazu, die Installation, Bereitstellung und Untersttzung


der Softwareversionen zu verwalten.
Die Releaseverwaltung umfasst Aktivitten wie Verpacken und Bereitstellen der Software,
Verwalten von Softwarefehlern und Verwalten von Softwarenderungsanforderungen.
In der Phase der Releaseverwaltung spielen die folgenden Personen die wichtigste Rolle:

BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie die
AnwendungslebenszyklusVerwaltung und ihre
Aktivitten?
3.1

Releasemanager: Der Releasemanager koordiniert verschiedene Teams und


Geschftseinheiten, um die zeitgerechte Verffentlichung eines Softwareprodukts
zugewhrleisten.
Bedienungspersonal: Diese Mitarbeiter stellen sicher, dass das System wie zugesagt
geliefert wird. Diese Aktivitt knnte zum Beispiel folgende Aufgaben umfassen:
Brennen von DVDs und ihr Versand bei Bestellungseingang oder die fortlaufende
Unterhaltung eines SaaS (Software as a Service)-Systems. Das Bedienungspersonal
ist auch fr die Verffentlichung von Systemupdates (z. B. Fehlerkorrekturen oder
neue Funktionen) verantwortlich.
Mitarbeiter des technischen Supports: Diese Mitarbeiter interagieren mit den
Kunden und geben ihnen Hilfestellung bei der Behebung von Problemen mit ihrem
System. Der technische Support kann ntzliche Metriken dazu erstellen, welche
Bereiche des Systems fr Benutzer am schwierigsten sind und mglicherweise
in der nchsten Version der Anwendung aktualisiert werden mssen.

Grundlegendes zu Softwaretests
FAZIT

Bei Softwaretests wird die Software im Hinblick auf die festgelegten Anforderungen
geprft. Die Tests werden nach Abschluss der meisten Entwicklungsarbeiten
durchgefhrt.
Wie bereits erwhnt, wird bei Softwaretests berprft, ob eine Softwareanwendung
erwartungsgem funktioniert und alle geschftlichen und technischen Anforderungen
erfllt. Wenn das erwartete Verhalten vom tatschlichen Verhalten des Systems abweicht,
wird ein Softwarefehler protokolliert und schlielich an eine Person weitergeleitet, die fr
dessen Behebung verantwortlich ist.
Softwaretests knnen funktionale und nicht funktionale Tests umfassen. Funktionale
Tests beziehen sich auf die Funktionsanforderungen des Systems. Hierbei werden die

Allgemeine Grundlagen der Softwareentwicklung | 69

Funktionen getestet, die die Basisfunktionalitt des Systems ausmachen. Beispielsweise


werden Tests durchgefhrt, ob Benutzer Waren zu einem Warenkorb hinzufgen knnen.
Diese Tests sind wichtige Funktionstests fr eine E-Commerce-Website. Im Vergleich
dazu beinhalten nicht funktionale Tests das Testen von Softwareattributen, die nicht zur
Basisfunktionalitt gehren, sondern vielmehr zu den nicht funktionalen Anforderungen
der Software, wie Skalierbarkeit, Benutzerfreundlichkeit und Sicherheit.

HINWEIS

Es gilt zu beachten, dass in der Softwaretestphase nur Fehler gefunden werden knnen,
aber es kann nicht garantiert werden, dass keine Fehler vorliegen. Komplexe Software
verfgt ber eine sehr groe Anzahl von mglichen Ausfhrungspfaden und viele
Parameter, die das Verhalten beeinflussen knnen. Es ist nicht realisierbar und hufig
auch nicht mglich, alle verschiedenen Situationen, auf die eine solche Software trifft,
in einer Produktionsumgebung zu testen.

Grundlegendes zu Testmethoden
Softwaretestmethoden werden im Allgemeinen in zwei Kategorien unterteilt:
White-Box- und Black-Box-Tests.
Traditionell gibt es zwei umfassende Methoden fr Softwaretests:
Black-Box-Test
White-Box-Test
Bei Black-Box-Tests wird die Software als Black Box behandelt und der Schwerpunkt auf
Eingaben und Ausgaben gelegt. Bei dieser Testmethode werden keine Kenntnisse ber die
innere Funktionsweise des zu testenden Systems angewendet. Im Gegensatz dazu nutzen die
Tester bei White-Box-Tests ihre Kenntnisse ber die innere Funktionsweise des zu testenden
Systems. Beispielsweise haben die Tester bei White-Box-Tests Zugriff auf den Quellcode.
Diese zwei Testmethoden ergnzen sich. Mit Black-Box-Tests wird in der Regel
sichergestellt, dass eine Softwareanwendung alle festgelegten Anforderungen erfllt.
Mit White-Box-Tests wird dagegen sichergestellt, dass fr jede Methode oder Funktion
entsprechende Testflle verfgbar sind.

Grundlegendes zu Teststufen
Die Tests werden in verschiedenen Lebenszyklusphasen der Anwendungsentwicklung
durchgefhrt. Verschiedene Teststufen geben an, welche Tests in welcher Phase im
Lebenszyklus durchgefhrt werden.
Teststufen werden dadurch definiert, in welcher Phase im Softwareentwicklungslebenszyklus
die Tests durchgefhrt werden. Es gibt fnf verschiedene Teststufen:
Komponententest: Bei Komponententests wird die Funktionalitt einer Codeeinheit
berprft. Beispielsweise kann bei einem Komponententest bewertet werden,
ob eine Methode den richtigen Wert zurckgibt. Ein Komponententest ist ein
White-Box-Test und wird hufig von dem Entwickler durchgefhrt, der den Code
schreibt. Bei Komponententests wird hufig ein automatisiertes Tool verwendet,
das die Entwicklung von Fllen vereinfachen und auch nachverfolgen kann, ob
eine Codenderung zu einem Fehlschlagen von vorhandenen Komponententests
fhrt. Visual Studio verfgt ber integrierte Untersttzung fr Komponententests.
Sie knnen Open Source-Tools wie NUnit auch zum Automatisieren von
Komponententests fr den .NET Framework-Code verwenden.
Integrationstest: Bei Integrationstests wird die Schnittstelle zwischen den
Softwarekomponenten geprft. Integrationstests knnen whrend der Entwicklung

70 | Lektion 3

HINWEIS

Es ist wesentlich
kostengnstiger, Fehler
mglichst frh im
Produktentwicklungszyklus
zu erkennen.

BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie die
verschiedenen
Softwaretestmethoden?
3.1

der Komponenten schrittweise durchgefhrt werden oder als Big Bang, wenn alle
Komponenten fr den gemeinsamen Einsatz betriebsbereit sind. Die erste Methode
ist der letzteren vorzuziehen, da sie dazu beitrgt, whrend der Entwicklung des
Systems das Risiko zu verringern und das Vertrauen der Beteiligten zu strken. Bei
Integrationstests kann auch die Interaktion der Komponenten mit einem internen
System getestet werden. Wenn zum Beispiel eine Komponente auf Daten aus einem
externen Webdienst beruht, gewhrleisten Integrationstests, dass die Komponente mit
der externen Anwendung gut funktioniert.
Systemtest: Systemtests sind umfassende Tests des Softwaresystems. Zu diesem
Zeitpunkt wurden alle Systemkomponenten entwickelt, und sie funktionieren
zusammen und mit externen Systemen.
Akzeptanztest: Diese Teststufe wird hufig von den Kunden selbst ausgefhrt.
Vor der breit angelegten Verffentlichung eines Produkts gibt es im Allgemeinen
zwei Stufen von Akzeptanztests: Alpha-und Betatests. Alphatests werden von
einer begrenzten Anzahl an Benutzern ausgefhrt und ermglichen es, das Produkt
wichtigen Kunden frhzeitig zur Verfgung zu stellen und Feedback einzuholen.
In Alphaversionen fehlen unter Umstnden einige Funktionen und in der Regel
verschiedene nicht funktionale Attribute, wie zum Beispiel die Leistungsfhigkeit.
In der nchsten Teststufe, dem Betatest, stellen Sie das Produkt einer greren
Kundengruppe zur Verfgung und fragen nach deren Feedback. In Bezug auf die
Funktionalitt ist die Betaversion einer Software der endgltigen Version sehr
hnlich. Jedoch arbeiten die Entwicklungsteams mglicherweise noch an der
Verbesserung der Leistung und an der Korrektur bekannter Fehler.
Regressionstest: Wenn Fehler in einer Softwareanwendung erkannt und behoben
werden, mssen Sie anschlieend sicherstellen, dass alle neuen Korrekturen
keine Fehler in den bereits getesteten Bereichen verursachen. Hierfr eignen sich
Regressionstests sehr gut. Bei jeder neuen Korrektur eines Programms fhren die
Softwaretester in der Regel eine Reihe von Regressionstests aus, um sicherzustellen,
dass die bereits geprfte Funktionalitt weiterhin erhalten geblieben ist.

Grundlegendes zu Datenstrukturen

FAZIT

Datenstrukturen sind Methoden zum Organisieren und Speichern von Daten im


Computerspeicher. Die Art der Datenspeicherung beeinflusst die Art des Datenabrufs
und der Datenbearbeitung. Kenntnisse ber Datenstrukturen beinhalten nicht nur
Kenntnisse ber das Speichermuster, sondern auch ber die zum Erstellen, Aufrufen
und Bearbeiten der Datenstruktur verwendeten Methoden.
Datenstrukturen bilden die Bausteine der meisten Computerprogramme und ermglichen
den Entwicklern die Implementierung komplexer Funktionen. Die meisten
Programmierumgebungen bieten eine integrierte Untersttzung fr eine Vielzahl von
Datenstrukturen sowie zugehrige Methoden zum Bearbeiten dieser Datenstrukturen.
Indiesem Abschnitt lernen Sie mehrere verschiedene Typen von Datenstrukturen kennen,
sodass Sie sich mit den allgemeinen Bearbeitungsmethoden vertraut machen knnen.

Erluterungen zu Arrays
Ein Array ist eine Sammlung von Elementen, die in einem zusammenhngenden
Speicherbereich gespeichert und mit einem oder mehreren Indizes adressiert
werdenknnen.

Allgemeine Grundlagen der Softwareentwicklung | 71

Ein Array ist eine allgemeine Datenstruktur, die eine Sammlung von Elementen
desselben Typs darstellt. Die Elemente in einem Array werden in zusammenhngenden
Speicherbereichen gespeichert. Ein Array ist eine homogene Datenstruktur, da alle
Elemente eines Arrays denselben Datentyp haben. Auf jedes Arrayelement kann mithilfe
eines Indexes direkt zugegriffen werden. In .NET Framework sind Arrayindizes nullbasiert.

INTERNE REPRSENTATION
Im folgenden Code erstellt die erste Anweisung eine Arrayvariable, und die zweite
Anweisung initialisiert die Variable mit einem Array mit vier ganzen Zahlen:
int[] numbers;
numbers = new int[4];

Zunchst sind die Variablennummern auf NULL festgelegt, da das Array noch nicht
initialisiert wurde. Die zweite Anweisung initialisiert jedoch das Array durch Zuweisen
eines zusammenhngenden Speicherbereichs, der gro genug ist, um vier ganze Zahlen
imArbeitsspeicherheap speichern zu knnen. Die Startadresse in der Speicherbelegung wird
in der numbers-Arrayvariablen gespeichert (siehe Abbildung 3-2). Alle Arrayelemente werden
in diesem Fall mit dem Wert 0 initialisiert, da 0 der Standardwert fr eine ganze Zahl ist.
Abbildung 3-2
Interne Darstellung einer
Array-Datenstruktur

Stapel
int [] numbers;

null

numbers = new int [4];

addr

Heap

Die Variablennummern fungieren dann als Verweis auf den Speicherbereich, der
dem Array zugewiesen wurde. Mit dem Arraynamen kann direkt auf die jeweiligen
Arrayelemente zugegriffen werden. In .NET Framework sind alle Arrays nullbasiert, d. h.
der Zugriff auf das erste Element des Arrays erfolgt ber einen Index von numbers[0],
auf das zweite Element ber einen Index von numbers[1] usw.
Es ist auch mglich, mehrdimensionale Arrays zu haben. Ein zweidimensionales Array ist
wie eine Tabelle, in der jede Zelle ein Arrayelement ist, die mithilfe der entsprechenden
Zeilen- und Spaltennummer adressiert werden kann. Der Startindex der Zeilen- und
Spaltennummer ist jeweils NULL. Beispielsweise bezieht sich der Ausdruck table[2, 3]
auf ein Element in der dritten Zeile und vierten Spalte eines Arrays nach Namenstabelle.

GNGIGE OPERATIONEN
Arrays untersttzen folgende Operationen:
Zuweisung
Zugriff
Um mit einem Array zu arbeiten, weisen Sie zuerst den Speicher durch Erstellen und
Initialisieren des Arrays zu, wie zuvor erlutert. Wenn das Array zugewiesen wurde,
knnen Sie in beliebiger Reihenfolge auf Arrayelemente zugreifen, indem Sie direkt auf
den Index verweisen. Mit folgendem Code wird zum Beispiel dem vierten Element des
Arrays der Wert 10 zugewiesen, und der doppelte Wert wird dann der calc-Variablen
zugewiesen:
number[3] = 10;
int calc = number[3] * 2;

72 | Lektion 3

LEISTUNG UND NUTZUNG


Der Inhalt eines Arrays wird als zusammenhngender Speicherblock angeordnet und kann
mithilfe des Arrayindex direkt aufgerufen werden. Daher wird der Inhalt sehr schnell
aus dem Array gelesen bzw. in den Array geschrieben. Arrays sind jedoch aufgrund der
Homogenitt und festen Gre begrenzt. Die Arraygre kann zwar vergrert werden,
aber anschlieend mssen alle Arrayelemente neu zugewiesen werden. Dies ist ein sehr
zeitaufwendiger Vorgang.
Arrays funktionieren am besten, wenn die Anzahl der Elemente in der Sammlung
vorgegeben und schneller, direkter Zugriff auf die Elemente erforderlich ist.
In .NET Framework knnen Sie die ArrayList-Klasse verwenden, um die Begrenzung eines
Arrays aufgrund Homogenitt und fester Gre zu umgehen. Eine ArrayList-Klasse ist ein Typ
einer Sammlung, die Elemente eines beliebigen Datentyps enthalten und bei Bedarf dynamisch
erweitert werden kann. Eine ArrayList-Klasse ist jedoch nicht so schnell wie ein Array.

Grundlegendes zu Warteschlangen
Eine Warteschlange ist eine Sammlung von Elementen, in der das erste der Sammlung
hinzugefgte Element als erstes wieder entfernt wird.
Die Warteschlangendatenstruktur imitiert eine reale Warteschlange. In einer Warteschlange
werden die Elemente in der Reihenfolge verarbeitet, in der sie der Warteschlange
hinzugefgt wurden. Elemente werden also immer am Ende der Warteschlange
hinzugefgt und vom Anfang der Warteschlange entfernt. Dies wird hufig auch als
FIFO (First In First Out)-Verarbeitung bezeichnet. Die Kapazitt einer Warteschlange
ist definiert als die Anzahl der Elemente, die sie enthalten kann. Beim Hinzufgen von
Elementen zu einer Warteschlange wird jedoch die Kapazitt automatisch erhht. Eine
Warteschlange ist auch eine heterogene Datenstruktur. Dies bedeutet, dass die Elemente
ineiner Warteschlange einen anderen Datentyp haben knnen.

INTERNE REPRSENTATION
Um eine bermige Neuzuweisung von Speicherplatz zu vermeiden und die Verwaltung
zu vereinfachen, wird eine Warteschlange intern hufig als kreisfrmiges Array von
Objekten implementiert (siehe Abbildung 3-3).
Abbildung 3-3

Interne Darstellung einer


Warteschlangendatenstruktur

null
7

1
Anfang

null

null

Element 1

Element 5

Element 2

3
Element 4

Ende

Element 3
4

In einer Warteschlange verweist der Anfangsindex auf das erste Element und der Endindex
auf das letzte Element. In Abbildung 3-3 zeigt beispielsweise der Anfangsindex auf
Position 2 in der Warteschlange. Da die Warteschlange kreisfrmig ist, spielt es keine
Rolle, an welcher Position die Warteschlange beginnt, solange Sie die Anfangs- und

Allgemeine Grundlagen der Softwareentwicklung | 73


HINWEIS

Eine generische
Version der QueueKlasse ist als Teil des
System.Collections.
Generic-Namespace
verfgbar. Diese
generische Version wird
zum Erstellen einer
Warteschlange von
Elementen verwendet,
die den gleichen
Datentyp haben.

Endzeiger nachverfolgen knnen. Wenn ein Element entfernt wird, bewegt sich der Anfang
zum nchsten Element in der Warteschlange. Wenn ein neues Element hinzugefgt wird,
wird es immer am Ende der Warteschlange angezeigt. Der Endzeiger verweist dann auf
das neu hinzufgte Element. Alle NULL-Positionen in einer Warteschlange (einschlielich
der in Abbildung 3-3 dargestellten) sind die leeren Positionen, die gefllt werden knnen,
bevor die Warteschlange eine Neuzuordnung des Speichers erfordert.
.NET Framework bietet eine Implementierung der Warteschlangendatenstruktur als Teil
der Queue-Klasse im System.Collections-Namespace. Wenn in einer Programmiersprache
keine Implementierung einer Warteschlange mglich ist, knnen Sie Ihre eigene
Queue-Klasse schreiben, indem Sie eine arrayhnliche Datenstruktur verwenden und
dieWarteschlangenoperationen simulieren.

GNGIGE OPERATIONEN
Eine Warteschlange untersttzt die folgenden gngigen Operationen:
Enqueue (In die Warteschlange einreihen): Mit der enqueue-Operation wird
zunchst geprft, ob die Warteschlange gengend Kapazitt hat, um ein weiteres
Element aufnehmen zu knnen. Wenn die Kapazitt ausreichend ist, wird das
Element am Ende der Warteschlange hinzugefgt. Wenn kein Platz in der
Warteschlange vorhanden ist, wird das Array um einen vorgegebenen Zuwachsfaktor
neu zugeordnet, und das neue Element wird dann zur Warteschlange hinzugefgt.
Dequeue (Aus der Warteschlange entfernen): Mit der dequeue-Operation wird
das aktuelle Element vom Anfang der Warteschlange entfernt und der Anfang so
positioniert, dass er auf das nchste Element zeigt.
Peek (Nachsehen): Mit der peek-Operation knnen Sie sich das aktuelle Element am
Anfang der Warteschlange anschauen, ohne es daraus zu entfernen.
Contains (Enthlt): Mit der contains-Operation knnen Sie ermitteln, ob ein
bestimmtes Element in der Warteschlange vorhanden ist.

LEISTUNG UND NUTZUNG


Eine Warteschlange ist eine spezielle Datenstruktur, die am besten fr Anwendungen
geeignet ist, in denen Sie die Elemente in der eingegangenen Reihenfolge verarbeiten
mssen. Als Beispiele sind Druckwarteschlangen, Messagingsysteme und Auftragsplaner
zu nennen. Im Gegensatz zu einem Array kann mit einer Warteschlange nicht in
willkrlicher Reihenfolge auf Elemente zugegriffen werden. Mit Operationen wie
enqueue und dequeue werden Elemente genau genommen zur Warteschlange
hinzugefgt bzw. aus ihr entfernt.

Grundlegendes zu Stapeln
Ein Stapel ist eine Sammlung von Elementen, in der das letzte der Sammlung
hinzugefgte Element als erstes wieder entfernt wird.
Im Gegensatz zu einer Warteschlange handelt es sich bei einem Stapel um eine LIFO
(Last In First Out)-Datenstruktur. Stellen Sie sich einen Stapel hnlich wie einen Stapel
Essteller auf einem Buffettisch vor. Hier wird der zuletzt hinzugefgte Teller wieder als
erster entfernt. Die Kapazitt eines Stapels bezieht sich auf die Anzahl der Elemente, die
er enthalten kann. Wenn Elemente zu einem Stapel hinzugefgt werden, wird die Kapazitt
des Stapels jedoch automatisch erhht. Ein Stapel ist eine heterogene Datenstruktur. Dies
bedeutet, dass die darin enthaltenen Elemente verschiedene Datentypen haben knnen.

INTERNE REPRSENTATION
Wie eine Warteschlange wird ein Stapel hufig als kreisfrmiger Puffer implementiert,
umeine bermige Neuzuweisung von Speicherplatz zu vermeiden und die Verwaltung
zu vereinfachen. Ein Stapel kann genau wie die Warteschlange in Abbildung 3-3
visualisiert werden, mit dem Unterschied, dass das Ende nun die Oberseite des Stapels
darstellt und der Anfang die Unterseite des Stapels.

74 | Lektion 3
HINWEIS

Eine generische
Version der StackKlasse ist als Teil des
System.Collections.
Generic-Namespace
verfgbar. Diese
generische Version
wird zum Erstellen
eines Stapels von
Elementen verwendet,
die den gleichen
Datentyp haben.

Neue Elemente werden immer der Oberseite eines Stapels hinzugefgt. Wenn dies
geschehen ist, zeigt die Stapeloberseite auf dieses neu hinzugefgte Element. Elemente
werden auch von der Oberseite des Stapels entfernt. Wenn dies geschieht, wird die
Oberseite des Stapels so angepasst, dass sie auf das nchste Element im Stapel zeigt.
.NET Framework bietet eine Implementierung der Stapeldatenstruktur als Teil
der Stack-Klasse im System.Collections-Namespace. Wenn in einer Programmiersprache
keine Implementierung eines Stapels mglich ist, knnen Sie Ihre eigene
Stack-Klasse schreiben, indem Sie eine arrayhnliche Datenstruktur verwenden und
dieStapeloperationen simulieren.

GNGIGE OPERATIONEN
Ein Stapel untersttzt die folgenden gngigen Operationen:
Push (Einkellern): Mit der push-Operation wird zunchst geprft, ob der Stapel
gengend Kapazitt hat, um ein weiteres Element aufnehmen zu knnen. Wenn
die Kapazitt ausreichend ist, wird das Element an der Oberseite des Stapels
hinzugefgt. Wenn kein Platz im Stapel vorhanden ist, wird das Array um einen
vorgegebenen Zuwachsfaktor neu zugeordnet, und das neue Element wird dann zum
Stapel hinzugefgt.
Pop (Auskellern): Mit der pop-Operation wird das Element von der Oberseite des
Stapels entfernt und die Oberseite so positioniert, dass sie auf das nchste Element
im Stapel weist.
Peek (Nachsehen): Mit der peek-Operation knnen Sie sich das aktuelle Element an
der Oberseite des Stapels anschauen, ohne es daraus zu entfernen.
Contains (Enthlt): Mit der contains-Operation knnen Sie ermitteln, ob ein
bestimmtes Element im Stapel vorhanden ist.

LEISTUNG UND NUTZUNG


Ein Stapel ist eine spezielle Datenstruktur, die am besten fr Anwendungen geeignet ist,
in denen Sie die Elemente in der LIFO-Reihenfolge verarbeiten mssen. Stapel stellen
aufgrund ihrer Anwendungen in der Laufzeitspeicherverwaltung, der Ausdrucksauswertung,
der Nachverfolgung von Methodenaufrufen usw. ntzliche Strukturen dar. Im Gegensatz
zu einem Array kann mit einem Stapel nicht in willkrlicher Reihenfolge auf die Elemente
zugegriffen werden. Mit Operationen wie push und pop werden Elemente genau
genommen zum Stapel hinzugefgt bzw. aus ihm entfernt.

Verknpfte Listen
Eine verknpfte Liste ist eine Sammlung von Knoten, die so angeordnet sind, dass
jeder Knoten eine Verknpfung zum nchsten Knoten in der Sequenz enthlt.
Eine verknpfte Liste ist eine Sammlung von Knoten, die so angeordnet sind, dass jeder
Knoten einen Zeiger (oder eine Verknpfung) zum nchsten Knoten in der Sequenz enthlt.
Im Gegensatz zu einem Array mssen die Elemente in einer verknpften Liste nicht
zusammenhngend sein. Daher erfordert eine verknpfte Liste fr die gesamte Liste keine
Neuzuordnung von Arbeitsspeicher, wenn mehr Elemente hinzugefgt werden mssen.

INTERNE REPRSENTATION
Im Speicher kann eine verknpfte Liste als Auflistung von Knoten visualisiert werden
(siehe Abbildung 3-4).
Abbildung 3-4
Interne Darstellung einer
Datenstruktur mit einfach
verknpfter Liste

Hauptknoten
Head

Null
Null

Allgemeine Grundlagen der Softwareentwicklung | 75

Jeder Knoten in einer verknpften Liste enthlt zwei Informationen: die Daten des Knotens
und die Verknpfung zum nchsten Knoten. Der erste Knoten der Liste wird als Hauptknoten
bezeichnet. Mithilfe der Verknpfung im Hauptknoten knnen Sie zum nchsten Knoten
gelangen und danach alle Knoten durchlaufen, bis Sie zur letzten Verknpfung mit einem
NULL-Wert gelangen. Hufig wird der Begriff Ende fr die Liste verwendet, auf die der
Hauptknoten verweist, d. h. er bezieht sich auf alle Elemente nach dem Hauptknoten. Daher
stellt das Ende in Abbildung 3-4 die verknpfte Liste beginnend bei Knoten B dar.
Je nach den Anforderungen knnen auch mehrere andere Implementierungen von
verknpften Listen verwendet werden. In einer zyklisch verknpften Liste verweist
beispielsweise der letzte Knoten in der Liste zurck zum ersten Knoten, sodass sich ein
Kreis ergibt. Im Gegensatz dazu enthlt ein Knoten in einer doppelt verknpften Liste
zwei Verknpfungen (siehe Abbildung 3-5).
Abbildung 3-5

Null

Interne Darstellung einer


Datenstruktur mit doppelt
verknpfter Liste

Null
Null

Head
Hauptknoten

An jedem Knoten einer doppelt verknpften Liste stellt eine Verknpfung einen
Vorwrtsverweis dar, der auf den nchsten Knoten in der Sequenz zeigt. Die andere
Verknpfung stellt einen Rckwrtsverweis dar, der auf den vorherigen Knoten in der
Sequenz zeigt. Wie Sie sich vorstellen knnen, ist eine doppelt verknpfte Liste einfach
in beiden Richtungen zu durchlaufen.
.NET Framework stellt eine LinkedList-Klasse als Teil des System.Collections.GenericNamespace bereit. Diese Klasse implementiert eine homogene doppelt verknpfte Liste
des angegebenen Datentyps. Sie knnen auch Ihre eigenen Klassen schreiben, um eine
andere Art der Implementierung verknpfter Listen zu realisieren.

GNGIGE OPERATIONEN
Eine verknpfte Liste untersttzt die folgenden gngigen Operationen:
Add (Hinzufgen): Beim Hinzufgen oder Einfgen eines Elements in einer
verknpften Liste geht es darum, Verknpfungen zu ndern (siehe Abbildung 3-6).
Angenommen, Sie mchten einen neuen Knoten (mit dem Wert Z) zwischen den
Abbildung 3-6

Hinzufgen eines
neuen Knotens zu einer
verknpftenListe

Neuer Knoten

Null

Head
Hauptknoten
Z

Hauptknoten
Head

Neuer Knoten

Null
Null

76 | Lektion 3

Knoten mit den Werten A und B einfgen. Zuerst mssen Sie dem neuen Knoten
gengend Speicher zuordnen und dem Datenabschnitt des Knotens den Wert
Zzuweisen. Als Nchstes mssen Sie den Verknpfungsabschnitt des Knotens A in
den Verknpfungsabschnitt des Knotens Z kopieren, sodass Knoten Z auf Knoten
B zeigt. Zum Schluss mssen Sie die Adresse des neu erstellten Knotens Z in den
Verknpfungsabschnitt des Knotens A kopieren, sodass Knoten A auf Knoten Z zeigt.
Remove (Entfernen): hnlich wie beim Hinzufgen geht es auch beim Entfernen
oder Lschen von Elementen darum, Verknpfungen zu ndern. Wenn Sie
beispielsweise den dritten Knoten in Abbildung 3-4 lschen mchten, ndern Sie die
Verknpfung fr den zweiten Knoten in einen NULL-Wert. Der dritte Knoten stellt
nun einen nicht referenzierten Teil des Speichers dar und wird schlielich an den
verfgbaren Speicherpool zurckgegeben.
Find (Suchen): Die find-Operation sucht nach einem Knoten mit einem bestimmten
Wert in der verknpften Liste. Zum Suchen eines Werts beginnen Sie normalerweise
beim Hauptknoten und berprfen, ob der Wert bereinstimmt. Wenn dies nicht der
Fall ist, folgen Sie der Verknpfung zum nchsten Knoten und fhren den Suchvorgang
so lange aus, bis Sie das Ende der Liste erreichen, d. h. eine NULL-Verknpfung.

BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie
die gngigen
Datenstrukturen?
3.2

LEISTUNG UND NUTZUNG


Eine verknpfte Liste ermglicht keinen zuflligen Zugriff auf ihre Elemente. Die einzige
Mglichkeit zum Aufrufen eines Elements besteht darin, beim Hauptknoten zu beginnen
und den Verknpfungen von dort zu folgen. Daher werden Daten in verknpften Listen
nur langsam abgerufen. Einfge- und Lschvorgnge knnen in verknpften Listen jedoch
sehr schnell durchgefhrt werden, da beim Einfgen oder Lschen eines Knotens einfach
eine Verknpfung gendert wird. Verknpfte Listen haben auch keine maximale Kapazitt,
d. h. danach muss ihr Inhalt neu zugewiesen werden.
In der Tat bietet eine verknpfte Liste eine Alternative zum Implementieren der
Warteschlangen- und Stapeldatenstrukturen. Wenn ein hufiger Zugriff auf Daten
erforderlich ist, Sie jedoch nur selten Daten einfgen oder lschen mssen, ist ein Array
die bevorzugte Implementierung. Wenn Sie jedoch hufig Einfge- und Lschvorgnge
ausfhren mssen, ist eine verknpfte Liste mglicherweise eine bessere Implementierung.

Grundlegendes zu Sortieralgorithmen

FAZIT

Mit Sortieralgorithmen, wie z. B. BubbleSort und QuickSort, werden Elemente


in einer Liste in einer bestimmten Reihenfolge angeordnet. Kenntnisse ber
Sortieralgorithmen knnen Ihnen beim Verstehen, Analysieren und Vergleichen
verschiedener Methoden der Problemlsung helfen.
Sortieralgorithmen sind Algorithmen, mit denen die Elemente in einer Liste in einer bestimmten
Reihenfolge angeordnet werden. Beispielsweise knnen Sie einen Sortieralgorithmus
verwenden, um eine Liste der Teilnehmer in aufsteigender Reihenfolge nach dem Nachnamen
zu sortieren. In der Anfangszeit der Datenverarbeitung stellte die Sortierung ein greres
Problem dar, das umfassende Forschungsarbeiten nach sich zog. Heutzutage sind die
grundlegenden Sortierfunktionen bereits in den gngigsten Bibliotheken und Datenstrukturen
integriert. Beispielsweise knnen Sie in .NET Framework die Array.Sort-Methode zum
Sortieren eines Arrays verwenden. Jedoch ist es weiterhin wichtig, die Sortierung als
Verstndnismethode fr Problemlsungen und Algorithmusanalysen zu betrachten.
In diesem Abschnitt lernen Sie zwei gngige Sortieralgorithmen, BubbleSort
undQuickSort, kennen.

Grundlegendes zu BubbleSort
Der BubbleSort-Algorithmus verwendet eine Reihe von Vergleichs- und
Austauschoperationen, um die Elemente einer Liste in der richtigen Reihenfolge
anzuordnen.

Allgemeine Grundlagen der Softwareentwicklung | 77

Bei BubbleSort werden zwei Elemente verglichen, um zu prfen, ob sie sich in der
richtigen Reihenfolge befinden. Wenn dies nicht der Fall ist, werden sie getauscht. Der
Algorithmus fhrt damit so lange fort, bis die gesamte Liste die gewnschte Reihenfolge
aufweist. Der Name BubbleSort leitet sich von der Funktionsweise des Algorithmus ab:
Whrend der Algorithmus ausgefhrt wird, steigen die kleineren Elemente wie Blasen im
Wasser immer weiter nach oben, das heit, an den Anfang der Liste.
Visualisieren wir BubbleSort nun mithilfe eines Beispiels. Angenommen, Sie mchten alle
Elemente in der folgenden Liste in aufsteigender Reihenfolge anordnen: (20, 30, 10, 40). Diese
Elemente sollten vom kleinsten zum grten sortiert werden. Der BubbleSort-Algorithmus
versucht, diese Aufgabe in einem oder mehreren Durchlufen zu lsen, wobei die Liste der
Elemente in jedem Durchlauf vollstndig berprft wird. Wenn der Algorithmus Elemente
erkennt, die sich nicht in der richtigen Reihenfolge befinden, werden sie getauscht. Der
Algorithmus wird beendet, wenn die gesamte Liste berprft wurde, ohne dass Elemente
getauscht wurden. Wenn keine Elemente getauscht wurden, bedeutet dies, dass sie sich in
der richtigen Reihenfolge befinden und die Liste vollstndig sortiert wurde.
Tabelle 3-1
Erster Durchlauf mit
BubbleSort

Schritt Vorher

Nachher

Kommentare

20, 30, 10, 40

20, 30, 10, 40 


Der Algorithmus vergleicht die ersten
zwei Elemente (20 und 30). Da sie sich
in der richtigen Reihenfolge befinden,
mssen sie nicht getauscht werden.

20, 30, 10, 40

20, 10, 30, 40

20, 10, 30, 40

20, 10, 30, 40 


Der Algorithmus vergleicht die nchsten
zwei Elemente (30 und 40). Da sie sich
in der richtigen Reihenfolge befinden,
mssen sie nicht getauscht werden.

 er Algorithmus vergleicht die nchsten


D
zwei Elemente (30 und 10). Da sie
sich nicht in der richtigen Reihenfolge
befinden, werden sie getauscht.

Wie in Tabelle 3-1 ersichtlich ist, wurde vom BubbleSort-Algorithmus am Ende des ersten
Durchlaufs ein Tausch vorgenommen, und es ist mglich, dass die Elemente nicht noch
richtig sortiert sind. Daher fhrt BubbleSort einen weiteren Durchlauf fr die Liste durch
(siehe Tabelle 3-2).
Tabelle 3-2
Zweiter Durchlauf mit
BubbleSort

Schritt Vorher

Nachher

Kommentare

20, 10, 30, 40

10, 20, 30, 40

 er Algorithmus vergleicht die ersten


D
zwei Elemente (20 und 10). Da sie
sich nicht in der richtigen Reihenfolge
befinden, werden sie getauscht.

10, 20, 30, 40

10, 20, 30, 40

 er Algorithmus vergleicht die nchsten


D
zwei Elemente (20 und 30). Da sie sich
in der richtigen Reihenfolge befinden,
mssen sie nicht getauscht werden.

10, 20, 30, 40

10, 20, 30, 40

 er Algorithmus vergleicht die nchsten


D
zwei Elemente (30 und 40). Da sie sich
in der richtigen Reihenfolge befinden,
mssen sie nicht getauscht werden.

78 | Lektion 3

Am Ende des zweiten Durchlaufs wurde von BubbleSort ein weiterer Tausch
vorgenommen, sodass die richtige Sortierung der Liste weiterhin nicht gewhrleistet
sein kann. Folglich fhrt BubbleSort einen dritten Durchlauf fr die Liste durch, wie aus
Tabelle 3-3 hervorgeht.
Tabelle 3-3
Dritter Durchlauf mit
BubbleSort
HINWEIS

Bei der Verwendung


von BubbleSort
knnen Sie sich
sicher sein, dass fr
die Sortierung eines
Arrays ein Durchlauf
weniger bentigt
wird, als Elemente
vorhanden sind. Wenn
also vier Elemente
vorhanden sind (wie
im Beispielszenario),
wird das Array in
drei Durchlufen
sortiert (unabhngig
von der anfnglichen
Reihenfolge).

Schritt Vorher

Nachher

Kommentare

10, 20, 30, 40

10, 20, 30, 40 Der Algorithmus vergleicht die ersten


zwei Elemente (10 und 20). Da sie sich
in der richtigen Reihenfolge befinden,
mssen sie nicht getauscht werden.

10, 20, 30, 40

10, 20, 30, 40 Der Algorithmus vergleicht die nchsten


zwei Elemente (20 und 30). Da sie sich
in der richtigen Reihenfolge befinden,
mssen sie nicht getauscht werden.

10, 20, 30, 40

10, 20, 30, 40

 er Algorithmus vergleicht die nchsten


D
zwei Elemente (30 und 40). Da sie sich
in der richtigen Reihenfolge befinden,
mssen sie nicht getauscht werden.

Am Ende des dritten Durchlaufs hat BubbleSort keine Elemente mehr getauscht.
Dies bedeutet, dass die Liste nun in der richtigen Reihenfolge sortiert wurde und der
Algorithmus beendet werden kann.
In C# kann der BubbleSort-Algorithmus durch die folgende Methode ausgedrckt werden:
static int[] BubbleSort(int[] numbers)
{
bool swapped;
do
{
swapped = false;
for (int i = 0; i < numbers.Length 1; i++)
{
if (numbers[i] > numbers[i + 1])
{
//swap
int temp = numbers[i + 1];
numbers[i + 1] = numbers[i];
numbers[i] = temp;
swapped = true;
}
}
} while (swapped == true);
return numbers;
}

Allgemeine Grundlagen der Softwareentwicklung | 79

Grundlegendes zu QuickSort
Der QuickSort-Algorithmus verwendet Partitionierungs- und Vergleichsoperationen,
um die Elemente einer Liste in der richtigen Reihenfolge anzuordnen.
Der QuickSort-Algorithmus verwendet die Beherrschen-Methode, um eine Liste
kontinuierlich aufzuteilen und zu sortieren, bis nur noch ein Element in der Teilfolge existiert
dann gilt die Gesamtfolge als sortiert. Im Folgenden wird dieses Verfahren detaillierter erlutert:
Eine Liste in der Gre 0 oder 1 ist automatisch sortiert.
Whlen Sie bei einer greren Liste ein beliebiges Element in der Liste als Pivotelement
aus. Teilen Sie die Liste dann so auf, dass alle Elemente, die kleiner als oder gleich dem
Pivotelement sind, in die linke Liste verschoben werden, und alle Elemente grer als das
Pivotelement in die rechte Liste verschoben werden. Nun befindet sich die Kombination
aus linker Liste, Pivotelement und rechter Liste immer in sortierter Reihenfolge, sofern
die linke und rechte Liste in der richtigen Reihenfolge sortiert wurden.
Die Liste ist nun in zwei kleinere Listen aufgeteilt: in die linke und in die rechte Liste.
Diese beiden Listen werden mithilfe der in der obigen Aufzhlung beschriebenen
Methoden gelst.
Abschlieend werden alle kleinen sortierten Listen zusammengefhrt und ergeben
somit die endgltige, vollstndig sortierte Liste.
In der folgenden Tabelle wird der QuickSort-Algorithmus anhand eines kurzen Beispiels erlutert.
Tabelle 3-4
Visualisierung von QuickSort

Schritt Zu sortierende Daten

Kommentare

50, 10, 30, 20, 40

Beginnen Sie mit einer unsortierten


Liste, und whlen Sie ein Pivotelement
aus (in diesem Fall 30).

20, 1030 50, 40

T eilen Sie die Liste so auf, dass die Elemente,


die kleiner als das Pivotelement sind, in
die linke Liste verschoben werden, und die
Elemente, die grer als das Pivotelement
sind, in die rechte Liste verschoben
werden. Zum Sortieren der linken Liste
whlen Sie dann ein Pivotelement aus
(hier 10). ZumSortieren der rechten Liste
whlen Sie ebenfalls ein Pivotelement
aus (hier 40).

- 10 20 30 - 40 50

10, 20, 30, 40, 50

In der linken Liste ist 20 grer als 10,


und in der rechten Liste ist 50 grer
als 40. Deshalb werden 20 und 50
in die rechte Liste verschoben. Dies
ergibt Listen mit nur einer Zahl, die alle
per Definition sortiert sind.
Alle kleinen sortierten Listen werden
zusammengefhrt und ergeben die
endgltige vollstndig sortierte Liste.

Bisher schien das grte Manko des QuickSort-Algorithmus der zustzliche Arbeitsspeicher
zu sein, der fr die Erstellung von separaten kleineren Listen bentigt wird. Es ist allerdings
nicht erforderlich, separate Listen zu erstellen. Mithilfe einer leicht vernderten Methode
kann das Array vor Ort partitioniert werden, wie aus folgendem Codebeispiel hervorgeht:
static int Partition (int[] numbers, int left,
int right, int pivotIndex)

80 | Lektion 3
{
int pivotValue = numbers[pivotIndex];
// move pivot element to the end
int temp = numbers[right];
numbers[right] = numbers[pivotIndex];
numbers[pivotIndex] = temp;
// newPivot stores the index of the first
// number bigger than pivot
int newPivot = left;
for (int i = left; i < right; i++)
{
if (numbers[i] <= pivotValue)
{
temp = numbers[newPivot];
numbers[newPivot] = numbers[i];
numbers[i] = temp;
newPivot++;
}
}

//move pivot element to its sorted position


temp = numbers[right];
numbers[right] = numbers[newPivot];
numbers[newPivot] = temp;

return newPivot;
}

Mit dieser Methode wird zuerst das Pivotelement an das Ende des Arrays verschoben.
Dann werden alle Elemente, die kleiner als oder gleich dem Pivotelement sind, an die
Vorderseite des Arrays verschoben. Abschlieend wird das Pivotelement genau vor dem
Element platziert, das grer als es selbst ist, wodurch das Array effektiv partitioniert wird.
Dieser Partitionierungsalgorithmus kann dann von QuickSort verwendet werden, um die
Liste aufzuteilen, das Problem weiter zu reduzieren und rekursiv zu lsen:
static int[] QuickSort(int[] numbers,
int left, int right)
{
if (right > left)
{
int pivotIndex = left + (right left) / 2;
//partition the array
pivotIndex = Partition(
numbers, left, right, pivotIndex);
//sort the left partition
QuickSort(

Allgemeine Grundlagen der Softwareentwicklung | 81

BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie
die gngigen
Sortieralgorithmen?
3.3

numbers, left, pivotIndex 1);


// sort the right partition
QuickSort(
numbers, pivotIndex + 1, right);
}
return numbers;
}

Aufgrund dieser Partitionierungsmethode ist der QuickSort-Algorithmus wesentlich


schneller als der BubbleSort-Algorithmus.

ZUSAMMENFASSUNG DER VERMITTELTEN KENNTNISSE


In dieser Lektion haben Sie Folgendes gelernt:
Die Anwendungslebenszyklus-Verwaltung (ALM) bezieht sich auf verschiedene
Aktivitten, die mit einem neuen Softwareprodukt zusammenhngen, angefangen
von seiner Entwicklung bis hin zur Produktreife und Stilllegung.
Bei Softwaretests wird die Software im Hinblick auf die festgelegten Anforderungen
geprft. Die Tests werden nach Abschluss der meisten Entwicklungsarbeiten durchgefhrt.
Datenstrukturen sind Methoden zum Organisieren und Speichern von Daten im
Computerspeicher. Die Art der Datenspeicherung beeinflusst die Art des Datenabrufs
und der Datenbearbeitung. Kenntnisse ber Datenstrukturen beinhalten nicht nur
Kenntnisse ber das Speichermuster, sondern auch ber die zum Erstellen, Aufrufen
und Bearbeiten der Datenstruktur verwendeten Methoden.
Ein Array ist eine Sammlung von Elementen des gleichen Datentyps, die in einem
zusammenhngenden Speicherbereich gespeichert und mit einem oder mehreren
Indizes adressiert werden knnen.
Eine Warteschlange ist eine Sammlung von Elementen, in der das erste der Sammlung
hinzugefgte Element als erstes wieder entfernt wird.
Ein Stapel ist eine Sammlung von Elementen, in der das letzte der Sammlung
hinzugefgte Element als erstes wieder entfernt wird.
Eine verknpfte Liste ist eine Sammlung von Knoten, die so angeordnet sind, dass
jeder Knoten eine Verknpfung zum nchsten Knoten in der Sequenz enthlt.
Der BubbleSort-Algorithmus verwendet eine Reihe von Vergleichs- und Austauschoperationen,
um die Elemente einer Liste in der richtigen Reihenfolge anzuordnen.
Der QuickSort-Algorithmus verwendet Partitionierungs- und Vergleichsoperationen,
um die Elemente einer Liste in der richtigen Reihenfolge anzuordnen.

Wissenstest
Lckentext
Ergnzen Sie die Lcken der folgenden Stze mit dem richtigen Wort oder den richtigen
Wrtern.
1. Bei ______-Tests wenden die Tester ihre Kenntnisse ber die innere Funktionsweise
des Systems an, um das System zu testen.
2. Bei jeder neuen Korrektur eines Programms fhren die Softwaretester in der Regel
eine Reihe von ______ aus, um sicherzustellen, dass die bereits geprfte Funktionalitt
weiterhin erhalten geblieben ist.
3. Der BubbleSort-Algorithmus verwendet eine Reihe von ______- und ______-Operationen,
um die Elemente einer Liste in der richtigen Reihenfolge anzuordnen.

82 | Lektion 3

4. Ein ______ ist eine Sammlung von Elementen, in der das letzte der Sammlung
hinzugefgte Element als erstes wieder entfernt wird.
5. ______ ist das Verfahren zur Bestimmung der genauen Geschftsanforderungen an
ein neues Softwaresystem.
6. Eine verknpfte Liste ist eine Sammlung von Knoten, die so angeordnet sind, dass
jeder Knoten eine(n) ____ zum nchsten Knoten in der Sequenz enthlt.
7. Mit der ______-Operation wird der Warteschlange ein Element hinzugefgt, whrend
mit der ______-Operation ein Element aus der Warteschlange entfernt wird.
8. Der QuickSort-Algorithmus verwendet ______- und Vergleichsoperationen, um die
Elemente einer Liste in der richtigen Reihenfolge anzuordnen.
9. Fr die Analyse des jeweiligen Bedarfs und die Formulierung von Anforderungen,
die vom Entwicklungsteam beachtet werden mssen, ist ein ______ zustndig.
10. Alpha- und Betatests werden im Rahmen von ______-Tests eines Systems
durchgefhrt.

Multiple-Choice
Kreisen Sie den Buchstaben ein, der der Antwort am besten entspricht.
1. Das Produkt, das Sie entwickeln, ist noch nicht fertig, aber Sie mchten es einem
greren Kundenkreis zu Feedback- und Testzwecken zur Verfgung stellen. Zu
welcher Teststufe zhlt diese Aktivitt?
a. Integrationstest
b. Systemtest
c. Akzeptanztest
d. Regressionstest
2. Die Tester einer Softwareanwendung haben Zugriff auf den Quellcode und mchten
Testflle entwickeln, um sicherzustellen, dass die Methoden die richtigen Werte
zurckgeben. Zu welcher Teststufe zhlt diese Aktivitt?
a. Integrationstest
b. Komponententest
c. Alphatest
d. Betatest
3. Bei welcher der folgenden Datenstrukturen ist ein direkter Zugriff auf alle Elemente
mglich?
a. Array
b. Stapel
c. Warteschlange
d. Verknpfte Liste
4. Welche der folgenden Aktivitten im Anwendungslebenszyklus umfasst das Entwickeln
einer ersten technischen Vorlage fr ein System durch einen Architekten?
a. Anforderungsanalyse
b. Entwurf
c. Entwicklung
d. Wartung
5. In Ihrer Anwendung verwenden Sie eine Warteschlangendatenstruktur zum Bearbeiten
von Informationen. Sie mchten wissen, welches Datenelement als Nchstes
verarbeitet wird, mchten dieses aber jetzt noch nicht verarbeiten. Welche der
folgenden Warteschlangenoperationen verwenden Sie?
a. Enqueue (In die Warteschlange einreihen)
b. Dequeue (Aus der Warteschlange entfernen)
c. Peek (Nachsehen)
d. Contains (Enthlt)

Einfhrung in die objektorientierte Programmierung | 83

6. Sie entwickeln ein Programm, bei dem Sie die Methodenaufrufe nachverfolgen
mssen. Sie knnen immer nur jeweils eine Methode aufrufen. Ein Methodenaufruf
kann jedoch wiederum andere Methoden aufrufen. Wenn eine Methode beendet wird,
bergibt sie die Kontrolle wieder an die aufrufende Methode. Welche Datenstruktur
sollten Sie verwenden, um diese Methodenaufrufe nachverfolgen zu knnen?
a. Warteschlange
b. Array
c. Verknpfte Liste
d. Stapel
7. Sie entwickeln ein Programm, das einen Auftragsprozessor simuliert. Hufig gehen
die Auftrge schneller ein, als sie verarbeitet werden knnen. In diesem Fall warten
die Auftrge in der Warteschlange auf ihre Verarbeitung. Sie mssen sicherstellen,
dass der Auftrag, der zuerst eingeht, auch als erster verarbeitet wird. Welche der
folgenden Datenstrukturen eignen sich am besten fr diese Anforderung?
a. Array
b. Warteschlange
c. Verknpfte Liste
d. Stapel
8. Sie schreiben folgenden Code in einem Programm:
int[] numbers = {2, 3, 1, 4};
numbers [2] = 4;

Wie sieht der Inhalt des Arrays aus, nachdem die zweite Anweisung ausgefhrt wurde?
a. {2, 4, 1, 4}
b. {2, 3, 4, 4}
c. {2, 4, 1, 2}
d. {4, 3, 1, 4}
9. Sie entwickeln ein Programm, das hufige Einfge- und Lschoperationen mit Daten
durchfhrt. Die Anforderung sieht auch vor, dass auf vorige und nchste Datenstze
zugegriffen werden soll, wenn der Benutzer auf die Schaltflche Zurck oder
Weiter klickt. Welche der folgenden Datenstrukturen eignen sich am besten fr Ihre
Anforderungen?
a. Array
b. Zyklisch verknpfte Liste
c. Verknpfte Liste
d. Doppelt verknpfte Liste
10. Sie entwickeln ein Programm, das hufige Einfge- und Lschoperationen mit Daten
durchfhrt. Auf die Datenelemente muss wie bei einem Stapel mit der LIFO (Last In
First Out)-Methode zugegriffen werden. Ihre Lsung soll so wenig Arbeitsspeicher
wie mglich belegen. Welche der folgenden Datenstrukturen eignen sich am besten
fr diese Anforderungen?
a. Array
b. Zyklisch verknpfte Liste
c. Verknpfte Liste
d. Doppelt verknpfte Liste

Kompetenztest
Szenario 3-1: Verwenden von Arrays
Sie schreiben ein Programm, das ein zweidimensionales Array verwendet. Das Array hat
vier Zeilen und fnf Spalten. Sie mchten das grte Element jeder Arrayzeile ausgeben.
Wie wrden Sie dieses Programm schreiben?

84 | Lektion 3

Szenario 3-2: Verwenden von Warteschlangen


Sie schreiben ein Programm, das zwei Warteschlangen verwendet. Die Daten in jeder
Warteschlange befinden sich bereits in aufsteigender Reihenfolge. Sie mssen die
Inhalte der zwei Warteschlangen so verarbeiten, dass die Ausgabe auf dem Bildschirm
insortierter Reihenfolge erfolgt. Wie wrden Sie dieses Programm schreiben?

Kenntnistest
Szenario 3-3: Verwenden von Stapeln
Sie schreiben ein Programm, das zwei Stapel verwendet. Die Daten in jedem Stapel
befinden sich bereits in absteigender Reihenfolge. Sie mssen die Inhalte beider Stapel
soverarbeiten, dass die Ausgabe auf dem Bildschirm in aufsteigender Reihenfolge erfolgt.
Wie wrden Sie dieses Programm schreiben?

Szenario 3-4: Verwenden verknpfter Listen


Sie schreiben ein Programm, das eine Liste von Produktnamen in einer verknpften
Liste speichert. Der Benutzer gibt einen Produktnamen ein, und Ihr Programm prft,
obdie verknpfte Liste diesen Produktnamen enthlt. Wie wrden Sie dieses Programm
schreiben?

Grundlegendes zu
Webanwendungen

LEKTION

THEMEN UND LERNZIELE DIESER LEKTION


Fertigkeiten/Konzepte

MTA-Prfungsziel

Nummer des
MTA-Prfungsziels

Grundlegendes zur
Grundlegendes zur
Webseitenentwicklung Webseitenentwicklung

4.1

Grundlegendes zur ASP.NET-


Grundlegendes zur
Webanwendungsentwicklung
Microsoft ASP.NET Webanwendungsentwicklung

4.2

Grundlegendes zum
Grundlegendes zum
IIS-Webhosting Webhosting

4.3

Grundlegendes zur
Grundlegendes zu
Webdienstentwicklung Webdiensten

4.4

S C H L S S E L B E G R I F F E
Cascading Stylesheets (CSS)

JavaScript

Web Service Description Language

Clientseitige Programmierung

Serverseitige Programmierung

(WSDL)

Clientseitige Zustandsverwaltung

Serverseitige Zustandsverwaltung

Webdienste

Hypertext Markup Language

Simple Object Access Protocol

Webhosting

(HTML)

(SOAP)

Website

Internetinformationsdienste (IIS)

Virtuelles Verzeichnis

Zustandsverwaltung

Sie sind Softwareentwickler fr ein groes Unternehmen. Sie mssen eine


Anwendung entwickeln, die ber ein Netzwerk, wie das World Wide Web, verwendet
werden kann. Die Anwendung wird auf einem Windows-Webserver bereitgestellt,
die Benutzer der Anwendung verwenden jedoch mehrere Betriebssysteme und
Webbrowser.

Grundlegendes zur Webseitenentwicklung

FAZIT

Eine Webseite ist ein Dokument, das ber das World Wide Web (WWW) bereitgestellt
wird und von einem Webbrowser angezeigt werden kann. Webseiten werden mit der
Hypertext Markup Language (HTML) erstellt und auf einem Webserver gespeichert.
Webbrowser laden die angeforderte HTML vom Webserver herunter und rendern sie
auf dem Bildschirm des Benutzers.
85

86 | Lektion 4

Das World Wide Web (auch WWW oder das Web genannt) ist ein System von miteinander
verbundenen Hypertext-Dokumenten und anderen Ressourcen (z.B. Bilder und Videos), auf
die ber das Internet zugegriffen werden kann. Mehrere Technologien arbeiten zusammen,
umdas WWW zu ermglichen. In diesem Abschnitt besprechen wir zwei dieser Technologien:
Hypertext Transfer Protocol (HTTP)
Hypertext Markup Language (HTML)
HTTP ist das Kommunikationsprotokoll, das dem World Wide Web zugrunde liegt. HTTP bietet
die gemeinsame Sprache, die Webserver und Webbrowser verwenden, um zu kommunizieren.
HTTP verwendet eine Uniform Resource Locator (URL) zur eindeutigen Identifizierung und
Adressierung jede Ressource im Internet. Eine URL ist im Wesentlichen eine Webadresse
und sieht wie folgt aus: http://www.microsoft.com/de/de/default.aspx. Jede URL beginnt
mit einem Protokoll. In diesem Beispiel ist das Protokoll HTTP. Zudem gibt es auch das
HTTPS-Protokoll (sicheres HTTP) fr sichere Anwendungen, bei denen Daten vor der
bertragung ber das Netzwerk verschlsselt werden mssen. Nach dem Protokoll ist der
nchste Teil einer URL die Adresse des Webservers (hier: www.microsoft.com), gefolgt
von der Adresse der Ressource innerhalb des Webservers (/de/de/) und schlielich der
angeforderten Ressource selbst (default.aspx). Alle Dokumente, Bilder, Videos und andere
Ressourcen im Web werden durch eine URL identifiziert.
Wenn ein Browser eine HTTP-Anforderung fr eine Webseite an einen Webserver sendet
(sowohl die Webseite als auch der Server werden durch eine URL identifiziert), bereitet
der Server eine HTTP-Antwort fr den Browser vor. Diese Antwort gibt den Inhalt und
das Layout der Webseite an.

HINWEIS

Die Begriffe Internet und das Web werden hufig synonym verwendet,
tatschlich unterscheiden sie sich aber und sollten nicht verwechselt werden. Das
Internet ist ein globales Datenkommunikationssystem, das eine Verbindung zwischen
Computern bietet. Im Gegensatz dazu ist das Web einer von mehreren Diensten im
Internet, der Benutzern erlaubt, auf verknpfte Ressourcen zuzugreifen.
Die Sprache, die der Webserver und Webbrowser verwenden, um eine Webseite
zubeschreiben, ist Hypertext Markup Language (HTML). HTML ist eine textbasierte
Sprache, die verschiedene Markup-Tags verwendet; diese Tags beschreiben, wie Inhalt
angezeigt wird. HTML ermglicht das Referenzieren von Bildern, Videos und anderen
Objekten in einer Datei, um Multimedia-Webseiten zu erstellen. HTML kann auch Skripts
(z.B. JavaScript) einbetten, die Auswirkungen auf das Verhalten von Webseiten haben,
und es kann verwendet werden, um Cascading Stylesheets (CSS) einzubeziehen, die die
Formatierung und das Layout des Inhalts einer Seite definieren. Der Webbrowser liest den
HTML-Code und gibt die Ergebnisse auf dem Bildschirm wieder.
Eine Webseite kann Hyperlinks zu anderen Ressourcen, z.B. Bilder und Videos, enthalten.
Jede dieser Ressourcen wird durch ihre eigene URL identifiziert. Zum vollstndigen
Rendern einer Seite sendet der Browser zustzliche HTTP-Anforderungen, um diese
Ressourcen abzurufen, und zeigt sie als Teil der Webseite an.
In den folgenden Abschnitten erfahren Sie mehr ber die verschiedenen Komponenten,
aus denen sich eine Webseite zusammensetzt, einschlielich HTML, CSS und JavaScript.

Grundlegendes zu HTML
Hypertext Markup Language (HTML) ist die Sprache, mit der Webserver und
Webbrowser eine Webseite beschreiben.
HTML soll eine Standardsprache fr das Beschreiben von Webseiten bieten, sodass
verschiedene Webbrowser diese Sprache verstehen und die entsprechende Seite anzeigen
knnen. HTML ist eine textbasierte Sprache, das heit, Sie knnen HTML-Seiten

Grundlegendes zu Webanwendungen | 87
HINWEIS

HTML ist textbasiert,


wenn es darum geht,
den Code zu schreiben.
HTML bietet Tags zum
Einbetten von Bildern,
Audio, Video und
vielen anderen Arten
von Multimedia- und
interaktivem Inhalt auf
einer Webseite.

HINWEIS

Beachten Sie in
diesem Beispiel, dass
das HTML-Dokument
nicht das Bild selbst
enthlt. Vielmehr gibt
das <img>-Tag die
URL des Bilds an, das
der Browser separat
herunterldt und als
Bestandteil der Seite
rendert.

mit jedem beliebigen Text-Editor schreiben und bearbeiten. Wenn HTML an einen
Webbrowser gesendet wird, wird der vollstndige Text der Seite gesendet. Tatschlich
knnen Sie bei den meisten Browsern den HTML-Quellcode einer Webseite anzeigen.
HTML besteht aus einem Satz von Tags (auch HTML-Elemente genannt), die die
Struktur und den Inhalt einer Seite definieren. Beispielsweise gibt das Tag <html>
denBeginn eines HTML-Dokuments an. HTML-Tags sind immer von spitzen Klammern
umgeben und werden immer paarweise verwendet. Insbesondere hat jedes Start-Tag
einentsprechendes End-Tag. End-Tags enthalten einen Schrgstrich, um sie als solche
zuidentifizieren. Beispielsweise gehrt zu <html> das End-Tag </html>.
Eine HTML-Seite hat zwei klar von einander abgegrenzte Teile: eine Kopfzeile und
einen Textkrper. Die Kopfzeile steht zwischen den Tags <head> und </head> und wird
verwendet, um einen Dokumenttitel und Links zu externen Elementen bereitzustellen, die
in der Seite verwendet werden knnen, wie CSS- und JavaScript-Dateien. Der Textkrper
steht zwischen den Tags <body> und </body> und wird verwendet, um die komplette
Struktur und den Inhalt der Seite im Webbrowser darzustellen.
Hier ist ein Beispiel eines HTML-Tags, das ein Bild anzeigt:
<img height="400px" width="400px"
alt="Mimas Cassini" src=
"http://upload.wikimedia.org/wikipedia/commons/b/bc/Mimas_Cassini.jpg"/>

Beachten Sie, dass das Tag <img> zustzliche Attribute angibt. Beispielsweise gibt das
src-Attribut den Speicherort der Bilddatei an, und die Attribute height und width geben an,
welche Abmessungen beim Rendern des Bilds in einem Browser verwendet werden mssen.
Betrachten Sie nun ein weiteres Beispiel fr ein HTML-Tag:
<a href="http://en.wikipedia.org/wiki/Mimas_(moon)">
Saturns Mond</a>

Hier ist <a> das Anker-Tag, das zum Erstellen von Hyperlinks auf einer Webseite
verwendet wird. Das mit diesem Tag verknpfte href-Attribut gibt die Ziel-URL an, und
der Text innerhalb des Anker-Tags wird als Link angezeigt.

HINWEIS

In dieser Lektion werden nicht alle HTML-Elemente behandelt. Wenn Sie mehr ber
diese Elemente erfahren mchten, suchen Sie nach HTML-Elemente auf MSDN.
In der folgenden bung werden die Schritte zum Erstellen eines HTML-Dokuments
veranschaulicht.
ARBEITEN MIT HTML
VORBEREITUNG. Fhren Sie zum Erstellen eines HTML-Dokuments folgende Aktionen aus:

1. ffnen Sie Visual Studio. Erstellen Sie ein neues Projekt basierend auf der Vorlage
Leere ASP.NET-Webanwendung. Nennen Sie das Projekt WorkingWithHTML und die
Projektmappe Lektion04.
2. Whlen Sie Projekt > Neues Element hinzufgen, und whlen Sie dann die Vorlage
HTML-Seite. Nennen Sie die Datei default.htm.
3. Ersetzen Sie den Standardcode in der HTML-Datei durch folgenden Code:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Saturns Mond</title>
</head>

88 | Lektion 4

<body>
<h1>Mimas Cassini</h1>
Mit dem Tag img wird das Bild eines
<a href="http://en.wikipedia.org/wiki/Mimas_(moon)">
Saturnmondes angezeigt</a>: <br />
<img height="400px" width="400px"
alt="Mimas Cassini"
src="http://goo.gl/3BeK"/>
</body>
</html>
4. Whlen Sie Debuggen > Debuggen starten (oder drcken Sie F5). Die default.htmSeite wird in einem Webbrowser geffnet. Das Ergebnis sollte etwa wie in Abbildung
4-1 aussehen, wo Sie die Tags <img> und <a> in Aktion sehen knnen.

Abbildung 4-1
Eine einfache HTML-Seite,
die ein Bild und einen
Hyperlink enthlt

Grundlegendes zu Cascading Stylesheets


Mit Cascading Stylesheets (CSS) knnen Sie die Stil- und Formatierungsinformationen
einer Webseite separat vom HTML-Code speichern. Durch diese Trennung lassen sich
Erscheinungsbild und Verhalten Ihrer Website leichter aktualisieren. Visual Studio
enthlt Tools zum Erstellen und Anzeigen Ihrer Stylesheets in einer Vorschau.
CSS ist eine Sprache, die Informationen zum Anzeigen einer Webseite beschreibt. Beim
Rendern von Webseiten in einem Browser gibt HTML an, was angezeigt wird, und die
Cascading Stylesheets (CSS) geben an, wie das Material angezeigt wird. Beispielsweise kann
HTML angeben, dass Ihr Dokument eine H1-berschrift mit einem bestimmten Text hat, und
CSS knnen die Schriftart und Farbe, die auf diese berschrift angewendet werden, festlegen.
CSS ermglicht Ihnen, das Layout einer Webseite vom Inhalt zu trennen. Durch diese
Trennung knnen Sie das eine ndern, ohne dass sich dies auf das andere auswirkt.

Grundlegendes zu Webanwendungen | 89

HINWEIS

Wenn es effektiv
angewendet wird, ist
CSS ein hervorragendes
Hilfsmittel, um fr
websitebergreifende
Einheitlichkeit und
bessere Verwaltbarkeit
zu sorgen.

Das Vermischen von Inhalt und Stil erschwert die Verwaltung einer Website.
Angenommen Sie mchten zum Beispiel die Farbe und Schriftart aller H1-berschriften
auf Ihrer Website ndern. Ein Ansatz wre, einen HTML-Editor zu ffnen und jede Datei
auf der Website zu bearbeiten, die den H1-Tag verwendet. Dies kann eine akzeptable
Lsung sein, wenn die Website nur ein oder zwei Seiten hat, aber was ist, wenn die
Website ber eine groe Anzahl von Seiten verfgt beispielsweise 50 oder 100? Stellen
Sie sich vor, Sie mssten jede Seite manuell ndern! Wenn solche nderungen hufig
angefordert werden, wird der Webentwicklungsprozess langweilig und fehleranfllig.
Wieknnen Sie denn schlielich sicherstellen, dass Sie keine H1-Tags bersehen?
Glcklicherweise knnen Sie mit CSS all diese Stilinformationen in einer separaten
Datei platzieren und diese Datei mit allen Seiten auf einer Website verbinden. Sobald
die CSS-Datei eingerichtet ist, knnen Sie jeden Stil (z.B. Farbe und Schriftart der
H1-berschriften) einfach durch ndern des Stils in der CSS-Datei ndern und diese
einzelne nderung wirkt sich auf alle Seiten auf der Website aus.

ENTWERFEN VON CASCADING STYLESHEETS


Die CSS-Sprache ist textbasiert und leicht zu lesen und zu verstehen. Es folgt ein Beispiel
fr eine HTML-Seite, die CSS-Stile definiert:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Grundlegendes zu CSS</title>
<style type="text/css">
body
{
font-family: Verdana;
font-size: 9pt;
}
div
{
color:Red;
}
.block
{
background-color: Yellow;
border-color: Blue;
border-width: thin;
border-style: outset;
font-family: Arial;
}
</style>
</head>
<body>
Beispieltextkrper <br />
<div>DIV-Beispieltext</div>
<div class="block">DIV-Beispieltext
mit Klasse block</div>
<span class="block">SPAN-Beispieltext
mit Klasse block</span>
</body>
</html>

90 | Lektion 4

Beachten Sie, dass die CSS-Definitionen innerhalb des <style>-Elements stehen mssen und
unter dem <head>-Element definiert sind. Diese bestimmten CSS definieren zwei Elementstile
und einen Klassenstil. Der erste Stil gilt fr das HTML-body-Element und gibt an, dass der
gesamte Text im body-Element die Schriftart Verdana in Schriftgre9 verwenden soll. Der
zweite Elementstil gibt an, dass der Text innerhalb des DIV-Elements in Rot geschrieben werden
soll. Schlielich wird eine Klasse namens block definiert. CSS-Klassendefinitionen haben als
Prfix einen Punkt (.). Die Inhalte jedes HTML-Elements, das diese Klasse verwendet, werden
mit gelbem Hintergrund und einem Rahmen angezeigt. Wenn Sie diese Seite in einem Browser
anzeigen, sollte sie wie in Abbildung 4-2 dargestellt aussehen.
Abbildung 4-2
Formatierung von HTML mit
Cascading Stylesheets

Beachten Sie in der Abbildung, dass der hervorgehobene Text als Ergebnis der
block-Klasse angezeigt wird. Die block-CSS-Klasse gibt jedoch nicht die Farbe des Textes
an. In der ersten Zeile des markierten Textes wird die block-Klasse auf das DIV-Element
angewendet. In der zweiten Zeile des markierten Textes wird die block-Klasse auf das
SPAN-Element angewendet. Da die block-Klasse auf einen DIV-Text angewendet wird,
wird der Farbstil des DIV-Elements im ersten Fall in das finale Rendering bernommen.
Im vorherigen Beispiel wurde die CSS-Datei innerhalb der HTML-Datei geschrieben.
Einsinnvollerer Ansatz ist, die CSS in eine eigene separate Datei zu schreiben und dann
die HTML-Datei mit dieser CSS-Datei zu verknpfen. Sie erfahren in der folgenden
bung, wie dies funktioniert.
ARBEITEN MIT CSS-DATEIEN
VORBEREITUNG. Fhren Sie folgende Schritte aus, um eine CSS-Datei zu schreiben und
sie mit einer HTML-Datei zu verknpfen:

1. Fgen Sie ein neues Projekt basierend auf der Vorlage Leere ASP.NET-Webanwendung
zur Lektion04-Projektmappe hinzu. Nennen Sie das Projekt UnderstandingCSS.
2. Whlen Sie Projekt > Neues Element hinzufgen. Whlen Sie die Stylesheet-Vorlage.
Benennen Sie die Datei Stile.css. Ersetzen Sie den Standardcode in der Datei durch
folgenden Code:
body
{
font-family: Verdana;
font-size: 9pt;
}
div
{
color:Red;
}

Grundlegendes zu Webanwendungen | 91
.block
{
background-color: Yellow;
border-color: Blue;
border-width: thin;
border-style: outset;
font-family: Arial;
}

3. Whlen Sie Projekt > Neues Element hinzufgen, und whlen Sie dann die Vorlage
HTML-Seite. Nennen Sie die Datei default.htm. Ersetzen Sie den Standardcode in der
Datei durch folgenden Code:
<!DOCTYPE html PUBLIC
"//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1
transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="STYLESHEET"
type="text/css" href="styles.css" />
<title>Grundlegendes zu CSS</title>
</head>
<body>
Beispieltextkrper <br />
<div>DIV-Beispieltext</div>
<div class="block">DIV-Beispieltext
mit Klasse block</div>
<span class="block">SPAN-Beispieltext
mit Klasse block</span>
</body>
</html>


HINWEIS

Wenn CSS in separaten


Dateien gespeichert
werden, ldt der
Browser des Benutzers
diese Dateien herunter
und speichert sie
lokal. Daher knnen
sie auf mehreren
Seiten verwendet
werden, ohne sie
erneut herunterladen
zu mssen. Dies
reduziert unntige
Datenbertragung.

4. Whlen Sie Debuggen > Debuggen starten (oder drcken Sie F5). Die default.htmSeite wird in einem Webbrowser geffnet, und das Ergebnis sollte hnlich aussehen
wie in Abbildung 4-2 (oben dargestellt).

Wie in der Beispielbung gezeigt, wird das HTML-<link>-Element verwendet, um eine


CSS-Datei mit einer HTML-Seite zu verknpfen:
<link rel="STYLESHEET"
type="text/css" href="styles.css" />

Das Element <link> befindet sich immer innerhalb des Elements <head>, und das href-Attribut
gibt die Adresse der zu verwendenden CSS-Datei an. Um mehrere Seiten mit der gleichen
CSS-Datei zu verknpfen, mssen Sie das Element <link> auf jede HTML-Seite setzen.
Visual Studio enthlt einen integrierten Stil-Designer, mit dem Sie neue CSS-Stile entwerfen
oder vorhandene ndern knnen. Wenn Sie eine CSS-Datei ffnen, sehen Sie ein neues Men
mit dem Namen Stile. ber dieses Men knnen Sie einen neuen Stil durch Auswahl
von Stile > Stilregel hinzufgen erstellen. Sie knnen auch den aktuell ausgewhlten Stil
ndern, indem Sie die Option Stile > Stil erstellen whlen. Durch diese Option wird das
Dialogfeld Formatvorlage ndern geffnet, wie in Abbildung 4-3 dargestellt.

92 | Lektion 4
Abbildung 4-3
Das Dialogfeld
Formatvorlage ndern

Grundlegendes zu JavaScript
JavaScript ist eine clientseitige Skriptsprache, die innerhalb von Webbrowsern
ausgefhrt wird. Mit ihr erstellte Webseiten knnen wesentlich interaktiver sein als
Webseiten, die ausschlielich mit HTML erstellt wurden. JavaScript wird in Millionen
von Webseiten verwendet und von allen modernen Webbrowsern untersttzt.
JavaScript wird verwendet, um Websites reaktionsschneller und Webseiten interaktiver
zu gestalten. JavaScript erreicht dies durch Ausfhren von Code auf dem Client
(Webbrowser) und durch Minimieren unntiger Roundtrips zum Webserver und zurck.
Nehmen wir ein Beispiel, in dem ein Benutzer persnliche Informationen auf einer
Webseite eingeben muss, wie Name, E-Mail-Adresse und Telefonnummer. Eine hufige
Anforderung ist die Durchfhrung einer Datenberprfung, um sicherzustellen, dass
die Eingabefelder nicht leer sind und die E-Mail-Adresse und Telefonnummer des
Benutzers in der gewnschten Form bereitgestellt wurde. Ohne JavaScript mssten
Sie das Formular an den Server senden, der eine Datenberprfung durchfhrt und die
Ergebnisse an den Client zurckgibt. Diese bermittlung von Informationen braucht
Zeit und beeintrchtigt die Benutzerfreundlichkeit. Eine JavaScript-Lsung kann jedoch
diese Art der Datenberprfung innerhalb des Browsers durchfhren, wobei eine bessere
Benutzererfahrung geboten wird.
Wie bereits erwhnt, wird JavaScript-Code lokal im Webbrowser (Client) und nicht
auf dem Webserver ausgefhrt. JavaScript wird daher auch manchmal als clientseitige
Skriptsprache bezeichnet, und Programmierung mit JavaScript wird als clientseitige
Programmierung bezeichnet.
Das Laufzeitverhalten der clientseitigen Codeausfhrung hngt vom Browser ab, der ihn
ausfhrt. Dieses Verhalten ist jedoch unabhngig von der Servertechnologie oder dem
Programmier-Framework. Fr JavaScript, das in einem Webbrowser ausgefhrt wird, spielt
es also keine Rolle, ob die Webseite von ASP.NET oder PHP generiert wurde, oder ob die
Seite von einem Windows-Webserver oder einem Linux-Webserver bereitgestellt wird.
JavaScript und die C#-Programmiersprache verwenden beide eine Syntax, die von der
Programmiersprache C beeinflusst wird. Dennoch sind JavaScript und C# in der Art
der Ausfhrung sehr unterschiedlich. JavaScript wird vom Webbrowser ausgefhrt,
undJavaScript-Code wird interpretiert anstatt kompiliert, wie im Fall von C#.

Grundlegendes zu Webanwendungen | 93

HINWEIS

Viele moderne Websites bieten eine hochgradig interaktive Erfahrung, die mit der von
Desktopanwendungen konkurriert. Solche Seiten knnen mit der Ajax-Programmierung
entwickelt werden. Ajax ist ein Krzel fr asynchrones JavaScript und XML. Ajax
setzt JavaScript ausgiebig ein, um reaktionsschnelle Webanwendungen zur Verfgung
zu stellen. Mit dem ASP.NET AJAX-Framework knnen Sie Ajax-Funktionalitt auf
ASP.NET-Webseiten implementieren.
Smtlicher JavaScript-Code muss innerhalb des <script>-Elements platziert werden.
Das <script>-Element wird in der Regel im <head>-Element platziert, obwohl dies nicht
erforderlich ist. Mehrere <script>-Elemente knnen auf einer einzigen Seite vorhanden
sein. Versuchen Sie die folgende bung, um JavaScript in Aktion zu sehen.
ARBEITEN MIT JAVASCRIPT
VORBEREITUNG. Fhren Sie die folgenden Aufgaben durch, um mit der Arbeit mit
JavaScript zu beginnen:

1. Fgen Sie ein neues Projekt basierend auf der Vorlage Leere ASP.NETWebanwendung zur Lektion04-Projektmappe hinzu. Nennen Sie das Projekt
UnderstandingJavaScript.
2. Whlen Sie Projekt > Neues Element hinzufgen, und whlen Sie dann die Vorlage
HTML-Seite. Nennen Sie die Datei default.htm. Ersetzen Sie den Standardcode in der
Datei durch folgenden Code:
<!DOCTYPE html PUBLIC
"//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1
transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Understanding JavaScript</title>
<script type="text/javascript"
language="javascript">
username = prompt("Please enter your name");
message = "Hello, " + username +
". Your name has ";
nameLen = username.length;
if (nameLen > 5)
message = message + "more than ";
else if (nameLen < 5)
message = message + "less than ";
else
message = message + "exactly ";
message = message + "5 characters.";
alert(message);
</script>
</head>
<body>
</body>
</html>

94 | Lektion 4

3. Whlen Sie Debuggen > Debuggen starten (oder drcken Sie F5). Die default.htmSeite wird in einem Webbrowser geffnet. Beachten Sie, dass der JavaScript-Code
Sie auffordert, Ihren Namen einzugeben. Nachdem Sie dies getan haben, zeigt
ein Dialogfeld eine Meldung basierend auf der Lnge Ihres Namens, wie in den
Abbildungen 4-4 und 4-5 gezeigt.

Abbildung 4-4
JavaScriptEingabeaufforderung

Abbildung 4-5
JavaScript-Dialogfeld

Wie bei CSS-Dateien knnen Sie auch Ihren JavaScript-Code in eine separate Datei setzen
und diese Datei mithilfe des script-Elements mit einer HTML-Datei verknpfen, wie
unten dargestellt:
<script src="SampleScript.js">
</script>
HINWEIS

Obwohl alle modernen


Browser JavaScript
untersttzen knnen
sie so festgelegt
werden, dass JavaScript
deaktiviert ist. Sie
knnen ein <noscript>Element verwenden,
um eine bestimmte
Meldung fr Benutzer
anzuzeigen, die sich
entscheiden, JavaScript
nicht auszufhren.

Hier enthlt die SampleScript.js-Datei smtlichen JavaScript-Code und das script-Element


ist ber das src-Attribut mit dieser Datei verknpft. JavaScript in einer externen Datei
zuspeichern bietet viele Vorteile:
Verbesserte Verwaltung: Wenn Sie den gleichen JavaScript-Code auf jeder Seite
einer Website verwenden, speichern Sie den Code auf einer zentralen Seite, anstatt
ihn auf jeder Seite zu wiederholen. Wenn es Zeit ist, den JavaScript-Code zu ndern,
mssen Sie den Code nur an einem Ort ndern.
Verbesserte Leistung: Durch Speichern des JavaScript-Codes in einer separaten
Datei verringert sich die Gre einer Webseite. Auerdem knnen Browser die
externe JavaScript-Datei herunterladen und zwischenspeichern, sodass sie nicht
erneut heruntergeladen wird, es sei denn, sie wird gendert.
Visual Studio enthlt vollstndige IntelliSense-Untersttzung fr JavaScript-Code. Sogar
ASP.NET-Steuerelemente, wie das TreeView-Steuerelement oder die Validierungssteuerelemente,
verwenden JavaScript wo mglich, um Inhalte dynamisch zu rendern.

Grundlegendes zur clientseitigen und serverseitigen Programmierung


Ob ein Programm clientseitig oder serverseitig ist, hngt davon ab, wo das
Programm letztendlich ausgefhrt wird.
Clientseitige Programmierung bezieht sich auf Programme, die vollstndig auf dem
lokalen Computer eines Benutzers ausgefhrt werden. Beispiele fr clientseitige
Programme sind die Windows Forms-Anwendung und JavaScript-Code, der in einem
Webbrowser ausgefhrt wird. Clientseitige Programme belegen keine Serverressourcen.
Serverseitige Programmierung wiederum bezieht sich auf Programme, die vollstndig
auf einem Server ausgefhrt werden und die Berechnungskapazitten des Servers nutzen.
Hier werden nur die Clientressourcen verwendet, die am tatschlichen Abrufen der
Verarbeitungsergebnisse vom Server beteiligt sind. Webanwendungen und Webdienste

Grundlegendes zu Webanwendungen | 95

sind Beispiele fr serverseitige Programmierung. Diese Art der Programmierung


verwendet eine serverseitige Technologie, wie ASP.NET, PHP oder Ruby on Rails.

BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie, wie
Sie HTML, JavaScript
und CSS fr die
Webseitenentwicklung
verwenden?
4.1

In letzter Zeit sind Hybridanwendungen, die sowohl client- als auch serverseitige
Programmierung verwenden, immer beliebter geworden. Beispielsweise knnen Sie
intelligente Clientanwendungen entwerfen, die lokal auf Clientcomputern ausgefhrt
werden, aber Webdienste verwenden, um bestimmte Aufgaben zu erledigen. Tatschlich
nutzen Ajax-Anwendungen eine Mischung aus serverseitiger Programmierung und
clientseitigem Code, um interaktive und reaktionsschnelle Webanwendungen zu erstellen.
Mit ASP.NET knnen Sie Anwendungen erstellen, die vollstndig auf dem Server ausgefhrt
werden, oder Hybrid-Ajax-Anwendungen, die schnelle, reaktionsfhige Benutzeroberflchen
bieten, whrend die meisten ihrer Daten auf dem Webserver gespeichert werden.

Grundlegendes zur ASP.NET-Webanwendungsentwicklung

FAZIT

ASP.NET ist der Teil des .NET-Framework, der es Ihnen ermglicht, programmierbare
Webformulare und Webdienste zu entwickeln. Wie bei jeder .NET Framework-Anwendung
knnen Sie ASP.NET-Anwendungen in einer beliebigen Sprache entwickeln, die mit der
.NET Common Language Runtime, einschlielich Visual Basic und C#, kompatibel ist.
Die ASP.NET-Infrastruktur besteht aus zwei Hauptteilen:
Einem Satz von Klassen und Schnittstellen, der die Kommunikation zwischen dem
Webbrowser und dem Webserver ermglicht. Diese Klassen sind im Namespace
System.Web organisiert.
Einem Laufzeitprozess, auch als ASP.NET-Arbeitsprozess bezeichnet (aspnet_wp.exe),
der die Webanforderung fr ASP.NET-Ressourcen verarbeitet.
Auf einer hheren Ebene wird die ASP.NET-Webanwendung durch eine Reihe von HTTPAnforderungen und Antwortnachrichten zwischen dem Clientbrowser und dem Webserver
ausgefhrt. Dieser Prozess geschieht wie folgt:
1. Der Benutzer fordert eine Ressource von einem Webserver durch Eingabe eine
URL in den Webbrowser an. Der Browser sendet eine HTTP-Anforderung an den
Zielwebserver.
2. Der Webserver analysiert die HTTP-Anforderung und sucht nach einem Prozess,
derdie Anforderung ausfhren kann.
3. Das Ergebnis der HTTP-Anforderung wird an den Clientbrowser in Form einer
HTTP-Antwort zurckgegeben.
4. Der Browser liest die HTTP-Antwort und rendert sie als Webseite fr den Benutzer.
Dieser Prozess wird in Abbildung 4-6 dargestellt.

Abbildung 4-6
Kommunikation zwischen
einem Client und einem
Webserver

HTTP-Anforderung
HTTP-Antwort

96 | Lektion 4

Als Entwickler sollten Sie wissen, was hinter den Kulissen passiert, wenn ein Webserver
eine Anforderung fr eine ASP.NET-Seite ausfhrt. Die folgenden Schritte beschreiben
diesen Prozess:
1. Wenn der Internetinformationsdienst eine HTTP-Anforderung empfngt, verwendet
erdie Dateinamenerweiterung, um zu bestimmen, welches Internetserver-API-Programm
ausgefhrt werden soll, um die Anforderung zu verarbeiten. Wenn die Anforderung fr
eine ASP.NET-Seite ist, wird sie an die ISAPI-DLL weitergegeben, die Anforderungen
fr ASP.NET-Seiten verarbeiten kann, nmlich aspnet_isapi.dll.
2. Der aspnet_isapi.dll-Prozess bergibt die Anforderung an den ASP.NETArbeitsprozess (aspnet_wp.exe), der die Anforderung erfllt.
3. Der ASP.NET-Arbeitsprozess kompiliert die ASPX-Datei in eine Assembly und weist
Common Language Runtime (CLR) an, die Assembly auszufhren.
4. Wenn die Assembly ausgefhrt wird, nutzt sie die Dienste der verschiedenen Klassen
in der Klassenbibliothek von .NET Framework, um die Aufgaben auszufhren und
Antwortmeldungen fr den anfordernden Client zu generieren.
5. Der ASP.NET-Arbeitsprozess sammelt die Antworten, die durch die Ausfhrung
derWebseite generiert werden, erstellt ein Antwortpaket und bergibt es an den
aspnet_isapi.dll-Prozess.
6. Aspnet_isapi.dll leitet das Antwortpaket an IIS weiter, der im Gegenzug die
Antwort an den anfordernden Clientrechner weiterleitet.
Vor der Ausfhrung wird jede ASP.NET-Seite in eine Klasse umgewandelt. Diese Klasse leitet
ihre meisten Funktionalitten von der System.Web.UI.Page-Klasse ab. Die Klasse Page
bietet mehrere wichtige Eigenschaften, wie z.B. Request, Response, Session und Server.

HINWEIS

Die Page-Klasse bietet mehrere wichtige Methoden und Eigenschaften, die steuern,
wie eine Seitenanforderung verarbeitet wird. Die vollstndige Liste der Methoden und
Eigenschaften finden Sie auf http://msdn.microsoft.com/de-de/library/system.web.
ui.page.aspx.

Grundlegendes zum Lebenszyklus und Ereignismodell der ASP.NET-Seite


Whrend der Ausfhrung durchluft eine ASP.NET-Seite viele verschiedene Phasen
der Verarbeitung. Jede dieser Phasen umfasst bestimmte Verarbeitungsschritte, wie
Initialisierung, Laden, Ausfhren des Ereignishandler Codes und Rendern.
Whrend eine Seite ausgefhrt wird, durchluft sie verschiedene Verarbeitungsphasen.
Die Seite lst auch einige Ereignisse aus, an die Sie einen Ereignishandler anfgen
knnen, um in den verschiedenen Phasen der Seitenverarbeitung benutzerdefinierten
Code auszufhren. In der Tat bentigen ASP.NET-Entwickler ein gutes Verstndnis des
Lebenszyklus der Seite, sodass sie Code schreiben knnen, der in genau der gewnschten
Phase der Seitenverarbeitung ausgefhrt wird.
Tabelle 4.1 enthlt die verschiedenen Lebenszyklusphasen und ihre zugeordneten Ereignisse.

HINWEIS

In einem typischen Kontaktformular knnen Sie Informationen eingeben und eine


Schaltflche zum Absenden drcken. Wenn Sie diese Seite absenden, kann sie die
bermittelten Daten verwenden, um einige Aktionen durchzufhren, z.B. das Speichern
der Informationen in einer Datenbank oder das Senden einer E-Mail. In vielen Fllen
wird die erste Seite mit einer Besttigung der Formularbermittlung erneut angezeigt. Ein
Postback tritt auf, wenn die Informationen auf der gleichen Webseite fr die Verarbeitung
bereitgestellt werden. Ein Postback ist anders als das erste Laden der Seite, da die Seite
zustzliche Informationen (z.B. Formulardaten) als Teil des Postbacks erhlt.

Grundlegendes zu Webanwendungen | 97
Tabelle 4-1
Wichtige Phasen im Lebenszyklus der ASP.NET-Seite

Phase

Bedeutung

Zugeordnete Ereignisse

Seitenanforderung

 enn eine Anforderung fr eine Seite empfangen wird, beginnt


W
der Lebenszyklus der Seite. Zu diesem Zeitpunkt entscheidet
ASP.NET, ob die Seite einfach aus dem Cache bereitgestellt werden
kann oder ob sie analysiert und kompiliert werden muss.

Start

Die Startphase umfasst das Ermitteln, ob die Anforderung


ein Postback oder eine neue Anforderung ist. Mehrere
Seiteneigenschaften, wie Request, Response, IsPostBack und
UICulture, werden in dieser Phase festgelegt.

PreInit

Initialisierung

 hrend der Initialisierungsphase werden alle Steuerelemente


W
auf der Seite initialisiert und zur Verfgung gestellt. Ein
Ereignishandler fr das Init-Ereignis ist der beste Ort fr Code,
der vor der Weiterverarbeitung der Seite ausgefhrt werden soll.

Init

Laden

 enn die Anforderung ein Postback ist, werden whrend der


W
Ladephase die Steuerelementeigenschaften mit Informationen
vom Anzeigezustand und vom Steuerzustand wiederhergestellt.
Eine Methode, die das Load-Ereignis behandelt, ist der beste Ort
zum Speichern von Initialisierungscode fr alle Steuerelemente,
die speziell fr diese Seite sind.

Load

PostbackEreignishandling

 enn die Anforderung ein Postback ist, werden die


W
Ereignishandler fr das Steuerelement in dieser Phase
aufgerufen. Die Eingabewerte werden dann berprft, und die
IsValid-Eigenschaft fr die Page-Klasse wird festgelegt.

Prerendering

 iese Phase signalisiert, dass die Seite kurz davor steht, ihren
D
Inhalt zu rendern. Ein Ereignishandler fr das PreRenderEreignis ist die letzte Mglichkeit, die Ausgabe der Seite zu
ndern, bevor sie an den Client gesendet wird.

Rendering

In dieser Phase ruft die Seite die Render-Methode fr jedes


Steuerelement auf und erstellt die Antwort, die an den
Webbrowser gesendet wird.

Entladen

 hrend der Entladephase wird die Antwort zum Client


W
gesendet und die Seitenbereinigung durchgefhrt. Im Zuge
dieser Bereinigung werden die Seiteneigenschaften, wie
Request und Response, verworfen.

PreRender

Unload

Wenn Sie ein Ereignis verarbeiten mchten, mssen Sie Code schreiben, der eine Methode
zum Verarbeiten des Ereignisses (auch Ereignishandler genannt) mit dem Ereignis
registriert. Dies geschieht in der Regel mit dem allgemeinen Ereignisregistrierungsmuster,
das im .NET Framework verwendet wird:
object.event += new EventHandler(eventhandler);
Ersetzen Sie hier object mit dem Namen des Objekts, das das Ereignis verfgbar macht,
event mit dem Namen des Ereignisses und eventhandler mit dem Namen der Methode, die
das Ereignis behandelt.
Beachten Sie jedoch, dass ASP.NET sechs spezielle Methoden bereitstellt, die
standardmig als Ereignishandler erkannt werden und den oben genannten
Registrierungscode nicht bentigen. Hierbei handelt es sich um die speziell benannten
Methoden Page_Init Page_Load, Page_DataBind, Page_PreRender und Page_Unload.
Diese Methoden werden als Ereignishandler fr die entsprechenden Ereignisse
behandelt, die von der Klasse Page verfgbar gemacht werden. Diese automatische
Ereignisverknpfung wird vom AutoEventWireup-Attribut der @Page-Richtlinie gesteuert.
Standardmig ist der Wert dieses Attributs true, was bedeutet, dass diese speziell
benannten Methoden mit den entsprechenden Ereignissen automatisch verknpft sind.

98 | Lektion 4

GRUNDLEGENDES ZUM LEBENSZYKLUS EINER ASP.NET-SEITE


VORBEREITUNG. Fhren Sie die folgenden Aktionen durch, um zu sehen, wie
verschiedene Ereignisse der Klasse Page ausgefhrt werden:


1. Erstellen Sie ein neues Projekt basierend auf der Vorlage Leere ASP.NETWebanwendung zur Lektion04-Projektmappe. Nennen Sie das Projekt PageEvents.
2. Whlen Sie Projekt > Neues Element hinzufgen. Whlen Sie die Vorlage
Webformular. Nennen Sie die Datei WebForm1.aspx.
3. Stellen Sie im HTML-Markup der Seite (WebForm1.aspx) sicher, dass das
AutoEventWireup-Attribut fr die @Page-Richtlinie auf true festgelegt ist:
<%@ Page Language="C#" AutoEventWireup="true"
CodeBehind="WebForm1.aspx.cs"
Inherits="PageEvents.WebForm1" %>
4. Klicken Sie mit der rechten Maustaste in das Codefenster, und whlen Sie Code
anzeigen im Kontextmen, um zur Codeansicht zu wechseln. Ersetzen Sie den Code in
der CodeBehind-Datei (WebForm1.aspx.cs) mit Folgendem:
using System;
namespace PageEvents
{
public partial class WebForm1
: System.Web.UI.Page
{
protected void Page_Load
(object sender, EventArgs e)
{
Response.Write
("Meldung von Page_Load. <br/>");
}
protected void Page_Init
(object sender, EventArgs e)
{
Response.Write
("Meldung von Page_Init. <br/>");
}
protected void Page_PreRender
(object sender, EventArgs e)
{
Response.Write
("Meldung von Page_PreRender. <br/>");
}
protected void Page_PreInit
(object sender, EventArgs e)
{
Response.Write
("Meldung von Page_PreInit. <br/>");
}
}
}

Grundlegendes zu Webanwendungen | 99

5. Whlen Sie Debuggen > Debuggen starten (oder drcken Sie F5). Die Seite default.
htm wird in einem Webbrowser geffnet, wie in Abbildung 4-7 gezeigt.

Abbildung 4-7
Webformular, das
die Reihenfolge der
Ereignisausfhrung fr eine
ASP.NET-Seite anzeigt

Beachten Sie in der Beispielbung, dass die Zeichen <% und %> verwendet werden,
um Codeblcke in das HTML-Markup der Seite einzubetten. Der Code in diesen
eingebetteten Blcken wird whrend der Renderphase der Seite ausgefhrt. Innerhalb
der eingebetteten Codeblcke wird die Syntax <%=expression> verwendet, um einen
Ausdruck aufzulsen und seinen Wert in den Block zurckzugeben. Betrachten Sie
beispielsweise den folgenden Codeblock:
<i><% = DateTime.Now.ToShortDateString() %></i>

Bei der Ausfhrung zeigt dieser Code das aktuelle Datum in Kursiv an:
12/01/2010
Die @Page-Direktive gibt verschiedene Attribute an, die steuern, wie ASP.NET eine Seite
rendert. In dieser bung geben Attribute der @Page-Direktive zum Beispiel Folgendes an:
C# ist die Programmiersprache fr diese Webseite (Language="C#")
Die Ereignisse der Seite sind automatisch verknpft (AutoEventWireup=true)
Der Name der Codedatei, die die der Seite zugeordnete Klasse enthlt
(CodeBehind="WebForm1.aspx.cs")
Der Klassenname fr die zu vererbende Seite (Inherits="PageEvents.WebForm1")

Grundlegendes zur Zustandsverwaltung


Die Zustandsverwaltung ist aufgrund des unverbundenen Charakters von HTTP
ein wichtiges Thema fr Webanwendungen. Es gibt clientseitige und serverseitige
Techniken fr die Zustandsverwaltung.
Die Zustandsverwaltung ist der Prozess, bei dem der Status fr eine Webseite ber
Roundtrips hinweg beibehalten wird. Die Werte der Variablen und Steuerelementen bilden
zusammen den Status einer Webseite.
ASP.NET bietet verschiedene Techniken fr den Erhalt von Zustandsinformationen ber
Seiten-Postbacks hinweg. Diese Techniken knnen breit kategorisiert werden, entweder
als clientseitig oder serverseitig, je nachdem, wo die Ressourcen verbraucht werden.

100 | Lektion 4

EINFHRUNG IN CLIENTSEITIGE ZUSTANDSVERWALTUNG


Die clientseitige Zustandsverwaltung nutzt HTML-Code und die Fhigkeiten des
Webbrowsers, um Zustandsinformationen auf dem Clientcomputer zu speichern. Die
folgenden Techniken werden zum Speichern von Informationen auf der Clientseite
verwendet:
Verwenden von Abfragezeichenfolgen: Hier wird der Zustand beibehalten, indem
die Daten als ein Satz von Schlssel-Wert-Paaren in den Abfragezeichenfolgeteil
einer Seiten-URL gesetzt werden. Beispiel: In der folgenden URL sind ein Schlssel
(q) und sein Wert (television) in der Abfragezeichenfolge eingebettet: http://
www.bing.com/search?q=television. Zum Abrufen des Werts des Schlssels in einer
ASP.NET-Seite verwenden Sie den Ausdruck Request.QueryString[q]. QueryString
ist eine Eigenschaft des Request-Objekts; hiermit wird die Sammlung aller Variablen
der Abfragezeichenfolge abgerufen.
Cookies: Cookies sind kleine Informationspakete, die ein Webbrowser lokal auf
dem Computer des Benutzers speichert. Cookies werden hufig zum Speichern von
Benutzereinstellungen und Warenkorbinhalten verwendet und um den Benutzern eine
personalisierte Browsingerfahrung bei nachfolgenden Besuchen einer Webseite zu
bieten. Die HttpCookie-Klasse stellt einen Cookie in Ihrem Code dar. Der folgende
Code zeigt, wie ein Cookie auf einem Clientcomputer gesetzt wird:
HttpCookie cookie =
new HttpCookie("Name", "Bob");
cookie.Expires = DateTime.Now.AddMinutes(10);
Response.Cookies.Add(cookie);

In hnlicher Weise veranschaulicht das folgende Codestck, wie ein Cookie gelesen
wird:
if (Request.Cookies["Name"] != null)
{
name = Request.Cookies["Name"].Value;
}

Ausgeblendete Felder: Ausgeblendete Felder enthalten Informationen, die nicht


auf einer Webseite angezeigt werden, aber zum HTML-Code der Seite gehren.
Ausgeblendete Felder knnen mithilfe des HTML-Elements <input type=hidden>
erstellt werden. Das ASP.NET-HTML-Serversteuerelement HtmlInputHidden ist
diesem HTML-Element ebenfalls zugeordnet.
ViewState: ViewState ist der Mechanismus, den ASP.NET verwendet, um den
Zustand von Steuerelementen ber Seiten-Postbacks hinweg beizubehalten. Wenn
ASP.NET eine Seite ausfhrt, werden die Werte aller Nicht-Postback-Steuerelemente,
die im Code gendert werden, gesammelt und in einer einzelnen, codierten
Zeichenfolge formatiert. Diese Zeichenfolge wird in einem ausgeblendeten Feld
in einem Steuerelement namens __VIEWSTATE gespeichert. Standardmig ist
ViewState in einer ASP.NET-Anwendung aktiviert. Sie knnen ViewState auf
der Ebene eines Steuerelements deaktivieren, indem Sie die EnableViewStateEigenschaft des Steuerelements auf false festlegen:
<asp:GridView ID="GridView1"
runat="server" EnableViewState="false" />

Sie knnen ViewState zudem auf der Seitenebene deaktivieren, indem Sie das Attribut
EnableViewState der Direktive Page auf false setzen:
<%@ Page EnableViewState="false" %>

Schlielich knnen Sie ViewState auf Anwendungsebene deaktivieren, indem Sie der
Datei web.config die folgende Zeile hinzufgen:
<pages enableViewState="false" />

Grundlegendes zu Webanwendungen | 101

EINFHRUNG IN SERVERSEITIGE ZUSTANDSVERWALTUNG


Die serverseitige Zustandsverwaltung speichert Zustandsinformationen mithilfe von
Serverressourcen. Bei Verwendung der serverseitigen Techniken ist es nicht mglich, dass ein
Benutzer versucht, den clientseitigen Code zu hacken oder die Sitzungsdaten zu lesen. Wenn
Sitzungsinformationen auf einem Server gespeichert und verarbeitet werden, erhht das jedoch
die Serverlast und erfordert zustzliche Serverressourcen, um die Webseiten bereitzustellen.
ASP.NET untersttzt die serverseitige Zustandsverwaltung auf zwei Ebenen:
Sitzungszustand: Eine ASP.NET-Anwendung erstellt eine eindeutige Sitzung
fr jeden Benutzer, der eine Anforderung an die Anwendung sendet. ASP.NET
identifiziert jede dieser Sitzungen deutlich durch Senden einer eindeutigen SessionId
an die anfordernde URL. Diese SessionId wird als Cookie bermittelt oder in die
URL eingebettet, abhngig von der Konfiguration der Anwendung. Die Fhigkeit
zur eindeutigen Identifizierung und Verweisung von Anforderungen kann verwendet
werden, um sitzungsspezifische Daten zu speichern, die auch als der Sitzungszustand
der Webanwendung bekannt sind. Ein typisches Beispiel des Sitzungszustands ist das
Speichern von Warenkorbinhalten fr Benutzer, whrend sie einen webbasierten Store
durchsuchen.

HINWEIS

Der Sitzungszustand kann fr die Speicherung auf einem anderen Server oder einem SQLServer konfiguriert werden. Dies ist ntzlich, wenn die Anforderung eines Benutzers von einem
der vielen Server in einer Webfarm verarbeitet werden kann. Eine Webfarm ist eine Sammlung
von Webservern, die gemeinsam verwendet werden, um eine Website bereitzustellen.
Webfarmen sind notwendig, um Verkehr auf populren Websites zu untersttzen.
Anwendungszustand: Mit dem Anwendungszustand werden Daten gespeichert, die in
der gesamten Anwendung verwendet werden. Auf den Anwendungszustand kann ganz
einfach ber die Eigenschaft Application der Klasse Page zugegriffen werden.
Diese Eigenschaft ermglicht den Zugriff auf das HttpApplicationState-Objekt, das den
Anwendungsstatus als eine Sammlung von Schlssel-Wert-Paaren speichert.
In der folgenden bung wird die Verwendung des Sitzungszustands veranschaulicht.
Diese bung beinhaltet zwei Webformulare. Das WebForm1.aspx ruft einen
Benutzernamen ab und speichert ihn im Sitzungszustand. Das Formular leitet dann den
Benutzer an das WebForm2.aspx weiter, das den Benutzernamen aus der Sitzung abruft.
VERWENDUNG DES SITZUNGSZUSTANDS
VORBEREITUNG. Fhren Sie die folgenden Schritte aus, um den Sitzungszustand
zuverwenden:


1. Fgen Sie ein neues Projekt basierend auf der Vorlage Leere ASP.NET-Webanwendung
zur Lektion04-Projektmappe hinzu. Nennen Sie das Projekt UsingSessionState.
2. Whlen Sie Projekt > Neues Element hinzufgen. Whlen Sie die Vorlage
Webformular. Nennen Sie die Datei WebForm1.aspx.
3. ndern Sie das HTML-Markup der Datei WebForm1.aspx wie folgt:
<%@ Page Language="C#" AutoEventWireup="true"
CodeBehind="WebForm1.aspx.cs"
Inherits="UsingSessionState.WebForm1" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>

102 | Lektion 4

<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server"
Text="Geben Sie bitte Ihren Namen ein:" /><br />
<asp:TextBox ID="TextBox1" runat="server" />
<br /><br />
<asp:Button ID="Button1" runat="server"
Text="Absenden" onclick="Button1_Click" />
</div>
</form>
</body>
</html>
4. Klicken Sie mit der rechten Maustaste in das Codefenster, und whlen Sie Code
anzeigen aus dem Kontextmen, um zur CodeBehind-Datei (WebForm1.aspx.cs)
zuwechseln. Ersetzen Sie den Code in dieser Datei durch folgenden Code:
using System;
namespace UsingSessionState
{
public partial class WebForm1
: System.Web.UI.Page
{
protected void Page_Load
(object sender, EventArgs e)
{
if (Session["Name"] != null)
Response.Redirect("WebForm2.aspx");
}
protected void Button1_Click
(object sender, EventArgs e)
{
Session.Add("Name", TextBox1.Text);
Response.Redirect("WebForm2.aspx");
}
}
}
5. Fgen Sie dem Projekt ein neues Webformular (WebForm2.aspx) hinzu. ndern Sie das
Markup der Seite wie folgt:
<%@ Page Language="C#" AutoEventWireup="true"
CodeBehind="WebForm2.aspx.cs"
Inherits="UsingSessionState.WebForm2" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>

Grundlegendes zu Webanwendungen | 103

</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" /> <br />
<asp:Button ID="Button1" runat="server"
Text="Clear Session"
onclick="Button1_Click" />
</div>
</form>
</body>
</html>
6. ndern Sie den Code in der CodeBehind-Datei (WebForm2.aspx.cs) fr das Formular
so, dass er wie folgt lautet:
using System;
namespace UsingSessionState
{
public partial class WebForm2
: System.Web.UI.Page
{
protected void Page_Load(
object sender, EventArgs e)
{
if (Session["Name"] != null)
Label1.Text = String.Format(
"Welcome, {0}", Session["Name"]);
else
Response.Redirect("WebForm1.aspx");
}
protected void Button1_Click(
object sender, EventArgs e)
{
Session.Remove("Name");
Response.Redirect("WebForm1.aspx");
}
}
}
7. Whlen Sie Debuggen > Debuggen starten (oder drcken Sie F5). Die Seite
WebForm1.aspx wird in einem Webbrowser geffnet, wie in Abbildung 4-8 gezeigt.
Geben Sie einen Namen ein, und klicken Sie auf die Schaltflche Absenden. Diese
Seite speichert den eingegebenen Namen im Sitzungszustand.

104 | Lektion 4
Abbildung 4-8
Diese Seite speichert den
eingegebenen Namen im
Sitzungszustand.

BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie die Grundlagen
der Microsoft ASP.NETWebanwendungsentwicklung?
4.2

8. Als Nchstes werden Sie an WebForm2.aspx weitergeleitet, wie in Abbildung 4-9


dargestellt. WebForm2.aspx ruft den Benutzernamen aus dem Sitzungszustand ab.
Versuchen Sie, im gleichen Browserfenster (damit Sie in der gleichen Sitzung sind) auf
WebForm1.aspx zuzugreifen. Beachten Sie, dass, solange die Sitzung einen Eintrag
fr den Namen enthlt, Sie an WebForm2.aspx weitergeleitet werden. Klicken Sie
auf die Schaltflche Sitzungsinhalt lschen. Dies lscht die Sitzung und bertrgt Sie
an WebForm1.aspx.

Abbildung 4-9
Dieser Seite ruft den
angezeigten Namen vom
Sitzungszustand ab.

Grundlegendes zum IIS-Webhosting


Webhosting beinhaltet das Einrichten eines Webservers mit korrekten Codedateien und
Einstellungen, damit Remotebenutzer erfolgreich auf eine Webanwendung zugreifen knnen.

FAZIT

ASP.NET-Anwendungen mssen auf einem Internetinformationsdienste (IIS)-Webserver


bereitgestellt werden. IIS ist ein wichtiger Bestandteil der Windows Server-Betriebssysteme
und bietet Funktionen zum Hosten von Websites.
Das Bereitstellen einer ASP.NET-Anwendung ist unkompliziert, da ASP.NET die
xcopy-Bereitstellung ermglicht. Das heit, alles, was Sie tun mssen, um eine
ASP.NET-Website auf einem Webserver bereitzustellen, ist, die Dateien an die richtigen
Speicherorte zu kopieren. Sie knnen diese Dateien mit dem Windows-xcopy-Befehl oder
einer File Transfer Protocol(FTP)-Anwendung kopieren.

HINWEIS

Fr einige komplexe Webanwendungen mssen Sie unter Umstnden DLL-Dateien fr


den globalen Assemblycache (GAC) bereitstellen. In solchen Situationen mssen Sie
mglicherweise ein Windows Installer-Paket fr die Bereitstellung erstellen, anstatt
xcopy oder FTP zu verwenden.

Grundlegendes zu Webanwendungen | 105

Grundlegendes zu IIS
Internetinformationsdienste (IIS) ist ein Webserver zum Hosting von
Webanwendungen auf dem Windows-Betriebssystem. Ein IIS-Server verwendet als
Konzepte Sites, Anwendungen und virtuelle Verzeichnisse.
Sie knnen IIS verwenden, um mehrere Websites zu hosten und Informationen mit
Benutzern ber das Internet oder ein Intranet auszutauschen. IIS verwendet eine
hierarchische Beziehung zwischen Websites, Anwendungen und virtuellen Verzeichnissen
als grundlegenden Baustein fr das Hosting von Onlineinhalten.
IIS kann mit dem IIS-Manager-Tool verwaltet werden, was Teil des WindowsBetriebssystems ist. Das IIS-Manager-Tool, wie in Abbildung 4-10 gezeigt, bietet eine
grafische Benutzeroberflche zum Konfigurieren von Websites, Anwendungen und virtuellen
Verzeichnissen. Der Screenshot in Abbildung 4-10 ist von einem Computer, der Windows7
ausfhrt. Die Benutzeroberflche des IIS-Managers unterscheidet sich unter Windows XP.
Abbildung 4-10
Internetinformationsdienste
(IIS)-Manager-Schnittstelle
auf einem Computer unter
Windows7

Erstellen von virtuellen Verzeichnissen und Websites


Eine Website ist ein Container mit Anwendungen und virtuellen Verzeichnissen.
Ein virtuelles Verzeichnis ist ein Alias, der einem physischen Verzeichnis auf dem
Webserver zugeordnet wird.
Eine Website ist ein Container mit Anwendungen und virtuellen Verzeichnissen, auf den
mit einer Webadresse zugegriffen werden kann. Die URL www.northwind.com kann zum
Beispiel auf eine Website verweisen, die viele virtuelle Verzeichnisse hat, wie Bestellungen
und Konten, auf die jeweils in Verbindung mit der Websiteadresse zugegriffen werden kann
zum Beispiel ber www.northwind.com/bestellungen und www.northwind.com/konto.
Ein Webserver gibt niemals die tatschliche physische Adresse und den Speicherort der
Dateien fr die Auenwelt bekannt. Stattdessen verwendet er ein System der Aliase, die
den physikalischen Verzeichnissen zugeordnet werden. Diese Aliase werden auch als
virtuelle Verzeichnisse bezeichnet. Die virtuellen Verzeichnisse werden Teil der URL, wie

106 | Lektion 4

im vorherigen Beispiel gezeigt. Wenn IIS eine Anforderung fr eine solche URL erhlt,
ordnet er das virtuelle Verzeichnis dem physischen Speicherort der Dateien zu. In der
folgenden bung wird das Erstellen eines virtuellen Verzeichnisses veranschaulicht.
ERSTELLEN EINES VIRTUELLEN VERZEICHNISSES
VORBEREITUNG. Um ein virtuelles Verzeichnis mit dem IIS-Manager zu erstellen, fhren
Sie die folgenden Schritte aus:
1. ffnen Sie den IIS-Manager. Zum ffnen des IIS-Managers in Windows7 geben
Sie IIS im Men Start ein, und klicken Sie dann auf die Verknpfung Internet
Information Service (IIS) Manager. Fr den Zugriff auf den IIS-Manager in Windows
XP gehen Sie zu Start > Ausfhren, geben Sie Inetmgr ein, und klicken Sie auf die
Schaltflche OK.
2. Erweitern Sie die Knoten auf der linken Seite (siehe Abbildung 4-10), und whlen Sie
den Knoten Default Web Site.
3. Klicken Sie mit der rechten Maustaste auf den Knoten Default Web Site, und whlen
Sie die Option Virtuelles Verzeichnis hinzufgen aus dem Kontextmen. In Windows
XP lautet der Befehl Neu > Virtuelles Verzeichnis. An diesem Punkt wird ein Assistent
zum Erstellen von virtuellen Verzeichnissen auf Ihrem Bildschirm angezeigt.
4. Geben Sie im Dialogfeld Virtuelles Verzeichnis hinzufgen einen Alias und physischen
Pfad an, wie in Abbildung 4-11 dargestellt, und klicken Sie dann auf OK.
Abbildung 4-11
Dialogfeld Virtuelles
Verzeichnis hinzufgen

Bereitstellen von Webanwendungen


Die Bereitstellung von einfachen Websites erfolgt durch Kopieren der Dateien an
den richtigen Speicherort. Um eine komplexe Website zu installieren, mssen Sie
mglicherweise Windows Installer verwenden.
Es gibt zwei Hauptmethoden, mit denen Sie Dateien in einer Website bereitstellen knnen:

BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie die
Grundlagen von
Webhosting mit dem
IIS-Webserver?
4.3

Mithilfe von xcopy oder FTP: Bei vielen Webanwendungen und Webdiensten
mssen einfach nur die Dateien auf den Webserver kopiert werden. Diese Websites
und Dienste erfordern keine besonderen Ttigkeiten, wie z.B. das Neustarten von
IIS-Diensten, das Registrieren der Komponenten in der Windows-Registrierung und
so weiter. Die xcopy- oder FTP-Bereitstellung ist ideal in solchen Szenarien.
Mithilfe von Windows Installer: Windows Installer kann eine Reihe von
benutzerdefinierten Aktionen whrend des Bereitstellungsprozesses durchfhren.
Daher kann er verwendet werden, um komplexe Websites bereitzustellen, die
das automatische Erstellen virtueller Verzeichnisse, Neustarten von Diensten,
Registrieren von Komponenten und so weiter erfordern.

Grundlegendes zu Webanwendungen | 107

Grundlegendes zur Webdienstentwicklung

FAZIT

Ein Webdienst ist eine Softwarekomponente, auf die mit Standardnetzwerkprotokollen


wie HTTP ber ein Netzwerk zugegriffen werden kann. Webdienste werden mit WDSL
(Web Service Description Language, Webdienstbeschreibungssprache) beschrieben.
Webdienste bieten eine Methode zur Interaktion mit Programmierungsobjekten, die sich
auf Remotecomputern befinden. Was die Webdienste so besonders macht, ist, dass die
gesamte Kommunikation zwischen Webdienstservern und ihren Clients ber Extensible
Markup Language(XML)-Meldungen erfolgt, die ber Hypertext Transfer Protocol
(HTTP) bertragen werden.
Durch die Verwendung dieser Standardtechnologien knnen Remoteobjekte verffentlicht
und von anderenfalls inkompatiblen Systemen verwendet werden. Zum Beispiel kann ein
Remoteobjekt, das in C# geschrieben und als Webdienst auf einem Windows-Webserver
verffentlicht wurde, von Java-Code auf einem Linux-Rechner verarbeitet werden.
Bevor wir die Details zum Erstellen und Verwenden von Webdiensten behandeln, machen
wir uns zunchst mit zwei Schlsseltechnologien vertraut, die Webdienste mglich machen:
Simple Object Access Protocol (SOAP)
Web Services Description Language (WSDL)

Einfhrung in SOAP
SOAP ist das Protokoll fr den Austausch strukturierter Informationen in einer
Webdienstkommunikation zwischen zwei Remotecomputern.
SOAP ist das Protokoll, das definiert, wie Remotecomputer im Rahmen einer
Webdienstkommunikation Meldungen austauschen. SOAP nutzt als Meldungsformat XML
und zur Meldungsbertragung HTTP. Die Verwendung von SOAP zur Kommunikation hat
zwei groe Vorteile. Erstens: Da Webdienstnachrichten als XML formatiert sind, sind sie
leichter fr inkompatible Systeme zu verstehen. Zweitens: Da diese Nachrichten ber das
allgegenwrtige HTTP bertragen werden, knnen sie normalerweise jeden Rechner im
Internet erreichen, ohne dass sie durch Firewalls blockiert werden.
Hier ist ein typisches SOAP-Paket, das von einem Client an einen Webdienst gesendet
wurde:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
xmlns:xsi=http://www.w3.org/2001/XMLSchemainstance
xmlns:xsd=http://www.w3.org/2001/XMLSchema
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ToLower xmlns="http://northwindtraders.com">
<inputString>BEISPIEL STRING</inputString>
</ToLower>
</soap:Body>
</soap:Envelope>

108 | Lektion 4

Wenn Sie das Beispiel betrachten, bemerken Sie einige offensichtliche Elemente dieses
SOAP-Pakets:
Das Paket besteht aus einem Umschlag, der einen Textkrper enthlt. Jeder ist mit
einem bestimmten XML-Tag identifiziert.
Der Textkrper besteht aus dem Namen der aufzurufenden Methode. In diesem
SOAP-Paket ist der Methodenname ToLower, und es nutzt einen einzelnen
Parameter mit dem Namen InputString und einen bestimmten Wert.
Hier ist das Antwortpaket vom Server:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ToLowerResponse
xmlns="http://northwindtraders.com">
<ToLowerResult>beispiel string</ToLowerResult>
</ToLowerResponse>
</soap:Body>
</soap:Envelope>

Im Antwortpaket ist das XML-Element ToLowerResponse das Ergebnis des Aufrufs der
Methode auf dem Server.

Einfhrung in WSDL

HINWEIS

Ein Webdienst kann


ohne eine WSDLDatei bestehen, aber
Sie mssen die genaue
eingehende SOAPNachricht kennen, die
der Webdienst erwartet,
bevor Sie diesen Dienst
verwenden knnen.

WSDL ist eine XML-basierte Sprache zur Beschreibung von Webdiensten.


WSDL steht fr Web Services Description Language, und sie bietet einen Standard,
demzufolge ein Webdienst seinem Client mitteilen kann, welche Art von Nachrichten er
akzeptiert und welche Ergebnisse zurckgegeben werden. Eine WSDL-Datei fungiert als
ffentliche Schnittstelle eines Webdienstes und umfasst folgende Informationen:
Die Datentypen, die sie verarbeiten kann
Die Methoden, die sie zur Verfgung stellt
Die URLs, durch die auf diese Methoden zugegriffen werden kann

Erstellen von Webdiensten


In diesem Abschnitt erfahren Sie, wie Sie einen Webdienst erstellen und verffentlichen.
In diesem Abschnitt erfahren Sie, wie Sie einen einfachen Webdienst namens
TextWebService erstellen, der zwei Methoden, ToLower und ToUpper, verfgbar
macht. Diese Methoden konvertieren eine bestimmte Zeichenfolge in Kleinbuchstaben
bzw. Grobuchstaben. Obwohl dieses Beispiel einfach ist, deckt es alle Aspekte des
Erstellens eines Webdiensts ab, der eine komplexere Verarbeitungslogik enthalten kann.

Grundlegendes zu Webanwendungen | 109

ERSTELLEN EINES WEBDIENSTS


VORBEREITUNG. Um einen Webdienst zu erstellen, fhren Sie die folgenden Aktionen aus:

1. Fgen Sie ein neues Projekt basierend auf der Vorlage Leere ASP.NETWebanwendung zur Lektion04-Projektmappe hinzu. Benennen Sie das Projekt
TextWebService, wie in Abbildung 4-12 dargestellt.

2. Whlen Sie Projekt > Neues Element hinzufgen aus dem Kontextmen. Whlen Sie
die Webdienstvorlage, wie in Abbildung 4-13 gezeigt. Nennen Sie den Webdienst
TextWebService.asmx.

3. ndern Sie den Standardcode fr die TextWebService-Klasse in der Datei


TextWebService.asmx.cs wie folgt:

Abbildung 4-12
Whlen Sie die Vorlage
Leere ASP.NETWebanwendung.

Abbildung 4-13
Whlen Sie die
Webdienstvorlage.

[WebService(Namespace = "http://northwindtraders.com/")]
[WebServiceBinding(ConformsTo
= WsiProfiles.BasicProfile1_1)]
public class TextWebService:
System.Web.Services.WebService

110 | Lektion 4
{
[WebMethod]
public string ToUpper(string inputString)
{
return inputString.ToUpper();
}
[WebMethod]
public string ToLower(string inputString)
{
return inputString.ToLower();
}
}

HINWEIS

Sie knnen den


Domainnamen Ihres
Unternehmens als
Teil des Namespace
verwenden, um
Ihren Webdienst
von den Diensten zu
unterscheiden, die von
anderen Unternehmen
verffentlicht werden.

4. Whlen Sie Debuggen > TextWebService erstellen, um das Projekt zu kompilieren und
um sicherstellen, dass keine Fehler aufgetreten sind. Der Webdienst ist jetzt einsatzbereit.

Im obigen Code gibt es einige wichtige Dinge zu beachten. Beachten Sie zunchst, dass jede
Klasse, die als XML-Webdienst verfgbar gemacht wird, ein WebService-Attribut haben
muss. Das WebService-Attribut besitzt eine Namespace-Eigenschaft, die standardmig auf
https://tempuri.org/ festgelegt ist. Obwohl es in Ordnung ist, diesen Wert zum Zeitpunkt der
Entwicklung zu haben, sollte der Namespace-Wert gendert werden, bevor der Webdienst
verffentlicht wird. In der Tat muss jeder einzelne Webdienst einen eindeutigen Namespace
haben, damit die Clientanwendungen ihn von anderen Webdiensten unterscheiden kann.
Jede Methode, die vom Webdienst verfgbar gemacht wird, muss auch ein WebMethodAttribut haben. Die Methoden, die mit WebMethod-Attributen gekennzeichnet sind, sind
auch bekannt als Webmethoden. Die beiden Methoden, die in dieser bung verwendet
werden, konvertieren eine Zeichenfolge in Gro- bzw. Kleinbuchstaben.
Um einen einfachen Webdienst, wie den oben erstellten TextWebService, zu testen, bentigen
Sie nur einen Webbrowser. Wie in der folgenden bung gezeigt, knnen Sie Methoden
aufrufen, Parameter bergeben und die Rckgabewerte von innerhalb des Browsers berprfen.
TESTEN EINES WEBDIENSTES
VORBEREITUNG. Um einen Webdienst zu testen, fhren Sie die folgenden Aufgaben durch:

Abbildung 4-14
Testseite des Webdiensts

1. ffnen Sie das TextWebService-Projekt, das Sie in der vorherigen bung erstellt
haben. Whlen Sie Debuggen > Debuggen starten. Ein Browser wird gestartet, der die
Testseite des Webdiensts anzeigt, wie in Abbildung 4-14 dargestellt.

Grundlegendes zu Webanwendungen | 111



2. Klicken Sie auf der Testseite auf den Link Dienstbeschreibung. Auf diese Weise knnen
Sie die WSDL fr diesen Webdienst anzeigen. Klicken Sie auf die Schaltflche Zurck,
um zur Testseite zurckzukehren.
3. Beachten Sie, dass alle Webmethoden als Links auf der Testseite angezeigt werden.
Um eine bestimmte Webmethode aufzurufen, klicken Sie auf ihren Link. Anschlieend
sollten Sie eine Seite zum Testen der ausgewhlten Webmethode sehen, wie in
Abbildung 4-15 dargestellt.

Abbildung 4-15
Testseite der Webmethode

4. Jede Testseite der Webmethode zeigt das SOAP und andere Nachrichten,
die der Webdienst versteht. Sie enthlt auch ein Formular, mit dem Sie
Methodenparameter eingeben und die Webmethode testen knnen. Geben Sie eine
Testeingabezeichenfolge ein, und klicken Sie auf die Schaltflche Aufrufen. Sie sollten
ein Ergebnis auf der nchsten Seite sehen, wie in Abbildung 4-16 dargestellt.

5. Testen Sie beide Methoden. Wenn Sie fertig sind, schlieen Sie den Webbrowser.

Abbildung 4-16
Rckgabewert aus dem
Webdiensttest

112 | Lektion 4

Wie in der bung gezeigt, erstellt die Testseite beim Klicken auf die Schaltflche
Aufrufen die entsprechenden SOAP-Pakete fr den zu verarbeitenden Webdienst und
zeigt dann die Ergebnisse an, die vom Webdienst zurckgegeben werden.

Verwenden von Webdiensten


In diesem Abschnitt erfahren Sie, wie Sie ber eine Clientanwendung auf Webdienste
zugreifen.
Zuvor in der Lektion haben Sie gelernt, wie Sie einen Webdienst ber die Testseite
des Webdiensts aufrufen. In diesem Abschnitt erfahren Sie, wie Sie einen Webdienst
programmgesteuert aus einer ASP.NET-Clientanwendung aufrufen.
ZUGREIFEN AUF EINEN WEBDIENST AUS EINER CLIENTANWENDUNG
VORBEREITUNG. Um auf einen Webdienst von einer Clientanwendung zuzugreifen,
fhren Sie die folgenden Schritte aus:

1. Fgen Sie ein neues Projekt basierend auf der Vorlage ASP.NET-Webanwendung zur
Lektion04-Projektmappe hinzu. Nennen Sie das Projekt TextWebServiceClient.
2. Klicken Sie mit der rechten Maustaste auf den Projektnamen im Fenster des
Projektmappen-Explorers, und whlen Sie die Option Webverweis hinzufgen aus
dem Kontextmen. Geben Sie im Dialogfeld Webverweis hinzufgen die URL
des Diensts ein, der in der vorherigen bung erstellt wurde, und drcken Sie die
Eingabetaste. (Sie knnen auch die URL aus der Adresszeile des Browsers kopieren.)
Diese Aktion ldt die Liste der Vorgnge, die auf dem Webdienst verfgbar sind,
wieinAbbildung 4-17 dargestellt.

Abbildung 4-17
Dialogfeld Webverweis
hinzufgen

3. ndern Sie im Dialogfeld Webverweis hinzufgen den Namen des Webverweises in


TextWebService, und klicken Sie auf die Schaltflche Verweis hinzufgen. Dadurch
wird ein Webverweis zum Projekt hinzugefgt, wie in Abbildung 4-18 dargestellt.

Grundlegendes zu Webanwendungen | 113


Abbildung 4-18
Webverweiseknoten fr das
Projekt

4. ndern Sie den Code von Default.aspx in den folgenden Code:


<%@ Page Title="Home Page" Language="C#"
AutoEventWireup="true"
CodeBehind="Default.aspx.cs"
Inherits="TextWebServiceClient._Default" %>
<html>
<head><title>TextWebService Client
</title></head>
<body>
<form runat="server">
<h2>Test Form For TextWebService</h2>
<p>
<asp:TextBox ID="TextBox1"
runat="server"
Text="enter text" />
<br />
<asp:Button ID="Button1"
runat="server"
Text="Service-Methoden aufrufen"
onclick="Button1_Click" />
</p>
<p>
<strong>Ergebnisse:</strong><br />
Methode ToLower:
<asp:Label ID="toLowerLabel"
runat="server"
Text="Label" ForeColor="Green" />
<br />

114 | Lektion 4

HINWEIS

Wenn Sie eine


Webdienstmethode
aufrufen, haben Sie die
Wahl zwischen einer
synchronen und einer
asynchronen Methode.
Sie knnen die
asynchrone Methode
verwenden, um die
Reaktionsfhigkeit
der Clientanwendung
zuerhhen.

Methode ToUpper:
<asp:Label ID="toUpperLabel"
runat="server"
Text="Label" ForeColor="Green" />
</p>
</form>
</body>
</html>
5. ffnen Sie die Entwurfsansicht fr Default.aspx, und doppelklicken Sie auf das
Optionsfeld-Steuerelement. Dadurch wird Code fr den Click-Ereignishandler
hinzugefgt. ndern Sie den Code wie folgt:
protected void Button1_Click(
object sender, EventArgs e)
{
var webService =
new textWebService.TextWebService();
toLowerLabel.Text =
webService.ToLower(TextBox1.Text);
toUpperLabel.Text =
webService.ToUpper(TextBox1.Text);
}

6. Whlen Sie Debuggen > Debuggen starten, um die Webanwendung auszufhren.


Geben Sie Beispieltext ein, und klicken Sie auf die Schaltflche Service-Methoden
aufrufen. Sie sollten die Ergebnisse aus TextWebService sehen, wie in Abbildung
4-19 dargestellt.

Abbildung 4-19
Rckgabewert aus dem
Webdienst

Wenn Sie einen Webverweis hinzufgen, erstellt Visual Studio in der obigen bung einen
lokalen Proxy, der den Remotedienst darstellt. Der Proxy vereinfacht die Kommunikation
mit dem Webdienst durch die Annahme von Nachrichten, leitet sie an den Webdienst
weiter und gibt Ergebnisse aus dem Webdienst zurck.
Sie knnen diesen Proxy problemlos verwenden, um Objekte aus dem Webdienst zu
erstellen und Methoden aufzurufen. Infolgedessen ist die Arbeit mit Remoteobjekten
hnlich wie die Arbeit mit lokalen Objekten.

Grundlegendes zu Webanwendungen | 115


BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie die
Grundlagen der
Webdienstentwicklung?
4.4

Wenn Sie einen Webverweis erstellen, liest Visual Studio die entsprechende WSDL-Datei,
um zu bestimmen, welche Klassen und Methoden auf dem Remoteserver verfgbar sind.
Wenn Sie eine Methode auf einem Remoteobjekt aufrufen, wandelt .NET Framework
Ihren Aufruf und die Ergebnisse in SOAP-Nachrichten um und bertrgt sie ohne
Eingreifen Ihrerseits.

Z U S A M M E N FA S S U N G D E R V E R M I T T E LT E N
KENNTNISSE
In dieser Lektion haben Sie Folgendes gelernt:
Eine Webseite ist ein Dokument, das ber das World Wide Web (WWW)
bereitgestellt wird und von einem Webbrowser angezeigt werden kann.
Hypertext Markup Language (HTML) ist die Sprache, mit der Webserver und
Webbrowser eine Webseite beschreiben.
Mit Cascading Stylesheets (CSS) knnen Sie die Stil- und Formatierungsinformationen
separat vom HTML-Code speichern. Diese Trennung macht es leicht, eine Website
zu aktualisieren. Visual Studio enthlt Tools zum Erstellen und Anzeigen Ihrer
Stylesheets in einer Vorschau.
JavaScript ist eine clientseitige Skriptsprache, die innerhalb eines Webbrowsers
ausgefhrt wird. Mit ihr erstellte Webseiten knnen wesentlich interaktiver sein als
Webseiten, die ausschlielich mit HTML erstellt wurden.
Techniken zur clientseitigen Zustandsverwaltung, wie Abfragezeichenfolgen, Cookies,
ausgeblendete Felder und ViewState verwenden HTML und die Funktionen der
Webbrowser, um Statusinformationen auf Clientcomputern zu speichern.
Techniken zur serverseitigen Zustandsverwaltung, wie Sitzungszustand und
Anwendungszustand, verwenden Serverressourcen fr die Zustandsverwaltung.
Internetinformationsdienste (IIS) ist ein Webserver zum Hosting von
Webanwendungen auf dem Windows-Betriebssystem. Ein IIS-Server verwendet als
Konzepte Sites, Anwendungen und virtuelle Verzeichnisse.
Webdienste bieten eine Mglichkeit zum Aufrufen von Remoteobjekten mithilfe von
Standardtechnologien, wie XML und HTTP.
SOAP ist das Protokoll, das definiert, wie Remotecomputer im Rahmen einer
Webdienstkommunikation Meldungen austauschen. SOAP nutzt als Meldungsformat
XML und zur Meldungsbertragung HTTP.
WSDL bietet einen Standard, demzufolge ein Webdienst seinem Client mitteilen kann,
welche Arten von Nachrichten er akzeptiert und welche Ergebnisse zurckgegeben werden.

Wissenstest

Lckentext
Ergnzen Sie die Lcken der folgenden Stze mit dem richtigen Wort oder den richtigen
Wrtern.
1. Im HTML-Anker-Tag (<a>) gibt das Attribut _________ die Ziel-URL an.
2. Mit dem HTML-Element _________ knnen Sie CSS-Code in eine separate Datei
setzen und ihn mit einer Webseite verknpfen.
3. Der JavaScript-Code auf einer Webseite wird auf _________ ausgefhrt.

116 | Lektion 4

4. Mit einem _________-Element knnen Sie Benutzern eine bestimmte Meldung


anzeigen, wenn JavaScript in ihrem Browser nicht ausgefhrt wird.
5. Sie knnen ViewState auf der Seitenebene deaktivieren, indem Sie das Attribut
_________ der Direktive Page in der ASP.NET-Seite auf false setzen.
6. Mit dem Zustand _________ werden Daten gespeichert, die global in einer gesamten
Anwendung verwendet werden, im Gegensatz zum Zustand _________, in dem
Daten fr eine Benutzersitzung gespeichert werden.
7. Auf eine Webanwendung wird mit einem ________-Namen statt einem physischen
Ordnernamen zugegriffen.
8. Sie mssen Klassen mit dem Attribut _________ markieren, um sie als Webdienst
verfgbar zu machen.
9. Von allen Methoden in einer Webdienstklasse werden nur diejenigen, die mit
_________-Attributen markiert sind, als Webdienstmethoden verfgbar gemacht.
10. SOAP nutzt als Meldungsformat _________ und zur Meldungsbertragung
_________.

Multiple-Choice
Kreisen Sie den Buchstaben ein, der der Antwort am besten entspricht.
1. Sie schreiben den folgenden Code fr Ihre Webseite:
<html>
<head>
<title>Sample Page</title>
<style type="text/css">
div
{
font-family: Verdana;
font-size: 9pt;
}
</style>
</head>
<body>
<div style=
"font-weight: bold; font-size: 12pt;">
Sample Text</div>
</body>

</html>

Was wre der Stil fr Text, der als Bestandteil des <div>-Elements angezeigt wird?
a. Font family: Verdana; font weight: bold; font size: 12pt
b. Font family: Verdana; font weight: bold; font size: 9pt
c. Font family: Verdana; font size: 12pt
d. Font family: Verdana; font size: 9pt

Grundlegendes zu Webanwendungen | 117

2. Sie entwickeln eine Kartenwebsite, die es Benutzern erlaubt, Karten mit Aktionen wie
Verschieben und Zoom interaktiv zu erkunden. Die Website soll schnell reagieren und
in den meisten modernen Webbrowsern zugnglich sein. Sie mchten jedoch nicht, dass
Benutzer zustzliche Plug-Ins installieren mssen, um Ihre Website nutzen zu knnen.
Welche der folgenden Technologien sollten Sie zur Anzeige der Karten nutzen?
a. HTML
b. Serverseitige Programmierungstechnologie wie z.B. ASP.NET
c. Adobe Flash
d. JavaScript
3. Ihre ASP.NET-Seite enthlt auf Seitenebene eine Variable des Typs Customer.
Sie mchten den Wert dieser Variablen ber Seiten-Postbacks hinweg beibehalten,
bentigen diese Variable aber in keiner anderen Seite in der Anwendung. Welche der
folgenden Techniken zur Zustandsverwaltung eignet sich fr diese Situation am besten?
a. Abfragezeichenfolgen
b. Cookies
c. ViewState
d. Sitzung
4. Sie entwickeln eine Webanwendung fr eine Onlinebank. Ihre Anwendung
ermglicht es Benutzern, von einem Webbrowser aus auf ihre Kontoinformationen
und Transaktionen zuzugreifen. Wenn ein Benutzer sich bei der Webanwendung
anmeldet, sollen Benutzername und Kontostand auf allen Seiten der Anwendung
angezeigt werden, bis sich der Benutzer wieder abmeldet. Auerdem soll diese
Anwendung vor bswilligen Benutzern geschtzt sein. Welche der folgenden
Techniken der Zustandsverwaltung sollten Sie verwenden?
a. Cookies
b. ViewState
c. ViewState mit Verschlsselung
d. Sitzung
5. Sie entwickeln ein Webformular zur Anzeige von Wetterdaten. Wenn ein Benutzer
das Webformular anfordert, muss das Formular einige Initialisierungsschritte durchfhren, um sein Erscheinungsbild zu ndern, und einigen Steuerelementen Werte
zuordnen. Wo sollten Sie den Code platzieren?
a. Im Ereignishandler PreInit der Klasse Page
b. Im Ereignishandler Init der Klasse Page
c. Im Ereignishandler Load der Klasse Page
d. Im Ereignishandler PreRender der Klasse Page
6. Sie mchten Werte von C#-Ausdrcken in einer ASP.NET-Seite anzeigen. In
welchem der folgenden Codeblocktypen sollten Sie den Ausdruck einschlieen?
a. <script runat=server></script>
b. <script></script>
c. <%= %>
d. <form></form>
7. Sie haben eine Anwendung fr eine Arbeitszeittabelle entwickelt, die von allen
Mitarbeitern in Ihrem Unternehmen verwendet werden soll. Sie haben diese
Anwendung mit ASP.NET entwickelt und sie auf dem Webserver des Unternehmens
bereitgestellt. Was mssen alle Mitarbeiter des Unternehmens auf ihrem Computer
installieren, bevor sie auf die Anwendung fr die Arbeitszeittabelle zugreifen knnen?
a. .NET Framework-Datei
b. .NET Framework Software Development Kit
c. Visual Studio
d. Einen Webbrowser

118 | Lektion 4

8. Ihre Clientanwendung ruft einen Webdienst auf, der komplexe, zeitaufwndige


Berechnungen durchfhrt. Ein Benutzer beschwert sich, dass die Benutzeroberflche
vorbergehend einfriert, whrend Ergebnisse zurckgegeben werden. Welchen Ansatz
sollten Sie bei der Lsung dieses Problems verfolgen?
a. Sie sollten einen besseren Prozessor auf dem Webserver installieren.
b. Sie sollten einen besseren Prozessor auf dem Clientcomputer installieren.
c. Sie sollten ein Upgrade auf eine schnellere Internetverbindung durchfhren.
d. Sie sollten den Webdienst asynchron aufrufen.
9. Sie haben einen ASP.NET-Webdienst erstellt, der eine Whrung in eine andere umrechnet.
Eine der Methoden in Ihrem Webdienst wird durch den folgenden Code definiert:
public double Convert(double amount,
string from, string to)
{
// code to perform currency conversion
}

Die Benutzer des Webdienstes berichten, dass sie einen Verweis auf den Webdienst
festlegen knnen, ihnen jedoch die Methode Convert nicht zur Verfgung steht. Wo
knnte das Problem liegen?
a. Die ASMX-Datei fr den Webdienst ist auf dem Webserver nicht verfgbar.
b. Die Webdienstklasse ist nicht mit dem Attribut WebService markiert.
c. Die Methode Convert ist nicht mit dem Attribut WebMethod markiert.
d. Webdienste knnen nur Methoden verfgbar machen, die Textwerte zurckgeben.
10. Sie arbeiten an zwei Projekten in Visual Studio. Das erste Projekt ist ein Webdienst,
der ein DataSet-Objekt zurckgibt, das zum Namespace System.Data gehrt. Das
zweite Projekt greift auf den Webdienst zu, der vom ersten Projekt erstellt wird. Welches
Projekt in diesem Szenario bentigt einen Verweis auf den Namespace System.Data?
a. Das Webdienstprojekt
b. Das Clientprojekt, das auf den Webdienst zugreift
c. Sowohl das Clientprojekt als auch das Webdienstprojekt
d. Weder das Clientprojekt noch das Webdienstprojekt
Kompetenztest

Szenario 4-1: Verwenden von JavaScript und HTML


Sie entwickeln eine Webseite, die eine reaktionsschnelle Benutzeroberflche bereitstellt.
Sie mchten ein Bild auf der Seite anzeigen. Wenn der Benutzer seine Maus ber das Bild
bewegt, wird das ursprngliche Bild durch ein neues Bild ersetzt. Wenn die Maus aus dem
Bildbereich heraus bewegt wird, erscheint wieder das ursprngliche Bild. Sie mchten
dieses Verhalten mit clientseitigem JavaScript- und HTML-Code bewerkstelligen. Wie
wrden Sie eine Webseite erstellen, die wie hier beschrieben funktioniert?

Szenario 4-2: Verwenden von Abfragezeichenfolgen


Sie entwickeln einen Teil einer Website, in dem Benutzer ihren Namen und ihre E-MailAdresse eingeben knnen, um einen E-Mail-Newsletter zu abonnieren. Ihre Lsung besteht
aus zwei Webseiten. Auf der ersten Seite werden Benutzername und E-Mail-Adresse
erfasst; dann wird die Kontrolle an eine zweite Seite bergeben. Auf der zweiten Seite
werden Name und E-Mail-Adresse als Abfragezeichenfolgen-Parameter akzeptiert, und
dem Benutzer wird eine Besttigungsmeldung angezeigt. Sie mssen Code fr diese beiden
Seiten schreiben. Welchen Code mssen Sie schreiben, um diese Anforderung zu erfllen?

Grundlegendes zu Webanwendungen | 119

Kenntnistest

Szenario 4-3: Asynchrones Aufrufen eines Webdienstes


Die von Visual Studio generierte Proxyklasse umfasst Methoden sowohl zum synchronen
als auch zum asynchronen Aufrufen des Webdienstes. Standardmig verwendet die
Anwendung die synchrone Methode. Wenn Sie den asynchronen Aufruf bevorzugen, mssen
Sie die asynchrone Version der Methode aufrufen. Die asynchronen Versionen warten nicht,
bis der Webdienst eine Antwort zurckgibt; sie verwenden einen Callback-Mechanismus,
um eine Antwort zu erhalten, sobald sie fertig ist. Der asynchrone Aufruf eines Webdienstes
hilft Clientanwendungen, schneller zu reagieren. Angenommen, Sie mchten die Methode
ToLower des zuvor erstellten TextWebService asynchron aufrufen. Welchen Code
wrden Sie fr den asynchronen Aufruf eines Webdienstes schreiben?

Szenario 4-4: Verwendung des Sitzungszustands


Sie entwickeln einen Teil einer Website, in dem Benutzer ihren Namen und ihre
E-Mail-Adresse eingeben knnen, um einen E-Mail-Newsletter zu abonnieren. Ihre
Lsung besteht aus zwei Webseiten. Auf der ersten Seite werden der Name und die
E-Mail-Adresse des Benutzers erfasst und dem Sitzungszustand hinzugefgt; dann
wird die Steuerung an eine zweite Seite bertragen. Auf der zweiten Seite werden der
Name und die E-Mail-Adresse aus dem Sitzungszustand abgerufen, und es wird eine
Besttigungsmeldung angezeigt. Sie mssen Code fr diese beiden Seiten schreiben.
Welchen Code mssen Sie schreiben, um diese Anforderung zu erfllen?

LEKTION

Grundlegendes zu
Desktopanwendungen

THEMEN UND LERNZIELE DIESER LEKTION


Fertigkeiten/Konzepte

MTA-Prfungsziel

Nummer des MTA-Prfungsziels

Erluterungen zu Objekten
Grundlegendes zu Windows
5.1
Forms-Anwendungen.
Erluterungen zu Werten
Grundlegendes zu
und Verweisen
konsolenbasierten Anwendungen.

5.2

Erluterungen zur Kapselung


Grundlegendes zu
5.3
Windows-Diensten.

SCHLSSELBEGRIFFE
Befehlszeilenparameter

Installationsprogramm

Windows Forms-Anwendungen

Konsolenbasierte Anwendung

MDI-Anwendungen (Multiple
Document Interface, Schnittstelle
fr mehrere Dokumente)

Windows-Dienst

Delegaten
Ereignisse

Visuelle Vererbung

Sie sind Softwareentwickler fr ein groes Unternehmen. Sie mssen eine Anwendung
entwickeln, die eng in den Windows-Desktop des Benutzers integriert ist und eine
Benutzeroberflche bietet, die den bekannten Desktopanwendungen der WindowsPlattform hnlich ist. Die Anwendung muss funktionsfhig sein, wenn sie vom
Netzwerk getrennt oder mit dem Netzwerk verbunden ist. Die Anwendung sollte auch
in der Lage sein, mit Gerten wie Handscannern und Druckern zu kommunizieren.

Grundlegendes zu Windows Forms-Anwendungen

FAZIT

120

Windows Forms-Anwendungen sind intelligente Clientanwendungen, die aus mindestens


einem Formular bestehen, das fr den Benutzer eine visuelle Benutzerschnittstelle
anzeigt. Diese Anwendungen lassen sich auch gut in das Betriebssystem integrieren,
verwenden angeschlossene Gerte und sind mit oder ohne das Internet funktionsfhig.

Grundlegendes zu Desktopanwendungen | 121

Erstellen eines Windows-Formulars


Ein Windows-Formular ist eine visuelle Oberflche, die eine Vielzahl von
Steuerelementen enthalten kann, beispielsweise Textfelder, Schaltflchen und Mens.
Visual Studio bietet einen Drag & Drop-Windows Forms-Designer, mit dem Sie
Anwendungen einfach erstellen knnen.
HINWEIS

Ein Steuerelement
ist ein abgegrenztes
Element der
Benutzeroberflche,
das Eingaben
vom Benutzer
entgegennimmt oder
Ausgaben fr den
Benutzer anzeigt.

Um Windows Forms zu entwerfen, mssen Sie zunchst entscheiden, welche


Steuerelemente auf dem Formular platziert werden sollen. Windows Forms bietet eine
groe Sammlung allgemeiner Steuerelemente, die Sie sofort verwenden knnen, umeine
hervorragende Benutzeroberflche zu erstellen. Wenn die gewnschte Funktion nicht
bereits als ein allgemeines Steuerelement verfgbar ist, haben Sie die Mglichkeit,
entweder ein benutzerdefiniertes Steuerelement selbst zu erstellen oder ein Steuerelement
von einem Drittanbieter zu erwerben.
Sie knnen die Windows Forms-Designer-Funktion von Visual Studio verwenden,
umSteuerelemente nach Ihren Anforderungen schnell zu platzieren und anzuordnen.
Visual Studio bietet ber die Toolbox einen einfachen Zugriff auf die verfgbaren
Steuerelemente (siehe Abbildung 5-1).

Abbildung 5-1
Visual Studio-Toolbox

Ein Formular und seine Komponenten reagieren normalerweise auf Benutzeraktionen


wie beispielsweise Tastenanschlge oder Mausbewegungen. Diese Reaktionen
werdenEreignisse genannt. Ein groer Teil des Codes, den Sie als ein Windows
Forms-Entwickler schreiben, dient dem Erfassen und Behandeln solcher Ereignisse, indem
eine angemessene Reaktion erstellt wird. Zum Beispiel erstellen Sie in der folgenden
bung ein Windows-Formular, das den vom Benutzer ausgewhlten Datumswert anzeigt.
ERSTELLEN EINES WINDOWS-FORMULARS
VORBEREITUNG. Starten Sie Microsoft Visual Studio. Fhren Sie anschlieend folgende
Schritte durch:

1. Erstellen Sie ein neues Projekt basierend auf der Vorlage der Windows
Forms-Anwendung, wie in Abbildung 5-2 gezeigt. Benennen Sie das Projekt
WindowsFormsDesign.

122 | Lektion 5
Abbildung 5-2
Dialogfeld Neues Projekt in Visual Studio

2. Das Windows Forms-Anwendungsprojekt wird mit einem Standardformular


(Form1.cs) in der Entwurfsansicht geffnet. In der Entwurfsansicht knnen Sie
visuell mit dem Formular arbeiten. Sie knnen beispielsweise die Steuerelemente
auf der Formularoberflche anordnen und die Eigenschaften festlegen. In dem
Fenster Toolbox knnen Sie auf verfgbare Steuerelemente zugreifen. Wenn das
Fenster Toolbox noch nicht angezeigt wird, whlen Sie Ansicht > Toolbox aus, um
esanzuzeigen. Dann ziehen Sie aus der Toolbox ein DateTimePicker-Steuerelement
und ein Label-Steuerelement, und legen Sie sie auf der Designer-Oberflche ab.
Ordnen Sie die Steuerelemente wie in Abbildung 5-3 dargestellt an.

3. Whlen Sie in der Entwurfsansicht das Label-Steuerelement aus. Legen Sie im Fenster
Eigenschaften seine Text-Eigenschaft auf eine leere Zeichenfolge fest.
4. Doppelklicken Sie in der Entwurfsansicht auf das Steuerelement DateTimePicker.
Diese Aktion hngt den Standardereignishandler fr das ValueChanged-Ereignis des
DateTimePicker-Steuerelements an und wechselt von der Entwurfs- zur Codeansicht.
Als Nchstes wird der Standardcode fr den Ereignishandler wie folgt gendert:

Abbildung 5-3
Windows-Formular mit
einem DateTimePickerSteuerelement und ein
Label-Steuerelement

private void dateTimePicker1_ValueChanged

(object sender, EventArgs e)


{
label1.Text =
dateTimePicker1.Value.ToLongDateString();
}

Grundlegendes zu Desktopanwendungen | 123


HINWEIS

In dieser bung haben


wir die Standardnamen
fr die Steuerelemente
verwendet. In komplexen
Formularen mit mehr
Steuerelementen
empfiehlt es sich immer,
den Steuerelementen
aussagekrftigere Namen
zu geben.

5. Whlen Sie Debuggen > Debuggen starten (oder drcken Sie F5), um das
Projekt auszufhren. Whlen Sie auf der Benutzeroberflche ein neues Datum,
undberprfen Sie, ob das ausgewhlte Datum auf dem Label-Steuerelement
angezeigt wird.

Beachten Sie, dass das Label-Steuerelement in dieser bung auf eine leere Zeichenfolge
festgelegt ist, wenn das Formular zuerst angezeigt wird. Sobald Sie die Datumsauswahl
durch Bearbeiten des DateTimePicker-Steuerelements ndern, wird der ausgewhlte
Datumswert als Text fr das Label-Steuerelement festgelegt.

Grundlegendes zum Windows Forms-Ereignismodell


Das Ereignishandling spielt in der benutzeroberflchenbasierten Programmierung
eine Schlsselrolle. ber das Ereignishandling reagieren Sie auf verschiedene
Ereignisse, die durch Benutzeraktionen ausgelst werden und damit Programme
interaktiv gestalten. Das Windows Forms-Ereignismodell verwendet .NET
Framework-Delegaten zur Bindung von Ereignissen an die entsprechenden
Ereignishandler.
In Windows Forms-Anwendungen macht jedes Formular und Steuerelement einen
vordefinierten Satz von Ereignissen verfgbar. Wenn ein Ereignis auftritt, wird der
Code im zugeordneten Ereignishandler aufgerufen. Wenn Sie zum Beispiel in der
vorherigen bung auf das DateTimePicker-Steuerelement doppelgeklickt haben, um dem
Ereignishandler Code hinzuzufgen, wird in Visual Studio der folgende Code generiert,
um dem Ereignis den Ereignishandler zuzuordnen:

HINWEIS

Ein Delegat kann


an jede Methode
gebunden werden,
deren Signatur der in
dem Ereignishandler
entspricht.

this.dateTimePicker1.ValueChanged +=
new System.EventHandler(
this.dateTimePicker1_ValueChanged);

Hier soll das Ereignis ValueChanged des DateTimePicker-Steuerelements erfasst


werden. Folglich wird eine neue Instanz des Delegaten vom Typ EventHandler erstellt.
Dabei wird dem Ereignishandler die Methode dateTimePicker1_ValueChanged
bergeben. Den Code zur Ereignisbehandlung schreiben Sie in die Methode
dateTimePicker1_ValueChanged.
Dieser Code wird automatisch von Visual Studio-Designer generiert. Sie finden diesen
Code in der CodeBehind-Datei fr den Designer (Form1.Designer.cs) in einem
Codebereich mit dem Namen Vom Windows Form-Designer generierter Code.
Auerdem ist zu beachten, dass die Syntax zum Hinzufgen eines Delegaten den
+=-Operator verwendet. Das liegt daran, dass .NET Framework Multicastdelegaten
untersttzt, in denen ein Delegat an mehrere Methoden gebunden werden kann. Folglich
sind 1:n-Benachrichtigungen zulssig, wenn ein Ereignis ausgelst wird.

Verwenden der visuellen Vererbung


Die visuelle Vererbung ermglicht die Wiederverwendung von vorhandenen
Funktionen und Layouts fr Windows Forms.
Eines der Grundprinzipien der objektorientierten Programmierung ist die Vererbung. Wenn
eine Klasse von einer Basisklasse erbt, werden seine Basisfunktionen von der Basisklasse
abgeleitet. Natrlich knnen Sie die abgeleitete Klasse immer erweitern, um zustzliche
Funktionen zu bieten und ntzlicher zu sein.

124 | Lektion 5

Ein Windows-Formular ist im Wesentlichen einfach eine weitere Klasse. Daher gilt auch
die Vererbung Bei der Anwendung von Vererbung auf ein Windows-Formular werden
jedoch smtliche visuellen Eigenschaften eines Formulars, wie Gre, Farbe sowie
alle enthaltenen Steuerelemente, vererbt. Sie knnen auch alle Eigenschaften visuell
bearbeiten, die von der Basisklasse geerbt werden. Das Vererben von Windows Forms
wird daher hufig als visuelle Vererbung bezeichnet. In der folgenden bung erstellen Sie
ber die visuelle Vererbung eines vorhandenen Formulars ein Windows-Formular.
ERSTELLEN EINES WINDOWS-FORMULARS MITHILFE VISUELLER
VERERBUNG
VORBEREITUNG. Starten Sie Microsoft Visual Studio, und ffnen Sie das vorhandene
Windows-Anwendungsprojekt mit dem Namen WindowsFormsDesign. Fhren Sie
anschlieend folgende Schritte aus:

1. ffnen Sie Form1.designer.cs, und ndern Sie die Zugriffsmodifizierer fr die


Steuerelemente label1 und dateTimePicker1 folgendermaen von private
inprotected:
protected System.Windows.Forms.Label label1;
protected System.Windows.Forms.DateTimePicker
dateTimePicker1;

Abbildung 5-4
Vorlage Geerbtes Formular

2. Whlen Sie Projekt > Windows Forms hinzufgen aus, um basierend auf der Vorlage
Geerbtes Formular ein neues Windows-Formular hinzuzufgen. Sie knnen schnell
nach dieser Vorlage suchen, indem Sie seinen Namen in das Suchfeld eingeben
(siehe Abbildung 5-4). Benennen Sie das geerbte Formular InheritedForm.cs.
(Beachten Sie, dass die Vorlage Geerbtes Formular in Visual Studio Express-Editionen
nicht verfgbar ist. Wenn Sie eine Express-Edition verwenden, erstellen Sie einfach
ein normales Windows-Formular mit dem Namen InheritedForm.cs, und wechseln
SiezuSchritt 4.)

Grundlegendes zu Desktopanwendungen | 125


3. Klicken Sie auf die Schaltflche Hinzufgen. Whlen Sie dann im Dialogfeld
Vererbungsauswahl aus dem WindowsFormsDesign-Namespace Form1, wie in
Abbildung 5-5 gezeigt. Klicken Sie dann auf die Schaltflche OK.

4. Whlen Sie die Codeansicht fr InheritedForm. Sie sehen, dass die Klasse
InheritedForm von Form1 wie unten dargestellt erbt. Wenn Sie die Vorlage
Geerbtes Formular in Schritt 2 nicht verwendet haben, mssen Sie den Code
zumHinzufgen von Code fr die Vererbung (fett dargestellt) manuell ndern:

Abbildung 5-5
Dialogfeld
Vererbungsauswahl

public partial class InheritedForm

: WindowsFormsDesign.Form1
{
public InheritedForm()
{
InitializeComponent();
}
}

5. In der Entwurfsansicht von InheritedForm legen Sie die Text-Eigenschaft auf


Geerbtes Formular fest.
6. Weiterhin in der Entwurfsansicht doppelklicken Sie auf InheritedForm. Diese Aktion
fgt einen Ereignishandler fr das Load-Ereignis des Formulars hinzu und wechselt
vonder Entwurfs- zur Codeansicht. Andern Sie in der Codeansicht den Standardcode
fr den Ereignishandler wie folgt:
private void InheritedForm_Load(
object sender, EventArgs e)
{
label1.Text =
dateTimePicker1.Value.ToLongDateString();
}

126 | Lektion 5

7. ffnen Sie Program.cs, und ndern Sie die Main-Methode wie nachfolgend
angegeben, um sicherzustellen, dass InheritedForm bei der Ausfhrung der
Anwendung gestartet wird:
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application
.SetCompatibleTextRenderingDefault(false);
Application.Run(new InheritedForm());
}

8. Whlen Sie Debuggen > Debuggen starten (oder drcken Sie F5), um das Projekt
auszufhren. Wenn InheritedForm geladen ist, wird das derzeit ausgewhlte Datum
auf dem Label-Steuerelement angezeigt. Dies entspricht nicht dem zuvor erstellten
Form1, in dem das Label-Steuerelement zunchst leer war.

Das InheritedForm-Formular zeigt, dass Sie einfach durch das Erben des Formulars
alle Funktionen von Form1 abrufen knnen. Wenn Sie den Zugriffsmodifizierer der
Membersteuerelemente von Form1, label1 und dateTimePicker1, von private
in protected ndern, knnen Sie von dem geerbten Formular auf sie zugreifen. Diese
bung veranschaulicht auch, wie Sie die Funktionen des Basisformulars in ein geerbtes
Formular erweitern knnen.

Grundlegendes zu MDI-Anwendungen (Multiple Document Interface,


Schnittstelle fr mehrere Dokumente)
MDI-Anwendungen enthalten mehrere untergeordnete Fenster in einem
bergeordneten Fenster.
In MDI-Anwendungen teilen sich mehrere Fenster ein Anwendungsmen und eine
Symbolleiste. MDI-Anwendungen haben oft ein Men mit dem Namen Fenster.
Indiesem Fenster knnen Benutzer mehrere untergeordnete Fenster verwalten, zwischen
untergeordneten Fenstern wechseln und untergeordnete Fenster anordnen. Abbildung 5-6
zeigt z. B. Microsoft Excel 2010 im MDI-Modus.
Abbildung 5-6
Microsoft Excel 2010 als
MDI-Anwendung

Grundlegendes zu Desktopanwendungen | 127

HINWEIS

Es kann schwierig
sein, Support fr
mehrere Monitore in
MDI-Anwendungen
zu implementieren,
weil das bergeordnete
Fenster sich auf alle
Monitore des Benutzers
erstreckt.

MDI-Anwendungen unterscheiden sich von SDI-Anwendungen (Single Document


Interface, Einfache Dokumentschnittstelle), in denen jedes Fenster ein eigenes Men und
eine eigene Symbolleiste enthlt. Bei SDI-Anwendungen bernimmt das Betriebssystem
die Fensterverwaltung. Beispielsweise knnen Sie in Windows mithilfe der
Windows-Taskleiste zwischen mehreren Fenstern wechseln.
Es gibt viele Diskussionen unter Benutzeroberflchen-Designern darber, welche
Anwendungsschnittstelle am besten funktioniert. SDI ist generell eher fr unerfahrene
Benutzer geeignet, wohingegen fortgeschrittene Benutzer MDI gut einsetzen knnen.
Viele gngige Anwendungen wie Microsoft Word und Microsoft Excel untersttzen
sowohl SDI als auch MDI. Word und Excel werden standardmig als SDI-Anwendung
installiert. Sie bieten Benutzern aber eine Option, zwischen SDI und MDI zu wechseln.
In Word 2010 und Excel 2010 knnen Sie zum Beispiel in den MDI-Modus wechseln,
indem Sie im Men Optionen die Option Alle Fenster in der Taskleiste anzeigen
deaktivieren.
ERSTELLEN EINER MDI-ANWENDUNG
VORBEREITUNG. Starten Sie Microsoft Visual Studio, und erstellen Sie ein neues
Windows Forms-Anwendungsprojekt mit dem Namen MDIApplication. Fhren Sie
anschlieend folgende Schritte aus:

Abbildung 5-7
Hinzufgen von
Menoptionen

1. Whlen Sie das Fenster Eigenschaften fr Form1, und legen Sie die Eigenschaft
Text auf MDI Application und die Eigenschaft IsMdiContainer auf True fest.
2. Whlen Sie in der Toolbox das Steuerelement MenuStrip, und fgen Sie es dem
Formular hinzu. Fgen Sie auf oberster Ebene das Menelement &Fenster hinzu,
und fgen Sie auf der nchsten Ebene &Neues Fenster und &Anordnen hinzu. Fgen
Sie im Men Anordnen drei Optionen hinzu: &berlappend, &Horizontal und
&Vertikal (siehe Abbildung 5-7).

128 | Lektion 5

HINWEIS

Das &-Symbol vor einem Zeichen in einem Mentext wird in dieser Form nicht
angezeigt. Vielmehr wird damit das jeweilige Zeichen als Tastenkombination fr das
Men festgelegt. Beispielsweise knnen Sie das Men &Fenster aufrufen, indem
Sie Alt+F drcken. Die Tastenkombinationen werden erst sichtbar, wenn der Benutzer
die ALT-TASTE drckt. Eine Einstellung im Windows-Betriebssystem steuert, ob
Tastenkombinationen immer sichtbar sind.

3. Legen Sie fr das Steuerelement MenuStrip die Eigenschaft MdiWindowListItem auf


den Namen des Mens Fenster fest (standardmig windowToolStripMenuItem).
4. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt,
und whlen Sie Hinzufgen > Windows-Formular aus. Fgen Sie ein neues
Windows-Formular mit dem Namen ChildForm hinzu.
5. Doppelklicken Sie auf das untergeordnete Formular, und fgen Sie folgenden Code
zum Behandeln des Load-Ereignisses hinzu:
private void ChildForm_Load(
object sender, EventArgs e)
{
Text = DateTime.Now.ToString();
}

6. Doppelklicken Sie auf dem bergeordneten Formular auf das Menelement Fenster >
Neues Fenster, und fgen Sie den folgenden Ereignishandler fr das Click-Ereignis hinzu.
private void newWindowToolStripMenuItem_Click(
object sender, EventArgs e)
{
ChildForm child = new ChildForm();
child.MdiParent = this;
child.Show();
}

7. Doppelklicken Sie im bergeordneten Formular auf Fenster > Anordnen, Fenster >
berlappend, Fenster > Anordnen, Fenster > Horizontal und Fenster > Anordnen,
Fenster > Vertikal, und fgen Sie die folgenden Ereignishandler fr die Click-Ereignisse
hinzu:
private void cascadeToolStripMenuItem_Click(
object sender, EventArgs e)
{
LayoutMdi(MdiLayout.Cascade);
}
private void horizontalToolStripMenuItem_Click(
object sender, EventArgs e)
{
LayoutMdi(MdiLayout.TileHorizontal);
}
private void verticalToolStripMenuItem_Click(
object sender, EventArgs e)
{
LayoutMdi(MdiLayout.TileVertical);
}

Grundlegendes zu Desktopanwendungen | 129


8. Whlen Sie Debuggen > Debuggen starten (oder drcken Sie F5), um das Projekt auszufhren.
Whlen Sie Fenster > Neues Fenster aus, um mehrere neue untergeordnete Fenster zu erstellen.
Wechseln Sie zwischen den untergeordneten Fenstern. Beachten Sie, dass nur eine Instanz
der Anwendung in der Windows-Taskleiste vorhanden ist. Verwenden Sie nun die Optionen im
Men Fenster > Anordnen, um die untergeordneten Fenster anzuordnen. Beispielsweise knnte
eine Anwendung mit drei untergeordneten Fenstern wie das Bild in Abbildung 5-8 aussehen,
wenn die untergeordneten Fenster horizontal angeordnet sind.

Abbildung 5-8
Eine MDI-Anwendung
mit drei untergeordneten
Fenstern, die horizontal
angeordnet sind

BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie die
Entwicklung von Windows
Forms-Anwendungen?
5.1

Im Folgenden sollen einige wichtige Eigenschaften und Methoden, die in dieser bung
verwendet werden, erlutert werden. Als Erstes wird fr das bergeordnete Formular
die IsMdiContainer-Eigenschaft auf true festgelegt. Diese Eigenschaft gibt an, dass
das Formular ein Container fr mehrere untergeordnete MDI-Formulare ist. Fr jedes
untergeordnete Formular legen Sie die MdiParent-Eigenschaft entsprechend zur Angabe
des bergeordneten Containerformulars an.
Als Nchstes wird die MdiWindowListItem-Eigenschaft von MenuStrip verwendet, um
anzugeben, welches Menelement zum Anzeigen der Liste der untergeordneten
MDI-Fenster verwendet wird. Wenn diese Eigenschaft festgelegt ist, listet das Menelement
alle untergeordneten Fenster auf. Auerdem wird der Wechsel zwischen den untergeordneten
Fenstern erlaubt. Als Ergebnis des Codes in der ChildForm_Load-Methode wird in der
Titelleiste fr jedes Formular das Datum und die Uhrzeit der Instanz zu dem Zeitpunkt
angezeigt, als das Formular geladen wurde.
Schlielich wird die LayoutMdi-Methode von den Menelementen im Men Fenster
verwendet, um die untergeordneten Fenster anzuordnen. Die Methode akzeptiert einen Parameter
vom Typ MdiLayout-Enumeration. Der Enumerationswert bestimmt, ob die untergeordneten
Fenster horizontal oder vertikal, berlappend oder als Symbole angezeigt werden mssen.

Grundlegendes zu konsolenbasierten Anwendungen


FAZIT

HINWEIS

Um einer Windows
Forms-Anwendung Leseund Schreibvorgnge
in der Konsole zu
ermglichen, mssen
Sie den Ausgabetyp
des Projekts in den
Projekteigenschaften auf
Konsolenanwendung
festlegen.

Konsolenbasierte Anwendungen besitzen keine grafische Benutzeroberflche, sondern


verwenden ein textbasiertes Konsolenfenster, um mit dem Benutzer zu interagieren.
Diese Anwendungen sind am besten fr Aufgaben geeignet, die keine oder eine
minimale Benutzerschnittstelle bentigen.
Wie der Name andeutet, wird eine konsolenbasierte Anwendung vom Konsolenfenster
ausgefhrt. Die Eingabe fr diese Anwendung kann mit Befehlszeilenparametern
bereitgestellt werden, oder die Anwendung kann interaktiv Zeichen aus dem Konsolenfenster
lesen. Ebenso wird die Ausgabe einer Konsolenanwendung in das Befehlsfenster
geschrieben. Sie knnen Lese- und Schreibvorgnge in der Konsole zulassen, indem Sie eine
Anwendung mithilfe der Konsolenanwendungsvorlage in Visual Studio erstellen.
Sie knnen konsolenbasierte Anwendungen auch zum Erstellen von Befehlen verwenden,
die ber die Befehlszeile ausgefhrt werden knnen. Beispielsweise knnen Sie vom
Betriebssystem bereitgestellte Pipes und Filter verwenden, um die Ausgabe eines Befehls
als Eingabe fr einen anderen Befehl zu bergeben. So erstellen Sie leistungsfhigere
Befehle, indem Sie einfache Befehle kombinieren.

130 | Lektion 5

Arbeiten mit Befehlszeilenparametern


In diesem Abschnitt erfahren Sie, wie Sie Befehlszeilenparameter von einer
Konsolenanwendung akzeptieren.
In der folgenden bung wird eine einfache Konsolenanwendung erstellt, die den Namen
einer Textdatei als Befehlszeilenargument akzeptiert und den Inhalt der Datei anzeigt.
ERSTELLEN EINER KONSOLENANWENDUNG
VORBEREITUNG. Starten Sie Microsoft Visual Studio. Fhren Sie anschlieend folgende
Schritte aus:

1. Erstellen Sie auf Basis der Konsolenanwendungsvorlage ein neues Projekt


(siehe Abbildung 5-9). Nennen Sie das Projekt DisplayFile.

2. ndern Sie in der Datei Program.cs den Code in der Main-Methode wie folgt:

Abbildung 5-9
Vorlage fr
Konsolenanwendung

static void Main(string[] args)


{
if (args.Length < 1)
return;
string[] lines = File.ReadAllLines(args[0]);
foreach (string item in lines)
{
Console.WriteLine(item);
}
}

3. Fgen Sie der Datei die folgende using-Direktive hinzu:


using System.IO;

Grundlegendes zu Desktopanwendungen | 131



BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie
die Entwicklung
konsolenbasierter
Anwendungen?
5.2

4. Whlen Sie Erstellen > Projektmappe erstellen (oder drcken Sie F6), um das Projekt
zu erstellen.
5. Erstellen Sie mithilfe von Visual Studio oder Editor eine Textdatei, geben Sie
Beispieltext ein, und speichern Sie die Datei unter dem Namen Sample.txt im selben
Ordner als ausfhrbare Datei. (Die ausfhrbare Datei wird standardmig in dem
Ordner bin\debug im Projektordner erstellt.)
6. ffnen Sie eine Eingabeaufforderung, und navigieren Sie zum Pfad der EXE-Datei des
Projekts. Fhren Sie den folgenden Befehl aus:
DisplayFile sample.txt

Dieser Befehl sollte den Inhalt der Textdatei im Befehlsfenster anzeigen.


7. Alternativ knnen Sie auch in Visual Studio im Fenster Eigenschaften des Projekts
das Befehlszeilenargument bergeben (siehe Abbildung 5-10). Um das Fenster
Eigenschaften des Projekts anzuzeigen, whlen Sie die Menoption Projekt >
DisplayFile-Eigenschaften aus.

Abbildung 5-10
Festlegen von Startoptionen
im Projektfenster
Eigenschaften

Grundlegendes zu Windows-Diensten
FAZIT

Ein Windows-Dienst ist eine Anwendung ohne Benutzerschnittstelle, die im


Hintergrund ausgefhrt wird.
Ein Windows-Dienst ist besonders gut zur Erstellung kontinuierlich im Hintergrund
ablaufender Anwendungen geeignet, die keine direkten Benutzerinteraktionen bentigen.
Ein Windows-Dienst kann gestartet, angehalten, neu gestartet und beendet werden.
EinWindows-Dienst kann auch so konfiguriert werden, dass er beim Start des Computers
automatisch startet.
Beispiele fr Windows-Dienste sind ein Webserver, der eingehende Anforderungen
berwacht und eine Antwort sendet, oder ein Druckerspooler des Betriebssystems, der
frdie Anwendungsprogramme Druckdienste bereitstellt.

132 | Lektion 5

Dienste spielen eine wichtige Rolle in der Anwendungsarchitektur von Unternehmen.


Beispielsweise kann ein Dienst auf eingehende Auftrge warten und einen Workflow zur
Auftragsbearbeitung starten, sobald ein Auftrag eingeht.

HINWEIS

Da ein Windows-Dienst im Hintergrund laufen kann, braucht er keinen angemeldeten


Benutzer, um zu funktionieren. Windows-Dienste werden in einer eigenen WindowsSitzung im vorgegebenen Sicherheitskontext ausgefhrt. Je nachdem, welche
Berechtigungen erforderlich sind, knnen Sie ein Benutzerkonto angeben, unter dem
der Dienst ausgefhrt werden soll.

Erstellen eines Windows-Diensts

HINWEIS

Um einen Windows-Dienst in Visual Studio zu erstellen, verwenden Sie die Vorlage


Windows-Dienstanwendung. Beachten Sie, dass ein Windows-Dienst installiert
werden muss, bevor er verwendet werden kann.

Visual Studio Express


Edition bietet keine
Vorlagen zum Erstellen
von WindowsDienstprojekten.
Daher bentigen Sie
eine andere Version
als die Express
Edition von Visual
Studio, um bungen
abzuschlieen,
die WindowsDienstprojekte
verwenden.

Alle Windows-Dienste mssen von der ServiceBase-Klasse abgeleitet werden. Diese


Basisklasse stellt die grundlegenden Strukturen und Funktionen zum Erstellen eines
Windows-Diensts bereit. Sie knnen die Methoden der Basisklasse OnStart, OnStop,
OnPause und OnContinue berschreiben, um eigene benutzerdefinierte Logik
hinzufgen, die auf nderungen in Dienstzustnden reagiert.
In der folgenden bung wird gezeigt, wie ein einfacher Windows-Dienst erstellt wird,
der Meldungen in das Anwendungsereignisprotokoll schreibt. Ereignisprotokolle sind
der Teil von Windows, der von Aufgaben und Anwendungen des Betriebssystems
verwendet wird, die im Hintergrund ausgefhrt werden, um Fehler oder andere
Informationsmeldungen zu protokollieren. Windows definiert standardmig drei
Ereignisprotokolle: System-, Anwendungs- und Sicherheitsprotokolle. Anwendungen
verwenden in der Regel das Anwendungsereignisprotokoll, um ihre Meldung zu
protokollieren. Das Dienstprogramm Windows-Ereignisanzeige kann zum Anzeigen
von Nachrichten in Ereignisprotokollen verwendet werden.
ERSTELLEN EINES WINDOWS-DIENSTS
VORBEREITUNG. Starten Sie Microsoft Visual Studio. Fhren Sie anschlieend folgende
Schritte aus:

Abbildung 5-11
Auswhlen der
Projektvorlage fr den
Windows-Dienst

1. Erstellen Sie ein neues Projekt basierend auf der Vorlage Windows-Dienst. Benennen
Sie das Projekt FirstService, wie in Abbildung 5-11 dargestellt.

Grundlegendes zu Desktopanwendungen | 133



2. Whlen Sie das Fenster Eigenschaften fr Service1, und setzen Sie die Eigenschaften
(Name) und ServiceName auf FirstService.
3. Benennen Sie im Projektmappen-Explorer die Datei Service1.cs als FirstService.cs.
ffnen Sie Program.cs, und berprfen Sie, ob die Verweise auf Service1
zuFirstService gendert wurden.
4. Whlen Sie das Fenster Eigenschaften fr den Dienst, und setzen die Eigenschaften
CanPauseAndContinue und CanShutdown auf True.
5. ffnen Sie den Designer fr FirstService, und fgen Sie ihm eine EventLogKomponente aus der Toolbox hinzu. Mithilfe der EventLog-Komponente knnen
Sieeine Verbindung mit den Ereignisprotokollen herstellen.
6. Zeigen Sie den Code fr FirstService an, und ndern Sie den Konstruktor wie unten
gezeigt. In diesem Code erstellen Sie zunchst eine Ereignisquelle mit dem Namen
FirstService. Diese Quelle wird verwendet, um Nachrichten zu unterscheiden,
die von einer bestimmten Anwendung von allen anderen Nachrichten in einem
Ereignisprotokoll generiert wurden. Anschlieend legen Sie fr die Source-Eigenschaft
der Ereignisprotokollkomponente den Namen der Ereignisquelle fest. Mit der
Log-Eigenschaft der Ereignisprotokollkomponente, eventLog1, wird das
Ereignisprotokoll angegeben, mit dem die Nachrichten aufgezeichnet werden:
public FirstService()
{
InitializeComponent();
if (!EventLog.SourceExists(FirstService))
{
EventLog.CreateEventSource(
FirstService, Application);
}
eventLog1.Source = FirstService;
eventLog1.Log = "Anwendung";
}

7. Fgen Sie den Dienstzustandsnderungs-Methoden folgenden Code hinzu, um das


Verhalten zu definieren. Die WriteEntry-Methode der Ereignisprotokollkomponente,
eventLog1, wird verwendet, um eine Nachricht in ein Ereignisprotokoll zu schreiben.
Als Teil der Methode knnen Sie den Typ der Nachricht angeben. Beispielsweise kann
Ihre Nachricht eine Fehlermeldung, eine Warnmeldung oder nur eine Information sein:
protected override void OnStart(string[] args)
{
eventLog1.WriteEntry(
"Dienst wird gestartet",
EventLogEntryType.Information, 1001);
}
protected override void OnStop()
{
eventLog1.WriteEntry(
"Dienst wird beendet",
EventLogEntryType.Information, 1001);
}

134 | Lektion 5
protected override void OnPause()
{
eventLog1.WriteEntry(
"Dienst wird angehalten"
EventLogEntryType.Information, 1001);
}
protected override void OnContinue()
{
eventLog1.WriteEntry(
"Dienst wird fortgesetzt",
EventLogEntryType.Information, 1001);
}
protected override void OnShutdown()
{
eventLog1.WriteEntry(
"Dienst wird heruntergefahren",
EventLogEntryType.Information, 1001);
}

8. Whlen Sie Erstellen > Projektmappe erstellen (oder drcken Sie F6), um das Projekt
zu erstellen.

Hier berschreibt der Code fr FirstService die Methoden OnStart, OnStop,


OnPause, OnContinue und OnShutdown, um Nachrichten in das Ereignisprotokoll
zu schreiben. Nicht alle Dienste mssen diese Methoden jedoch berschreiben. Obein
Dienst diese Methoden berschreiben muss, hngt vom Wert der Eigenschaften
CanPauseAndContinue und CanShutdown des Windows-Diensts ab.
Die WriteEntry-Methode des Ereignisprotokolls schreibt mithilfe der Nachricht das Protokoll,
den Typ des Ereignisprotokolleintrags (Information, Fehler, Warnung usw.) und eine
Ereignis-ID, die eine anwendungsspezifische ID zum Identifizieren des Ereignisses darstellt.
Der FirstService-Windows-Dienst ist nun bereit, aber bevor er verwendet werden kann,
muss er in der Windows-Dienst-Datenbank installiert werden. Dies geschieht, indem dem
Windows-Dienstprojekt ein Dienst-Installer hinzugefgt wird. In der folgenden bung
wird gezeigt, wie dies erfolgt.
HINZUFGEN EINES INSTALLERS ZU EINEM WINDOWS-DIENST
VORBEREITUNG. Starten Sie Microsoft Visual Studio. Fhren Sie anschlieend folgende
Schritte aus:

Abbildung 5-12
Designeransicht fr
ProjectInstaller.cs

1. ffnen Sie das FirstService-Projekt, das in der vorherigen bung erstellt wurde. Klicken
Sie mit der rechten Maustaste auf die Oberflche Designer von FirstService.cs,
undwhlen Sie im Kontextmen die Option Installer hinzufgen.
2. Diese Aktion fgt dem Projekt eine neue Datei ProjectInstaller.cs hinzu. ffnen
Sie den Designer fr ProjectInstaller.cs. Es wird angezeigt, dass dem Designer zwei
Komponenten hinzugefgt wurden, wie in Abbildung 5-12 dargestellt.

Grundlegendes zu Desktopanwendungen | 135



HINWEIS

HINWEIS

Um Sicherheitsrisiken
zu minimieren, sollten
Sie darauf verzichten,
das LocalSystem-Konto
fr die Ausfhrung
eines Windows-Diensts
zu verwenden, es sei
denn, dass dieser Dienst
zum Ausfhren hhere
Sicherheitsberechtigungen
erfordert.

3. Greifen Sie auf die Eigenschaften fr serviceProcessInstaller1component


zu, undndern Sie die Account-Eigenschaft in LocalService.
4. Als Nchstes rufen Sie die Eigenschaften fr serviceInstaller1component auf. ndern
Sie die DisplayName-Eigenschaft in FirstService und die Description-Eigenschaft
in "A simple test service." Beachten Sie, dass der Wert der StartType-Eigenschaft
standardmig auf Manuell festgelegt ist.
5. Whlen Sie Erstellen > Projektmappe erstellen (oder drcken Sie F6), um das Projekt
zu erstellen. Der Windows-Dienst kann jetzt installiert werden.

Die StartType-Eigenschaft der ServiceInstaller-Klasse gibt an, wie und wann ein Dienst
gestartet wird. Die StartType-Eigenschaft kann einen von drei mglichen Werten
haben. Der Wert Manual, der Standardwert, gibt an, dass Sie den Dienst manuell
starten mssen. Der Wert Automatic bedeutet, dass der Dienst automatisch gestartet
wird, wenn Windows gestartet wird. Der Wert Disabled bedeutet, dass der Dienst
nicht gestartet werden kann.
Beim Hinzufgen eines Installers zu einem Windows-Dienstprojekt werden die Klassen
ServiceProcessInstaller und ServiceInstaller zum Projekt hinzugefgt. Die Klasse
ServiceProcessInstaller fhrt Installationsaufgaben fr alle Windows-Dienste in einer
Anwendung aus. Dazu gehrt das Festlegen des Anmeldekontos fr den WindowsDienst. Die ServiceInstaller-Klasse fhrt auf der anderen Seite die Installationsaufgaben
aus, die fr einen einzelnen Windows-Dienst spezifisch sind, wie z. B. ServiceName
undStartType.
Die Account-Eigenschaft der ServiceProcessInstaller-Klasse gibt den Typ des Kontos
an, unter dem die Dienste ausgefhrt werden. Die Account-Eigenschaft ist vom
Enumerationstyp ServiceAccount, wobei die mglichen Werte LocalService,
LocalSystem, NetworkService und User sind. Der LocalSystem-Wert gibt
ein Konto mit hohen Berechtigungen an, whrend das LocalService-Konto als nicht
privilegierter Benutzer agiert.
Eine ausfhrbare Datei mit Code fr die Dienst-Installerklassen kann mithilfe des
Befehlszeilen-Installationstools (installutil.exe) installiert werden. In der folgenden
bung wird gezeigt, wie eine Windows-Dienstanwendung in der
Windows-Dienstdatenbank installiert wird.
INSTALLIEREN EINES WINDOWS-DIENSTS
VORBEREITUNG. Um einen Windows-Dienst zu installieren, fhren Sie die folgenden
Schritte aus:

1. Fhren Sie die Visual Studio-Eingabeaufforderung als Administrator aus. Um auf die
Eingabeaufforderung zuzugreifen, wechseln Sie zu Start > Alle Programme > Visual
Studio > Visual Studio-Tools. Whlen Sie dann Visual Studio-Eingabeaufforderung
aus. Um ein Programm als Administrator in Windows auszufhren, klicken Sie mit der
rechten Maustaste auf die Programmverknpfung, und whlen Sie im Kontextmen
die Option Als Administrator ausfhren aus.
2. ndern Sie das Verzeichnis in das Ausgabeverzeichnis des Projekts FirstService.
Dies ist das Verzeichnis, in dem sich die ausfhrbare Datei befindet.

136 | Lektion 5

3. Geben Sie den folgenden Befehl aus. Die Ergebnisse sollten den Ergebnissen in
Abbildung 5-13 entsprechen:
installutil FirstService.exe

Abbildung 5-13
Verwenden von
installutil.exe

HINWEIS

Das Installieren eines


Windows-Diensts
erfordert den Zugriff
auf die WindowsRegistrierung. Daher
mssen Sie installUtil.
exe unbedingt als
Administrator ausfhren.

4. Der Windows-Dienst FirstService ist jetzt installiert.

Die Windows-Dienstanwendung ist nun in der Windows-Dienstdatenbank gespeichert.


Oben, als Sie ServiceInstaller fr FirstService hinzugefgt haben, haben Sie die
StartType-Eigenschaft der serviceInstaller1-Komponente auf Manuell gesetzt. Daher
mssen Sie den Dienst bei Bedarf manuell starten. In der folgenden bung wird gezeigt,
wie ein Windows-Dienst gestartet, angehalten, fortgesetzt und beendet wird.

ARBEITEN MIT EINEM WINDOWS-DIENST


HINWEIS

Um den WindowsDienst zu deinstallieren,


verwenden Sie
InstallUtil.exe mit der
Option -u.
Abbildung 5-14
Im Abschnitt Dienste
knnen Sie mit den
installierten Diensten
arbeiten.

VORBEREITUNG. Starten Sie das Fenster Computerverwaltung, indem Sie mit der
rechten Maustaste klicken und im Kontextmen Arbeitsplatz und Verwalten auswhlen.
Fhren Sie anschlieend folgende Schritte aus:

1. Erweitern Sie im Fenster Computerverwaltung die Abschnitte Dienste und


Anwendungen, und whlen Sie Dienste aus. Eine Liste aller auf dem Computer
installierten Dienste sollte angezeigt werden, wie in Abbildung 5-14 dargestellt.

Grundlegendes zu Desktopanwendungen | 137


2. Whlen Sie den FirstService-Dienst aus, und klicken Sie auf den Hyperlink Start (siehe
Abbildung 5-14). Es wird ein Dialogfeld angezeigt, das den Fortschritt angibt (siehe
Abbildung 5-15). Wenn der Dienst gestartet wird, ndert sich der Status des Diensts
auf Gestartet.

3. Erweitern Sie den Knoten Ereignisanzeige, und whlen Sie das Protokoll
Programmfenster aus. Es wird eine Nachricht von FirstService mit der Information
Der Dienst wird gestartet angezeigt (siehe Abbildung 5-16).

4. Gehen Sie zurck zur Liste mit den Diensten, und versuchen Sie, FirstService
anzuhalten, fortzusetzen oder zu beenden. Lesen Sie das Anwendungsereignisprotokoll,
um zu berprfen, ob die entsprechenden Meldungen angezeigt werden.

Abbildung 5-15
Dienststeuerungsmeldung
beim Starten eines Diensts

Abbildung 5-16
Das Protokoll
Programmfenster

BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie, wie
Windows-Dienste
entwickelt werden?
5.3

In den letzten bungen haben Sie gesehen, wie ein Windows-Dienst erstellt,
installiert und verwendet wird. Auerdem haben Sie gelernt, wie dem WindowsAnwendungsereignisprotokoll programmgesteuert Nachrichten hinzugefgt werden.

Z U S A M M E N FA S S U N G D E R V E R M I T T E LT E N K E N N T N I S S E
In dieser Lektion haben Sie Folgendes gelernt:
Ein Windows-Formular ist eine visuelle Oberflche, auf der eine Vielzahl von
Steuerelementen angezeigt werden kann, z. B. Textfelder, Schaltflchen und Mens.
Visual Studio bietet einen Drag & Drop-Windows Forms-Designer, mit dem Sie
Anwendungen erstellen knnen.
In Windows Forms verfgt jedes Formular und Steuerelement ber einen
vordefinierten Satz von Ereignissen. Wenn ein Ereignis auftritt, wird der Code im
zugeordneten Ereignishandler aufgerufen. Das Windows Forms-Ereignismodell
verwendet .NET Framework-Delegaten zur Bindung von Ereignissen an die
entsprechenden Ereignishandler.

138 | Lektion 5
Die visuelle Vererbung ermglicht die Wiederverwendung von vorhandenen
Funktionen und Layouts fr Windows Forms.
MDI-Anwendungen enthalten mehrere untergeordnete Fenster in einem
bergeordneten Fenster.
Konsolenbasierte Anwendungen besitzen keine grafische Benutzeroberflche,
sondern verwenden ein textbasiertes Konsolenfenster, um mit dem Benutzer zu
interagieren. Diese Anwendungen sind am besten fr Aufgaben geeignet, die keine
oder eine minimale Benutzerschnittstelle bentigen.
Windows-Dienste sind besonders gut zur Erstellung kontinuierlich im Hintergrund
ablaufender Anwendungen geeignet, die keine Benutzeroberflche besitzen.
Sie knnen Windows-Dienste mithilfe der Windows-Dienstvorlage von Visual Studio
erstellen.
Bevor ein Windows-Dienst verwendet werden kann, muss er in der WindowsRegistrierung installiert sein. Zu diesem Zweck fgen Sie der Windows-Dienstanwendung
die Installer-Komponente hinzu. Dadurch knnen Sie den Windows-Dienst mithilfe eines
Installationstools wie InstallUtil.exe installieren.

Wissenstest

Lckentext
Ergnzen Sie die Lcken der folgenden Stze mit dem richtigen Wort oder den richtigen
Wrtern.
1. Verwenden Sie die _________-Eigenschaft der ServiceInstaller-Klasse, um einen
kurzen Kommentar anzugeben, der den Zweck des Diensts erlutert.
2. Die _________-Eigenschaft der _________-Klasse gibt den Kontotyp an, unter dem
ein Windows-Dienst ausgefhrt wird.
3. Die _________-Eigenschaft der EventLog-Klasse gibt den Anwendungsnamen an,
der zum Schreiben in ein Ereignisprotokoll verwendet wird.
4. _________ ermglicht Ihnen die Wiederverwendung von vorhandenen Funktionen
und Layouts fr Windows Forms.
5. _________-Anwendungen sind Anwendungen, in denen sich mehrere untergeordnete
Fenster in einem einzigen bergeordneten Fenster befinden.
6. Ein(e) _________ ist besonders gut zur Erstellung kontinuierlich im Hintergrund
ablaufender Anwendungen geeignet, die keine Benutzeroberflche besitzen.
7. _________ besitzen keine grafische Benutzeroberflche, sondern verwenden ein
textbasiertes Konsolenfenster, um mit dem Benutzer zu interagieren.
8. _________-Anwendungen stellen eigene Fensterverwaltungsfunktionen bereit,
whrend die Fensterverwaltung bei ___________-Anwendungen vom Betriebssystem
bernommen wird.
9. Ein Delegat kann an jede Methode gebunden werden, deren Signatur mit der in
der/dem ________ bereinstimmt.
10. Die _________ knnen an mehrere Methoden gebunden werden, wodurch
1:n-Benachrichtigungen zulssig sind, wenn ein Ereignis ausgelst wird.

Grundlegendes zu Desktopanwendungen | 139

Multiple-Choice
Kreisen Sie den Buchstaben ein, der der Antwort am besten entspricht.
1. Sie mssen einen Windows-Dienst entwerfen, der nicht angehalten werden kann.
Welche der folgenden Optionen hilft Ihnen, diese Aufgabe zu erfllen?
a. Legen Sie die CanPauseAndContinue-Eigenschaft des Windows-Diensts
aufFalse fest.
b. Legen Sie die CanPauseAndContinue-Eigenschaft des Windows-Diensts
aufTrue fest.
c. Legen Sie die CanStart-Eigenschaft des Windows-Diensts auf True und
dieCanShutdown-Eigenschaft auf False fest.
d. berschreiben Sie nicht die Methoden OnPause und OnContinue
imWindows-Dienst.
2. Sie haben einen Windows-Dienst entwickelt. Sie mssen diesen Dienst installieren,
um seine Funktionen zu installieren. Welche der folgenden Optionen sollten Sie
whlen, um diese Aufgabe zu erfllen?
a. Verwenden Sie den Server-Explorer von Visual Studio.
b. Verwenden Sie den Knoten Dienste im Fenster Computerverwaltung.
c. Verwenden Sie InstallUtil.exe.
d. Verwenden Sie Gacutil.exe.
3. Sie haben einen Windows-Dienst entwickelt. Zur Minimierung von Sicherheitsrisiken
muss dieser Dienst als nicht privilegierter Benutzer ausgefhrt werden. Welches der
folgenden Konten sollten Sie verwenden, um diesen Windows-Dienst auszufhren?
a. LocalSystem
b. NetworkService
c. LocalService
d. User (wobei die UserName-Eigenschaft auf ein Mitglied der Administratorrolle
festgelegt ist)
4. Sie entwerfen eine Windows-Dienstanwendung, die nur einen Windows-Dienst
enthlt. Dieser Dienst soll nach einem Neustart des Computers automatisch gestartet
werden. Welche der folgenden Klassen sollten Sie verwenden, um diese Einstellung
anzugeben?
a. ServiceBase
b. ServiceInstaller
c. ServiceProcessInstaller
d. ServiceController
5. Sie mssen die Anzeige und das Verhalten eines Windows-Formulars so ndern,
dassdieses mehrere untergeordnete Fenster enthalten kann. Was mssen Sie tun?
a. Legen Sie die IsMdiContainer-Eigenschaft fr das Formular auf True fest.
b. Legen Sie die MdiParent-Eigenschaft fr alle untergeordneten Fenster fest.
c. Legen Sie die MdiChild-Eigenschaft fr das Formular fest.
d. Legen Sie die IsMdiChild-Eigenschaft fr das Formular fest.
6. Sie entwickeln ein Windows-Formular, das auf Mausereignisse reagiert. Bei einer
Mausbewegung soll die Form1_HandleMouse-Methode aufgerufen werden.
Jeder von Ihnen geschriebene Code sollte sich nicht auf vorhandenen Code zum
Ereignishandling auswirken. Welche Anweisung sollten Sie verwenden, um
Ereignishandler und Ereignis zu verknpfen?
a.
this.MouseDown = new MouseEventHandler
(Form1_HandleMouse);

b.

this.MouseMove = new MouseEventHandler


(Form1_HandleMouse);

140 | Lektion 5

c.

this.MouseDown += new MouseEventHandler


(Form1_HandleMouse);

d.

this.MouseMove += new MouseEventHandler


(Form1_HandleMouse);

7. Sie entwickeln ein Windows-Formular mit einer Schnittstelle fr mehrere


Dokumente (Multiple Document Interface, MDI). Sie mssen Code schreiben, der
die untergeordneten Fenster vertikal im Clientbereich des bergeordneten MDIFormulars anordnet. Welche der folgenden Anweisungen sollten Sie verwenden?
a.
LayoutMdi(MdiLayout.TileVertical);

b.

LayoutMdi(MdiLayout.Cascade);

c.

MdiLayout(LayoutMdi.TileVertical);

d.

MdiLayout(LayoutMdi.Cascade);

8. Sie entwickeln eine Anwendung, die ber die Befehlszeile ausgefhrt wird. Welche
der folgenden Methoden verwenden Sie fr die Ausgabe an die Befehlszeile?
a. Console.Read
b. Console.Write
c. File.Read
d. File.Write
9. Sie mchten eine Anwendung mit einer visuellen Oberflche entwickeln, auf der
eine Vielzahl von Steuerelementen angezeigt wird (beispielsweise Textfelder,
Schaltflchen und Mens). Die Anwendung sollte auch mehrere untergeordnete
Fenster in einem bergeordneten Fenster enthalten knnen. Welchen der folgenden
Anwendungstypen sollten Sie entwickeln?
a. Konsolenbasierte Anwendung
b. Windows-Dienstanwendung
c. SDI-Anwendung (Single Document Interface, Einfache Dokumentschnittstelle)
d. MDI-Anwendung (Multiple Document Interface, Schnittstelle fr mehrere
Dokumente)
10. Sie erweitern eine vorhandene Windows-Anwendung. Sie mchten ein neues Formular
erstellen, das seine visuellen Eigenschaften (einschlielich Gre, Farbe und einiger
Steuerelemente) von einem bereits zuvor erstellten Formular erbt. Welche Technik
sollten Sie verwenden, um das neue Formular zu erstellen?
a. Visuelle Vererbung
b. Visuelle Kapselung
c. Visuelle Abstraktion
d. Visuelle Polymorphie
Kompetenztest

Szenario 5-1: Verwenden der visuellen Vererbung


Sie mssen ein Windows-Formular erstellen, das dem hnlich ist, das Sie in der bung
zur visuellen Vererbung erstellt haben. Diesmal soll jedoch die Hintergrundfarbe des
Formulars mit der aktuellen Farbe des Benutzerdesktops bereinstimmen. Wie wrden
Sie ein solches Formular entwickeln?

Szenario 5-2: Behandeln des MouseDown-Ereignisses


Sie entwickeln ein Spiel, in dem Benutzer einen Zielbereich auf einem Windows-Formular
mit dem Mauszeiger treffen sollen. Dazu mssen Sie ein Testformular entwickeln,
in dem die X- und Y-Koordinaten der Position angezeigt werden, die vom Benutzer in der
Titelleiste des Formulars angeklickt wird. Wie mssen Sie vorgehen?

Grundlegendes zu Desktopanwendungen | 141

Kenntnistest

Szenario 5-3: Verwenden von Konsoleneingaben


Sie entwickeln ein Programm, mit dem Text bearbeitet wird. Sie mssen eine
konsolenbasierte Anwendung schreiben, die einen vom Benutzer eingegebenen Text
bernimmt und in Grobuchstaben umwandelt. Welchen Code mssen Sie dafr
schreiben?

Szenario 5-4: Verwenden des Net-Dienstprogramms (net.exe)


Das Befehlszeilen-Dienstprogramm net.exe wird zusammen mit Windows installiert.
Mit diesem Dienstprogramm fhren Sie Netzwerkbefehle aus und steuern
Windows-Dienste. Sie knnen net.exe beispielsweise aufrufen, um den zuvor erstellten
Windows-Dienst FirstService zu verwenden. Welche Schritte sind erforderlich, ummit
dem Dienstprogramm net.exe einen Windows-Dienst zu unterbrechen (pausieren),
anzuhalten (stoppen) und zu starten?

LEKTION

Grundlegendes
zu Datenbanken

THEMEN UND LERNZIELE DIESER LEKTION


Fertigkeiten/Konzepte

MTA-Prfungsziel

Nummer des
MTA-Prfungsziels

Erluterungen zu Objekten
Grundlegendes zu
Managementsystemen

fr relationale Datenbanken.

6.1

Erluterungen zu Werten
und Verweisen

6.2

Grundlegendes zu Abfragemethoden
fr Datenbanken.

Erluterungen zur Kapselung


Grundlegendes zu Methoden fr
Datenbankverbindungen.

6.3

SCHLSSELBEGRIFFE
Attribut

erste Normalform (1NF)

Entwerfen relationaler Datenbanken

DataSet

flatfiles

zweite Normalform (2NF)

Datenbank

Funktionale Abhngigkeit

Gespeicherte Prozedur

Datenbankintegritt

Normalisierung

Structured Query Language (SQL)

Datenbank-Managementsystem
(DBMS)

Parametrisierte gespeicherte
Prozeduren

Dritte Normalform (3NF)

Nicht verbundene Anwendungen

Primrschlssel

Element

Verarbeitungsanweisungen

Entittsbeziehungsdiagramme
(Entity-Relationship Diagrams, ERDs)

Relationale Datenbank

Extensible Markup Language (XML)

Sie sind Softwareentwickler bei der Northwind Corporation. Im Rahmen Ihrer Arbeit
interagieren Sie mit Daten ber Kunden, Produkte, Lieferanten und Auftrge und
verarbeiten diese. Ihre Arbeit umfasst die Interaktion mit relationalen Datenbanken
wie Microsoft SQL Server. Jedoch arbeiten Sie auch mit Daten in anderen Formaten,
wie z. B. Flatfiles, XML-Dateien und In-Memory-Daten. Um Ihre Arbeit effektiv
zu erledigen, mssen Sie wissen, wie Sie mit verschiedenen Datenquellen eine
Verbindung herstellen und Daten in diesen Quellen abrufen und aktualisieren.

Grundlegendes zu relationalen Datenbankkonzepten

FAZIT

142

Eine relationale Datenbank ist eine Sammlung von miteinander verknpften Daten
basierend auf dem von E. F. Codd entwickelten relationalen Modell. Dieses Modell definiert
unterschiedliche Datenentitten, ihre Attribute und Beziehungen zwischen Entitten.

Grundlegendes zu Datenbanken | 143

Grundlegendes zu Datenbanken
Eine Datenbank ist eine organisierte Sammlung von miteinander verbundenen Daten,
die als Einheit verwaltet werden.
In einer Datenbank knnen Sie wichtige Daten speichern, verwalten und abrufen. Wenn
eine Datenbank korrekt entworfen wurde, kann sie von mehreren Anwendungen und
mehreren Benutzern verwendet werden. Ein Datenbank-Managementsystem (Database
Management System, DBMS) ist dagegen Software, die Datenbanken organisiert und
Funktionen wie Speicher, Datenzugriff, Sicherheit, Sicherung usw. bereitstellt. Beispiele
fr bekannte DBMSs sind Microsoft SQL Server, Microsoft Access, Oracle und MySql.
Datenbank-Managementsysteme knnen auf der Grundlage verschiedener Modelle
umgesetzt werden. Unter diesen Modellen ist das relationale Modell am beliebtesten.
Im relationalen Modell sind Daten in Tabellen organisiert. Dabei kann jede Tabelle
mehrere Zeilen enthalten. Auf relationalen Modellen basierende DBMSs werden als
Managementsysteme fr relationale Datenbanken (Relational Database Management
Systems, RDBMSs) bezeichnet. SQL Server, Access, Oracle und MySql sind RDBMSs.
Andere Datenbank-Managementsysteme basieren auf unterschiedlichen Modellen.
Objekt-DBMSs (ODBMSs) basieren zum Beispiel auf dem Objektmodell, in dem Daten
als Sammlung von Objekten gespeichert werden. In dieser Lektion konzentrieren wir uns
jedoch ausschlielich auf die bekannteren relationalen Datenbanken.
Relationale DBMSs verwenden Structured Query Language (SQL), um Daten abzurufen
und zu bearbeiten. Die gngigsten relationalen Datenbank-Managementsysteme bieten
einen gewissen Support fr die standardisierte Version von SQL. Dadurch knnen Sie Ihre
Fhigkeiten in verschiedenen relationalen Datenbanksystemen einsetzen.

Grundlegendes zu relationalen Datenbankkonzepten


Eine relationale Datenbank organisiert Daten in zweidimensionalen Tabellen,
dieaus Spalten und Zeilen bestehen.
In einer relationalen Datenbank werden Informationen in Tabellen organisiert. Eine
Tabelle ist eine Liste mit Zeilen und Spalten, die vom Konzept her mit einem Microsoft
Excel-Arbeitsblatt vergleichbar ist. Eine Zeile wird auch als Datensatz oder Tupel und
eine Spalte wird manchmal als Feld bezeichnet. Die Spalte oder das Feld gibt den Typ
der Daten an, die fr jeden Datensatz in der Tabelle gespeichert werden. Kundenauftrge
knnen beispielsweise in einer Tabelle fr Auftrge gespeichert werden, in der jede Zeile
einen eindeutigen Auftrag darstellt. In dieser Tabelle knnen Spalten wie OrderDate
verwendet werden, um anzugeben, dass ein gltiger Wert vom richtigen Datentyp ist. Eine
Beispieltabelle fr Auftrge ist in Abbildung 6-1 dargestellt.
Abbildung 6-1
Eine Orders-Tabelle in einer
relationalen Datenbank

144 | Lektion 6

Grundlegendes zum relationalen Datenbankentwurf


Das Entwerfen relationaler Datenbanken ist der Prozess zur Bestimmung der passenden
relationalen Datenbankstruktur, mit der die Geschftsanforderungen erfllt werden knnen.
Daten gehren zu den wichtigsten Ressourcen einer Organisation. Wenn Sie eine Datenbank
entwerfen, ist das Sicherstellen der Datenbankintegritt eines der Leitprinzipien. Integritt
bedeutet, dass die Daten in der Datenbank stets korrekt und konsistent sind.
Der Prozess des Datenbankentwurfs besteht aus den folgenden Schritten:
1. Entwickeln Sie ein Leitbild fr die Datenbank: Bezeichnet den Zweck der
Datenbank, wie sie verwendet wird und wer sie verwenden wird. Dieser Schritt bildet
die Grundlage fr den restlichen Entwurfsprozess.
2. Bestimmen Sie die Daten, die gespeichert werden mssen: Identifiziert die
verschiedenen Datentypen, die in der Datenbank gespeichert werden mssen.
ImAllgemeinen werden diese Informationen ber die Entittsbeziehungsdiagramme
als Bestandteil der Anforderungsanalyseaufgabe gesammelt.
3. Teilen Sie die Daten auf Tabellen und Spalten auf: Identifiziert die Tabellen und
die Informationen, die Sie in den Tabellen speichern mchten.
4. Whlen Sie Primrschlssel: Ein Primrschlssel ist eine Spalte oder eine
Spaltengruppe, die jede Datenreihe in einer Tabelle eindeutig identifiziert.
5. Identifizieren Sie Beziehungen: Es wird festgelegt, in welcher Beziehung die Daten
aus einer Tabelle zu den Daten aus einer anderen Tabelle stehen. Beispielsweise
haben Sie fr jeden einzelnen Kunden in einer Tabelle Customers mehrere Auftrge
in der Tabelle Orders. Dieses Verhltnis wird als 1:n-Beziehung bezeichnet.
6. Fhren Sie den Normalisierungsprozess durch: Datennormalisierungsregeln
werden angewendet, um sicherzustellen, dass alle potenziellen Probleme hinsichtlich
der Datenintegritt gelst werden. Sie erfahren weiter unten in dieser Lektion mehr
ber die Normalisierung.
Nachdem Sie den Zweck einer Datenbank festgelegt haben, knnen Sie die nchsten Schritte
(Schritt 2 bis 5) als Teil des Entittsbeziehungsmodells abschlieen. Der letzte Schritt der
Normalisierung kann dann auf die Ausgabe aus dieser Modellierung angewendet werden.

Grundlegendes zu Entittsbeziehungsdiagrammen
Entittsbeziehungsdiagramme (Entity-Relationship Diagrams, ERDs) werden
zur Modellierung von Entitten, deren Attributen und den Beziehungen zwischen
Entitten verwendet. Mithilfe von Entittsbeziehungsdiagrammen knnen Sie
bestimmen, welche Daten in einer Datenbank gespeichert werden mssen.
Die Entittsbeziehungsmodellierung ist ein Prozess, mit dem das konzeptionelle
Datenmodell eines Systems erstellt werden kann. Entittsbeziehungsdiagramme
stellen die grafischen Modellierungstools zum Durchfhren dieser Modellierung dar.
DieGrundbausteine eines ERD sind Entitt, Attribut und Beziehung:
Entitt: Eine Entitt ist ein Konstrukt fr ein physisches Objekt oder ein Konzept.
Beispiele sind ein Auftrag, ein Kunde, ein Mitarbeiter usw. Eine Entitt ist im
Allgemeinen nach dem Nomen benannt, das es darstellt.
Attribut: Attribute sind die eindeutigen Eigenschaften einer Entitt. Beispielsweise
knnen OrderNumber, OrderDate, ShipDate und ShipVia ntzliche Attribute
fr eine Entitt Order sein. Fr eine Entitt Employee knnen EmployeeId,
LastName, FirstName, Title und HireDate ntzliche Attribute sein. Jede Entitt
muss eine Menge eindeutig identifizierender Attribute besitzen, die als Primrschlssel
der Entitt bekannt ist. Beispielsweise ist OrderNumber ein Attribut, das eindeutig einen
Auftrag identifiziert. Folglich ist es daher ein Primrschlssel fr die Entitt Order.

Grundlegendes zu Datenbanken | 145

Beziehung: Eine Beziehung ist eine Zuordnung zwischen Entitten. Beispielsweise


bildet Takes eine Beziehung zwischen einer Employee-Entitt und einer OrderEntitt, d. h. Employee Takes Order (Mitarbeiter nimmt Auftrag an).
Beachten Sie, dass ERDs keine einzelnen Entitten oder Beziehungen anzeigen. Zum
Beispiel kann es Tausende von Order-Entitten und Hunderte von Customer-Entitten
geben. Stattdessen zeigen diese Diagramme Entitten- und Beziehungsmengen an,
beispielsweise Tausende von Order-Entitten, aus denen eine Entittenmenge besteht.
Wenn Order oder Customer in einem ERD angezeigt werden, beziehen sie sich
normalerweise auf eine Entittenmenge anstatt auf eine einzelne Entitt.
Entittsbeziehungsdiagramme verwenden bestimmte Entwurfskonventionen. Insbesondere:
Ein Rechteck stellt eine Entittenmenge dar.
Eine Ellipse stellt ein Attribut dar.
Eine Raute stellt eine Beziehung dar.
Durchgezogene Linien verknpfen Entittenmengen mit Beziehungsmengen und
Entittenmengen mit Attributen.
Abbildung 6-2 zeigt ein Beispiel-Entittsbeziehungsdiagramm. In diesem Diagramm
befinden sich die beiden Entittenmengen Customer und Order. Attribute,
dieCustomer zugeordnet sind, sind ID, Name und City. Attribute, die Order
zugeordnet sind, sind OrderID, OrderDate und ShipDate. Die Attribute, dieeinen
Primrschlssel bilden, sind unterstrichen. Die Beziehung zwischen Customer und
Order wird, wie in der Abbildung dargestellt, von Places (erteilt) gebildet:
Customer Places Order =Kunde erteilt Auftrag.
Abbildung 6-2
Ein
Entittsbeziehungsdiagramm

Kunde

Platziert

ID

Aurags-ID

Name

Auragsdatum

Stadt

Versanddatum

Aurag

Innerhalb eines Entittsbeziehungsdiagramms kann eine Beziehung als 1: 1-Beziehung,


1:n-Beziehung oder m:n-Beziehung eingestuft werden. In Abbildung 6-2 ist die Linie,
die die Beziehung Places mit der Entittenmenge Customer verbindet, mit 1
gekennzeichnet. Die Linie zwischen Places und der Entittenmenge Order hat dagegen
die Bezeichnung N. Dies ist ein Beispiel fr eine 1:n-Beziehung. In dieser Beziehung
kann ein Kunde viele Auftrge erteilen, aber ein Auftrag kann nur einen Kunden haben.

ZUORDNEN VON ENTITTSBEZIEHUNGSDIAGRAMMEN ZU EINER


RELATIONALEN DATENBANK
Um ein Entittsbeziehungsdiagramm in eine relationale Datenbank zu konvertieren,
fhren Sie die folgenden Schritte aus:
1. Zuordnen von Entitten: Erstellen Sie zunchst fr jede Entittenmenge im
Diagramm eine Tabelle. Die Attribute werden zu Spalten. Achten Sie darauf, dass die
Primrschlsselattribute auf die Primrschlsselspalten fr die Tabelle festgelegt sind.
2. Zuordnen der Beziehung: Ordnen Sie als Nchstes die 1:n-Beziehung zu, indem Sie
sicherstellen, dass die Tabelle auf der N-Seite der Beziehung die Primrschlsselspalte
der Tabelle auf der 1-Seite der Beziehung enthlt. Fr Abbildung 6-2 kann dies
erreicht werden, indem in der Order-Tabelle eine CustomerID-Spalte hinzugefgt
wird, die der ID-Spalte der Tabelle Customer entspricht. Im Zusammenhang mit
der Order-Tabelle wird die CustomerID auch als Fremdschlssel bezeichnet. Wenn
Sie diese Spalte in der Order-Tabelle hinzufgen, knnen Fragen wie die folgenden
beantwortet werden: Welche Auftrge wurden von einem bestimmten Kunden
erteilt? und Wer ist der Kunde fr einen bestimmten Auftrag?

146 | Lektion 6

Bei einer Zuordnung zu einer relationalen Datenbank generiert das


Entittsbeziehungsdiagramm in Abbildung 6-2 die folgenden Tabellen:
Customers
ID

Name

City

1001

Jane Doe

Berlin

1002

John Doe

Tokio

1003

Howard Stahl

Sydney

Orders
OrderID

CustomerId

OrderDate

ShipDate

101

1001

10/1/2010

10/7/2010

102

1002

10/5/2010

10/10/2010

103

1001

10/4/2010

10/10/2010

Grundlegendes zur Datennormalisierung


Der Datennormalisierungsprozess stellt sicher, dass ein Datenbankentwurf keine
Fehler enthlt, die zum Verlust der Datenintegritt fhren knnen.
Mithilfe der Entittsbeziehungsanalyse knnen Sie sicherstellen, dass Sie die richtigen
Datenelemente fr Ihre Datenbank gefunden haben. Dann wenden Sie ber die
Datennormalisierung einen Satz von Normalisierungsregeln an, um sicherzustellen, dass Sie
den richtigen Datenbankentwurf eingerichtet haben. Das heit, Sie berprfen, ob die Spalten
zu den richtigen Tabellen gehren, damit in Ihrer Datenbank keine Probleme auftreten.
Beispielsweise knnen Sie im Rahmen der Entittsbeziehungsanalyse eine Books-Tabelle
mit den folgenden Spalten erstellen:
Books
BookId

BookName

CategoryId

CategoryName

Leichte Kche

1001

Kochen

Prophezeiung

1002

Mystery & Thriller

Verlagerung 1003

Business

Das Gestndnis

Mystery & Thriller

1002

Dieser Entwurf fr die Books-Tabelle hat leider jedoch drei Probleme:


Einfgeanomalie: Eine Einfgeanomalie ist eine Situation, in der Sie wegen einer
falschen Abhngigkeit keine neuen Daten in eine Datenbank einfgen knnen.
Wenn Ihre Datenbank zum Beispiel eine neue CategoryId und einen neuen
CategoryName fr Geschichtsbcher erhalten soll, ist dies im aktuellen Design nur
mglich, wenn zuerst ein Geschichtsbuch in dieser Kategorie vorhanden ist.

Grundlegendes zu Datenbanken | 147

HINWEIS

Mithilfe der
Normalisierung
knnen Sie zwar
sicherstellen, dass der
Datenbankentwurf
korrekt ist, Sie knnen
aber nicht gewhrleisten,
dass Ihnen von Anfang
die richtigen Daten zur
Verfgung stehen.

Lschanomalie: Eine Lschanomalie ist eine Situation, in der die Lschung eines
Datenelements unbeabsichtigte Verluste anderer Daten verursacht. Wrden Sie zum
Beispiel BookId 3 aus der Books-Tabelle lschen, ginge die Tatsache, dass Sie
jemals einen CategoryName Business hatten, verloren.
Aktualisierungsanomalie: Eine Aktualisierungsanomalie ist eine Situation, in der
aufgrund der Aktualisierung eines einzelnen Datenwerts mehrere Zeilen aktualisiert
werden mssen. Angenommen, Sie mchten zum Beispiel den Kategorienamen
Mystery & Thriller in Mystery ndern. In dem aktuellen Tabellenentwurf mssen
Sie den Kategorienamen fr jedes Buch in dieser Kategorie ndern. Es besteht auch
die Gefahr, dass die Datenbank am Ende inkonsistente Daten enthlt, wenn Sie den
Kategorienamen in der einen, aber nicht in der anderen Zeile aktualisieren.
All diese Probleme knnen mithilfe des Normalisierungsprozesses behoben werden.
Esgibt fnf Normalformen, die in diesem Zusammenhang verwendet werden. In dieser
Lektion werden jedoch nur die ersten drei beschrieben, weil die anderen in den meisten
Fllen nicht erforderlich sind.

GRUNDLEGENDES ZUR ERSTEN NORMALFORM


Eine Tabelle in der ersten Normalform (1NF) darf in keiner Tabellenspalte mehrere Werte
in derselben Datenreihe enthalten. Wenn beispielsweise eine Tabelle Customers Daten
wie folgt speichert, ist diese Tabelle nicht in 1NF, da die PhoneNumber-Spalte in jeder
Zeile mehrere Werte speichert.
Customer

HINWEIS

Nach allgemeiner
Konvention wird der
Name der Spalten
in einer Tabelle
unterstrichen, die Teil
des Primrschlssels
sind.

Id

FirstName

LastName

PhoneNumber

Jane

Doe

(503) 555-6874

John

Doe

(509) 555-7969,
(509) 555-7970

Howard

Steel

(604) 555-3392,
(604) 555-3393

Damit diese Tabelle in 1NF ist, mssten Sie sie in zwei aufteilen:
Customer
Id

FirstName

LastName

Jane Doe

John

Howard Steel

Doe

CustomerPhones
Id

PhoneNumber

(503) 555-6874

(509) 555-7969

(509) 555-7970

(604) 555-3392

(604) 555-3393

148 | Lektion 6

Hier sind die Tabellen Customers und CustomerPhones beide in 1NF. Beide
Tabellen haben einen Primrschlssel (Id in der ersten Tabelle und die Kombination
aus Id und PhoneNumber in der zweiten Tabelle), der eine Beziehung zwischen den
beiden herstellt. Mit einer beliebigen ID fr einen Kunden knnen Sie ganz leicht alle
Telefonnummern fr diesen Kunden finden. LastName ist jedoch kein Primrschlssel,
da ein Nachname doppelte Eintrge haben kann.

HINWEIS

Das Erstellen von wiederholenden Spalten wie PhoneNumber1 und PhoneNumber2


zur Normalisierung der Tabelle Customer wre keine akzeptable Lsung, weil die
erste Normalisierungsform solche wiederholenden Spalten nicht erlaubt.

GRUNDLEGENDES ZUR ZWEITEN NORMALFORM


Eine Tabelle in der zweiten Normalform (2NF) muss die Anforderungen der 1NF erfllen.
Darber hinaus mssen in 2NF alle Nichtschlsselspalten funktional vom gesamten
Primrschlssel abhngig sein.
Um das Konzept von 2NF nachzuvollziehen, mssen Sie zuerst die funktionale
Abhngigkeit verstehen. Betrachten wir das Beispiel der Customers-Tabelle von oben.
Inder Customers-Tabelle ist die Id-Spalte der Primrschlssel, weil er jede Zeile eindeutig
identifiziert. Die Spalten FirstName und LastName sind Nichtschlsselspalten, weil
sie nicht Teil des Primrschlssels sind. FirstName und LastName sind funktional
von Id abhngig, weil Sie mit einem Id-Wert immer einen eindeutigen Wert fr den
entsprechenden FirstName und LastName finden. Es gibt in der Customers-Tabelle
keine Nichtschlsselspalte, die vom Primrschlssel funktional nicht abhngig ist. Die
Tabellen Customer und CustomerPhones sind daher bereits in 2NF.

HINWEIS

2NF gilt nur fr Tabellen mit zusammengesetzten Primrschlsseln (d. h. mehreren


Spalten, die zusammen den Primrschlssel bilden). Die kombinierten Werte aller
Felder in einem zusammengesetzten Primrschlssel mssen eindeutig sein. Wenn eine
Tabelle die 1NF erfllt und der Primrschlssel nur eine Spalte umfasst, entspricht die
Tabelle auch der 2NF.
Betrachten Sie im Gegensatz dazu die folgende Tabelle:
Orders
OrderId

CustomerId

OrderDate

CustomerName

101

10/1/2010

Jane Doe

102

10/5/2010

John Doe

103

10/4/2010

Jane Doe

Hier bezeichnen die Spalten OrderId und CustomerId zusammen eine eindeutige
Zeile und stellen deshalb einen zusammengesetzten Primrschlssel dar. Allerdings
ist die Spalte OrderDate funktional nur von OrderId abhngig, und die Spalte
CustomerName ist nur von CustomerId abhngig. Dies entspricht nicht der 2NF, weil
die Nichtschlsselspalten funktional nur von einem Teil des Primrschlssels abhngig sind.
Eine Mglichkeit, die Orders-Tabelle gem 2NF zu ndern, besteht darin,
CustomerName aus der Tabelle zu entfernen und nur drei Spalten zu haben: OrderId,
CustomerId und OrderDate. Dabei dient nur OrderId als Primrschlssel. In dieser
Lsung sind CustomerId und OrderDate funktional von OrderId abhngig und
entsprechen somit 2NF.

Grundlegendes zu Datenbanken | 149

GRUNDLEGENDES ZUR DRITTEN NORMALFORM


In der dritten Normalform (3NF) mssen die Anforderungen der 2NF erfllt sein. Zudem
darf keine funktionale Abhngigkeit zwischen Nichtschlsselattributen bestehen. Anders
gesagt: Jedes Nichtschlsselattribut sollte ausschlielich vom Primrschlssel abhngig
sein. Betrachten Sie beispielsweise die folgende Tabelle:
Items
ItemId

SupplierId

ReorderFax

101

100

(514) 555-2955

102

11

(514) 555-9022

103

525

(313) 555-5735

ItemId ist hier der Primrschlssel. Jedoch ist ReorderFax eine Faxnummer fr den
Lieferanten und deshalb funktional von der SupplierId abhngig. Um die Anforderung
von 3NF zu erfllen, sollte diese Tabelle in zwei Tabellen aufgeteilt werden: Items
(ItemId, SupplierId) und Supplier (SupplierId, ReorderFax).
Items
ItemId

SupplierId

101 100
102

11

103

525

Supplier
BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie die
Grundlagen des
Managementsystems
fr relationale
Datenbanken?
6.1

SupplierId

ReorderFax

100

(514) 555-2955

11

(514) 555-9022

525

(313) 555-5735

Grundlegendes zu Abfragemethoden fr Datenbanken

FAZIT

Daten bilden den Mittelpunkt vieler Geschftsanwendungen, und als Entwickler


dreht sich ein groer Teil Ihrer Arbeit wahrscheinlich um Daten. In diesem Abschnitt
erfahren Sie, wie Sie mithilfe von Structured Query Language (SQL) und SQL
Server-gespeicherten Prozeduren Daten auswhlen, einfgen, aktualisieren und lschen.
SQL ist eine Sprache, die von den meisten Datenbanksystemen verwendet wird, um die
Informationen in ihren Datenbanken zu verwalten. Mit SQL-Befehlen knnen Sie Daten
abrufen und aktualisieren. Mithilfe von SQL-Befehlen knnen Sie auch Datenbankobjekte
wie Tabellen erstellen und verwalten. Stellen Sie sich SQL als eine Programmiersprache
fr relationale Datenbanken vor. SQL ist jedoch im Gegensatz zum imperativen Ansatz
der gebruchlichsten Programmiersprachen eine deklarative Sprache.

150 | Lektion 6

In SQL teilen Sie der Datenbank mit, was ausgefhrt werden soll, und die Datenbank
entscheidet ber die Art und Weise der Ausfhrung. Zum Beispiel knnen Sie die
Datenbank anweisen, die ersten 10 Zeilen aus einer Tabelle auszuwhlen. Vergleichen
Siedies mit einer imperativen Programmiersprache wie C#, in der Sie detailliert festlegen
mssen, wie die Aufgaben ausgefhrt werden sollen. Beispielsweise mssen Sie eine
Schleife erstellen, die zehn Mal ausgefhrt wird, Variablen einrichten und initialisieren,
Datensatzzeiger verschieben usw.
SQL ist ein ANSI-Standard (American National Standards Institute). Die verschiedenen
Datenbankanbieter haben jedoch ihre eigenen Erweiterungen der Standard-SQL implementiert.
Die Microsoft SQL Server-Implementierung von SQL heit Transact-SQL (T-SQL).
Es gibt zwei Hauptmethoden zur bermittlung von T-SQL an SQL Server. Sie knnen
entweder Ad-hoc-SQL-Anweisungen verwenden, die direkt ausgefhrt werden, oder Sie
knnen gespeicherte Prozeduren verwenden. Gespeicherte Prozeduren sind Sammlungen
von SQL-Anweisungen und Programmlogik, die auf dem Datenbankserver als benannte
Objekte gespeichert werden.

Verwenden von SQL-Abfragen


Die Anweisungen SELECT, INSERT, UPDATE und DELETE sind die vier
wichtigsten SQL-Anweisungstypen zum Bearbeiten von SQL Server-Daten.
Mit Ad-hoc-SQL-Abfragen knnen Sie in einer SQL Server-Datenbank flexibel arbeiten.
In diesem Teil der Lektion werden Sie die Grundlagen ber die vier Haupttypen von
SQL-Anweisungen erfahren, mit denen Sie SQL Server-Daten bearbeiten knnen:
SELECT-Anweisungen ermglichen Ihnen, in einer Datenbank gespeicherte Daten abzurufen.
INSERT-Anweisungen ermglichen Ihnen, einer Datenbank neue Daten hinzuzufgen.
UPDATE-Anweisungen ermglichen Ihnen, vorhandene Daten in einer Datenbank zu ndern.
DELETE-Anweisungen ermglichen Ihnen, Daten aus einer Datenbank zu lschen.

HERSTELLEN EINER VERBINDUNG MIT EINER SQL SERVER-DATENBANK


Sie mssen eine Verbindung mit einer SQL Server-Datenbank herstellen, bevor Sie in
dieser Datenbank enthaltene Informationen bearbeiten knnen.
In dieser bung erfahren Sie, wie Sie mit einer Microsoft SQL Server-Datenbank arbeiten.
Wenn Sie keinen Zugriff auf eine aktuelle Version von SQL Server haben, knnen Sie SQL
Server 2008 Express kostenlos unter http://www.microsoft.com/de-de/server-cloud/products/
sql-server-editions/sql-server-express.aspx herunterladen. In dieser bung wird die SQL ServerBeispieldatenbank Northwind verwendet. Diese Datenbank wird nicht standardmig mit SQL
Server installiert, Sie knnen die Datenbankdatei aber herunterladen, indem Sie die Anweisungen
unter http://msdn.microsoft.com/de-de/%20en-us/library/ms143221.aspx befolgen.
Fhren Sie die folgende bung durch, um sich mit der Nordwind-Datenbank zu verbinden
und die Datenbank mit Visual Studio zu verwenden.
VERBINDEN MIT DER NORTHWIND-DATENBANK
VORBEREITUNG. Bevor Sie diese Schritte ausfhren, mssen Sie Microsoft Visual
Studio starten.

HINWEIS

1. ffnen Sie das Fenster Server-Explorer. Whlen Sie den Knoten Datenverbindungen
aus, und klicken Sie dann auf der Symbolleiste Server-Explorer auf die Schaltflche
Mit Datenbank verbinden.

In Visual Studio Express Edition hat das Fenster Server-Explorer den Namen
Datenbank-Explorer. Sie ffnen es, indem Sie Ansicht > Weitere Fenster >
Datenbank-Explorer auswhlen.

Grundlegendes zu Datenbanken | 151


2. Wechseln Sie im Dialogfeld Verbindung hinzufgen zur Datenbankdatei fr die


Northwind-Datenbank (northwnd.mdf), wie in Abbildung 6-3 dargestellt.

3. Verwenden Sie die Windows-Authentifizierung als Authentifizierungsmodus. Klicken


Sie auf die Schaltflche Verbindung testen, um sicherzustellen, dass Sie mit der
Datenbank eine Verbindung herstellen knnen. Klicken Sie abschlieend auf die
Schaltflche OK, um die Verbindung mit der Datenbank hinzuzufgen.
4. Sobald die Verbindung hergestellt ist, steht die Datenbank unter dem Knoten
Datenverbindungen im Server-Explorer als Verbindung zur Verfgung. Erweitern
Sie die Datenbank, um die Tabellen, gespeicherten Prozeduren und anderen
Datenbankobjekte anzuzeigen, wie in Abbildung 6-4 dargestellt.

Abbildung 6-3
Verbinden mit der
Northwind-Datenbank

Abbildung 6-4
Zugreifen auf die NorthwindDatenbank ber den
Server-Explorer

152 | Lektion 6

5. Klicken Sie mit der rechten Maustaste auf den Knoten NORTHWND.MDF, und whlen
Sie Eigenschaften aus. Das Fenster Eigenschaften sollte wie in Abbildung 6-5
angezeigt werden. Beachten Sie in diesem Fenster die ConnectionString-Eigenschaft.
Sie verwenden den Wert dieser Eigenschaft, um in einer C#-Anwendung eine
Verbindung mit der Northwind-Datenbank herzustellen.

Abbildung 6-5
Eigenschaftenfenster fr die
Northwind-Datenbank

PAUSE. Sie greifen in der nchsten bung aus der Datenbank Northwind auf Daten zu.

AUSFHREN VON SQL-ABFRAGEN


Es gibt mehrere Optionen der Kommunikation mit SQL Server zum Ausfhren von
Datenbankabfragen.
Sie knnen auch mit unterschiedlichen Methoden Abfragen an SQL Server senden.
Verwenden Sie zum Beispiel eine der folgenden Methoden:
Integrierte Entwicklungsumgebung von Visual Studio (IDE)
C#-Anwendung
SQL Query Analyzer
osql-Eingabeaufforderungs-Dienstprogramm
Beachten Sie, dass SQL Query Analyzer und die osql-EingabeaufforderungsDienstprogramme Tools sind, die mit SQL Server installiert werden.
AUSFHREN VON ABFRAGEN IN VISUAL STUDIO
VORBEREITUNG. Um die Visual Studio IDE und C#-Anwendungen zum Ausfhren von
SQL-Abfragen zu verwenden, fhren Sie die folgenden Schritte aus:

1. Whlen Sie die Datenbank Northwind im Server-Explorer aus. Klicken Sie mit der
rechten Maustaste auf die Datenbank, und whlen Sie Neue Abfrage aus. Dadurch
wird ein Abfrage-Designer geffnet, und es wird ein Dialogfeld Tabelle hinzufgen
angezeigt. Whlen Sie die Tabelle Customers aus, und klicken Sie auf Hinzufgen.
Klicken Sie im Dialogfeld Tabelle hinzufgen auf Schlieen.
2. ndern Sie im SQL-Bereich des Abfrage-Designers (der Bereich mit dem Text der
Abfrage) die SQL-Anweisung folgendermaen:
SELECT * FROM Customers
3. Whlen Sie im Men Visual Studio die Option Abfrage-Designer > SQL ausfhren
aus, oder klicken Sie auf der Symbolleiste auf die Schaltflche SQL ausfhren. Die
SQL-Anweisung wird an den SQL Server-Computer zur Ausfhrung gesendet. Die
Ergebnisse sollten wie in Abbildung 6-6 angezeigt werden.

Grundlegendes zu Datenbanken | 153


Abbildung 6-6
Visual Studio-AbfrageDesigner

Im Abfrage-Designer in Visual Studio werden bis zu vier Bereiche angezeigt.


DieBereiche sind von oben nach unten wie folgt:
Diagrammbereich: Dieser Bereich zeigt die an der Abfrage beteiligten Tabellen und
die Beziehungen zwischen diesen Tabellen sowie alle Spalten an, die in den Tabellen
enthalten sind.
Kriterienbereich: Im Kriterienbereich werden die Spalten angezeigt, die als Teil der
Abfrage ausgewhlt wurden, sowie zustzliche Sortier- und Filterinformationen.
SQL-Bereich: In diesem Bereich wird die tatschliche SQL-Anweisung angezeigt,
die ausgefhrt wird.
Ergebnisbereich: Im Ergebnisbereich werden die Ergebnisse (falls vorhanden) nach
Ausfhrung der Abfrage angezeigt.
Die Symbolleiste Abfrage-Designer enthlt Schaltflchen, mit denen Sie beliebige
dieser vier Bereiche ein- oder ausblenden knnen. In der folgenden bung bentigen Sie
nur den SQL-Bereich und den Ergebnisbereich.
AUSFHREN VON ABFRAGEN IN EINER C#-ANWENDUNG
VORBEREITUNG. Um Abfragen in C#-Anwendungen auszufhren, gehen Sie wie folgt vor:
1. Erstellen Sie ein neues Windows-Anwendungsprojekt mit dem Namen QueryCS.
2. Fgen Sie im Windows-Formular ein TextBox-, ein Button- und ein DataGridViewSteuerelement hinzu. Setzen Sie die Eigenschaft MultiLine von TextBox auf True.
Setzen Sie die Eigenschaft Text des Steuerelements Button auf SQL ausfhren.
3. Doppelklicken Sie auf das Steuerelement Button, um einen Ereignishandler fr das
Click-Ereignis zu generieren. ndern Sie den Ereignishandler wie folgt:
private void button1_Click(
object sender, EventArgs e)
{
if (textBox1.TextLength > 0)
{
SelectData(textBox1.Text);
}
}

154 | Lektion 6

4. Fgen Sie die folgende Methode zur Klasse hinzu. Achten Sie darauf, dass Sie die
Verbindungszeichenfolge entsprechend dem lokalen Pfad der Datenbankdatei auf
Ihrem Computer ndern:
private void SelectData(string selectCommandText)
{
try
{
// Change the connection string
// to match with your system.
string selectConnection =
@"Data Source=.\SQLEXPRESS;" +
@"AttachDbFilename=" +
@"c:\SqlSampleDB\NORTHWND.MDF;" +
@"Integrated Security=True;" +
@"Connect Timeout=30;User Instance=True";
SqlDataAdapter dataAdapter =
new SqlDataAdapter(
selectCommandText, selectConnection);
DataTable table = new DataTable();
dataAdapter.Fill(table);
dataGridView1.DataSource = table;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
5. Fgen Sie dem Code Folgendes mithilfe von Direktiven hinzu:

using System.Data;
using System.Data.SqlClient;
Whlen Sie Debuggen > Debuggen starten aus, um das Projekt auszufhren. Geben
Sie eine gltige SQL-Abfrage ein, und klicken Sie auf das Steuerelement Button.
DieAusgabe sollte wie in Abbildung 6-7 angezeigt werden.
Abbildung 6-7
Ausfhren von Abfragen aus
einer C#-Anwendung

Grundlegendes zu Datenbanken | 155

Der Code in dieser bung implementiert eine SelectData-Methode, die ein


SqlDataAdapter-Objekt initialisiert und zum Fllen einer DataTable verwendet. Die
DataTable wird dann als Datenquelle fr die DataGridView-Komponente gebunden. Das
Objekt SqlDataAdapter dient als eine Pipeline zwischen SQL Server und der DataTable
zum Abrufen von Daten. Die Fill-Methode ndert die Daten in der DataTable, um die
Daten in der Datenquelle abzustimmen. selectCommandText wird verwendet, um die
Daten in der Datenquelle zu identifizieren.

AUSWHLEN VON DATEN


Die SELECT-Anweisung wird verwendet, um Daten aus einer oder mehreren
Datenbanktabellen abzurufen.
Die SELECT-Anweisung nimmt in der Regel die folgende Form an:
SELECT Feldliste
FROM Tabellenliste
WHERE Where-Klausel
GROUP BY Group_By-Klausel
HAVING Having-Klausel
ORDER BY Order_By-Klausel

Jede der Codezeilen in der SELECT-Anweisung wird Klausel bezeichnet. Die


SELECT-Klausel und die FROM-Klausel sind erforderlich, die anderen Klauseln sind
jedoch optional. Im Folgenden sehen Sie beispielsweise eine SQL-Anweisung, die nur
dieerforderlichen Klauseln enthlt:
SELECT OrderId, CustomerId
FROM Orders

Wenn Sie alle Felder aus einer Tabelle auflisten mchten, knnen Sie auch die folgende
Verknpfung verwenden, anstatt explizit alle Felder aufzufhren:
SELECT *
FROM Orders

Darber hinaus knnen Sie aus mehreren Tabellen Informationen auswhlen,


zumBeispiel:
Select OrderId, Customers.CustomerId, ContactName
From Orders, Customers

Customers.CustomerId ist als vollqualifizierter Name bekannt, da sowohl der


Tabellen- als auch Feldname angegeben wird. Dies ist erforderlich, da die Orders-Tabelle
und die Customers-Tabelle dieses Feld enthalten. Folglich mssen Sie SQL Server die
Anweisung erteilen, auf welche Tabelle verwiesen werden soll.
Wenn Sie diese Abfrage ausfhren, erhalten Sie viel mehr Datenstze, als Sie vielleicht
erwarten. Das liegt daran, dass Sie SQL Server zwar mitgeteilt haben, welche Tabellen
enthalten sein sollen, aber keine Informationen zur Beziehung der Tabellen angegeben
haben. Infolgedessen wird das Resultset so erstellt, dass alle Zeilen der Tabelle
Customer fr jede Zeile der Tabelle Orders enthalten sind. Diese Art der Verknpfung
wird als Cross Join bezeichnet und ist in diesem Fall nicht sehr hilfreich.
Die Abfrage wre ntzlicher, wenn jeder Auftrag dem entsprechenden Kunden zugeordnet
wre. Das Schlsselwort INNER JOIN kann Ihnen helfen, dies zu erreichen, wie in der
folgenden Abfrage dargestellt wird:
SELECT OrderID, Customers.CustomerId, ContactName
FROM Orders INNER JOIN Customers
ON Orders.CustomerId = Customers.CustomerId

156 | Lektion 6

Diese Abfrage weist SQL Server an, jede Zeile in der Tabelle Orders allen Zeilen in der
Tabelle Customers zuzuordnen, in der die CustomerId des Auftrags der CustomerId
des Kunden entspricht. Da CustomerId in der Tabelle Customers eindeutig ist, entspricht
dies dem Einfgen einer einzigen Zeile fr jeden Auftrag im Resultset. Indiesem Fall hat
das Resultset so viele Zeilen, wie es Zeilen in der Tabelle Orders gibt.
HINWEIS

Ein einfaches
Anfhrungszeichen
bildet das
Standardtrennzeichen
fr Text und Daten in
SQL Server.

Wie verhlt es sich aber, wenn Sie nur einige Zeilen in der Tabelle anzeigen mchten?
Indiesem Fall knnen Sie die WHERE-Klausel verwenden. Die WHERE-Klausel
berprft jede Zeile auf eine Bedingung bestimmt, ob sie in das Resultset aufgenommen
wird. Zum Beispiel:
SELECT *
FROM Orders
WHERE ShipCountry = 'Kanada'

Hier berprft die WHERE-Klausel jede Zeile in der Tabelle Orders darauf,
obShipCountry exakt den Wert Kanada hat. Ist dies der Fall, wird die Zeile dem
Resultset hinzugefgt. Andernfalls wird die Zeile nicht in das Resultset aufgenommen.
Sie knnen auch mehrere Bedingungen in einer einzigen WHERE-Klausel kombinieren.
Zum Beispiel:
SELECT *
FROM Orders
WHERE (ShipCountry = 'Kanada')
AND (OrderDate >= '01/01/97')
AND (OrderDate <= '01/31/97')

Hier filtert die WHERE-Bedingung die Auftrge, in denen das ShipCountry Kanada
istund das Auftragsdatum im Januar 1997 liegt.
In der Standardeinstellung garantiert SQL keine bestimmte Reihenfolge der Ergebnisse.
Jedoch knnen Sie die ORDER BY-Klausel verwenden, um sicherzustellen, dass
die gewnschten Daten in einer bestimmten Reihenfolge zurckgegeben werden.
Umbeispielsweise die Auftrge nach dem Auftragsdatum aufzulisten, knnen Sie die
folgende Abfrage verwenden:
SELECT *
FROM Orders
WHERE (ShipCountry = 'Kanada')
AND (OrderDate >= '01/01/97')
AND (OrderDate <= '01/31/97')
ORDER BY OrderDate

Sie knnen die Sortierreihenfolge mit dem Schlsselwort ASC (aufsteigend) oder
dem Schlsselwort DESC (absteigend) ndern. Die Standardsortierreihenfolge ist
aufsteigend. Daher enthlt die folgende Abfrage die neuesten Auftrge ganz oben:
SELECT *
FROM Orders
WHERE (ShipCountry = 'Kanada')
AND (OrderDate >= '01/01/97')
AND (OrderDate <= '01/31/97')
ORDER BY OrderDate DESC

Grundlegendes zu Datenbanken | 157

Es ist fr Geschftsanwendungen durchaus blich, Aggregat- oder zusammengefasste


Daten anzufordern. Solche Anforderungen knnen mithilfe der GROUP BY-Klausel und
mit den Aggregatfunktionen erfllt werden. Beispielsweise knnen Sie mit der folgenden
Abfrage ermitteln, in welche Lnder Sie die meisten Auftrge versenden:
SELECT ShipCountry, COUNT(ShipCountry) AS OrderCount
FROM Orders
GROUP BY ShipCountry
ORDER BY OrderCount DESC
Dadurch wird der Name des jeweiligen Lands gefolgt von der Gesamtzahl der gelieferten
Auftrge in dieses Land angezeigt. Die ORDER BY-Klausel sortiert das Ergebnis und
platziert die Lnder mit den meisten Auftrgen an der Spitze der Liste.
Sie knnen sich die GROUP BY-Klausel wie das Erstellen von Eimern vorstellen,
indiesem Fall einem Eimer fr jedes Land. Whrend jeder Datensatz vom
Datenbankmodul untersucht wird, wird er in den entsprechenden Eimer einsortiert.
Nachdem dieser Prozess abgeschlossen ist, zhlt das Datenbankmodul die Anzahl von
Datenstzen, die in jedem Eimer gelandet sind, und gibt fr jeden Datensatz eine Zeile
aus. Abbildung 6-8 zeigt den Start des Resultsets aus dieser Abfrage.
Abbildung 6-8
Zusammenfassen von
Informationen mit der
GROUP BY-Klausel

In der vorherigen SQL-Anweisung ist Count eine Aggregatfunktion. Das bedeutet, dass
sie ein Ergebnis basierend auf einer Gruppe von Zeilen zurckgibt. T-SQL untersttzt eine
Reihe verschiedener Aggregatfunktionen. Einige der hufigsten sind wie folgt:
Count: Gibt die Anzahl von Datenstzen zurck.
Sum: Gibt den Gesamtwert in einer bestimmten Spalte zurck.
Avg: Gibt den durchschnittlichen Wert in einer bestimmten Spalte zurck.
Min: Gibt den kleinsten Wert in einer bestimmten Spalte zurck.
Max: Gibt den grten Wert in einer bestimmten Spalte zurck.

AKTUALISIEREN VON DATEN


Die UPDATE-Anweisung wird verwendet, um Daten in Datenbanktabellen zu aktualisieren.
Eine weitere ntzliche SQL-Anweisung ist die UPDATE-Anweisung. Eine UPDATEAnweisung dient zum Aktualisieren oder ndern von Daten. Beispielsweise knnen Sie ein
Feld in einem Datensatz in der Tabelle Customers mit der folgenden Abfrage aktualisieren:
UPDATE Customers
SET ContactName = 'Maria Anderson'
WHERE CustomerId = 'ALFKI'

158 | Lektion 6
HINWEIS

In einer UPDATEAnweisung ist die


SET-Klausel erforderlich
und kann nur einmal
angegeben werden.
HINWEIS

Es wird dringend
empfohlen, dass Sie
die WHERE-Klausel
fr jede UPDATEAnweisung sorgfltig
berprfen. Andernfalls
kann es passieren,
dass Sie Daten fr
mehr Datenstze
als beabsichtigt
aktualisieren.

In dieser Abfrage weist das SET-Schlsselwort SQL Server an, welche Spalten aktualisiert
werden sollen. Das Schlsselwort WHERE gibt die zu aktualisierenden Zeilen an. In der
Tabelle Customers ist CustomerId ein Primrschlssel. Er identifiziert eindeutig eine
einzelne Zeile. Diese UPDATE-Anweisung kann daher hchstens eine Zeile aktualisieren.
Beachten Sie jedoch, dass Sie mehrere Datenstze aktualisieren knnen. Wenn die
WHERE-Klausel mehrere Datenstze auswhlt, werden alle diese Datenstze aktualisiert:
UPDATE Customers
SET Country = 'Vereinigte Staaten'
WHERE Country = 'USA'

Sie knnen auch wie im folgenden Beispiel mit einer UPDATE-Anweisung mehrere
Felder gleichzeitig aktualisieren:
UPDATE Customers
SET ContactName = 'Maria Anderson',
CITY = 'Tokio'
WHERE CustomerId = 'ALFKI'

EINFGEN VON DATEN


Die INSERT-Anweisung wird verwendet, um einer Datenbanktabelle eine oder
mehrere Zeilen hinzuzufgen.
Die INSERT-Anweisung listet die Felder fr die Zieltabelle auf, gefolgt von einer Gruppe
von Werten, die in diese Felder eingefgt werden. Die folgende INSERT-Anweisung fgt
beispielsweise in die Tabelle Order Details eine Zeile ein:
INSERT INTO [Order Details]
(OrderId, ProductId, UnitPrice, Quantity, Discount)
VALUES (10248, 2, 19.00, 2, 0)
Eckige Klammern sind erforderlich, wenn die Namen der Tabellen oder Felder
Leerzeichen enthalten. Hier enthlt der erste Satz von Klammern eine Spaltenliste, undder
zweite Satz enthlt die einzufgenden Werte. Wenn ein Feld ber einen Standardwert
verfgt, NULL sein kann oder ein Identittsfeld ist, nehmen Sie es wie imfolgenden
Beispiel nicht in die Feldliste auf:
INSERT INTO [Order Details]
(OrderId, ProductId, UnitPrice, Quantity)
VALUES (10249, 2, 19.00, 2)
Diese Anweisung funktioniert, obwohl kein Wert fr das Feld Discount angegeben
wurde. Mit dieser Anweisung knnen Sie zudem eine Feldliste erneut anordnen, solange
Sie die Werteliste entsprechend neu anordnen:
INSERT INTO [Order Details]
(ProductId, OrderId, UnitPrice, Quantity)
VALUES (2, 10250, 19.00, 2)
Die INSERT-Anweisung ist nicht darauf beschrnkt, einen einzelnen Datensatz
einzufgen. Es gibt tatschlich ein zweites Format, mit dem die Ergebnisse einer
SELECT-Anweisung in die Zieltabelle eingefgt werden. Beispielsweise fgt diese
Abfrage in der Tabelle Products von jedem Anbieter ein Produkt ein:
INSERT INTO Products
(SupplierId, ProductName, CategoryId)
SELECT SupplierId, 'Almond', 7
FROM Suppliers

Grundlegendes zu Datenbanken | 159

Diese Abfrage funktioniert, indem die Ergebnisse der SELECT-Anweisung erstellt werden
und dann jede von den SELECT-Anweisungen zurckgegebene Zeile in die Zieltabelle
eingefgt wird. Natrlich mssen die Spalten weiterhin korrekt zugeordnet sein.

LSCHEN VON DATEN


Die DELETE-Anweisung wird verwendet, um Daten aus Datenbanktabellen zu lschen.
Die DELETE-Anweisung entfernt Daten aus einer Tabelle. Aus praktischen Grnden und
um das Lschen von Daten aus der gleichen Datenbank zu vermeiden, knnen Sie eine
Tabelle mithilfe einer SELECT-Anweisung wie im folgenden Beispiel kopieren:
SELECT * INTO CustomersCopy
FROM Customers

Diese Anweisung whlt alle Datenstze aus der Tabelle Customers aus und kopiert sie
in eine neue Tabelle namens CustomersCopy.
Um eine einzelne Datenreihe aus der Tabelle CustomersCopy zu lschen, verwenden
Sie die folgende DELETE-Anweisung:
DELETE FROM CustomersCopy
WHERE CustomerId = 'ALFKI'

Gehen Sie dabei vorsichtig vor. Wenn Sie die WHERE-Klausel auslassen, lschen Sie alle
Daten aus der Tabelle:
DELETE FROM CustomersCopy

Verwenden von gespeicherten Prozeduren


Eine gespeicherte Prozedur besteht aus einer Anzahl von SQL-Anweisungen, die in
einer Datenbank gespeichert sind. Gespeicherte Prozeduren knnen von mehreren
Anwendungen verwendet werden.
Im Gegensatz zu Ad-hoc-Abfragen sind gespeicherte Prozeduren Abfragen, die dauerhaft
auf einem SQL Server-Computer gespeichert werden. Sie knnen sich gespeicherte
Prozeduren als die SQL-Entsprechung der C#-Methoden vorstellen.
Gespeicherte Prozeduren haben zwei wichtige Vorteile. Zum einen knnen Sie sie
verwenden, um komplexe SQL-Anweisungen zur spteren Verwendung zu speichern.
Zum anderen kompiliert SQL Server gespeicherte Prozeduren, sodass sie schneller
ausgefhrt werden als Ad-hoc-Abfragen. In diesem Abschnitt der Lektion erfahren Sie,
wie Sie gespeicherte Prozeduren erstellen und ausfhren.

ERSTELLEN UND AUSFHREN EINER GESPEICHERTEN PROZEDUR


Der CREATE PROCEDURE-Befehl kann verwendet werden, um eine neue gespeicherte
Prozedur zu erstellen.
Sie knnen das T-SQL-Schlsselwort CREATE PROCEDURE verwenden, um eine
gespeicherte Prozedur zu erstellen. Sie knnen die CREATE PROCEDURE-Anweisung
von jeder Schnittstelle ausfhren, mit der Sie T-SQL eingeben und ausfhren knnen.

160 | Lektion 6

ERSTELLEN EINER GESPEICHERTEN PROZEDUR IN VISUAL STUDIO


VORBEREITUNG. Um eine gespeicherte Prozedur in Visual Studio zu erstellen, fhren Sie
die folgenden Aktionen aus:

HINWEIS

Die ALTER
PROCEDUREAnweisung knnen
Sie zum ndern
der Definition
einer vorhandenen
gespeicherten Prozedur
verwenden.

1. ffnen Sie Server-Explorer, und whlen Sie die Datenbank Northwind aus. Klicken
Sie mit der rechten Maustaste auf Gespeicherte Prozedur, und whlen Sie die
Option Neue gespeicherte Prozedur hinzufgen aus.
2. Ersetzen Sie im Designer fr gespeicherte Prozeduren den Textbaustein durch
folgenden Code:

CREATE PROCEDURE GetCustomersFromFrance
AS

SELECT * FROM Customers

Where Country = 'Frankreich'

RETURN;
3. Speichern Sie die gespeicherte Prozedur. Die gespeicherte Prozedur ist damit der
Datenbank hinzugefgt worden.
4. Um die gespeicherte Prozedur auszufhren, klicken Sie mit der rechten Maustaste im
Server-Explorer auf die gespeicherte Prozedur, und whlen Sie Ausfhren aus.
Das Ergebnis aus der gespeicherten Prozedur sollte im Ausgabefenster angezeigt werden.
5. Sie knnen diese gespeicherte Prozedur auch im zuvor erstellten QueryCS-Projekt
ausfhren. Anstelle einer SQL-Anweisung geben Sie einfach den Namen der
gespeicherten Prozedur ein, und klicken Sie auf die Schaltflche SQL ausfhren.
Das Ergebnis aus der gespeicherten Prozedur wird im Windows-Formular angezeigt.

ARBEITEN MIT PARAMETRISIERTEN GESPEICHERTEN PROZEDUREN


Parametrisierte gespeicherte Prozeduren ermglichen die bergabe von
Argumenten an SQL Server zur Laufzeit.
Die Fhigkeit, Parameter zu bergeben, steigert die Leistungsfhigkeit gespeicherter
Prozeduren erheblich. Die Parameterwerte knnen den gespeicherten Prozeduren zur
Laufzeit bereitgestellt werden.
Angenommen, Sie mchten den Gesamtumsatz fr einen bestimmten Kunden in der
Northwind-Datenbank erfahren. In diesem Fall sollten Sie CustomerId zur Laufzeit
angeben knnen.
ERSTELLEN EINER PARAMETRISIERTEN GESPEICHERTEN PROZEDUR
VORBEREITUNG. Um eine parametrisierte gespeicherte Prozedur zu erstellen, gehen Sie
folgendermaen vor:

1. ffnen Sie Server-Explorer, und whlen Sie die Datenbank Northwind aus. Klicken
Sie mit der rechten Maustaste auf Gespeicherte Prozedur, und whlen Sie die
Option Neue gespeicherte Prozedur hinzufgen aus.
2. Ersetzen Sie im Designer fr gespeicherte Prozeduren den Textbaustein durch folgenden Code:


CREATE PROCEDURE dbo.GetCustomerSales
(

@CustomerId char(5),
@TotalSales money OUTPUT
)

Grundlegendes zu Datenbanken | 161


AS
SELECT @TotalSales = SUM(Quantity * UnitPrice)

FROM (Customers INNER JOIN Orders
ON Customers.CustomerId = Orders.CustomerId)

INNER JOIN [Order Details]

ON Orders.OrderId = [Order Details].OrderId

WHERE Customers.CustomerId = @CustomerId

RETURN

3. Speichern Sie die gespeicherte Prozedur. Die gespeicherte Prozedur ist damit der
Datenbank hinzugefgt worden.

In dieser gespeicherten Prozedur sind @CustomerId und @TotalSales Parameter.


@CustomerId ist ein Eingabeparameter. Sie mssen einen Wert fr diesen Parameter
angeben, wenn Sie die gespeicherte Prozedur ausfhren. @TotalSales ist ein
Ausgabeparameter. Er gibt einen Wert aus der gespeicherten Prozedur zurck. Wenn Sie
die gespeicherte Prozedur in Visual Studio ausfhren, werden Sie in einem Dialogfenster
aufgefordert, den Wert fr alle Parameter einzugeben (siehe Abbildung 6-9).
Abbildung 6-9
Im Dialogfeld Gespeicherte
Prozedur ausfhren mssen
Sie die Parameterwerte
eingeben

Um diese gespeicherte Prozedur auszufhren, geben Sie ALFKI als Wert fr


@CustomerId und NULL als Wert fr @TotalSales ein. Wenn Sie auf die Schaltflche
OK drcken, wird der berechnete Wert des Ausgabeparameters (@TotalSales)
im Fenster Ausgabe angezeigt.
Sie knnen jedoch eine parametrisierte gespeicherte Prozedur aus dem QueryCS-Projekt
nicht ausfhren, weil der Code vorhandene Parameter nicht akzeptieren kann.
AUSFHREN PARAMETRISIERTER GESPEICHERTER PROZEDUREN AUS C#
VORBEREITUNG. Um parametrisierte gespeicherte Prozeduren aus C# auszufhren,
gehen Sie folgendermaen vor:

1. Erstellen Sie ein neues Windows-Anwendungsprojekt mit dem Namen


ParameterizedSP.
2. Platzieren Sie ein Steuerelement Label auf dem Formular, und legen Sie die
Text-Eigenschaft auf Customer Id fest. Positionieren Sie das Steuerelement TextBox
daneben, und benennen Sie es CustomerIdTextBox. Als Nchstes
platzieren Sie ein Steuerelement Button, und legen Sie seine Name-Eigenschaft
als GetTotalSalesButton und die Text-Eigenschaft als Get Total Sales fest. Schlielich
positionieren Sie ein Steuerelement Label auf dem Formular und benennen es
TotalSalesLabel. Ordnen Sie die Steuerelemente wie in Abbildung 6-10 an.

162 | Lektion 6

3. Doppelklicken Sie auf das Steuerelement Button, um einen Ereignishandler fr das


Click-Ereignis zu generieren. ndern Sie den Ereignishandler wie folgt:
private void GetTotalSalesButton_Click(
object sender, EventArgs e)
{
TotalSalesLabel.Text = String.Format(
"Total Sales: {0}",
GetTotalSales(CustomerIdTextBox.Text));
}

4. Fgen Sie die folgende Methode zur Klasse hinzu. Achten Sie darauf, dass Sie die
Verbindungszeichenfolge entsprechend dem lokalen Pfad der Datenbankdatei auf
Ihrem Computer ndern:
private double GetTotalSales(string customerId)
{
double totalSales = 1;
try
{
// Verbindungszeichenfolge dem
// System entsprechend ndern.
string connectionString =
@"Data Source=.\SQLEXPRESS;" +
@"AttachDbFilename=" +
@"c:\SqlSampleDB\NORTHWND.MDF;" +
@"Integrated Security=True;" +
@"Connect Timeout=30;User Instance=True";
SqlConnection connection =
new SqlConnection(connectionString);
SqlCommand command =
connection.CreateCommand();
command.CommandType =
CommandType.StoredProcedure;
command.CommandText = "GetCustomerSales";
command.Parameters.AddWithValue(
"@CustomerId", customerId);
command.Parameters.AddWithValue(
"@TotalSales", null);
command.Parameters["@TotalSales"].DbType
= DbType.Currency;
command.Parameters["@TotalSales"].Direction
= ParameterDirection.Output;
connection.Open();
command.ExecuteNonQuery();

Grundlegendes zu Datenbanken | 163


totalSales = Double.Parse(
command.Parameters["@TotalSales"]
.Value.ToString());
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return totalSales;
}

5. Fgen Sie dem Code Folgendes mithilfe von Direktiven hinzu:


using System.Data;
using System.Data.SqlClient;

Whlen Sie Debuggen > Debuggen starten aus, um das Projekt auszufhren. Geben Sie
eine gltige CustomerId ein. Die Ausgabe sollte wie in Abbildung 6-10 angezeigt werden.
Abbildung 6-10
Ausfhren parametrisierter
gespeicherter Prozeduren
aus einer C#-Anwendung

Im Code werden Parameter durch SqlParameter-Objekte dargestellt. Der Code legt


den Wert fr den @CustomerId-Parameter fest, fhrt das der gespeicherten Prozedur
entsprechende das SqlCommand-Objekt aus und ruft dann die Value-Eigenschaft des
@TotalSales-Parameters ab.

HINWEIS

Wenn Sie einer Tabelle mit einer Identittsspalte eine neue Zeile hinzufgen, knnen
Sie die SQL Server-Variable @@IDENTITY verwenden, um den Wert der
Identittsspalte fr die neu erstellte Zeile abzurufen.
Der vorherige Code verfgt ber die folgenden Zeilen:
connection.Open();
command.ExecuteNonQuery();
totalSales = Double.Parse(
command.Parameters["@TotalSales"]
.Value.ToString());
connection.Close();

Hier ffnen Sie zuerst die Datenbankverbindung, bearbeiten die Verbindung und schlieen
sie dann. Das Objekt, das Verweise auf die Datenbankverbindung enthlt, verbraucht viele
Systemressourcen und ist deshalb in der Ausfhrung teuer. Es wird dementsprechend
empfohlen, das Objekt zu schlieen, sobald Sie es nicht mehr bentigen. Wenn Sie die
Verbindung nicht schlieen, entsteht im Programm ein Arbeitsspeicherverlust, der die
Leistung beeintrchtigen kann.

164 | Lektion 6
HINWEIS

Das mit der usingAnweisung verwendete


Objekt muss die
Schnittstelle IDisposable
implementieren.
BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie die
verschiedenen
Abfragemethoden fr
Datenbanken?
6.2
BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie die
Methoden fr
Datenbankverbindungen?
6.3

Von C# erhalten Sie auch eine using-Anweisung, mit der Sie sicherstellen knnen, dass teure
Objekte wie Datenbankverbindungen nach der Bearbeitung automatisch geschlossen werden.
Im Folgenden sehen Sie eine alternative Version des oben aufgefhrten Codes, der die
using-Anweisung zum automatischen Schlieen der Datenbankverbindung verwendet:
//Lschen von Objekten mithilfe der using-Anweisung
using (connection)
{
connection.Open();
command.ExecuteNonQuery();
totalSales = Double.Parse(
command.Parameters["@TotalSales"]
.Value.ToString());
}

Beachten Sie, dass die using-Anweisung einen Bereich fr das Verbindungsobjekt


definiert. Wenn der Code das Ende des Bereichs erreicht, wird das Verbindungsobjekt
automatisch geschlossen, und alle Ressourcen werden freigegeben.

Grundlegendes zu den Methoden fr Datenbankverbindungen


FAZIT

Geschftsanwendungen bentigen mglicherweise Daten in unterschiedlichen Formaten.


Beispielsweise arbeiten Sie mit Flatfiles, XML-Dateien und In-Memory-Objekten.
.NET Framework enthlt Klassen, die fr die Arbeit mit Flatfiles, XML-Dateien und In-MemoryObjekten optimiert sind. Die in den Flatfiles gespeicherten Daten knnen mithilfe der Klassen
im System.IO-Namespace verarbeitet werden. Fr die Arbeit mit XML-Daten knnen die
Klassen im System.Xml-Namespace verwendet werden. Schlielich werden zum Arbeiten
mit In-Memory-Objekten wie einem DataSet Klassen im System.Data-Namespace verwendet.
Indenfolgenden Abschnitten erfahren Sie mehr zum Arbeiten mit jedem dieser Datenformate.

Verwenden von Flatfiles


Eine Flatfile ist eine Datenbanktabelle, die in einer eigenstndigen Festplattendatei
gespeichert ist.
Eine Flatfile enthlt in der Regel eine Datenreihe pro Zeile, und die Spalten sind durch
Trennzeichen wie Kommas voneinander getrennt oder haben eine feste Lnge. Eine
Flatfile kann nur Text- oder Binrdaten enthalten. Diese Dateien werden Flatfiles genannt,
um sie von strker strukturierten Speicherformaten zu unterscheiden, wie beispielsweise
relationale Datenbanken und XML-Dateien.
In der Vergangenheit waren vor dem Aufkommen der modernen Datenbanken Flatfiles
eine gngige Methode zum Speichern und Organisieren von Informationen. Flatfiles
knnen auch heute noch eine gute Wahl sein, allerdings nur in begrenzten Szenarios und
nicht als universelle Datenbanken. Flatfiles werden zum Beispiel im Betriebssystem oder
in Anwendungskonfigurationsdateien beim bertragen von Daten in Remotesysteme und
beim Migrieren von Daten zwischen inkompatiblen Systemen verwendet.
Bei der dateibasierten Ein- und Ausgabe in .NET Framework geht es um das Konzept
von Streams und Sicherungsspeicher. Ein Stream ist ein Fluss von Rohdaten, und ein
Sicherungsspeicher ist die Quelle oder das Ziel des Streams. Ein Sicherungsspeicher kann
eine Datentrgerdatei, ein Arbeitsspeicher, eine Netzwerkverbindung usw. sein. Es gibt
Klassen zum Arbeiten mit Streams und Sicherungsspeichern im System.IO-Namespace.

Grundlegendes zu Datenbanken | 165

Wie zuvor bereits erwhnt, knnen Flatfiles entweder im Nur-Text- oder im Binrformat
sein. Textdateien werden oft als Textzeilen durch Zeilenendezeichen getrennt organisiert.
Die StreamReader-Klasse und die StreamWriter-Klasse bieten Ihnen eine einfache
Mglichkeit, solche Textdateien zu bearbeiten.
Binre Dateien speichern den Inhalt als Bytesequenz. Obwohl Binrdateien nicht
wie Textdateien fr Menschen lesbar sind, knnen sie eine Vielzahl von Daten wie
Bilder, Sounds, Videos usw. speichern. Sie bentigen immer ein Computerprogramm,
umden Inhalt einer binren Datei zu interpretieren. Die BinaryReader-Klasse und die
BinaryWriter-Klasse bieten eine einfache Methode zur Bearbeitung binrer Dateien.
In der folgenden bung knnen Sie Spalten aus der Tabelle Customers auswhlen und
in eine Textdatei schreiben. Spter ffnen Sie diese Textdatei und zeigen ihren Inhalt im
Konsolenfenster an.
LESEN AUS EINER UND SCHREIBEN IN EINE TEXTDATEI
VORBEREITUNG. Gehen Sie folgendermaen vor, um aus einer Textdatei zu lesen und in
eine Textdatei zu schreiben:
1. Erstellen Sie ein neues Konsolenanwendungsprojekt namens WorkingWithTextFiles.
2. Fgen Sie der Program-Klasse den folgenden Code hinzu. Sie mssen den Pfad zur
Datenbank Northwind im Code korrigieren:
static void Main(string[] args)
{
string myDocumentsPath =
Environment.GetFolderPath(
Environment.SpecialFolder.MyDocuments);
CopyDataToTextFile(myDocumentsPath
+ @"\CustomerList.txt");
DisplayTextFile(myDocumentsPath
+ @"\CustomerList.txt");
}
static private void CopyDataToTextFile(
string fileName)
{
try
{
// Verbindungszeichenfolge dem
// System entsprechend ndern.
string connectionString =
@"Data Source=.\SQLEXPRESS;" +
@"AttachDbFilename=" +
@"c:\SqlSampleDB\NORTHWND.MDF;" +
@"Integrated Security=True;" +
@"Connect Timeout=30;User Instance=True";
SqlConnection connection =
new SqlConnection(connectionString);
SqlCommand command =
connection.CreateCommand();

166 | Lektion 6
command.CommandText =
"SELECT CustomerId, CompanyName,"
+ "ContactName, Phone FROM Customers";
using (connection)
{
connection.Open();
SqlDataReader reader =
command.ExecuteReader();
using (StreamWriter sw =
new StreamWriter(fileName))
{
while (reader.Read())
{
string customerRow =
String.Format("{0}, {1}, {2}, {3}",
reader.GetValue(0),
reader.GetValue(1),
reader.GetValue(2),
reader.GetValue(3));
sw.WriteLine(customerRow);
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
static void DisplayTextFile(string fileName)
{
try
{
using (StreamReader sr =
new StreamReader(fileName))
{
string line;
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
}

Grundlegendes zu Datenbanken | 167

catch (Exception ex)


{
Console.WriteLine(ex.Message);
}
}
3. Fgen Sie Folgendes mithilfe von Direktiven dem Code hinzu:
using System.Data.SqlClient;
using System.IO;
4. Erstellen Sie das Programm, und fhren Sie es aus. berprfen Sie den Ordner
Eigene Dateien auf den Dateinamen CustomerList.txt, und stellen Sie sicher, dass
die Kundendaten geschrieben wurden. berprfen Sie auerdem die Ausgabe im
Konsolenfenster auf den Inhalt der Datei.

Der Code in dieser bung ffnet zuerst ein neues StreamWriter-Objekt und ruft die
WriteLine-Methode mehrmals auf, um Text in eine Textdatei zu schreiben. Anschlieend
wird ein StreamReader-Objekt erstellt, um Text aus der Datei zu lesen, die soeben mithilfe
der ReadLine-Methode erstellt wurde. Wenn keine Daten mehr zu lesen sind, gibt das
ReadLine-Objekt einen NULL-Wert zurck. Der Code verwendet diesen Wert, um zu
bestimmen, wann das Lesen aus der Textdatei beendet werden soll.

Verwenden von XML


Extensible Markup Language (XML) ist ein textbasiertes Format zur Darstellung
strukturierter Daten.
In XML knnen Sie sowohl Daten als auch Metadaten (Informationen ber die Daten)
speichern. Beispielsweise stellt das folgende XML Daten fr zwei Kunden dar:
<?xml version="1.0" encoding="utf-8"?>
<!--Kundenliste-->
<Customers>
<Customer Id="ALFKI">
<CompanyName>Alfreds Futterkiste</CompanyName>
<Phone>030-0074321</Phone>
</Customer>
<Customer Id="EASTC">
<CompanyName>Eastern Connection</CompanyName>
<Phone>(171) 555-0297</Phone>
</Customer>
</Customers>

Auch ohne XML-Kenntnisse knnen Sie den Inhalt dieser Datei verstehen, indem Sie
sie sich einfach ansehen. XML besteht aus Tags (in spitzen Klammern) und Daten.
Tags erscheinen immer in Paaren. Dabei wird jedes Starttag durch ein Endtag ergnzt.
Beispielsweise ist <Customers> ein Starttag und </Customers> das entsprechende Endtag.
Die erste Zeile eines XML-Dokuments ist die XML-Deklaration:
<?xml version="1.0" encoding="utf-8"?>

XML-Tags, die mit <? beginnen, werden als Verarbeitungsanweisungen bezeichnet.


Diese Verarbeitungsanweisung informiert, dass das Dokument ein
XML-Dokument ist, den Spezifikationen fr XML-Version 1.0 entspricht und den
UTF-8-Zeichensatz fr die Datenelemente verwendet.

168 | Lektion 6

Ein Starttag und Endtag werden zusammen mit dem Inhalt als ein Element bezeichnet.
Im Folgenden sehen Sie beispielsweise ein einzelnes XMLElement aus dem obigen
Dokument:
<Phone>030-0074321</Phone>

Dieser Code definiert ein Element mit dem Namen Phone, dessen Wert 030-0074321
ist. Elemente knnen ineinander verschachtelt sein, drfen sich aber nicht berlappen.
Beispielsweise ist das folgende XML wegen der berlappung zwischen den Elementen
CompanyName und Phone ungltig:
<Customer Id="EASTC">
<CompanyName>Eastern Connection<Phone>
</Phone>(171) 555-0297</CompanyName>
</Customer>
</Customers>

XML-Dokumente sind hierarchisch strukturiert. Jedes XML-Dokument enthlt ein


einzelnes Stammelement, das alle anderen Knoten enthlt. Ein XML-Dokument kann
daher als Knotenstruktur bildlich dargestellt werden.
Elemente knnen Attribute enthalten. Ein Attribut ist eine Information, die ein Element
genauer beschreibt. Zum Beispiel:
<Customer Id="ALFKI">

Hier enthlt das Customer-Element ein Attribut, dessen Name Id und dessen Wert ALFKI ist.
Zudem kann ein XML-Dokument Kommentare enthalten. Kommentare beginnen mit den
Zeichen <!-- und enden mit den Zeichen -->.
XML ist oft komplexer als die Erluterungen in diesem Abschnitt. Mit diesen Grundlagen
knnen Sie jedoch die meisten XML-Dokumente verstehen, die Sie ausfhren, bis Sie
tiefer in die Arbeit mit XML einsteigen.
Es gibt viele Mglichkeiten der Arbeit mit XML-Daten. Die Klassen zur Verarbeitung
von XML sind im System.Xml-Namespace organisiert. Dieser Abschnitt der Lektion
konzentriert sich auf die folgenden hufig verwendeten Klassen:
XmlReader und XmlWriter: Diese Klassen ermglichen ein schnelles
Vorwrtslesen und -schreiben von XML-Daten ohne Zwischenspeicherung.
XmlDocument: Diese Klasse ist eine In-Memory-Darstellung von XML-Daten und
ermglicht die Navigation und Bearbeitung des XML-Dokuments.
In der folgenden bung verwenden Sie die XmlReader-Klasse, um den Namen der
XML-Datei Customers.xml sequenziell und nur vorwrts zu lesen.
LESEN AUS EINER XML-DATEI
VORBEREITUNG. Gehen Sie folgendermaen vor, um aus einer XML-Datei zu lesen:

1. Erstellen Sie ein neues Konsolenanwendungsprojekt namens WorkingWithXmlReader.


2. Fgen Sie den folgenden Code zur Main-Methode der Program-Klasse hinzu:
using (XmlReader reader =
XmlReader.Create("Customers.xml"))
{
while (reader.Read())
{

Grundlegendes zu Datenbanken | 169


if (reader.IsStartElement())
{
switch (reader.Name)
{
case "CompanyName":
if (reader.Read())
{
Console.Write(
"Company Name: {0}, ",
reader.Value);
}
break;
case "Phone":
if (reader.Read())
{
Console.WriteLine(
"Phone: {0}", reader.Value);
}
break;
}
}
}

}
3. Als Nchstes fgen Sie dem Programm die folgende using-Direktive hinzu:
using System.Xml;
4. Jetzt fgen Sie dem Projekt eine neue XML-Datei mit dem Namen Customers.xml
hinzu. Stellen Sie sicher, dass die XML-Datei die folgenden Daten enthlt:

<?xml version="1.0" encoding="utf-8"?>


<!--Kundenliste-->
<Customers>
<Customer Id="ALFKI">
<CompanyName>Alfreds Futterkiste</CompanyName>
<Phone>030-0074321</Phone>
</Customer>
<Customer Id="EASTC">
<CompanyName>Eastern Connection</CompanyName>
<Phone>(171) 555-0297</Phone>
</Customer>
</Customers>
Erstellen Sie das Programm. Kopieren Sie die Datei Customers.xml in den
ausfhrbaren Programmordner. Fhren Sie das Programm aus. Eine Liste aller
Firmennamen und Telefonnummern sollte angezeigt werden.

170 | Lektion 6

Der Code in dieser bung erstellt mithilfe der XmlReader.Create-Methode zuerst eine
neue XmlReader-Instanz. Dadurch wird eine Ausnahme ausgelst, wenn die Datei nicht
gefunden wird. Das Programm wird beendet, wenn die XmlReader.Read-Methode nichts
mehr zu lesen hat. Sie knnen Eigenschaften, wie Name und Value verwenden,
umauf verschiedene XML-Abschnitte zuzugreifen.

Verwenden von DataSet


Ein DataSet ist eine In-Memory-Darstellung relationaler Daten.
Ein DataSet ist eine In-Memory-Darstellung relationaler Daten. Wie eine Datenbank kann
ein DataSet Tabellen und Relationen sowie Datenintegrittseinschrnkungen enthalten,
wie zum Beispiel Unique-Einschrnkungen oder Fremdschlsseleinschrnkungen. In der
Regel wird ein DataSet erstellt, indem Daten aus einer Datenquelle wie einer Datenbank
abgerufen werden. Wenn Sie ein DataSet erstellt haben, knnen Sie mit allen Daten im
DataSet arbeiten, auch wenn der Link zur Datenquelle vorbergehend nicht verfgbar ist.
Wenn nderungen an den Daten vorgenommen werden, wird nur die In-Memory-Kopie
der Daten aktualisiert. Eine Verbindung mit der Datenquelle ist nur erforderlich, wenn die
Datenquelle mit den nderungen aus dem DataSet aktualisiert werden soll. DataSet ist
sehr ntzlich fr die Erstellung von nicht verbundenen Anwendungen. Nicht
verbundene Anwendungen sind Anwendungen, die auch ohne eine stndige Verbindung
mit Netzwerkressourcen wie Datenbanken funktionieren.
Alle DataSet-bezogenen Klassen sind Bestandteil des System.Data-Namespaces.
EinDataSet-Objekt wird mithilfe der DataSet-Klasse erstellt. Das DataSet besteht aus
einer Sammlung von DataTable-Objekten. Eine DataTable ist mit einer relationalen
Datenbanktabelle vergleichbar. Ein DataTable-Objekt besitzt eine Sammlung von
DataColumn-Objekten, die die Spalten in der Tabelle darstellen. Die Zeilen in der
DataTable werden durch die DataRow-Sammlung dargestellt.
Der DataAdapter fungiert als Brcke zwischen Datenquelle und DataSet. Der DataAdapter
speichert die Datenverbindung und die Datenbefehle zum Herstellen einer Verbindung mit
der Datenquelle. Der DataAdapter bietet auch Befehle zum Abrufen von Daten aus der
Datenquelle und Befehle zum Aktualisieren der Datenquelle mit beliebigen nderungen.
.NET Framework bietet fr die Arbeit mit verschiedenen Typen von Datenquellen drei
DataAdapter-Klassen:
Die OdbcDataAdapter-Klasse wird verwendet, um mit ODBC-Datenquellen zu arbeiten.
Die OdbcDataAdapter-Klasse ist Teil des System.Data.Odbc-Namespaces.
Die OleDbDataAdapter-Klasse wird zur Arbeit mit OLE DB-Datenquellen verwendet.
Die OleDbDataAdapter-Klasse ist Teil des System.Data.OleDb-Namespaces.
Die SqlDataAdapter-Klasse dient zum Arbeiten mit SQL Server-Datenbanken.
Die SQLDataAdapter-Klasse ist Teil des System.Data.SqlClient-Namespaces.

HINWEIS

Sie knnen auch mit einer SQL Server-Datenbank eine Verbindung herstellen,
indem Sie die Klassen OdbcAdapter und OleDbAdapter verwenden. Die
SQLDataAdapter-Klasse ist jedoch fr SQL Server optimiert. Daher empfiehlt sich bei
der Arbeit mit SQL Server die Verwendung der SQLDataAdapter-Klasse.
In einer typischen Anwendung, die ein DataSet erstellt und aktualisiert, mssen Sie die
folgenden Schritte ausfhren:
1. Erstellen Sie jede DataTable im DataSet, und fllen Sie sie mit Daten aus der
Datenquelle aus, indem Sie einen DataAdapter verwenden.

Grundlegendes zu Datenbanken | 171

2. ndern Sie die Daten in den einzelnen DataTable-Objekten, indem Sie


DataRow-Objekte hinzufgen, aktualisieren oder lschen.
3. Rufen Sie die AcceptChanges-Methode fr das DataSet auf. Diese Methode stellt
eine Verbindung mit den ursprnglichen Datenquellen her. Sie aktualisiert sie mit
allen nderungen, die seit dem letzten Ladevorgang an dem DataSet oder seit dem
letzten Aufruf von AcceptChanges vorgenommen wurden. Alternativ rufen Sie
die RejectChanges-Methode auf, um alle nderungen zu verwerfen, die am DataSet
seit dem letzten Ladevorgang oder dem letzten Aufruf von AcceptChanges
vorgenommen wurden.
In der folgenden bung verwenden Sie die bisher besprochenen Klassen. Lesen Sie mit ihnen
Daten aus der SQL Server-Datenbank Northwind in ein DataSet ein, und durchlaufen Sie
dann die Tabelle Customer, um die Auftragsnummern fr jeden Kunden anzuzeigen.
LESEN AUS EINEM IN-MEMORY-DATASET-OBJEKT
VORBEREITUNG. Gehen folgendermaen Sie vor, um aus einem In-Memory-DataSetObjekt zu lesen:

1. Erstellen Sie ein neues Konsolenanwendungsprojekt namens WorkingWithDataSet.


2. Ersetzen Sie den Code in der Program-Klasse durch den folgenden Code. Achten Sie
darauf, dass Sie die Verbindungszeichenfolge entsprechend dem lokalen Pfad der
Datenbankdatei auf Ihrem Computer ndern:
static void Main(string[] args)
{
WorkingWithDataSet();
}
static void WorkingWithDataSet()
{
string cString = @"Data Source=.\SQLEXPRESS;"
+ @"AttachDbFilename=B:\SqlSampleDB\NORTHWND.MDF;"
+ "Integrated Security=True;"
+ "Connect Timeout=30;User Instance=True";
SqlConnection northwindConnection =
new SqlConnection(cString);

string customerCommandText =
"SELECT * FROM Customers";
SqlDataAdapter customerAdapter =
new SqlDataAdapter(
customerCommandText, northwindConnection);
string ordersCommandText =
"SELECT * FROM Orders";
SqlDataAdapter ordersAdapter =
new SqlDataAdapter(
ordersCommandText, northwindConnection);

172 | Lektion 6
DataSet customerOrders = new DataSet();
customerAdapter.Fill(
customerOrders, "Customers");
ordersAdapter.Fill(
customerOrders, "Orders");
DataRelation relation =
customerOrders.Relations.Add("CustomerOrders",
customerOrders.Tables["Customers"]
.Columns["CustomerID"],
customerOrders.Tables["Orders"]
.Columns["CustomerID"]);
foreach (DataRow customerRow in
customerOrders.Tables["Customers"].Rows)
{
Console.WriteLine(customerRow["CustomerID"]);
foreach (DataRow orderRow in
customerRow.GetChildRows(relation))
Console.WriteLine("\t" +
orderRow["OrderID"]);
}
Console.WriteLine(
Drcken Sie eine beliebige Taste, um fortzufahren... . .");
Console.ReadKey();
}

3. Fgen Sie dem Programm die folgende using-Direktive hinzu:


using System.Data;
using System.Data.SqlClient;

BEREIT FR DIE
ZERTIFIZIERUNG
Verstehen Sie die
verschiedenen
Verbindungsmethoden
fr Datenbanken?
6.3

HINWEIS

4. Whlen Sie Projekt > Als Startprojekt festlegen, um das Projekt als Startprojekt fr die
Lsung festzulegen.
5. Whlen Sie Debuggen > Debuggen starten (oder drcken Sie F5), um das Programm
auszufhren. Beachten Sie, dass im Konsolenfenster alle Kunden aus der Tabelle
Customers aufgefhrt sind. Jede CustomerID wird von der dem Kunden
entsprechenden OrderID gefolgt.

Im Code in dieser bung wird zuerst ein DataSet mit zwei DataTable-Objekten (Customers
und Orders) erstellt. Das DataSet erstellt auch ein DataRelation-Objekt, das die Beziehung
zwischen der Tabelle Customers und der Tabelle Orders fr die CustomerID-Spalte
herstellt. Mit dieser Beziehung knnen Sie die GetChildRow-Methode fr eine Kundenzeile
aufrufen, um die jedem Kunden entsprechenden Auftragszeilen abzurufen.

Ein DataSet kann Daten als XML-Dokumente lesen und schreiben. Um Daten als XML
zu schreiben, verwenden Sie die WriteXml-Methode der DataSet-Klasse. Verwenden
Sie zum Lesen von XML-Dokumentdaten die ReadXml-Methode der DataSet-Klasse.

Grundlegendes zu Datenbanken | 173

ZUSAMMENFASSUNG DER VERMITTELTEN KENNTNISSE


In dieser Lektion haben Sie Folgendes gelernt:
In einer relationalen Datenbank werden Informationen in Tabellen organisiert. Eine
Tabelle ist eine Liste mit Zeilen und Spalten.
Das Entwerfen relationaler Datenbanken ist der Prozess zur Bestimmung der
passenden relationalen Datenbankstruktur, mit der die Geschftsanforderungen
erfllt werden knnen.
Entittsbeziehungsdiagramme werden zur Modellierung von Entitten, deren
Attributen und den Beziehungen zwischen Entitten verwendet. Mithilfe der
Entittsbeziehungsdiagramme knnen Sie bestimmen, welche Daten in einer
Datenbank gespeichert werden mssen.
Der Datennormalisierungsprozess stellt sicher, dass ein Datenbankentwurf keine
Fehler enthlt, die zum Verlust der Datenintegritt fhren knnen. Die meisten
Entwurfsprobleme knnen gelst werden, indem sichergestellt wird, dass die
Tabellen die Anforderungen der dritten Normalform erfllen.
Structured Query Language (SQL) enthlt Anweisungen wie z. B. SELECT, INSERT,
UPDATE und DELETE, um mit relationalen Daten zu arbeiten.
Eine gespeicherte Prozedur besteht aus einer Anzahl von SQL-Anweisungen,
dieineiner Datenbank gespeichert sind. Gespeicherte Prozeduren knnen
vonmehreren Anwendungen verwendet werden.
Die XmlReader-Klasse und die XmlWriter-Klasse bieten eine schnelle, Vorwrtsmethode
zum Lesen oder Schreiben von XML-Daten ohne Zwischenspeicherung. Die
XmlDocument-Klasse ist eine In-Memory-Darstellung von XML-Daten und ermglicht
die Navigation im XML-Dokument und dessen Bearbeitung.
Die DataSet-Klasse stellt eine In-Memory-Darstellung von relationalen Daten dar.
Die DataAdapter-Klasse fungiert als Brcke zwischen Datenquelle und DataSet.
DerDataAdapter speichert die Datenverbindung und die Datenbefehle zum
Herstellen einer Verbindung mit der Datenquelle.

Wissenstest

Lckentext
Ergnzen Sie die Lcken der folgenden Stze mit dem richtigen Wort oder den richtigen Wrtern.
1. Eine Tabelle in der _______________ darf in keiner Spalte mehrere Werte in
derselben Datenreihe enthalten.
2. In der _______________ mssen alle Nichtschlsselspalten funktional vom
gesamten Primrschlssel abhngig sein.
3. In der _______________ darf keine funktionale Abhngigkeit zwischen
Nichtschlsselattributen bestehen.
4. Die grundlegenden Entwurfsblcke in einem Entittsbeziehungsdiagramm sind
_______________, _______________ und _______________.
5. Die _______________-Klausel in einer SELECT-Anweisung berprft jede Zeile
auf eine Bedingung und entscheidet ber die Aufnahme in das Resultset.
6. Das mit der using-Anweisung verwendete Objekt muss die Schnittstelle
_______________ implementieren.
7. Die _______________-Anweisung aus T-SQL kann zur Erstellung einer
gespeicherten Prozedur verwendet werden.

174 | Lektion 6

8. Whrend des _______________-Prozesses wenden Sie einen Regelsatz an,


umsicherzustellen, dass Ihr Datenbankentwurf die Datenintegritt untersttzt
undzuknftige Wartungen vereinfacht.
9. Die Klassen zur Verwendung von Streams und Sicherungsspeichern sind im
_______________-Namespace enthalten.
10. Das _______________-Format dient zur hierarchischen Darstellung von Daten.

Multiple-Choice
Kreisen Sie den Buchstaben ein, der der Antwort am besten entspricht.
1. Ihre Anwendung muss jedes Produktbild in einer Festplattendatei speichern. Sie
mchten die Gre dieser Festplattendatei minimieren. Welche der folgenden Objekte
sollten Sie verwenden, um die Datei zu schreiben?
a. FileStream
b. StreamWriter
c. BinaryWriter
d. XmlWriter
2. Ihr C#-Programm muss die Gesamtzahl der Kunden in einer Datenbank zurckgeben.
Das Programm wird mehrmals tglich verwendet. Welches ist der schnellste Weg,
aufdem diese Informationen von Ihrem Programm geliefert werden knnen?
a. Schreiben Sie eine SQL-Abfrage, und verwenden Sie die SqlCommand.
ExecuteScalar-Methode, um die Abfrage auszufhren.
b. Erstellen Sie eine gespeicherte Prozedur, um die Gesamtzahl der Kunden
zurckzugeben, und verwenden Sie dann die SqlCommand.ExecuteScalarMethode zum Ausfhren der gespeicherten Prozedur.
c. Schreiben Sie eine SQL-Abfrage, und verwenden Sie die SqlDataAdapter.
Fill-Methode, um die Abfrage auszufhren.
d. Erstellen Sie eine gespeicherte Prozedur, um die Gesamtzahl der Kunden
zurckzugeben, und verwenden Sie dann die SqlDataAdapter.Fill-Methode
zumAusfhren der gespeicherten Prozedur.
3. Sie mssen in den Datenstzen einer Produkttabelle bestimmte Produkte als
Auslaufartikel markieren. Die nderung soll nur vorgenommen werden, wenn die
Werte fr UnitsInStock und UnitsOnOrder beide Null sind. Welche der folgenden
SQL-Anweisungen sollten Sie verwenden?
a. INSERT
b. SELECT
c. UPDATE
d. DELETE
4. Sie mssen die Region-Felder fr Kunden in Japan aktualisieren. Dazu schreiben
Siedie folgende SQL UPDATE-Anweisung:
UPDATE Customers
SET Region = 'EastAsia'
Sie testen die Abfrage mit einer Testdatenbank und finden heraus, dass mehr
Datenstze betroffen sind als erwartet. Sie mssen die SQL-Anweisung korrigieren.
Was mssen Sie tun?
a. Fgen Sie der UPDATE-Anweisung eine WHERE-Klausel hinzu.
b. Fgen Sie der UPDATE-Anweisung eine weitere SET-Klausel hinzu.
c. Fgen Sie der UPDATE-Anweisung eine GROUP BY-Klausel hinzu.
d. Fgen Sie der UPDATE-Anweisung eine HAVING-Klausel hinzu.
5. Sie entwickeln eine Anwendung, die eine Liste von Kunden aus einer SQL ServerDatenbank abruft. Die Anwendung soll die Liste einmal sequenziell durchlaufen und
dabei jeden Kundendatensatz verarbeiten. Welche der folgenden Klassen sollten Sie
verwenden, um die Kundenliste mit der hchstmglichen Leistung zu speichern?
a. DataSet
b. DataTable
c. DataView
d. SqlDataReader

Grundlegendes zu Datenbanken | 175

6. Die von Ihnen zu entwickelnde Anwendung muss Daten aus einer Flatfile lesen, die
Elemente mit folgender Struktur enthlt: Ganzzahlschlssel (fnfstellig), gefolgt vom
Kundennamen (20 Zeichen), gefolgt von zwei Datums- und Zeitfeldern. Welche der
folgenden Klassen sollten Sie verwenden?
a. FileStream
b. StreamReader
c. BinaryReader
d. DataReader
7. Sie entwickeln eine Anwendung, die Daten aus einer SQL Server-Sicht in ein DataSet
kopieren muss. Sie geben dem DataSet-Objekt den Namen dsData. Welche der
folgenden Methoden sollten Sie verwenden, um die Daten zu kopieren?
a. Fill
b. InsertCommand
c. SelectCommand
d. Update
8. Sie entwickeln eine Anwendung, die Kunden und ihre Auftrge verwaltet. In welcher
der folgenden Situationen ist die Implementierung mit gespeicherten Prozeduren in
der Anwendung nicht angebracht?
a. Abrufen der Liste aller Kunden in der Datenbank
b. Abrufen der Liste aller Auftrge fr bestimmte Kunden
c. Einfgen eines neuen Auftrags in die Orders-Tabelle
d. Ad-hoc-Abfragen durch den Datenbankadministrator
9. Ihre Anwendung stellt eine Verbindung mit einer SQL Server-Datenbank her, die eine
Tabelle Employees mit folgenden Spalten enthlt:
EmployeeID (int, identity)
EmployeeType (char(1))
EmployeeDate (datetime)
Sie mssen eine Abfrage schreiben, die aus der Tabelle alle Zeilen lscht, in denen
der EmployeeType-Wert entweder C oder T ist. Es sollen keine weiteren Zeilen
gelscht werden. Welche Anweisung sollten Sie verwenden?
a. DELETE FROM Employees
WHERE EmployeeType LIKE '[CT]'
b. DELETE FROM Employees
WHERE EmployeeType LIKE '[C-T]'
c. DELETE FROM Employees
WHERE EmployeeType LIKE 'C' OR 'T'
d. DELETE * FROM Employees
WHERE EmployeeType IN ('C', 'T')
10. Ihre Anwendung enthlt ein SqlDataAdapter-Objekt mit dem Namen
sqlDataAdapter, das eine Verbindung mit der Employees-Tabelle herstellt. Ihre
Anwendung enthlt zudem ein DataSet-Objekt mit dem Namen dsEmployees,
dasauf SQLDataAdapter basiert. Welche Codezeile sollten Sie verwenden,
um die Daten aus der Datenbank in das DataSet-Objekt zu laden?
a. dsEmployees = sqlDataAdapter.Fill("Employees");
b. sqlDataAdapter.Fill("dsEmployees", "Employees");
c. sqlDataAdapter.Fill(dsEmployees);
d. sqlDataAdapter.Fill(dsEmployees, "Employees");

176 | Lektion 6

Kompetenztest
Szenario 6-1: Erstellen eines Entittsbeziehungsdiagramms
Ein Unternehmen hat eine Reihe von Mitarbeitern. Jeder Mitarbeiter kann einem oder
mehreren Projekten zugewiesen sein. Zustzlich arbeiten an jedem Projekt ein oder
mehrere Mitarbeiter. Zeichnen Sie ein Entittsbeziehungsdiagramm fr diese Situation.

Szenario 6-2: Erstellen und Ausfhren einer gespeicherten Prozedur


Sie mssen oft eine Liste der Kunden aus einem bestimmten Land generieren. Daher
entscheiden Sie sich, eine gespeicherte Prozedur zu erstellen, die den Namen des Lands
als Parameter bernimmt und alle Kunden aus diesem Land zurckgibt. Wie wrden Sie
vorgehen?
Kenntnistest

Szenario 6-3: Normalisieren von Tabellen


Sie konvertieren ein Entittsbeziehungsdiagramm in Tabellen. Sie verwenden folgenden
Tabellenentwurf:
Books
BookId

BookName

CategoryId

CategoryName

Leichte Kche

1001

Kochen

Prophezeiung

1002

Mystery & Thriller

Verlagerung 1003

Business

Das Gestndnis

Mystery & Thriller

1002

Sie mssen die Normalisierungsregeln anwenden, um die Datenintegritt sicherzustellen.


Wie wrden Sie sicherstellen, dass die Tabelle Books der dritten Normalform
entspricht?

Szenario 6-4: Erstellen und Behandeln von Ereignissen


Sie arbeiten an einer Anwendung, in der Sie Kundeninformationen aus der CustomersTabelle der Northwind-Datenbank in einer XML-Datei speichern mssen. Diese
XML-Datei soll fr unterschiedliche Datenintegrationsaufgaben verwendet werden.
Sie mssen sicherstellen, dass der XML-Stammknoten Customers genannt wird.
DerStammknoten muss fr jeden Kunden der Customers-Tabelle einen Knoten
Customer enthalten. Wie lsen Sie diese Aufgabe?

AnhangA

Grundlagen der Softwareentwicklung,


Prfung 98-361
Lernzieltabelle

Nummer des Themas

Lektionsnummer

Computerspeicherung und Datentypen verstehen.

1.1

1. 2

Entscheidungsstrukturen von Computern verstehen.

1.2

Die richtige Methode zur Behandlung von Wiederholungen identifizieren.

1.3

Fehlerbehandlung verstehen.

1.4

Die Grundlagen von Klassen verstehen.

2.1

Vererbung verstehen.

2.2

Polymorphie verstehen.

2.3

Kapselung verstehen.

2.4

Verstehen der Anwendungslebenszyklus-Verwaltung.

3.1

Interpretieren von Anwendungsspezifikationen.

3.2

Verstehen von Algorithmen und Datenstrukturen.

3.3

Grundlegendes zur Webseitenentwicklung.

4.1

Grundlegendes zur Microsoft ASP.NET-Webanwendungsentwicklung.

4.2

Grundlegendes zum Webhosting.

4.3

Grundlegendes zu Webdiensten.

4.4

Grundlegendes zu Windows Forms-Anwendungen.

5.1

Grundlegendes zu konsolenbasierten Anwendungen.

5.2

Grundlegendes zu Windows-Diensten.

5.3

Grundlegendes zu relationalen Abfragemethoden fr Datenbanken.

6.1

Grundlegendes zu Abfragemethoden fr Datenbanken.

6.2

Grundlegendes zu Methoden fr Datenbankverbindungen.

6.3

Grundlegendes zur Programmierung

Grundlegendes zur objektorientierten Programmierung

Allgemeine Grundlagen der Softwareentwicklung

Grundlegendes zu Webanwendungen

Grundlegendes zu Desktopanwendungen

Grundlegendes zu Datenbanken

177

Index

& sign, 128


@@IDENTITY, 163
@Page directive, 99
<html>-Tag, 87
<img>-Tag, 87
<link>-Element, 91
<script>-Element, 93
1: 1-Beziehung, 145
1: n-Beziehung, 144, 145
+=operator, 42
<?, 167

a) FTP, 106
Abfragemethoden fr Datenbanken. Siehe Structured Query
Language (SQL)
Abfragen, SQL. Siehe auch Structured Query Language (SQL)
C#-Anwendung, ausfhren von, 153154
Visual Studio, ausfhren von, 152153
Abfragezeichenfolgen, 100
Abgeleitete Klasse
Vererbung, 4850
new-Schlsselwort, 5556
override-Schlsselwort, 5556
Abstrakte Klassen
Accessoren, 36
Account-Eigenschaft, 135
Ajax, 93
Aktualisierungsanomalie, 147
Akzeptanztest, 70
Algorithmus. Siehe auch Sortieralgorithmus
Entscheidungstabellen, 34
definiert, 2
Flussdiagramme, 23
Anwendungen, Desktop
konsolenbasiert, 129-131
Windows-Dienst, 131137
Windows-Formulare, 120129
Anwendungseigenschaft, 101
Anwendungslebenszyklus-Verwaltung (ALM = Application
Lifecycle Management)
Anforderungsanalyse, 6667
Entwurfsprozess, 67
Releaseverwaltung, 68
Softwareentwicklung, 67
Softwaretests, 6870. Siehe auch Testen
Anwendungszustand, 101. Siehe auch Zustandsverwaltung
Arrays
C#-Anwendungen, 9-10
definiert, 9, 70

interne Reprsentation, 71
Leistung und Nutzung, 72
Operationen, 71
Zugriff, 71
Zuteilung, 71
as-Operator, 53
ASP.NET
@Page directive, 99
Anwendungsentwicklung, 95104
Ereignishandler, 97
HTTP-Anforderungs-/Antwortprozess, 95
Infrastruktur, 95
Seitenanforderungsprozess, 96
Seitenklasse, 96
Seitenklasse, Ereignisse, Ausfhrung von, 9899
Seitenlebenszyklus, 9699
Attribut, 168
Ausgeblendete Felder, 100
Ausnahmen
definiert, 24
Handhabung, 2425
try-catch-finally-Anweisung, 2526
Automatisch implementierte Eigenschaften, 3738

Basisklasse
new-Schlsselwort, 5556
override-Schlsselwort, 5556
Vererbung, 4849
Beendigungsausdruck, 19
Befehlszeilenparameter, 129
Binrcode, 4
Binrdateien, 165
Binre Operatoren, 10
Binrzahlensystem, 4
Black-Box-Test, 69
BubbleSort, 7678

C#-Anwendungen
Abfragen, ausfhren von, 153155
Arrays, 910
Datentypen, 89
gespeicherte Prozeduren, ausfhren von, 161164
Konstanten, 8
Methoden, 11
Operatoren, 1011
Schreiben, 5
Steuerelementstrukturen, 1722
Struktur, 68

179

180 | Index
Unabdingbarkeit, 150
using-Anweisung, 164
Variablen, 8
Cascading Stylesheets (CSS)
Datei, Verknpfen mit einer HTML-Datei, 9091
definiert, 88
entwerfen, 89
case-Anweisung, 15
Clientseitige Programmierung, 9495
CompareTo, 57
Cookies, 100
CREATE PROCEDURE, 159160

DataAdapter-Klasse, 170
DataSet
definiert, 170
Objekt, lesen aus, 171172
DataSet-Klasse, 170, 172
Datenbank, 143
Datenbanken, relational
Datennormalisierung, 146149
definiert, 142
Entittsbeziehungsdiagramme, 144146
Entwurf, 144
Konzepte, 143
Tabellen, 143
Datenbankintegritt, 144
Datenbank-Verwaltungssystem (DBMS), 143
Datennormalisierung
definiert, 146
dritte Normalform, 149
erste Normalform, 147148
zweite Normalform, 148
Datenstrukturen
Arrays, 7072
Stapel, 7374
Verknpfte Listen, 7476
Warteschlangen, 7273
Datentypen, 89
definiert, 50
Delegaten, 40, 123
DELETE-Anweisung, 150, 159
Dequeue (Aus der Warteschlange entfernen), 73
do-while-Schleife, 19
Dritte Normalform, 149

Eigenschaften
Accessoren, 36
automatisch implementiert, 3738
definiert, 36
erstellen, 3637
lesegeschtzt, 37
schreibgeschtzt, 37
Einfgeanomalie, 146
Element, 168
Enqueue (In die Warteschlange einreihen), 73
Enthlt, 73, 74

Entittsbeziehungsdiagramme (Entity-Relationship Diagrams,


ERDs)
Attribut, 144
Beziehung, 145
Datenbank, relational, zuordnen zu, 145146
definiert, 144
Entitt, 144
Entscheidungsstrukturen
definiert, 11
if-Anweisung, 1113
if-else-Anweisung, 1315
switch-Anweisung, 1517
Entscheidungstabellen, 34
Entwurfsprozess, 67
Ereignishandler, 97
Ereignisse
definiert, 40, 121
Page-Klasse, Ausfhrung von, 9899
Verffentlichen und Abonnieren, 4142
Erste Normalform, 147148
erstellen, 5051
EventArgs-Klasse, 41
EventHandler-Delegat, 41
Extensible Markup Language (XML). Siehe XML

finally-Block, 25
Flatfiles
definiert, 164
Textdatei, lesen aus und schreiben in, 165167
Flussdiagramme, 23
foreach-Schleife, 21
for-Schleife, 20
Funktionale Abhngigkeit, 148

Gespeicherte Prozeduren
definiert, 159
Erstellen und Ausfhren, 159160
parametrisiert, ausfhren von C#, 161164
parametrisiert, erstellen, 160161
Visual Studio, erstellen von, 160
get-Accessor, 36

Hauptmethode, 78, 11
Heapspeicher, 47
HttpCookie-Klasse, 100
Hypertext Markup Language (HTML)
definiert, 86
Dokument, erstellen, 8788
Kopfzeile und Textkrper, 87
Tags, 87
Zweck, 8687
Hypertext Transfer Protocol (HTTP), 86, 95, 107

Index | 181
I

IComparable, 5658
if-Anweisung, 11
if-else-Anweisung, 13
Initialisierer, 19
INSERT-Anweisung, 150, 158159
Installationsprogramm, 135
Instanz, 33
Integrationstest, 6970
Internet, im Vergleich zum Web, 86
Internetinformationsdienste (IIS), 104106
is-Operator, 53

JavaScript
Ajax, 93
Arbeiten mit, 9394
definiert, 92
in externen Dateien, Vorteile, 94
Kapselung, 33, 4748
Klasse
abgeleitet, erstellen, 49
abstrakt, erstellen, 5051
definiert, 7, 33
erstellen, 3334
Zugriffsmodifizierer, 34
Komponententest, 69
Konsole, 129
Konsolenanwendungen, 129131
Konstanten, 8
Konstruktoren, 35

Lschanomalie, 147

m:n-Beziehung, 145
Methoden fr Datenbankverbindungen
DataSet, 170173
Flatfiles, 164167
XML, 167170
Methoden
definiert, 11
InitFields, 3435
Objekte, 3435
return-Anweisungen, 34, 35
Signaturen, 34
Multiple Document Interface (MDI), 126129
Namespace-Eigenschaft, 110
Namespaces, 4243
Nein
new-Schlsselwort, 35, 5556
Nicht verbundene Anwendungen, 170

Objekte
definiert, 33, 35
Delegaten, 40
Eigenschaften, automatisch implementiert, 3738
Eigenschaften, erstellen, 3637
Ereignisse, 4042
erstellen, 3536
In-Memory-DataSet, lesen aus, 171
Klassen, erstellen, 3334
Konstruktoren, 35
Methoden, 3435
Namespaces, 4243
new-Schlsselwort, 35
Statische Member, 4344
Umwandlung zwischen Typen, 5253
Objektorientierte Programmierung
Kapselung, 4748
Objekte, 3344
Polymorphismus, 5356
Schnittstellen, 5658
Vererbung, 4853
Werte und Verweise, 4447
Objektorientiertes Denken, 33
Operatoren
+=, 42
definiert, 10
Rangfolge in C#, 10
override-Schlsselwort, 5556

Parametrisierte gespeicherte Prozeduren, 160164


Peek (Nachsehen), 73, 74
Polymorphismus
definiert, 53
verwenden, 5455
Pop, 74
Postback, 96, 97
Postback, 96, 97
Primrschlssel, 144
Programm, 4
Programmiersprache auf hoher Ebene, 4
Push, 74

QueryString-Eigenschaft, 100
QuickSort, 7981

Regressionstest, 70
Rekursion, 22
Rekursive Methode, 23
Relationale Datenbanken. Siehe Datenbanken, relational
Releaseverwaltung, 68

182 | Index
S

Schleifentest, 19
Schnittstellen
definiert, 56
IComparable, 5658
SELECT-Anweisung, 150, 155157
Serverseitige Programmierung, 9495
ServiceInstaller-Klasse, 135
ServiceProcessorInstaller-Klasse, 135
set-Accessor, 36
Signatur, 34
Simple Object Access Protocol (SOAP)
definiert, 107
Elemente, 108
Sitzungszustand, 101104. Siehe auch Zustandsverwaltung
Softwaretests. Siehe Tests
Sortieralgorithmus
BubbleSort, 7678
QuickSort, 7981
Speicherzuweisung, 4547
SQL Server-Datenbanken
Abfragen, C#-Anwendungen, ausfhren von, 153155
Abfragen, Visual Studio, ausfhren von, 152153
verbinden mit, 150152
SQL. Siehe Structured Query Language (SQL)
Standardanweisung, 15
Stapel
Interne Reprsentation, 7374
Leistung und Nutzung, 74
Operationen, 74
Stapelspeicher aufrufen, 47
StartType-Eigenschaft, 135
static-Schlsselwort, 43
Statische Member
erstellen, 4344
definiert, 43
this-Schlsselwort, 44
Structured Query Language (SQL)
ad-hoc-Anweisungen, 150
Aggregatfunktionen, 157
deklarativ, 149150
DELETE-Anweisung, 150, 159
INSERT-Anweisung, 150, 158159
SELECT-Anweisung, 150, 155157
UPDATE-Anweisung, 150, 157158
Strukturen, 4445
switch-Anweisung, 15
switch-Block, 15
Systemtest, 70
Tabellen, 143, 146149
Ternre Operatoren, 10
Testen
Akzeptanz, 70
Black-Box, 69
Ebenen, 6970
Einheit, 69
Integration, 6970
Methoden, 69
Regression, 70

System, 70
Webdienste, 110112
White-Box, 69
Textdateien, lesen und schreiben von, 165167
this-Schlsselwort, 3839
this-Schlsselwort, 3839, 44
try-Block, 25
try-catch-finally-Anweisung, 2526
T-SQL. Siehe Structured Query Language (SQL)

Umwandlung
as-Operator, 53
definiert, 52
is-Operator, 53
zwischen Datentypen, 5253
Unre Operatoren, 10
Uniform Resource Locator (URL), 86
UPDATE-Anweisung, 150, 157158
using-Anweisung, 164
using-Direktive, 7

value-Schlsselwort, 37
Variablen, 8
Verarbeitungsanweisungen, 167
Vererbung
abgeleitete Klasse, 4850
abstrakte Klasse, 5051
as-Operator, 53
Basisklasse, 48
definiert, 48
is-Operator, 53
Umwandlung zwischen Typen, 5253
versiegelte Klasse, 50, 51
von der Objektklasse, 5152
Verknpfte Listen
Betrieb, 7576
definiert, 74
Interne Reprsentation, 7475
Leistung und Nutzung, 76
Versiegelte Klasse, 50, 51
Verweistypen, 4445, 4647
ViewState, 100
Virtuelles Verzeichnis, 105106
Visual Studio
Abfrage-Designer, 153
Abfragen, ausfhren von, 152153
Windows-Dienst, installieren, 135136
Windows-Dienst-Installationsprogramm, hinzufgen, 134135
Windows-Dienstvorlage, 132134
Visuelle Vererbung, 123126
Vollstndig qualifizierter Klassenname, 7

Index | 183
Warteschlangen
definiert, 72
interne Reprsentation, 72
Operatoren, 73
Leistung und Nutzung, 73
Web Service Definition Language (WSDL), 108
Webanwendungen, bereitstellen, 106
Webdienste
Client-Anwendung zugreifen von, 112114
definiert, 107
erstellen, 108110
SOAP, 107108
Tests, 110112
WebMethod-Attribut, 110
Webhosting
definiert, 104
Internetinformationsdienste (IIS), 104105
virtuelle Verzeichnisse, erstellen, 105106
Webanwendungen, bereitstellen, 106
Websites, erstellen, 104
WebMethod-Attribut, 101
Webseitenentwicklung
Cascading Stylesheets (CSS), 8892
HTML, 8688
JavaScript, 9294
Programmierung, clientseitig im Vergleich zu serverseitig,
9495
WebService-Attribut, 101
Websites, 104105
Werttypen, 44, 45, 46
while-Schleife
definiert, 17
Teile, 19
White-Box-Test, 69
Wiederholungsstrukturen
do-while-Schleife, 1920
foreach-Schleife, 2122
for-Schleife, 2021
Rekursion, 22
Rekursive Methode, 23
while-Schleife, 1719
Windows Forms-Anwendungen

definiert, 120
Ereignismodell, 123
erstellen, 121123
Multiple Document Interface (MDI), 126129
visuelle Vererbung, 123126
Windows Installer, 106
Windows-Dienste
Arbeiten mit, 136137
Beispiele fr, 131
definiert, 131
erstellen, 132134
Installationsprogramm, hinzufgen von, 134135
Installieren, 135136
World Wild Web, 86

xcopy, 106
XML
Attribute, 168
Dateien, Lesen aus, 168170
definiert, 167
Elemente, 168
Tags, 167
XmlDocument, 168
XmlReader, 168
XmlWriter, 168
Zugriffsmodifizierer, 34, 37, 48
Zustandsverwaltung
Abfragezeichenfolgen, 100
Anwendungszustand, 101
ausgeblendete Felder, 100
clientseitig, 100
Cookies, 100
definiert, 99
serverseitig, 101
Sitzungszustand, 101104
ViewState, 100
Zustandsverwaltung, 99104
Zweite Normalform, 148

Hinweise

Hinweise

Hinweise

Hinweise

Hinweise

Hinweise

Hinweise

Hinweise

Hinweise

Hinweise