Universität zu Köln. Historisch-Kulturwissenschaftliche InformationsverarbeitungJan G. Wieners // [email protected]
Basisinformationstechnologie IWintersemester 2014/15
07. Januar 2015 – Programmiersprachen II
Drei-Schichten Architektur / MVC Programmiersprachen – Konzepte
Variablen Auswahlanweisungen Kontrollstrukturen
Objektorientierte Programmierung Objekt Kapselung / Information Hiding / Geheimnisprinzip Vererbung
Themenüberblick „Programmiersprachen II“
Interpretiert vs. compiliert
Typisierung: statisch, dynamisch, etc.
Paradigmen: Funktional Objektorientiert
Grundlegende Konzepte: Variablen, Arrays, Kontrollstrukturen, Funktionen, Objekte
Das Rad nicht neu erfinden: Design Patterns / Entwurfsmuster, Strukturierungsmuster: MVC (u.a.)
Modellierung
Programmiersprachen – Charakteristika, Konzepte und Methoden
Darstellung
Daten
Logik
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
Schichten-Architektur
MVC – Model View Controller (Modell, Präsentation, Steuerung)1972 im Kontext von „Smalltalk“ (objektorientierte Programmiersprache) vorgestellt
Model / Datenhaltungsschicht?
Model!
Spielfeld: 3 x 3 FelderAuf jedem Feld wird die ID des Spielers abgelegt, der / die das Feld angeklickt hat
var gameBoard = [][];
Arrays und Variablen
Variable: Benannte SpeicherstelleCharakteristika:
Datentyp Variablenname Wert (Adresse der Speicherzelle)
JavaScript:// Deklarationvar meineVariable;
// InitialisierungmeineVariable = 23;
C++:// Deklarationint meineVariable;
// InitialisierungmeineVariable = 23;
Arrays
Array Sammlung von DatenwertenJeder Wert in einem Array wird über den Index adressiert; gezählt wird ab 0: meinArray[index]
// Deklarationvar lottoZahlen = [];
// InitialisierunglottoZahlen[0] = 23;lottoZahlen[1] = 15;lottoZahlen[2] = 3;lottoZahlen[3] = 42; lottoZahlen[4] = 7; lottoZahlen[5] = 8;
// Ausgabedocument.write( lottoZahlen[0] + “, “ + lottoZahlen[1] );
Mehrdimensionale Arrays
Zugriff auf Werte in zweidimensionalen Arrays:
var cellContent = gameBoard[xCoord][yCoord]
???
1. var cellContent = gameBoard[ 0 ] [ 1 ];2. var cellContent = gameBoard[ 2 ] [ 2 ];3. 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 imzweidimensionalen Array „gameGrid“ abund 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 hatODERder Spieler drei Symbole in diagonaler
Reihenfolge abgelegt hat
Kontrollstrukturen
Unterscheidung von Kontrollstrukturen in: Auswahlanweisungen ?
Wiederholungsanweisungen ?
Sprunganweisungen ?
Kontrollstrukturen
Unterscheidung von Kontrollstrukturen in: Auswahlanweisungen
if if else (switch)
Wiederholungsanweisungen while for do while
Sprunganweisungen return break continue
Kontrollstrukturen
WENN es heute NICHT regnet, DANN gehe ich joggen…
WENN es heute NICHT regnet, DANN gehe ich joggen…
if (es_regnet ist falsch) {ich gehe joggen;
}
if (ausdruck) {anweisung1anweisung2anweisung3...
}
ausdruck variable1 OPERATOR variable2
Auswahlanweisungen: if
C++, JavaScript & Co.: (Vergleichs)Operatoren
Operator Operation Beispiel
> Größer als
(„ist Wert1 größer als Wert2?“) Wert1 > Wert2
< Kleiner als
(„ist Wert 1 kleiner als Wert2?“) Wert1 < Wert2
>=Größer gleich
(„ist Wert1 kleiner oder gleich Wert2?“) Wert1 >= Wert2
<=Kleiner gleich
(„ist Wert1 kleiner oder gleich Wert2?“) Wert1 <= Wert2
== Auf Gleichheit prüfen variable1 == variable2
!= Auf Ungleichheit prüfen variable1 != variable2
&&Logisches UND: Zwei Bedingungen
prüfen if( (a==b) && (b==c) )
|| Logisches ODER if( (a==b) || (b==c) )
WENN es heute NICHT regnet, DANN gehe ich joggen…
if (es_regnet == false) {ich gehe joggen;
}
WENN es heute NICHT regnet, DANN gehe ich joggen…
if (es_regnet == false) {ich gehe joggen;
} else {alert(“<3 PS4!“);
}
Gewinn- und Abbruchbedingung
Ein Spieler / eine Spielerin hat das Spiel gewonnen,WENN (IF):
der Spieler drei seiner Symbole in (unmittelbarer) horizontaler Reihenfolge
abgelegt hatODER (II)
der Spieler drei Symbole in diagonaler Reihenfolge abgelegt hat
Übung 1
GewinnbedingungPrü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?
// Test horizontale Felderif (gameBoard[0][0] === 1 &&
gameBoard[1][0] === 1 &&gameBoard[2][0] === 1) {
alert(“Spielerin mit der ID 1 hat gewonnen!“);}
Übung 1
// Test diagonale Felderif (gameBoard[0][0] === 1 &&
gameBoard[1][1] === 1 &&gameBoard[2][1] === 1) {
alert(“Spielerin mit der ID 1 hat gewonnen!“);}
Übung 1
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 imzweidimensionalen Array „gameGrid“ abund stelle das Spielersymbol dar
IM ANDEREN FALLE:tue nichts
Prüfe die Gewinnbedingung
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 (ausdruck){
anweisung1 anweisung2 anweisung3}
„Führe anweisung1 und anweisung2 und anweisung3 so lange aus, wie die Bedingung „ausdruck“ WAHR (TRUE) ist.“
Wiederholungsanweisungen: while
do { anweisung1 anweisung2 anweisung3 anweisung4 ... } while (ausdruck)
Wiederholungsanweisungen: do while
for(initialisierung;abbruchbedingung;
inkrementierung) { anweisung1 anweisung2 anweisung3 anweisung4 ...}
Wiederholungsanweisungen: for
Übung 2
SOLANGE kein Spieler / keine Spielerin das Spiel gewonnen hat, VERFAHRE WIE FOLGEND:
WENN ein leeres Spielfeld angeklickt wurde:lege die aktuelle SpielerID imzweidimensionalen Array „gameGrid“ abund stelle das Spielersymbol dar
IM ANDEREN FALLE:tue nichts
Prüfe die Gewinnbedingung
Drei-Schichten Architektur / MVC Programmiersprachen – Konzepte
Variablen Arrays Auswahlanweisungen Kontrollstrukturen
Objektorientierte Programmierung Objekt Kapselung / Information Hiding / Geheimnisprinzip Vererbung
Themenüberblick „Programmiersprachen II“
Last, but not….:
Objektorientierte Softwareentwicklung
Kapselung, Information Hiding, Geheimnisprinzip
Abb.: Balzert, Heide: Lehrbuch der Objektmodellierung. Heidelberg, 2005.
var game = {
name : '', setName : function( gameName ) { this.name = gameName; },
state : '', getGameState : function() { return this.state; }, setGameState : function( gameState ) { this.state = gameState; }, […]};
Objektorientierte Programmierung
/