Basisinformationstechnologie I - HKI - Uni Köln

Werbung
Basisinformationstechnologie I
Wintersemester 2012/13
07. Januar 2013 – Programmiersprachen II
Universität zu Köln. Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners // [email protected]
Themenüberblick „Programmiersprachen II“


Drei-Schichten Architektur / MVC
Programmiersprachen – Konzepte





Variablen
Arrays
Auswahlanweisungen
Kontrollstrukturen
Objektorientierte Programmierung





Objekt
Kapselung / Information Hiding / Geheimnisprinzip
Identität vs. Gleichheit
Notation von Klassen
Vererbung
...zuvor bei „BIT“: Phasen
der
Programmentwicklung
...zuvor bei „BIT“: Phasen der Programmentwicklung
Analyse: Spezifikation
Entwurf: Algorithmus
Implementation: Code (Programmiersprache)
…Auf dem Weg zur Spezifikation: Use-Case
• Nach Jacobson (u.a. 1987)
• Spezifiziert eine Sequenz von Aktionen,
einschließlich möglicher Varianten, die das System
in Interaktion mit Akteuren ausführt
• Beschreibt das extern wahrnehmbare Verhalten,
ohne auf die interne Struktur oder Details der
Realisierung einzugehen
(Balzert, Heide: Lehrbuch der Objektmodellierung. Heidelberg, 2005.)
Implementation
Programmiersprachen



Interpretiert vs. compiliert
Typisierung: statisch, dynamisch, etc.
Paradigmen:




Funktional
Imperativ
Prozedural
Objektorientiert

Grundlegende Konzepte: Variablen, Arrays,
Kontrollstrukturen, Funktionen, Objekte

Das Rad nicht neu erfinden: Design Patterns /
Entwurfsmuster, Strukturierungsmuster: MVC (u.a.)

Modellierung
Ans Eingemachte…
Darstellung
Logik
Daten
Schichten-Architektur
Drei-Schichten-Architektur
 GUI-Schicht
 Fachkonzeptschicht
 Datenhaltungsschicht
GUI-Schicht: Realisiert die
Benutzungsoberfläche einer
Anwendung – Präsentation der Daten,
Interaktion mit Benutzer / Benutzerin
Fachkonzeptschicht: Modelliert den
funktionalen Kern der Anwendung;
Zugriff auf Datenhaltungsschicht
Datenhaltungsschicht: Form der
Datenspeicherung, z.B. relationale DB
MVC – Model View Controller (Modell, Präsentation, Steuerung)
1972 im Kontext von „Smalltalk“ (objektorientierte Programmiersprache) vorgestellt
Model / Datenhaltungsschicht?
Model!
Spielfeld: 3 x 3 Felder
Auf jedem Feld wird die ID des Spielers abgelegt, der / die
das Feld angeklickt hat
var gameBoard = [][];
Arrays und Variablen
Variable: Benannte Speicherstelle
Charakteristika:




Variablenname
Wert
(Datentyp)
(Adresse der Speicherzelle)
JavaScript:
// Deklaration
var meineVariable;
// Initialisierung
meineVariable = 23;
C++:
// Deklaration
int meineVariable;
// Initialisierung
meineVariable = 23;
Datentypen (C++)
Einfache Datentypen in C++:






bool  Wahrheitswerte
int  ganze Zahlen
unsigned int  Natürliche Zahlen
float  Fließkommazahlen
double  Fließkommazahlen, doppelte Genauigkeit
char  Zeichen
Zusammengesetzte Datentypen (in C++):
 String  Zeichenketten
 Array  Sammlung von Daten eines Datentyps
Doppelte Genauigkeit…?!?
 Kollisionserkennung / Problem: „Clipping“
