WS12/13 -- Basisinformationstechnologie I | 10: Programmiersprachen II

WS12/13 -- Basisinformationstechnologie I | 10: Programmiersprachen II

45498a716669c6ac165af19c34525ece?s=128

Jan G. Wieners

January 08, 2013
Tweet

Transcript

  1. Universität zu Köln. Historisch-Kulturwissenschaftliche Informationsverarbeitung Jan G. Wieners // jan.wieners@uni-koeln.de

    Basisinformationstechnologie I Wintersemester 2012/13 07. Januar 2013 – Programmiersprachen II
  2.  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 Themenüberblick „Programmiersprachen II“
  3. ...zuvor bei „BIT“: Phasen der Programmentwicklung

  4. Analyse: Spezifikation Entwurf: Algorithmus Implementation: Code (Programmiersprache) ...zuvor bei „BIT“:

    Phasen der Programmentwicklung
  5. …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.)
  6. Implementation

  7. None
  8. None
  9. None
  10.  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 Programmiersprachen
  11. Ans Eingemachte…

  12. None
  13. Darstellung Daten Logik

  14. 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
  15. MVC – Model View Controller (Modell, Präsentation, Steuerung) 1972 im

    Kontext von „Smalltalk“ (objektorientierte Programmiersprache) vorgestellt
  16. Model / Datenhaltungsschicht?

  17. Model! Spielfeld: 3 x 3 Felder Auf jedem Feld wird

    die ID des Spielers abgelegt, der / die das Feld angeklickt hat var gameBoard = [][];
  18. 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;
  19. 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
  20.  Kollisionserkennung / Problem: „Clipping“ Doppelte Genauigkeit…?!?

  21. 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] );
  22. Mehrdimensionale Arrays Zugriff auf Werte in zweidimensionalen Arrays: var cellContent

    = gameBoard[ yCoord ][ xCoord ]
  23. ??? 1. var cellContent = gameBoard[ 0 ] [ 1

    ]; 2. var cellContent = gameBoard[ 2 ] [ 2 ]; 3. var cellContent = gameBoard[ 3 ] [ 1 ];
  24. Spielfluss und Anwendungslogik

  25. 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
  26. 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
  27. Kontrollstrukturen

  28. Unterscheidung von Kontrollstrukturen in:  Auswahlanweisungen  if  if

    else  (switch)  Wiederholungsanweisungen  while  for  do while  Sprunganweisungen  return  break  continue Kontrollstrukturen
  29. if (ausdruck) { anweisung1 anweisung2 anweisung3 ... } ausdruck 

    variable1 OPERATOR variable2 Auswahlanweisungen: if
  30. 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) )
  31. 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
  32. if (ausdruck) { anweisung } else if (ausdruck) { anweisung

    } else { anweisung } Auswahlanweisungen: if else
  33. Die switch-Anweisung realisiert eine Auswahl zwischen beliebig vielen Alternativen und

    ist insofern mit einer geschachtelten if else-Anweisung vergleichbar  Mehrfach-Auswahl Auswahlanweisungen: switch
  34. 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
  35. Ü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?
  36. Übung 1 – Lösung …

  37. 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
  38. Wiederholungsanweisungen

  39. 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
  40. while (ausdruck){ anweisung1 anweisung2 anweisung3 }  „Führe anweisung1 und

    anweisung2 und anweisung3 so lange aus, wie die Bedingung „ausdruck“ WAHR (TRUE) ist.“ Wiederholungsanweisungen: while
  41. do { anweisung1 anweisung2 anweisung3 anweisung4 ... } while (ausdruck)

    Wiederholungsanweisungen: do while
  42. for(initialisierung; abbruchbedingung; inkrementierung) { anweisung1 anweisung2 anweisung3 anweisung4 ... }

    Wiederholungsanweisungen: for
  43. Ü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
  44.  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 Themenüberblick „Programmiersprachen II“
  45. Butter bei die Fische: Objektorientierte Softwareentwicklung

  46. 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 Objekt
  47. 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 Objektorientierte Programmierung Objekt = Daten + Methoden / Operationen
  48. „Änderung oder Abfrage des Zustandes ausschließlich durch Operationen“ ??? 

    Kapselung, Information Hiding, Geheimnisprinzip Objektorientierte Programmierung Abb.: Balzert, Heide: Lehrbuch der Objektmodellierung. Heidelberg, 2005.
  49. var game = { name : '', setName : function(

    gameName ) { this.name = gameName; }, state : '', getGameState : function() { return this.state; }, setGameState : function( gameState ) { this.state = gameState; }, […] }; Objektorientierte Programmierung
  50. 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. Objekt Abb.: Balzert, Heide: Lehrbuch der Objektmodellierung. Heidelberg, 2005.
  51. 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
  52. class EineKlasse { public: // öffentlicher Teil EineKlasse() // Konstruktor

    { klassenVariable=23; } ~EineKlasse(); // Destruktor int gebeVariablezurueck(void) { return klassenVariable; } private: // privater Teil int klassenVariable; // private Variable }; Klassen in C++  Kapselung / Information Hiding
  53. Notation von Klassen Abb.: Balzert, Heide: Lehrbuch der Objektmodellierung. Heidelberg,

    2005.
  54. 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
  55. 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; //... }; Vererbung
  56. 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()
  57. 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
  58. 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. Vererbung
  59. /

  60. 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? Hausaufgaben