einführung in die informationsverarbeitung · 2019-01-07 · 13/62 informationsverarbeitung...
Post on 10-Mar-2020
2 Views
Preview:
TRANSCRIPT
Abschnitt VI
Dr.-Ing. Peter Ijewski 1/62
Kontrollfragen
08:47 Informationsverarbeitung Abschnitt VI
Aufgaben des letzten Praxisteils
2/62
Programmierparadigmen
Objektorientierte Programmierung
C#
Praxisteil
3/62
08:47 4/62 Informationsverarbeitung Abschnitt VI
• Wie kommen wir von der Aufgabenstellung zum Programm?
• Welche Bedeutung haben Algorithmen in der Informations-verarbeitung?
• Wozu dient Software Engineering?
• Welche Klassen von Programmiersprachen kennen Sie?
• Aus welchen Elementen ist ein Programm aufgebaut?
• Warum sollen Variablen initialisiert werden?
• Warum sind programmbegleitende Kommentare so wichtig?
5/62
08:47 6/62 Informationsverarbeitung Abschnitt VI
Aufgabe • Starten von Visual Studio (C#) • Erstellen des ersten Programms „Hello World“ • Programm „SendungsDauer“ • Programm „99 bottles of beer”
09:17 7/62 Informationsverarbeitung Abschnitt VI
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _99Bottles
{
class Program
{
static void Main(string[] args)
{
// Wir "trinken" alle Flaschen leer bis nur noch zwei Flaschen übrig sind
// weil der auszugebende Text sich bei Flasche 2 ändert
for (int zaehler = 9; zaehler > 2; zaehler--) // Aus Gründen der Übersicht hier nur 9 Flaschen
{
Console.WriteLine(zaehler + " bottles of beer on the wall, " + zaehler + " bottles of beer.");
Console.WriteLine("Take one down and pass it around, " + (zaehler - 1) + " bottles of beer on the wall. ");
Console.WriteLine(""); // Leerzeile
Console.ReadLine(); // warten auf Eingabe
}
//es sind noch zwei Flaschen vorhanden
Console.WriteLine("2 bottles of beer on the wall, 2 bottles of beer.");
Console.WriteLine("Take one down and pass it around, 1 bottle of beer on the wall. ");
Console.WriteLine(""); // Leerzeile
//es ist noch eine Flaschen vorhanden
Console.WriteLine("1 bottle of beer on the wall, 1 bottle of beer.");
Console.WriteLine("No more bottles of beer on the wall, no more bottles of beer.");
Console.WriteLine(""); // Leerzeile
//es gibt kein Bier mehr, aber wir haben noch Durst!
Console.WriteLine("Go to the store and buy some more, 99 bottles of beer on the wall.");
Console.ReadLine(); // warten auf Eingabe
}
}
}
8/62
08:47 9/62 Informationsverarbeitung Abschnitt VI
Begriffserläuterung
Unter Programmierparadigmen versteht man einen fundamentalen Programmierstil.
Die Aufteilung der verschiedenen Stile ist sehr vielfältig. Wir wollen 4 Begriffe herausgreifen.
• Imperative Programmierung
• Deklarative Programmierung
• Prozedurale Programmierung
• Objektorientierte Programmierung
Diese Begriffe stehen nicht im Widerspruch zueinander, sondern können in einer Programmiersprache sinnvoll nebeneinander existieren.
09:29 10/62 Informationsverarbeitung Abschnitt VI
Übersicht
Ein Programmierparadigma ist das einer Programmiersprache zugrunde liegende Prinzip.
Quelle: http://www.mirko-hans.de/info/gk_11/oop.htm
C#
08:47 11/62 Informationsverarbeitung Abschnitt VI
Imperative Programmierung
imperare (lat.)= anordnen, befehlen
Bei der sog. imperativen Programmierung besteht der Quellcode eines Programm aus einer Folge von vorgegebenen Anweisungen (Befehlen).
Diese definieren, was und in welcher Reihenfolge ausgeführt werden soll.
Der Programmierer definiert „WIE“ etwas zu bewerkstelligen ist.
Die imperative Programmierung ist das ursprüngliche, am längsten bekannte Programmierparadigma.
08:47 12/62 Informationsverarbeitung Abschnitt VI
Deklarative Programmierung
Beim Einsatz einer deklarativen Programmierung wird (vom Programmierer) nicht mehr der eigentliche Lösungsweg programmiert, sondern „nur noch“ angegeben, welches Ergebnis gewünscht ist.
Ein Beispiel ist die Datenbankabfragesprache SQL, die als eine mengen-orientierte Abfragesprache zu bezeichnen ist.
Der Programmierer definiert „WAS“ etwas zu bewerkstelligen ist.
08:47 13/62 Informationsverarbeitung Abschnitt VI
Prozedurale Programmierung
Imperativ und prozedural werden oft auch synonym verwendet.
Die prozedurale Programmierung zeichnet sich grundsätzlich dadurch aus, dass Algorithmen in überschaubare Teile (Module, Prozeduren) zerlegt werden, die dann anhand einer definierten Schnittstelle aufrufbar sind.
In einem weitergehenden Schritt werden Programme in Module unterteilt. Module können ggf. getrennt erstellt, kompiliert und in u. U. in Bibliotheken bereitgestellt werden.
Prozedural ist eine Ausprägung imperativer Programmierung, die den Quellcode in Prozeduren untergliedert.
Die Bezeichnung der Unterteilungen ist programmier-sprachenspezifisch.
08:47 14/62 Informationsverarbeitung Abschnitt VI
Prozedurale Programmierung
Ein weiterer wichtiger Aspekt in der Softwaretechnik ist die Wiederverwendbarkeit entstehenden Programmcodes in anderen Programmen.
Prozeduren und Funktionen werden nach Aufgabengebieten gruppiert und zu Bibliotheken zusammengefasst, die dann verteilt und in beliebig viele andere Programme eingebunden werden können.
Prozedurale Programmiersprachen sind z. B.: Pascal, C und BASIC.
Entwickler modernerer Programmiersprachen wie z. B. Java und C# betrachten den prozeduralen Ansatz als veraltet und haben daher vorhandene Sprachen um Elemente der objektorientierten Programmierung erweitert.
08:47 15/62 Informationsverarbeitung Abschnitt VI
Objektorientierte Programmierung
Unter „Objektorientierung“, abgekürzt „OO“, versteht man eine grundsätzliche Sichtweise auf komplexe Systeme.
In einem „Objekt“ werden: • Attribute (Eigenschaften) • Methoden (member function) • Ereignisse (resp. die Reaktion darauf) zusammengefasst.
Objektorientierung wird verwendet, um die hohe Komplexität heutiger Programme zu verringern.
Objektorientierung ist ein jüngeres Programmierparadigma.
08:47 16/62 Informationsverarbeitung Abschnitt VI
Objektorientierte Programmierung
Die objektorientierte Programmierung (OOP) ist eine besondere Methode zur Modularisierung von Programmen, die sich recht stark von der rein prozeduralen Programmierung unterscheidet.
Auch die OOP folgt dem Programmierparadigma der imperativen Programmierung.
Gut entworfene objektorientierte Software ist in der Regel leichter zu warten und zu erweitern als prozedurale.
Die strenge Modularisierung vereinfacht Unit-Tests und die erwünschte Wiederverwendung von Teilen der Software.
17/62
08:47 18/62 Informationsverarbeitung Abschnitt VI
Eigenschaften der OOP
Objektorientierung hilft uns, Ausschnitte der realen Welt datentechnisch zu beschreiben und zu bearbeiten.
Dinge der realen Welt werden (mit ihren Eigenschaften, Methoden, etc.) zunächst als „Klassen“ ähnlicher Dinge beschrieben.
Maschinen z. B. werden u. a. durch die Eigenschaften • Name • Baujahr • Anschaffungspreis und die Methoden • Einschalten • Ausschalten gekennzeichnet.
09:44 19/62 Informationsverarbeitung Abschnitt VI
Eigenschaften der OOP
Klasse „Maschine“
Eigenschaften Name, Baujahr, Anschaffungspreis, etc.
Methoden Einschalten, Ausschalten, etc.
Ereignisse
08:47 20/62 Informationsverarbeitung Abschnitt VI
Eigenschaften der OOP
In der OOP werden Daten und Funktionen zu Objekten zusammen gefasst.
Änderungen an den Daten eines Objekts werden idealerweise ausschließlich über die im Objekt selbst vorhandenen Funktionen (Methoden), vorgenommen.
Durch diese Maßnahme befindet sich das Objekt immer in einem wohldefinierten und selbstkontrollierten Zustand.
08:47 21/62 Informationsverarbeitung Abschnitt VI
Eigenschaften der OOP
class Maschine
{
}
class Maschine
{
string _name = "";
public string name
{
get { return _name; }
set { _name = value; }
}
}
class Maschine
{
string _name = "";
public string name
{
get { return _name; }
set { _name = value; }
}
public Boolean einschalten()
{
return true;
}
}
08:47 22/62 Informationsverarbeitung Abschnitt VI
Eigenschaften der OOP
Eine Klasse ist somit als „Bauplan, Matritze“ für die Abbildung von realen Objekten in Softwareobjekte zu betrachten.
Eine Klasse kann auch als (komplexer) Datentyp des jeweiligen Objekts verstanden werden. Während der Laufzeit des Programmes belegt eine Klasse keinen Speicherplatz.
Soll nun ein definiertes Objekt (eine bestimmte Maschine) im Programm benutzt werden muss die Klasse „Maschine“ instanziiert werden.
Maschine MeineMaschine = new Maschine();
Zur Unterscheidung beginnen Klassen mit einem Großbuchstaben, Variablen mit einen Kleinbuchstaben.
10:11 23/62 Informationsverarbeitung Abschnitt VI
„Instanziieren“
Quelle: http://www.hki.uni-koeln.de/sites/all/files/courses/5779/instanz_klasse.gif
08:47 24/62 Informationsverarbeitung Abschnitt VI
Eigenschaften der OOP
Maschine MeineMaschine = new Maschine(); Maschine MeineMaschine = new Maschine ();
MeineMaschine.name = "Testmaschine";
Maschine MeineMaschine = new Maschine ();
MeineMaschine.name = "Testmaschine";
MeineMaschine.baujahr = 1998;
Maschine MeineMaschine = new Maschine ();
MeineMaschine.name = "Testmaschine";
MeineMaschine.baujahr = 1998;
MeineMaschine.anschafffungspreis = 105000.0;
08:47 25/62 Informationsverarbeitung Abschnitt VI
Eigenschaften der OOP
Objektorientierung wird im wesentlichen durch drei Eigenschaften gekennzeichnet:
• Datenkapselung
• Polymorphie
• Vererbung
08:47 26/62 Informationsverarbeitung Abschnitt VI
Datenkapselung
Als Datenkapselung (auch unter dem Begriff information hiding bekannt) bezeichnet man in der Programmierung das Verbergen von Daten oder Informationen vor dem Zugriff von außen.
In der strukturierten und modularen Programmierung ist Daten-kapselung ist ein schon lange bekanntes Konzept.
Der direkte Zugriff auf die interne Datenstruktur wird nicht erlaubt und erfolgt ausschließlich über definierte Schnittstellen (Black-Box-Modell).
10:13 27/62 Informationsverarbeitung Abschnitt VI
Datenkapselung
„Maschine“
Eigenschaften
Methoden (Funktionen)
Programm
08:47 28/62 Informationsverarbeitung Abschnitt VI
Datenkapselung
class Maschine
{
string _name = "";
public string name
{
get { return _name; }
set { _name = value; }
}
public Boolean einschalten()
{
return true;
}
}
08:47 29/62 Informationsverarbeitung Abschnitt VI
Datenkapselung
Eine Ausprägung ist das ist das Verbergen von Daten durch die Definition von Gültigkeitsbereichen.
Deklarierte Daten sind nur innerhalb des umgebenden und in allen tieferen Bereichen sichtbar und gültig; für einen höheren Bereich bleiben sie verborgen.
Jede Teilstruktur eines Programms (Hauptblock, Prozeduren, Funktionen, Unterprogramme, …) definiert einen solchen Bereich, sodass eine Gültigkeitshierarchie entsteht.
10:18 30/62 Informationsverarbeitung Abschnitt VI
Datenkapselung
class Maschine
{
public string _name = "";
}
Maschine MeineMaschine = new Maschine ();
MeineMaschine._name = "Test";
class Maschine
{
private string _name = "";
}
Maschine MeineMaschine = new Maschine ();
MeineMaschine._name = "Test";
08:47 31/62 Informationsverarbeitung Abschnitt VI
Datenkapselung
Das sog. Geheimnisprinzip besagt, dass man vom Innenleben einer Klasse möglichst wenig wissen soll (muss).
Durch die Kapselung wird nur die Funktionsweise - das „Was“ - einer Klasse nach außen sichtbar, aber nicht die interne Repräsentation - das „Wie“ .
Dadurch wird die Schnittstelle nach außen einerseits definiert und andererseits auch dokumentiert.
Die Datenkapselung schottet somit die interne Implementierung einer Klasse von direktem externen Zugriff ab.
10:24 32/62 Informationsverarbeitung Abschnitt VI
Vererbung
Maschine
Kompressor Fahrzeug
Eisenbahn LKW PKW Krafträder
Golf Porsche
08:47 33/62 Informationsverarbeitung Abschnitt VI
Vererbung
Neue Klassen können von anderen vorhandenen Klassen abgeleitet werden. Diesen Vorgang nennen wir Vererbung.
Dabei erbt die neue Klasse Attribute, Methoden und Ereignisse von der vererbenden Klasse (Diese nennen wir Basisklasse).
Maschine MeineMaschine = new Maschine();
class Kompressor : Maschine
{
}
08:47 34/62 Informationsverarbeitung Abschnitt VI
Vererbung
Es können neue Bestandteile hinzugenommen werden oder vorhandene überlagert werden.
class Kompressor : Maschine
{
double _druck = 0.0;
public double druck
{
get { return _druck; }
set { _druck = value; }
}
}
Kompressor MeinKompressor = new Kompressor();
MeinKompressor.anschafffungspreis = 1600.0;
MeinKompressor.druck = 3.0;
08:47 35/62 Informationsverarbeitung Abschnitt VI
Vererbung
Dabei beschreibt die Basisklasse allgemeine Eigenschaften, ist also eine Verallgemeinerung der abgeleiteten Klassen; diese sind somit Spezialisierungen der Basisklasse.
Neben diesem rein konstruktiven Aspekt dient Vererbung auch der Dokumentation von Ähnlichkeiten zwischen den Klassen
Dies hat in den frühen Entwurfsphasen unbestreitbare Vorteile. Auf Vererbung basierende Klassenhierarchien spiegeln strukturelle und verhaltensbezogene Ähnlichkeiten der Klassen deutlich wider.
08:47 36/62 Informationsverarbeitung Abschnitt VI
Polymorphie
Polymorphie (griechisch, „Vielgestaltigkeit“) ist ein Konzept in Programmiersprachen, das die Fähigkeit eines Elements beschreibt, abhängig von seiner Verwendung unterschiedliche Eigenschaften anzunehmen.
Arten der Polymorphie
• Polymorphie überladener Operatoren
• Polymorphie der Objektorientierten Programmierung
• Polymorphie einer Funktion bzw. Prozedur
• Polymorphie von Datentypen oder Klassen
• Polymorphie bei der Softwareentwicklung
10:44 37/62 Informationsverarbeitung Abschnitt VI
Polymorphie
Polymorphie überladener Operatoren
Ein Bezeichner, der für einen Operator steht (z. B. „+“, „-“), kann mehrmals mit anderer Bedeutung implementiert werden.
int nsumme = 0, nwert1 = 1, nwert2 = 2;
nsumme = nwert1 + nwert2;
double dwsumme = 0, dwwert1 = 1.5, dwwert2 = 2.7;
dwsumme = dwwert1 + dwwert2;
string cname = "", cvorname="Peter", vnachname="Ijewski";
cname = cvorname + " " + vnachname;
08:47 38/62 Informationsverarbeitung Abschnitt VI
Polymorphie
Polymorphie der Objektorientierten Programmierung
Die Polymorphie der Objektorientierten Programmierung ist eine Eigenschaft, die immer im Zusammenhang mit Vererbung auftritt
Eine Methode ist polymorph, wenn sie in verschiedenen Klassen die gleiche Signatur hat, jedoch erneut implementiert ist.
08:47 39/62 Informationsverarbeitung Abschnitt VI
Polymorphie
class Maschine
{
string _name = "";
public string name
{
get { return _name; }
set { _name = value; }
}
{
class Kompressor : Maschine
{
string _name = "";
public override string name
{
get { return _name.ToUpper(); }
set { _name = value; }
}
}
08:47 40/62 Informationsverarbeitung Abschnitt VI
Polymorphie
Polymorphie einer Funktion bzw. Prozedur
Unter Polymorphie versteht man das Verhalten von objektorientierten Sprachen, die Signatur einer Funktion als Bestandteil des Funktionsnamens bei einem Aufruf zu betrachten.
public int test(int nwert1,int nwertb)
{
return nwert1 * nwert2;
}
public double test(double dwwert1, double dwwert2)
{
return dwwert1 * dwwert2;
}
08:47 41/62 Informationsverarbeitung Abschnitt VI
Eigenschaften der OOP
Objekte sind Abstraktionen realer Dinge, die ihre tatsächliche
Implementierung vor der Außenwelt verbergen und dadurch
einfacher austauschbar werden.
In der OOP werden Daten und Funktionen zu Objekten zusammen
gefasst.
Ein in der Praxis immer wiederkehrendes Problem ist die elegante
Verbindung von relationalen Datenbanken und objektorientierter
Programmierung. Das Object Relational Mapping (ORM) führt eine
Umsetzung relationaler Strukturen in Objekte und umgekehrt durch.
42/62
10:48 43/62 Informationsverarbeitung Abschnitt VI
Integrated Development Environment
Für private Zwecke Download unter: https://www.visualstudio.com/de-de/visual-studio-homepage-vs.aspx
10:54 44/62 Informationsverarbeitung Abschnitt VI
Integrated Development Environment
Neben dem Microsoft Visual Studio gibt es inzwischen auch Entwicklungsumgebungen (IDEs) anderer Hersteller für C#:
• Baltie, C#-IDE für Kinder • C#-Builder von Borland (Verwendet den Microsoft C#-Compiler in
Lizenz) • MonoDevelop – IDE für Windows und Unix-basierte
Betriebssysteme (Open-Source http://www.monodevelop.com) • SharpDevelop – (Open-Source) • XNA Game Studio – IDE von Microsoft zur Spieleentwicklung
10:53 45/62 Informationsverarbeitung Abschnitt VI
Integrated Development Environment
08:47 46/62 Informationsverarbeitung Abschnitt VI
Entwicklungsumgebung
08:47 47/62 Informationsverarbeitung Abschnitt VI
Entwicklungsumgebung
Visual Studio bietet uns eine große Anzahl verschiedener recht informativer und auch hilfreicher Fenster an.
Die Wichtigsten:
• der Codeeditor • der visuelle Editor • der Projektmappen-Explorer • das Eigenschaftsfenster • die Toolbox • die Fehlerliste
08:47 48/62 Informationsverarbeitung Abschnitt VI
Entwicklungsumgebung - Codeeditor
Der kontextsensitive Codeeditor ist die wichtigste Komponente.
• automatischer Codeeinzug • automatische Generierung von Code • Ein- und Ausblendung der Anweisungsblöcke • IntelliSense-Unterstützung • Darstellung jeder (geöffneten) Quellcodedatei auf einer eigenen
Registerkarte • eigene Vorder- und Hintergrundfarbe der verschiedenen Elemente • u. v. m.
08:47 49/62 Informationsverarbeitung Abschnitt VI
Entwicklungsumgebung - Codeeditor
• Das Ein- und Ausblenden der Anweisungsblöcke dient größerer Übersichtlichkeit
08:47 50/62 Informationsverarbeitung Abschnitt VI
Entwicklungsumgebung - Projektmappen-Explorer
Der Projektmappen-Explorer ist die Komponente von Visual Studio, die den Anwender bei der Navigation im Anwendungscode unterstützt.
08:47 51/62 Informationsverarbeitung Abschnitt VI
Entwicklungsumgebung - Eigenschaftenfenster
Das Eigenschaftenfenster zeigt seine Stärke insbesondere dann, wenn grafische Oberflächen eine Rolle spielen.
Man kann hier auf einfache und übersichtliche Art und Weise die Eigenschaften von Schaltflächen, Forms etc. ansehen und auch einstellen.
08:47 52/62 Informationsverarbeitung Abschnitt VI
Entwicklungsumgebung - Toolbox
Das Toolbox benötigen wir ausschließlich bei der Entwicklung grafischer Oberflächen.
08:47 53/62 Informationsverarbeitung Abschnitt VI
Lehrmaterial
http://openbook.rheinwerk-verlag.de/visual_csharp_2012/
http://www.microsoft.com/germany/MSDN/webcasts/library.aspx?id=118770374
http://homeandlearn.co.uk/csharp/csharp.html
11:06 54/62 Informationsverarbeitung Abschnitt VI
Grundlagen der Sprache
C# greift Konzepte der Programmiersprachen Java, C++, C sowie Delphi auf.
C# zählt zu den objektorientierten Programmiersprachen und unterstützt die Entwicklung von sprachunabhängigen .NET-Komponenten.
08:47 55/62 Informationsverarbeitung Abschnitt VI
Grundlagen der Sprache
Bedingte Ausführung (if, else)
if (nwert > 0)
{
Console.WriteLine("Wert ist größer als Null");
}
else if (nwert == 0)
{
Console.WriteLine("Wert ist gleich Null");
}
else
{
Console.WriteLine("Wert ist kleiner als Null");
}
08:47 56/62 Informationsverarbeitung Abschnitt VI
Grundlagen der Sprache
Bedingte Ausführung (switch)
switch (nwert1)
{
case 0:
{
Console.WriteLine("Wert ist 0");
break;
}
case 1:
{
Console.WriteLine("Wert ist 1");
break;
}
default:
{
Console.WriteLine("Wert ist etwas anderes");
break;
}
}
08:47 57/62 Informationsverarbeitung Abschnitt VI
Grundlagen der Sprache
In C# sind auch Strings als Prüfausdruck erlaubt:
switch (cName)
{
case „Maier“:
{
Console.WriteLine(„Ihr Name ist Maier");
break;
}
case „Schulzer“:
{
Console.WriteLine(„Ihr Name ist Schulzer ");
break;
}
default:
{
Console.WriteLine(„Ihren Namen kenne ich nicht");
break;
}
}
08:47 58/62 Informationsverarbeitung Abschnitt VI
Grundlagen der Sprache
Schleifen (for)
Dauer=0;
for (i=0; i<6; i++)
{
Dauer++;
//Ausgabe auf der Konsole
Console.WriteLine("Dauer: "+Dauer);
}
08:47 59/62 Informationsverarbeitung Abschnitt VI
Grundlagen der Sprache
Schleifen (while)
Dauer=0;
i=0;
while (i<6)
{
i++;
Dauer++;
//Ausgabe auf der Konsole
Console.WriteLine("Dauer: "+Dauer);
}
Weitere Formen von Schleifen werden wir zu einem späteren Zeitpunkt kennen lernen.
60/62
08:47 61/62 Informationsverarbeitung Abschnitt VI
Aufgabe • Erstellen Sie eine Klasse Fahrzeug • Definieren Sie diese Klasse mit Eigenschaften und Methoden. • Leiten Sie hieraus die Klassen Kraftrad und Traktor ab. • Fügen Sie weitere Eigenschaften diesen abgeleiteten Klassen
hinzu. • Überscheiben (override) Sie Eigenschaften der Basisklasse. • Befüllen Sie die Klassen und geben die die Eigenschaften am
Programmende aus.
08:47 62/62 Informationsverarbeitung Abschnitt VI
Danke für heute!
top related