Arrays
Array  Sammlung von Datenwerten
Jeder Wert in einem Array wird über den Index adressiert; gezählt
wird ab 0: meinArray[index]
// Deklaration
var lottoZahlen = [];
// Initialisierung
lottoZahlen[0] = 23;
lottoZahlen[1] = 15;
lottoZahlen[2] = 3;
lottoZahlen[3] = 42; lottoZahlen[4] = 7; lottoZahlen[5] = 8;
// Ausgabe
document.write( lottoZahlen[0] + “, “ + lottoZahlen[1] );
Mehrdimensionale Arrays
Zugriff auf Werte in zweidimensionalen Arrays:
var cellContent = gameBoard[ yCoord ][ xCoord ]
???
1.
2.
3.
var cellContent = gameBoard[ 0 ] [ 1 ];
var cellContent = gameBoard[ 2 ] [ 2 ];
var cellContent = gameBoard[ 3 ] [ 1 ];
Spielfluss und
Anwendungslogik
Präsentation und Interaktion – die Spielschleife
SOLANGE kein Spieler / keine Spielerin das Spiel
gewonnen hat, VERFAHRE WIE FOLGEND:
WENN ein leeres Spielfeld angeklickt wurde:
lege die aktuelle SpielerID im
zweidimensionalen Array „gameGrid“ ab
und stelle das Spielersymbol dar
IM ANDEREN FALLE:
tue nichts
Prüfe die Gewinnbedingung
Gewinn- und Abbruchbedingung
Ein Spieler / eine Spielerin hat das Spiel gewonnen,
WENN:
der Spieler drei seiner Symbole in
(unmittelbarer) horizontaler Reihenfolge
abgelegt hat
ODER
der Spieler drei Symbole in diagonaler
Reihenfolge abgelegt hat
Kontrollstrukturen
Kontrollstrukturen
Unterscheidung von Kontrollstrukturen in:
 Auswahlanweisungen
 if
 if else
 (switch)
 Wiederholungsanweisungen
 while
 for
 do while
 Sprunganweisungen
 return
 break
 continue
Auswahlanweisungen: if
if (ausdruck) {
anweisung1
anweisung2
anweisung3
...
}
ausdruck  variable1 OPERATOR variable2
C++, JavaScript & Co.: (Vergleichs)Operatoren
Operator
<=
Operation
Größer als
(„ist Wert1 größer als Wert2?“)
Kleiner als
(„ist Wert 1 kleiner als Wert2?“)
Größer gleich
(„ist Wert1 kleiner oder gleich Wert2?“)
Kleiner gleich
(„ist Wert1 kleiner oder gleich Wert2?“)
==
Auf Gleichheit prüfen
variable1 == variable2
!=
variable1 != variable2
&&
Auf Ungleichheit prüfen
Logisches UND: Zwei Bedingungen
prüfen
||
Logisches ODER
if( (a==b) || (b==c) )
>
<
>=
Beispiel
Wert1 > Wert2
Wert1 < Wert2
Wert1 >= Wert2
Wert1 <= Wert2
if( (a==b) && (b==c) )
Auswahlanweisungen: if
Beispiel: Zu prüfen ist, ob der Wert von
variableZwei größer ist als der Wert von
variableEins. Wenn ja, soll eine entsprechende
Nachricht ausgegeben werden:
int variableEins = 5;
int variableZwei = 8;
if(variableZwei > variableEins) {
cout << “Variable Zwei ist
größer als Variable Eins.“;
}
Auswahlanweisungen: if else
if (ausdruck) {
anweisung
}
else if (ausdruck) {
anweisung
}
else {
anweisung
}
Auswahlanweisungen: switch
Die switch-Anweisung
realisiert eine Auswahl
zwischen beliebig vielen
Alternativen und ist insofern
mit einer geschachtelten
if else-Anweisung
vergleichbar
 Mehrfach-Auswahl
Gewinn- und Abbruchbedingung
Ein Spieler / eine Spielerin hat das Spiel gewonnen,
WENN (IF):
der Spieler drei seiner Symbole in
(unmittelbarer) horizontaler Reihenfolge
abgelegt hat
ODER (II)
der Spieler drei Symbole in diagonaler
Reihenfolge abgelegt hat
Übung 1
Interaktion
 Prüfen I: Wurde ein leeres Spielfeld angeklickt?
Gewinnbedingung
 Prüfen I: Hat ein Spieler / eine Spielerin drei ihrer
Symbole in (unmittelbarer) horizontaler
Reihenfolge abgelegt?
 Prüfen II: Finden sich drei Symbole eines Spielers
