Basisinformationstechnologie I Wintersemester 2014/15 07. Januar 2015 Programmiersprachen II Universität zu Köln. Historisch-Kulturwissenschaftliche Informationsverarbeitung Jan G. Wieners // jan.wieners@uni-koeln.de
Themenüberblick Programmiersprachen II Drei-Schichten Architektur / MVC Programmiersprachen Konzepte Variablen Auswahlanweisungen Kontrollstrukturen Objektorientierte Programmierung Objekt Kapselung / Information Hiding / Geheimnisprinzip Vererbung
Programmiersprachen Charakteristika, Konzepte und Methoden 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
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: Datentyp Variablenname Wert (Adresse der Speicherzelle) JavaScript: // Deklaration var meinevariable; // Initialisierung meinevariable = 23; C++: // Deklaration int meinevariable; // Initialisierung meinevariable = 23;
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[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 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? Wiederholungsanweisungen? Sprunganweisungen?
Kontrollstrukturen Unterscheidung von Kontrollstrukturen in: Auswahlanweisungen if if else (switch) Wiederholungsanweisungen while for do while Sprunganweisungen return break continue
WENN es heute NICHT regnet, DANN gehe ich joggen
if (es_regnet ist falsch) { ich gehe joggen; } WENN es heute NICHT regnet, DANN gehe ich joggen
Auswahlanweisungen: if if (ausdruck) { anweisung1 anweisung2 anweisung3... } ausdruck variable1 OPERATOR variable2
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) )
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! ); } WENN es heute NICHT regnet, DANN gehe ich joggen
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 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 // Test horizontale Felder if (gameboard[0][0] === 1 && gameboard[1][0] === 1 && gameboard[2][0] === 1) { } alert( Spielerin mit der ID 1 hat gewonnen! );
Übung 1 // Test diagonale Felder if (gameboard[0][0] === 1 && gameboard[1][1] === 1 && gameboard[2][1] === 1) { } alert( Spielerin mit der ID 1 hat gewonnen! );
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 Vererbung
Last, but not.: Objektorientierte Softwareentwicklung
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; }, [ ]
/