Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Einführung in die objektorientierte Programmierung Seminar 3.

Ähnliche Präsentationen


Präsentation zum Thema: "Einführung in die objektorientierte Programmierung Seminar 3."—  Präsentation transkript:

1 Einführung in die objektorientierte Programmierung Seminar 3

2 Uhr-Beispiel: Analyse Brainstorming, welche Klassen wahrscheinlich gebraucht werden (Substantive..) Anzeige, die die Zeit darstellt Zeit, für die Umrechnung in Stunden, Minuten, Sekunden Zeitgeber für regelmäßigen Takt Uhr behält den Überblick über vergehende Zeit und stellt sie dar Verwendung von CRC-Karten

3 Szenario1: Tick des Zeitgebers erhöht die Uhrzeit 1. Zeitgeber muss Uhr sagen, dass Sekunde um ist (Verantwortlichkeit des Zeitgebers mit Uhr als Partner) 2. Uhr muss Tick akzeptieren (Verantwortlichkeit der Uhr, kein Partner nötig, da vom Zeitgeber initiiert) 3. Uhr muss Zeit sagen, dass Sekunde um ist (Verantwortlichkeit der Uhr, Partner Zeit) 4. Zeit muss Sekunden erhöhen (Verantwortlichkeit Zeit, kein Partner nötig)

4 CRC-Karten nach Szenario 1

5 Szenario 2: Zeitanzeige 1. Uhr muss aktuelle Zeit abfragen (Verantwortlichkeit Uhr, Partner Time) 2. Uhr muss Zeit entsprechend dem Anzeigeformat formatieren (Verantwortlichkeit Uhr, kein Partner) 3. Uhr muss Zeit darstellen (Verantwortlichkeit Uhr, kein Partner)

6 CRC-Karten nach Szenario 2

7 Uhr-Beispiel: Entwurf Lösung, Instanzvariablen und Methoden finden Uhr kann Anzeigeformat setzen und die Zeit angeben, reagiert auf Zeitgeber und gibt Ticks an Zeit weiter die Uhr muss beim Starten den Zeitgeber ebenfalls starten Zeit muss Stunden, Sekunden, Minuten errechnen UML-Diagramm erstellen

8 UML-Diagramm Uhr-Beispiel

9 Uhr-Beispiel: Programmierung Definition der Klasse Uhr Object subclass: #Uhr instanceVariableNames: 'zeit zeitgeber darstellungsFormat‘ classVariableNames: '‘ poolDictionaries: '‘ category: 'Uhr'

10 Uhr-Beispiel: Programmierung Definition der Klasse Zeitgeber Object subclass: #Zeitgeber instanceVariableNames: ‘uhr prozess‘ classVariableNames: '‘ poolDictionaries: '‘ category: 'Uhr‘ Klasse Zeit muss nicht definiert werden, da es sie schon gibt (mit allem Nötigen)

11 Uhr-Beispiel: Programmierung Zeitgeber braucht Zugriffsmethoden für Instanzvariable takt uhr ^ uhr uhr: eineUhr "setzt Verweis auf Uhr“ uhr := eineUhr

12 Wie tickt der Zeitgeber? viele Prozesse gleichzeitig möglich in Smalltalk Prozess erzeugen, der nach jeder Sekunde der Uhr die Nachricht naechsteSekunde sendet diesen Prozess bei Bedarf stoppen

13 Wie tickt der Zeitgeber? newProcess an einen Block schicken, erzeugt neuen Prozess im Haltezustand resume startet Prozess Endlosschleife: [true] whileTrue:[]. Klasse Delay kann Instanzen für unterschiedliche Zeitdauern erzeugen, wait pausiert Instanz für angegebene Zeit Prozesse haben Prioritäten, im Beispiel Hintergrundpriorität gewählt

14 Wie tickt der Zeitgeber? startTicken "definiert einen Prozess, der unendlich oft naechsteSekunde pro Sekunde sendet“ prozess := [[true] whileTrue: [(Delay forSeconds: 1) wait. uhr naechsteSekunde.]] newProcess. "dafür sorgen, dass er keine anderen Prozesse unterbricht“ prozess priority: (Processor userBackgroundPriority). "Prozess starten„ prozess resume

15 Zeitgeber anhalten stopTicken prozess terminate Instanzen von Process sind unabhängige Kontrollflüsse korrespondieren nicht mit Betriebssystem-Prozessen oder Threads nur in VM implementiert angehalten (suspend), fortgesetzt (resume), beendet (terminate)

16 Klasse Uhr stunden ^zeit stunden zeit ^zeit zeitgeber ^zeitgeber

17 Klasse Uhr Uhr anhalten und Starten bedeutet, den Zeitgeber zu setzen oder abzubrechen Instanzvariable zeitgeber ist nil, wenn kein Prozess zugewiesen wurde zeitgeber muss mit terminate gestoppt werden (Prozess)

18 Klasse Uhr start zeitgeber isNil ifFalse: [zeitgeber stopTicken]. zeitgeber := SekundenGeber new. zeitgeber uhr: self. zeitgeber startTicken.

19 Klasse Uhr stop zeitgeber isNil ifFalse: [zeitgeber stopTicken]. zeitgeber := nil

20 Klasse Uhr setzeZeit: einString zeit := Time readFrom: (ReadStream on: einString) naechsteSekunde zeit := zeit addTime: (Time fromSeconds: 1)

21 Klasse Uhr darstellungsFormat: einTyp "einTyp sollte '24' oder '12' sein“ darstellungsFormat := einTyp


Herunterladen ppt "Einführung in die objektorientierte Programmierung Seminar 3."

Ähnliche Präsentationen


Google-Anzeigen