in diagonaler Folge?
Übung 1 – Lösung
…
Präsentation und Interaktion – die Spielschleife
SOLANGE kein Spieler / keine Spielerin das Spiel
gewonnen hat, VERFAHRE WIE FOLGEND:
WENN ein leeres Spielfeld angeklickt wurde:
lege die aktuelle SpielerID im
zweidimensionalen Array „gameGrid“ ab
und stelle das Spielersymbol dar
IM ANDEREN FALLE:
tue nichts
Prüfe die Gewinnbedingung
Wiederholungsanweisungen
Wiederholungsanweisungen
Wiederholungsanweisungen (i.e. while, for, do
while) machen‘s möglich, bestimmte
Verarbeitungsschritte unter bestimmten Umständen
zu wiederholen
Beispiele:
 while
 for
 do while
Wiederholungsanweisungen: while
while (ausdruck){
anweisung1
anweisung2
anweisung3
}
 „Führe anweisung1 und anweisung2 und
anweisung3 so lange aus, wie die Bedingung
„ausdruck“ WAHR (TRUE) ist.“
Wiederholungsanweisungen: do while
do {
anweisung1
anweisung2
anweisung3
anweisung4
...
} while (ausdruck)
Wiederholungsanweisungen: for
for(initialisierung;
abbruchbedingung;
inkrementierung) {
anweisung1
anweisung2
anweisung3
anweisung4
...
}
Übung 2
SOLANGE kein Spieler / keine Spielerin das Spiel
gewonnen hat, VERFAHRE WIE FOLGEND:
WENN ein leeres Spielfeld angeklickt wurde:
lege die aktuelle SpielerID im
zweidimensionalen Array „gameGrid“ ab
und stelle das Spielersymbol dar
IM ANDEREN FALLE:
tue nichts
Prüfe die Gewinnbedingung
Themenüberblick „Programmiersprachen II“


Drei-Schichten Architektur / MVC
Programmiersprachen – Konzepte





Variablen
Arrays
Auswahlanweisungen
Kontrollstrukturen
Objektorientierte Programmierung





Objekt
Kapselung / Information Hiding / Geheimnisprinzip
Identität vs. Gleichheit
Notation von Klassen
Vererbung
Butter bei die Fische:
Objektorientierte
Softwareentwicklung
Objekt
Zentrales Konzept: Objekt
 Verfügt über einen bestimmten Zustand
 Reagiert mit einem definierten Verhalten auf
Anforderungen / seine Umgebung
 Besitzt eine Identität, die es von anderen Objekten
unterscheidet.
 Kann mit anderen Objekten verbunden sein:
Objektbeziehungen
Objektorientierte Programmierung
Objektzustand umfasst die Attribute und jeweilige
Verbindungen zu anderen Objekten
Attribute: unveränderliche Merkmale des Objekts;
die Attributwerte können Änderungen unterliegen
Verhalten eines Objekts wird durch eine Menge von
Operationen beschrieben; Änderung oder Abfrage
des Zustandes ausschließlich durch Operationen
Objekt = Daten + Methoden / Operationen
Objektorientierte Programmierung
„Änderung oder Abfrage des Zustandes
ausschließlich durch Operationen“ ???
 Kapselung, Information Hiding,
Geheimnisprinzip
Abb.: Balzert, Heide: Lehrbuch der Objektmodellierung. Heidelberg, 2005.
Objektorientierte Programmierung
var game = {
name : '',
setName : function( gameName ) {
this.name = gameName;
},
state : '',
getGameState : function() {
return this.state;
},
setGameState : function( gameState ) {
this.state = gameState;
},
[…]
};
Objekt
Identität
 Kann sich nicht ändern
 Keine zwei Objekte können dieselbe Identität besitzen 
Besitzen zwei Objekte dieselben Attributwerte, so sind sie
gleich
Beispiel nach Balzert: Michael und Susi haben beide ein Kind
(Daniel)  Gleichheit. Michael und Janine sind Eltern desselben
Kindes (Daniel)  Identität.
Abb.: Balzert, Heide: Lehrbuch der Objektmodellierung. Heidelberg, 2005.
Klassen
Gleichartige Objekte (Objekte mit denselben
Operationen und gleichen Attributen) gehören zur
gleichen Klasse.
Abstrakt vs. konkret: Jedes Objekt ist Exemplar bzw.
Instanz einer Klasse
Klasse: Definiert für eine Sammlung von Objekten
deren
 Struktur (Attribute)
 Verhalten (Operationen)
 Beziehungen
 Verfügt über Mechanismen, um neue Objekte zu erzeugen
(Object Factory)
Klassen in C++  Kapselung / Information Hiding
class EineKlasse
{
public:
// öffentlicher Teil
EineKlasse()
// Konstruktor
{
klassenVariable=23;
}
~EineKlasse();
// Destruktor
int gebeVariablezurueck(void)
{
return klassenVariable;
}
private:
int klassenVariable;
};
// privater Teil
// private Variable
Notation von Klassen
Abb.: Balzert, Heide: Lehrbuch der Objektmodellierung. Heidelberg, 2005.
Vererbung
Zentrales Konzept II: Vererbung
 Eine Klasse kann Elemente (Variablen, Konstanten, Funktionen) von anderen
Klassen erben
Beispiel C++:
class Person
{
string name;
//...
};
class Mitarbeiter : Person
{
long sozialversicherungsNr;
//...
};
Vererbung
Die Klasse Mitarbeiter erbt von der Klasse Person die
entsprechenden Methoden, um auf die Klassenelemente
zuzugreifen und bildet den Spezialfall „Mitarbeiter“ ab, indem
sie die Variable sozialversicherungsNr verwendet:
class Person
{
string name;
//...
};
class Mitarbeiter : Person
{
long sozialversicherungsNr;
//...
};
Martial Arts Objects
Martial Arts Fighter
attribute 1: name
attribute 2: gender
attribute 2: two legs
attribute 3: two arms
behaviour 1: printName()
behaviour 2: walk()
behaviour 3: wave_arms()
Martial Arts Objects
Martial Arts Fighter
attribute 1: name
attribute 2: gender
attribute 2: two legs
attribute 3: two arms
behaviour 1: printName()
behaviour 2: walk()
behaviour 3: wave_arms()
Vererbung
Vererbung beschreibt eine Beziehung zwischen einer
allgemeinen Klasse (Basisklasse) und einer spezialisierten
Klasse.
Die spezialisierte Klasse ist vollständig konsistent mit der
Basisklasse, enthält aber zusätzliche Informationen
(Attribute, Operationen).
Die allgemeine Klasse wird auch als Oberklasse (engl.
super class), die spezialisierte Klasse als Unterklasse (engl.
sub class) bezeichnet.
Das Konzept der Vererbung ist nicht nur dazu gedacht, um
gemeinsame Eigenschaften und Verhaltensweisen
zusammenzufassen, sondern sie muss immer auch eine
Generalisierung bzw. Spezialisierung darstellen, d.h. jedes
Objekt der Unterklasse "ist ein" Objekt der Oberklasse.
/
Hausaufgaben
Aufgabe 1
Erläutern Sie den Begriff "information hiding" und das dahinter stehende Konzept.
Aufgabe 2
Worin unterscheiden sich die while- und die do while-Schleife?
Aufgabe 3
Differenzieren Sie die Begriffe "Klasse" und "Instanz" im Kontext der objektorientierten
Programmierung.
Aufgabe 4
Wofür steht die Abkürzung "MVC" (im besprochenen Kontext)? Beschreiben Sie kurz, was
sich hinter dem Begriff verbirgt.
Aufgabe 5
Lesen Sie die Seiten 283 bis 285 in Balzert, Heide: Lehrbuch der Objektmodellierung
(http://de.scribd.com/doc/32365794/Balzert-Heide-Lehrbuch-Der-Objektmodellierung) und
erläutern Sie die Begriffe "Klassenbibliothek" und "Framework".
Aufgabe 6
Beschreiben Sie kurz den Aufbau und die Bestandteile der for-Schleife. Welche Ausgabe
generiert die folgende for-Schleife?
Herunterladen