Home
Module, Klassen, Verträge Ein Lehrbuch zur
Contents
1. 12 1 5 Testverfahren f r konkrete Klassen 12 1 6 Implementieren der Konzeptklassen 12 1 7 Implementieren der Zeichenkettenklasse 12 1 8 Implementieren der Mengenklasse 12 1 9 Anpassen von Kundenmodulen 12 1510 Fazit en 122 Entwurfsm ster ssnstinin assos iusi 12 2 1 Model View Controller eeeeeee 12 2 2 Carrier Rider Mapper uuneneeeneee 12 2 3 Texteingabe eeennennnen 12 2 4 Textausgabe anna tinea 12 2 5 Implementieren des Eingabemoduls 12 2 6 Implementieren des Ausgabemoduls 12 2 7 RAZA ante ER 12 3 Zusammenfassung eennnnnenenenenenanans 12 4 Literaturhinweise cnennnnnnennensnnennn nenn 12 5 bungen eieiisiiehkkeiisi HEN N xvii Inhaltsverzeichnis xviii A Component Pascal Language Repott ueeeeee B Literaturverzeichnis C Sachwortverzeichnis 25 2 05 Abbildungsverzeichnis Bild 1 1 Physisches Modell des Kaffeeautomaten uenneenee 1 Bild 1 2 Zustands Verhaltens Modell uu00eeenneeeennnnennnnn 2 Bild 1 3 Kunden Lieferanten Modell 0u0000nneenneeeenneeennnnnennnn 2 Bild 1 4 Zustandsdiagramm eines Schalters nueenennnee 7 Bild 1 5 Kunden Lieferanten Modell mit Schnittstelle 9 Bild 1 6 Schnittstelle und Implementation 9 Bild 1 7 Mensch Maschine Modell useeseeessesesenssesnn
2. ceneeneenn 120 6 2 3 Vor und Nachbedingungen cee 121 6 2 4 Thvari nten seesinane iir r 122 6 2 5 Ein Kaffeeautomat mit Vertrag un 124 6 3 Von Cleo zu Component Pascal Schritt 3 126 6 3 1 Zuweisungen siorse iei reiret aiai Ze eaa atia R 127 6 3 2 Initialisierung u eneneeeneennen 130 6 3 3 Ein implementierter Kaffeeautomat 131 6 3 4 Ein implementierter Schalter 133 6 3 5 Implementierte Mengen un nnennee 134 6 4 Schnittstelle und Implementation eenee 142 6 4 1 Abstrakte und konkrete Datenstrukturen 142 6 4 2 Cleo und Component Pascal 144 6 4 3 Eine bersicht un a aaa 146 6 5 Zusammenfassung enennnenenensnennnenene 147 6 6 Literaturhinweise uueeeseesensesenseennenseenenneennenennnnen 147 6 7 bungen nes 148 Ein und Ausgabe nun rien 149 71 Kaffeeautomat als Kommandomodul 149 7 2 Kaffeeautomat mit einfacher Ein Ausgabe 152 72 1 Benutzungsoberfl che 00 eee 154 7 222 ENtWU lf u 2ellneakaaseekthrant 155 72 3 Eingabemodul In und Ausgabemodul Out 157 72 4 Implementation eeeneemenn 159 7 3 Kaffeeautomat mit Dialogbox enneeeenee 163 7 3 1 c Verbunde ox 222 22 2 5er en 163 7 3 2 ENtW rl reits Re eG iss 166 73 3 Implementation eeeeeemennn 166 7 34 Di l gboX un 169 7 4 Kaffeeautomat mit bewachter Dialogbox 174 7 4 1 Defini
3. 6 5 6 6 6 5 Zusammenfassung Schnittstelle Implementation ffentlich exportiert privat intern aufrufbar zugreifbar verborgen gesch tzt stabil nderbar Dienste Operationen konkrete Datenstrukturen und Algorithmen Abfragen Konstanten schreibgesch tzte Variablen Funktionen Aktionen gew hnliche Prozeduren Zusammenfassung Zwischen den Ebenen der Spezifikation und der Implementie rung haben wir Br cken gebaut und berschritten Eine Cleo Schnittstelle l sst sich durch kleine meist syntakti sche Anderungen in eine Component Pascal Schnittstelle transformieren Abfragen werden in Component Pascal durch Konstanten schreibgesch tzte Variablen oder Funktionen implementiert Aktionen durch gew hnliche Prozeduren Eine Cleo Spezifikation durch Vertrag wird in Component Pascal mit Zusicherungen und einer Prozedur f r die Invari anten implementiert Zuweisungen sind elementare Anweisungen die den Zustand von Variablen ver ndern Zuweisungen gen gen um die Algorithmen der Dienste eines Kaffeeautomaten eines Schalters und einer Menge zu implementieren Reihungen sind konkrete Datenstrukturen die aus einer Anzahl gleicher Elemente bestehen Die Elemente einer Rei hung sind durch Indizierung direkt zugreifbar Datenabstraktion ist das Konzept Daten nur durch Wirkun gen von Operationen zu beschreiben und von ihrer konkre ten Implementation zu abstrahieren Datenabstraktion und
4. POINTER TO ARRAY OF CHAR Nach der Vereinbarung zeigt word also auf nichts es kann aber auf eine Reihung von Zeichen zeigen Wie kommt word zu einem Bezug auf eine Reihung Dynamische Variablen Die Variablen die wir bisher kennen hei en statische Varia blen weil sie statisch vereinbart ihre Existenzdauern durch die statische Programmstruktur bestimmt und zur bersetzungs zeit bekannt sind Die Existenzdauer einer globalen Variable reicht vom Laden bis zum Entladen des vereinbarenden Moduls lokalen Variable reicht von einem Aufruf der vereinbarenden Prozedur bis zur R ckkehr aus diesem Prozeduraufruf 275 10 Statische Klassenstrukturen Dynamische Variable Bild 10 11 Speicherplatz zu Zeigervariable und dynamischer Variable exemplarisch gt Referenzierte Variable 276 Zeigervariablen k nnen sich nur auf dynamische Variablen beziehen Eine dynamische Variable wird nicht vereinbart son dern dynamisch erzeugt Sie beginnt zu einem beliebigen Zeit punkt im Programmablauf durch einen expliziten Aufruf einer Erzeugungsoperation zu existieren In Component Pascal ist die Erzeugungsoperation eine berladene Standardprozedur namens NEW mit einem beliebigen Zeiger als OUT Parameter Bei Zeigern auf offene Reihungen hat sie zus tzlich einen IN Para meter f r die L nge der zu erzeugenden Reihung Beispiels weise erzeugt der Aufruf NEW word 5 eine neue dynamische Zeichenreihungsvariable der
5. gt A letter _ digit letter _ digit gt A letter letter _ digit 69 4 Programmiersprachen Zerteilung 4 6 1 3 Formel 4 3 Syntax von Literalen Formel 4 4 Syntax von Zeichen und Zeichenketten 70 A p letter _ digit gt A p letter _ digit letter _ digit gt A p letter letter _ digit gt A p f letter _ digit gt A p f letter _ digit letter _ digit gt A p f letter letter _ digit gt A p f e letter _ digit gt A p f e letter _ digit letter _ digit gt A p f e letter letter _ digit gt A p f e I letter _ digit gt A p f en gt Apfel Diesen Prozess nennt man Ableitung Im Beispiel haben wir den Namen Apfel aus den Syntaxregeln f r Namen abgeleitet Verschiedene Ableitungen k nnen zu demselben Namen f h ren Aber jeder abgeleitete Name ist korrekt und jeder korrekte Name l sst sich ableiten Dagegen scheitert jeder Versuch die Zeichenfolge Hurra als Name abzuleiten denn wir finden keine Regel die ein produziert Meist wollen wir nicht beliebige Namen erzeugen sondern ste hen wie der bersetzer einer Programmiersprache vor der umgekehrten Aufgabe Es ist zu pr fen ob eine gegebene Zei chenfolge ein Name ist Dies ist das Zerteilungsproblem wir behandeln e
6. 1 Funktionsmodul entwickeln 2 Kommandomodul entwickeln 3 Defaultdialogbox erzeugen 4 Dialogbox editieren ist nicht zwingend der umgekehrte Weg ist auch denkbar Mit dem Men befehl Controls New Form kann man eine leere Dia logbox erzeugen in die man mit dem Dialogboxeditor die gew nschten Steuerelemente platziert Dieses Vorgehen ist angebracht wenn man einem Benutzer schnell einen Prototyp einer Benutzungsoberfl che zeigen will ohne eine Funktion zu realisieren 185 7 Ein und Ausgabe 7 6 7 7 7 8 Aufgabe 7 1 Angepasste Oberflache Aufgabe 7 2 Benutzbarkeit 186 Zusammenfassung Wir haben verschiedene Konzepte der Ein Ausgabe kennenge lernt Mit Aufrufsymbolen kann man schnell textuelle Men s zusammenstellen Zum Testen eines Funktionsmoduls ist schnell ein nicht robustes Aufrufmen erstellt Eine Benutzungsoberfl che f r Anwender muss robust sein Um die Aspekte Funktion und Ein Ausgabe voneinander zu trennen verteilt man Aufgaben zwischen Kommando und Funktionsmodulen Die Standardmodule In und Out erm glichen sequenzielle Ein Ausgabe von formatiertem Text Dialogboxen kann man aus Kommandomodulen erzeugen und mit dem Dialogboxeditor gestalten W chter und Melder dienen dazu Dialogboxen benutzer freundlich zu gestalten Spezifikation durch Vertrag hilft dabei Bedingungen f r W chter festzulegen Literaturhinweise Mehr ber die M
7. 255 10 Statische Klassenstrukturen Programm 10 4 CLASS Warenautomat Warenautomat QUERIES au er_Betrieb BOOLEAN eingenommener_Betrag NATURAL Preis NATURAL QUERIES FOR Betriebspersonal gesammelter_Betrag NATURAL ACTIONS Geld_einnehmen IN Betrag NATURAL PRE NOT auBer_Betrieb POST eingenommener_Betrag OLD eingenommener_Betrag Betrag Ware_ausgeben INOUT b Beh lter PRE NOT au er_Betrieb eingenommener_Betrag gt Preis b leer POST eingenommener_Betrag OLD eingenommener_Betrag Preis gesammelter_Betrag OLD gesammelter_Betrag Preis b voll Geld_zur ckgeben PRE NOT au er_Betrieb POST eingenommener_Betrag 0 ACTIONS FOR Betriebspersonal initialisieren IN neuer_Preis NATURAL PRE neuer_Preis gt 0 POST NOT au er_Betrieb eingenommener_Betrag 0 Preis neuer_Preis gesammelter_Betrag 0 INVARIANTS Preis gt 0 gesammelter_Betrag MOD Preis 0 END Warenautomat Die Spezifikationen der konkreten Klassen Kaffeeautomat und Fahr scheinautomat erhalten wir wieder als Erweiterungen der Spezifi kation von Warenautomat Dabei ist jeweils der Name Ware_ausgeben und der Parameter von Ware_ausgeben 256 Programm 10 5 Kaffeeautomat als erweiterter Warenautomat Programm 10 6 Fahrscheinautomat als erweiterter Warenautomat 10 1 4 Bild 10 5 Kovariante Erweiterung 10 1 Fahrscheinautomaten an die konkrete Klasse anzupassen CLASS Kaffeeautomat EXTEN
8. Term IF char IN first Terma THEN S Termo ELSIF char IN first Term THEN S Term ELSIF char IN first Term THEN S Term ELSE error END Der Zerteilungsalgorithmus entsteht also indem man jedes Nichtterminal in einen Aufruf der entsprechenden Prozedur transformiert und jede Folge Auswahl Option oder Wiederho lung von EBNF Ausdr cken jeweils entsprechend in eine Folge Auswahl Option oder Wiederholung von Anweisungen Die Transformationsregeln stellen einige Bedingungen an die Spra che Da unser Beispiel diese Bedingungen erf llt gehen wir nicht auf sie ein Wenden wir die Transformationsregeln schematisch auf unser Beispiel an so erhalten wir die folgenden Prozeduren PROCEDURE Analyze BEGIN next IF char IN first Text THEN ReadText ELSE error END END Analyze 271 10 Statische Klassenstrukturen PROCEDURE ReadText BEGIN WHILE char IN first Text DO IF char IN first word THEN ReadWord ELSIF char IN first nonword THEN ReadNonword ELSE error END END END ReadText PROCEDURE ReadWord BEGIN IF char IN letter THEN next ELSE error END WHILE char IN letter DO next END END ReadWord PROCEDURE ReadNonword BEGIN IF char IN nonletter THEN next ELSE error END WHILE char IN nonletter DO next END END ReadNonword Vereinfachen Im Beispiel ergeben sich Vereinfachungen Angenehmerweise k nnen Syntaxfehler nicht auftreten denn jeder Text erf llt die Syntaxregeln von Text D
9. 31 Appendix D Mandatory Requirements for Environment The Component Pascal definition implicitly relies on three fun damental assumptions 1 There exists some run time type information that allows to check the dynamic type of an object This is necessary to imple ment type tests and type guards 2 There is no DISPOSE procedure Memory cannot be deallo cated manually since this would introduce the safety problem of memory leaks and of dangling pointers i e premature deallo cation Except for those embedded systems where no dynamic memory is used or where it can be allocated once and never needs to be released an automatic garbage collector is required 3 Modules and at least their exported procedures commands and exported types must be retrievable dynamically If neces sary this may cause modules to be loaded The programming interface used to load modules or to access the mentioned meta information is not defined by the language but the language compiler needs to preserve this information when generating code Except for fully linked applications where no modules will ever be added at run time a linking loader for modules is required Embedded systems are important examples of appli cations that can be fully linked An implementation that doesn t fulfill these compiler and envi ronment requirements is not compliant with Component Pascal B Literaturverzeichnis Bucher 1 2 4 5 6
10. 7 9 10 Alfred V Aho Jeffrey D Ullman Informatik Datenstrukturen und Konzepte der Abstraktion International Thomson Publishing Company Bonn 1996 1042 S Grady Booch Jim Rumbaugh Ivar Jacobson Das UML Benutzerhandbuch Addison Wesley Longman Verlag GmbH Bonn 1999 550 S Hartmut Ernst Grundlagen und Konzepte der Informatik Eine Einf hrung in die Informatik ausgehend von den fundamentalen Grundlagen Friedr Vieweg amp Sohn Verlagsgesellschaft mbH Braunschweig Wiesbaden 2000 822 S Martin Fowler Kendall Scott UML konzentriert Die neue Standard Objektmodellierungssprache anwenden Addison Wesley Longman Verlag GmbH Bonn 1998 188 S Erich Gamma Richard Helm Ralph Johnson John Vlissides Entwurfsmuster Elemente wiederverwendbarer objektorientierter Software Addison Wesley Deutschland GmbH Bonn 1996 430 S Gerhard Goos Vorlesungen ber Informatik Band 1 Grundlagen und funktionales Programmieren Springer Verlag Berlin Heidelberg 1997 2 Auflage 394 S Gerhard Goos Vorlesungen ber Informatik Band 2 Objektorientiertes Programmieren und Algorithmen Springer Verlag Berlin Heidelberg 1999 2 Auflage 3705 Gerhard Goos Vorlesungen ber Informatik Band 3 Berechenbarkeit formale Sprachen Spezifikationen Springer Verlag Berlin Heidelberg 1997 284 S Gerhard Goos Vorlesungen ber Informatik Band 4 Paralleles Rechnen und nicht analytische L sungsverfahren
11. ORD MIN CHAR TO ORD MAX CHAR DO freq frequency i IF freq gt 0 THEN Write CHR i freq GraphuUtilities DrawVerticalLine i freq END END Processing frequencySorted frequency Vectors Sort frequencySorted Output ordered by frequencies Out WriteLn Out WriteString Zeichen nach Haufigkeit geordnet Out WriteLn writeCount 0 GraphUtilities OpenNew i LEN frequencySorted 1 freq frequencySorted i WHILE freq gt 0 DO k Vectors MinIndexOf frequency freq Write CHR k freq GraphuUtilities DrawVerticalLine LEN frequencySorted 1 i freq frequency k undefined so we won t get the same index a second time DEC i freq frequencySorted i END END Do END I1CharCounter Die Nummern in der folgenden Liste von Bemerkungen ent sprechen den Nummern bei den Symbolen in Programm 8 7 1 Die Variable freq nimmt eine H ufigkeit auf um mehrere Zugriffe auf dasselbe Reihungselement auf einen Zugriff zu reduzieren Im erzeugten Code muss die Adresse des Rei hungselements nur ein statt drei bzw viermal ermittelt werden Die Zuweisung an freq erfolgt bei der FOR Schleife am Anfang des Schleifenrumpfs bei der WHILE Schleife nach jeder nderung des Indexes also vor der Schleife und am Ende des Schleifenrumpfs freq ist kein wesentlicher Teil der Probleml sung Es handelt sich um eine lokale Optimierung bei der man nicht sicher
12. Operanden und Ausdr cke sind an Typen gebunden binding Ein arithmetischer Ausdruck liefert als Wert eine Zahl und ist daher an einen Zahlentyp gebunden Ein relationaler Ausdruck z B a b lt c liefert als Wert FALSE oder TRUE und ist daher an den Typ BOO LEAN gebunden Ein Ausdruck bewirkt einen Seiteneffekt wenn sich durch die Auswertung des Ausdrucks der Zustand einer Gr e ndert Wird ein seiteneffektbehafteter Ausdruck zweimal direkt nacheinander ausgewertet so k nnen die beiden Ergebniswerte verschieden sein Diese Eigenschaft ist problematisch sie wider spricht dem mathematischen Begriff eines Ausdrucks Deshalb setzen wir im Folgenden meist voraus dass Ausdr cke seiten effektfrei sind Damit ein Ausdruck seiteneffektfrei ist m ssen alle seine Teilausdr cke Operanden und Operationen seitenef fektfrei sein Parameter bergabe Welche Rolle spielen Parameter bei Aufrufen Nehmen wir als Beispiel wieder die Aktionsvereinbarung Geld_einnehmen IN Betrag INTEGER Bei dem formalen Parameter Betrag vom Typ INTEGER handelt sich um einen Eingabeparameter in der Vereinbarung durch IN markiert Betrag Parametername Wert INTEGER Typ 23 2 Spezifizieren Bild 2 2 Parameter bergabe bei Eingabeparameter Parameterart Bild 2 3 Parameter bergabe bei Ausgabeparameter 24 Beim Aufruf eines parametrisierten Dienstes sind aktuelle Para meter anzugeben die in der Anzahl u
13. Spezifizieren will also genauso gut gelernt sein wie Implemen tieren Deshalb untersuchen wir zuerst in Kapitel 2 wie wir die Schnittstelle der Beispielmodule exakter als mit den Program men 1 1 bis 1 3 spezifizieren k nnen denn es fehlt noch einiges Wie das Kaffeeautomatenmodul zu implementieren ist behan deln wir in Kapitel 6 Benutzer Kunde Lieferant Einige eingef hrte Begriffe sind genauer zu kl ren und vonein ander abzugrenzen Benutzer Mensch Maschine Interaktion Benutzungsoberfl che Ger t Maschine Automat Rechner Programm Unter einem Benutzer verstehen wir einen Menschen der ein Ger t eine Maschine einen Automaten einen Rechner bzw ein auf einem Rechner ausgef hrtes Programm benutzt bietet benutzt Eine Benutzungsoberfl che ist der Teil eines Ger ts Pro gramms usw der dem Menschen das Benutzen des Ger ts usw erm glichen soll Benutzt ein Mensch ein Programm das auf Eingaben mit Ausgaben reagiert so sprechen wir von Mensch Maschine Interaktion Dr ckt der Kaffeefreund einen Knopf am Automaten und f llt sich die Tasse mit Kaffee so finden wir die Bezeichnung Mensch Maschine Interaktion hochtrabend Ein Gaspedal bezeichnet man blicherweise nicht als Benutzungsoberfl che 11 1 Einf hrung Tabelle 1 2 Beispiele zu Benutzungs oberfl che Mensch und Maschine Hersteller H ndler K ufer 12 Dennoch sollen zwei technische Beispiele de
14. Wir haben eine Beh lterklasse f r Zeichenketten zu einer poly morphen Beh lterklasse f r geordnete Elemente verallgemei nert indem wir die Konzeptklasse Comparable als Basisklasse f r Elemente eingef hrt haben Der polymorphe Beh lter simuliert einen generischen Beh lter Die Ans tze unterscheiden sich insofern als der generische Ansatz Typsicherheit zur berset zungszeit garantiert w hrend der polymorphe dies erst zur Laufzeit mit bewachten Anweisungen erreicht Die Einf hrung von Konzeptklassen erm glicht es objekt ber greifende Invarianten abstrakt in einer Konzeptklasse zu formu lieren und konkret f r alle Erweiterungen zu testen Fest einge baute Invariantenpr fprozeduren erg nzen das Testen einzelner Dienste durch das Testen des inneren Zusammenhangs der Dienste Da es zu Konzeptklassen viele Erweiterungen geben kann m s sen sie besonders zuverl ssig und stabil sein nderungen an Konzeptklassen wirken sich auf ihre Erweiterungen aus und k nnen diese invalidieren Die starke Abh ngigkeit der Erweite rungen von ihren Basisklassen ist als Problem der fragilen Basisklasse bekannt fragile base class problem Entwurfsmuster Die meisten der benutzten Module haben wir implementiert ausgenommen Standardmodule von BlackBox Als letztes ff nen wir nun die in den Abschnitten 8 2 10 3 und 11 1 eingesetz ten Ein und Ausgabemodule Utilitiesin und UtilitiesOut um zu 12 2 1 Bild 12 6 Model View C
15. formationen ber die Trapursache zu untersuchen Schlie e daraus mittels R ckw rtsrechnen auf die Fehlerursache Rekonstruiere das Entstehen des fehlerhaften Zustands den die Zusicherungspr fung erkannt hat indem du die Anwei sungen vor der Zusicherung zur ck verfolgst Vorteile dieses Testverfahrens sind Es l sst sich weitgehend schematisch anwenden denn der kreative Aufwand liegt darin den Pr fling vertraglich zu spezifizieren Es gibt nur eine Version des Pr flings mit eingebauten Zusi cherungen die sowohl getestet als auch in Anwendungen eingesetzt wird Es ist nicht erforderlich den Pr fling f r eine Testversion zu instrumentieren der Quelltext des Pr flings wird nicht durch zus tzliche Testanweisungen verschmutzt Ein und Auskommentieren bzw bedingtes bersetzen von Testanweisungen entf llt Das Verfahren produziert keine Testausgabe Das erspart dem Tester die M he Testausgabe zu dechiffrieren und auf Korrektheit zu pr fen Die Pr fungen finden nicht nur beim Testen des Pr flings statt sondern auch im Ernstfall wenn er in Anwendungen eingesetzt wird Dies entspricht dem Vorgehen in der Hard ware Hochintegrierte Schaltungen werden so entworfen dass sie sich selbst testen k nnen PCs diagnostizieren regel m ig ob ihre Hardwarekomponenten noch korrekt funktio nieren und melden erkannte Fehler mit Piepst nen Ein Nachteil ist 295 11 Dynamische Objektstr
16. reduziert 220 Kurze Auswertung n tzt nicht nur dabei Vor und Nachbedin gungen und Invarianten kompakt zu formulieren sondern auch bei Pr fungen die sonst mit geschachtelten IF Anweisungen zu l sen w ren IF x gt 0 THEN IFy x lt 1 THEN Zi X Y3 END END ist reduzierbar auf IF x gt 0 amp y x lt 1 THEN ZI X Y END Im Fall x 0 ist y x undefiniert bzw f hrt zu einem Laufzeitfehler Die zweite Formulierung der Anweisung ist also bei langer Aus wertung fehlerhaft und kann zum Abbruch des Programmab laufs f hren w hrend sie bei kurzer Auswertung immer korrekt funktioniert Die erste Formulierung ist in beiden F llen korrekt aber aufw ndiger Kurze Auswertung f hrt zu k rzeren und trotzdem sicheren Programmen Bei Programmiersprachen die die Art der Aus wertung nicht festlegen h ngt die Semantik eines Programms hingegen vom bersetzer ab und der Programmierer muss zwi schen Sicherheit mit Aufwand und Effizienz mit Portierbarkeits problemen w hlen Implementation MathVectorsOflnteger ist ein wiederverwendbares erweiterbares nderbares Modul MODULE MathVectorsOflnteger Interface Description Vector space of type INTEGER provides operations on vectors with element and scalar type INTEGER Lengths of vectors are arbitrary because procedures use open array parameters P IMPORT BEC BasisErrorConstants CONST notFound 1 Possible result of search operations
17. 25 2 05 Formelverzeichnis Formel 1 1 Modulares Softwaremodell uu sseeeeseseenseeennnneeennennnnnnnenn 2 Formel 2 1 Modulares und objektorientiertes Softwaremodell 38 Formel 4 1 EBNF Ausdruck zum Kaffeeautomaten e 63 Formel 4 2 Syntax von Nanie epre aiaa a ap ia aaisa oie 68 Formel 4 3 Syntax von Literalen ueennesesnsnennenenenenenenenenen nenn 70 Formel 4 4 Syntax von Zeichen und Zeichenketten eeee 70 Formel 4 5 Syntax von Zahlen sssini i 71 Formel 4 6 Syntax von Cle ioman e aa Er a 73 Formel 4 7 Softwaremodell von Component Pascal 73 Formel 5 1 Softwaremodell von BlackBox neesensseenseennnnnneeennnnennnnn 87 Formel 5 2 Namengebung f r Subsysteme ueeeneeennene 91 Formel 5 3 Namengebung f r Module u ueeeneeneennne 91 Formel 5 4 Syntax der Sprache des Kommando interpreters 104 Formel 9 1 Zustandsfolge einer Tasse cccces eee essences 232 Formel 9 2 Aktionsfolge einer Tasse nenessnsnennenenen 233 Formel 9 3 Klasse als VerbundtyPp eesnnnnnnnenenenenenenanans 240 Formel 10 1 Syntax des Eingabetextes uenneenenennnen 270 xxxi Formelverzeichnis 25 2 05 Formel 12 1 Vollst ndige Ordnung eensnnnnnenenenenenenanans 335 xxxii 25 2 05 Leitlinienverzeichnis Leitlinie 1 1 Modulare Zusammenfassung neneenenesnennnenn 4 Leitlinie 1 2 Dienste f r kleine T
18. Abstrakte und konkrete Datenstrukturen Die Programme 6 5 und 6 6 sind Beispiele daf r Dieselbe Schnittstelle ist durch unterschiedliche Datenstrukturen mit unterschiedlichen Algorithmen implementiert has in Programm 6 5 set in Programm 6 6 Die Reihungen has und set sind Beispiele f r konkrete Daten strukturen Eine Datenstruktur setzt sich aus Datenelementen zusammen eine konkrete Datenstruktur erlaubt direkte lesende und schreibende Zugriffe auf ihre Elemente z B x array index array index x Das Modul ContainersSetOfChar ist ein Beispiel f r eine abstrakte Datenstruktur Diese stellt eine Schnittstelle aus Operationen zur Verf gung und erlaubt nur Aufrufe dieser Operationen siehe Bild 6 9 Der Zugriff auf die Daten erfolgt indirekt ber die Algorithmen der Operationen Die Operationen ihre Wir kungen und Ergebnisse bestimmen die Semantik der abstrakten Datenstruktur Das Konzept der Datenabstraktion passt gut zum modularen Programmieren indem man eine Datenstruktur und die darauf zugreifenden Operationen als modulare Einheit betrachtet Bild 6 9 Abstrakte Datenstruktur Datenkapselung Anderbarkeit und Zuverlassigkeit Schreibgesch tzte Variable oder Funktion 6 4 Schnittstelle und Implementation Aufrufe Verhalten A ee Ye 7 J NON Operationen Has Put Remove Algorithmen Zugriffe Datenstruktur has oder set Implementation Zustand i Schnittstelle ffentlich
19. BOOLEAN BEGIN ASSERT x NIL BEC precondPar1 NotNil result Has set root x ASSERT result amp set IsEmpty BEC postcondResultOk RETURN result END Has PROCEDURE AreDisjoint tree other Node BOOLEAN PROCEDURE Inorder tree Node BOOLEAN BEGIN RETURN tree NIL OR other NIL OR Inorder tree left amp Has other tree item amp Inorder tree right END Inorder BEGIN RETURN Inorder tree END AreDisjoint PROCEDURE IN a SetDesc IsDisjoint IN b SetDesc BOOLEAN NEW I Does a not share elements with b Postcondition result a b emptySet VAR result BOOLEAN BEGIN result AreDisjoint a root b root ASSERT result AreDisjoint b root a root BEC postcondResultOk RETURN result END IsDisjoint 329 11 Dynamische Objektstrukturen Actions PROCEDURE Put VAR tree Node item Element Insert new node with node item item into tree such that the order is kept BEGIN ASSERT item NIL BEC precondParsConsistent IF tree NIL THEN NEW tree tree item item ELSIF item lt tree item THEN Put tree left item ELSIF item gt tree item THEN Put tree right item END END Put PROCEDURE VAR set SetDesc Put x Element NEW Include x into set BEGIN ASSERT x NIL BEC precondPar1 NotNil Put set root x set Checklnvariants ASSERT set Has x BEC postcondSupplierOk END Pu
20. END END END Remove Den f nften Fall bew ltigt eine weitere rekursive Prozedur MoveMin die in tree den Knoten mit dem kleinsten Element ent fernt und dieses Element an item bergibt PROCEDURE MoveMin VAR tree Node OUT item Element BEGIN ASSERT tree NIL BEC precondPar1 NotNil IF tree left NIL THEN item tree item tree tree right ELSE MoveMin tree left item END ASSERT item NIL BEC postcondParNotNil END MoveMin Difference Die Baumprozeduren fiir Vereinigung Differenz Durchschnitt und symmetrische Differenz formulieren wir als Funktionspro zeduren mit Zeigerparametern auf die beiden Operandenbaume und einem Ergebniszeiger auf den durch die Operation entstan denen Baum Die Inorder Traversierung ist hier ungiinstig da der dabei entstehende Ergebnisbaum zu einer Liste entartet Dagegen reproduziert die Pr order Traversierung die Struktur des durchlaufenen Baums PROCEDURE Difference tree other Node Node VAR result Node 324 Aliasproblem Bild 11 20 Aliassituation 11 3 Mengenklasse f r Zeichenketten PROCEDURE Preorder tree Node BEGIN IF tree NIL THEN IF Has other tree item THEN Put result tree item END Preorder tree left Preorder tree right END END Preorder BEGIN Preorder tree RETURN result END Difference Beim Implementieren der Mengenprozeduren fiir Vereinigung Differenz Durchschnitt und symmetrische Differenz m ssen w
21. END Kunde_von_Kaffeeautomat Der Kunde muss zeigen dass er den Kaffeeautomaten meint und nicht den Servierroboter Gestufte Namengebung kennen wir Beim Telefonieren steht 09876 12345 f r Ortsnetz Teilneh mernummer Unter uns wissen wir wer Hans ist sonst hei t er Meier Hans oder Johannes Meier Es geht darum Namens konflikte aufzul sen und eindeutige Namen zu erzielen Bei der 21 2 Spezifizieren Ausdruck Anweisung 2 2 3 22 Punktschreibweise dot notation trennt und verbindet der Punkt die Namenteile Programmtexte mit qualifizierten Namen sind besser lesbar weil man sofort erkennt welches Modul einen benutzten Dienst vereinbart Ein Aufruf einer Abfrage liefert einen Wert aus dem Wertebe reich des Typs der Abfrage Beispielsweise gibt Kaffeeautomat Preis eine ganze Zahl angenommen 60 an die Aufrufstelle zur ck Der Wert steht dann bereit um weiter verarbeitet zu werden Mit anderen Begriffen Ein Abfragenaufruf ist ein spezieller Ausdruck expression Ausdr cke werden ausgewertet und ergeben Werte So liefert die Auswertung des Ausdrucks Kaffeeautomat Preis als Ergebnis den Wert 60 Der Ausdruck wird durch seinen Ergebniswert ersetzt Aufrufe von Aktionen sind dagegen Anweisungen statement sie ver ndern den Zustand des Aufgerufenen Nach dem Aufruf Kaffeeautomat Kaffee_ausgeben liefert Kaffeeautomat eingenommener_Betrag 60 Einheiten weniger als vorher Kaffeeautomat gesammelter_B
22. Effizienz Variante 2 der Suchfunktion MinIndexOf Effizienz 222 RETURN Anweisung stehen Um den Ergebniswert in der Nach bedingung benennen zu k nnen ist daf r eine lokale Variable result vereinbart PROCEDURE MinIndexOf IN x ARRAY OF Any item Any Index VAR result i Index BEGIN result notFound i 0 WHILE result notFound amp i lt LEN x DO IF x i item THEN result i END INC i END ASSERT result notFound OR 0 lt result amp result lt LEN x amp x result item BEC postcondResultOk RETURN result END MinlIndexOf Man iiberzeugt sich leicht dass dieser Algorithmus korrekt ist denn er ist systematisch konstruiert Sein Nachteil ist dass jeder Schleifendurchlauf drei relationale Ausdriicke priift Eine der Priifungen ist der Variable result anzulasten Eliminieren wir sie so erhalten wir die quivalente Variante 2 PROCEDURE MinIndexOf IN x ARRAY OF Any item Any Index VAR i Index BEGIN i 0 WHILE i lt LEN x amp x i item DO INC i END ASSERT i LEN x OR x i item BEC invariant IF i lt LEN x THEN RETURN i ELSE RETURN notFound END END MinlIndexOf Man beachte dass die kurze Auswertung der Schleifenbedin gung wesentlich fiir die Korrektheit der Schleife ist Variante 2 priift zwei Vergleiche pro Schleifendurchlauf Wie beim Ausgabeschritt auf S 210 k nnen wir den Algorith
23. Entwurf 5 des Ausgabeschritts Semantik 8 1 Zeichen sammeln Hat die Schleifenvariable i vor der Stelle den letzten Wert i ORD MAX CHAR ORD OFFFFX OFFFFH so ist ihr n chster Wert OFFFFH 1 10000H gt OFFFFH ORD MAX CHAR Damit ist die Abbruchbedingung erf llt und die Schleife terminiert Bei dieser Schleife ist die Anzahl der Durchl ufe bei jeder Aus f hrung gleich n mlich ORD MAX CHAR ORD MIN CHAR 1 Darin unterscheidet sie sich von der Eingabeschleife bei der die Anzahl der Durchl ufe von der L nge des Eingabetextes abh ngt Im Entwurf 4 wird i dreimal im Schleifenrumpf benutzt aber nur einmal ver ndert Die letzte Anweisung das INC i z hlt i ausgehend von einer Untergrenze hoch bis es eine feste Obergrenze tiberschreitet Diese Situation ist typisch fiir eine spezielle Art von Schleifen die Z hlschleifen Da sie oft vorkommen bietet Component Pascal daf r als eigenes Konstrukt die FOR Anweisung Damit formuliert sich die Ausgabeschleife so FOR i ORD MIN CHAR TO ORD MAX CHAR DO IF ContainersSetOfChar Has CHR i THEN Out Char CHR i END END i nimmt nacheinander alle Werte des Intervalls von ORD MIN CHAR bis ORD MAX CHAR an fiir jeden Schleifendurchlauf einen i wird implizit am Ende des Schleifenrumpfs um 1 erh ht Das allgemeine Muster der FOR Schleife lautet FOR i Initialausdruck TO Terminalausdruck BY Schrittweite DO zu wiederholende
24. FOR i ORD MIN CHAR TO ORD MAX CHAR DO IF Set Has CHR i THEN Out Char CHR i END END is Out Ln END Do END I1CharCollector 196 8 1 Zeichen sammeln 8 1 3 Muster zum Durchlaufen einer Reihung Programm 8 2 Leeren einer Zeichenmenge S pezifizieren Pradikatenlogik Zur besseren Lesbarkeit bleibt der Grobentwurf des Algorith mus von S 187 als Gliederungskommentar erhalten Bei ergan zen wir ein Out Ln damit die n chste Ausgabe in einer neuen Zeile beginnt Erweitern des Mengenmoduls Programm 8 1 benutzt das erweiterte Modul ContainersSetOfChar Hier implementieren wir die Prozedur WipeOut die in das Pro gramm 6 6 S 138 aufzunehmen ist Die Zeichenmenge ist dort durch eine Reihung set mit dem Elementtyp SET implementiert Um die Zeichenmenge zu leeren ist jedes SET Element der Rei hung set zu leeren Das algorithmische Muster zum Bearbeiten aller Elemente einer Reihung array ist eine FOR Schleife FOR i 0 TO LEN array 1 DO bearbeite array i END Die leere Menge als Wert des SET Typs ist durch dargestellt Damit erhalten wir die L sung PROCEDURE WipeOut VAR i INTEGER BEGIN FOR i 0 TO LEN set 1 DO set i END END WipeOut Wir haben uns mit einer verbalen Spezifikation von WipeOut begn gt Wie ist es vertraglich zu spezifizieren Vorbedingung stellt es keine die Nachbedingung k nnen wir formulieren und schrittweise formalisieren wobei die A
25. Out WriteString 11 WordChecker found the following words Out WriteLn foundWords ForAllDo wordWriter END WriteFoundWords 10 3 W rter sammeln Rechtschreibung pr fen PROCEDURE WriteUnknownWords VAR wordWriter WordWriterDesc BEGIN Out WriteLn Out WriteString 11 WordChecker found the following unknown words Out WriteLn unknownWords ForAllDo wordWriter END WriteUnknownWords PROCEDURE Check BEGIN ReadText foundWords unknownWords SetDifference foundWords dictionary WriteUnknownWords END Check BEGIN 2 oS ASSERT maxWordLength gt 1 BEC invariantModule dictionary WipeOut foundWords WipeOut unknownWords WipeOut END I1WordChecker Die Nummern in der folgenden Liste entsprechen den Num mern bei den Symbolen in Programm 10 7 1 Die Variable char und die Prozeduren ReadWord und ReadNon word sind lokal in ReadText vereinbart gem Leitlinie 10 1 Leitlinie 10 1 Lokalit t Vereinbare Merkmale vor allem Variablen und Prozeduren so lokal wie m glich Je kleiner die G ltigkeitsbereiche von Merkmalen desto sicherer und anderungsstabiler ist ein Pro gramm und desto unwahrscheinlicher sind Namenskonflikte Ausgenommen sind nat rlich exportierte Merkmale bei denen die allgemeine Verwendbarkeit im Vordergrund steht Optimieren char ist aus Effizienzgr nden kein Parameter von ReadWord und ReadNonword Da ReadText ReadWord und ReadNonword ber char kommunizieren ge
26. POINTER TO ActionDesc ActionDesc ABSTRACT RECORD END PROCEDURE VAR action ActionDesc Do item Element NEW ABSTRACT Wahrend Cleo in Erweiterungsklassen redefinierte Dienste mit dem REDEFINES Konstrukt hervorhebt dreht Component Pascal den Spie um und markiert erstmalig definierte typgebundene Prozeduren mit dem Attribut NEW Zus tzlich erh lt Do als abstrakte Prozedur das Attribut ABSTRACT Do hat keinen Proze durrumpf Au erdem kennzeichnet das Attribut ABSTRACT des Verbundtyps die Klasse als abstrakt F r die Klasse Set vereinbart ContainersSetsOfString PROCEDURE IN set SetDesc ForAllDo VAR action ActionDesc NEW Der bisherige Eingabeparameter wird zu einem Ein Ausgabe parameter Das ist zwar fiir unser Beispiel nicht notwendig macht aber ForAllDo noch flexibler Eine Erweiterungsklasse von Action k nnte z B das Do so redefinieren dass es z hlt wie oft es aufgerufen wird Ein Objekt dieser Klasse m sste seinen eige nen Z hler inkrementieren als VAR Parameter von ForAllDo d rfte es das als IN Parameter nicht Beim Kunden von ContainersSetsOfString also in I1WordChecker ist die Erweiterungsklasse zu vereinbaren und die Prozedur Do zu implementieren TYPE WordWriterDesc RECORD ContainersSetsOfString ActionDesc END PROCEDURE VAR ww WordWriterDesc Do word Sets Element BEGIN Out WriteString word Out WriteLn END Do Au erdem ist in I1WordChecker der Name im Aufru
27. Speicherbereinigung und Speichersicherheit Um die Referenzsemantik exemplarisch zu erl utern vereinba ren wir zwei Zeigervariablen VAR word other POINTER TO ARRAY OF CHAR und programmieren die Anweisungen NEW word 4 other word Ihre Wirkung zeigt das folgende Bild 277 10 Statische Klassenstrukturen Bild 10 12 Zeigervariablen und dynamische Variable exemplarisch Alias Bild 10 13 Unerreichbare dynamische Variable exemplarisch Automatische Speicherbereinigung 278 word BR 0 4 2 3 POINTER TO ARRAY OF CHAR 0X 0X Ox Ox other Be CHAR CHAR CHAR CHAR ARRAY 4 OF CHAR POINTER TO ARRAY OF CHAR word und other beziehen sich auf dieselbe dynamische Variable word und other sind zwei Aliasnamen f r dieselbe Reihung In einer Aliassituation hat ein Objekt mehrere Namen Aliassitua tionen k nnen auch bei Referenzparametern auftreten Mit NIL sind neben Vergleichen auch Zuweisungen und Parame ter bergaben m glich Die Zuweisungen word NIL other NIL wirken vom Zustand des Bildes 10 12 ausgehend so word NIL 0 1 2 3 POINTER TO ARRAY OF CHAR Ox 0X 0X 0X CHAR CHAR CHAR CHAR other NIL ARRAY 4 OF CHAR POINTER TO ARRAY OF CHAR Die dynamische Reihungsvariable ist von keinem Zeiger mehr referenziert sie ist unerreichbar geworden Component Pascal gibt den von unerreichbaren dynamischen Var
28. THEN Readldentifier ELSIF ch gt 0 amp ch lt 9 THEN ReadNumber ELSIF ch OR ch THEN ReadString ELSE SpecialCharacter END 9 5 Case Statements Case statements specify the selection and execution of a state ment sequence according to the value of an expression First the case expression is evaluated then that statement sequence is executed whose case label list contains the obtained value The case expression must be of an integer or character type that includes the values of all case labels Case labels are constants and no value must occur more than once If the value of the expression does not occur as a label of any case the statement sequence following the symbol ELSE is selected if there is one otherwise the program is aborted CaseStatement CASE Expression OF Case Case ELSE StatementSequence END Case CaseLabelList StatementSequence CaseLabelList CaseLabels CaseLabels CaseLabels ConstExpression ConstExpression Example CASE ch OF A Z Readldentifier o 9 ReadNumber o ReadString ELSE SpecialCharacter END 9 6 While Statements While statements specify the repeated execution of a statement sequence while the Boolean expression its guard yields TRUE The guard is checked before every execution of the statement sequence WhileStatement WHILE Expression DO StatementSequence END Examples WHILE i gt 0 DOi i
29. Wertebereich Operationen Zeigervariable NIL Bild 10 10 Speicherplatz zu Zeigervariable exemplarisch 10 3 5 1 Statische Variable 10 3 W rter sammeln Rechtschreibung pr fen einem Reihungstyp als Zeigerbasistyp sie gelten jedoch auch bei Verbundtypen insbesondere Klassen als Zeigerbasistypen Zeigertypen d rfen wie andere Typen in Vereinbarungen von Typen Variablen und Prozedursignaturen auftreten Wie andere Typen legen Zeigertypen den Wertebereich und die Operationen ihrer Exemplare fest Den Wertebereich eines Zei gertyps bilden Bez ge auf Exemplare seines Basistyps Au er dem geh rt ein besonderer Wert namens NIL zum Wertebereich jedes Zeigertyps er bedeutet den Bezug auf nichts siehe unten Die zul ssigen Operationen auf Exemplaren von Zeigertypen sind Zuweisung Vergleich mit und Parameter bergabe und Dereferenzierung siehe unten Eine Zeigervariable ist eine Variable deren Typ ein Zeigertyp ist z B VAR word POINTER TO ARRAY OF CHAR Zeigervariablen weisen dieselben allgemeinen Merkmale wie andere Variablen auf Sie haben einen unver nderlichen stati schen Typ den Zeigertyp und einen ver nderlichen Wert NIL oder einen Bezug auf ein Exemplar des Zeigerbasistyps Welchen Wert hat word nach der Vereinbarung Component Pas cal initialisiert jede Zeigervariable implizit mit NIL das anzeigt dass die Variable an kein Exemplar ihres Basistyps gebunden ist word NIL
30. Wertebereich FALSE TRUE Bedeutung Typname BOOLEAN Operationen NOT AND OR IMPLIES Boolesche Gr en Zeichen CHAR Z B a 2 lt gt lt gt O 9 0 1 2 Nat rliche NATURAL Zahlen Ganze Zahlen Gleitpunkt zahlen DIV MOD lt gt lt gt INTEGER 7 2 1 0 1 2 REAL Z B 12 34E 56 987 654E32 zh lt gt lt gt Man beachte dass 1 ein Zeichen 1 eine Zahl darstellt Die Gleitpunktzahl 1 35104 wird als 1 35E 24 dargestellt d h das E bedeutet mal 10 hoch Ein Kaffeeautomat Untersuchen wir Bild 1 1 S 1 und das Kaffeeautomaten Pro gramm 1 1 S 4 Hinter welchen Namen verbergen sich Werte Hinter Abfragen und Parametern Abfragen liefern Werte als Ergebnisse Parameter beeinflussen mit Werten den Effekt von Aktionen Werte geh ren zu Wertebereichen Wertebereiche zu Typen Daher k nnen wir Abfragen und Parametern Typen zuordnen und so das typlose Programm 1 1 typisieren Man spricht von Typbindung typing Jede Abfrage und jeder Para meter ist an einen Typ gebunden 1 Eine Abfrage liefert einen Wert eines bestimmten Typs Also versehen wir die Namen der Abfragen mit Typangaben Das rote Anzeigel mpchen au er Betrieb in Bild 1 1 S 1 steht f r die Aussage Der Kaffeeautomat ist au er Betrieb Parameter Programm 2 1 Kaffeeautomat als Modul
31. Wir erl utern nun Details der EBNF indem wir damit als Bei spiel die Spezifikationssprache Cleo beschreiben beginnend auf der unteren lexikalischen Ebene Wir beschr nken uns auf etwa die Teile von Cleo die wir in Kapitel 2 benutzt haben lassen jedoch offen Cleo nach Bedarf zu erweitern Lexikalische Einheiten Die lexikalischen Einheiten von Cleo entsprechen meist denen von Component Pascal nur bei implizit definierten Namen Operatoren und Begrenzern unterscheiden sich die beiden Spra chen siehe Component Pascal Language Report Anhang A Zeichensatz Die Terminale der lexikalischen Ebene sind die Zeichen eines Zeichensatzes F r Cleo und Component Pascal ist es der Unico dezeichensatz Gro und Kleinbuchstaben sind verschiedene Zeichen Exkurs Der ASCII Code American Standard Code for Information Interchange ist in der Datenverarbeitung am weitesten verbreitet Er wurde von der ISO International Standardization Organization genormt Der ASCII Code ist ein 8 Bit Code nutzt aber nur die 7 rech ten Bits sodass 27 128 verschiedene Zeichen darstellbar sind Der ASCII Zeichensatz enth lt alphanumerische Zeichen Sonderzeichen und einige Steuerzeichen Manche L nder verwenden Varianten des ASCII Codes um landesspezifische Zeichen unterzubringen Eine Erweiterung des ASCII Codes ist der durch die ISO Norm 8859 1 fest gelegte Zeichensatz mit der Bezeichnung Latin1 Er enth lt alle von ASCII nicht erfassten europ i
32. beachten Sie dass diese nicht defaultm ig initialisiert wird und verwenden Sie die Fabrikfunktion von ContainersStrings String um eine Kopie von word zur Menge words hinzuzuf gen Erg nzen Sie das Klassenmodul ContainersSetsOfComparable um ein Modul ContainersSetsOfAny das eine polymorphe Mengenklasse Set exportiert die als Elementtyp beliebige Erweiterungen der Konzeptklasse BasisGenerals Any akzeptiert Da die Menge von ihren Elementen keine Ordnung fordert ist sie nicht mit einem geordneten Bin rbaum implementierbar Programmieren Sie stattdessen eine L sung mit einer Liste Component Pascal Language Report Copyright 1994 2001 by Oberon microsystems Inc Switzerland All rights reserved No part of this publication may be reproduced in any form or by any means without prior written permission by Oberon microsystems The only exception is the free electronic distribution of the Education Edition of BlackBox see the accompanying copyright notice for details Oberon microsystems Inc Technoparkstrasse 1 CH 8005 Z rich Switzerland Oberon is a trademark of Prof Niklaus Wirth Component Pascal is a trademark of Oberon microsystems Inc All other trademarks and registered trademarks belong to their respec tive owners Authors Oberon microsystems Inc March 2001 Authors of Oberon 2 report H M ssenb ck N Wirth Institut fiir Computersysteme ETH Ziirich October 1993 Author of Oberon report N Wir
33. calls the Insert method of Tree END Insert PROCEDURE obj Object Draw w Window NEW ABSTRACT PROCEDURE obj Object Notify e Event NEW EMPTY 10 3 Predeclared Procedures The following table lists the predeclared procedures Some are generic procedures i e they apply to several types of operands v stands for a variable x and y for expressions and T for a type The first matching line gives the correct result type Function procedures Name Argument type Result type Function ABS x lt INTEGER INTEGER absolute value LONGINT type of x real type type of x ASH x y x lt INTEGER INTEGER arithmetic shift x 2 y x LONGINT LONGINT y integer type BITS x INTEGER SET i ODD x DIV 2Xi 401 A Component Pascal Language Report 402 CAP x CHR x ENTIER x LEN v x LEN v LONG x MAX T MAX x y MIN T MIN x y ODD x ORD x character type type of x integer type CHAR real type LONGINT v array INTEGER x integer constant array type INTEGER String INTEGER BYTE SHORTINT SHORTINT INTEGER INTEGER LONGINT SHORTREAL REAL SHORTCHAR CHAR Shortstring String T basic type T T SET INTEGER lt INTEGER INTEGER integer type LONGINT lt SHORTREAL SHORTREAL numeric type REAL SHORTCHAR character type CHAR T basictype T T SET INTEGER lt INTEGER INTEGER integer type LONGINT lt SHORTREAL SHORTREAL numeric type REAL SHORTCHAR character type
34. und der BlackBox Online Dokumentation beschrieben Dem Leser der nun seine informatischen Kenntnisse vertiefen m chte empfehlen wir A Aho und J Ullman 1 sowie G Goos 6 7 8 9 Ubungen Mit diesen Aufgaben tiben Sie das Anpassen und Verallgemei nern objektorientierter Programme 375 12 Vom Entwerfen zum Testen Aufgabe 12 1 Anpassen des Testmoduls zur Mengenklasse Aufgabe 12 2 Anpassen des Moduls zur Rechtschreibpr fung Aufgabe 12 3 Verallgemeinern der Mengenklasse 376 Programmieren Sie ein Testmodul TestSetsOfComparable zu Contai nersSetsOfComparable indem Sie das Testmodul TestSetsOfString Programm 11 4 S 298 anpassen Importieren Sie dazu Contai nersStrings und ersetzen Sie an einer Stelle ContainersSetsOfString Ele ment durch ContainersStrings String Die Implementation des Do von WriterDesc erfordert jetzt einen Typtest f r die kovariante Erwei terungssituation Zuf llige Zeichenketten liefert InitRandom von ContainersStrings String Au erdem m ssen die Set Objekte dynami sche statt statische Objekte sein Programmieren Sie eine Variante des W rterpr fermoduls I1WordChecker Programm 10 7 S 280 die ContainersSetsOfCompara ble und ContainersStrings statt ContainersSetsOfString benutzt Wie in Aufgabe 12 1 sind die Implementation des Do von WriterDesc und die Vereinbarungen und Initialisierungen der Set Objekte anzu passen Vereinbaren Sie in ReadText word als statische Reihung
35. von Programmst cken 157 297 von regul rem Ausdruck und Zustandsdia gramm 233 von Vertrag und Zustands diagramm 231 232 Arbeitsteilung 10 118 261 Arithmetik 35 191 206 ARRAY 134 135 158 164 296 ASSERT 120 123 128 157 190 192 203 210 277 279 312 assignment Zuweisung Assoziation 257 261 Assoziativit t 339 Attribut Feld eines Verbunds einer Klasse 267 290 349 355 einer Prozedur 244 247 267 343 349 eines Textteils 98 eines Zeichens 363 Aufgabe 4 5 41 45 47 49 53 56 61 82 84 139 187 188 237 240 248 Aufgabenteilung 15 44 261 285 Aufgerufener 20 22 24 176 Aufruf 23 26 28 102 106 113 116 150 152 154 157 162 166 168 169 188 208 211 223 233 234 244 263 267 269 271 275 276 279 280 289 291 300 303 305 307 325 342 355 367 einer Abfrage 22 24 149 295 einer Aktion 22 32 149 166 294 einer Funktion 297 300 301 312 einer Operation 142 einer Prozedur 76 114 129 162 181 191 214 215 217 244 247 361 eines Dienstes 20 21 24 26 30 37 123 195 196 239 244 294 eines Kommandos 13 93 101 104 149 152 162 172 173 178 187 195 200 216 292 Aufrufbarkeit 32 33 Aufrufer 20 24 176 274 280 353 Aufrufkeller 152 Aufrufkette 152 Aufrufstelle 22 116 Auftrag 29 30 154 319 Aufwand 220 333 f r Entwicklung 42 43 48 C Sachwortverzeichnis 110 163 184 295 mittlerer 312 317 Suchaufwan
36. 268 10 3 4 Syntaxanalyse ispisiri 270 10 39 Zeigen ligne ll 274 10 3 6 Implementation 280 10 3 7 Fazit rss ante 284 10 4 Zusammenfassung ennnenenenenenns 284 10 5 Literaturhinweise usenennennesnensneennn nenn 285 10 6 bungen une Eee a 285 Dynamische Objektstrukturen uneeeneee 287 11 1 Pr fling Testmodul und Testwerkzeug 287 11 1 1 Spezifikation des Mengenklassenmoduls 288 11 1 2 Spezifikation des Testwerkzeugmoduls 290 11 1 3 Testmodul zur Mengenklasse u 292 11 2 Testwerkzeugmodul eeeeeeeeennneeneen 301 1124 Entwurt eseelanaseiiankan 301 11 2 2 Dynamische Objektstruktur Liste 304 11 2 3 Implementation 0 0 eee eee 308 12 Inhaltsverzeichnis 11 24 Fazit fsck evict ernten 11 3 Mengenklasse fiir Zeichenketten 0 0 0 0 cece 11 3 1 Rekursive Objektstruktur Binarbaum V3 2 EntWU lf beets eres aeara lenis fetid heii eins 11 3 3 Implementation 0 0 eee eee 11 34 Fazit BER ties 11 4 Zusammenfassung nenennennenennnne 11 5 Literaturhinweise unsesesneneesneennenneennennennnnnn 11 6 bungen erlebe NEE E 12 1 Polymorphe Mengenklasse f r geordnete Elementen 2 505 een 2a 12 1 1 Abstrahieren von den Elementen 12 1 2 Abstrahieren von der Mengenklasse 12 1 3 Konzept Schnittstellen und Implementationsklassen nnne 12 1 4 Objekt bergreifende Invarianten
37. 395 A Component Pascal Language Report 396 Loop statements are useful to express repetitions with several exit points or cases where the exit condition is in the middle of the repeated statement sequence 9 10 Return and Exit Statements A return statement indicates the termination of a procedure It is denoted by the symbol RETURN followed by an expression if the procedure is a function procedure The type of the expression must be assignment compatible see App A with the result type specified in the procedure heading see Ch 10 Function procedures require the presence of a return statement indicating the result value In proper procedures a return state ment is implied by the end of the procedure body Any explicit return statement therefore appears as an additional probably exceptional termination point An exit statement is denoted by the symbol EXIT It specifies ter mination of the enclosing loop statement and continuation with the statement following that loop statement Exit statements are contextually although not syntactically associated with the loop statement which contains them 9 11 With Statements With statements execute a statement sequence depending on the result of a type test and apply a type guard to every occurrence of the tested variable within this statement sequence WithStatement WITH Guard DO StatementSequence Guard DO StatementSequence ELSE StatementSequence END Guar
38. Bild 8 5 Klassifikation von Typen 8 2 Zeichen z hlen TYPE Right hand type may be substituted by Integer INTEGER BYTE SHORTINT LONGINT Real REAL SHORTREAL Numeric Integer Real Comparable Numeric CHAR ARRAY OF CHAR Any Comparable any type Index INTEGER Operations Applicable on Vectors with Any Element Type PROCEDURE MinIndexOf IN x ARRAY OF Any item Any Index Index of the first occurrence of item in x Postcondition result notFound OR result is the smallest index such that x result item END MinlIndexOf Other operations not shown END MathVectorsOflnteger Die Liste der Typvereinbarungen erleichtert es das Vektormo dul an Vektoren mit anderen Elementtypen anzupassen Zugrunde liegt eine Klassifikation der Typen nach ihren Opera tionen siehe Bild 6 15 S 146 fiir die Bedeutung des Pfeils Any i Comparable lt gt lt gt a a Char ARRAY OF Char FAN Numeric TAN SHORTCHAR CHAR ARRAY OF ARRAY OF SHORTCHAR CHAR Integer Real OS BYTE SHORTINT INTEGER LONGINT SHORTREAL REAL Nun implementieren wir die Suchfunktion MinindexOf Die erste Variante priift die in Programm 8 6 formalisierte Nachbedin gung Die Nachbedingungszusicherung muss direkt vor jeder 221 8 Strukturiertes und modulares Programmieren Variante 1 der Suchfunktion MinIndexOf Korrektheit
39. Checklnvariants ASSERT gesammelter_Betrag gt 0 BEC postcondSupplierOk END Kaffee_ausgeben 125 6 Vom Spezifizieren zum Implementieren Pragmatik Cleo Component Pascal Zielsprache einer Spezifikation 6 3 126 PROCEDURE Geld_zur ckgeben BEGIN ASSERT auBer_Betrieb BEC precondSupplierOk Checklnvariants ASSERT eingenommener_Betrag 0 BEC postcondSupplierOk END Geld_zur ckgeben END I1Kaffeeautomat Die Programme 2 8 S 35 und 6 2 spezifizieren denselben Kaffee automaten sie unterscheiden sich semantisch nur unwesentlich doch der Text von Programm 6 2 ist etwa um die Halfte langer als der von Programm 2 8 Dies ist ein pragmatischer Grund weshalb wir berhaupt eine eigene Notation zur Spezifikation eingef hrt haben Cleo bietet als Spezifikationssprache gegen ber Component Pascal folgende Vorteile Es fokussiert auf die Trennung von Abfragen und Aktionen Es abstrahiert von der Implementation der Abfragen Es erlaubt eine kompakte Darstellung einer Spezifikation Es bietet mit dem OLD Konstrukt ein Mittel zu exakter Spezi fikation Doch auch Component Pascal hat seine St rken Es eignet sich nicht nur zur Spezifikation es ist auch eine Implementationssprache Es pr ft bei ausf hrbaren Programmen ob die Implementa tion der Spezifikation entspricht Als Implementationssprache bietet es vielf ltige m chtige Programmierm glichkeiten Die Entw
40. END ChecklInvariants Invarianten gelten vor und nach jedem Dienstaufruf CheckInvari ants ist daher am Anfang und am Ende des Anweisungsteils jeder exportierten Prozedur aufzurufen In welcher Reihenfolge mit den Vor und Nachbedingungen Bild 2 6 S 30 gibt Aus kunft Ist die Invariante vor einem Aufruf nicht erf llt so ist das Modul defekt Dann ist es sinnlos Vorbedingungen zu pr fen weil das Modul den geforderten Dienst sowieso nicht leisten kann Also sind erst Invarianten dann Vorbedingungen zu pr fen Die Ausf hrung des Dienstes muss auf jeden Fall die Invari ante erhalten Deshalb sind auch am Ende erst Invarianten dann Nachbedingungen zu pr fen ACTIONS Geld_einnehmen IN Betrag NATURAL PRE NOT au er _Betrieb POST eingenommener_Betrag OLD eingenommener_Betrag Betrag PROCEDURE Geld_einnehmen Betrag INTEGER Postcondition eingenommener_Betrag OLD eingenommener_Betrag Betrag 1 BEGIN Checklnvariants ASSERT au er_Betrieb BEC precondSupplierOk ASSERT Betrag gt 0 BEC precondPar1 Nonnegative Anweisungsteil Checklnvariants END Geld_einnehmen Das Pr fen der Invarianten vor und nach jedem Dienstaufruf ist das formal korrekte Vorgehen Manchmal scheint es aber zu viel des Guten zu sein Wenn wir ganz sicher sind dass die Invari ante nicht zwischen zwei Dienstaufrufen durch Fremdzugriffe gest rt werden kann dann k nnen wir die Invariantenpr fung am Anfan
41. END ident ImportList IMPORT Import Import Import ident ident The import list specifies the names of the imported modules If a module A is imported by a module M and A exports an identifier x then x is referred to as A x within M If A is imported as B A the object x must be referenced as B x This allows short alias names in qualified identifiers A module must not import itself Identifiers that are to be exported i e that are to be visible in client modules must be marked by an export mark in their dec laration see Chapter 4 The statement sequence following the symbol BEGIN is executed when the module is added to a system loaded which is done after the imported modules have been loaded It follows that cyclic import of modules is illegal Individual exported proce dures can be activated from the system and these procedures serve as commands Variables declared in a module are cleared prior to the execution of the module body This implies that all pointer or procedure typed variables are initialized to NIL The statement sequence following the symbol CLOSE is executed when the module is removed from the system Example MODULE Trees exports Tree Node Insert Search Write Init A Component Pascal Language Report IMPORT StdLog TYPE Tree POINTER TO Node Node RECORD exports read only Node name name POINTER TO ARRAY OF CHAR left right Tree END PROCED
42. Kommandoaufruf mit Aufrufsymbol Militarisch oder zivil 102 Solch ein Aufruf kann als Anweisung im Quelltext eines Moduls stehen und somit tibersetzt werden In BlackBox kann der Auf ruf auch in irgendeinem Textfenster stehen und interpretiert werden In diesem Fall ist der Kommandoaufruf ein Eingabetext fiir den Kommandointerpreter der den Eingabetext in seine Bestandteile zerlegt den Modulna men I1MyModule und den Kommandonamen Do den dynamischen Bindelader aufruft damit dieser den Code der vom Modul gebrauchten Module bindet und l dt sofern sie noch nicht geladen sind einschlie lich des Moduls selbst I1 Code MyModule ocf und das Kommando aufruft 11MyModule Do BlackBox l sst so die traditionelle Grenze zwischen der Kom mandosprache eines Betriebssystems und der Programmier sprache einer Anwendung zerflie en Das Eingeben eines Kommandos ist auf mehrere Arten m glich al men a Unload AMeu BEE BB lityModule Do i Den Kommandoaufruf selektieren und den Meniibefehl Dev Execute aufrufen siehe Bild 5 12 Dabei gen gt es den Anfang des Kommandoaufrufs oder vorangehende Leerzei chen zu markieren Menu Iol Module Do z Vor den Kommandoaufruf ein Aufrufsymbol setzen und das Symbol anklicken siehe Bild 5 13 Aufrufsymbole commander sind eine weitere Art spezieller Objekte dargestellt durch einen schwarzen Kreis mit einem wei en Ausrufezeichen D
43. NEW target string MathRandom Uniforml minLength maxLength MathRandom GetString target string target Checklnvariants END InitRandom PROCEDURE VAR target StringDesc Copy IN source BG AnyDesc EXTENSIBLE Shallow copy BEGIN WITH source StringDesc DO target string source string target Checklnvariants ASSERT target Equal source BEC postcondReceiverOk gt 1 12 1 Polymorphe Mengenklasse f r geordnete Elemente ELSE HALT BEC precondParsTypeOk END END Copy Output PROCEDURE IN a StringDesc Write EXTENSIBLE Write the contents of a to the log BEGIN StdLog String a string StdLog Ln END Write Production PROCEDURE IN source StringDesc Clone String EXTENSIBLE Shallow clone VAR result String BEGIN NEW result result Copy source RETURN result END Clone Redefinitions of Procedures bound to PartComparable Order Relations PROCEDURE IN a StringDesc LessEqual IN b BG PartComparableDesc BOOLEAN EXTENSIBLE BEGIN WITH b StringDesc DO RETURN a string b string OR a string lt b string ELSE HALT BEC precondParsTypeOk END END LessEqual Factory PROCEDURE New IN aString ARRAY OF CHAR String New String which contains a copy of aString VAR result String BEGIN NEW result NEW result string LEN aString 1 result string aStri
44. Oberon 2 code Support for these features may be reduced in later product releases In the following text red stretches denote these obsolete features 2 Syntax An extended Backus Naur formalism EBNF is used to describe the syntax of Component Pascal Alternatives are separated by Brackets and denote optionality of the enclosed expression and braces and denote its repetition possibly 0 times Ordi nary parentheses and are used to group symbols if necessary Non terminal symbols start with an upper case letter e g State ment Terminal symbols either start with a lower case letter e g ident or are written all in upper case letters e g BEGIN or are denoted by strings e g 3 Vocabulary and Representation The representation of terminal symbols in terms of characters is defined using ISO 8859 1 i e the Latin 1 extension of the ASCII character set Symbols are identifiers numbers strings operators and delimiters The following lexical rules must be observed Blanks and line breaks must not occur within symbols except in comments and blanks in strings They are ignored 379 A Component Pascal Language Report 380 unless they are essential to separate two consecutive symbols Capital and lower case letters are considered as distinct 1 Identifiers are sequences of letters digits and underscores The first character must not be a digit ident letter _ letter _ di
45. Parametertyp 19 21 24 25 141 174 175 206 216 259 264 265 353 Platzhaltertyp 206 privater 319 Reihungstyp 164 216 274 Standardtyp 75 303 342 365 statischer 269 275 352 353 strukturgleicher 217 strukturierter 174 176 Verbundtyp 164 177 240 241 243 247 267 274 303 318 vorvereinbarter Grundtyp Standardtyp Zahlentyp 18 23 Zeichentyp 18 134 Zeigerbasistyp 274 276 Zeigertyp 242 247 274 280 318 319 Typangabe 18 19 113 Typanpassung 135 137 140 TYPE 75 174 201 207 217 267 274 303 304 336 type checking Typpr fung Typeigenschaft 34 35 38 TYPES 235 Typinformation 238 typing Bindung Typbindung Typpr fung 25 27 28 38 79 84 128 174 217 259 268 dynamische 259 353 375 statische 268 353 375 Typtest 376 Typvertraglichkeit 27 38 174 193 217 258 268 269 303 337 353 U Uberladung 120 eines Operators 342 Uberlauf 140 191 Ubersetzbarkeit 58 getrennte 79 bersetzer 42 62 79 81 83 84 88 89 91 99 101 106 110 112 117 118 120 128 130 139 190 213 219 220 244 268 bersetzerart 100 bersetzung 61 62 99 107 108 137 240 bedingte 295 getrennte 79 107 unabh ngige 79 bersetzungszeit 62 79 82 105 108 120 128 135 136 238 239 269 275 362 Umbenennung 257 259 Umfang eines Baums 317 UML Unified Modeling Lan guage Undo Redo 98 Unified Modeling Language 44 51 144 147 148 261 Unterl
46. Weiterleitung framework Ger st Funktion 45 76 113 115 143 144 147 153 185 210 216 223 243 247 259 300 318 322 324 369 abstrakte 286 Funktionalit t boolesche 342 Fabrikfunktion 300 301 347 349 355 365 367 369 376 lokale 300 parameterlose 115 198 parametrisierte 342 seiteneffektbehaftete 297 300 seiteneffektfreie 124 Standardfunktion 135 190 Suchfunktion 216 221 223 typgebundene 342 Zufallsfunktion 297 Funktionalit t 43 47 49 50 146 153 293 Funktionskopf 115 Funktionsrumpf 115 116 G garbage collection Speicherbereinigung Genauigkeit 60 Generalisierung 252 261 285 336 Generizit t 207 335 Ger t 11 Ein Ausgabeger t 53 Hintergrundspeicherger t 53 Peripherieger t 53 Ger st 88 89 110 Black Box Ger st 260 Komponentenger st 181 Gleichheit 425 C Sachwortverzeichnis 426 strukturelle 361 Gleichung 128 Grammatik 59 Graph 313 Graphentheorie 313 Grenze Indexgrenze 136 Obergrenze 193 Untergrenze 193 Z hlbereichsgrenze 193 Gr e 23 24 29 34 75 76 79 113 169 245 258 268 Bezugsgr e 353 boolesche 18 19 130 feste 75 polymorphe 258 268 301 typgebundene 84 typisierte 19 ver nderliche 75 Zeitgr e 291 guard W chter G ltigkeitsbereich 283 H HALT 157 Hardware 48 52 53 295 height H he Hierarchie von Klassen 338 364 von Typen 221 338 Hintergrund 291 292 3
47. ckgabe result set Test writer test wird initialisiert indem ihm das Ergebnis eines Aufrufs von New zugewiesen wird Bild 11 5 Test Objekt nach der item 9 0X 0X 0X 0X R ckgabe und test e Sol Zuweisung an test Test writer Fabrik New ist eine Fabrikfunktion Fabrik factory ist der Name eines Entwurfsmusters f r gesch tztes Erzeugen und Initia lisieren von Objekten Seiteneffekt New ist seiteneffektbehaftet Zwei aufeinander folgende Auf rufe liefern stets Bez ge auf zwei Objekte die hnlich sind d h es gilt New New abweichend von der mathemati schen Vorstellung einer Funktion Fabrikfunktionen sind der 300 11 2 11 2 1 Bild 11 6 Entwurfsmodell des Testwerkzeugs 11 2 Testwerkzeugmodul zweite seltene Fall in dem wir die Leitlinien 1 3 S 5 und 1 6 S 6 missachten Zusicherungen diirfen deshalb keine Auf rufe von Fabrikfunktionen enthalten 4 Meist produzieren Tests keine Ausgabe Doch hier wollen wir das ForAllDo von ContainersSetsOfString Set testen und lenken die Ausgabe in ein eigenes Fenster 5 Die Parameter bergabe des Test Objekts an das Testwerk zeug ist polymorph Die Prozeduren erwarten ein UtilitiesRe peater Action Objekt das es nicht geben kann und erhalten ein TestSetsOfString Test Objekt 6 Der Aufruf von StopTest im Finalisierungsteil sorgt daf r dass ein eventuell im Hintergrund laufender Test endet wenn das Testmodul entladen wird siehe 4 7 6 S
48. eeeeseesesseeesensenensennennneenene nenn 6 Programm 1 3 Menge als Modul roh nnennesnnnesseenenenenenenenen 8 Programm 2 1 Kaffeeautomat als Modul typisiert 0 0 0 0 eee eee 19 Programm 2 2 Schalter als Modul typisiert u eennnennn 20 Programm 2 3 Zeichenmenge als Modul typisiert neeee 20 Programm 2 4 Kaffeeautomat als Modul kontrollierend 26 Programm 2 5 Kaffeeautomat mit Bedingungen ueneeeeenn 31 Programm 2 6 Schalter mit Bedingungen nuesnnnnennenenenen 33 Programm 2 7 Zeichenmenge mit Bedingungen uneneen 34 Programm 2 8 Kaffeeautomat mit g nstigeren Typen nnneenee 35 Programm 2 9 Kaffeeautomat als Klasse unneeenneeennnneeeneennnnnnenennnnennn 36 Programm 6 1 Kaffeeautomat syntaktisch spezifiziert 117 Programm 6 2 Kaffeeautomat vertraglich spezifiziert neee 124 Programm 6 3 Kaffeeautomat implementiert 132 Programm 6 4 Schalter implementiert unneseenneesesennnnenesenn 134 Programm 6 5 Zeichenmenge implementiert eeennen 137 AXXO Programmverzeichnis 25 2 05 xxxvi Programm 6 6 Zeichenmenge optimiert eee sees eee eens 138 Programm 6 7 Menge ganzer Zahlen uuuesssssenennnnnenenen nen 140 Programm 7 1 Schnittstelle von In sritis iri soani 158 Programm 7 2 Schnittstelle von Out uessessseesessnesensns
49. extension of Comparable MathRandom UtilitiesRepeater TYPE Element BG Comparable Action POINTER TO ActionDesc ActionDesc ABSTRACT RECORD END Node POINTER TO RECORD item Element Invariant item NIL left right Node END 355 12 1 I 356 Vom Entwerfen zum Testen Set POINTER TO SetDesc SetDesc LIMITED RECORD BG PartComparable root Node root NIL OR root is unique END VAR emptySet SetDesc Neutral element zero Testing TYPE TestInvariants POINTER TO RECORD UtilitiesRepeater Action END VAR testInvariants Testinvariants Forward Declarations PROCEDURE LessEqual tree other Node BOOLEAN PROCEDURE IN set SetDesc IsEmpty BOOLEAN NEW PROCEDURE Has tree Node item Element BOOLEAN PROCEDURE Put VAR tree Node item Element PROCEDURE VAR set SetDesc Put x Element NEW PROCEDURE VAR set SetDesc WipeOut NEW Definition of Procedure bound to Action PROCEDURE VAR action ActionDesc Do item Element NEW ABSTRACT Set Invariants Same as for ContainersSetsOfString except that item Less tree item replaces item lt tree item see S 328 Redefinitions of Procedures bound to Any Comparison Relations PROCEDURE Equal tree other Node BOOLEAN BEGIN RETURN LessEqual tree other amp LessEqual other tree END E
50. fung denn es gibt keinen aktuellen Parameter der mit dem formalen Parame ter x vertr glich ist auch nicht die Variable VAR myVector ARRAY 100 OF INTEGER Hier sind x und myVector Exemplare verschiedener anonymer Typen die an verschiedenen Stellen konstruiert und nur zuf llig strukturgleich daher nicht vertr glich sind Typvertr glichkeit des aktuellen und formalen Parameters errei chen wir durch eine Typvereinbarung TYPE Vector ARRAY 100 OF INTEGER PROCEDURE Sort VAR x Vector Ist der aktuelle Parameter mit VAR myVector Vector vereinbart so besteht der Prozeduraufruf Sort myVector die Typpr fung denn aktueller und formaler Parameter sind von demselben Typ namens Vector Dieser Ansatz ist typsicher aber leider unflexibel Das Sort akzeptiert nur Reihungen des Typs Vector was seine Verwendbarkeit stark einschr nkt Es w re ungeschickt m sste man f r jede Reihungsl nge eine eigene Sortierprozedur mittels Kopieren und Einf gen erstellen der Algorithmus h ngt ja nicht von der L nge der Reihung ab Offene Reihungen l sen dieses Problem PROCEDURE Sort VAR x ARRAY OF INTEGER kann mit einer INTEGER elementigen Reihung beliebiger L nge als aktueller Parameter aufgerufen werden Es akzeptiert bei spielsweise den durch VAR myVector ARRAY myLength OF INTEGER vereinbarten aktuellen Parameter myVector weil die Elementty pen der beiden Reihungen x und myVector miteinander vertr g lich
51. hlige Versionen des Manuskripts kommen tiert sondern das Projekt nachhaltig unterst tzt hat F r die Erlaubnis zum Abdruck des Component Pascal Language Report danke ich Prof Niklaus Wirth und Prof Hanspeter M s senb ck sowie Oberon microsystems Dem Verlag insbesondere meinen Lektorinnen Frau Dr Ulrike Walter und Frau Nadine Vogler Boecker danke ich f r ihre hilfsbereite geduldige Zusammenarbeit Nun w nsche ich dem Leser viel Spa beim Lesen Hinweise auf Fehler Kritik und Zustimmung nehme ich gerne entgegen meine E Mail Adresse lautet karlheinz hug fh reutlingen de Reutlingen den 23 M rz 2001 Karlheinz Hug Vorwort Inhaltsverzeichnis VOL W OLE eee ch aan nit aaa eiie aai v T Einf hrung 2 2 2222 R A a deeeeeeee 1 1 1 Ein Kaffeeautomat cccccccscccesscessesseessescessceseessecseesaes 1 1 2 Modul und Dienst eseeenneneennennennennnennn 4 KZL Ein Schalter ae 6 1 2 2 Eine Menge eneennnnn 8 1 3 Schnittstelle und Implementation 8 1 4 Benutzer Kunde Lieferant enenenn 11 1 5 Zusammenfassung ennneeennnennnnneemeen 14 1 6 Literaturhinweise enesis pee ii irienna ret 15 1 7 bungen EERE A E sal E OE EEES 15 2 Spezifizieren esesiesineeghansniitenen 17 2 1 Exemplar und Typ smoren 17 2 1 1 Ein Kaffeeautomat nennnenennene 18 2 12 Ein Schalter 22 22 19 2 1 3 ine Menge ersa e deel a a 20 2 2 Benutzung angebotener Dienste n
52. i INTEGER ali REAL w 3 name i CHAR t left right Tree t CenterTree subnode Tree w i name String 8 2 Operators Four classes of operators with different precedences binding strengths are syntactically distinguished in expressions The operator has the highest precedence followed by multiplica tion operators addition operators and relations Operators of the same precedence associate from left to right For example x y z stands for x y z Expression SimpleExpression Relation SimpleExpression SimpleExpression Term AddOperator Term Term Factor MulOperator Factor Factor Designator number character string NIL Set Expression Factor Set Element Element Element Expression Expression Relation lt lt gt gt IN IS AddOperator OR MulOperator DIV MOD amp 389 A Component Pascal Language Report 390 The available operators are listed in the following tables Some operators are applicable to operands of various types denoting different operations In these cases the actual operation is iden tified by the type of the operands The operands must be expres sion compatible with respect to the operator see App A 8 2 1 Logical operators OR logical disjunction p OR q if p then TRUE else q amp logical conjunction p amp q
53. sie sind nicht Teil der beschriebenen Sprache sondern der EBNF Konkret handelt es sich um zehn Sonderzeichen l Regeln sind von der Form A B Sie bedeutet dass die syntaktische Einheit A durch den Aus druck B definiert ist und jedes Auftreten von A in einem Aus druck durch B ersetzbar ist Die hier benutzten Metasymbole sind und der Punkt schlie t eine Regel ab Bei den syntaktischen Einheiten unterscheidet man zwischen terminalen und nichtterminalen Symbolen Zu jedem Nichtterminal gibt es genau eine definierende Regel und jede Regel definiert genau ein Nichtterminal Terminale sind dagegen Atome die nicht weiter zerteilt oder definiert sondern mit dem Metasymbol geklammert wer den um sie von Nichtterminalen zu unterscheiden Unter den Nichtterminalen ist genau eines als Startsymbol aus gezeichnet meist das durch die erste Regel definierte Symbol Ausdruck Vorrang Ebene 4 5 Die erweiterte Backus Naur Form Die Ausdr cke auf der rechten Seite einer Regel k nnen mit fol genden Operationen gebildet werden Jede syntaktische Einheit ist ein Ausdruck Folge Sequenz Ausdruck A gefolgt von Ausdruck B wird dargestellt durch AB Auswahl Alternative Ausdruck A oder Ausdruck B wird dargestellt durch A B Option Ausdruck A oder Nichts wird dargestellt durch A Wiederholung Iteration Eine beliebige Anzahl von As ein schlie lich keinem wird dargestellt d
54. 10 3 S 401 aufgelistet Zum Aufruf von ASSERT sind als aktuelle Parameter f r b ein zu pr fender boolescher Ausdruck und ggf f r n eine nichtnega tive ganze Zahl die als Fehlernummer dient einzusetzen ASSERT Bedingung ASSERT Bedingung Fehlernummer Allgemein gilt die Semantik Ist b erf llt so ist der Aufruf effekt los sonst bricht der Programmablauf ab Unter BlackBox f hrt eine nicht erf llte Bedingung b in eine Falle einen Trap d h der Ablauf stoppt geordnet es ffnet sich ein Trapfenster ggf erscheint n als Trapnummer Ein Beispiel folgt in Abschnitt 7 1 Exkurs Der Name ASSERT ist berladen weil er innerhalb eines Namenraums zwei Prozeduren bezeichnet Wird dieser Name benutzt welche der beiden Varianten ist dann gemeint Das ist zur berset zungszeit entscheidbar Der bersetzer erkennt bei einem ASSERT Auf ruf an der Liste der aktuellen Parameter welche Prozedur aufzurufen ist Component Pascal verwendet berladen nur bei wenigen Stan dardprozeduren und bei arithmetischen und relationalen Operatoren lt gt lt gt und sind auch in der unterschiedli chen Bedeutung als Multiplikations bzw Subtraktionszeichen und Exportmarken berladen Explizit definierte Prozedurnamen k nnen nicht berladen werden ein triftiger Grund daf r ist die Regel unter schiedliche Dinge unterschiedlich zu benennen Wir verwenden Zusicherungen um Vor und Nachbedin
55. 119 137 224 Quelltextdatei 91 92 95 Ressourcendatei 91 Schnittstellendatei 91 92 95 96 107 109 117 Dateiverwaltung 87 90 Daten 6 13 49 53 55 61 74 76 84 98 106 108 139 143 146 147 202 226 237 238 241 243 262 307 316 363 365 Ausgabedaten 45 52 100 Eingabedaten 45 52 81 224 formatierte 367 369 gespeicherte 316 konkrete 76 lokale 225 nichtfl chtige 93 rohe 367 369 strukturierte 163 Datenbank 89 Datenelement 142 144 211 227 316 319 Datenfluss 106 107 111 Datenkapselung 143 144 245 C Sachwortverzeichnis Datenmanipulation 375 Datenpaar 205 Datenstruktur 45 142 abstrakte 142 143 201 238 247 248 dynamische 278 334 konkrete 142 143 147 225 unerreichbare 278 Datentyp 134 316 abstrakter 238 243 247 248 318 333 gt Typ Daten bertragung 60 Datenverarbeitung 12 52 60 226 Debugger 99 152 DEC 129 declaration Vereinbarung decomposition Zerlegung deep copy Kopieren tiefes defect Fehlerursache DEFINITION 118 158 159 205 214 244 289 292 302 342 348 354 Dekrementierung 129 194 depth first traversal Traversierung Tiefentra versierung Dereferenzierung 275 277 279 design Entwurf Zerlegung design pattern Muster Entwurfsmuster Deutsche Industrie Norm 50 developer Entwickler Diagramm 200 313 Klassendiagramm Objektdiagramm Syntaxdiagramm Zustandsdiagramm H ufigkeitsdiag
56. 15 rechts oben Programmentwicklung Nun da wir die wichtigsten Werkzeuge von BlackBox und die zugeh rigen Men befehle kennen stellen wir das Arbeiten mit dieser Entwicklungsumgebung zusammenh ngend in einem Modell dar das die Modelle der Bilder 4 6 S 61 5 15 und 5 16 konkretisiert 105 5 Die Entwicklungsumgebung BlackBox Bild 5 16 Programm Spezifikation amp entwicklung mit BlackB ox Werkzeugen Datenfluss Interpreter Aufruf Bindelader Der Objektcode erscheint wieder in zwei Rollen Der Lader behandelt ihn als zu bertragende Daten der Interpreter als auf rufbares Programm og geladener Objektcode iN d Der kleine Zyklus Implementierung lt gt Test des Entwicklungs modells von Bild 3 2 S 46 nimmt mit BlackBox die Gestalt von Bild 5 17 an 106 Bild 5 17 Implementierungs zyklus 5 9 Beispiel 5 5 Getrennt bersetzen dynamisch laden Verhalten und Programmlogik Ausgabe pr fen verbessern ausf hren editieren entladen bersetzen BlackBox erm glicht es diesen Zyklus sehr schnell und oft zu durchlaufen Der Entwickler sollte aber darauf achten dass beim Tippen und Klicken das Nachdenken ber das Programm seine Aufgabe und Struktur nicht zu kurz kommt Getrennt bersetzen dynamisch laden Wir schauen nun wie BlackBox getrenntes bersetzen und dynamisches Laden so sicher realisiert dass geladene Module immer zusammenpassen
57. 225 311 Schleifenvariante 192 Schnittstelle 8 15 38 44 47 49 53 74 79 88 90 94 95 97 101 103 108 110 118 142 143 146 147 154 163 169 186 205 214 216 237 244 245 284 288 292 301 302 312 333 335 337 342 354 364 366 374 anwendungsorientierte 366 eines Moduls 91 149 170 erweiterte 286 flache 347 348 Kommandoschnittstelle 154 437 C Sachwortverzeichnis 438 163 kurze 354 prozedurale 291 rohe 365 spezifizierte 293 syntaktische 158 159 266 289 291 vollst ndige 337 wiederverwendbare 88 Schnittstellendefinition 91 Schreiben sequenzielles 157 Schreibmarke 98 100 102 Schrittweite 193 209 seamless software development Softwareentwicklung nahtlose Seiteneffekt 6 23 297 300 312 347 349 355 Selektion 94 158 Semantik 34 44 52 57 59 84 117 120 121 126 128 136 142 154 157 159 190 193 203 204 214 218 220 223 266 273 277 279 286 291 301 302 311 320 342 353 dynamische 28 193 Referenzsemantik 277 280 289 290 301 302 318 335 statische 25 Wertsemantik 277 290 318 Sequenz Folge Server 90 service Dienst SET 138 shallow copy Kopieren seichtes SHORTINT 140 Sicherheit 79 83 141 143 194 209 216 220 259 268 280 283 Modulsicherheit 84 280 Speichersicherheit 84 136 208 218 279 Typsicherheit 84 208 217 218 268 269 277 362 Sicht 363 368 369 dokumentzentrierte 92 110 Te
58. 312 A Abbilder 365 366 Abbildung 60 121 Abbruch eines Kommandoaufrufs 292 eines Programmablaufs 151 152 194 220 Abfrage 3 5 7 15 18 21 22 25 27 32 34 37 44 113 124 133 143 147 154 155 163 164 198 199 230 237 243 294 320 322 334 367 boolesche 8 20 197 227 231 288 konstante 121 parameterlose 114 115 parametrisierte 115 Ablauf 100 156 203 232 280 Ausf hrung als dynamische Einheit 81 eines Algorithmus 189 224 eines Programms 48 58 81 83 88 112 119 120 151 152 157 194 211 218 220 237 239 276 279 Ablaufkontrolle 156 Ableitung 69 86 ABSTRACT 265 267 Abstraktion 1 10 15 17 36 38 41 42 45 75 76 126 207 251 253 255 260 261 265 313 337 338 Datenabstraktion 142 147 Abstraktionsebene 56 access Zugriff access control Zugriffskontrolle ACTIONS 4 25 26 72 112 113 116 117 122 123 198 Adresse 54 176 280 einer Variable 115 127 129 eines Reihungselements 136 213 Adressraum 54 Aggregation 146 261 302 304 Aktion 3 8 13 15 17 19 21 32 33 35 44 82 116 133 144 147 154 163 177 180 415 C Sachwortverzeichnis 416 199 227 230 231 233 234 237 244 253 264 266 288 292 294 296 297 322 323 abstrakte 301 Daueraktion 291 307 Hintergrundaktion 304 parametrisierte 294 Algebra boolesche 17 218 Algol 60 85 129 Algorithmus 45 50 53 55 56 61 74 77 82 129 142 146 147 15
59. 371 374 Carrier Rider Mapper Model View Controller algorithmisches 159 166 197 198 306 314 Entwurfsmuster 44 257 290 300 301 335 337 362 363 365 366 375 f r Delegation 319 f r Fabrik 369 f r FOR Schleife 193 f r Kommando 178 f r Schleifenabbruch 195 f r sequenzielle Eingabe 202 f r Traversierung 315 f r W chter 177 f r WHILE Schleife 189 MVC Model View Controller N Nachbedingung 29 30 32 33 38 39 44 120 124 131 132 155 197 215 220 222 227 232 234 237 253 255 257 273 284 289 293 294 325 zusammengesetzte 218 Nachfolger 304 307 Name 3 5 18 28 38 48 68 70 72 75 112 114 136 164 169 174 175 177 183 188 193 228 233 234 241 242 253 256 266 267 276 278 287 289 348 Abfragenname 5 Aktionsname 4 6 7 117 124 Aliasname 78 121 202 204 263 273 278 Dienstname 3 21 25 28 113 Empf ngername 244 247 248 explizit definierter 69 exportierter 113 implizit definierter 69 Klassenname 242 Kommandoname 102 Konstantenname 141 lokaler 78 Merkmalname 244 Moduldateiname 91 287 Modulname 3 21 25 37 58 91 92 95 97 99 102 104 152 169 244 247 Objektname 36 37 234 Parametername 19 21 23 25 Pfadname 172 Prozedurname 120 243 qualifizierter 21 22 77 95 164 244 247 248 348 Subsystemname 88 91 92 112 241 Typname 18 140 174 242 303 306 339 348 353
60. 4 Formel 10 1 Syntax des Eingabetextes Zerteilen 270 Syntaxanalyse ReadText soll aus dem Eingabetext W rter herausfiltern Der Text ist eine Folge von W rtern die durch nennen wir sie Nicht w rter getrennt sind Der Text ist also strukturiert es kommt auf die Anordnung nicht die Bedeutung der W rter an Wir haben eine syntaktische Aufgabe entdeckt zu deren L sung wir in Abschnitt 4 5 erworbene Kenntnisse anwenden Mit der EBNF definieren wir die Syntax einer kleinen formalen Sprache die den hier interessierenden Aspekt des Eingabetextes beschreibt Text word nonword word letter letter nonword nonletter nonletter Einfacherweise sind W rter Folgen von Buchstaben Nichtw r ter Zeichenfolgen ohne Buchstaben Diese Regeln zerteilen Zei chenfolgen mit Bindestrichen z B Syntax Analyse in Syn tax und Analyse Die Sprache ist regul r denn sie l sst sich auch mit einer einzigen EBNF Regel beschreiben Text letter letter nonletter nonletter Formel 10 1 eignet sich jedoch besser f r die folgende Imple mentation Zu jeder Sprachbeschreibung in EBNF kann man durch syste matisches Anwenden von Transformationsregeln ein Programm konstruieren das eine Syntaxanalyse durchf hrt Dieses Pro gramm hei t Zerteiler parser es pr ft ob ein beliebiger Text der gegebenen Syntax entspricht also ein Wort der definierten Sprache ist Die Transformationsrege
61. 4 Programmiersprachen 4 10 84 Verkehrs und Energietechnik denn ein Programm kann nicht sicherer sein als die Sprache in der es geschrieben ist Wir nen nen eine Programmiersprache A sicherer als eine Sprache B wenn A Programmierfehler die B akzeptiert als Ubersetzungs zeit oder Laufzeitfehler zur ckweist Component Pascal ist speichersicher da es unkontrollierte Speicherzugriffe verbie tet und die Speicherpl tze aller Gr en automatisch verwal tet sodass kein Speicherplatz falsch benutzt werden kann typsicher da es bei allen Operationen mit typgebundenen Gr en statische oder dynamische Typpr fungen durch f hrt sodass jede Gr e nur an Werte ihres Typs gebunden werden kann modulsicher da jedes Modul seine Invarianten unabh ngig von der Umgebung garantieren kann sodass diese nicht von anderen Modulen verletzt werden k nnen Nach unseren Programmiererfahrungen ist Component Pascal sicherer als manch andere Sprache Beispielsweise sind C und C weder speicher noch typ noch modulsicher Je mehr die Qualit tsanforderungen an Software wachsen umso dringlicher empfiehlt es sich f r Softwareentwickler ihre Produkte mit sichereren Programmiersprachen qualitativ zu verbessern Zusammenfassung Auf einer Rundtour durch die Welt der Programmiersprachen haben wir verschiedene Aspekte untersucht Der Prozessor eines Rechners f hrt Befehle aus die Daten in seinem Speicher ver ndern Die
62. 5 DIV3 2 but 5DIV3 5DIV3 1 8 2 3 Set operators union gt difference x y x y intersection symmetric set difference x y x y y x Set operators apply to operands of type SET and yield a result of type SET The monadic minus sign denotes the complement of x i e x denotes the set of integers between 0 and MAX SET which are not elements of x Set operators are not associative a b c a b c A set constructor defines the value of a set by listing its elements between curly brackets The elements must be integers in the range 0 MAX SET A range a b denotes all integers i with i gt aandi lt b 8 2 4 String operators string concatenation The concatenation operator applies to operands of string types The resulting string consists of the characters of the first oper and followed by the characters of the second operand If both operands are of type Shortstring the result is of type Shortstring otherwise the result is of type String 8 2 5 Relations equal unequal lt less lt less or equal gt greater gt greater or equal IN set membership IS type test Relations yield a BOOLEAN result The relations lt lt gt and gt apply to the numeric types character types and string types The relations and also apply to BOOLEAN and SET as well as to pointer and procedure types including the value NIL x IN s stands for x is an element of s x must be an
63. 6 14 Aggregation Bild 6 15 Klassifikation Tabelle 6 1 Schnittstelle und Implementation 146 Die Aggregation ist eine schw chere Form der Bestandteilbezie hung dargestellt mit einer wei en Raute siehe Bild 6 14 Zwi schen Aggregation und Komposition zu unterscheiden ist beim Softwareentwurf n tzlich A Aggregation Bist variabler Bestandteil von A m n Ein A Objekt besteht aus m bis n B Objekten Kardinalit ten r s Ein B Objekt geh rt zu r bis s A Objekten Kanten mit wei em Dreieck in Bild 6 10 stellen Klassifikations beziehungen dar siehe Bild 6 15 Hier geht es um die Ordnung der Begriffe in allgemeine und besondere abstrakte und kon krete Die Spezifikationsseite links betont die Klassifikation von Diensten in zustandserhaltende Abfragen und zustandsver ndernde Aktionen Die Implementationsseite rechts betont die Klassifikation von Merkmalen in speichernde Daten und berechnende Algorithmen A ist Oberbegriff von B Klassifikation B ist Unterbegriff von A u l gt gt UML Diagramme nutzen wir um Sachverhalte zu veranschauli chen und Programme zu entwerfen Eine bersicht Abschlie end fassen wir gegens tzliche Aspekte des Begriffs paars Schnittstelle Implementation tabellarisch zusammen Schnittstelle Implementation Sicht der Kunden Sicht des Lieferanten Funktionalit t Struktur Verhalten Zustand Was wird gemacht Wie wird es gemacht Spezifikation Realisation
64. 6 legt fest dass Minin dexOf x item stets von allen Indizes k mit x k item den kleinsten Index liefert Zwei aufeinander folgende Aufrufe von MinIndexOf frequency 49 liefern jeweils 3 Bei dieser Aufgabe soll aber der erste Aufruf 3 der zweite 4 liefern Dies ist zu erreichen wenn die gesuchte H ufigkeit gel scht wird nachdem ihr Index bestimmt ist Zum L schen ist ein Wert undefined zu verwenden der keine H ufigkeit sein kann also mit undefined lt 0 frequency k undefined Der verfeinerte Entwurf des Ausgabealgorithmus lautet damit i LEN frequencySorted 1 WHILE frequencySorted i gt 0 DO k MathVectorsOflnteger MinIndexOf frequency frequencySorted i gib das Zeichen CHR k und seine Haufigkeit frequency k textuell und grafisch aus frequency k undefined DEC i END Seine Wirkung auf die Reihung frequency von Bild 8 3 zeigt die Spur von Bild 8 4 Eine Spur trace ist eine Folge von Zustanden von Datenelementen die bei einem Programmablauf durch auf einander folgende Zugriffe auf diese Datenelemente entsteht 0 1 2 3 4 5 frequency 60 49 0 12 49 39 undefined 49 0 12 49 39 undefined undefined 0 12 49 39 Zeit undefined undefined 0 12 undefined 39 undefined undefined 0 12 undefined undefined undefined undefined 0 undefined undefined undefined Implementation Wir stellen nun die gefundenen L sungselemente zu
65. 7 17 Bewachte Dialogbox au er Betrieb F Toten qesenmetier Batrag Dialogbox benutzen Die gerade ge ffnete Dialogbox Bild 7 17 zeigt durch die ausge blendeten Beschriftungen der Kommandokn pfe an dass keiner klickbar ist Der Kaffeeautomat ist noch au er Betrieb muss also erst initialisiert werden Der Kommandoknopf initialisieren ist aber nicht klickbar weil im Preisfeld 0 steht Tragen wir einen positi ven Preis ein so wird initialisieren klickbar Entsprechend wird Kaf fee ausgeben erst klickbar wenn ein ausreichender Betrag einge geben wurde Bild 7 18 stellt die Beziehungen zwischen Kommandoknopf Kommando W chter Aktion und Bedingungen dar 181 7 Ein und Ausgabe Bild 7 18 ur Kommando und Kommandos W chter Dialogbox Pai Kommando Wachter Klickbarkeits bedingung y auf ist gleich Yow Aktion Kommando modul Vorbedingung Funktions modul Fazit Das Kommandomodul Programm 7 5 und die Dialogbox Bild 7 17 erf llen die zus tzliche Anforderung von S 174 Programm 7 5 ist trotz der doppelten Anzahl exportierter Prozeduren k r zer als Programm 7 4 und Programm 7 3 Die Implementatio nen der Algorithmen brauchen nur Zuweisungen und Proze duraufrufe keine strukturierten Anweisungen Das Programmieren von Kommandomodulen mit W chtern ist also einfacher als ohne W chter Offenbar ist es vorteilhaft mit einem Komp
66. Abstraktion die besonders bei Beh ltern n tzlich ist um von konkreten Elementtypen zu abstrahieren Beispielsweise l sst sich die Spezifikation einer Menge Programme 2 3 S 20 und 2 7 S 34 leicht in eine generi sche Form bringen Zu welchem Zeitpunkt werden generische Parameter durch konkrete Typen ersetzt Implementationssprachen beantworten die Frage unterschiedlich Ohne Unterst tzung von Generizit t Wenn der Program mierer ein generisch spezifiziertes Modul implementiert definiert er jeden generischen Parameter durch einen konkre ten Typ z B in Component Pascal TYPE Comparable INTEGER Any Comparable Mit Unterst tzung von Generizit t Wenn ein Kundenmodul ein generisches Modul als Lieferant benutzt gibt es fiir gene rische Parameter konkrete Typen an z B in Component Pas cal hnlicher Notation IMPORT Vectors MathVectors OF INTEGER In Implementationssprachen die generische Module nicht unterstiitzen z B Component Pascal ist fiir jeden konkreten Typ der einen generischen Parameter ersetzt ein eigenes Modul 207 8 Strukturiertes und modulares Programmieren Initialisieren Sortieren Zuweisung bei Reihungen 208 zu implementieren Deshalb existiert das Modul MathVectors in unserer Modulbibliothek in mehreren Varianten dem Element typ entsprechend z B als MathVectorsOfinteger f r ganzzahlige Vek toren als MathVectorsOfReal f r reelle Vektoren Nach diesem Aus
67. Aus dieser Not machen wir eine Tugend indem wir den Namen Write in das allgemeine Do ndern Damit ist der Name WordWriter f r die abstrakte Klasse hinf llig wir nennen sie Action Folglich hat das Write von Set jetzt einen Parameter vom Typ Action CLASS Set QUERIES ACTIONS Write IN action Action END Set Die Semantik dieses Write ist Rufe f r jedes im Empf ngerobjekt set enthaltene Element item die Aktion action Do mit item als aktuel lem Parameter auf Das l sst sich z B mit einer Pseudo FOR Schleife ausdr cken item set Firstitem set Lastltem sind vom Typ Element FOR item set Firstltem TO set Lastltem DO action Do item END Dieser Algorithmus ruft action Do auf ohne zu wissen wie es wirkt Da er tiber alle Elemente der Menge iteriert und sie mit einer Aktion unbekannter Semantik bearbeitet nennen wir ihn ForAllDo statt Write 11 WordChecker ContainersSetsOfString WordWriter Action Do Do Set ForAllDo I1WordChecker steht es frei seine Erweiterungsklasse WordWriter oder Action oder anders zu benennen nur den Namen Do der Aktion muss es beibehalten Implementation in Component Pascal 1 I Attribut gt Parameter bergabeart gt 10 3 W rter sammeln Rechtschreibung pr fen Transformieren wir nun den Entwurf in die Syntax von Compo nent Pascal Im Modul ContainersSetsOfString stehen Vereinbarun gen f r die Klasse Action TYPE Action
68. Begriffen Klassen von Dingen entdeckt die seit Jahrtausenden eine Basis menschli cher Kommunikation bildet Klassifikation Begriffe klassifi zieren bedeutet sie vergleichen und nach dem Grad ihrer Gemeinsamkeiten ordnen Diese Ordnung hat zwei Richtungen Generalisierung Spezialisierung abstrakt Oberbegriff generalisieren spezialisieren konkret Unterbegriff Spezifikation 10 1 2 Bild 10 4 Klassifikations struktur der Beh lter 10 1 Fahrscheinautomaten Ein Oberbegriff ist allgemeiner abstrakter als seine Unterbe griffe Ein Unterbegriff ist spezieller konkreter als seine Ober begriffe Dieser Bezeichnungsweise folgend platzieren wir in grafischen Darstellungen meist die allgemeineren Begriffe oben die spezielleren unten Wie nutzen wir diese Einsicht f r die Spezifikation des Fahr scheinautomaten So wie wir das Modell des Kaffeeautomaten nicht kopiert sondern von ihm abstrahiert haben kopieren wir auch die Spezifikation des Kaffeeautomaten nicht sondern abstrahieren von ihr um Redundanz und Aufwand zu sparen Waren Kaffee und Fahrscheinautomat modellieren wir als Klassen Aus der Spezifikation des Kaffeeautomaten Pro gramme 2 8 S 35 9 2 S 233 filtern wir allgemeine Teile heraus und schreiben diese als Spezifikation der abstrakten Klasse Warenautomat auf Die Spezifikationen fast aller Dienste k nnen wir mit ihren Vor und Nachbedingungen bernehmen Nur die Aktion Ka
69. Bertrand Meyer Eiffel The Language Prentice Hall International UK Ltd Hertfordshire 1992 594 S Bertrand Meyer Reusable Software The Base Object Oriented Component Libraries Prentice Hall International UK Ltd Hertfordshire 1994 514 S Bertrand Meyer Eiffel The Reference ISE Technical Report TR EI 41 ER 1995 Version 3 3 4 100 S Bertrand Meyer Object oriented Software Construction Prentice Hall PTR Upper Saddle River 1997 2nd edition 1260 S Hanspeter M ssenb ck Objektorientierte Programmierung in Oberon 2 Springer Verlag Berlin Heidelberg 1994 2 Auflage 286 S J rg R M hlbacher Bernhard Leisch Ulrich Kreuzeder Programmieren mit Oberon 2 unter Windows Carl Hanser Verlag M nchen Wien 1995 353 S Artikel 24 25 26 27 28 29 30 31 32 33 34 35 36 B Literaturverzeichnis Eric Nikitin Into the Realm of Oberon An Introduction to Programming and the Oberon 2 Programming Language Springer Verlag New York 1998 199 S Bernd Oesterreich Objektorientierte Softwareentwicklung mit der Unified Modeling Language R Oldenbourg Verlag M nchen Wien 1997 3 aktual Auflage 294 S Bernd Uwe Pagel Hans Werner Six Software Engineering Band 1 Die Phasen der Softwareentwicklung Addison Wesley Bonn 1994 895 S Gustav Pomberger G nther Blaschek Grundlagen des Software Engineering Prototyping und objektorientierte S
70. CHAR integer type BOOLEAN CHAR INTEGER SHORTCHAR SHORTINT SET INTEGER SHORTCHAR SHORTCHAR x is a Latin 1 letter corresponding capital letter character with ordinal number x largest integer not greater than x length of v in dimension x first dimension 0 equivalent to LEN v 0 length of string not counting 0X identity maximum value of type T maximum element of a set the larger value of x and y minimum value of type T 0 the smaller of x and y x MOD 2 1 ordinal number of x ordinal number of x SUM i i IN x 2X SHORT x LONGINT INTEGER SHORTINT REAL CHAR String SIZE T any type A Component Pascal Language Report INTEGER SHORTINT BYTE SHORTREAL SHORTCHAR Shortstring INTEGER identity identity identity identity truncation possible projection projection number of bytes required by T SIZE cannot be used in constant expressions because its value depends on the actual compiler implementation Proper procedures Name Argument types ASSERT x x Boolean expression ASSERT x n x Boolean expression n integer constant DEC v integer type DEC v n v n integer type EXCL v x v SET x integer type 0 lt x lt MAX SET Function terminate program execution if not x terminate program execution if not x Vi V 1 Visv n Vv i v x HALT n integer constant terminate program execution INC v integer type Vi V 1 INC v n v n
71. Code erzeugt der Variablen vor ihrer Benutzung mit Anfangswerten versieht Explizite Initialisierung bedeutet dass der Programmierer Anweisungen schreibt die Variablen vor ihrer Benutzung Anfangswerte zuweisen Wenn die Sprache kein implizites Initialisieren vorsieht muss der Programmierer explizit initialisieren Fehlende oder falsche Initialisierung ist einer der h ufigsten Programmierfehler Um die Fehlerrate zu verringern m ssen wir besonders darauf ach ten dass alle Variablen korrekt initialisiert werden Component Pascal initialisiert globale Variablen implizit Dabei hei t eine Variable global wenn sie in einem Modul vereinbart ist im Unterschied zu einer lokalen Variable die in einer Proze dur vereinbart ist In Programm 6 2 sind also VAR auBer_Betrieb BOOLEAN eingenommener_Betrag Preis gesammelter_Betrag INTEGER Vereinbarungen globaler Variablen Diese Variablen werden nach dem Laden des Moduls automatisch mit Defaultwerten initialisiert und zwar boolesche Gr en mit FALSE Zahlen mit 0 Im Beispiel gilt also unmittelbar nach dem Laden au er_Betrieb FALSE eingenommener_Betrag 0 Preis 0 gesammelter_Betrag 0 Damit besitzen die Variablen einen bestimmten Anfangswert doch dieser ist nicht immer korrekt d h entspricht nicht dem Initialisierungsteil 6 3 3 6 3 Von Cleo zu Component Pascal Schritt 3 was der Programmierer will Im Beispiel gefallt uns nicht dass sowohl
72. DIV 2 k k 1 END A Component Pascal Language Report WHILE t NIL amp t key i DO t t left END 9 7 Repeat Statements A repeat statement specifies the repeated execution of a state ment sequence until a condition specified by a Boolean expres sion is satisfied The statement sequence is executed at least once RepeatStatement REPEAT StatementSequence UNTIL Expression 9 8 For Statements A for statement specifies the repeated execution of a statement sequence while a progression of values is assigned to an integer variable called the control variable of the for statement ForStatement FOR ident Expression TO Expression BY ConstExpression DO StatementSequence END The statement FOR v beg TO end BY step DO statements END is equivalent to temp end v beg IF step gt 0 THEN WHILE v lt temp DO statements INC v step END ELSE WHILE v gt temp DO statements INC v step END END temp has the same type as v step must be a nonzero constant expression If step is not specified it is assumed to be 1 Examples FOR i 0 TO 79 DO k k afi END FOR i 79 TO 1 BY 1 DO afi ali 1 END 9 9 Loop Statements A loop statement specifies the repeated execution of a statement sequence It is terminated upon execution of an exit statement within that sequence see 9 10 LoopStatement LOOP StatementSequence END Example LOOP Readini i IF i lt 0 THEN EXIT END Writelnt i END
73. Der Code der Klasse ist geladen Eine Klasse ist ein abstrakter Datentyp ein Typ dessen Exemplare abstrakte Datenstrukturen sind Eine Klassenimplementation kann unvollst ndig sein Parti ell implementierte Klassen dienen dem Klassifizieren von Typen nicht dem Erzeugen von Objekten Objekt Ein Objekt ist ein Exemplar einer Klasse Es erscheint in einem Quelltext in einer Vereinbarung oder einer Erzeu gungsoperation Ein Objekt existiert nur zur Laufzeit als geladener Code und Daten im Speicher Bei anderer Sicht weise geh rt der Code zur Klasse Da der Code f r alle Objekte derselben Klasse gleich ist wird er zwecks Optimierung nur einmal in den Speicher geladen und von allen Objekten gemeinsam benutzt Jedes Objekt hat seine eigenen Daten im Speicher 238 Ubersetzungszeit Laufzeit 9 4 Bild 9 8 Module und Klassen in Cleo Bild 9 9 Module und Klassen in Component Pascal 9 4 Von der Spezifikation zur Implementation Betrachten wir diese Sachverhalte aus der Sicht der Zeitpunkte Zur Ubersetzungszeit gilt Ein Programm ist eine strukturierte Ansammlung von Modulen und Klassen Zur Laufzeit gilt Ein Programmablauf f hrt Aufrufe von Dien sten von Modulen und Objekten aus Die Dienste eines Objekts sind durch seine Klasse bestimmt Die Zustande von Modulen und Objekten ndern sich durch die Ausf hrung von Aktionen Da ein Softwareentwickler Module und Klassen programmiert sollte die passen
74. Deshalb verlangt Sort den Elementtyp Comparable der diese Eigenschaft besitzt Das Suchen eines Indexes zu gegebenem Element ist dage gen bei jedem Elementtyp m glich weshalb sich MinindexOf mit dem Elementtyp Any begn gt Any muss nur als Reihungs element und Parametertyp einsetzbar sein Diese Eigen schaften hat jeder Typ Deshalb schlie t Comparable Any ein Die Platzhalter Any und Comparable sind generische Parameter des Moduls MathVectors Wie erweitern die Cleo Notation um eine TYPES Liste die generische Parameter und Typvereinba rungen im Component Pascal Stil enthalten kann z B Index MODULE MathVectors TYPES Any Generic element type Comparable Generic element type lt gt lt gt are defined Index NATURAL Elementspezifisches Modul 8 2 Zeichen z hlen QUERIES MinIndexOf IN x ARRAY OF Any IN item Any Index U notFound POST result notFound OR result lt LEN x AND x result item AND FOR_ALL i Index IT_HOLDS i lt LEN x AND x i item IMPLIES result lt i Sorted IN x ARRAY OF Comparable BOOLEAN POST result FOR_ALL i k Index IT_ HOLDS i lt k AND k lt LEN x IMPLIES x i lt x k ACTIONS Init OUT x ARRAY OF Any IN item Any POST FOR_ALL i Index IT_HOLDS i lt LEN x IMPLIES x i item Sort INOUT x ARRAY OF Comparable POST Sorted x END MathVectors Generizitat ist eine Form der
75. Die geschweift geklammerte Folge kann wiederholt werden der senkrechte Strich trennt Alternativen Mit abgek rzten Bezeichnern sieht das so aus ite alz Dieser Ausdruck steht f r die unendliche Menge von endlichen Folgen die u a die Folgen i iea ieaea ieaeaea iez 63 4 Programmiersprachen EBNF Syntaktische Einheit 64 ieaez ieaeaez enthalt Der Modellautomat kann beliebig oft Kaffee ausgeben der physische nur solange das Kaffeepulver reicht Der Kaffeeautomat definiert eine formale Sprache deren W rter aus Aufrufen seiner Aktionen bestehen Programmieren bedeu tet Sprachen benutzen Sprachen definieren und benutzte Spra chen erweitern Die grafische Notation in Bild 4 7 liefert ein Syn taxdiagramm die dazu quivalente textuelle Notation in Formel 4 1 einen EBNF Ausdruck Syntaxdiagramme hneln Zustandsdiagrammen die wir in 1 2 1 S 6 kennengelernt haben Die erweiterte Backus Naur Form EBNF ist eine Notation zur Beschreibung der Syntax von Programmiersprachen oder allge meiner einer Klasse formaler Sprachen Die EBNF Syntax einer Sprache ist eine Liste von Regeln die angeben wie W rter oder S tze der Sprache gebildet werden Bei einer Programmierspra che sind die W rter Programme Dreierlei ist zu unterscheiden Syntaktische Einheiten sind Symbole der beschriebenen Sprache sie werden durch Regeln zueinander in Beziehung gesetzt Metasymbole dienen zur Bildung der Regeln
76. EUR Geld einnehmen schlitz j W Beer Geld Betrieb Geld zur ckgeben gesammelter METET Betrag EUR initialisieren Vom Warenautomaten gibt es keine Exemplare keine greifbaren Objekte Ein Automatenproduzent kann keinen allgemeinen Warenautomaten herstellen er m sste wissen welche beson dere Ware der Automat ausgeben soll Ein Kaffeeautomat ist 251 10 Statische Klassenstrukturen Bild 10 2 Klassifikations struktur der Automaten 10 1 1 Bild 10 3 Klassifizieren 252 kein Exemplar des Warenautomaten denn er liefert ja Kaffee Der Warenautomat ist ein abstrakter Automat im Unterschied zu den konkreten Kaffee und Fahrscheinautomaten Wir stel len fest Ein Kaffeeautomat ist ein spezieller Warenautomat er ver halt sich wie ein Warenautomat und besitzt alle Merkmale eines Warenautomaten und eventuell einige mehr Ein Fahrscheinautomat ist auch ein spezieller Warenautomat mit dessen Verhalten und Merkmalen Ein Warenautomat ist ein genereller Automat ein generali sierter Kaffee und Fahrscheinautomat er definiert das gemeinsame Verhalten dieser speziellen Automaten und hat alle ihnen gemeinsame Merkmale aber nicht mehr Diesen Sachverhalt stellen wir grafisch in einem Klassendia gramm mit der Notation von Bild 6 15 S 146 dar Warenautomat ist ein Kaffeeautomat Generalisieren spezialisieren verh lt sich wie ein Fahrscheinautomat Wir haben eine Beziehung zwischen
77. Eigenschaften ihres Typs des Basistyps des Zeigers bei ihrer Erzeugung F r eine referen zierte Variable sind alle Operationen zul ssig die der Basistyp eines sie referenzierenden Zeigers festlegt Beispielsweise ist die referenzierte Reihungsvariable word indizierbar word 0 bezeichnet ihr 0 tes Element Beim Dereferenzieren mit nachfol gendem Indizieren erlaubt Component Pascal das Dereferen zierungssymbol wegzulassen word 0 Dann wird implizit dereferenziert ohne Gefahr fiir die Typsi cherheit weil nur das Indizieren der referenzierten Variable word nicht der Zeigervariable word einen Sinn ergibt Dies gilt allgemein Component Pascal dereferenziert implizit wo es ein deutig sinnvoll ist Wir k nnen nun die Semantik des obigen Aufrufs von NEW durch eine Zusicherung beschreiben NEW word 5 ASSERT word NIL amp LEN word 5 amp word Bei Zuweisungen Parameteriibergaben und Vergleichen von Zeigervariablen werden Beziige kopiert bzw verglichen nicht die referenzierten Variablen Man spricht von Wertsemantik wenn Exemplare von Typen Referenzsemantik wenn Bez ge auf Exemplare von Typen zugewiesen bergeben verglichen werden Zeigervariablen und Referenzparameter arbeiten mit Referenzsemantik andere Variablen und Wertparameter mit Wertsemantik Beim objekt orientierten Programmieren ist Referenzsemantik wesentlich Objekte erscheinen oft als dynamische Variablen
78. Endlosschleife erhalten kann eliminiert die FOR Schleife diese Fehlerquelle Die WHILE Schleife ist machtiger als die FOR Schleife denn jede FOR Schleife lasst sich in eine 4quivalente WHILE Schleife trans formieren Trotzdem ist die FOR Schleife nicht berfl ssig denn sie erlaubt in speziellen Situationen elegantere sicherere Pro grammierung und effizientere Codeerzeugung Verwende eine Z hlschleife wenn die Anzahl der Wiederho lungen vor Schleifenbeginn bekannt ist denn die Z hlschleife stellt den Z hlbereich deutlich dar und du musst dich nicht um das In Dekrementieren der Z hlvariable k mmern Richtig eingesetzte Z hlschleifen terminieren Doch leider ver hindern auch FOR Schleifen nicht jeden Missbrauch Die Z hlvariable darf im Schleifenrumpf nicht explizit ver n dert werden denn das w rde die Verst ndlichkeit der Z hl schleife stark herabsetzen und ihrem intendierten Zweck widersprechen Deshalb sind in manchen Programmierspra chen Z hlvariablen im Schleifenrumpf schreibgesch tzt Wir konstruieren Schleifen systematisch sodass sie terminieren Trotz aller Achtsamkeit kann es vorkommen dass wir eine End losschleife erhalten Was tun wenn ein Programmablauf in eine Endlosschleife ger t Bei manchen Plattformen kann man Pro grammabl ufe abbrechen z B mit speziellen Tastenkombinatio nen Der BlackBox Component Builder l uft z B auf Windows Muster fur Schleifenabbruch per Tastend
79. Hit Einzelne unterscheidbare konkrete Dinge oder Wesen mit glei chen oder hnlichen Merkmalen und Eigenschaften fassen wir gedanklich zu einer Einheit zusammen zu einem abstrakten Typ Umgekehrt ist ein Typ ein Muster f r gleichartige Objekte die Exemplare dieses Typs Eine hnliche Abstraktion brauchen wir in der Software Hier ist ein Typ durch eine Menge von Werten und eine Menge von Operationen beschrieben Der Wertebereich legt die Werte fest die Exemplare instance dieses Typs annehmen k nnen sie entsprechen Zust nden Die Operationen legen fest wie die Exemplare dieses Typs bearbeitet werden k nnen sie entsprechen Aktionen Da eine Nachtigall ein Lebewesen ist strapazieren wir den Ver gleich mit einem Typ in der Software nicht weiter Aber ein ver einfachter Videorecorder kann f r eine Analogie herhalten Er 17 2 Spezifizieren Tabelle 2 2 Grundtypen Abfrage 18 hat den Wertebereich bereit laufend defekt und die Operatio nen anschalten ausschalten und ausfallen Zum Modellieren stehen oft vorkommende Typen bereit boole sche Gr en Zeichen und Zahlen Andere Typen definieren wir sp ter selbst Es handelt sich um Grundtypen basic type die Operationen sind aus der Logik und Mathematik bekannt bei den booleschen Gr en sind es logische Operationen bei den Zahlen arithmetische und bei allen Typen relationale Tabelle 2 2 stellt die wichtigsten Grundtypen zusammen
80. Im aufgeklappten Zustand erschei nen die Pfeile schwarz wei Zur Demonstration klicken wir auf einen Pfeil des Subsystems Form Bild 5 7 zeigt den interessierenden Ausschnitt des Lagers aus Platzgriinden leicht editiert Repository Electrics Form Fisrc CewMan Eys klap Lser Man Form nds Era Code Formoontrolers Sn Farmisen Sym FormModels Formview de Graph 6 ee oo Die erste Zeile des Falterinhalts bilden Hyperverbindungen zur allgemeinen Dokumentation des Subsystems optional beste hend aus Subsystem bersicht Sys Map Benutzerhandbuch User Man Entwicklerhandbuch Dev Man Ressourcen Rsrc In den folgenden Zeilen erscheinen die Namen der Module des Subsystems alphabetisch sortiert Bei jedem Modul stehen Hyperverbindungen zu seinen Dateien Schnittstelle Sym Information zum Objektcode Code Quelltext Mod Dokumentation Docu Die Hyperverbindungen zum Quelltext und zur Dokumenta tion k nnen fehlen z B BlackBox Quelle nicht ver ffentlicht aber die Hyperverbindungen zur Schnittstelle und zum Code sollten vorhanden sein 97 5 Die Entwicklungsumgebung BlackBox Zusammengesetztes Dokument 98 Wir benutzen das Lager sobald wir in Abschnitt 6 1 6 ein eige nes Modul geschrieben haben Nachdem wir die wichtigsten Werkzeuge kennen um auf Daten zuzugreifen geht es jetzt um Werkzeuge mit denen wir neue Daten produzieren Dem En
81. Klasse TextRulers Ruler eine Erweiterung der Textsicht model liert ein Lineal mit Tabulatorpositionen Mit ihr demonstrieren wir die Technik der zusammengesetzten Dokumente die Black Box charakterisiert siehe S 92 Ein Lineal ein spezielles View Objekt l sst sich in einen Text ein Model Objekt einbetten hin einschreiben Wie bei der Eingabe betrachten wir einen typi schen Schnappschuss einer dynamischen Objektstruktur formatter view rider Formatter Vv Vv ruler base text Writer View model 9 Model Ruler Sie entsteht so Das Objekt formatter und die Zeiger model view und ruler sind statisch vereinbart Fabrikklassen hei en in BlackBox einheitlich Directory Das Modul TextModels hat ein Fabrikobjekt dir Weiterleitung 12 2 Entwurfsmuster dessen Funktion New Model Objekte fabriziert Somit erhalt der Zeiger model einen Bezug auf ein neues Model Objekt durch model TextModels dir New Das Formatter Objekt wird durch formatter ConnectTo model mit dem Model Objekt verkniipft wobei intern etwa mit formatter rider model NewWriter die Writer Fabrikfunktion von Model ein neues Writer Objekt erzeugt und zum Reiter des Formatter Objekts auf dem Model Objekt macht Danach benutzt das Formatter Objekt sein Writer Objekt um seine Operationen zum Schreiben formatierter Daten in
82. Konstrukte behandle ich nicht entlang der Struktur einer Sprache mit kleinen Einzelbeispielen sondern meist dort wo ich sie zum L sen einer Teilaufgabe brauche Damit stelle ich das Programmieren im Kleinen Algo rithmen und Datenstrukturen in einen softwaretechnisch defi nierten Zusammenhang Das Buch richtet sich vor allem an Informatik Anf nger Trotz seines unkonventionellen Ansatzes fordert es vom Leser nur etwas Vertrautheit mit einigen Grundbegriffen der Mathematik Arithmetik nat rliche und ganze Zahlen Mengenlehre Mengen Relationen Abbildungen Logik boolesche Algebra Aussagenlogik und Pr dikatenlo gik erster Stufe Vorkenntnisse im Programmieren oder einer Programmierspra che sind nicht n tig Ich nehme aber an dass der Leser mit einem PC einer Tastatur einer Maus einem Bildschirm einer men orientierten grafischen Benutzungsoberfl che und einem Texteditor vertraut ist N tzlich sind Grundkenntnisse in Eng lisch und die Bereitschaft sich Fachbegriffe anzueignen Die softwaretechnischen Konzepte beschreibe ich mittels grafi scher Notationen und der objekt und komponentenorientierten Programmiersprache Component Pascal die die Entwicklungs linie Pascal Modula Oberon weiterf hrt Die ausf hrbaren Programmbeispiele des Buchs sind in Component Pascal mit einer der ersten komponentenorientierten Entwicklungsumge bungen dem BlackBox Component Builder der Firma Oberon microsystems erstell
83. L nge 5 initialisiert ihre Elemente mit 0X und bindet die Zeigervariable word an einen Bezug auf die Reihungsvariable 0 1 2 3 4 word word 0X Ox Ox 0X 0X POINTER TO CHAR CHAR CHAR CHAR CHAR ARRAY OF CHAR ARRAY 5 OF CHAR Allgemein erzeugt NEW eine dynamische Variable vom Zeiger basistyp des Zeigerparameters initialisiert die dynamische Variable implizit mit Defaultwerten und l sst den Zeigerpara meter auf die erzeugte dynamische Variable zeigen Eine dynamische Variable auf die sich eine Zeigervariable bezieht hei t referenzierte Variable Im Beispiel ist die Rei hungsvariable von word referenziert Dereferenzieren bedeutet von einer Zeigervariable auf die von ihr referenzierte Variable bergehen Im Beispiel liefert Dereferenzieren von word die Rei hungsvariable Dereferenzieren entspricht dem Nachschlagen eines Querverweises in einem Buch Eine dynamische Variable hat keinen vereinbarten Namen ist aber durch Dereferenzieren einer sie referenzierenden Zeigerva riable benennbar Der Name der referenzierten Variable entsteht durch Anh ngen des Dereferenzierungssymbols an den Namen der Zeigervariable Beispielsweise bezeichnet word in Bild 10 11 die Reihungsvariable als Ganzes indem die Zeiger variable word explizit dereferenziert wird Semantik Wert und Referenzsemantik 10 3 5 2 10 3 W rter sammeln Rechtschreibung pr fen Dynamische Variablen haben alle
84. Mit dieser Aufgabe haben wir das Benutzen einer Klasse durch Vereinbaren und Benutzen von Objekten ge bt Dabei haben wir auch gelernt wie man mit erweiterbaren Typen flexible Dienste entwerfen kann Mit Zeigern haben wir die Basis eines wesentli chen Programmierkonzepts erarbeitet Wir kennen nun Zeiger auf Reihungen Zeiger auf Objekte sind von zentraler Bedeu tung f r die Objektorientierung und Gegenstand des n chsten Kapitels Das Konstruieren der Prozeduren zur Syntaxanalyse aus den EBNF Regeln lie uns dagegen noch einmal schrittwei ses Verfeinern und strukturiertes Programmieren ben Zusammenfassung Wir haben einige Konzepte der objektorientierten Softwarekon struktion kennengelernt Module sind vollst ndig implementiert Abstrakte Klassen sind nicht oder teilweise implementiert konkrete Klassen sind vollst ndig implementiert Ein Modul ist nur erweiterbar indem es durch eine neue Ver sion ersetzbar ist deren Schnittstelle die Schnittstelle der alten Version umfasst 10 5 10 6 Aufgabe 10 1 Zahlen sammeln Aufgabe 10 2 Worter zahlen 10 5 Literaturhinweise Eine Klasse ist erweiterbar indem sie zur Basisklasse einer Erweiterungsklasse erkl rt werden kann Eine Erweiterungs klasse erbt die Merkmale ihrer Basisklasse und spezialisiert sie Eine Basisklasse generalisiert die gemeinsamen Merk male ihrer Erweiterungsklassen Eine Ansammlung von Klassen ist durch die Benutzungs und die Erw
85. Modul dient als Einheit des bersetzens des dynami schen Ladens des Wiederverwendens und Ersetzens besser als die Klasse die f r diese Zwecke oft zu klein ist Ein Modul kann Beziehungen zwischen den in ihm verein barten Klassen in einer Art klassen bergreifender Invariante definieren Da nur das Modul als Ganzes austauschbar ist k nnen solche Invarianten nicht durch Ersetzen einzelner Klassen verletzt werden Da das Modul dynamische Ladeeinheit ist werden mit einem Modul auch seine Klassen geladen F r eine Kom mandoausf hrung m ssten sonst die ben tigten Klassen ein zeln geladen werden Die Schutzeinheit ist das Modul nicht die Klasse Das Modul kontrolliert die Exportpolitik Innerhalb des vereinbarenden Moduls sind alle Merkmale einer Klasse ffentlich Mehrere in einem Modul vereinbarte Klassen sind miteinander befreundet sie k nnen auf alle ihre Merkmale zugreifen Ein Modul kann private Klassen vereinbaren die Kunden verborgen bleiben und hinter den Kulissen Arbeit leisten Von einer Klasse ben tigte Konstanten und Typen k nnen zusammen mit der Klasse in demselben Modul vereinbart sein Ein Modul kann selbst Objekte seiner Klassen vereinbaren und bergreifende Invarianten f r diese Objekte festlegen Ein Modul kann die Rolle einer Fabrik bernehmen die Objekte einer Klasse produziert Eine weitere Idee in Component Pascal l sst sich auf die Formel bringen Klasse Verbundtyp typgebund
86. Nachteil denn was n tzt es einen Knopf dr cken zu k nnen wenn man durch das Dr k ken nur erf hrt dass man den Knopf besser nicht gedr ckt h tte Kaffeeautomat mit bewachter Dialogbox Wir wollen die Dialogbox so verbessern dass ein Kommando knopf nur klickbar ist wenn das zugeordnete Kommando seine Aufgabe tats chlich leisten kann BlackBox bietet einen Mecha nismus mit dem diese Anforderung leicht zu erf llen ist Bevor wir die L sung des vorigen Abschnitts ndern stellen wir dazu ben tigte Sprachelemente von Component Pascal vor Definierbare Typen Wir haben bereits Reihungen und Verbunde als definierbare strukturierte Datentypen kennengelernt aber bisher nur jeweils ein Exemplar davon ben tigt Erscheint solch ein Typ in einer Variablenvereinbarung z B in VAR vector ARRAY 6 OF REAL so handelt es sich um einen anonymen Typ denn ARRAY 6 OF REAL konstruiert zwar einen Typ ist aber kein Typname Ein Typ erh lt in einer Typvereinbarung einen Namen z B TYPE Vector ARRAY 6 OF REAL Mit dem Typnamen Vector l sst sich die obige Variable auch so vereinbaren Programmier konvention 7 4 2 7 4 Kaffeeautomat mit bewachter Dialogbox VAR vector Vector Die Namengebung entspricht einer Konvention Variablennamen beginnen mit Kleinbuchstaben Typnamen mit Gro buchstaben Bis auf den ersten Buchstaben k nnen die Namen gleich sein um die Namen vielfalt im Programm zu beschranken Nur beim Kaf
87. Node BEGIN RETURN Union Difference tree other Difference other tree END SymDifference PROCEDURE VAR a SetDesc SetSymDifference IN b c SetDesc NEW I Postcondition a OLD b OLD c VAR oldB oldC SetDesc Solve aliasing problems a b a c BEGIN oldB Copy b oldC Copy c a root SymDifference b root c root a Checklnvariants 11 3 4 11 3 Mengenklasse f r Zeichenketten ASSERT a lsEmpty OR oldB IsEmpty OR oldC lsEmpty BEC postcondSupplierOk ASSERT oldB lsEmpty OR oldC IsEmpty OR a IsDisjoint oldC BEC postcondSupplierOk ASSERT oldB IsEmpty OR oldC lsEmpty OR a IsDisjoint oldB BEC postcondSupplierOk END SetSymDifference PROCEDURE ForAllDo tree Node VAR action ActionDesc PROCEDURE Inorder tree Node BEGIN IF tree NIL THEN Inorder tree left action Do tree item Inorder tree right END END Inorder BEGIN Inorder tree END ForAllDo PROCEDURE IN set SetDesc ForAllDo VAR action ActionDesc NEW Apply action Do item to each element item of set BEGIN ForAllDo set root action set Checklnvariants END ForAllDo END ContainersSetsOfString Fazit F r die Implementation der Mengenklasse haben wir einen geordneten Bin rbaum gew hlt Diese Organisationsstruktur bietet den Vorteil dass das Suchen und Einf gen eines Elements in die Menge und das Ausf gen
88. Rechnern Deshalb m ssen Programme for male Systeme sein denn eine Maschine arbeitet nur formal Andererseits soll der Mensch der schreibende und der lesende Programmierer diese formalen Systeme verstehen k nnen er muss wissen wie ein Rechner auf sie reagiert 4 4 Entwickler und Maschine Bild 4 4 Mensch Programm o o o Rechner T m T liest versteht programmiert schreibt l uft auf speichert verarbeitet f hrt aus I J Das Spannungsfeld zwischen Mensch und Rechner beschreiben wir mit f nf spezifischen Aspekten siehe Bild 4 5 die wir als Orientierungshilfe zum Lesen der folgenden Kapitel jeweils kurz vorstellen Dabei kommen wir wieder nicht umhin Begriffe zu verwenden deren Bedeutung sich erst sp ter weiter erschlie t Bild 4 5 F nf Aspekte von Entwickler menschorientiert rechnerorientiert Programmier Sprachen allgemein Pragmatik Semantik xy lp Syntax oy ar Cch Qe Werkzeuge speziell Maschine 57 4 Programmiersprachen 4 4 1 Beispiel 4 4 2 58 Pragmatik Die Pragmatik behandelt das Verh ltnis der Zeichen von Pro grammiersprachen einerseits zu Menschen andererseits zu Rechnern Welche Ideen driicken die Zeichen aus wie verstehen und benutzen Menschen diese Zeichen Was bewirken sie im Rechner Die menschliche Pragmatik untersucht Fragen wie Lesbarkeit Verst ndlichkeit Lehrbarkeit und Erlernbarkeit von Programmiersprachen sowie ihre Anwendbarkeit und ihr
89. Ressourcen 87 5 Die Entwicklungsumgebung BlackBox Integriert Komponenten orientiert Schnittstellen und Implementationen Abschlie en oder ffnen 88 Die Module eines Subsystems geh ren inhaltlich zusammen oft kooperieren sie um eine Aufgabe gemeinsam zu erf llen Wie die Module zusammenwirken ist in modul bergreifenden Dokumenten beschrieben Auch Ressourcen wie Dialogboxen Men definitionen und auszugebende Zeichenketten sind moduliibergreifend BlackBox ist eine integrierte Entwicklungsumgebung d h Werkzeuge wie Browser Editor Ubersetzer Interpreter und Lader sind aufeinander abgestimmt um dem Entwickler das Arbeiten zu erleichtern Der BlackBox Component Builder ist dazu geschaffen die Ent wicklung wiederverwendbarer Komponenten zu unterst tzen Wir k nnen hier nur Grundlagen zum Verst ndnis der Kompo nententechnologie vorbereiten Eine Komponente kann eine Menge von Modulen oder Subsystemen sein Ein Modul kann eine minimale Komponente sein BlackBox besteht aus einer Bibliothek library von Grundkom ponenten einem Ger st framework namens BlackBox Compo nent Framework d h einer erweiterbaren Ansammlung wieder verwendbarer Schnittstellen und einer Menge direkt benutzbarer Standardkomponenten die dieses Ger st imple mentieren oder erweitern Entwickler k nnen BlackBox durch zus tzliche Module in existierenden Subsystemen oder durch zus tzliche Subsysteme erweitern Konventione
90. Rules a a 0 d SetDifference a a ASSERT d Equal emptySet BEC invariantClass a a 0 d SetSymDifference a a ASSERT d Equal emptySet BEC invariantClass a b a b b a d SetDifference b a e SetUnion aDb d ASSERT aSb Equal e BEC invariantClass a b a b a b d SetDifference aUb alb ASSERT aSb Equal d BEC invariantClass Zero and One Element Rules a 0 0 d Setintersection a emptySet ASSERT d Equal emptySet BEC invariantClass 0 a a d SetSymDifference emptySet a ASSERT d Equal a BEC invariantClass a b O iff a and b disjoint ASSERT alb Equal emptySet a lsDisjoint b BEC invariantClass a b b 0 d Setintersection aDb b ASSERT d IsDisjoint b BEC invariantClass Distribution Rule a b c a b a c d Setintersection a bUc e Setintersection a c f SetUnion alb e ASSERT d Equal f BEC invariantClass a b c a b a c d SetUnion a blc e SetUnion a c f SetIntersection aUb e ASSERT d Equal f BEC invariantClass Adjunction Rules a a b a d Setintersection a aUb ASSERT d Equal a BEC invariantClass a a b a d SetUnion a alb ASSERT d Equal a BEC invariantClass Subset Rules 0 lt a ASSERT emptySet LessEqual a BEC invariantClass a lt a b ASSERT a LessEqual aUb BEC i
91. Schleifen rumpf priift die aktuelle Teilmenge set i und setzt i auf den Index der n chsten Teilmenge Die Schleife wird fortgesetzt wenn die aktuelle Teilmenge leer ist und es noch weitere Teil mengen gibt Die Schleife wird abgebrochen wenn die aktuelle Teilmenge nicht leer ist oder keine Teilmenge mehr zu pr fen ist Diese L sung ist effizienter als der Ansatz mit der FOR Schleife Das Beispiel zeigt dass die Implementation einer Abfrage mehr berlegung fordern kann als die einer Aktion die mittels der Abfrage spezifiziert ist Zum Gl ck trifft dies nicht immer zu Nachdem das Zeichenmengenmodul ContainersSetOfChar erwei tert und getestet ist kopieren wir die neuen Dienste IsEmpty Pro gramm 8 4 und WipeOut Programm 8 2 in das Zahlenmengen modul ContainersSetOfinteger denn sie h ngen nicht vom Elementtyp ab Fazit Wir haben mit dieser Aufgabe die Methode des schrittweisen Verfeinerns ge bt die zusammen mit dem strukturierten Pro grammieren entwickelt wurde Dabei haben wir nicht nur einen strukturierten Algorithmus entworfen sondern die Aufgabe auch modular zerlegt Wir haben berlegt welche Teilaufgaben bereits vorhandene Module bernehmen k nnen In der 199 8 Strukturiertes und modulares Programmieren 8 2 Bild 8 1 Textuelle Ausgabe von 11C harC ounter Do 200 Absicht m glichst wiederverwendbare Teill sungen zu schaf fen haben wir existierende Module erweitert Zeichen z hlen Wi
92. Schnittstelle MODULE Kaffeeautomat Zur Simulation des Kaffeeautomaten brauchen wir also noch ein Kommandomodul Bild 1 9 zeigt rechts einen Entwurf mit einem Modul Kaffeeautomat_BO das eine Benutzungsoberfl che bietet und gleichzeitig das schon spezifizierte Modul Kaffeeauto mat benutzt Module wie Kaffeeautomat_BO konstruieren wir in Kapitel 7 das die Themen Ein Ausgabe Kommandomodule und Benutzungsoberfl chen behandelt Bild 1 9 zeigt dar ber hinaus verschiedene Rollen die Personen gegen ber den beiden Modellen des Kaffeeautomaten dem physischen und dem soft warem igen einnehmen Entwickler i transformiert Zusammenfassung Der Griff zur Kaffeetasse hat sich gelohnt Wir haben nicht nur das k stliche Getr nk genossen sondern auch Grundgedanken kennengelernt die uns beim Entwickeln von Software leiten Das Beschreiben von Sachverhalten mit physischen mathe matischen und Software Modellen 1 6 1 7 Aufgabe 1 1 Kaffeesorte und Zutaten Aufgabe 1 2 Zigarettenautomat Aufgabe 1 3 W rfel Aufgabe 1 4 Uhr 1 6 Literaturhinweise das Modellieren mit Modulen die als Kunden und Lieferan ten auftreten das Zerlegen von Aufgaben in Teile die Dienste hei en das Trennen von Diensten in Abfragen und Aktionen das Beschreiben von Verhalten durch Zustandsdiagramme das Abstrahieren durch das Trennen von Schnittstellen und Implementationen das Unterscheiden von Schnittstellen und Benutzun
93. Secretary next NIL Nach einem weiteren Aufruf etwa UtilitiesRepeater Start otherTest wobei otherTest auf ein TestThings Test Objekt zeigt hat die Liste den Zustand von Bild 11 9 das unwesentliche Details weglasst TestThings Test TestSetsOfString Test m action action rs next next NIL Secretary Start f gt ein neues Secretary Objekt am Anfang der Liste ein weil dies am einfachsten ist Mit dem formalen Parameter action Action und einem lokalen Zeiger secretary Secretary lautet der Algorithmus dazu NEW secretary secretary action action secretary next first first secretary Zu erg nzen sind die Aufrufe 305 11 Dynamische Objektstrukturen 11 2 2 2 Muster zum Durchlaufen einer Liste Suchen eines Elements 11 2 2 3 306 Services GetTypeName action secretary name Services DoLater secretary Services now mit denen sich das Secretary Objekt den Typnamen seines Action Objekts merkt und sich selbst f r die erste Ausf hrung seines Do bei Services registrieren l sst Bearbeiten der Elemente Start soll effektlos sein wenn das bergebene Action Objekt schon registriert ist siehe S 291 Es muss also erst pr fen ob das Action Objekt in der Listenstruktur vorkommt Das algorithmi sche Muster zum Bearbeiten aller Elemente der Liste ist secretary first WHILE secretary NIL DO bearbeite s
94. Springer Verlag Berlin Heidelberg 1998 292 S Jacob Gore Object Structures Building Object Oriented Software Components with Eiffel Addison Wesley Publishing Company Inc Reading 1996 469 S 411 B Literaturverzeichnis 412 11 12 13 14 15 16 17 18 19 20 21 22 23 Frank Griffel Componentware Konzepte und Techniken eines Softwareparadigmas dpunkt Verlag f r digitale Technologie GmbH Heidelberg 1998 645 S Wolfgang Hesse G nter Merbeth Rainer Fr lich Software Entwicklung Vorgehensmodelle Projektf hrung Produktverwaltung R Oldenbourg Verlag GmbH M nchen Wien 1992 292 S Jean Marc Jezequel Object Oriented Software Engineering with Eiffel Addison Wesley Publishing Company Inc Reading 1996 340 S Jean Marc Jezequel Michel Train Christine Mingins Design Patterns and Contracts Addison Wesley Longman Inc Reading 2000 348 S Peter Kammerer Von Pascal zu Assembler Eine Einf hrung in die maschinennahe Programmierung f r INTEL und MOTOROLA Friedr Vieweg amp Sohn Verlagsgesellschaft mbH Braunschweig Wiesbaden 1998 251 S N Metropolis J Howlett Gian Carlo Rota Hrsg A History of Computing in the Twentieth Century A collection of essays with introductory essay and indexes Academic Press Inc New York 1980 693 S Bertrand Meyer Objektorientierte Softwareentwicklung Carl Hanser Verlag M nchen Wien 1990 547 S
95. String Bitte rufen Sie zuerst initialisieren auf Out Ln 7 2 Kaffeeautomat mit einfacher Ein Ausgabe quis ELSIF In Done OR Betrag lt 0 THEN Out String Bitte geben Sie einen positiven Geldbetrag ein Out Ln KA Geld_einnehmen Betrag Zustand_anzeigen END END Geld_einnehmen PROCEDURE Kaffee_ausgeben BEGIN Out Open IF KA au er_Betrieb THEN Out String Bitte rufen Sie zuerst initialisieren auf Out Ln ELSIF KA eingenommener_Betrag lt KA Preis THEN Out String Bitte geben Sie mehr Geld ein Out Ln KA Kaffee_ausgeben Out String Hier ist Ihr Kaffee wohl bekomm s Out Ln Zustand_anzeigen 5 Dialog Beep END END Kaffee_ausgeben PROCEDURE Geld_zur ckgeben BEGIN Out Open IF KA au er_Betrieb THEN Out String Bitte rufen Sie zuerst initialisieren auf Out Ln ELSE Out String Hier erhalten Sie Out Int KA eingenommener_Betrag 0 Out String Zenti Euro zur ck Out Ln KA Geld_zur ckgeben Zustand_anzeigen END END Geld_zur ckgeben END I1Kaffeeautomat_EinAusgabe Programm 7 3 erg nzt an einigen Stellen den Entwurf 2 des Algorithmus S 156 oder weicht von ihm ab In der folgenden Liste von Bemerkungen entsprechen die Nummern den Num mern bei den Symbolen in Programm 7 3 Lokales Merkmal 1 In einigen Kommandos haben wir erstmals lokale Merk male vereinbart z B in Zustand_anzeigen die Konstante Stellen in initialisieren die Variable
96. Substantiv wel ches das gefragte Ding z B Preis oder ein Adjektiv oder Parti zip welches die gefragte Eigenschaft beschreibt z B betriebsbe reit Ein Substantiv kann mit einem Adjektiv oder Partizip qualifiziert sein z B eingenommener_Betrag Eine Eigenschaft kann durch eine adjektiv hnliche Wortkombination ausge dr ckt sein z B au er_Betrieb 1 Einf hrung Leitlinie 1 5 Namen von Aktionen Leitlinie 1 6 Keine Seiteneffekte 1 2 1 Programm 1 2 Schalter als Modul roh W hle als Name einer Aktion ein Verb welches die geforderte T tigkeit beschreibt z B initialisieren Das Verb kann mit einem Substantiv qualifiziert sein z B Geld_einnehmen Der Name beschreibt die T tigkeit aus der Sicht des Lieferanten nicht des Kunden z B Geld_einnehmen nicht Geld_eingeben Es ist auch unsere Sprache die uns Leitlinie 1 3 nahelegt Denn wie sollten wir einen Dienst nennen der den Zustand seines Moduls ver ndert und ein Ergebnis liefert H tte z B der Kaf feeautomat einen Dienst der Geld einnimmt und den eingenom menen Betrag ergibt wie sollte dieser hei en eingenommener_Betrag dr ckt die T tigkeit und den Effekt des Geldeinnehmens nicht aus Geld_einnehmen dr ckt das gelieferte Ergebnis nicht aus Geld_einnehmen_und_eingenommener_Betrag klingt das gut Abfragen liefern Ergebnisse Aktionen bewirken Effekte Liefert ein Dienst ein Ergebnis und bewirkt einen Effekt so ist
97. Syntax von Programmiersprachen beschreibt man gut mit der erweiterten Backus Naur Form Die Semantik eines programmiersprachlichen Konstrukts legt fest was das Konstrukt im Rechner bewirkt Die Pragmatik untersucht wie programmiersprachliche Konstrukte beim L sen von Aufgaben n tzen Ein bersetzer ist ein Programm das Quelltexte einer h he ren Programmiersprache in Maschinencode transformiert Component Pascal ist eine modulare Programmiersprache bei der Module bei Bedarf dynamisch geladen werden 4 11 4 12 Aufgabe 4 1 Syntaxdiagramme 4 11 Literaturhinweise Literaturhinweise Weiterf hrende Informationen zu den Grundbegriffen findet man in dem Nachschlagewerk von P Rechenberg und G Pomberger 29 in P Rechenberg 28 einer nach den Teilgebie ten Technische Praktische Theoretische und Angewandte Infor matik gegliederten Rundumschau und in dem umfassenden Werk von H Ernst 3 Die in Abschnitt 4 2 vorgestellte Rechnerarchitektur ist oft nach John von Neumann benannt der 1945 einen Bericht dar ber ver ffentlichte Jedoch realisierte Konrad Zuse die wesentlichen Konzepte dieser Architektur bereits in den Jahren 1938 bis 1941 in seinen Rechnern Z1 und Z3 36 39 Eine Einf hrung in Rechnerstrukturen und maschinennahes Programmieren bietet P Kammerer 15 Die Backus Naur Form BNF haben John Backus und Peter Naur eingef hrt um die Syntax der Programmiersprache Algol 60 zu beschreiben Di
98. Szyperski 31 geschrieben Mit Softwarequalit tsmerkmalen befassen sich die Deutschen Industrie Normen DIN 55350 DIN 66234 und DIN ISO 9126 4 1 Sprache Zeichen Programmiersprachen Dieses Kapitel f hrt grundlegende Begriffe aus dem Bereich der Programmiersprachen ein und stellt zwei Sprachen vor Grundbegriffe In weitem Sinn ist eine Programmiersprache programming lan guage eine Notation zur Darstellung von Softwaremodellen Programmen Die Notation kann textuell grafisch oder beides gemischt sein Wir unterscheiden nach ihrem Einsatzbereich im Softwareentwicklungsprozess zwischen Entwurfssprachen Spezifikationssprachen und Implementationssprachen Ein in einer Entwurfs oder Spezifikationssprache erstelltes Modell muss nicht auf einem Rechner ablaufen k nnen wohl aber in der Vorstellung des Entwicklers Dagegen zeichnet sich eine Implementationssprache dadurch aus dass die mit ihr for mulierten Programme maschinell ausf hrbar sind Implementa tionssprachen sind Programmiersprachen in engem Sinn Modelle Entw rfe und Spezifikationen dienen als Zwischen produkte aus denen manuell rechnergest tzt oder automatisch ausf hrbare Programme entwickelt werden Zur Modellierung benutzen wir in diesem Buch grafische Ele mente die sich an der Unified Modeling Language UML ori entieren Als Spezifikationssprache dient uns das in den Kapi teln 1 und 2 eingef hrte Cleo als Implementationssprache Co
99. Tb is an extension of Ta A Component Pascal Language Report Assignment compatible An expression e of type Te is assignment compatible with a varia ble v of type Tv if one of the following conditions hold 1 Te and Tv are equal and neither abstract extensible or limited record nor open array types 2 Te and Tv are numeric or character types and Tv includes Te 3 Te and Tv are pointer types and Te is an extension of Tv 4 Tv is a pointer or a procedure type and e is NIL 5 Tv is an numeric type and e is a constant expression whose value is contained in Tv 6 Tv is an array of CHAR Te is String or Shortstring and LEN e lt LEN v 7 Tv is an array of SHORTCHAR Te is Shortstring and LEN e lt LEN v 8 Tv is a procedure type and e is the name of a procedure whose formal parameters match those of Tv Array compatible An actual parameter a of type Ta is array compatible with a formal parameter f of type Tf if 1 Tf and Ta are equal types or 2 Tf is an open array Ta is any array and their element types are array compatible or 3 Tf is an open array of CHAR and Ta is String or 4 Tfis an open array of SHORTCHAR and Ta is Shortstring Parameter compatible An actual parameter a of type Ta is parameter compatible with a formal parameter f of type Tt if 1 Tf and Ta are equal types or 2 fis a value parameter and Ta is assignment compatible with Tt or 3 fis an IN or VAR parameter and Tf and Ta are record
100. Uhr kann man das Tageskalen derblatt abreifsen Modellieren Sie einen Kreis Man kann den Radius den Umfang und die Fl che des Kreises abfragen und einstellen Modellieren Sie eine Schaltung mit einem ohmschen Wider stand Man kann Widerstand Spannung und Stromst rke abfragen und einstellen Modellieren Sie ein Getriebe mit vier G ngen und einem R ck w rtsgang Man kann die bersetzungsverh ltnisse der G nge die Umdrehungszahlen an der Eingangs und der Ausgangs welle und den eingelegten Gang abfragen in einen anderen Gang umschalten und die Umdrehungszahl der Eingangswelle erh hen oder erniedrigen Voraussetzung 2 1 Tabelle 2 1 Beispiele zu Exemplar und Typ Analogie Spezifizieren Wir gehen von den in Kapitel 1 eingef hrten Begriffen und Bei spielen aus Um die Schnittstellen der Softwaremodelle exakt zu beschreiben lernen wir die Methode der Spezifikation durch Vertrag kennen Dazu setzen wir voraus dass der Leser mit Grundbegriffen der Aussagenlogik und booleschen Algebra vertraut ist und die logischen Operationen Negation Konjunktion Disjunktion Implikation quivalenz und Antivalenz sowie die zugeh rigen Rechenregeln kennt Exemplar und Typ Bei allt glichen Begriffen unterscheiden wir intuitiv zwischen Exemplaren und Typen Tp Die Nachtigall singt seit Die Nachtigall ist ein Stunden Singvogel Mein Videorecorder ist Der Videorecorder von defekt Auvilektrix ist ein
101. Variable enth lt Endlosschleifen verursachen Softwarefehler mit dem Symptom System reagiert nicht mehr Programmierer m ssen darauf achten terminierende Schleifen zu konstruieren weil es keinen automatischen Nachweis der Terminierung beliebiger Schleifen geben kann Besondere Aufmerksamkeit verdienen der erste und der letzte Durchlauf einer Schleife um Fehler der Art um eins daneben zu vermeiden Schleifen sollen terminieren Programmierer sollen das Termi nieren von Schleifen logisch argumentierend nachweisen W hle eine Schleifenfortsetzungsbedingung m glichst stark eine abbruchbedingung m glichst schwach damit die Schleife leichter terminiert Beim Entwurf 2 der Eingabeschleife auf S 189 ist die gepr fte Variable In Done Sie wird im Schleifenrumpf nicht direkt ver n dert aber indirekt durch den Prozeduraufruf In Char c Da kein Eingabetext unendlich lang sein kann er steht in einem Doku ment das in einem Speicher endlicher Kapazit t liegt und bei 191 8 Strukturiertes und modulares Programmieren Scchleifenvariante Entwurf 3 des Ausgabeschritts Entwurf 4 des Ausgabeschritts 192 jedem Lesen die Leseposition im Eingabetext um ein Zeichen n her ans Ende ger ckt wird terminiert die Eingabeschleife Der Abstand der Leseposition vom Textende ist eine Schleifen variante das ist eine nat rliche Zahl die bei jedem Schleifen durchlauf kleiner wird Die Angabe einer Variante zu ei
102. Verbundtyp Die Variablen des Ursprungsmoduls zu Feldern des neuen Verbunds machen Alle Prozeduren mit Empf ngern versehen Funktionen mit IN gew hnliche Prozeduren mit VAR Parametern Alle Prozeduren mit dem Attribut NEW versehen In allen Prozeduren bisherige Zugriffe auf Variablen des Ursprungsmoduls in Zugriffe auf Felder des neuen Verbund typs umwandeln indem man ihre Namen mit dem Empf n gernamen qualifiziert In allen Prozeduren bisherige Aufrufe von Prozeduren des Ursprungsmoduls in Aufrufe der jetzt typgebundenen Pro 247 9 Abstrakter Datentyp Objektorientiertes Programmieren zeduren umwandeln indem man ihre Namen mit dem Emp fangernamen qualifiziert Den Initialisierungsteil des Ursprungsmoduls zum Rumpf als Klasse in Modul 9 6 248 einer neuen typgebundenen Prozedur namens Init machen MODULE Subsystemname Things IMPORT Liste der benutzten Module CONST Vereinbarungen von Konstanten TYPE Vereinbarungen von Typen Thing POINTER TO ThingDesc ThingDesc RECORD Vereinbarungen von Feldern END Vereinbarungen von an ThingDesc gebundenen Prozeduren PROCEDURE VAR this ThingDesc Init NEW BEGIN initiale Anweisungen END Init END SubsystemnameThings Zusammenfassung Wir haben das Grundkonzept der objektorientierten Software konstruktion die Klasse kennengelernt und ihre Beziehungen zu Modulen und Verbunden studiert Module sind abstrakte Datenstrukture
103. Wie oft die Implementation von A nach dem Erzeugen der Schnittstelle von A ge ndert wurde ist gleichg ltig Der Lader l dt immer den aktuellen Code der Kunde B benutzt die j ngste Codeversion des Liefe ranten A Nun zu Fall 2 S 108 ndert sich das Merkmal x der Schnitt stelle von A so erzeugt der bersetzer eine neue Schnittstellen datei A osf mit einer anderen Versionsnummer f r x etwa V2 und in der neu erzeugten Codedatei A ocf notiert er den Bezug auf A x V2 Solange B nicht nach bersetzt ist d h sich auf Ax V1 bezieht kann B nicht geladen werden da sich A xV1 nicht mit 109 5 Die Entwicklungsumgebung BlackBox Erweiterbarkeit 5 6 5 7 110 A x V2 vertr gt Der Lader weist die Ladeanforderung zur ck weil der neue Code von A nicht zu dem alten von B passt und gibt eine Fehlermeldung in das Log Fenster aus Die geschilderte Technik unterst tzt die Erweiterbarkeit von Modulen Neue Merkmale lassen sich in eine Schnittstelle auf nehmen ohne dass dadurch Objektcode von Kunden unbrauch bar wird Entwicklungszeiten verk rzen sich durch weniger Nach bersetzungen Zusammenfassung Auf unserer Tour durch den BlackBox Component Builder haben wir eine Reihe von Konzepten entdeckt BlackBox ist eine Sprachumgebung f r Component Pascal die die Entwicklung plattformunabh ngiger wiederver wendbarer Komponenten unterst tzt BlackBox ist ein Komponenten Ger st gegliedert in Subsy steme die
104. aus Modulen bestehen BlackBox bietet eine grafische Benutzungsoberfl che mit einer dokumentzentrierten Sicht Dokumente setzen sich aus passiven aktiven und interaktiven Objekten zusammen BlackBox integriert Werkzeuge wie die Online Dokumenta tion den Browser das Lager den Editor den bersetzer den Kommandointerpreter den Lader und den Entlader BlackBox bersetzt Module getrennt und bindet und l dt sie dynamisch auf sichere Weise Es erlaubt kurze Editieren bersetzen Ausf hren Zyklen BlackBox reduziert den Unterschied zwischen verschiedenen Modi von Text zwischen Kommando und Programmier sprache sowie zwischen Kommando und Men oberfl che Literaturhinweise Die Benutzungsoberfl che von BlackBox ist umfassend in der Online Dokumentation beschrieben S Warford gibt Hinweise zum Einstieg 40 Bild 6 1 Transformation von Cleo in Component Pascal 6 1 Vom Spezifizieren zum Implementieren In Abschnitt 2 4 haben wir Spezifikationen nach der Vertragsme thode konstruiert und die dazu passende Cleo Sprache benutzt Nun sind Implementationen zu erstellen zweckm igerweise mit Component Pascal Als erste Aufgabe ist der in Programm 2 8 S 35 spezifizierte Kaffeeautomat zu implementieren Wir transformieren die Spezifikation mit drei Schritten in ein aus f hrbares Programm In Bild 6 1 zeigen die mit Schrittnummern beschrifteten Pfeile den Datenfluss Spezifikation Programm 2 5 Program
105. daraus jeweils einen Aufwand proportional zur H he des Baums erfordern w hrend bei einer Organisation als verkettete Liste der Aufwand jeweils propor tional zur Anzahl der Elemente in der Menge ist Es ist m glich einen Baum als abstrakten Datentyp oder Klasse in einem eigenen Modul zu kapseln Solch ein Baumtyp kann zus tzliche Baumoperationen bieten Wir haben davon abgese hen da wir B ume als Organisationsstrukturen sehen die wir hinter Schnittstellen zu Anwendungen verbergen wollen 333 11 Dynamische Objektstrukturen 11 4 11 5 11 6 Aufgabe 11 1 Enthaltensein rekursiv Aufgabe 11 2 Einf gen und Entfernen iterativ Aufgabe 11 3 Mengenoperationen Aufgabe 11 4 Umfang einer Menge 334 Zusammenfassung In diesem Kapitel haben wir ein auf der Vertragsmethode basierendes Testverfahren ken nengelernt mit dem wir vertraglich spezifizierte Pr flinge randomisierten Dauertests aussetzen k nnen den Begriff und die Bedeutung dynamischer Objektstruktu ren an den Beispielen der einfach verketteten Liste und des geordneten Bin rbaums erfahren das wichtige Konzept der Rekursion an Hand rekursiver Objektstrukturen und rekursiver Algorithmen studiert Literaturhinweise Dynamische Daten und Objektstrukturen behandeln A Aho und J Ullman 1 G Goos 7 und J Gore 10 Ihnen verdanken wir einige Anregungen bungen Mit diesen Aufgaben ben Sie rekursive Algorithmen zu pro grammieren
106. das Modul gebunden Ein Detail das erst im Zusammenhang mit der Typerweite rung verst ndlich wird ist zu erg nzen Alle typgebundenen Prozeduren dieses Beispiels sind mit dem Attribut NEW ver einbart PROCEDURE IN set SetDesc IsEmpty BOOLEAN NEW 5 Im Rumpf einer typgebundenen Prozedur wird auf ein Merkmal des Empf ngers zugegriffen indem der Merkmal name mit dem Empf ngernamen qualifiziert wird So bezeichnet set set das Verbundfeld set des Empf ngers set set Has x bezeichnet die typgebundene Prozedur Has des Empf ngers set Hierin unterscheidet sich Component Pascal syntaktisch von Cleo das die Qualifizierung nicht braucht der Empf nger ist in Cleo namenlos 6 Bei Aktionen z B Put erscheint der Empfanger als Ein Ausgabeparameter mit VAR weil er durch den Aufruf veran dert wird Der Ubersetzer erzeugt aus Programm 9 4 diese Schnittstelle DEFINITION ContainersSetsOfChar TYPE Set POINTER TO SetDesc SetDesc RECORD IN set SetDesc Has x Element BOOLEAN NEW IN set SetDesc IsEmpty BOOLEAN NEW VAR set SetDesc Put x Element NEW VAR set SetDesc Remove x Element NEW VAR set SetDesc WipeOut NEW END Element CHAR END ContainersSetsOfChar Die Implementation ist wie blich abgestreift Vom Quelltext unterscheidet sich die Darstellung dadurch dass die typgebun denen Prozeduren nicht nach der Verbundtypvereinbarung Typenmodul Initialisier
107. den Sie zu Aufgabe 8 4 ent worfen haben gedanklich mit einer kleinen Reihung mit beliebi gen Werten aus und notieren Sie dabei die Spur der Reihung 8 Strukturiertes und modulares Programmieren Aufgabe 8 6 Komplexit tsanalyse Aufgabe 8 7 Auswertung boolescher Ausdr cke 228 Bestimmen Sie die Komplexit t des Sortieralgorithmus den Sie zu Aufgabe 8 4 entworfen haben Welche der folgenden booleschen Ausdr cke sind bei kurzer welche bei langer Auswertung definiert Nehmen Sie an dass alle vorkommenden Namen geeignet vereinbart sind x gt 1 amp y MOD x 2 y MOD x 2 amp x gt 1 9 1 Leitlinie 9 1 Modell und Spezifikation Bild 9 1 Physisches Modell des Kaffeeautomaten mit Ausgabepl tzen Objektorientiertes Programmieren Zum Kaffeeautomatenbeispiel holen wir Tassen aus dem Schrank und erhalten den Grundbegriff des objektorientierten Programmierens die Klasse Wir starten in der Ebene der Spezi fikation mit Cleo um in wenigen Transformationsschritten die Ebene der Implementation mit Component Pascal zu erreichen Tassen Betrachten wir das Cleo Programm 2 8 S 35 Begl ckt uns dieser Kaffeeautomat Wo bleibt der Kaffee Der Automat kn pft dem Kunden Geld ab ohne etwas daf r zu liefern Wo liegt der Fehler Haben wir falsch spezifiziert Vergleichen wir Programm 2 8 mit dem physischen Modell des Kaffeeauto maten Bild 1 1 S 1 Offenbar fehlt schon im physischen Modell der Ausgab
108. der lei der nicht die fehlende Ausgabe einer physischen Tasse Kaf fee ersetzt Mit Programm 7 3 haben wir mit einfachen Mitteln ein robustes Kommandomodul zur men orientierten Benutzungsoberfl che Bild 7 6 des Kaffeeautomaten implementiert Vergleichen wir den Umfang der Programme 6 3 S 132 und 7 3 Der Aufwand f r solch ein Kommandomodul kann den Aufwand f r ein reines Funktionsmodul inklusive Spezifi kation bersteigen Die Eingabe erfolgt im Men die Ausgabe im Log Fenster Der Benutzer muss die voneinander unabh ngigen Fenster nebeneinander anordnen um Ursache und Wirkung verfol gen zu k nnen Der Zustand des Kaffeeautomaten wird immer wieder in einen fortlaufenden Text ausgegeben Das ist gut zum Proto kollieren aber geschw tzig und unruhig wenn nur der aktu elle Zustand interessiert Suchen wir also nach M glichkeiten die Ein Ausgabe elegan ter zu gestalten 7 3 Entwurf der Kommandoschnittstel le 7 3 1 7 3 Kaffeeautomat mit Dialogbox Kaffeeautomat mit Dialogbox Gewtinscht ist eine Benutzungsoberflache mit den zusatzlichen Eigenschaften Ein und Ausgabebereiche liegen beieinander nicht getrennt Die Ein Ausgabe erfolgt in bestimmten Feldern die jeweils aktuelle Werte anzeigen Der Programmieraufwand ist minimal Dialogboxen erf llen diese Anforderungen Dem Entwurf Bild 7 5 folgend verwenden wir wieder 1Kaffeeautomat als Funktions modul und entwickeln dazu ei
109. dies ein Seiteneffekt side effect und der Dienst ist seiteneffektbehaftet Abfragen sind dagegen seiteneffektfrei Damit k nnen wir Leitlinie 1 3 auch negativ formulieren Vermeide Dienste mit Seiteneffekten Seiteneffektbehaftete Dienste lassen sich nicht pr gnant und exakt benennen und verbal nur schwer beschreiben Seiteneffekte behindern syste matisches Entwickeln von Software erheblich Nach so vielen Vorgaben ist es angebracht das Modellieren mit zwei weiteren Beispielen zu ben Ein Schalter Das erste zu modellierende Ger t ist ein Schalter mit nur zwei Zust nden aus und an Schalter gibt es in zwei Arten Die eine Art hat zwei Kn pfe je einen zum An und Ausschalten Die andere Art sind Kippschalter zum Umschalten des Zustands Ein Schalter ist wie ein Bit die kleinste Darstellungs einheit f r zweiwertige Daten Wir modellieren einen Schalter der auf beide Arten zu verwenden ist MODULE Switch QUERIES on Bild 1 4 Zustandsdiagramm eines S chalters 1 2 Modul und Dienst ACTIONS SwitchOn SwitchOff Toggle END Switch Einen Schalter mit einem Modul modellieren hei t freilich eine M cke zum Elefanten aufbl hen Andererseits Solche Schalter kommen immer wieder als Teilchen von Modulen vor K nnten wir einen Schalter nicht modellieren wie sollte uns das Model lieren etwa einer Telefonvermittlungsanlage gelingen die doch aus Abertausenden von Schaltern besteht Da ein Schalt
110. eine Schnittstelle zu Kundenmodulen es ist nicht beabsichtigt dass es eine Benutzungsoberflache f r Menschen bietet F r ein Kaffeeautomaten Simulationsprogramm ben ti gen wir ein weiteres Modul mit einer Benutzungsoberfl che das gleichzeitig Kunde von Programm 1 1 ist Benutzer Mensch Maschine Interaktion Benutzungsoberfl che Menge von Kommandos Kommandomodul Ein Kommando ist eine Aktion eines Moduls die ein Benut zer aufrufen kann Ein Kommandomodul ist ein Modul das Kommandos und andere Elemente f r eine Benutzungsober fl che bereitstellt Eine Benutzungsoberfl che besteht aus Kommandoaufrufen Men s Dialogboxen oder anderen Ele menten die der Ein und Ausgabe von Daten dienen bietet benutzt Bild 1 8 stellt eine spezielle Variante von Bild 1 7 dar W hrend bei allgemeiner Mensch Maschine Interaktion auch Materialien wie Geld und Kaffee bewegt werden beschr nkt sich die Ein Ausgabe zwischen Mensch und Rechner meist auf Daten textu eller grafischer oder audiovisueller Art Wie die Eingabe erfolgt ob durch Dr cken von Tasten oder Bewegen einer Maus und wie die Ausgabe ob auf einen Bildschirm oder einen Drucker ist nachrangig 13 1 Einf hrung Bild 1 9 Modelle und Rollen 1 5 14 Softwaremodell Physisches Modell Benutzer Benutzer benutzt interagiert Benutzungsoberfl che MODULE Kaffeeautomat_BO Kommandomodul Kunde modelliert benutzt
111. erreichbar Stop muss zum Entfernen eines Listenelements dieses suchen und falls es gefunden ist den next Zeiger des Vorg ngers auf den Nachfolger des zu entfernenden Elements zeigen lassen Ist das zu entfernende Element das erste in der Liste so ist statt des Vorg ngers der Anker umzuzeigern Mit dem formalen Parameter action Action und den lokalen Zei gern previous secretary Secretary lautet der Algorithmus zum Ent fernen eines Elements previous first secretary first WHILE secretary NIL amp secretary action action DO previous secretary secretary secretary next END IF secretary NIL THEN IF previous secretary THEN first secretary next ELSE previous next secretary next END END Wenn das zu entfernende Secretary Objekt gefunden ist also im IF secretary NIL THEN Zweig dann sind die Aufrufe Services RemoveAction secretary Write secretary name secretary count zu erg nzen um das Secretary Objekt bei Services abzumelden und die Daten der nun beendeten Daueraktion mit der lokalen Prozedur Write auszugeben 307 11 Dynamische Objektstrukturen 11 2 3 Implementation Wir f gen nun die einzelnen Entwurfselemente zusammen um das Testwerkzeug zu implementieren Programm 11 6 MODULE UtilitiesRepeater Testwerkzeugmodul I Interface Description Action procedures repeated in the foreground or background Clients must extend Action and use UntilBreakDo o
112. fest was welches Sprachelement oder konstrukt bedeu tet und welche Wirkung es in einem Programmablauf hervor ruft Die Semantik wird beschrieben durch eine Menge von Ver Beispiel Beispiel 4 4 Entwickler und Maschine haltensregeln die die Funktionsweise von Programmen bestimmen Bei manchen meist lteren Programmiersprachen ist die Semantik nicht formalisiert sondern nur verbal beschrieben Andere meist j ngere Programmiersprachen haben eine weit gehend formalisierte Semantik denn daf r wurden theoretisch fundierte Methoden entwickelt auf die wir nicht eingehen Eine Frage der Semantik ist etwa was die Zeichenfolge 1 2 3 bedeuten soll In den meisten Programmiersprachen handelt es sich um einen arithmetischen Ausdruck dessen Bedeutung durch die Mathematik festgelegt ist Addiere die Zahlen eins und zwei multipliziere das Zwischenergebnis mit drei und lie fere das Ergebnis Die Mathematik kennt Ausdr cke aber keine Anweisungen Die Aufgabe die Bedeutung von Anweisungen zu beschreiben kann die Informatik nicht an die Mathematik delegieren Wie man die Semantik von Anweisungen durch Zusicherungen spe zifizieren kann behandeln wir auf S 128 S 157 S 190 S 203 und S 311 Syntax Die Syntax einer Programmiersprache behandelt Beziehungen der Zeichen untereinander ihre Kombinierbarkeit ohne R ck sicht auf ihre spezielle Bedeutung und ihre Beziehung zur Umgebung Sie legt fest welche Sprachelemen
113. glichkeiten von BlackBox zum Gestalten von Benutzungsoberfl chen erf hrt man aus der umfangreichen Online Dokumentation bungen Mit diesen Aufgaben ben Sie das Gestalten von Benutzungs oberfl chen ndern Sie das Kommandomodul und die Dialogbox des Kaf feeautomaten so dass die Dialogbox ein Pr fk stchen betriebsbe reit statt au er Betrieb hat und alle Betr ge in DM statt Euro anzeigt Das Funktionsmodul I1Kaffeeautomat bleibt wie es ist Machen Sie die Benutzungsoberfl che des Kaffeeautomaten bes ser verst ndlich indem Sie die Ausgabe weiterer Meldungen einbauen die den Benutzer ber seine Eingabem glichkeiten informieren Aufgabe 7 3 Korrekte Geldeinnahme Aufgabe 7 4 Zwei Dialogboxen Aufgabe 7 5 Kaffeesorte und Zutaten 7 8 bungen Verbessern Sie die Benutzungsoberflache des Kaffeeautomaten so dass das Betriebspersonal nicht einen eingenommenen Betrag einkassieren kann d h initialisieren ist durch eingenommener_Betrag 0 zu bewachen Die Kaffeeautomatenmodelle von Bild 1 1 S 1 und Programm 2 4 S 26 haben zwei Schnittstellen je eine f r Benutzer und das Betriebspersonal Bilden Sie dieses Modell nach indem Sie zu einem Kommandomodul zwei entsprechende Dialogboxen gestalten Entwickeln Sie ein Kommandomodul und eine Dialogbox zu einem Kaffeeautomaten bei dem man Sorte und Zutaten w h len kann koffeinfrei koffeinhaltig ohne mit Milch ohne mit Zucker Verwenden Sie als Funktionsmod
114. haupts ch lich aus einer Liste von Vereinbarungen 2 2 2 2 2 Benutzung angebotener Dienste MODULE Modulname QUERIES Vereinbarungen von Abfragen ACTIONS Vereinbarungen von Aktionen END Modulname Jeder Dienst ist in einem Modul vereinbart dem vereinbaren den Modul des Dienstes Eine Vereinbarung eines Dienstes legt seine Art fest ob Abfrage oder Aktion seinen Namen und bei einer Abfrage auch ihren Typ Ein parametrisierter Dienst erscheint bei der Vereinbarung mit einer Liste formaler Parame ter Im Beispiel Geld_einnehmen IN Betrag INTEGER hat Geld_einnehmen nur einen formalen Parameter namens Betrag Formale Parameter hneln Abfragen Eine Vereinbarung eines Parameters legt seine Art z B IN seinen Namen und seinen Typ z B INTEGER fest Abfragen und formalen Parametern ist gemein dass sie einen Namen und einen Typ haben Wo bleiben die Werte Sie erscheinen nicht in Vereinbarungen sondern in Aufrufen Aufruf Zum Aufruf call eines Dienstes ist sein Name anzugeben z B eingenommener_Betrag Ein Dienstaufruf kann zun chst nur in der Implementation eines Moduls vorkommen Der obige Aufruf darf nur in dem Modul stehen das den Dienst vereinbart also in Kaffeeautomat weil der Aufruf unqualifiziert ist Ein Aufruf in einem Kunden modul muss qualifiziert sein d h vor dem Dienstnamen muss der Lieferantenmodulname stehen MODULE Kunde_von_Kaffeeautomat Kaffeeautomat eingenommener_Betrag
115. i und der Ausdruck eine literale Konstante etwa die Zahl 0 Die Variable muss einen Typ haben in dessen Wertebereich die 0 liegt etwa INTEGER und sie muss vereinbart sein etwa durch VAR i INTEGER Die Zuweisung i 0 wirkt dann so i 0 lt 0 INTEGER Zuweisung Eine Zuweisung ist eine Anweisung sie kann nur in einem Anweisungsteil stehen Allgemein hat die Zuweisung die Form Variablenbezeichner Ausdruck und wirkt so Variablen bezeichner Wert lt __ Wet lt 2 Ausdruck Speicherung Auswertung Typ Das Speichern darf freilich nur erfolgen wenn die Variable sichtbar und nicht schreibgesch tzt ist im ver einbarenden Modul ist sie stets schreibbar und der ermittelte Wert zur Variable passt 127 6 Vom Spezifizieren zum Implementieren Zugriffskontrolle Typbindung Typpr fung Semantik 7N Anweisung Ausdruck Pragmatik 128 Neben der Zugriffskontrolle kommen hier hnlich wie f r Para meter in 2 3 2 S 27 besprochen Typbindung von Variablen und Ausdr cken und Typpr fung durch den bersetzer ins Spiel Der Typ des Ausdrucks wird zur bersetzungszeit ermittelt und es wird gepr ft ob er mit dem Typ der Variable vertr glich ist Falls nicht so scheitert die bersetzung eine typfehlerhafte Zuweisung kann also nie Schaden zur Laufzeit anrichten Die Semantik der Zuweisung k nnen wir n herungsweise mit einer Zusicheru
116. if p then q else FALSE negation p not p These operators apply to BOOLEAN operands and yield a BOOLEAN result The second operand of a disjunction is only evaluated if the result of the first is FALSE The second oprand of a conjunction is only evaluated if the result of the first is TRUE 8 2 2 Arithmetic operators sum difference j product real quotient DIV integer quotient MOD modulus The operators and apply to operands of numeric types The type of the result is REAL if the operation is a division or one of the operand types is a REAL Otherwise the result type is SHORT REAL if one of the operand types is SHORTREAL LONGINT if one of the operand types is LONGINT or INTEGER in any other case If the result of a real operation is too large to be represented as a real number it is changed to the predeclared value INF with the same sign as the original result Note that this also applies to 1 0 0 0 but not to 0 0 0 0 which has no defined result at all and leads to a run time error When used as monadic operators denotes sign inversion and denotes the identity operation The operators DIV and MOD apply to integer operands only They are related by the following formulas x x DIV y y x MOD y 0 lt x MOD y lt y or 0 gt xMODy gt y Note x DIV y ENTIER x y Examples x y x DIV y x MOD y 5 3 1 2 5 3 2 1 5 3 2 1 5 3 1 2 A Component Pascal Language Report Note
117. integer in the range 0 MAX SET and s of type SET v IS T stands for the dynamic type of v is T or an extension of T and is called a type test It is applicable if 1 v is an IN or VAR parameter of record type or v is a pointer to a record type and if 2 Tis an extension of the static type of v 391 A Component Pascal Language Report Examples of expressions refer to examples in Ch 7 1991 INTEGER iDIV3 INTEGER p OR q BOOLEAN i j i j INTEGER s 8 9 13 SET i x REAL ali j ali j REAL 0 lt i amp i lt 100 BOOLEAN tkey 0 BOOLEAN k IN i j 1 BOOLEAN w il name lt John BOOLEAN t IS CenterTree BOOLEAN 9 Statements Statements denote actions There are elementary and structured statements Elementary statements are not composed of any parts that are themselves statements They are the assignment the procedure call the return and the exit statement Structured statements are composed of parts that are themselves state ments They are used to express sequencing and conditional selective and repetitive execution A statement may also be empty in which case it denotes no action The empty statement is included in order to relax punctuation rules in statement sequences Statement Assignment ProcedureCall IfStatement CaseStatement WhileStatement RepeatStatement ForStatement LoopStatement WithStatement EXIT RETURN Expression 9 1 Assignments As
118. is then used to refer to the associated object The scope of an object x extends textually from the point of its declaration to the end of the block module procedure or record to which the declaration belongs and hence to which the object is local It excludes the scopes of equally named objects which are declared in nested blocks The scope rules are 1 No identifier may denote more than one object within a given scope i e no identifier may be declared twice in a block 2 An object may only be referenced within its scope 3 A declaration of a type T containing references to another type T1 may occur at a point where T1 is still unknown The declara tion of T1 must follow in the same block to which T is local 381 A Component Pascal Language Report 382 4 Identifiers denoting record fields see 6 3 or methods see 10 2 are valid in record designators only An identifier declared in a module block may be followed by an export mark or in its declaration to indicate that it is exported An identifier x exported by a module M may be used in other modules if they import M see Ch 11 The identifier is then denoted as M x in these modules and is called a qualified identifier Variables and record fields marked with in their dec laration are read only variables and fields or implement only methods in importing modules Qualident ident ident IdentDef ident wen n 1 The following ide
119. lligen Objekten zu pr fen 3 Dieses Copy kopiert seicht Original und Kopie zeigen auf die selbe Zeichenkette nderungen am Wert der Zeichenkette des Originals wirken sich auf die Zeichenkette der Kopie aus und umgekehrt F r tiefes Kopieren ersetzen wir target string source string durch NEW target string LEN source string 1 target string source string 4 Clone wird in jeder konkreten Erweiterung nur redefiniert um den Ergebnistyp kovariant an den Empfangertyp anzu passen Sein Anweisungsteil ist textuell immer gleich Es ruft Copy auf Die Semantik von Clone ob seicht oder tief ent spricht daher der von Copy 5 Erst wird gepr ft ob sich die Zeiger a string und b string auf dieselbe Zeichenkette beziehen sonst ob die beiden Zeichen ketten denselben Wert haben 353 12 Vom Entwerfen zum Testen Objekt bergreifende Invariante 12 1 8 Programm 12 5 Schnittstelle des Klassenmoduls f r Mengen geordneter Elemente 1 I 354 6 Die Vereinbarungen zum Testen hneln dem bei Programm 11 4 S 298 angewandten Muster Der Unterschied ist dass Do hier objekt bergreifende Invarianten pr ft Bei jedem Laden des Moduls wird ein Einzeltest ausgef hrt mit geringen Kosten aber einer Chance Fehler zu entdecken wenn ein Entwickler nach einer nderung vergessen hat das Modul erneut zu testen Implementieren der Mengenklasse Als konkrete Erweiterung der Konzeptklasse PartComp
120. modulares Programmieren passen gut zueinander Nebenbei haben wir auch Elemente der UML kennengelernt Literaturhinweise Die UML stammt von G Booch J Rumbaugh und I Jacobson die ihre fr heren Modellierungssprachen in die UML integrier 147 6 Vom Spezifizieren zum Implementieren 6 7 Aufgabe 6 1 EBNF Regeln Aufgabe 6 2 Programm transformation Aufgabe 6 3 Zugriff auf Reihungselemente 148 ten 2 Die Object Management Group OMG hat die UML Ver sion 1 1 1997 zum Standard erkl rt 50 Wir nehmen uns f r die ses Buch die Freiheit UML Elemente mit anderen zu mischen Zur UML gibt es ein gro es Angebot an Literatur stellvertre tend seien die B cher von M Fowler und K Scott 4 und B Oesterreich 25 genannt bungen Nach einer Aufgabe zur EBNF ben Sie die Transformation von Cleo Spezifikationen in Component Pascal Programme Component Pascal Kommentare k nnen ineinander geschach telt sein d h ist erlaubt Beschreiben Sie die Syntax dieser Kommentare mit EBNF und zwar 1 ohne Schachtelung 2 mit Schachtelung Bei den Aufgaben 2 1 bis 2 7 haben Sie Cleo Module spezifiziert Transformieren Sie diese in implementierte Component Pascal Module Mit der Vereinbarung VAR a ARRAY 10 OF CHAR welche der fol genden Bezeichner sind korrekt a 5 a 2 3 8 a ORD MAX SET a LEN a 1 Ein und Ausgabe In diesem Kapitel gestalten wir Benutzungsoberfl chen z
121. nur einen Melder fiir beide Felder statt je einen Der Melder pr ft die Felder auf verwendbare Werte Hat wenigstens ein Feld einen nicht verwendbaren Wert so setzt er das Feld Betrag auf 0 und aktualisiert den Zustand der anderen Felder dabei erh lt das Feld Preis seinen Wert von 11 Kaffeeautomat Preis PROCEDURE melden op from to INTEGER BEGIN IF Anzeige Preis lt 0 OR Anzeige Betrag lt 0 THEN Anzeige Betrag 0 Zustand_ bertragen END END melden Diese Prozedur ist in das Programm 7 5 aufzunehmen Die Fel der Betrag und Preis der Dialogbox sind mittels Inspekteur an die sen Melder zu binden siehe f nftes Feld in Bild 7 12 Bild 7 20 Meldende Dialogbox Dialogbox benutzen Fazit 7 5 Kaffeeautomat mit meldender Dialogbox Kaffeeautomat meldend BEE In der gerade ge ffneten Dialogbox Bild 7 20 sind neben den Kommandokn pfen auch die Betragfelder passiv Interaktion ist in diesem Zustand nur mit dem Feld Preis m glich und dort l sst sich nur eine positive Zahl eingeben Erst danach wird initia lisieren klickbar Nachdem initialisieren geklickt ist sind die Betrag felder aktiv Die zus tzlichen Prozeduren Programme 7 6 und 7 7 und die Dialogbox Bild 7 20 beseitigen mit wenig Aufwand die zu Beginn des Abschnitts kritisierten M ngel von Programm 7 5 Das Beispiel hat uns einen Eindruck davon vermittelt wie man grafische Benutzungsoberfl chen gestalten kann Die gezeigte Vorgehensweise
122. ren doch lassen sie sich g nstig iterativ definieren und bearbei ten Als passende Anweisung zum Durchlaufen einer Liste haben wir auf S 306 eine Bedingungsschleife erkannt Traversierung Da Bin rb ume zweidimensional sind eignen sich Schleifen schlecht zum Bearbeiten aller Knoten eines Baums Rekursion ist bei B umen praktisch unverzichtbar Wie n tzlich sie ist zeigt sich bei drei algorithmischen Mustern zum Durchlaufen Tra versieren eines Baums In den Bildern 11 12 11 13 und 11 14 zeigen die Zahlen jeweils die Reihenfolge in der die Knoten besucht werden Bild 11 12 Pr order Bild 11 13 Inorder Bild 11 14 Postorder 11 3 Mengenklasse f r Zeichenketten Pr order 1 Besuche die Wurzel des Baums 2 Durchlaufe den linken Teilbaum des Baums in Pr order 3 Durchlaufe den rechten Teilbaum des Baums in Pr order Inorder 1 Durchlaufe den linken Teilbaum des Baums in Inorder 2 Besuche die Wurzel des Baums 3 Durchlaufe den rechten Teilbaum des Baums in Inorder Postorder 1 Durchlaufe den linken Teilbaum des Baums in Postorder 2 Durchlaufe den rechten Teilbaum des Baums in Postorder 3 Besuche die Wurzel des Baums Diese Traversierungsmuster sind rekursive Algorithmen denn je zwei ihrer drei Schritte beziehen sich auf den Algorithmus selbst Da sie die Teilb ume als Ganzes durchlaufen bevor sie zum benachbarten Teilbaum bergehen geh ren sie zur Katego rie der Tiefen
123. ruft schlie lich den Kaffeeautomaten Der letzte Aufruf steht oben von unten nach oben liest sich die Aufrufkette Dialog Call gt StdInterpreter Call StdInterpreter Command Stdlnterpreter CallProc 1Kaffeeautomat Kaffee_ausgeben Unter einem Aufruf stehen die lokalen Variablen der Prozedur Was das Trapfenster zeigt nennt man Aufrufkeller call stack Exkurs Das Fenster in Bild 7 4 erh lt man nicht nur ber die Raute im Trapfenster sondern jederzeit mit dem Men befehl Info Global Variables wobei ein Modulname selektiert sein muss BlackBox lasst den Ent wickler also in geladene Module hinein schauen Der in einem Varia bles Fenster gezeigte Zustand eines Moduls wird nach einer Benutzung des Moduls nicht automatisch aktualisiert sondern erst durch Klicken auf Update Variables und Trapfenster stellen zusammen den Zustand einer Kommandoausf hrung zum Trapzeitpunkt dar Kaffeeautomat mit einfacher Ein Ausgabe Wir haben bereits in Abschnitt 1 4 den Unterschied zwischen Benutzer und Kunde diskutiert Jetzt greifen wir den Entwurf von Bild 1 9 S 14 auf und modellieren den Kaffeeautomaten mit zwei Modulen Das schon implementierte Modul I1Kaffeeautomat realisiert die Funktion eines Kaffeeautomaten und dient als Lieferant Leitlinie 7 4 Trennung von Funktion und Ein Ausgabe Bild 7 5 Kommandomodul und Funktionsmodul 7 2 Kaffeeautomat mit einfacher Ein Ausgabe Ein noch zu implementierendess Komma
124. sequences of characters enclosed in single or double quote marks The opening quote must be the same as the closing quote and must not occur within the string The number of characters in a string is called its length A string of length 1 can be used wherever a character constant is allowed and vice versa A Component Pascal Language Report string PR char t hare Examples Component Pascal Don t worry y 5 Operators and delimiters are the special characters character pairs or reserved words listed below The reserved words con sist exclusively of capital letters and cannot be used as identifi ers po tz ABSTRACT EXTENSIBLE POINTER A ARRAY FOR PROCEDURE a BEGIN IF RECORD I BY IMPORT REPEAT lt CASE IN RETURN amp gt CLOSE IS THEN lt CONST LIMITED TO gt DIV LOOP TYPE DO MOD UNTIL ELSE MODULE VAR ELSIF NIL WHILE EMPTY OF WITH Do o END OR EXIT OUT 6 Comments may be inserted between any two symbols in a pro gram They are arbitrary character sequences opened by the bracket and closed by Comments may be nested They do not affect the meaning of a program 4 Declarations and Scope Rules Every identifier occurring in a program must be introduced by a declaration unless it is a predeclared identifier Declarations also specify certain permanent properties of an object such as whether it is a constant a type a variable or a procedure The identifier
125. types and Ta is an extension of Tf Expression compatible For a given operator the types of its operands are expression com patible if they conform to the following table The first matching line gives the correct result type Type T1 must be an extension of type TO 407 A Component Pascal Language Report operator first operand DIVMOD lt INTEGER integer type integer type lt SHORTREAL numeric type SET Shortstring string type OR amp BOOLEAN lt lt gt gt numeric type character type string type BOOLEAN SET pointer type TO or T1 NIL procedure type T NIL IN integer type 0 MAX SET IS TO second operand lt INTEGER integer type integer type lt SHORTREAL numeric type SET Shortstring string type BOOLEAN numeric type character type string type BOOLEAN SET pointer type TO or T1 NIL procedure type T NIL SET type T1 result type INTEGER LONGINT REAL SHORTREAL REAL SET Shortstring String BOOLEAN BOOLEAN BOOLEAN BOOLEAN BOOLEAN BOOLEAN BOOLEAN BOOLEAN BOOLEAN BOOLEAN Constant expressions are calculated at compile time with maxi mum precision LONGINT for integer types REAL for real types and the result is handled like a numeric literal of the same value If a real constant x with x lt MAX SHORTREAL or x INF is combined with a nonconstant operand of type SHORTREAL the constant is considered a S
126. typisiert 2 1 2 2 1 Exemplar und Typ wir modellieren es als boolesche Gr e mit den m glichen Werten FALSE und TRUE au er _Betrieb BOOLEAN Betr ge und Preis werden zu ganzen Zahlen mit den m gli chen Werten 2 1 0 1 2 eingenommener_Betrag INTEGER Preis INTEGER gesammelter_Betrag INTEGER Die W hrungseinheit lassen wir weg das Modul soll ohne Komma in Hundertstel Euro rechnen 2 Parameter stehen fiir zu tibergebende Werte Also versehen wir auch die Namen der Parameter mit Typangaben Nur zwei Aktionen haben Parameter Betrag und neuer_Preis werden zu ganzen Zahlen Geld_einnehmen IN Betrag INTEGER initialisieren IN neuer_Preis INTEGER Um bei Parametern die Richtung der bergabe festzulegen ist zus tzlich die Parameterart anzugeben Das IN zeigt an dass Betrag und neuer_Preis Eingabeparameter vom Kunden zum Dienst sind Kunden m ssen Parameter ihrer Art und ihrem Typ entsprechend versorgen siehe Abschnitt 2 2 Damit haben wir das Programm 1 1 S 4 in eine Variante mit typisierten Gr en transformiert MODULE Kaffeeautomat QUERIES auBer_Betrieb BOOLEAN eingenommener_Betrag INTEGER Preis INTEGER gesammelter_Betrag INTEGER ACTIONS Geld_einnehmen IN Betrag INTEGER Kaffee_ausgeben Geld_zur ckgeben initialisieren IN neuer_Preis INTEGER END Kaffeeautomat Ein Schalter Das Schalter Programm 1 2 S 6 zu typisieren ist denkbar ein fach Paramet
127. und durch iterative Algorithmen zu ersetzen Implementieren Sie die Abfrage Has des Baums in Containers SetsOfString mit einem rekursiven Algorithmus Implementieren Sie die Baumprozeduren Put und Remove und MoveMin in ContainersSetsOfString mit iterativen Algorithmen Erg nzen Sie die in Programm 11 7 fehlenden Implementationen der Mengenoperationen SetUnion und Setintersection Erweitern Sie die Klasse ContainersSetsOfString Set um die Abfrage PROCEDURE IN set SetDesc Count INTEGER NEW die die Anzahl der Elemente in set liefert Voraussetzung 12 1 Wieder verwendbarkeit 12 1 1 Formel 12 1 Vollstandige Ordnung Generizitat Polymorphie Vom Entwerfen zum Testen Wir verallgemeinern die im vorigen Kapitel implementierte Mengenklasse und das Testverfahren dazu danach ffnen wir bereits benutzte Ein Ausgabemodule Dabei sto en wir auf oft wiederkehrende Strukturen die Entwurfsmustern folgen Der Leser ist mit den mathematischen Begriffen Ordnungsrela tion partielle und vollst ndige Ordnung vertraut Polymorphe Mengenklasse f r geordnete Elemente Das zur Rechtschreibpr fung entwickelte Mengenklassenmodul generalisieren wir um es als Komponente zur L sung zuk nfti ger Aufgaben wiederverwenden zu k nnen Abstrahieren von den Elementen Die Mengenklasse ContainersSetsOfString Set legt den Typ der Men genelemente fest auf Zeichenketten mit Referenzsemantik Doch die einzigen E
128. und steht vor dem Vereinbarungsteil MODULE ClientOfClock IMPORT Clock Clock Set 12 30 END ClientOfClock Benutzte Merkmalnamen sind mit dem Lieferantennamen zu qualifizieren Die Punktnotation kennen wir von Cleo Derart qualifizierte Namen k nnen lang werden Lange Namen k n nen st ren wenn sie oft vorkommen Als Abhilfe kann man im IMPORT Konstrukt eine Abk rzung f r einen Lieferantennamen einf hren 77 4 Programmiersprachen Bild 4 9 Schnittstelle und Implementationen 78 MODULE ClientOfQueue IMPORT Queue ContainersTraversableQueueOfltemImplementedByList Queue Put item END ClientOfQueue Die Abk rzung ist ein Aliasname der nur lokal in dem definie renden Modul gilt im Beispiel kennt nur ClientOfQueue die Abk rzung Queue Die Importliste dokumentiert f r den Leser an einer Stelle von welchen anderen Modulen das Modul abh ngt Sie vereinbart die Namen mit denen das Modul seine Lieferanten benutzt Diese Namen sind nicht f r Merkmale des Moduls verwendbar Der Import bezieht sich nur auf die Schnittstelle eines Lieferan ten nicht seine Implementation Zu einer vorgegebenen Schnitt stelle kann es mehrere Module mit verschiedenen Implementa tionen aber der gleichen Schnittstelle geben siehe Bild 4 9 Schnittstelle Ts Modul ae g s He 2 2 Modul oe Mes oh ER Ar Re Implementation l m Implementation In solchen Fallen ist das IMPORT Konstru
129. used to express specific associations of operators and operands 8 1 Operands With the exception of set constructors and literal constants numbers character constants or strings operands are denoted by designators A designator consists of an identifier referring to a constant variable or procedure This identifier may possibly be qualified by a module identifier see Ch 4 and 11 and may be followed by selectors if the designated object is an element of a structure Designator Qualident ident ExpressionList Qualident ActualParameters ExpressionList Expression Expression ActualParameters ExpressionList If a designates an array then afe denotes that element of a whose index is the current value of the expression e The type of e must be an integer type A designator of the form ale e1 en stands for afeO e1 en If r designates a record then rf denotes the field f of r or the method f of the dynamic type of r Ch 10 2 If aor rare read only then also afe and rf are read only If p designates a pointer p denotes the variable which is refer enced by p The designators p f p e and p may be abbreviated as p f pje and p i e record array and string selectors imply dereferencing Dereferencing is also implied if a pointer is assigned to a variable of a record or array type Ch 9 1 if a pointer is used as actual parameter for a
130. von mehreren Programmen gebrauchte Module nur ein mal im Speicher liegen Diesen Ansatz bietet Component Pascal Vollst ndigkeit zur Laufzeit bedeutet dass ein gebrauchtes Modul erst dann geladen wird wenn es in einem Programm ablauf tats chlich gebraucht wird Dies ist der flexibelste allerdings auch aufw ndigste Ansatz Component Pascal bietet auch diesen Fehlerarten und Sicherheit Das Kapitel schlie t mit Bemerkungen zur Klassifikation von Fehlern die beim Programmieren auftreten und zu verschiede nen Aspekten der Sicherheit von Programmiersprachen Ein syntaktisch fehlerhaftes Programm geh rt nicht zur Sprache ist nicht bersetzbar und daher nicht ablauff hig Ein syntaktisch korrektes Programm kann semantische Feh ler enthalten Der bersetzer erkennt syntaktische und semantische Fehler bersetzungszeitfehler Auch Binder und Lader k nnen Fehler entdecken Ein semantisch korrektes Programm kann Laufzeitfehler enthalten Laufzeitfehler werden von der Sprachumgebung vom Betriebssystem oder nicht erkannt Ein semantisch korrektes fehlerfrei laufendes Programm kann praktisch sinnlos sein Je fr her ein Fehler erkannt wird umso besser Ein Syntaxfehler richtet keinen Schaden an und ist schnell repariert Ein Laufzeit fehler kann katastrophal wirken und schwer zu finden sein Die Sicherheit einer Programmiersprache ist besonders wichtig bei Software f r kritische Anwendungen z B in der Medizin 83
131. zu einem funktionst ch tigen Produkt aus Beim Modell der nahtlosen Softwareentwicklung seamless soft ware development ist der Entwicklungsprozess iterativ und reversibel Die Ebenen gehen ineinander ber man wechselt zwischen ihnen hin und her und man kann Entscheidungen leicht revidieren Was man dabei produziert ist jedoch klar umrissen Man arbeitet entweder an der Zerlegung an der Spe zifikation am Entwurf oder an der Implementation Der Ansatz orientiert sich nicht an T tigkeiten sondern an Ergebnissen So unterscheidet er sich von unprofessionellem Vorgehen bei dem man auf Zerlegung Spezifikation und Entwurf verzichtet und blo an der Implementation herumbastelt Neu zu durchdenken sind diese Ans tze f r die komponenten orientierte Softwareentwicklung Sie zielt nicht auf vollst n dige L sungen abgeschlossener Aufgaben sondern auf wieder verwendbare Komponenten die unabh ngig voneinander erstellt und andernorts von anderen Menschen zu Anwen dungssystemen kombiniert werden Komponenten m ssen in allen Systemen in denen sie eingesetzt werden zuverl ssig funktionieren und ihre Funktionalit t muss stabil bleiben Umgekehrt ist beim Entwickeln eines Systems einzuplanen wie welche existierenden Komponenten zu nutzen sind Dieses einf hrende Lehrbuch bietet kein ausgefeiltes Software entwicklungsmodell orientiert sich aber an den genannten Ans tzen Anforderungen und Aufgaben sind stets vorgegeben Anforder
132. zweiten Schritt zu verfeinern Eingabe Das Eingabemodul Utilitiesin ist etwas m chtiger als das Stan dardmodul In was hier aber keine Rolle spielt da der Eingabe text zeichenweise zu lesen ist Tabelle 8 1 stellt die hier von Utili tiesin gebrauchten Merkmale neben bekannte Merkmale von In Zu beachten ist dass Utilitiesin failed den Misserfolg vorherigen Lesens anzeigt w hrend In Done den Erfolg anzeigt UtilitiesIn failed BOOLEAN Done BOOLEAN Open Open ReadRawChar OUT x CHAR Char VAR ch CHAR Mit dem Aliasnamen In Utilitiesin hnelt der Algorithmus dem der vorigen Aufgabe siehe S 189 In ReadRawChar c WHILE In failed DO INC frequency ORD c In ReadRawChar c END Es folgt dem allgemeinen Muster zum sequenziellen Einlesen und Verarbeiten einzelner Zeichen lies erstes Zeichen WHILE letzte Leseoperation war erfolgreich DO verarbeite zuletzt gelesenes Zeichen lies nachstes Zeichen END Bei diesem Muster kommt im Schleifenrumpf das Verarbeiten statisch vor dem Einlesen w hrend die dynamische Reihenfolge f r dasselbe Zeichen umgekehrt ist Deshalb ist ja das erste Zei chen vor der Schleife zu lesen Wem das missf llt der kann ein anderes Schleifenkonstrukt w hlen LOOP lies n chstes Zeichen IF letzte Leseoperation war erfolglos THEN EXIT END verarbeite zuletzt gelesenes Zeichen END Semantik Entwurf 2 des Eingabeschritts 82 Zeichen z hlen Die LOOP S
133. 0 184 Kommandooberfl che 110 Kommentar 112 118 122 148 223 428 Gliederungskommentar 117 197 Kommutativit t 218 219 Kompatibilit t 109 268 Kompilation 100 101 Kompilierer 101 bersetzer Komplexit t 5 43 44 223 225 227 228 Komplexit tsanalyse 228 Komponente 10 11 43 49 88 89 110 240 269 anpassbare 285 atomare 248 Beh lterkomponente 304 erweiterbare 285 Grundkomponente 88 Hardwarekomponente 295 minimale 88 Standardkomponente 88 Komponentenorientierung 240 259 Komposition 145 146 261 296 302 303 305 Konjunktion 17 30 31 58 218 219 232 Konkretion 41 42 188 252 273 Konstante 45 75 76 113 114 141 142 144 147 161 240 297 literale 121 127 141 symbolische 121 141 283 296 Konstrukt einer Sprache 58 59 84 Kontrollkonstrukt Austrittsstelle 203 Eintrittsstelle 203 Ende 203 Schleifenkonstrukt 202 Kontext 52 203 Konvertierung 60 Typkonvertierung 168 Konzept 38 337 339 mathematisches 339 objektorientiertes 249 342 Testkonzept 362 Kopieren 176 208 335 338 339 seichtes 325 326 353 361 tiefes 326 353 361 Korrektheit 48 130 139 143 153 191 210 220 222 295 327 einer Schleife 222 Kovarianz 258 352 Kunde 2 6 8 10 12 15 19 21 25 26 28 30 34 37 77 79 86 105 109 110 112 114 118 119 133 134 139 142 143 146 151 153 175 195 196 207 215 229 233 234 243 245 255 260 261 264 265 267
134. 01 303 H he eines Baums 317 333 Hypertextsystem 93 Hyperverbindung 92 93 97 98 104 119 150 172 I identifier Name IF 77 156 157 166 192 194 220 279 297 306 307 Implementation 9 10 12 15 21 32 34 43 45 49 74 88 109 111 116 127 138 142 147 154 157 176 178 181 198 199 201 214 219 226 229 233 235 237 241 243 244 255 259 261 263 267 269 270 280 288 290 293 294 296 298 301 302 308 312 320 322 325 327 333 335 366 370 372 374 376 einer Abfrage 126 einer Klasse 238 einer Prozedur 269 eines Moduls 9 139 238 generische 235 335 partielle 215 337 vollst ndige 338 Implementationssprache 45 51 56 62 74 111 126 207 236 342 Implementierung 11 41 45 46 50 61 62 106 111 147 249 260 287 288 294 301 302 312 316 317 320 325 342 Implementierungszyklus 107 IMPLIES 18 Implikation 17 219 232 implizit 34 69 75 175 176 193 245 277 279 IMPORT 77 78 207 Import 77 Importliste 77 78 107 IN 19 23 138 INC 129 INCL 138 Index 136 138 140 199 201 206 209 211 213 214 222 300 Indexberechnung 137 Indizierung 136 147 277 Informatik 85 375 inherit Erben Initialisierung 2 30 80 119 130 169 172 175 195 202 208 214 226 248 276 300 341 353 361 366 376 Defaultinitialisierung 130 245 284 einer Schleife 189 199 214 eines Objekts 245 300 explizite 130 131 implizite 130 131 134 275 In
135. 0H Stdinterpreter caliProc 00000385H a BOOLEAN BOOLEAN E BOOLEAN ok BOOLEAN paType INTEGER Stilnterpreier command OODDIECAH ptype INTEGER Stdinterpreter call OOODOFF IH ch CHER i INTEGER ID INTEGER i INTEGER res INTEGER type INTEGER x INTEGER Ceglog cal j00001A24H An den ersten beiden Zeilen erkennen wir dass eine Vorbedin gung in Kaffee_ausgeben verletzt ist 20 ist die Fehlernummer Die blauen Rauten sind klickbare Hyperverbindungen Durch Anklicken der Raute rechts oben ffnet sich ein Fenster mit dem Quellmodul wobei die Trapstelle markiert ist a 11 Katfeeautomat PROCEDURE Katfee_ausgeben BEGIN ASSERT eaingenammener_Betrag gt Preis BEC precondition DES eingenormener_Betrag Preis NC gesammelter_Beirag Preis heckimwariar ts ASSERT gesammelter_Betrag gt 0 BEC posteondteon END Maffee_ausgeben Ej Der Kaffeeautomat ist au er Betrieb Anklicken der Raute links oben in Bild 7 2 liefert ein Fenster mit den globalen Variablen des geladenen Moduls I1Kaffeeautomat Bild 7 4 Zustand globaler Variablen zum Trapzeitpunkt Leitlinie 7 1 Robustheit Leitlinie 7 2 Vorbedingungen und Benutzereingaben Leitlinie 7 3 Zweck von Vorbedingungen 7 1 Kaffeeautomat als Kommandomodul Variables 11 Kaffesautornat Opdal g Freis INTEGER D au er Betrieb BOOLEAN TRUE angenammener_Beirag IMTEGER T gesammelter_Beirag INTEG
136. 0s0s02enueianlaien 16 Aufgabe 2 1 Geldeingabe n 22 een 39 Aufgabe 2 2 G ldr ckgabens fice aan 39 Aufgabe 2 3 Kaffeesorte und Zutaten ccccccecccccseceescssssssesessssscessssesssseses 39 Aufgabe 2 4 Zigarettenautomat unennenneemennnnenenennen 39 Aufgabe 2 5 DAVEE a 1S ses 39 Aufgabe 2 6 1 U E ER AES A NA AE EE AES T PE AEEA 39 Aufgabe 2 7 D tum 2 22 aE Or a d an 39 Aufgabe 2 8 Kreis u aan a a e a net 40 Aufgabe 2 9 Widerstandsschaltung neeeeenesnnneeeneen 40 xxvii Aufgabenverzeichnis 25 2 05 Aufgabe 2 10 Getriebeschaltung eennnnnnenenenenenenenananan 40 Aufgabe 4 1 Syntaxdiagramme uueennesennnenenemsnnnsen 85 Aufgabe 4 2 EBNF Regeli 2 2 22 Annan 86 Aufgabe 4 3 Ableitungsvorschriften uuuneesssnnnesenenenenenenenen nenn 86 Aufgabe 4 4 Ableitungen en eier 86 Aufgabe 4 5 Syntax V n Cledan seen ick 86 Aufgabe 6 1 EBNF Regeln 2 2222 0 2222er 148 Aufgabe 6 2 Programmtransformation AIRTER TIE ATERSE 148 Aufgabe 6 3 Zugriff auf Reihungselemente neneeeemeen 148 Aufgabe 7 1 Angepasste Oberfl che uuneesssenesnnnnnenenen nen 185 Aufgabe 7 2 Benutzb rkeit iu a dec ex sable lactate tpt ewes 185 Aufgabe 7 3 Korrekte Geldeinnahme ccccccccccccssceesssssessccessssecesessesseeess 186 Aufgabe 7 4 Zwei Di logb xet neee n an 186 Aufgabe 7 5 Kaffeesorte und Zutaten ccccccccccccssscccssssssesssc
137. 1 gen gt wegen sizeOfCHARset MOD sizeOfSET 0 die Variablenver einbarung VAR set ARRAY sizeOfCHARset DIV sizeOfSET OF SET Beim Zugriff ist die Ordnungszahl eines Zeichens x CHAR umzurechnen in den Index einer SET Menge ORD x DIV sizeOfSET und ein Element dieser SET Menge ORD x MOD sizeOfSET Die Implementation des Zeichenmengenmoduls ist damit MODULE ContainersSetOfChar IMPORT BEC BasisErrorConstants CONST sizeOfCHARset ORD MAX CHAR ORD MIN CHAR 1 sizeOfSET MAX SET MIN SET 1 Initialisierungsteil Fazit 6 3 5 4 6 3 Von Cleo zu Component Pascal Schritt 3 VAR set ARRAY sizeOfCHARset DIV sizeOfSET OF SET PROCEDURE Has x CHAR BOOLEAN BEGIN RETURN ORD x MOD sizeOfSET IN set ORD x DIV sizeOfSET END Has PROCEDURE Put x CHAR BEGIN INCL set ORD x DIV sizeOfSET ORD x MOD sizeOfSET ASSERT Has x BEC postcondSupplierOk END Put PROCEDURE Remove x CHAR BEGIN EXCL set ORD x DIV sizeOfSET ORD x MOD sizeOfSET ASSERT Has x BEC postcondSupplierOk END Remove BEGIN ASSERT ORD MIN CHAR 0 BEC invariantModulelmpl ASSERT sizeOfCHARset MOD sizeOfSET 0 BEC invariantModulelmpl END ContainersSetOfChar Nach dem Laden werden alle Elemente von set mit der leeren Menge initialisiert d h die Zeichenmenge ist anfangs leer Die Bedingungen ORD MIN CHAR 0 und sizeOfCHARset MOD sizeOfS
138. 126 144 145 147 148 165 175 197 198 206 218 219 229 235 236 239 241 244 245 264 267 288 289 314 client Kunde client supplier relation Beziehung Benutzungsbe ziehung Code 60 213 224 ASCII Code 66 geladener 238 Maschinencode Objektcode Objektcode 56 61 62 81 84 90 97 100 102 106 108 110 118 119 293 Quellcode 56 Unicode 66 67 Zeichencode 60 Codeerzeugung 112 194 Codeexpansion 120 129 Codierung Implementierung Bin rcodierung 53 60 commander Symbol Aufrufsymbol compatible Typvertr glichkeit compiler Kompilierer bersetzer Component Pascal 39 45 51 58 66 67 73 75 77 79 80 83 85 87 99 101 103 110 117 119 120 122 124 126 131 135 138 140 143 145 147 148 163 165 169 174 175 187 193 198 200 206 207 217 219 229 236 239 241 244 246 248 249 259 262 264 267 268 275 278 289 294 297 298 322 335 342 352 Language Report 73 75 93 computer Rechner CONST 75 112 113 138 container Beh lter contract Vertrag controller Interaktor control variable Variable Z hlvariable D dangling reference Bezug h ngender Darstellung 45 52 codierte 60 einer Zahl 135 grafische 3 7 44 hexadezimale 70 135 im Rechner 57 61 Datei 62 90 91 96 97 99 107 108 172 293 364 ASCII Textdatei 93 Dokumentationsdatei 91 95 96 Objektcodedatei 91 92 107 109 117
139. 219 Tabelle 8 5 Vergleich der Suchalgorithmen uenneeeenne 225 Tabelle 10 1 Transformationsregeln von der EBNF zum Algorithmus 271 xxxix Tabellenverzeichnis xl 25 2 05 Tabelle 11 1 Menge und Baum ssop E 318 Tabelle 12 1 Beispiele zu Regeln als Axiome und objekt bergreifende Inyarianten ereere ecann aerae skhnlass 339 1 1 Bild 1 1 Physisches Modell des Kaffeeautomaten Einfuhrung Wir wollen lernen Software zu entwickeln Software ist ein von Menschen geschaffenes ideelles Gebilde in dem sich Dinge Sachverhalte Systeme widerspiegeln Software konstruieren bedeutet Vorgegebenes modellieren Ein Modell stellt die als wesentlich erachteten Elemente Beziehungen Merkmale eines Sachverhalts dar und abstrahiert von unwesentlichen Details Ein Kaffeeautomat Bevor wir mit der Arbeit beginnen st rken wir uns mit einer Tasse Kaffee die wir von einem Automaten holen Wir pr fen ob der Automat betriebsbereit ist werfen einige M nzen ein und erhalten eine Tasse mit dem hei en beliebten Getr nk Kaffeeautomat eingenommener Geld Betrag EUR Geld einnehmen i schlitz Preis EUR Kaffee ausgeben au er Betrieb Geld zur ckgeben gesammelter Te Betrag EUR initialisieren Bild 1 1 zeigt ein physisches Modell des Kaffeeautomaten Er ist ein gegen ber seiner Umgebung klar abgrenzbares Ger t mit einer Benutzungsoberflache aus Anzeigen Druckkn pfen und Geldschlitz Wir spielen die Rolle eines Benutze
140. 284 285 290 303 321 327 337 355 365 366 369 374 L Laden 61 62 108 bei Bedarf 80 83 84 dynamisches 80 84 107 172 240 259 eines Moduls 104 109 119 130 131 134 137 139 151 245 275 304 354 im Voraus 81 Lader 62 83 88 89 101 106 109 110 Ladezeit 62 83 105 Lager 96 98 110 118 L nge einer Liste 312 einer Reihung 135 136 164 216 218 224 227 276 einer Zeichenkette 70 353 language Sprache Laufzeit 62 80 83 114 128 136 139 218 238 239 269 279 294 302 304 312 353 362 Laufzeitinformation 126 152 295 Laufzeitumgebung 88 Layout Defaultlayout 169 170 einer Dialogbox 169 171 173 364 Layoutmodus 170 171 180 C Sachwortverzeichnis leaf Blatt Lehrbarkeit 58 Leistungsmerkmal Qualit tsmerkmal LEN 135 Lesbarkeit 22 30 49 58 141 197 201 348 Lesen 189 192 sequenzielles 157 lexikalisch 66 library Bibliothek Lieferant 2 4 6 8 10 12 15 20 21 29 30 33 37 77 79 80 107 109 118 142 146 151 152 207 215 260 261 265 285 302 privater 317 LIMITED 355 Lineal 204 368 369 linker Binder Liste 287 302 304 307 312 314 324 376 leere 304 verkettete 304 312 333 334 Literal 70 71 loader Lader Logik 18 Aussagenlogik 17 32 197 218 Pr dikatenlogik 187 197 198 Lokalit t 283 LONGINT 140 LOOP 202 203 L cke semantische 56 M chtigkeit einer Sprache 342 eines Sprachkonstrukts 194 ma
141. 293 Maschinenzustand 133 Nachzustand 7 231 232 Startzustand 232 Vorzustand 7 231 232 Zustandsdiagramm 7 8 15 33 45 231 233 Zustands bergang 7 231 232 Zustands bergangsdiagramm Zustandsdiagramm Zuverl ssigkeit 42 43 47 143 362 Zuweisung 45 60 76 114 127 132 136 137 147 162 165 175 176 181 210 213 214 223 225 268 275 277 278 290 325 367 einer Reihung 208 eines Objekts 355
142. 3 Mengenklasse f r Zeichenketten PROCEDURE IN set SetDesc ForAllDo VAR action ActionDesc NEW BEGIN ForAllDo set root action set CheckInvariants END ForAllDo Zum Vertrag der Menge geh rt dass ihre Prozeduren die Invari ante der Menge erhalten Die Mengenprozeduren pr fen des halb die Mengeninvariante am Ende ihres Anweisungsteils mit set ChecklInvariants Eine Implementationsinvariante der Menge ist die Invariante des geordneten Baums und diese ist die Ordnung der gespei cherten Elemente siehe S 316 Problematisch an ForAllDo ist dass es die Bauminvariante st ren kann wenn das Do des aktuellen Parameters action Werte der Ele mente ver ndert die f r ihre Ordnung im Baum wichtig sind Verletzt ForAllDo die Invariante so ist allerdings der Kunde der Menge schuld nicht die Menge Der Kunde der ActionDesc erweitert ist verantwortlich daf r dass das von ihm definierte Do nicht in die Ordnung der Elemente eingreift Als drittes betrachten wir die private Invariantenprozedur die die Ordnung im Baum pr ft Die Baumprozedur Checklnvariants darf nichts am Baum ver ndern Ihre lokale gew hnliche Proze dur Inorder die den Baum in Inorder traversiert und so rekursiv pr ft setzt nur lokale Variable von Checklnvariants Jedes Element ist mit dem Element des zuvor besuchten Knotens zu verglei chen das sich Inorder in der Variable item merkt Den Sonderfall des kleinsten in Inorder zuerst besuchten Elem
143. 3 neuen Merkmale CLASS Set QUERIES IsEmpty BOOLEAN IsDisjoint IN b Set BOOLEAN ACTIONS SetUnion IN b c Set POST OLD b IsEmpty AND OLD c IsEmpty IMPLIES a lsEmpty a lsDisjoint OLD b IMPLIES OLD b IsEmpty a lsDisjoint OLD c IMPLIES OLD c IsEmpty SetDifference IN b c Set POST a lsDisjoint OLD c OLD b IsEmpty IMPLIES a lsEmpty Alias Von Cleo zu Component Pascal Programm 11 2 Schnittstelle des Mengenklassen moduls 11 1 Pr fling Testmodul und Testwerkzeug SetIntersection IN b c Set POST OLD b IsEmpty IMPLIES a lsEmpty OLD c IsEmpty IMPLIES a lsEmpty OLD b IsDisjoint OLD c IMPLIES a lsEmpty a lsDisjoint OLD b IMPLIES a IsEmpty a lsDisjoint OLD c IMPLIES a lsEmpty SetDifference IN b c Set POST OLD b IsEmpty AND OLD c IsEmpty IMPLIES a lsEmpty a IsDisjoint OLD b AND OLD c IsEmpty IMPLIES OLD b IsEmpty a IsDisjoint OLD c AND OLD b IsEmpty IMPLIES OLD c IsEmpty END Set Die Nachbedingungen setzen voraus dass das Empf ngerobjekt den Namen a hat Die OLD Ausdr cke sind notwendig weil sich Empf nger und Parameter auf dasselbe Objekt beziehen k n nen denn da wir Referenzsemantik voraussetzen sind Aliassi tuationen m glich Beispielsweise ver ndert der Aufruf x SetUnion x y das aktuelle x Objekt auf den sich der Empf nger a und der for male Parameter b beziehen Die Aufgabe die Cleo Spezifikation in ein
144. 32 35 38 41 46 48 51 61 62 82 106 111 117 119 126 139 142 144 146 148 162 197 198 206 211 229 232 233 235 236 249 253 257 288 293 340 durch Vertrag 30 32 34 37 39 44 46 111 119 124 147 151 177 185 197 206 226 231 233 287 293 296 334 exakte 126 formale 34 198 generische 206 207 335 partielle unvollst ndige pr dikatenlogische 226 semantische 111 syntaktische 111 117 unvollst ndige 28 32 34 288 296 verbale 197 vollst ndige 32 34 198 Spezifikationssprache 44 51 111 C Sachwortverzeichnis 126 236 Sprache 5 6 15 51 56 72 Implementationssprache Programmiersprache Spezifikationssprache Assemblersprache 56 60 Entwurfssprache 51 formale 51 52 64 65 67 270 Kommandosprache 102 103 110 Maschinensprache 42 54 56 Modellierungssprache 147 regul re 232 270 Zielsprache 126 Sprachumgebung 62 83 87 88 110 157 214 224 Spur 211 227 Stabilit t 43 44 362 state Zustand state chart Zustandsdiagramm statement Anweisung statisch 25 34 62 81 84 116 162 203 223 234 259 293 304 string Zeichenkette Struktur 9 44 47 59 74 75 146 205 239 293 304 312 313 325 Datenstruktur Objektstruktur algorithmische 187 225 Aufrufstruktur Benutzungsstruktur Benutzungsstruktur 44 234 265 287 Dateiverzeichnisstruktur 90 313 dynamische 268 eines Baums 322 324 32
145. 362 unqualifizierter 21 Variablenname 127 174 Verzeichnisname 91 Namengebung 5 21 91 92 174 Namenliste 114 Namenraum 120 169 Namenskonflikt 21 87 168 283 287 NATURAL 18 34 114 122 Nebenl ufigkeit 291 302 Negation 17 58 nesting Schachtelung NEW 267 276 277 305 353 Nichtterminal 64 66 68 72 86 99 233 270 271 NIL 275 278 280 node Knoten NOT 18 122 Notation 39 44 46 51 126 129 EBNF Notation 85 formale 3 C Sachwortverzeichnis funktionale 342 Operand 22 23 27 218 219 324 Infixnotation 342 325 342 mathematische 22 342 Operation 17 18 23 27 65 67 75 Punktnotation 77 101 244 84 137 138 142 147 158 342 165 206 218 219 221 243 Softwarenotation 22 275 277 293 313 325 326 textuelle 3 336 339 353 notifier arithmetische 18 140 Melder Baumoperation 324 333 Eingabeoperation 154 O elementare 224 225 Oberon 39 58 73 85 157 214 239 Erzeugungsoperation 238 Object Management Group 148 276 Objekt 17 36 38 92 93 98 100 exportierte 144 102 145 152 165 172 234 klassengebundene 342 236 244 251 258 262 264 Leseoperation 158 159 188 267 269 278 284 285 202 367 289 291 294 296 300 logische 17 18 307 313 316 326 336 341 L schoperation 279 349 355 365 367 369 374 Mengenoperation 138 262 aktives 110 288 296 318 334 339 Beh lterobjekt 172 relationale 18 dynamisches 376 Schreiboper
146. 4 138 198 264 333 337 354 355 361 376 einer Reihung 136 137 147 197 198 201 206 208 210 213 227 284 einer Sprache 58 59 einer Struktur 304 313 eines Baums 316 319 321 323 eines Beh lters 134 362 374 C Sachwortverzeichnis eines Modells 2 5 eines Verbunds 163 kleinstes 321 323 324 Steuerelement einer Dialog box 169 170 184 Empf nger 243 247 264 289 302 318 319 325 347 353 361 362 aktueller 244 namenloser 244 EMPTY 343 Entladen 107 Entladen eines Moduls 99 104 105 275 301 Entlader 110 Entwerfer 39 226 Entwickler 2 8 10 14 15 28 36 42 44 47 56 57 84 88 93 98 103 104 107 118 142 152 172 239 261 262 293 327 354 Entwicklerhandbuch 97 Entwicklungsumgebung 85 88 105 126 364 integrierte 88 95 komponentenorientierte 88 Entwurf 10 14 41 43 46 49 51 61 62 106 134 138 146 152 154 163 166 178 187 188 190 195 197 200 205 208 209 211 225 261 263 264 267 280 283 287 291 293 296 298 301 312 317 320 340 342 363 364 366 368 375 Zerlegung objektorientierter 261 342 Erben 254 255 268 285 Ergebnis 3 5 7 18 22 29 81 198 218 219 297 300 325 362 Erlernbarkeit 58 error Fehler Ersetzbarkeit 240 Ersetzungsschritt 69 Erweiterbarkeit 48 88 110 259 318 423 C Sachwortverzeichnis 424 Erweiterung 43 49 254 256 269 288 296 302 303 337 340 347 353 355 362 368 376 e
147. 5 335 vollst ndig geordneter 316 Wert bergabe 175 176 WHILE 77 189 190 192 195 209 210 234 286 306 307 Wiederholung 45 69 188 189 194 271 314 Anweisung Schleife eines EBNF Ausdrucks 65 Wiederverwendbarkeit 43 44 49 87 88 195 200 205 217 240 264 287 335 Wiederverwendung 10 49 WITH 353 Wort 52 64 65 68 72 82 241 272 leeres 65 Maschinenwort 54 reserviertes 71 Schl sselwort 3 30 36 58 71 72 77 99 112 115 116 118 164 235 243 245 Wortart 5 Wurzel 313 317 319 322 323 Z Zahl 18 53 60 70 135 190 192 206 ganze 18 201 297 Gleitpunktzahl 18 60 Komplexit tsma zahl 225 Ma zahl 223 224 nat rliche 18 34 negative 140 181 Ordnungszahl 60 70 135 138 205 zuf llige 297 Zahlbereich 193 194 Zahlensystem 60 Dualsystem Zahler 201 Zeichen 18 51 52 58 60 66 69 70 135 137 138 190 192 200 316 363 alphanumerisches 297 Escape 292 312 gr tes 191 C Sachwortverzeichnis Hochkomma 158 kleinstes 191 Leerzeichen 3 155 158 Pluszeichen 169 Punkt 22 99 Steuerzeichen 312 Tabulatorzeichen 158 204 214 Unicodezeichen 70 209 Unterstrich 3 Zeilenumbruchzeichen 158 159 214 zuf lliges 297 300 Zeichenfolge 51 52 59 60 112 363 Zeichenkette 51 70 88 158 164 312 316 Zeichenfolge leere 169 literale 169 zuf llige 353 376 Zeichensatz 51 60 66 Alphabet ASCH Zeichensat
148. 5 156 166 177 181 187 190 195 197 201 202 208 211 217 222 225 227 237 266 271 305 307 320 322 323 Ableitungsalgorithmus 69 iterativer 322 334 randomisierter 297 rekursiver 315 323 334 Sortieralgorithmus 227 strukturierter 199 Suchalgorithmus 223 225 227 Aliassituation 278 289 325 Alphabet 51 52 65 71 232 Alternative Auswahl AND 18 136 Anderbarkeit 44 48 49 139 141 143 283 Anforderung 43 48 58 139 151 153 163 173 Anker 304 307 326 Anpassbarkeit 48 139 Anpassung 255 269 362 kovariante 259 353 Antivalenz 17 Anweisung 22 45 59 75 76 80 101 102 114 116 119 127 128 130 156 157 166 168 189 190 192 193 203 222 224 227 245 271 295 311 314 326 Auswahlanweisung 77 157 177 220 297 298 307 353 bewachte 353 362 elementare 76 147 geschachtelte 220 initialisierende 189 Steueranweisung 203 strukturierte 76 181 224 Testanweisung 293 295 Wiederholungsanweisung 77 189 226 Anweisungsteil 116 121 123 127 131 141 154 161 270 279 321 325 341 353 Anwendbarkeit 7 58 Anwender 41 49 139 151 172 185 Anwendung 10 41 43 47 56 88 102 235 241 293 295 312 333 336 Anwendungsbereich 41 56 237 248 ANYREC 303 application Anwendung quivalenz 17 semantische 100 342 strukturelle 5 von Algorithmen 222 von booleschen Ausdr cken 218 219 255 von EBNF und Syntaxdia gramm 68 von Entw rfen 194
149. 53 255 259 260 265 267 284 290 301 303 336 337 347 363 364 allgemeine 258 Anwendungsklasse 338 Basisklasse 254 255 258 260 285 303 337 340 347 362 Beh lterklasse 362 elementspezifische 236 erweiterbare 290 338 Erweiterungsklasse 254 255 257 260 266 267 285 286 290 301 303 339 340 exportierte 317 Fabrikklasse 368 finale 355 fragile Basisklasse 362 Funktionsklasse 293 427 C Sachwortverzeichnis generische 235 236 262 Implementationsklasse 338 364 374 konkrete 254 257 259 265 284 301 303 338 340 341 374 Konzeptklasse 337 342 347 354 362 364 374 376 Kundenklasse 37 260 Lieferantenklasse 37 260 Mengenklasse 262 265 288 292 316 333 335 337 376 partiell implementierte 238 255 polymorphe 336 337 362 376 private 240 301 303 365 374 Schnittstellenklasse 337 338 374 spezielle 258 Zeichenkettenklasse 336 347 Klassendiagramm 145 252 253 257 296 366 368 Klassifikation 146 238 252 255 260 261 285 von Klassen 337 von Typen 221 Knoten 145 313 323 eines Baums 314 316 317 319 321 324 erreichbarer 313 314 Startknoten 313 314 Zielknoten 313 314 Kommando 13 62 81 101 103 106 149 151 154 156 161 166 168 172 177 178 180 182 187 195 200 225 226 261 263 285 286 292 293 303 Ausgabekommando 263 268 parameterloses 154 163 Testkommando 295 341 Kommandoknopf 169 173 178 18
150. 6 TextMappers TextMappers TextModels TextModels TextModels Cartier Model arue Tr ger bieten Fabrikfunktionen f r ihre Reiter Zu einem Tr ger objekt kann es mehrere Reiterobjekte geben von denen jedes seine eigene Position auf den Tr gerdaten hat Die Schnittstellen eines Tr ger Reiter Paars entkoppeln ihre Kunden von den potenziell vielen Tr ger Reiter Implementationen Abbilder bie ten anwendungsorientierte Schnittstellen Sie verbergen ihren Kunden ihren Reiter und seinen Tr ger Nur zum Initialisieren verkn pft sich ein Abbilderobjekt mit einem Tr gerobjekt Texteingabe BlackBox kombiniert das Model View Controller Muster von Bild 12 7 mit dem Carrier Rider Mapper Muster von Bild 12 10 zum Entwurf der Texteingabe TextMappers Scanner TextControllers Controller TextModels Reader TextModels TextViews Model Die statische Klassenstruktur erg nzen wir durch einen Schnappschuss einer dynamischen Objektstruktur mit typischen Objekten zu einem typischen Zeitpunkt 12 2 Entwurfsmuster Bild 12 12 Objektdiagramm zur Eingabe Weiterleitung scanner controller rider Scanner Vv Vv base text Reader Controller model Model Wie entsteht diese Objektstruktur Das Scanner Objekt und die Model und Controller Zeiger sind statisch vereinbart Die Focus A
151. 6 eines Modells 5 Entwurfsstruktur 129 318 Erweiterungsstruktur 265 Klassenstruktur 366 Klassifikationsstruktur 252 439 253 257 260 Listenstruktur 306 Organisationsstruktur 333 Programmstruktur 275 rekursive 314 Speicherstruktur von Daten 174 237 statische 268 318 366 syntaktische 274 Zerlegungsstruktur 46 Strukturgesetz 77 Strukturierungsmittel 260 261 Subsystem 87 92 96 97 110 112 118 121 134 171 287 Dienstesubsystem 287 Standardsubsystem 88 89 Subsystem bersicht 97 subtree Teilbaum Suchen 206 210 227 313 in Baum 322 333 in geordnetem Bin rbaum 317 in Liste 306 312 Sucher 95 Suchzeit 225 Suffix 242 supplier Lieferant Symbol 52 64 65 121 232 271 273 312 Nichtterminal Terminal Aufrufsymbol 92 102 104 149 154 155 172 173 185 Dereferenzierungssymbol 276 exportiertes 91 Gleichheitssymbol 129 Metasymbol 64 67 Operatorsymbol 342 Referenzierungssymbol 274 Startsymbol 64 67 69 72 271 Zeichenkettenendesymbol 284 C Sachwortverzeichnis Zuweisungssymbol 128 Symmetrie 339 Syntax 25 44 57 59 63 65 66 68 70 73 75 77 84 86 103 104 129 148 154 161 164 203 243 244 267 270 314 342 EBNF Syntax 99 104 Syntaxanalyse 270 284 285 Syntaxdiagramm 44 59 64 67 68 85 232 System 43 82 259 komponentenorientiertes 248 T Tabelle 200 204 Wertetabelle 218 Task 195 Tastatur 13 53 Tastatu
152. 7 182 183 197 199 204 217 222 223 243 244 263 264 267 271 274 280 285 286 303 319 327 334 352 Produkt 43 46 50 87 88 Programm 2 3 11 15 38 51 54 56 57 59 62 66 79 81 82 84 88 92 107 113 119 129 140 141 146 148 174 187 200 239 251 261 270 C Sachwortverzeichnis strukturiertes 45 77 199 203 227 284 Programmierer 130 131 163 177 181 183 191 207 220 245 279 293 342 Programmierkonvention 8 69 112 113 116 157 174 177 183 203 242 287 Programmiersprache 15 39 45 49 51 52 56 59 62 63 65 67 73 77 79 85 87 93 102 110 126 129 130 134 136 194 218 220 224 227 249 283 363 279 342 als statische Einheit 81 h here 42 56 61 84 Anwendungsprogramm 88 modulare 84 92 objektorientierte 240 259 Assemblerprogramm 56 279 363 aufrufbares 106 seiteneffektfreie 129 ausf hrbares 9 42 51 62 81 sichere 84 83 100 111 126 speichersichere 136 Component Pascal Pro Programmierstil 318 gramm 73 87 112 programming language Eintrittspunkt 81 82 Programmiersprache korrektes 48 Projektion 316 317 objektorientiertes 375 Prototyp 43 Quellprogramm 56 61 62 einer Benutzungsoberfl che 81 112 184 robustes 48 151 Prozedur 45 75 76 94 103 116 sicheres 220 118 119 122 130 137 144 Simulationsprogramm 13 152 158 161 166 168 174 syntaktisch fehlerhaftes 83 177 182 184 187 197 206 syn
153. 80 Testwerkzeugmodul Die Aufgabe dieses Abschnitts ist das in 11 1 2 spezifizierte Testwerkzeug zu implementieren Entwurf UtilitiesRepeater benutzt f r seine Implementation das Standard modul Services Das Entwurfsmuster an der Schnittstelle des Testwerkzeugs zum Testmodul das in Bild 11 2 dargestellt ist wiederholt sich an der Schnittstelle zwischen Services und Utilities Repeater UtilitiesRepeater 0 1 Services exportiert eine abstrakte Klasse Action mit Referenzse mantik und einer abstrakten Aktion Do Die Semantik dieses Do ist wieder nicht festgelegt es wird von Services nur ber eine polymorphe Gr e aufgerufen UtilitiesRepeater definiert eine pri vate konkrete Erweiterungsklasse Secretary von Services Action Secretary bernimmt Verwaltungsaufgaben die Services nicht bie tet um die Testmodule zu entlasten Secretary Objekte sind 301 11 Dynamische Objektstrukturen Komposition Weiterleitung Aggregation Lieferant Programm 11 5 Schnittstelle des Standardmoduls Services reduziert Semantik 302 komponiert aus einem UtilitiesRepeater Action Objekt und aggregiert aus einem Secretary Objekt Wir verwenden zwischen den Klassen Secretary und Action von Uti litiesRepeater Komposition nicht Erweiterung um die Erweite rungsklassen der Testmodule von Services Action zu entkoppeln Den Testmodulen bleibt verborgen dass Services an der Imple mentation von UtilitiesRepeater bete
154. 80 289 305 307 geklammerter 342 generischer 206 207 polymorpher 269 369 Referenzparameter 176 268 269 274 277 280 Reihungsparameter 217 218 Wertparameter 280 Zeigerparameter 276 320 324 Parameterart 19 21 24 25 116 117 158 175 223 233 243 267 Parameter bergabe 23 24 27 137 165 175 216 268 275 277 278 polymorphe 269 301 Parameter bergabeart Parameterart parent Vater parenthesis Klammer parser Zerteiler Pascal 73 80 85 path Weg performance Leistungsf higkeit Pflege 48 Plankalk l 129 Plattform 48 87 194 Plattformunabh ngigkeit 87 POINTER 274 319 336 pointer Zeiger Polymorphie 258 268 285 303 335 347 Portierbarkeit 48 87 220 Position 365 Leseposition 158 192 Schreibposition 158 Tabulatorposition 204 368 369 POST 30 32 119 233 postcondition Nachbedingung Postorder 315 Pragmatik 57 58 84 126 128 138 220 342 Pr order 315 324 361 PRE 30 32 119 233 precondition Vorbedingung predeclared procedure Prozedur Standardproze dur Prinzip der Abstraktion 10 38 260 261 der begrifflichen Klassifika tion 261 der Trennung von Abfrage und Aktion 5 15 126 der Trennung von Schnitt stelle und Implemen tation 10 15 118 237 der Zerlegung und Zusam menfassung 4 5 15 261 der Zusammenfassung gleichartiger Objekte zu Klassen 38 PROCEDURE 76 112 113 115 117 122 124 175 17
155. 9 294 einer Konstante 75 121 138 141 einer Prozedur 75 175 einer Variable 75 114 127 138 223 eines Dienstes 20 21 eines Objekts 36 37 236 244 294 355 eines Parameters 23 eines Typs 75 140 141 174 206 217 221 247 262 274 304 336 eines Verbundtyps 244 globale 245 lokale 161 245 Vorw rtsvereinbarung 361 Vereinbarungsteil 74 einer Prozedur 161 eines Moduls 161 Vereinigung 288 324 325 327 339 Verfahren Testverfahren 287 293 296 334 335 339 340 347 374 Zufallsverfahren 294 Verfeinern 190 205 208 211 schrittweises 45 188 199 225 284 Vergleich 223 275 277 278 335 338 339 Vergleichbarkeit 336 374 Verhalten 2 7 8 15 28 45 47 63 81 146 231 252 257 258 beobachtbares 293 eines Objekts 37 340 Fehlverhalten 293 Laufzeitverhalten 49 224 spezifiziertes 9 34 Verkettung von Zeichenketten 169 Version 443 C Sachwortverzeichnis 444 Codeversion 109 einer Prozedur 352 einer Schnittstelle 109 eines Merkmals 109 eines Moduls 104 105 284 Testversion 295 von BlackBox 87 Versionierung 109 Versionsnummer 109 Verst ndlichkeit 5 11 48 49 58 112 194 241 Vertrag 30 119 231 237 254 293 318 320 321 geerbter 259 Vertragsbruch 294 Verwendbarkeit 283 Verzeichnis 91 Arbeitsverzeichnis 90 91 Installationsverzeichnis 90 91 Ressourcenverzeichnis 171 Subsystemverzeichnis 91 103 Unterverzeichnis 90 Wur
156. 9 93 187 207 253 255 257 258 262 304 336 338 363 Modul Beh ltermodul Datenbeh lter 365 generischer 362 polymorpher 336 362 374 behaviour Verhalten Benutzbarkeit 48 182 185 Benutzer 1 11 13 15 41 43 47 48 81 92 93 98 104 151 152 156 162 168 173 177 182 183 185 262 363 Benutzerhandbuch 97 Benutzung 3 8 9 11 14 20 37 130 260 284 Benutzungsoberfl che 1 11 15 48 110 149 153 154 158 159 163 165 173 182 185 187 grafische 87 110 173 184 363 interaktive 375 kommandoorientierte 103 men orientierte 103 162 Bereichs berschreitung 35 136 137 Beschriftung eines Steuerelements 169 180 182 eines Zustands 7 Betriebssystem 58 67 80 83 87 89 102 194 Bezeichnendes 52 Bezeichner 127 148 Bezeichnetes 52 Beziehung 12 32 Aufrufbeziehung 152 Benutzungsbeziehung 2 3 37 44 79 239 260 261 265 285 287 Bestandteilbeziehung 145 146 Erweiterungsbeziehung 258 260 261 265 285 Implementationsbeziehung 145 Importbeziehung Benutzungsbeziehung Kunde Lieferant Beziehung Benutzungsbeziehung Ursache Wirkungs Bezie hung 2 29 C Sachwortverzeichnis Bezug 176 276 277 279 280 300 347 367 expliziter 274 280 h ngender 279 impliziter 176 274 konstanter 176 Selbstbezug 304 Bibliothek 88 89 Klassenbibliothek 262 375 Modulbibliothek 200 208 262 Bildschirm 13 53 93 159 363 369 binary search tre
157. AR i INTEGER BEGIN FOR i 0 TO y DO XYplane Dot x i XYplane draw END FOR i y 1 TO maxYP 1 DO XYplane Dot x i XYplane erase END END DrawVerticalLine Other operations not shown END Graphutilities 1 OpenNew wird direkt an den Lieferanten XYplane weitergeleitet Der Vorteil des zus tzlichen Prozeduraufrufs liegt im Verber gen von XYplane vor den Kunden von Graphutilities Konflikte kann es geben wenn XYplane und Graphutilities gleichzeitig benutzt werden 215 8 Strukturiertes und modulares Programmieren 8 2 4 Werkzeugkasten modul 8 2 4 1 216 2 Die zweite FOR Schleife l scht den oberen Teil der x Linie Zum Testen von Graphutilties gehen wir wie in Abschnitt 7 1 gezeigt vor indem wir Kommandoaufrufe der Art GraphUtilities Open GraphuUtilities DrawHorizontalLine 118 29 Graphutilities DrawHorizontalLine 213 102 Graphutilities DrawVerticalLine 118 29 GraphuUtilities DrawVerticalLine 213 102 xYplane Clear eingeben brigens liegt es an der festen Gr e des kartesischen Rechtecks von Graphutilities bzw XYplane dass in Bild 8 2 der obere Teil der Haufigkeitsdiagramme abgeschnitten ist Implementieren von Vektoroperationen Die von Programm 8 7 benutzten Operationen des Moduls MathVectorsOflnteger sind zu implementieren MathVectorsOflnteger ist ein Beispiel f r ein Modul ohne Zustand und zwar eines der Art der Werkzeugkastenmodule Solche Mo
158. ASSERT sizeOfCHARset MOD sizeOfSET 0 BEC invariantModulelmpl END ContainersSetsOfChar Die Nummern in der folgenden Liste von Bemerkungen ent sprechen den Nummern bei den Symbolen in Programm 9 4 1 Der Klassenname Set dient als Typname f r Zeiger auf Objekte der Klasse Zeiger behandeln wir in 10 3 5 S 274 2 Das Suffix Desc f r Description h ngen wir per Program mierkonvention an den eigentlichen Namen Set der bereits f r den Zeigertyp vergeben ist 9 4 Von der Spezifikation zur Implementation 3 Die private Variable set von Programm 6 6 S 138 wird in ein privates Feld des Verbundtyps SetDesc transformiert Jedes Exemplar von SetDesc hat damit sein eigenes Exemplar von set 4 Die Funktionsprozedur PROCEDURE IsEmpty BOOLEAN von Programm 8 4 S 199 wird zu einer typgebundenen Funktionsprozedur Ein erlauternder Zwischenschritt dahin ist der gewohnlichen Funktionsprozedur die Daten der Menge als Parameter zu bergeben PROCEDURE IsEmpty IN set SetDesc BOOLEAN Die Parameter bergabeart ist IN weil IsEmpty als Abfrage bzw Funktion den Parameter set nicht ver ndert Eine Ver einbarung VAR mySet ContainersSetsOfChar SetDesc vorausgesetzt kann ein Kunde diese Prozedur so aufrufen ContainersSetsOfChar IsEmpty mySet Bei dieser Variante spielt ContainersSetsOfChar die Rolle eines Werkzeugkastenmoduls das Materialien der Art SetDesc bearbeitet hnlich wie MathVectors
159. Anweisungen END Der frei w hlbare Name i bezeichnet eine ganzzahlige Variable die Z hl oder Laufvariable control variable Die Ausdr cke Initialausdruck Terminalausdruck Schrittweite sind ganzzahlig und mit dem Typ der Z hlvariable vertr glich sie hei en Z hlbereichs grenzen und Schrittweite Schrittweite ist ein konstanter Aus druck ungleich 0 Ohne das BY Konstrukt gilt Schrittweite 1 Das folgende Codest ck spezifiziert die dynamische Semantik der FOR Schleife mittels IF und WHILE Anweisungen Man beachte dass Terminalausdruck nur einmal am Anfang ausgewertet wird end ist eine implizite Variable ihr Typ ist mit Terminalausdruck vertr glich siehe Das Z hlbereichsende kann also nicht im Schleifenrumpf ver ndert werden dies w rde dem Zweck der Z hlschleife widersprechen 193 8 Strukturiertes und modulares Programmieren gt Leitlinie 8 2 Z hlschleifen Leitlinie 8 3 Z hlvariablen 194 end Terminalausdruck i Initialausdruck IF Schrittweite gt 0 THEN WHILE i lt end DO zu wiederholende Anweisungen INC i Schrittweite END ELSE WHILE i gt end DO zu wiederholende Anweisungen INC i Schrittweite END END Die Entw rfe 3 4 und 5 sind quivalent sie haben denselben Effekt Wir entscheiden uns leicht f r die pr gnanteste Formu lierung des Entwurfs 5 W hrend man bei der WHILE Schleife des Entwurfs 4 das INC i am Ende des Schleifenrumpfs vergessen und so eine
160. Beschreibung von In und Out erhalten wir wie f r alle Standardmodule online mit dem Men befehl des Browsers Inio Documentation siehe 5 3 3 S 94 In Hier betrachten wir einen Teil der syntaktischen Schnittstelle des Eingabemoduls DEFINITION In VAR Done BOOLEAN PROCEDURE Char VAR ch CHAR PROCEDURE Int VAR i INTEGER PROCEDURE Open PROCEDURE Real VAR x REAL PROCEDURE String VAR str ARRAY OF CHAR END In Noch nicht vorgestellte Sprachelemente sind Typ ARRAY OF CHAR ist ein Typ fiir Zeichenketten beliebiger Lange Parameterart Die Angabe VAR entspricht einem Ein Ausga beparameter in Cleo mit INOUT markiert siehe auch 7 4 2 Bei den Prozeduren von In handelt es sich nur um Ausgabe parameter anstelle von OUT steht historisch bedingt VAR Beachte Der Eingabe eines Werts von der Benutzungsober fl che entspricht die Ausgabe des Werts an die aufrufende Prozedur Wie sieht nun die Semantik der Schnittstelle Programm 7 1 aus Hier eine informale Beschreibung Done zeigt an ob die letzte Operation erfolgreich war Es wird nur durch ein erfolgreiches Open auf TRUE gesetzt Open l sst den Eingabestrom im Text des aktiven Fensters beginnen entweder am Textanfang oder wenn ein Textst ck selektiert ist am Anfang der Selektion Char Int Real String Gilt Done so versuchen sie einen Wert entsprechenden Typs zu lesen und bei Erfolg an den Ausga beparameter zu binden sonst si
161. Bild 1 1 Geld_einnehmen modelliert auch einen Schieber mit einer M nzkuhle Den Parameter neuer_Preis der Aktion initia lisieren zeigt Bild 1 1 nicht wir modellieren ihn dazu damit das Betriebspersonal den Preis ndern kann Damit haben wir das physische Modell eines Kaffeeautomaten von Bild 1 1 in ein erstes Softwaremodell transformiert MODULE Kaffeeautomat QUERIES eingenommener_Betrag Preis auBer_Betrieb gesammelter_Betrag ACTIONS Geld_einnehmen Betrag Kaffee_ausgeben Geld_zur ckgeben initialisieren neuer_Preis END Kaffeeautomat Modul und Dienst Den eben dargestellten Modellierungsvorgang verallgemeinern wir zu Regeln an die wir uns beim L sen neuer Aufgaben hal ten k nnen Modelliere als ein Modul eine logische Einheit die eine bestimmte Aufgabe erf llt Fasse zusammengeh rige Teilauf gaben so zusammen dass sie als Dienste eines Lieferantenmo duls potenziellen Kundenmodulen zur Verf gung stehen Grenze ein Modul klar von seiner Umgebung ab Leitlinie 1 2 Dienste fur kleine Teilaufgaben Leitlinie 1 3 Trennung von Abfragen und Aktionen Struktur und Bedeutung Sprache Leitlinie 1 4 Namen von Abfragen 1 2 Modul und Dienst Lasse jeden Dienst eine berschaubare abgegrenzte Teilauf gabe seines Moduls erledigen Reduziere so die Komplexit t der Gesamtaufgabe Entscheide bei jedem Dienst ob er eine Abfrage ist die ein Ergebnis liefert aber nichts ver ndert oder
162. Bild 6 4 Schnittstelle von I1Kaffeeautomat eeeenene 118 Bild 6 5 Information zum Objektcode von I1Kaffeeautomat 119 Bild 6 6 Zuweisung exemplarisch 0 eee eee 127 Bild 6 7 Zuweisung allgemein 0 0 eee eee eee eee 127 Bild 6 8 Speicherplatz zu Reihung exemplarisch e 136 Bild 6 9 Abstrakte Datenstruktur sseeeeesneennenneennennennnnnn 143 Bild 6 10 Beziehungen zwischen Cleo und Component Pascal 144 Bild 6 11 xxi Abbildungsverzeichnis 25 2 05 xxii ASSOZIAUON ee este 145 Bild 6 12 Implementation aan maaseeankn 145 Bild 6 13 Komposition ruaa ge E EEEE AAAA AEE neu 145 Bild 6 14 ABETESAtIon MLK nn a a EA E 146 Bild 6 15 Klassifikation oren r e e e e ea ens 146 Bild 7 1 Aufrufmen zu Kaffeeautomat ecese 149 Bild 7 2 Trapfenster zum Aufruf von Kaffee_ausgeben 150 Bild 7 3 Trapursache in Kaffee_ausgeben eunneeennee 150 Bild 7 4 Zustand globaler Variablen zum Trapzeitpunkt 151 Bild 7 5 Kommandomodul und Funktionsmodul 153 Bild 7 6 Aufrufmen zu Kaffeeautomat mit Ein Ausgabe 154 Bild 7 7 Ausgabe von Kaffee_ausgeben uneneeneeee 155 Bild 7 8 Eingabe von Preis nase 155 Bild 7 9 Ausgabe von initialisieren mit akzeptiertem Preis 155 Bild 7 10 Speicherplatz zu Verbund exemplarisch nene 165 Bild 7 11 Defaultdia
163. Box stark von konventionellen Systemen die nur mit ASCII Textdateien arbeiten Zun chst stellt sich die Frage mit welchen Mitteln wir uns in BlackBox Informationen beschaffen k nnen Log Fenster Bild 5 2 zeigt das Log Fenster in dem Quittungen f r Komman doaufrufe und Fehlermeldungen des Systems erscheinen kurz das Protokoll der Interaktionen Zur Kontrolle der eigenen T tigkeit sollte es stets in Sichtweite bleiben Die Men befehle Info Open Log Info Clear Log ffnen das Log Fenster bzw l schen seinen Inhalt Der Pro grammierer kann das Log Fenster als Ziel der Test und Fehler ausgabe seiner Module verwenden Der Inhalt des Log Fensters l sst sich problemlos editieren kopieren und speichern Diese Eigenschaft gilt generell Jede Interaktion produziert nichtfl ch tige Daten die sich beliebig weiterverarbeiten lassen Auch darin unterscheidet sich BlackBox von konventionellen Syste men bei denen auf dem Bildschirm oder in einem Fenster nur fl chtige Ausgabe erscheint Sie bewegt sich nach oben ist jenseits des Randes unwiederbringlich verloren und im sichtbaren Bereich weder kopier noch speicherbar Online Dokumentation Die interaktiv verf gbare Dokumentation und Hilfe sind als Hypertextsystem organisiert Klickbare Hyperverbindungen sind per Konvention blau und unterstrichen Man ruft den Men befehl Help Contents auf und klickt solange auf blauen Text oder gibt zu suchende Begriffe ein b
164. D Preis 0 Arithmetik MOD bezeichnet den Modulo Operator Sind a b ganze Zahlen mit b 0 und wird a ganzzahlig durch b geteilt so ist a MOD b der Rest Um Division durch 0 zu verhindern muss zuvor die Invariante Preis gt 0 gelten So kann es leider keinen Gratiskaffee geben Diese Uberlegungen fassen wir in einer Variante der Spezifikation des Kaffeeautomaten zusammen Programm 2 8 MODULE Kaffeeautomat Kaffeeautomat mit QUERIES g nstigeren Typen au er_Betrieb BOOLEAN eingenommener_Betrag NATURAL Preis NATURAL QUERIES FOR Betriebspersonal gesammelter_Betrag NATURAL ACTIONS Geld_einnehmen IN Betrag NATURAL PRE NOT au er _Betrieb POST eingenommener_Betrag OLD eingenommener_Betrag Betrag Kaffee_ausgeben PRE NOT au er_Betrieb eingenommener_Betrag gt Preis POST eingenommener_Betrag OLD eingenommener_Betrag Preis gesammelter_Betrag OLD gesammelter_Betrag Preis 35 2 5 Programm 2 9 Kaffeeautomat als Klasse Objekt 36 Spezifizieren Geld_zur ckgeben PRE NOT au er _Betrieb POST eingenommener_Betrag 0 ACTIONS FOR Betriebspersonal initialisieren IN neuer_Preis NATURAL PRE neuer_Preis gt 0 POST NOT au er_Betrieb eingenommener_Betrag 0 Preis neuer_Preis gesammelter_Betrag 0 INVARIANTS Preis gt 0 gesammelter_Betrag MOD Preis 0 END Kaffeeautomat Programm 2 8 ist verglichen mit Programm 2 5 kiirzer und exak ter Durch den passenden Ty
165. DS Warenautomat RENAMES Ware_ausgeben AS Kaffee_ausgeben REDEFINES Kaffee_ausgeben ACTIONS Kaffee_ausgeben INOUT Pott Tasse END Kaffeeautomat CLASS Fahrscheinautomat EXTENDS Warenautomat RENAMES Ware_ausgeben AS Fahrschein_ausgeben REDEFINES Fahrschein_ausgeben ACTIONS Fahrschein_ausgeben INOUT mk Magnetkarte END Fahrscheinautomat Kaffeeautomat und Fahrscheinautomat benennen Ware_ausgeben um und redefinieren seine Signatur Beide Erweiterungsklassen bernehmen von Warenautomat das Verhalten von Ware_ausgeben wie es durch die Vor und Nachbedingungen spezifiziert ist Klassenstruktur Stellen wir nun die gefundenen Beziehungen zwischen den Klassen in einem Diagramm zusammen Das F llen ist eine Assoziation zwischen einem Automaten und einem Beh lter mit der Notation von Bild 6 11 S 145 Warenautomat f llt gt Beh lter Tasse Bild 10 5 zeigt wie der Warenautomat und der Beh lter parallel spezialisiert werden und wie sich dabei aus Warenautomat f llt Beh lter der Spezialfall Kaffeeautomat f llt Tasse ergibt In der Spezifikation f hrt dies dazu die Signatur von Kaffee_ausgeben gegen ber der von Ware_ausgeben zu ndern Die Art dieser nderung nennt man kovariante Erweiterung Sie kommt beim Modellieren oft vor Bild 10 5 ist ein Beispiel f r ein angewandtes Entwurfsmuster design pattern Kaffeeautomat 257 10 Statische Klassenstrukturen 10 2 10 2 1
166. Dazu schreiben wir nur spezielle Teile auf und verwei sen auf gemeinsame Teile mit dem EXTENDS Konstrukt Die erweiterte Klasse Beh lter heift dann Basisklasse der Klasse Tasse und Tasse hei t Erweiterungsklasse von Beh lter CLASS Tasse EXTENDS Beh lter END Tasse Die Spezifikation der Tasse unterscheidet sich nicht von der des Beh lters Eine Tasse verh lt sich wie ein allgemeiner Beh lter Die Klasse Tasse erbt inherit von der Klasse Beh lter alle Dienste die Vor und Nachbedingungen aller Dienste die Invarianten Dies gilt allgemein Eine Erweiterungsklasse erbt von ihrer Basisklasse die Dienste mit den Vertr gen Untersuchen wir die Magnetkarte Eine Fahrschein Magnet karte soll nur zwei Zust nde entwertet leer und geladen voll haben der Zustand teilvoll soll nicht vorkommen Dies errei chen wir beim Erweitern durch eine zus tzliche Invariante Programm 10 3 Magnetkarte als erweiterter Behalter TS Anpassen Ausblick zur Implementation 10 1 3 10 1 Fahrscheinautomaten CLASS Magnetkarte EXTENDS Beh lter INVARIANTS leer OR voll END Magnetkarte Die Klasse Magnetkarte verst rkt die von ihrer Basisklasse Beh lter geerbte Invariante Ihre vollst ndige Invariante lautet NOT leer AND voll AND leer OR voll und l sst sich quivalent in NOT leer voll umformen Damit hnelt Magnetkarte einem Schalter siehe Pro gramm 2 6 S 33 Allgemein gilt Eine Erweiterungsk
167. Dienste ihrer Basisklasse implementieren 5b implementierte Dienste ihrer Basisklasse mit anderen Implementationen versehen 259 10 Statische Klassenstrukturen Abstraktion 10 2 3 Bild 10 6 Benutzen und Erweitern 260 6 neue Dienste vereinbaren 5a und 5b nennt man Redefinieren Die Beispiele dieses Kapitels nutzen nur die Option 5a Dies ist kein Zufall denn das Prinzip der Abstraktion pr gt das Konzept der Klassener weiterung Klassifikationsstrukturen bei denen abstrakte Klas sen die meisten Dienste vereinbaren und spezifizieren w hrend Erweiterungsklassen meist abstrakte Dienste implementieren aber nur wenige Dienste reimplementieren oder neu definieren sind besser als solche die 5b und 6 heftig nutzen Sind gute Abstraktionen und Klassifikationen gefunden dann passen sich weitere Erweiterungsklassen leicht in die Struktur ein Ein Black Box Ger st exportiert nur abstrakte Klassen Das BlackBox Component Framework hei t so weil dieses Produkt nach diesem Konzept entworfen ist Benutzen oder erweitern W hrend die Benutzungsbeziehung eine Menge von Modulen und eine Menge von Klassen strukturiert tritt bei Klassen die Erweiterungsbeziehung hinzu In Bild 10 6 erscheint die Klasse in der Mitte des Kreuzes in vier Rollen sie Erweiterungs klasse 1 benutzt als Kunde die Lieferantenklasse rechts 2 wird als Lieferant von der Kundenklasse links benutzt 3 erweitert die Basisklas
168. E BOOLEAN BOOLEAN BOOLEAN BOOLEAN BOOLEAN Der Name has bezeichnet die Reihung als Ganzes Die einzelnen Elemente einer Reihung sind durch Indizierung explizit benennbar und direkt zugreifbar Beispielsweise bezeichnen die indizierten Variablen has 0 das erste Element und has LEN has 1 das letzte Element der Reihung has allgemein hat eine indizierte Variable die Form Reihungsvariablenname ganzzahliger Ausdruck Der Index ist ein ganzzahliger Ausdruck daher sind Indexbe rechnungen m glich z B LEN has 1 bevor die Adresse der indizierten Variable ermittelt wird Der Indexwert muss im Intervall 0 bis LEN has 1 liegen sonst liegt eine Bereichs ber schreitung vor BlackBox pr ft ob ein Index seine Grenzen einh lt und zwar bei konstanten Ausdr cken zur bersetzungszeit sonst zur Laufzeit Eine Bereichs berschreitung f hrt zur Laufzeit zu einem Trap Mit der Vereinbarung i INTEGER ist die Semantik als ob vor jedem Zugriff der Art has i eine Vorbedingung der Art ASSERT 0 lt i amp i lt LEN has steht Ein Indexwert bestimmt dann eineindeutig ein Reihungs element f r das tats chlich Speicherplatz reserviert ist Die zweite Zuweisung in i 1 has i TRUE kann keinen fremden Speicherplatz berschreiben Bei man chen Programmiersprachen z B C und C sind Indexgrenzen nicht dynamisch pr fbar da Reihungsl ngen zur Laufzeit unbe kannt sind solche Sprachen sind nicht spe
169. EN scanner ConnectTo controller text scanner SetOpts TextMappers interpretBools TextMappers interpretSets controller GetSelection begin end IF begin end THEN scanner SetPos 0 ELSE scanner SetPos begin END failed FALSE ELSE failed TRUE StdLog String UtilitiesIn Open controller not focused StdLog Ln END END Open PROCEDURE Position INTEGER BEGIN RETURN scanner Pos END Position PROCEDURE SetPosition position INTEGER BEGIN scanner SetPos position END SetPosition 12 2 Entwurfsmuster PROCEDURE ReadBool OUT x BOOLEAN BEGIN IF scanner rider NIL THEN scanner Scan IF scanner type TextMappers bool THEN x scanner bool ELSE failed TRUE StdLog String UtilitiesIn ReadBool scanner Scan failed found type StdLog Int scanner type StdLog Ln END ELSE failed TRUE StdLog String Utilitiesin ReadBool scanner not connected StdLog Ln END END ReadBool PROCEDURE ReadChar OUT x CHAR PROCEDURE ReadRawChar OUT x CHAR BEGIN IF scanner rider NIL THEN scanner rider Read x scanner rider char failed scanner rider eot ELSE failed TRUE StdLog String Utilitiesin ReadRawChar scanner not connected StdLog Ln END END ReadRawChar PROCEDURE Readint OUT x INTEGER PROCEDURE ReadReal OUT x REAL PROCEDURE ReadSet OUT x SET PROCEDURE ReadString OUT x ARRAY OF CHAR END Utili
170. ER Warum ist au er_Betrieb TRUE Die Variablen haben genau die Werte die sie durch das Ausf hren des Initialisierungsteils des Moduls nach dem Laden erhalten Richtig wir haben initialisieren nicht zuerst aufgerufen Liegt ein Fehler des Benutzers vor Nein Benutzer machen keine Fehler es gibt keine Bedienerfehler Benutzern ist jede Eingabe erlaubt keine Eingabe darf zum Abbruch eines Programmablaufs f hren Ein Programm muss robust sein es muss angemessen auf Eingaben von Benutzern reagieren Diese Leitlinie ist mit der Methode der Spezifikation durch Ver trag zu konfrontieren Ein Kunde muss Vorbedingungen benutzter Dienste erf llen Aber Benutzer und Kunden sind nicht dasselbe Es ist eben ein Missverst ndnis nicht zwischen Menschen Benutzern und Software Kundenmodulen zu unterscheiden Wir folgern daraus Vorbedingungen sind kein geeignetes Mittel um Eingaben von Benutzern zu pr fen I1Kaffeeautomat eignet sich nicht als Kommandomodul das man beliebigen Benutzern anbieten k nnte Das schnell erstellte Men in Bild 7 1 erf llt seinen Zweck zum Testen des Moduls Solange wir die Kommandos in erlaubten Reihenfolgen mit erlaubten Parameterwerten aufrufen ereignet sich kein Trap Andererseits k nnen wir Traps provozieren um zu testen ob das Modul Vorbedingungen richtig pr ft So sollte uns stets bewusst sein ob wir gerade die Rolle des Entwicklers und Testers oder die des Anwenders einnehme
171. ET 0 sind Voraussetzungen fiir die Korrektheit der Modulimplementation Es sind Modulinvarianten die sich auf die Implementation des Moduls beziehen Implementationsab h ngige Invarianten nennen wir Implementationsinvarianten sie bleiben Kunden verborgen Diese hier sind zudem konstante Bedingungen daher m ssen sie nur einmal gepr ft werden und stehen im Initialisierungsteil des Moduls Tats chlich pr ft sie schon der bersetzer Sie helfen Fehler zu entdecken die sich durch ndern einer der Konstanten einschleichen k nnten Gegen ber Programm 6 5 reduziert diese L sung den Speicher platzbedarf f r Daten auf 1 8 also auf 213 8192 Bytes Code gr e und Laufzeit wachsen unwesentlich Anpassen und Verallgemeinern Anwender wechseln oft ihre Anforderungen an Software des halb soll sie nderbar sein Um zu sehen wie leicht wir das Pro gramm 6 6 an eine andere Aufgabe anpassen k nnen ist jetzt statt einer Menge von Zeichen eine Menge ganzer Zahlen zu implementieren Die Spezifikation entspricht Programm 2 7 S 34 nur den Elementtyp CHAR ersetzen wir durch einen Ganz zahltyp 139 6 Vom Spezifizieren zum Implementieren Ganzzahltypen Implizite Typanpassung Programm 6 7 Menge ganzer Zahlen 140 Component Pascal bietet vier ganzzahlige Grundtypen BYTE SHORTINT INTEGER LONGINT die sich im Wertebereich unter scheiden siehe Anhang A Appendix C S 410 INTEGER und LONGINT scheiden bei de
172. Es gen gt das Konzept anhand zweier Module A und B zu studieren wobei B A importiert Bild 5 18 zeigt den Datenfluss bei diesem Beispiel Die zwei Dimen sionen zeigen au erdem die kausalen Abh ngigkeiten Vertikal Ein Modul kann nur geladen werden wenn es zuvor bersetzt ist Horizontal Ein Modul kann nur bersetzt werden wenn seine Lieferanten zuvor bersetzt sind Ein Modul kann nur geladen werden wenn seine Lieferanten zuvor geladen sind bersetzen Der bersetzer liest Quelltexte und Schnittstellendateien impor tierter Module und produziert Schnittstellen und Objektcode dateien Ein Quelltext muss nicht in einer Datei gespeichert sein Im Beispiel Bild 5 18 ist zuerst das Modul A zu bersetzen Der bersetzer liest die Quelldatei A odc und erzeugt daraus eine Schnittstellendatei A osf und eine Codedatei A ocf Danach ist das Modul B bersetzbar Der bersetzer liest die Quelldatei B odc erkennt an der Importliste dass er die Schnittstellendatei A osf heranziehen muss und erzeugt eine Schnittstellendatei B osf nicht im Bild 5 18 und eine Codedatei B ocf 107 5 Die Entwicklungsumgebung BlackBox Bild 5 18 Ubersetzen und Laden in BlackBox 108 Quelltext B odc MODULE B IMPORT A Quelltext A odc Schnittstelle A osf A x V1 MODULE A bersetzer bersetzer Objektcode A ocf gt A x V1 Objektcode B ocf gt A x V1 Dynamischer Bin
173. Form aufzurufen in der erscheinenden Befehlsdialogbox ist der Modulname hier 1Kaffeeautomat_DialogBox einzusetzen und der OK Knopf anzuklicken Der Befehl generiert aus der Schnittstelle des angegebenen Moduls eine Dialogbox mit Defaultlayout Bild 7 11 zeigt das Defaultlayout zu 11Kaffeeautomat_DialogBox wobei das Textfeld Betrag durch Anklicken selektiert ist Jedem Verbund ist ein Gruppenkasten z B Anzeige zugeordnet der die Steuerelemente f r die Verbundfelder umrahmt Einem booleschen Feld entspricht ein beschriftetes Pr fk stchen z B au er_Betrieb den anderen Verbundfeldern entsprechen beschrif tete Textfelder z B Betrag Schreibgesch tzten Verbundfeldern entsprechen graue Felder um sie als nicht eingabef hig zu kenn 169 7 Ein und Ausgabe Bild 7 11 Defaultdialogbox im Layoutmodus Layout editieren 170 zeichnen z B Meldung voll exportierten Verbundfeldern ent sprechen wei e eingabef hige Felder z B Preis Jeder parame terlosen gew hnlichen Prozedur ist ein beschrifteter Kommandoknopf z B Geld_einnenmen zugeordnet Die Defaultdialogbox ist direkt benutzbar Tats chlich nutzt man sie nur wenn das Layout nebens chlich ist z B zum Testen Das automatisch erzeugte Layout vergeudet Platz nimmt f r Steuerelemente Defaultgr en und f r Beschriftun gen exportierte Namen und sortiert Kommandokn pfe alpha betisch Zudem erwartet es kurze Namen wie im Englischen blich lan
174. Freilich gen gen zum Schreiben von Quelltext die F higkeiten eines Texteditors Beim Entwickeln von Programmen spielen die Men s Info Dev und Tools eine Rolle Bild 5 8 S yntaxfehlermarke 5 3 Werkzeuge Ubersetzer Folgen wir wieder dem Entwicklungsmodell von Bild 4 6 S 61 so brauchen wir jetzt einen bersetzer Vier Men befehle zum bersetzen stehen zur Auswahl es bersetzt Dev Compile den Inhalt des aktiven Fensters Dev Compile and Unload wie Dev gt Compile entl dt aber zus tz lich das Modul Dev Compile Selection den Text dessen Anfang selektiert ist Dev Compile Module List die Module deren Namen selektiert sind Bei den ersten drei Befehlen muss der Quelltext nicht in einer Datei gespeichert sein der bersetzer liest den Text aus dem Fenster Es empfiehlt sich jedoch den Text vor dem Ausf hren des Moduls zu speichern damit er im Fehlerfall nicht verloren gehen und der Debugger ihn finden kann siehe Abschnitt 7 1 Der zu bersetzende Text muss ein Component Pascal Modul sein gem der EBNF Syntax von 4 7 15 73 dem Nichtterminal Module entsprechen konkret mit dem Schl sselwort MODULE und einem Modulnamen beginnen Der bersetzer liest den Text bis er das schlie ende END mit dem Modulnamen und dem Punkt findet Im Beispiel MODULE Mhyiodule compding I MyModuie Dieser Test wird bersetzt one error detected END It MtytModule Dieser Text wird nicht b
175. HILE Schleife endet statisch und dynamisch beim END Fette EXITs lassen dynamische Enden einer LOOP Schleife gut erkennen 203 8 Strukturiertes und modulares Programmieren 8 2 1 2 Entwurf 1 des Ausgabeschritts Textuelle Ausgabe Entwurf der Ausgabeprozedur Tabelle 8 2 Partieller Vergleich von UtilitiesO ut und Out Semantik 204 Nach Zeichen sortierte Ausgabe Auch f r die textuelle Ausgabe orientieren wir uns an der L sung der vorigen Aufgabe siehe S 193 FOR i ORD MIN CHAR TO ORD MAX CHAR DO IF frequency i gt 0 THEN gib das Zeichen CHR i und seine Haufigkeit frequency i textuell und grafisch aus END END Damit ist die Ausgabeschleife komplett zu verfeinern ist die Ausgabe eines einzelnen Zeichen Haufigkeits Paars Fiir die textuelle Ausgabe schreiben wir eine lokale Prozedur die auch bei der nach Haufigkeiten sortierten Ausgabe zu ver wenden ist PROCEDURE Write c CHAR freq Frequency BEGIN Out WriteChar c Out Writelnt freq END Write Out WriteTab Out WriteLn Wir benutzen den Aliasnamen Out UtilitiesOut Das Ausgabemo dul UtilitiesOut ist m chtiger als das Standardmodul Out Tabelle 8 2 stellt die hier von UtilitiesOut gebrauchten Merkmale neben bekannte Merkmale von Out UtilitiesOut OpenNew IN newTitle ARRAY OF CHAR Open Char ch CHAR WriteChar x CHAR WriteTab WriteLn Ln Writelnt x INTEGER Int i n INTEGER Writ
176. HORTREAL and the result type is SHORTREAL Appendix B Syntax of Component Pascal Module MODULE ident ImportList DeclSeq BEGIN StatementSeq CLOSE StatementSeq END ident ImportList IMPORT ident ident ident ident DeclSeq CONST ConstDecl TYPE TypeDecl VAR VarDecl ProcDecl ForwardDecl ConstDecl IdentDef ConstExpr TypeDecl IdentDef Type VarDecl IdentList Type ProcDecl PROCEDURE Receiver IdentDef FormalPars NEW ABSTRACT EMPTY EXTENSIBLE DeclSeq BEGIN StatementSeq END ident 408 ForwardDecl FormalPars FPSection Receiver Type FieldList StatementSeq Statement Case CaseLabels Guard ConstExpr Expr SimpleExpr Term Factor Set Element Relation AddOp MulOp Designator ExprList IdentList Qualident IdentDef A Component Pascal Language Report PROCEDURE Receiver IdentDef FormalPars FPSection FPSection Type VAR IN OUT ident ident Type VAR IN ident ident Qualident ARRAY ConstExpr ConstExpr OF Type ABSTRACT EXTENSIBLE LIMITED RECORD Qualident FieldList FieldList END POINTER TO Type PROCEDURE FormalPars IdentList Type Statement Statement Designator Expr Designator ExprList IF Expr THEN St
177. INTEGER Ein Ausgabeparameter kombinieren beide bergabearten Parameterwerte flie en an den Aufgerufenen und zur ck an den Aufrufer Dazu bieten die Vereinbarung Kaffee_ausgeben INOUT Pott Tasse 2 3 Syntax Statische Semantik 2 3 Syntax und Semantik und der Aufruf Kaffeeautomat Kaffee_ausgeben mein_Haferl ein von Programm 2 1 abweichendes Beispiel das wir in Kapi tel 9 detailliert besprechen Bleibt uns die allgemeine Form eines Aufrufs eines Dienstes anzugeben Modulname Dienstname aktuelle Parameter Syntax und Semantik Programm 2 1 legt syntaktische Eigenschaften des Kaffeeauto maten fest n mlich die Signaturen der Dienste d h ihre Namen die Anzahl die Arten und Typen der Parameter und bei Abfragen den Ergebnistyp So ist der Aufruf Kaffeeautomat get_coffee von vornherein zum Scheitern verurteilt er ist syntaktisch falsch Dieser Automat versteht kein Englisch ein echtes Manko Ebenso ist Kaffeeautomat Kaffee_ausgeben 5 Tassen syntaktisch falsch denn Kaffee_ausgeben ist parameterlos Dar ber hinaus spezifiziert Programm 2 1 eine Eigenschaft die man zur statischen Semantik z hlen kann die Typbindung Statisch bedeutet hier dass man die Eigenschaft durch Analysie ren des Programmtextes pr fen kann ohne den Automaten in Betrieb zu nehmen d h ohne die Simulation auszuf hren Bevor wir auf die Typpr fung n her eingehen erg nzen wir das Modell de
178. J G Cib A T ee a a aki ContainersSetOfChar exportiert die Reihung has bzw set aus gutem Grunde nicht sondern sch tzt sie als privates Merkmal vor sei nen Kunden Die konkrete Datenstruktur ist gekapselt und hin ter der Schnittstelle versteckt Nur die Datenkapselung erm glicht den Optimierungsschritt von Programm 6 5 nach Programm 6 6 und weitere Verbesse rungen der Implementation von ContainersSetOfChar Datenkapse lung ist auch Voraussetzung f r Korrektheit und Sicherheit Da eine konkrete Datenstruktur jeden Direktzugriff erlaubt kann sie keine Invarianten ber ihren Elementen garantieren Um die Invarianten des Kaffeeautomaten zu garantieren haben wir seine Daten als schreibgesch tzte Variablen vereinbart siehe Programm 6 3 Component Pascal l sst zu Variablen mit Schreibzugriff zu exportieren Diese M glichkeit ist jedoch im Sinne der Daten kapselung verp nt Schreibgesch tzter Export von Variablen ist dagegen unkritisch weil dabei Kunden keine Invarianten ver letzen k nnen Aber auch schreibgesch tzter Export von Varia blen macht einen Teil der Implementation an der Schnittstelle sichtbar was die nderbarkeit der Implementation vermindert Wo nderbarkeit gefordert ist sind Abfragen als Funktionen 143 6 Vom Spezifizieren zum Implementieren anstelle schreibgeschiitzter Variablen zu implementieren und nur Operationen zu exportieren Leitlinie 6 3 3 Exportpolitik Ein Modul exportiert nur Kons
179. Klasse 237 Bild 9 6 Modul verschiedene Zeitpunkte 00 0 eee 238 Bild 9 7 Klasse und Objekt verschiedene Zeitpunkte 238 Bild 9 8 Module und Klassen in Cleo ueenseeeneesenneeeeennnnnnnnnn 239 Abbildungsverzeichnis 25 2 05 xxiv Bild 9 9 Module und Klassen in Component Pascal 239 Bild 10 1 Modell eines Warenautomaten nseesenneeennenennneennennnnnnnn 251 Bild 10 2 Klassifikationsstruktur der Automaten s 252 Bild 10 3 Klassifizieren 2 2 222222 82 2 en anoa 252 Bild 10 4 Klassifikationsstruktur der Beh lter e 253 Bild 10 5 Kovariante Erweiterung serierna tn E AREA 257 Bild 10 6 Benutzen und Erweitern sseseeeseeesseesrersrreesrreerriserressrresses 260 Bild 10 7 Benutzungs und Erweiterungsstruktur eeeeeeee 265 Bild 10 8 Abstrakte Namen f r abstrakte Klassen und Dienste 266 Bild 10 9 Referenzparameter und dynamisches Binden exempla Tisch ae nee 269 Bild 10 10 Speicherplatz zu Zeigervariable exemplarisch 275 Bild 10 11 Speicherplatz zu Zeigervariable und dynamischer Variable exemplarisch rica sescecedeh cae eet a ioe ken ik 276 Bild 10 12 Zeigervariablen und dynamische Variable exemplarisch 278 Bild 10 13 Unerreichbare dynamische Variable exemplarisch 278 Bild 11 1 Benutzungsstruktur eines Testszenariums statisch 287 Bild 11 2 Entwur
180. Konzeptklassen k nnen wir die Dienste eines Konzepts an einer Stelle definieren an wenigen Stellen geeignet redefinieren und an vielen Stellen in Anwendungen einheitlich benutzen Deshalb sind Konzeptklassen n tzlich sie helfen uns Software zu vereinheitlichen und zu vereinfachen Also treiben wir die begonnene Abstraktion weiter indem wir PartComparable von einer weiteren Konzeptklasse Any erben lassen Any definiert all gemeine Dienste die in vielen Klassen vorkommen Dazu geh ren das Vergleichen von zwei Objekten mit und und das Kopieren eines Objekts PartComparable Comparable Da diese Konzeptklassen nicht nur Beh ltern sondern beliebi gen Anwendungsklassen als Basisklassen dienen k nnen ord nen wir sie dem Modul BasisGenerals zu Die Klassenhierarchie von Bild 12 3 hnelt der Typhierarchie von Bild 8 5 S 221 Der Unterschied ist dass wir hier reale erweiterbare Klassen pro 12 1 4 Tabelle 12 1 Beispiele zu Regeln als Axiome und objekt bergreifende Invarianten Testverfahren f r Konzeptklassen 12 1 Polymorphe Mengenklasse f r geordnete Elemente grammieren w hrend wir dort nur mehrere Typnamen benut zen um die Software zu ordnen und zu dokumentieren Objekt bergreifende Invarianten Die bisher betrachteten Klasseninvarianten beziehen sich auf den Zustand eines einzelnen Objekts Doch zum Vergleichen und Kopieren geh ren zwei Objekte an Mengenoperationen wie Vereinigung u
181. LEAN NEW Postcondition result a gt b BEGIN RETURN b LessEqual a END GreaterEqual PROCEDURE IN a PartComparableDesc Greater IN b PartComparableDesc BOOLEAN NEW Postcondition result a gt b BEGIN RETURN b LessEqual a amp b Equal a END Greater 345 12 3 1 I 1 I 346 Vom Entwerfen zum Testen Invariants PROCEDURE CheckPartComparablelnvariants IN a b c PartComparableDesc VAR aEQb aLEb aLb BOOLEAN BEGIN CheckAnyInvariants a b c aEQb a Equal b aLEb a LessEqual b alb a Less b By Definition a lt b b gt a ASSERT aLb b Greater a BEC invariantClass a lt b amp a b IMPLIES a lt b ASSERT aLEb OR aEQb OR aLb BEC invariantClass Reflexivity Rule a lt a ASSERT a LessEqual a BEC invariantClass Identivity Rule a lt b amp b lt a IMPLIES a b ASSERT aLEb OR b LessEqual a OR aEQb BEC invariantClass Transitivity Rule a lt b amp b lt c IMPLIES a lt c ASSERT aLEb OR b LessEqual c OR a LessEqual c BEC invariantClass Asymmetry Rule a lt b IMPLIES b lt a ASSERT aLb OR b Less a BEC invariantClass Transitivity Rule a lt b amp b lt c IMPLIES a lt c ASSERT aLb OR b Less c OR a Less c BEC invariantClass END CheckPartComparablelnvariants Procedures bound to Comparab
182. Leitlinie 8 1 Terminierung von Schleifen 8 1 Zeichen sammeln Die Ausf hrung der Schleife beginnt mit dem kleinsten Zeichen c MIN CHAR Der Schleifenrumpf wird wiederholt solange c lt MAX CHAR Bei jedem Schleifendurchlauf erh lt c den Wert des n chstgr eren Zeichens Die Abbruchbedingung ist c gt MAX CHAR d h der Wert von c ist gr er als das gr te Zeichen Klingt berzeugend hat aber einen Haken Der Wert von c kann gar nicht gr er als MAX CHAR werden Hat c vor der Stelle 6 den gr ten Wert c MAX CHAR OFFFFX so ist das n chste Zei chen CHR ORD c 1 CHR ORD OFFFFX 1 CHR OFFFFH 1 CHR 10000H 0X MIN CHAR lt MAX CHAR Die Abbruchbedin gung ist also nicht erf llt die Fortsetzungsbedingung gilt wei ter weil mit dieser Arithmetik der Nachfolger des gr ten Zei chens das kleinste Zeichen ist Der berlauf f hrt dazu dass die Schleife nie abbricht Eine Schleife terminiert wenn f r jede Ausf hrung gilt Nach endlich vielen Auswertungen ist die Fortsetzungsbedingung nicht mehr erf llt die Abbruchbedingung ist erf llt Eine nicht terminierende Schleife hei t Endlosschleife Notwendig nicht hinreichend f r das Terminieren einer Schleife ist dass in der Schleifenbedingung mindestens eine Variable vorkommt deren Wert im Schleifenrumpf ver ndert wird Abgesehen von kon stanten Bedingungen WHILE FALSE DO END terminiert obwohl die Bedingung gar keine
183. Module Klassen Vertrage Ein Lehrbuch zur komponentenorientierten Softwarekonstruktion mit Component Pascal 2 aktualisierte Auflage Karlheinz Hug Warenzeichen Allgemeine Formel zu Warenzeichen Garantieverzichts erklarung Mac OS ist ein eingetragenes Warenzeichen von Apple Compu ter Design by Contract ist ein eingetragenes Warenzeichen von Interactive Software Engineering Inc Santa Barbara USA Design by Contract is a trademark of Interactive Software Engineering Windows NT und Windows 2000 sind eingetragene Warenzei chen von Microsoft BlackBox und Component Pascal sind eingetragene Warenzei chen von Oberon microsystems Java ist ein eingetragenes Warenzeichen von Sun Microsystems Algol 60 C C Eiffel Fortran Modula Oberon Pascal Plan kalk l Smalltalk UML sind wei ich nicht ob und von wem wo eingetragen Vom Verlag zu erg nzen Alle in diesem Buch enthaltenen Informationen wie Text Abbil dungen Programme und Verfahren wurden nach bestem Wis sen erstellt und mit gr ter Sorgfalt gepr ft Da Fehler trotzdem nicht ganz auszuschlie en sind ist der Inhalt des Buchs mit kei ner Verpflichtung oder Garantie irgendeiner Art verbunden Autoren und Verlag bernehmen f r eventuell verbliebene feh lerhafte Angaben und deren Folgen weder eine juristische Ver antwortung noch irgendeine Haftung f r Sch den die in Zusammenhang mit der Verwendung dieses Buchs der darin darg
184. N ContainersSetOfChar Remove CHR i Out Char CHR i END Doch das ist plump Eleganter ist es die Menge mit einem Mal zu leeren Welches Modul soll diese Teilaufgabe erledigen 11CharCollector k nnte es tun aber es ist sinnvoller wenn ContainersSetOfChar einen Dienst daf r bereitstellt weil diesen nicht nur I1CharCollector sondern auch andere Kunden benutzen k nnen Der Aufruf des Dienstes es ist ein Kommando lautet ContainersSetOfChar WipeOut 195 8 Strukturiertes und modulares Programmieren Wo soll der Aufruf stehen 1 Am Ende von I1CharCollector Do nach dem Motto Kunden von ContainersSetOfChar sollen es nach der Benutzung in leerem Zustand zur cklassen 2 Am Anfang von I1CharCollector Do Die Alternative 2 ist sicherer denn man kann nicht erwarten dass sich alle Kunden von ContainersSetOfChar an kaum pr fbare Spielregeln halten 8 1 2 Implementation Nun bleiben die Entwurfselemente zu kombinieren Programm 8 1 MODULE I1CharCollector Zeichensammler als IMPORT Modul In Out Set ContainersSetOfChar PROCEDURE Do CL Read characters from the input stream until its end is reached Register each character value encountered Write the found character values as an ordered sequence to the log VAR c CHAR i INTEGER BEGIN Initializations In Open Out Open Set WipeOut Input In Char c WHILE In Done DO Set Put c In Char c END Output
185. NC n key END Modify 10 2 Methods Globally declared procedures may be associated with a record type declared in the same module The procedures are said to be methods bound to the record type The binding is expressed by the type of the receiver in the heading of a procedure declaration The receiver may be either a VAR or IN parameter of record type T or a value parameter of type POINTER TO T where T is a record type The method is bound to the type T and is considered local to it ProcedureHeading PROCEDURE Receiver IdentDef FormalParameters MethAttributes Receiver VAR IN ident ident MethAttributes NEW ABSTRACT EMPTY EXTENSIBLE J If a method M is bound to a type To it is implicitly also bound to any type T1 which is an extension of T0 However if a method M with the same name as M is declared to be bound to T1 this overrides the binding of M to T1 M is considered a redefinition of M for T1 The formal parameters of M and M must match except if M is a function returning a pointer type In the latter case the function result type of M must be an extension of the function result type of M covariance see App A If M and T1 are exported see Chapter 4 M must be exported too If M is not 399 A Component Pascal Language Report 400 exported M must not be exported either If M and M are exported they must use the same export marks The following a
186. OD 18 35 Modell 1 5 14 25 51 63 105 186 229 251 253 363 365 369 Dokumentenmodell 93 Entwicklungsmodell 98 99 101 106 Entwurfsmodell 296 301 303 318 Kunden Lieferanten Modell 2 9 11 14 29 30 37 57 153 mathematisches 8 14 Mensch Maschine Modell 11 physisches 1 2 4 14 171 229 230 251 Prozessor und Speichermo dell 60 Softwareentwicklungsmo dell 42 43 46 Softwaremodell 4 8 14 51 73 82 87 230 modulares 2 38 objektorientiertes 38 Textmodell 363 369 Zustands Verhaltens Modell 2 Modellieren 3 8 14 15 18 19 36 42 51 61 230 233 241 248 251 257 objektorientiertes 44 249 C Sachwortverzeichnis Model View Controller 363 364 Klassenmodul 245 249 262 366 375 285 287 289 294 327 Modul 2 9 12 15 19 20 22 25 347 349 354 355 376 26 28 30 34 36 38 44 49 Kommandomodul 13 14 58 73 75 77 80 82 84 104 149 151 153 154 87 91 93 96 98 99 101 160 162 163 165 104 107 110 112 118 121 167 169 173 177 178 124 130 140 142 144 145 181 184 186 287 149 152 157 172 173 175 Konstantenmodul 121 247 177 187 195 196 199 201 312 206 208 211 212 214 216 Konzeptklassenmodul 342 224 225 227 230 234 343 236 241 244 249 259 kundenloses 105 261 264 265 267 273 280 Kundenmodul 118 355 362 284 288 293 294 297 Kunde 312 333 336 338 340 354 Lieferantenmodul 118 362 367 368 374 376 Lie
187. OR root is unique END Definition of Procedure bound to Action PROCEDURE VAR action ActionDesc Do item Element NEW ABSTRACT Definitions of Tree Operations and Procedures bound to Set Invariants PROCEDURE Checkinvariants tree Node VAR ordered BOOLEAN item Element PROCEDURE Inorder tree Node BEGIN IF ordered amp tree NIL THEN Inorder tree left ordered ordered amp item NIL OR item lt tree item item tree item Inorder tree right END END Inorder BEGIN ordered TRUE Inorder tree ASSERT ordered BEC invariant END Checklnvariants PROCEDURE IN set SetDesc ChecklInvariants NEW BEGIN ChecklInvariants set root END Checklnvariants Queries PROCEDURE IsEmpty tree Node BOOLEAN BEGIN RETURN tree NIL END IsEmpty PROCEDURE IN set SetDesc IsEmpty BOOLEAN NEW Does set contain no element BEGIN RETURN IsEmpty set root END IsEmpty 328 11 3 Mengenklasse f r Zeichenketten PROCEDURE Has tree Node item Element BOOLEAN BEGIN ASSERT item NIL BEC precondPar2NotNil WHILE tree NIL DO IF item lt tree item THEN tree tree left ELSIF item gt tree item THEN tree tree right ELSE RETURN TRUE END END RETURN FALSE END Has PROCEDURE IN set SetDesc Has x Element BOOLEAN NEW I Does set contain x VAR result
188. Operationen seines Writer Objekts zum Schreiben roher Daten umzusetzen Der Kunde benutzt das Formatter Objekt um Daten formatiert in das Textmodell zu schreiben Der Text erscheint aber noch nicht auf dem Bildschirm Um den Text zu visualisieren muss das Modell eine Sicht erhalten Die Fabrik von TextViews erfiillt diese Aufgabe view TextViews dir New model Danach stellt Views OpenAux view title das View Objekt in einem Fenster mit dem Titel title dar Wie behandeln wir das Lineal Nach dem bekannten Fabrikmu ster liefert ruler TextRulers dir New NIL ein neues Ruler Objekt an ruler Dieses Lineal erhalt durch TextRulers AddTab ruler position Ports mm eine Tabulatorposition bei position in Millimeter gemessen formatter Write View ruler bettet es in den Text ein Die Sicht entscheidet ob und wie sie das Lineal visualisiert Der Parameter von WriteView ist poly morph WriteView kann beliebige View Objekte in Model Objekte schreiben 369 12 Vom Entwerfen zum Testen 12 2 5 Programm 12 7 Eingabemodul 370 Implementieren des Eingabemoduls Wir zeigen nun die Implementation des Eingabemoduls Utilitiesin MODULE UtilitiesIn IMPORT StdLog TextControllers TextMappers VAR failed BOOLEAN scanner TextMappers Scanner PROCEDURE Open VAR controller TextControllers Controller begin end INTEGER BEGIN controller TextControllers Focus IF controller NIL TH
189. POINTER TO ARRAY OF CHAR 11 3 Mengenklasse f r Zeichenketten der private Knotenzeigertyp der auch als Baumzeigertyp dient und dessen anonymer Basistyp Zeiger auf das enthal tene Datenelement und auf das linke und rechte Kind hat die gleichzeitig den linken und rechten Teilbaum darstellen Node POINTER TO RECORD item Element left right Node END der exportierte erweiterbare Mengentyp der einen Zeiger auf die Wurzel des implementierenden Baums hat Set POINTER TO SetDesc SetDesc EXTENSIBLE RECORD root Node END Die Objektstruktur der zuvor leeren Menge set SetDesc nach dem Einfiigen von Eine Beispiel und Menge sieht so aus Bild 11 18 Mengenbaummitdrei Set root Elementen item 9 Eine left right item gt Beispiel item gt Menge left right left right NIL NIL NIL NIL 11 3 2 2 Prozeduren Delegationsmuster Die Menge delegiert an sie gestellte Auftr ge schematisch an ihren Baum Zu jeder an SetDesc gebundenen Prozedur die die Empf ngermenge bearbeitet etwa PROCEDURE VAR set SetDesc Name formale Parameter NEW gibt es eine gleichnamige private Prozedur etwa PROCEDURE Name tree Node formale Parameter 319 11 Dynamische Objektstrukturen IsEmpty ForAllDo 320 die den als Zeigerparameter bergebenen Baum bearbeitet Die Implementation der Mengenproze
190. POST on NOT OLD on END Switch Eine Menge Wie der Schalter hat die Menge keine Invariante und stellt keine Vorbedingungen Jeder Dienst ist jederzeit aufrufbar Schalter und Menge sind somit kundenfreundliche Lieferanten Die Nachbedingungen sind leicht zu bestimmen Nach dem Hinzu f gen ist das hinzugef gte Element in der Menge enthalten nach dem Entfernen ist das entfernte Element nicht mehr in der Menge enthalten 33 2 Spezifizieren Programm 2 7 Zeichenmenge mit Bedingungen Unvollstandigkeit Leitlinie 2 1 Vollstandige Spezifikation 2 4 4 34 MODULE Set QUERIES Has IN x CHAR BOOLEAN ACTIONS Put IN x CHAR POST Has x Remove IN x CHAR POST NOT Has x END Set Leider ist diese Spezifikation unvollstandig obwohl eine Menge eine relativ einfache Sache ist Eine formal korrekte Implementa tion k nnte beim Hinzuf gen oder Entfernen eines Elements noch weitere Elemente hinzuf gen und oder andere Elemente aus der Menge entfernen Freilich w re eine solche Implementa tion praktisch unbrauchbar An diesem Beispiel erkennen wir unvollst ndige Spezifikation als Problem denn ein Kunde eines Moduls kann nur spezifizier tes Verhalten erwarten Wie ziehen daraus die Konsequenz Noch ein Kaffeeautomat Betrachten wir Programm 2 5 genau so stellen wir fest dass Betr ge und Preise d h die entsprechenden Abfragen und Para meter nur nichtnegative Zahlenwerte annehmen Wir
191. Softwareentwicklung Dieses Kapitel soll uns eine Aussicht auf das vor uns liegende Gebiet bieten Mit dem Blick auf das Ganze vor dem Blick auf das Detail wollen wir Bezugspunkte finden an denen wir uns bei der folgenden Tour orientieren k nnen Dabei erscheinen Begriffe deren Bedeutung sich erst allm hlich erschlie en wird Funf Ebenen Menschen setzen Rechner als Werkzeuge bei ihren Tatigkeiten ein T tigkeitsbereiche der Menschen werden so zu Anwen dungsbereichen der Softwaretechnik Menschen stellen Aufga ben die durch Software gel st werden sollen Die Softwarel sung einer Aufgabe hei t Anwendung application Anwender sind professionelle Benutzer Software entwickeln ist keine schnell zu lernende Routinet tig keit sondern ein langwieriger kreativer und kommunikativer Prozess Um diesen Prozess begreifbar zu machen modellieren wir ihn hier mit f nf Ebenen in zwei Dimensionen Aufgabe informal ____ formal abstrakt Zerlegung Spezifikation Entwurf Implementierung y Test konkret gt L sung Eine Aufgabe erscheint zun chst meist informal und abstrakt beides steht f r den Abstand der Aufgabe vom Rechner auf 41 3 Softwareentwicklung Erst formalisieren dann konkretisieren Verbessern durch Wiederholen 42 dem die Anwendung ablaufen soll Beispielsweise ist fiir ein fle xibles automatisiertes Fertigungssystem das Staubsauger
192. URE t Tree Insert name ARRAY OF CHAR NEW VAR p father Tree BEGIN pst REPEAT father p IF name p name THEN RETURN END IF name lt p name THEN p p left ELSE p p right END UNTIL p NIL NEW p p left NIL p right NIL NEW p name LEN name 1 p name name IF name lt father name THEN father left p ELSE father right p END END Insert PROCEDURE t Tree Search name ARRAY OF CHAR Tree NEW VAR p Tree BEGIN pst WHILE p NIL amp name p name DO IF name lt p name THEN p p left ELSE p p right END END RETURN p END Search PROCEDURE t Tree Write NEW BEGIN IF t left NIL THEN t left Write END StdLog String t name StdLog Ln IF t right NIL THEN t right Write END END Write PROCEDURE Init t Tree BEGIN NEW t name 1 t name 0 0 t left NIL t right NIL END Init BEGIN StdLog String Trees loaded StdLog Ln CLOSE StdLog String Trees removed StdLog Ln END Trees 405 A Component Pascal Language Report 406 Appendix A Definition of Terms Character types SHORTCHAR CHAR Integer types BYTE SHORTINT INTEGER LONGINT Real types SHORTREAL REAL Numeric types integer types real types String types Shortstring String Basic types BOOLEAN SET character types numeric types Same types Two variables a and b with types Ta and Tb are of the same type if 1 Ta and Tb are both denoted by the same type ident
193. Vektoren bearbeitet Die Prozedur IsEmpty gibt an was gemacht wird der Parameter mySet woran es gemacht wird SetDesc ist schon ein abstrakter Datentyp weil die konkrete Implementation der Daten ver borgen ist und zum Bearbeiten der Daten nur Prozeduren bereitstehen SetDesc ist aber noch keine Klasse Das objektorientierte Programmieren ndert die Sichtweise Zuerst interessiert das Woran das Objekt das bearbeitet wird Dann folgt das Was die Operation mit der das Objekt bearbeitet wird In der Vereinbarung der typgebundenen Prozedur dr ckt sich das darin aus dass der Woran Parameter syntaktisch zwischen das PROCEDURE Schl sselwort und den Was Proze durnamen r ckt PROCEDURE IN set SetDesc IsEmpty BOOLEAN Damit ist die Prozedur IsEmpty an den Typ SetDesc gebunden bound to the record type und dieser ist damit eine Klasse Der Parameter set hei t Empf nger receiver Wieder die Verein barung VAR mySet ContainersSetsOfChar SetDesc 243 9 Objektorientiertes Programmieren Programm 9 5 Schnittstelle der Zeichenmenge als Klasse 244 vorausgesetzt kann ein Kunde die typgebundene Prozedur mit der Punktnotation aufrufen die den aktuellen Woran Empf nger vor den Was Prozeduraufruf stellt mySet IsEmpty Diese Variante braucht den Modulnamen ContainersSetsOfChar nur zur Vereinbarung des Objekts namens mySet nicht zum Aufruf des Dienstes IsEmpty denn dieser ist an den Typ des Objekts nicht
194. Vertr glichkeit Polymorphie Einsetzungsregel Kovarianzproblem 258 Erweiterung von Klassen Das Konzept des Erweiterns von Klassen umfasst vielf ltige Aspekte von denen wir einige hier betrachten Klasse als Typ Klassen sind Typen Die Erweiterungsbeziehung zwischen Klas sen bertr gt sich auf ihre Typeigenschaft Eine Basisklasse ist ein Basistyp eine Erweiterungsklasse ein Erweiterungstyp Wie stehen Typerweiterung und Typvertr glichkeit zueinander Ein Objekt ist mit Gr en von Basistypen seines Typs vertr glich compatible Umgekehrt formuliert Eine Gr e die vom Typ A vereinbart ist kann an ein Objekt gebunden werden das ein Exemplar eines Erweiterungstyps B von A ist ber eine A Gr e sind nur Dienste der A Klasse zugreifbar Da B die Dien ste von A erbt k nnen nur Zugriffe auf vereinbarte Dienste vor kommen wenn eine A Gr e an ein B Objekt gebunden ist Polymorphie ist die Eigenschaft einer Gr e verschiedene Gestalten annehmen zu k nnen Klassengr en sind poly morph wenn sie an Objekte verschiedener Erweiterungsklassen gebunden werden k nnen Die obige Typvertr glichkeitsregel entspricht der anschaulichen Einsetzungsregel Wo ein Objekt einer allgemeinen Klasse erwartet wird kann ein Objekt einer spezielleren Klasse einge setzt werden da es alle geforderten allgemeinen Dienste besitzt Mit dem Beispiel von Bild 10 5 Wer einen Warenautomaten haben will und einen Kaffeeautomat
195. Wird an exportierten Merkmalen nichts ver n dert d h bleibt die Schnittstelle erhalten so m ssen Kunden nicht neu bersetzt werden siehe 4 7 5 S 79 und 5 5 1 S 107 Wir programmieren hier noch kein Kundenmodul zum Kaffee automatenmodul siehe dazu Programm 7 3 S 160 sondern wenden uns dem vom bersetzer erzeugten Objektcode zu Wie in 5 3 4 S 96 beschrieben suchen wir im Lager das Subsystem 11 Bild 6 5 Information zum Objektcode von I1Kaffeeautomat 6 2 6 2 1 6 2 Von Cleo zu Component Pascal Schritt 2 in seiner Modulliste I1Kaffeeautomat klicken auf die Hyperverbin dung Code zur Objektcodedatei und erhalten das Fenster 11 kaftecautomat oct ojs MODULE likateeautomrnat processor 90485 meta Size 446 esc size 128 code size 12 data size 16 compiled 26 03 39 19 04 03 O imparts Da die Codedatei existiert ist das Modul I1Kaffeeautomat ausf hr bar Kunden k nnen seine Prozeduren aufrufen diese sind allerdings noch effektlos Die vier Variablen brauchen 16 Bytes Speicherplatz data size der automatisch erzeugte Code von 12 Bytes Gr e code size dient dazu die Variablen mit Defaultwer ten zu initialisieren wenn das Modul geladen wird siehe 6 3 2 Wir sehen davon ab dieses Modul zu laden und auszuf hren stattdessen entwickeln wir es einen Schritt weiter Die Bedin gungen die den in Programm 6 1 spezifizierten Vertrag darstel len sind zu transformieren Von Cleo zu C
196. X CHAR WHILE i gt ORD MIN CHAR amp frequencySorted i gt 0 DO gib frequencySorted i aus DEC i END Bei jedem Schleifendurchlauf werden zwei Gr en gepr ft der Index und der Wert des Reihungselements Wenn wir sicher wiissten dass 0 als Elementwert vorkommt dann k nnten wir auf das Priifen des Index verzichten denn ein Indexbereichun terlauf ware ausgeschlossen Exkurs Man k nnte argumentieren Sehr wahrscheinlich kommen in einem Eingabetext nicht alle 65536 Unicodezeichen vor sodass die 209 8 Strukturiertes und modulares Programmieren Entwurf 4 des Ausgabeschritts Suchen 210 H ufigkeit 0 auftritt Aber sehr wahrscheinlich ist eben nicht sicher Unwahrscheinliches hat schon manche Katastrophe ausgel st Zwar ist nicht zu erwarten dass das Zeichenz hlen fatal endet doch wollen wir prinzipiell nicht die Korrektheit der Effizienz opfern Eine kleine nderung garantiert das Vorkommen von 0 als Ele mentwert Die Reihungen um ein Element verl ngern dieses mit 0 initialisieren VAR frequency frequencySorted ARRAY numberOfChars 1 OF Frequency i LEN frequencySorted 1 WHILE frequencySorted i gt 0 DO gib frequencySorted i aus DEC i END Nun fehlt zur H ufigkeit das zugeh rige Zeichen Mit den Wer ten von Bild 8 3 ist der h chste Index 5 die erste ausgegebene H ufigkeit das letzte Element in frequencySorted 60 Welches Zei chen hat diese H ufigkei
197. Zugriff Die Zugriffskontrolle access control h ngt mit den Rechten an Diensten zusammen Bei einem Aufruf wird gepr ft ob der Kunde berechtigt ist den Dienst aufzurufen Versuchen wir mal den Kaffeeautomaten zu knacken MODULE Spion Kaffeeautomat gesammelter_Betrag END Spion Vergeblich Kaffeeautomat verweigert dem Modul Spion diesen Dienst Nur das Modul Betriebspersonal darf erfahren wieviel Geld sich angeh uft hat Analogie 2 3 Syntax und Semantik MODULE Betriebspersonal Kaffeeautomat gesammelter_Betrag END Betriebspersonal Typbindung und Typpr fung Typbindung bedeutet Abfragen Parameter und Ausdr cke sind an Typen gebunden Typpr fung type checking hei t Bei einer Parameter bergabe wird gepr ft ob der Typ des aktuellen Parameters mit dem Typ des formalen Parameters vertr glich compatible ist Bei einer Operation in einem Ausdruck wird gepr ft ob die Typen der Operanden mit der Operation vertr glich sind Betrachten wir z B den Aufruf Kaffeeautomat Geld_einnehmen FALSE Typfehler Der Parameter Betrag von Geld_einnehmen ist vom Typ INTEGER der bergebene Wert FALSE geh rt zum Typ BOOLEAN die beiden Typen vertragen sich nicht die Parameter bergabe scheitert da man eine INTEGER Gr e nicht an FALSE binden darf Ebenso lehnt der physische Kaffeeautomat Kn pfe anstelle von M nzen ab und wir wollen ja auch nicht dass er uns Sp l wasser in die Tasse sch
198. ab Kapitel 4 mehr erfahren bungen Mit diesen Aufgaben ben Sie die Methode der Spezifikation durch Vertrag Dabei k nnen Sie Ihre L sungen zu den bun gen von Kapitel 1 weiterentwickeln Vereinfachen Sie am Kaffeeautomaten Programm 2 8 die Geld eingabe so dass eine einzelne spezielle Automatenm nze zur Kaffeeausgabe reicht Spezifizieren Sie eine Variante der Aktion Geld_zur ckgeben des Kaffeeautomaten Programms 2 8 die einen Geldr ckgabeplatz bzw den zur ckgegebenen Betrag ber cksichtigt Spezifizieren Sie einen Kaffeeautomaten bei dem man Sorte und Zutaten w hlen kann koffeinfrei koffeinhaltig ohne mit Milch ohne mit Zucker Falls Sie Raucher sind spezifizieren Sie einen Zigarettenauto maten sonst einen Automaten Ihrer Wahl Spezifizieren Sie einen W rfel durch Invarianten Spezifizieren Sie eine Uhr nach der Vertragsmethode mit Invari anten und Diensten mit Vor und Nachbedingungen Spezifizieren Sie eine Datumsanzeige nach der Vertragsme thode 39 2 Spezifizieren Aufgabe 2 8 Kreis Aufgabe 2 9 Widerstands schaltung Aufgabe 2 10 Getriebeschaltung 40 Spezifizieren Sie einen Kreis nach der Vertragsmethode Spezifizieren Sie eine Schaltung mit einem ohmschen Wider stand nach der Vertragsmethode Spezifizieren Sie ein Getriebe mit vier G ngen und einem R ck w rtsgang nach der Vertragsmethode 3 1 Bild 3 1 F nf Ebenen der S oftwareentwicklung Zwei Dimensionen
199. ackBox Verzeichnisstruktur ussseessseensenennneeennnnennnnn 90 Bild 5 2 BlackBox Men oberfl che cunsseeessnesennsnnnnnnneenennnennn 92 Bild 5 3 BlackBox Men Info ueeeaseenseesennneeeeneennnnnnennnnnnnnnnnnnnnnnnn 94 Bild 5 4 Schnittstelle von DevSearch uuneeaneeensneeeneennnnenennnnennnnn 95 Bild 5 5 Dokumentation von DevSearch SearchInDocu 95 Bild 5 6 BlackBox Lager mnnn rani e e 96 Bild 5 7 Lager Form Subsystem nossa eii p n i r ASE 97 Bild 5 8 Syntaxfehlermiarke iinne etet ensia shs 99 Bild 5 9 Syntaxfehlermarke aufgeklappt 100 25 2 05 Abbildungsverzeichnis Bild 5 10 Kompilation 52 2262 2a 100 Bild 5 11 Interpretation ennnsnssnessnesennnsenennnnn nenn 101 Bild 5 12 Kommandoaufruf mit Men befehl nneee 102 Bild 5 13 Kommandoaufruf mit Aufrufsymbol eeeeeee 102 Bild 5 14 Kommandoaufruffolge neennnennneenenene 103 Bild 5 15 Gel dene Mod le 2 3u2 site Gece nenn 105 Bild 5 16 Programmentwicklung mit BlackBox Werkzeugen 106 Bild 5 17 Implementierungszyklus eeeennnnenenenen 107 Bild 5 18 bersetzen und Laden in BlackBox eneenenee 108 Bild 6 1 Transformation von Cleo in Component Pascal 111 Bild 6 2 Speicherpl tze zu Variablen exemplarisch 114 Bild 6 3 Speicherplatz zu Variable allgemein eenee 115
200. acortrolers Tesiviers Teiselters Texifiders eain E Zonfig Ink Controk Winders Documents m 5 4 5 4 Programmentwicklung ber die geladenen Module informiert der Men befehl Info Loaded Modules ajx Wiasused chants compiag beaded Update 18 lij 28 04 39 1647 00 02 07 89 03 3200 10591 5 16 0499 164654 OT 09 30 49 25557 li 26 01 88 184655 02 07 99 03 31 51 20180 H 26 1 99 15 45 53 0207 89 03 31 51 2558 g 26 04 09 124649 2 07 99 03 31 61 28597 10 28 04 89 164657 0207 88 03 31 51 ae 12 240499 164657 RER 1524 0 26 04 99 1647 37 0207 89 0331 54 22 lij 26 04 99 164735 2 07 99 03 31 51 52455 i 28 41 89 184645 02 07 99 03 31 48 11392 16 26 14 99 leo 0207 89 03 31 45 TI LE 26 04 00 jdid 02 07 99 03 31 48 Bild 5 15 zeigt einen Ausschnitt der Ausgabe dieses Befehls Zu jedem geladenen Modul erf hrt man die Gr e des belegten Speicherplatzes die Anzahl seiner geladenen Kunden den Zeit punkt seiner bersetzung und den Ladezeitpunkt Die Kunden zahl ist wichtig f r das Entladen denn nur kundenlose Module sind entladbar Die bersetzungszeitstempel sind wichtig wenn man mit verschiedenen Versionen eines Moduls arbeitet und pr fen will welche Version gerade geladen ist Man kann direkt im Loaded Modules Fenster einzelne oder eine Liste von Modulen selektieren und mit Dev Unload Module List entladen Um den Inhalt des Loaded Modules Fensters zur Kontrolle zu aktualisieren klickt man auf Update in Bild 5
201. al parameter lists of the forward declaration 397 A Component Pascal Language Report 398 and the actual declaration must match see App A and the names of corresponding parameters must be equal 10 1 Formal Parameters Formal parameters are identifiers declared in the formal param eter list of a procedure They correspond to actual parameters specified in the procedure call The correspondence between for mal and actual parameters is established when the procedure is called There are two kinds of parameters value and variable parameters the latter indicated in the formal parameter list by the presence of one of the keywords VAR IN or OUT Value parameters are local variables to which the value of the corre sponding actual parameter is assigned as an initial value Varia ble parameters correspond to actual parameters that are varia bles and they stand for these variables Variable parameters can be used for input only keyword IN output only keyword OUT or input and output keyword VAR IN can only be used for array and record parameters Inside the procedure input parameters are read only Like local variables output parameters of pointer types and procedure types are initialized to NIL Other output parameters must be considered as undefined prior to the first assignment in the procedure The scope of a formal parameter extends from its declaration to the end of the procedure block in which it is declared A function
202. amisch Kunde Polymorphie und dynamisches Binden 11 2 Testwerkzeugmodul gebunden notBefore hat die Zeiteinheit Ticks und akzeptiert die speziellen Werte immediately f r sofortiges Ausf hren von a Do im laufenden Kommando und now f r das Ausf hren von a Do nach dem laufenden Kommando Ticks liefert die aktuelle Zeit in Ticks resolution gibt die Anzahl der Ticks pro Sekunde an RemoveAction a entfernt a sofern es registriert ist GetTypeName rec type schreibt den Typnamen von rec in der Form Modulname Typname in type rec ist eine beliebige Verbund oder Verbundzeigervariable Mit dem Standardtyp ANYREC sind alle Verbundtypen vertr glich er fungiert als abstrakte Basisklasse aller Klassen Wie nutzt UtilitiesRepeater diese Dienste Es definiert eine private konkrete Erweiterungsklasse von Services Action TYPE Secretary POINTER TO RECORD Services Action action Action name ARRAY nameLength OF CHAR count INTEGER next Secretary END Das Feld action realisiert die Komposition des Entwurfsmodells Bild 11 6 Als polymorpher Zeiger bezieht es sich auf ein Objekt einer Erweiterung von UtilitiesRepeater Action Secretary implemen tiert das von Services Action geerbte Do PROCEDURE secretary Secretary Do BEGIN ASSERT secretary action NIL BEC invariantClass secretary action Do ING secretary count Services DoLater secretary Services Ticks nextTime Services res
203. an Softwarequalit ts merkmale definiert von denen wir einige wichtige vorstellen um uns in folgenden Kapiteln darauf beziehen zu k nnen Wir unterscheiden dabei drei Gruppen Funktionale Qualit tsmerkmale beziehen sich auf die externe Funktion der Software das durch ihre Schnittstellen festgelegte und beobachtbare Verhalten aus der Sicht des Benutzers Strukturelle Qualit tsmerkmale betreffen die interne Struk tur der Software die hinter ihren Schnittstellen verborgenen Implementationen aus der Sicht des Entwicklers Leistungsmerkmale beziehen sich auf die Leistungsfahigkeit performance der Software Qualit tsmerkmale sind graduell nicht bin r Programme wei sen mal mehr mal weniger davon auf Funktionale Qualit tsmerkmale Zuverl ssigkeit ist der Grad zu dem ein Softwareprodukt seine Aufgabe unter festgelegten Bedingungen und f r eine festge 47 3 48 Softwareentwicklung legte Zeit erf llt Benutzer wollen darauf vertrauen dass die Software fehlerfrei l uft und vern nftige Ergebnisse produziert Mehrere Merkmale fallen unter diesen Oberbegriff Korrektheit ist der Grad zu dem ein Softwareprodukt gestellte Anforderungen erf llt Formal ist ein Programm korrekt wenn seine Implementation seiner Spezifikation entspricht Daher kann man nicht ber Korrektheit reden wenn die Spezifikation fehlt Der Ablauf eines korrekten Programms liefert bei zul ssiger Eingabe korrekte Ausgabe Robu
204. andardprozedur Prozedurende dynamisches 116 statisches 116 Prozedurkopf 118 122 161 Prozedurrumpf 118 161 162 244 248 267 371 374 leerer 343 Prozess 81 Prozessor 49 53 55 56 81 84 Prozessorleistung 56 Prozessorzeit 49 50 291 Pr fling 287 288 293 296 312 334 fehlerfreier 294 Pr fung einer Invariante 123 124 einer Zusicherung 295 Pseudocode 45 55 155 166 190 public Dienst ffentlicher Merkmal exportiertes Punktschreibweise Notation Punktnotation Q Qualit t 47 84 Qualit tsmerkmal 47 50 153 funktionales 47 Leistungsmerkmal 47 49 strukturelles 47 48 Quantor 187 QUERIES 3 25 26 72 112 116 198 R read only export Export schreibgesch tzter Reaktionsf higkeit 293 REAL 18 Realisierung 52 146 receiver Empf nger Rechner 9 11 13 41 42 44 51 53 56 58 61 84 85 100 101 293 Rechnerarchitektur 58 85 Recht 25 26 38 112 259 Schreibrecht 165 RECORD 163 164 245 REDEFINES 257 267 Redefinition 257 260 265 285 336 338 340 342 349 353 Referenz bergabe 175 176 Regel 4 5 53 EBNF Regel 64 67 70 72 75 77 85 148 270 284 Einsetzungsregel 258 269 Namenregel 92 96 Syntaxregel 30 59 272 Transformationsregel 3 Typvertr glichkeitsregel 268 Verhaltensregel 58 Register 54 55 Reihenfolge von Aufrufen 226 von Bedingungen 157 von Knoten 314 von Operanden 219 von Operatoren 219 von Teilaufgaben 226 R
205. andom Uniforml 2 maxltemLength FOR index 0 TO LEN result set 1 DO result set index WipeOut END Out OpenNew TestSetsOfString RETURN result END New Commands PROCEDURE TestOnce BEGIN test Do END TestOnce PROCEDURE TestUntilBreak BEGIN Utilities Repeater UntilBreakDo test END TestUntilBreak 299 11 Dynamische Objektstrukturen PROCEDURE StartTest BEGIN 5 oS UtilitiesRepeater Start test END StartTest PROCEDURE StopTest BEGIN 5 Utilities Repeater Stop test END StopTest BEGIN ASSERT numberOfSets gt 3 BEC invariantModule ASSERT maxltemLength gt 2 BEC invariantModule 3 test New CLOSE 6 I StopTest END TestSetsOfString Die Nummern in der folgenden Liste von Bemerkungen ent sprechen den Nummern bei den Symbolen in Programm 11 4 1 N ist eine lokale Funktion von Do die einen zuf lligen Index f r ein Mengenobjekt ausw hlt N bewirkt einen Seiteneffekt via MathRandom Uniforml 2 Eine Zeichenkette zuf lliger L nge wird erzeugt mit Zufalls zeichen besetzt und einer zuf lligen Menge hinzugef gt 3 test ist ein Zeiger auf ein Test Objekt Die Funktion New erzeugt ein Test Objekt initialisiert es und liefert als Ergebnis einen Bezug auf das Objekt Bild 11 4 Test Objekt in New item gt 0X 0X 0X 0X vor der R
206. ar Hier hei t das Testmodul also TestSetsOfString Das Testwerkzeugmodul geh rt zum Dienstesubsystem Utilities und hei t UtilitiesRepeater 287 11 Dynamische Objektstrukturen 11 1 1 Erweitern Programm 11 1 Zusatzliche Merkmale der Mengenklasse 288 Wir gehen in folgenden Schritten vor 1 Den Priifling spezifizieren siehe 11 1 1 2 Das Testwerkzeug spezifizieren siehe 11 1 2 S 290 3 Das Testmodul spezifizieren und implementieren siehe 11 1 3 S 292 4 Das Testwerkzeug implementieren siehe Abschnitt 11 2 5 Den Pr fling implementieren siehe Abschnitt 11 3 Spezifikation des Mengenklassenmoduls In 10 3 1 S 261 haben wir die vom Modul ContainersSetsOfString bereitgestellte Mengenklasse Set benutzt Wir beschreiben hier ihre vollst ndige Schnittstelle in folgenden Abschnitten entwik keln wir ein Testmodul und eine Implementation dazu Da wir auf S 263 die im Cleo Programm 9 3 S 235 vorgestellte Schnittstelle von Set schon um eine Aktion f r die Differenz zweier Mengen erweitert haben erg nzen wir auch Aktionen f r die Mengenoperationen Vereinigung Durchschnitt und symmetrische Differenz Um die Erweiterung abzurunden f gen wir eine Abfrage IsDisjoint hinzu die pr ft ob zwei Men gen disjunkt sind Mittels IsDisjoint und dem bereits vorhandenen IsEmpty k nnen wir die Mengenoperationen partiell vertraglich spezifizieren Das Cleo Programm 11 1 zeigt die gegen ber Pro gramm 9
207. arable betrachten wir die Klasse Set f r Mengen geordneter Elemente Die Schnittstelle ihres Klassenmoduls zeigen wir in der kurzen Form die nur redefinierte und neu definierte Prozeduren einer Klasse auflistet DEFINITION ContainersSetsOfComparable IMPORT BasisGenerals TYPE Action POINTER TO ActionDesc ActionDesc ABSTRACT RECORD VAR action ActionDesc Do item BasisGenerals Comparable NEW ABSTRACT END Element BasisGenerals Comparable Set POINTER TO SetDesc SetDesc LIMITED RECORD BasisGenerals PartComparableDesc IN source SetDesc Clone Set VAR target SetDesc Copy IN source BasisGenerals AnyDesc IN a SetDesc Equal IN b BasisGenerals AnyDesc BOOLEAN IN set SetDesc ForAllDo VAR action ActionDesc NEW IN set SetDesc Has x BasisGenerals Comparable BOOLEAN NEW VAR target SetDesc InitDefault VAR target SetDesc InitRandom IN a SetDesc IsDisjoint IN b SetDesc BOOLEAN NEW En a ot IN set SetDesc IsEmpty BOOLEAN NEW IN a SetDesc LessEqual IN b BasisGenerals PartComparableDesc BOOLEAN VAR set SetDesc Put x BasisGenerals Comparable NEW VAR set SetDesc Remove x BasisGenerals Comparable NEW VAR a SetDesc SetDifference IN b c SetDesc NEW VAR a SetDesc Setintersection IN b c SetDesc NEW VAR a SetDesc SetSymDifference IN b c SetDesc NEW VAR a SetDesc SetUnion IN b c SetDesc NEW VAR set S
208. arget SetDesc Copy IN source SetDesc NEW BEGIN target root source root END Copy VAR oldB oldC SetDesc liefert die Ausf hrung der Anweisungen oldB Copy b oldC Copy c nach dem Zustand von Bild 11 20 diese Struktur a b x root oldB root c y root oldC root 5 Die Operation h ngt einen neuen Baum an a und damit b der alte Baum von b bleibt unter oldB erhalten Mit der R ckkehr aus der Prozedur wird er unerreichbar und der automatischen Spei cherbereinigung berlassen PROCEDURE VAR a SetDesc SetDifference IN b c SetDesc NEW VAR oldB oldC SetDesc BEGIN oldB Copy b oldC Copy c a root Difference b root c root a Checklnvariants ASSERT a IsDisjoint oldC BEC postcondSupplierOk ASSERT a lsEmpty OR oldB IsEmpty BEC postcondSupplierOk END SetDifference SymDifference 11 3 3 Programm 11 7 Klassenmodul fur Zeichenketten mengen is 11 3 Mengenklasse f r Zeichenketten Die symmetrische Differenz braucht keine lokale rekursive Tra versierungsprozedur da sie sich mit Vereinigung und Differenz darstellen lasst PROCEDURE SymDifference tree other Node Node BEGIN RETURN Union Difference tree other Difference other tree END SymDifference Implementation Es folgt das implementierte und dokumentierte Modul ContainersSetsOfString Es ist wichtig die Einschrankunge
209. arung einer gew hnlichen Prozedur mit zwei Para metern ist PROCEDURE Set newHour Hour newMinute Minute BEGIN Anweisungen END Set m Eine Funktionsprozedur oder Funktion steht f r eine ver nderliche Gr e sie ist von einem vereinbarten Typ und liefert einen berechneten Wert Der Begriff ist eine Abstraktion des Begriffs Ausdruck entsprechend ist ein Aufruf einer Funktion ein Ausdruck Ein Beispiel f r die Vereinbarung einer parameterlosen Funktion ist PROCEDURE TimelnMinutes Minute BEGIN Anweisungen RETURN Ausdruck END TimelnMinutes Syntaktisch streng genommen geh ren die Schl sselw rter CONST TYPE VAR und die Semikolons nicht zu den Vereinbarungen son dern zu einer Vereinbarungsfolge Konstanten und Variablen stellen konkrete Daten dar Typen Abstraktionen von Daten Prozeduren Abstraktionen von Algo rithmen Anweisungen Wir haben in Abschnitt 2 2 Aktionsaufrufe als Anweisungsart kennengelernt au erdem wissen wir seit Abschnitt 2 4 was eine Bedingung ist Nun kommen weitere Arten von Anweisun gen hinzu wobei wir zwischen elementaren und strukturierten Anweisungen unterscheiden Daneben gibt es noch zwei Steu eranweisungen Anweisungen sind Grundelemente von Algo rithmen Elementare Anweisungen sind die Zuweisung und der Proze duraufruf Jede Zuweisung hat als Ziel eine Variable Zu jedem Prozeduraufruf gibt es eine Vereinbarung einer Prozedur die gerufen wird und deren Anweisun
210. at Programmieren Sie eine Klasse Tasse in Component Pascal die der Spezifikation Programm 9 1 entspricht Wenden Sie dabei das Transformationsschema von 9 4 2 an Implementieren Sie Tasse so dass eine volle Tasse nach einer konstanten Anzahl von Schlucken geleert ist Kombinieren Sie die L sungen der Aufgaben 9 1 und 9 2 sodass die Klasse Kaffeeautomat die Klasse Tasse benutzt 249 9 Objektorientiertes Programmieren 250 10 1 Abstraktion Bild 10 1 Modell eines Warenautomaten Statische Klassenstrukturen Wir lernen Grundkonzepte des objektorientierten Programmie rens kennen indem wir berlegen was Kaffeeautomaten mit Fahrscheinautomaten Tassen mit Fahrscheinen gemein haben Mit den gewonnenen Erkenntnissen konstruieren wir ein Pro gramm das die Rechtschreibung eines Textes priift Fahrscheinautomaten In diesem Beispiel besorgen wir uns als Bahnfahrer einen Fahr schein Im Bahnhof finden wir mehrere Fahrscheinautomaten Sie sehen fast aus wie Kaffeeautomaten der wesentliche Unter schied ist dass sie Fahrscheine statt Kaffee liefern Sollen wir zum Modellieren Bild 9 1 S 229 kopieren und darin das Wort Kaffee durch Fahrschein ersetzen Besser ist gemeinsame Merkmale beider Automaten zu erkennen zu ver allgemeinern zu abstrahieren Stellen wir uns einen Automaten vor der Geld aufnimmt und etwas dafiir ausgibt eine Ware Dieser Warenautomat gleicht Bild 10 1 eingenommener Geld Betrag
211. atementSeq ELSIF Expr THEN StatementSeq ELSE StatementSeq END CASE Expr OF Case Case ELSE StatementSeq END WHILE Expr DO StatementSeq END REPEAT StatementSeq UNTIL Expr FOR ident Expr TO Expr BY ConstExpr DO StatementSeq END LOOP StatementSeq END WITH Guard DO StatementSeq Guard DO StatementSeq ELSE StatementSeq END EXIT RETURN Expr CaseLabels CaseLabels StatementSeq ConstExpr ConstExpr Qualident Qualident Expr SimpleExpr Relation SimpleExpr Term AddOp Term Factor MulOp Factor Designator number character string NIL Set Expr Factor Element Element Expr Expr J a lt lt gt gt IN IS OR DIV MOD amp Qualident ident ExprList Qualident ExprList Expr Expr IdentDef IdentDef ident ident ident 409 A Component Pascal Language Report 410 Appendix C Domains of Basic Types Type Domain BOOLEAN FALSE TRUE SHORTCHAR OX OFFX CHAR OX OFFFFX BYTE 128 127 SHORTINT 32768 32767 INTEGER 2147483648 2147483647 LONGINT 9223372036854775808 9223372036854775807 SHORTREAL 3 4E38 3 4E38 INF 32 bit IEEE format REAL 1 8E308 1 8E308 INF 64 bit IEEE format SET set of 0
212. ation 158 159 Einzelobjekt 38 369 j Empf ngerobjekt 266 289 Vektoroperation 206 210 erreichbares 307 326 216 225 Fabrikobjekt 368 vererbbare 342 interaktives 110 Operator 71 120 169 342 lokales 245 boolescher 218 Mengenobjekt 296 300 337 Gleichheitsoperator 128 passives 110 Modulo Operator 35 selektiertes 170 Negationsoperator 122 statisches 376 Optimierung 50 129 143 213 222 typisches 366 238 283 unerreichbares 307 Option 271 zuf lliges 353 361 ener Anweisung 77 Objektdiagramm 367 368 eines EBNF Ausdrucks 65 Objektorientierung 249 284 OR 18 Objektstruktur 319 371 ORD 135 190 dynamische 278 287 289 Ordnung 60 146 252 321 323 376 304 312 313 334 366 alphabetische 316 368 partielle 335 337 rekursive 334 vollst ndige 316 335 337 unerreichbare 326 OUT 24 OLD 29 32 122 126 open array P Reihung offene Parameter 3 4 18 20 27 29 34 433 C Sachwortverzeichnis 434 37 38 45 75 76 79 86 103 113 116 120 129 154 159 172 177 183 224 230 233 243 247 253 256 264 266 268 279 283 289 293 294 318 320 352 aktueller 24 25 27 103 175 176 217 218 223 264 266 268 280 294 321 Ausgabeparameter 24 158 176 276 284 297 Ein Ausgabeparameter 24 158 177 223 233 244 267 279 Eingabeparameter 19 23 159 176 223 264 267 276 340 formaler 21 24 27 86 117 124 175 176 216 218 227 230 268 269 2
213. au er_Betrieb FALSE als auch Preis 0 gilt F r den Fall dass globale Variablen anders als defaultm ig zu initialisieren sind sieht Component Pascal den Initialisierungs teil des Moduls vor Im Beispiel k nnen wir programmieren MODULE 1Kaffeeautomat BEGIN initialisieren 1 END I1Kaffeeautomat Nach dem Laden des Moduls und der impliziten Initialisierung wird der explizite Initialisierungsteil ausgef hrt hier also initiali sieren 1 aufgerufen Auf S 30 sagen wir es sei die Aufgabe von initialisieren die Modulinvariante erstmals herzustellen und auf S 80 es sei der Zweck des Initialisierungsteils dies zu tun Dem nach liegen wir mit obigem Ansatz richtig Trotzdem diskutie ren wir eine Alternative weil die Variable au er_Betrieb oben eine k mmerliche Rolle spielt Sie ist nach dem Initialisieren FALSE und es ist nirgends spezifiziert dass sie einmal TRUE werden k nnte Programmieren wir dagegen MODULE I1Kaffeeautomat BEGIN au er_Betrieb TRUE END I1Kaffeeautomat so gilt nach dem Laden und Initialisieren des Moduls au er_Betrieb TRUE eingenommener_Betrag 0 Preis 0 gesammelter_Betrag 0 Die in Programm 6 2 spezifizierte Modulinvariante ist damit noch nicht erfiillt aber in diesem Modulzustand ist nur ein Auf ruf von initialisieren erlaubt Ein implementierter Kaffeeautomat Um den Kaffeeautomaten zu implementieren miissen wir einige Zuweisungen in die freigelassenen Anweisun
214. auf 209 user Benutzer uses relation Beziehung Benutzungsbe ziehung V value Wert VAR 75 112 115 127 129 130 138 158 165 188 190 201 208 210 217 243 245 275 277 Variable 45 60 75 76 80 114 115 127 128 130 131 136 137 151 161 164 166 174 176 188 189 191 192 201 217 247 268 271 275 279 283 311 321 boolesche 134 dynamische 276 280 284 exportierte 143 ganzzahlige 129 193 globale 130 131 150 151 224 275 implizite 193 indizierte 136 137 Laufvariable Z hlvariable lesbare 144 lokale 130 152 162 168 175 222 275 283 321 private 115 243 304 Puffervariable 213 qualifizierte 164 165 referenzierte 276 278 Reihungsvariable 135 276 278 Schleifenvariable 193 214 schreibbare 144 schreibgesch tzte 113 114 127 143 144 147 194 statische 275 unerreichbare 278 279 Verbundvariable 165 303 Verbundzeigervariable 303 Z hlvariable 193 194 Zeigervariable 275 280 Vater 314 Vektor 206 216 221 243 ganzzahliger 208 reeller 208 Verallgemeinern 4 266 Verbalisieren 5 34 42 Verbund 165 169 176 240 247 248 erweiterbarer 248 Vereinbarung 20 24 28 38 45 75 113 114 129 130 134 136 138 141 148 190 218 236 238 243 245 267 275 C Sachwortverzeichnis 283 284 325 326 354 361 376 einer Abfrage 21 einer Aktion 21 23 einer Funktion 76 115 einer Gr e 37 einer Klasse 23
215. aum repro duziert Die Knoten des Kopiebaums zeigen aber auf diesel ben Elemente wie die Knoten des Originalbaums da die Baumprozedur Put nur Zeiger auf Elemente bernimmt F r eine tiefere aber nicht unbedingt tiefste Mengenkopie ersetzen wir in Put tree item item durch tree item item Clone Im Falle einer Menge mit String Objekten zeigen dann ein Ele ment des Originals und seine Kopie im Kopiebaum auf die selbe Zeichenkette da das Clone von String nur seicht kopiert 4 Write gibt die Menge aus indem es alle ihre Elemente ausgibt Da die Baumprozedur Write den Baum nach Inorder traver siert gibt es die Elemente sortiert aus 361 12 Vom Entwerfen zum Testen 12 1 9 12 1 10 Polymorpher Beh lter Testkonzept Fragile Basisklasse 12 2 362 5 Dieses Clone stimmt textuell bis auf den Typnamen des Empf ngers und des Resultats mit dem Clone von Containers Strings String berein siehe S 351 und S 353 Alle anderen Teile von Programm 12 6 folgen Mustern die wir bereits in anderen Programmen kennengelernt haben Anpassen von Kundenmodulen Kundenmodule die ContainersSetsOfString benutzen sind Test SetsOfString Programm 11 4 S 298 und I1WordChecker Programm 10 7 S 280 Sie an die Benutzung von ContainersSetsOfComparable und ContainersStrings anzupassen erfordert nur kleine nderun gen Diese Arbeit empfehlen wir dem Leser als bung siehe Aufgaben 12 1 und 12 2 Fazit
216. automat mit Dialogbox Hingegen ist f r die Ausgabe der Anzeigefelder eine Prozedur des Standardmoduls Dialog zu nutzen Der Aufruf Dialog Update Anzeige aktualisiert die Felder der Dialogbox en die an Anzeige gebun den sind mit den Werten von Anzeige Dialog Update ist nur aufzu rufen wenn sich der Zustand von Anzeige durch Anweisungen ge ndert hat Implementation Wir stellen das fertige Kommandomodul vor bevor wir offene Details besprechen MODULE I1Kaffeeautomat_DialogBox IMPORT Dialog Strings KA 11 Kaffeeautomat VAR Anzeige RECORD auBer_Betrieb BOOLEAN Betrag eingenommener_Betrag Preis gesammelter_Betrag INTEGER Meldung ARRAY 60 OF CHAR END PROCEDURE Zustand_ bertragen BEGIN Anzeige auBer_Betrieb KA auBer_Betrieb Anzeige eingenommener_Betrag KA eingenommener_Betrag Anzeige Preis KA Preis Anzeige gesammelter_Betrag KA gesammelter_Betrag Dialog Update Anzeige END Zustand_ bertragen Kommandos PROCEDURE initialisieren BEGIN IF Anzeige Preis lt 0 THEN Anzeige Meldung Bitte geben Sie einen positiven Preis ein ELSE KA initialisieren Anzeige Preis Anzeige Meldung Neuer Preis akzeptiert END Zustand_ bertragen END initialisieren 167 7 Ein und Ausgabe PROCEDURE Geld_einnehmen BEGIN IF KA auBer_Betrieb THEN Anzeige Meldung Bitte dr cken Sie zuerst auf initialisieren ELSIF Anzeige Betrag l
217. b cher und bersichtsarti kel Literaturhinweise gebe ich im Text durch Nummern des Literaturverzeichnisses wie 30 an Neben zahlreichen Querver weisen soll das ausf hrliche Sachwortverzeichnis dem Leser helfen sich schnell ber gesuchte Begriffe zu informieren Bezeichnungen besonders wichtiger Begriffe und neu einge f hrte Bezeichnungen hebe ich bei ihrem ersten Auftreten bzw am Ort ihrer Definition durch Fettdruck hervor Andere wich tige aber anderswo definierte Bezeichnungen in der Literatur verwendete Synonyme und englische Bezeichnungen erschei nen kursiv Die Arialschrift verwende ich f r W rter formaler Spra chen z B f r Programmfragmente formale Spezifikationen oder Kommando Ein Ausgaben an einer Benutzungsoberfl che Einzelne Zeilen markiere ich mit speziellen Symbolen weist auf etwas Wichtiges oder nachfolgend Erl utertes hin rgert sich ber eine mangelhafte Programmstelle oder etwas Nachteiliges erfreut sich an der korrigierten Programmstelle oder etwas Vor teilhaftem warnt vor einer fehlerhaften Programmstelle oder einem gefahr lichen Konstrukt Der Text folgt der neuen deutschen Rechtschreibung Modelle Spezifikationen und Programme formuliere ich englisch Die Griinde daftir sind vielschichtig Programmiersprachen orientie ren sich am Englischen Englisch ist international verbreitet in vielen Firmen Dokumentationssprache und wird durch die Glo balisierung in der Praxis von Software
218. barungen wird u a Preis unver nderlich an den Typ INTEGER gebunden Die Bindung einer Variable an einen Wert erfolgt nicht wie bei einer Konstanten einmalig bei der Vereinbarung sondern beliebig oft mittels Anweisungen Zuweisungen und Prozeduraufrufen die Zuweisungen enthal ten siehe 6 3 1 Die Exportmarke an den Namen bewirkt schreibgeschiitz ten read only Export d h Kunden d rfen lesend auf diese Variablen zugreifen aber nicht schreibend siehe 6 3 1 Jede der vier Variablen erh lt zur Laufzeit einen Speicherplatz au er _Betrieb FALSE eingenommener_Betrag 30 BOOLEAN INTEGER Preis 60 gesammelter_Betrag 120 INTEGER INTEGER Bild 6 3 Speicherplatz zu Variable allgemein 6 1 4 3 Cleo Component Pascal 6 1 Von Cleo zu Component Pascal Schritt 1 Die Gr e des Speicherplatzes ist durch den Typ der Variable festgelegt Der Speicherplatz muss einen beliebigen Wert aus dem Wertebereich des Typs aufnehmen k nnen daher kann er aus einigen aufeinander folgenden Speicherzellen bestehen Die Adresse einer Variable ist die Adresse der ersten Speicherzelle ihres Speicherplatzes Variablenname Wert Typ Generell gilt die Transformation QUERIES VAR variable Abfrage Typ variable Abfrage Typ Funktionen Abfragen mit Parametern sind stets in Funktionen zu transfor mieren parameterlose Abfragen lassen sich alternativ als Varia ble
219. be Kaffee_ausgeben IKaffeeautornat_EinAusgabe Geld_zur ckgeben u Angenommen 1Kaffeeautomat_EinAusgabe ist implementiert und bersetzt Klicken wir auf das Aufrufsymbol vor Kaffee_ausgeben so schreckt uns kein Trapfenster wie in Abschnitt 7 1 sondern der Kommandoablauf akzeptiert den Aufruf und gibt einen freundlichen Hinweis in das Log Fenster freilich ohne Kaffee herauszur cken Bild 7 7 Ausgabe von Kaffee_ausgeben Bild 7 8 Eingabe von Preis Bild 7 9 Ausgabe von initialisieren mit akzeptiertem Preis 7 2 2 7 2 Kaffeeautomat mit einfacher Ein Ausgabe Bitte rufen Sie zuerst intialisieren auf al Folgen wir dem Hinweis und klicken auf das Aufrufsymbol vor initialisieren so erscheint die Meldung Bitte geben Sie einen positiven Preis ein Der Kommandoablauf hat versucht vom Anfang des Mentid okuments eine Ganzzahl zu lesen und ist damit gescheitert daher diese Ausgabe Der Preis eine positive Ganzzahl muss als Text im aktiven Fenster stehen und ihr Anfang oder die Leer zeichen davor miissen markiert sein Katfeesutomat_EmAusgabe intislisieran Diesmal funktioniert die Eingabe des Preises initialisieren gibt den Anfangszustand des Kaffeeautomaten aus Nkafeeautomat_Eindusgabe au er Betrieb nein eingenammener Betrag Preig gesammeter Betrag Die anderen Kommandos arbeiten hnlich was wir durch Pro bieren erfahren k nnen Entwurf Ohne Abfragen besitzt 1Kaffeeautomat_EinAus
220. behandeln wir in 7 4 2 S 175 Allgemein gilt die Transformation ACTIONS Aktionsname formale Parameter PROCEDURE Aktionsname formale Parameter BEGIN END Aktionsname Ein spezifizierter Kaffeeautomat Wir haben Details des Transformationsschritts Bild 6 1 1 erl u tert und betrachten den erreichten Zwischenzustand des Kaffee automatenmoduls bevor wir die Prozeduren im Schritt 2 ver traglich spezifizieren und im Schritt 3 implementieren d h mit R mpfen versehen MODULE I1Kaffeeautomat Queries VAR auBer_Betrieb BOOLEAN eingenommener_Betrag Preis gesammelter_Betrag INTEGER Actions PROCEDURE initialisieren neuer_Preis INTEGER END initialisieren PROCEDURE Geld_einnehmen Betrag INTEGER END Geld_einnehmen PROCEDURE Kaffee_ausgeben END Kaffee_ausgeben PROCEDURE Geld_zur ckgeben END Geld_zur ckgeben END I1Kaffeeautomat Das Component Pascal Programm 6 1 korrespondiert mit der syntaktischen Cleo Spezifikation Programm 2 1 S 19 Es ist abgesehen von den beiden Gliederungskommentaren die ktir zeste tibersetzbare Fassung Der Ubersetzer akzeptiert dieses Modul als syntaktisch korrekt und erzeugt daraus eine Schnitt stellen und eine Objektcodedatei Wir ffnen die Schnittstellen datei mit dem Browser wie in 5 3 3 S 94 beschrieben 117 6 Vom Spezifizieren zum Implementieren Bild 6 4 Schnittstelle von I1Kaffeeautomat Prinzip der Tre
221. beiten sind ist ReadNonword komplett Dagegen muss ReadWord das erkannte Wort registrieren und am besten an den Aufrufer bergeben es erh lt die Signatur PROCEDURE ReadWord OUT word ContainersSetsOfString Element Sein Aufrufer ReadText hat schon auf S 263 die Signatur PROCEDURE ReadText OUT words ContainersSetsOfString SetDesc erhalten Es bernimmt von ReadWord einzelne W rter f gt sie in die Menge words ein und bergibt die Menge an seinen Aufrufer Zeiger Um ReadWord weiter zu entwickeln m ssen wir die Vereinba rung des Typs ContainersSetsOfString Element kennen Durch TYPE Element POINTER TO ARRAY OF CHAR ist Element ein Zeigertyp auf eine offene Reihung von Zeichen Ein Zeiger pointer ist ein expliziter Bezug Mit Referenzpara metern kennen wir bereits implizite Bez ge siehe 7 4 2 S 175 Zeiger sind mit Querverweisen in einem Buch vergleichbar Der Querverweis S 12 ist nicht die Seite 12 sondern ein Bezug darauf Solche Verweise erlauben es dem Autor sich auf einen Inhalt zu beziehen ohne diesen an die Verweisstelle zu kopie ren Als Preis daf r muss der Leser bl ttern um den verwiese nen Inhalt zu erfahren Ein Zeigertyp wird aus einem Zeigerbasistyp konstruiert indem diesem das Referenzierungssymbol POINTER TO voran gestellt wird POINTER TO Zeigerbasistyp Der Zeigerbasistyp kann ein Reihungs oder Verbundtyp sein Die folgenden Ausf hrungen erl utern wir exemplarisch mit
222. benut zen charSet Has intSet Put 2 3 4 Tassenmenge Remove mein_Haferl Vom Modul zur Klasse Wir haben gesehen dass der Schritt vom Modul zur Klasse auf der Ebene der Spezifikation ganz leicht ist Allgemein gilt in Cleo die Transformation MODULE Modulname CLASS Klassenname TYPES TYPES Vereinbarungen von Typen Vereinbarungen von Typen QUERIES QUERIES Vereinbarungen von Abfragen Vereinbarungen von Abfragen ACTIONS ACTIONS Vereinbarungen von Aktionen Vereinbarungen von Aktionen INVARIANTS INVARIANTS Invarianten Invarianten END Moduiname END Klassenname Vor uns liegen zwei Schritte in zwei Dimensionen Von der Spe zifikationssprache Cleo zur Implementationssprache Compo nent Pascal und vom Component Pascal Modul zur Compo nent Pascal Klasse Bild 9 5 stellt die Transformationsschritte zusammen Bild 9 5 Transformation vom Modul zur Klasse 9 3 Vom Modul zur Klasse Cleo Component Pascal Kapitel 6 Modul MODULE Bw MODULE Kapitel 2 9 3 9 5 9 4 Klasse CLASS B RECORD Gemeinsamkeiten Konzentrieren wir uns zun chst auf die wesentlichen Gemein samkeiten von Modulen und Klassen bevor wir uns mit Details befassen Module und Klassen sind Einheiten der Modellierung und Strukturierung von Software die jeweils einen bestimmten Zweck erf llen Module modellieren Aufgaben Klassen Dinge eines Anwendungsbereichs Module und Klassen folgen dem Prinzip der Trennung von Schnittstelle und Implementati
223. bfrage Has ins Spiel kommt Die Menge ist leer Kein Zeichen ist in der Menge enthalten F r keinen Wert x CHAR gilt Has x F r alle Werte x CHAR gilt nicht Has x In erweiterter Cleo Notation lautet die Spezifikation ACTIONS WipeOut POST FOR_ALL x CHAR IT_HOLDS NOT Has x Die Nachbedingung lasst sich nicht mit Mitteln der Aussagenlo gik als boolescher Ausdruck formulieren sondern bedarf der 197 8 Strukturiertes und modulares Programmieren Ausdrucksmittel der Pr dikatenlogik erster Stufe Component Pascal verf gt nicht ber diese Ausdrucksmittel Die Alterna tive ist eine weitere Abfrage einzuf hren in Cleo Notation Programm 8 3 QUERIES Spezifikation von IsEmpty BOOLEAN Diensten der Has IN x CHAR BOOLEAN Zeichenmenge POST result IMPLIES NOT IsEmpty ACTIONS WipeOut POST IsEmpty Damit k nnen wir Has teilweise spezifizieren result bezeichnet das von Has gelieferte Ergebnis ist es TRUE d h ist das Element x in der Menge enthalten so ist die Menge nicht leer WipeOut ist vollst ndig mittels IsEmpty spezifiziert Daf r ist jetzt IsEmpty nicht formal spezifiziert Implementieren IsEmpty transformieren wir in eine parameterlose Component Pascal Funktion siehe 6 1 4 3 S 115 PROCEDURE IsEmpty BOOLEAN Die Zeichenmenge ist genau dann leer wenn alle SET Elemente der implementierenden Reihung set leer sind set 0 amp set 1 amp amp
224. bfrage des Moduls TextControllers liefert einen Bezug auf das Con troller Objekt des aktiven Textfensters falls es existiert Somit erh lt der Zeiger controller seinen Wert durch die Zuweisung controller TextControllers Focus Das Controller Objekt hat einen Zeiger text auf sein Model Objekt und einen hier nicht dargestellten Zeiger view auf sein View Objekt model controller text kopiert den Model Zeiger nach model Das Verkn pfen des Scanner Objekts mit dem Model Objekt leistet der Aufruf scanner ConnectTo model der intern etwa zur Zuweisung scanner rider model NewReader f hrt in der die Reader Fabrikfunktion von Model ein neues Rea der Objekt erzeugt und zum Reiter des Scanner Objekts auf der Basis des Model Objekts macht Im weiteren Verlauf benutzt das Scanner Objekt sein Reader Objekt um seine Operationen zum Lesen formatierter Daten in Operationen seines Reader Objekts zum Lesen roher Daten umzusetzen 367 12 Vom Entwerfen zum Testen 12 2 4 Bild 12 13 Klassendiagramm zur Ausgabe Zusammengesetztes Dokument Bild 12 14 Objektdiagramm zur Ausgabe Fabrik 368 Textausgabe Der Entwurf der Ausgabe hnelt dem der Eingabe siehe Bild 12 11 doch bernimmt hier die Sicht anstelle des Interaktors eine wesentliche Rolle TextMappers Formatter TextViews View TextModels Writer Q TextRulers Ruler TextModels Model Die
225. bjekten siehe S 37 Anzeige auger_Betrieb FALSE BOOLEAN Betrag 18 INTEGER eingenommener_Betrag 50 INTEGER Preis 70 INTEGER gesammelter_Betrag 210 INTEGER Meldung Bitte geben ARRAY 60 OF CHAR Da der Typ einer Variable die zul ssigen Operationen bestimmt sind mit qualifizierten Variablen die Verbundfelder bezeichnen alle Operationen m glich die der Feldtyp erlaubt also insbe sondere Zuweisungen und Parameter bergaben Die Verbundvariable Anzeige wird im Kommandomodul I1Kaffeeautomat_DialogBox vereinbart und repr sentiert dort die Ein Ausgabefelder einer Dialogbox Die Dialogbox muss auf den Verbund und seine einzelnen Felder zugreifen k nnen Component Pascal erlaubt es die Exportart f r jedes Verbund feld einzeln festzulegen Im Beispiel muss die Dialogbox die Fel der Betrag und Preis zur Eingabe nutzen k nnen sie sind daher mit Schreibrecht zu exportieren Die anderen Felder werden nur zur Ausgabe benutzt und daher schreibgesch tzt exportiert Die Verbundvariable als Ganzes ist schreibbar zu exportieren weil wenigstens ein Feld Schreibrecht fordert 165 7 Ein und Ausgabe Konflikt 7 3 2 Entwurf des Algorithmus 166 VAR Anzeige RECORD auBer_Betrieb BOOLEAN Betrag eingenommener_Betrag Preis gesammelter_Betrag INTEGER Meldung ARRAY 60 OF CHAR END Leitlinie 6 3 S 144 fordert Variablen nur schreibgeschiitzt zu exportieren Hi
226. c type of v Note that this may be a different method than the one bound to the static type of v vis passed to M s receiver according to the parameter passing rules specified in Chapter 10 1 If r is a receiver parameter declared with type T r M denotes the method M bound to the base type of T super call In a forward declaration of a method the receiver parameter must be of the same type as in the actual method declaration The formal parameter lists of both declarations must match App A and the names of corresponding parameters must be equal Methods marked with are implement only exported Such a method can be redefined in any importing module but can only be called within the module containing the method declaration A Component Pascal Language Report Currently the compiler also allows super calls to implement only methods outside of their defining module This is a tempo rary feature to make migration easier Examples PROCEDURE t Tree Insert node Tree NEW EXTENSIBLE VAR p father Tree BEGIN p t REPEAT father p IF node key p key THEN RETURN END IF node key lt p key THEN p p left ELSE p p right END UNTIL p NIL IF node key lt father key THEN father left node ELSE father right node END node left NIL node right NIL END Insert PROCEDURE t CenterTree Insert node Tree redefinition BEGIN Writelnt node CenterTree width t Insert node
227. ch einige Prozeduren sind schon konkret und nicht redefinierbar d h final Bei den Relationen sind Equal und LessEqual abstrakt die anderen Relationen und SetMin und SetMax h ngen von ihnen nach festen Regeln ab und sind entsprechend implementiert Die implementierte Prozedur Swap ruft die abstrakten Prozedu ren Clone und Copy auf Dieser Programmierstil beruht auf Polymorphie und dynamischem Binden 2 Die Fabrikfunktion Clone liefert einen Bezug auf ein neu erzeugtes Duplikat des Empf ngers Wegen ihres Seitenef fekts darf sie nicht in Zusicherungen aufgerufen werden 3 Die nach dem Testverfahren von S 339 gestalteten Invarian tenpr fprozeduren formulieren Axiome und S tze als Zusi cherungen Mathematisch gesehen ist das Pr fen von S tzen berfl ssig softwarepraktisch erh hen mehr Zusicherungen die Chance Fehler zu entdecken Die Pr fprozedur einer Erweiterung ruft die Pr fprozedur ihrer Basisklasse auf Implementieren der Zeichenkettenklasse Als erste einfache konkrete Erweiterung zur Konzeptklasse Comparable betrachten wir die Klasse String f r Zeichenketten Die Schnittstelle ihres Klassenmoduls zeigen wir in der flachen 347 12 Vom Entwerfen zum Testen Programm 12 3 Flache Schnittstelle des Klassenmoduls f r Zeichenketten 1 I 348 Form die alle Prozeduren einer Klasse auflistet also geerbte redefinierte und neu definierte Da die qualifizierten langen Typnamen die Lesbarkeit reduzieren be
228. che Objektstrukturen Als Hauptaufgabe dieses Kapitels implementieren wir das Klas senmodul ContainersSetsOfString das wir im vorigen Kapitel zur L sung der Aufgabe der Rechtschreibpr fung benutzt haben Um es zu testen ben tigen wir weitere Module Beim Imple mentieren eines Testwerkzeugs lernen wir mit einer Liste das Konzept der dynamischen Objektstruktur kennen das wir beim Entwurf von ContainersSetsOfString entfalten Pr fling Testmodul und Testwerkzeug ContainersSetsOfString soll als Beh lterklassenmodul wiederver wendbar sein und muss deshalb sorgf ltig getestet werden Im Folgenden entwickeln wir ein allgemeines Testverfahren das wir exemplarisch auf ContainersSetsOfString anwenden Das Test verfahren basiert auf der Vertragsmethode ein wiederverwend bares Testwerkzeug unterst tzt es Zu einem Test geh ren im Wesentlichen drei Module deren Kunde Lieferant Beziehungen Bild 11 1 darstellt Testmodul benutzt benutzt Ein Pr fling ist ein zu testendes Modul Ein Testmodul ist ein spezielles Kommandomodul zum Testen eines Pr flings Das Testwerkzeug ist ein Modul das allgemeine von Pr f lingen und Testmodulen unabh ngige Teilaufgaben des Testens bernimmt Im Beispiel ist der Pr fling ContainersSetsOfString Testmodule ord nen wir dem Subsystem Test zu der Moduldateiname eines Test moduls ist der seines Pr flings Diese Konvention schlie t Namenskonflikte nicht aus ist aber brauchb
229. chleife ist eine rumpfgesteuerte Bedingungs schleife Der mit LOOP und END geklammerte Schleifenrumpf wird solange wiederholt bis er durch eine EXIT Anweisung ver lassen wird hnlich RETURN ist EXIT eine Steueranweisung die den Ablauf an anderer Stelle fortfahren l sst daher schreiben wir es per Programmierkonvention fett Die EXIT Anweisung beendet die innerste umfassende LOOP Schleife LOOP und EXIT sind nicht syntaktisch aber kontextuell aufeinander bezogen Die Semantik der LOOP Anweisung l sst sich mit Zusicherungen spezifizieren wobei a und c f r Anweisungen ohne EXIT und b f r eine seiteneffektfreie Abbruchbedingung stehen LOOP a IF b THEN EXIT END ASSERT b C END ASSERT b Der Entwurf des Eingabeschritts erh lt mit der LOOP Schleife die Gestalt LOOP In ReadRawChar c IF In failed THEN EXIT END INC frequency ORD c END Welche Entwurfsvariante ist besser 1 oder 2 Bei kopfgesteuerten Schleifen muss man Anweisungsfolgen die vor der Priifung der Schleifenbedingung wiederholt aus zuf hren sind zweimal hinschreiben Rumpfgesteuerte Schleifen sind flexibler mit ihnen l sst sich das Duplizieren von Code vermeiden Strenge Regeln strukturierten Programmierens verlangen von jedem Kontrollkonstrukt je genau eine Eintritts und Austrittsstelle und statisches und dynamisches Ende sollen zusammenfallen Demnach verbietet sich EXIT und LOOP Schleife berhaupt zu verwenden Die W
230. chnittstellen zu Datenbanken Standard Kommando Module Interpreter BlackBox Kern des Ger sts und Bibliothek Standard Dokument Programm Editor Schnittstellen zu MS Windows COM Component Object Model MS Standard f r Komponenten Werkzeug konvertiert Text in das XHTML Format F r die Beispielprogramme dieses Buchs und unserer Lehrver anstaltungen haben wir eine Reihe weiterer Subsysteme kreiert die wir in Tabelle 5 2 zusammenstellen Name Aufgabe Basis Elementare allgemein verwendbare Module Containers Beh lter Module und Klassen Graph Grafikmodule 1 Beispielmodule mit Aufgaben der Informatik Math Mathematische Module Test Module zum Testen anderer Module Utilities Verschiedene Dienstmodule 89 5 Die Entwicklungsumgebung BlackBox 5 2 Bild 5 1 BlackBox Verzeichnisstruktur 5 2 1 90 Dateiorganisation Module m ssen permanent im Dateisystem gespeichert sein BlackBox gibt dazu eine vierstufige Struktur vor die wir jetzt hinuntersteigen Wurzelverzeichnis BlackBox Subsysteme Dev 11 Mod Sym Code Module Dateien Hello odc Hello osf Hello ocf MyModule odc MyModule osf MyModule ocf MODULE DEFINITION 0D37A91F 11MyModule 11MyModule E8CB2654 Quelltext Schnittstelle Objektcode Wurzelverzeichnis Alle Dateien von BlackBox liegen innerhalb eines Verzeichnis baumes dessen Wurzel das Installationsverz
231. clared in its base type record s The base type of an abstract record must be abstract Alternatively a pointer type can be specified as the base type The record base type of the pointer is used as the base type of the declared record in this case A record which is an extension of a hidden i e non exported record type may not be exported Each record is implicitly an 385 A Component Pascal Language Report 386 extension of the predeclared type ANYREC ANYREC does not con tain any fields and can only be used in pointer and variable parameter declarations Summary of attributes attribute extension allocate none no yes EXTENSIBLE yes yes ABSTRACT yes no LIMITED in defining module only Examples of record type declarations RECORD day month year INTEGER END LIMITED RECORD name firstname ARRAY 32 OF CHAR age INTEGER salary REAL END 6 4 Pointer Types Variables of a pointer type P assume as values pointers to varia bles of some type T T is called the pointer base type of P and must be a record or array type Pointer types adopt the exten sion relation of their pointer base types if a type T1 is an exten sion of T and P1 is of type POINTER TO T1 then P1 is also an exten sion of P PointerType POINTER TO Type If p is a variable of type P POINTER TO T a call of the predeclared procedure NEW p see 10 3 allocates a variable of type T in free storage If T is a record type or an array type
232. d Qualident Qualident If v is a variable parameter of record type or a pointer variable and if it is of a static type TO the statement WITH v T1 DO S1 v T2 DO S2 ELSE S3 END has the following meaning if the dynamic type of v is T1 then the statement sequence S1 is executed where v is regarded as if it had the static type T1 else if the dynamic type of v is T2 then S2 is executed where v is regarded as if it had the static type T2 else S3 is executed T1 and T2 must be extensions of To If no type test is satisfied and if an else clause is missing the program is aborted Example WITH t CenterTree DO i t width c t subnode END A Component Pascal Language Report 10 Procedure Declarations A procedure declaration consists of a procedure heading and a pro cedure body The heading specifies the procedure identifier and the formal parameters For methods it also specifies the receiver parameter and the attributes see 10 2 The body contains decla rations and statements The procedure identifier is repeated at the end of the procedure declaration There are two kinds of procedures proper procedures and function procedures The latter are activated by a function designator as a constituent of an expression and yield a result that is an operand of the expression Proper procedures are activated by a proce dure call A procedure is a function procedure if its formal parameters specify a result type The body of a
233. d 312 317 Aufwandsabsch tzung 224 225 Ausdruck 22 24 27 28 45 65 76 113 116 127 128 130 136 142 175 193 218 268 271 297 298 arithmetischer 22 23 59 boolescher 29 120 189 197 219 227 228 232 EBNF Ausdruck 64 72 232 271 ganzzahliger 136 konstanter 135 136 193 OLD Ausdruck 29 289 pr dikatenlogischer 226 regul rer 45 232 233 relationaler 23 128 222 342 seiteneffektbehafteter 23 seiteneffektfreier 23 128 Teilausdruck 23 128 218 undefinierter 218 219 zusammengesetzter 23 Ausf hrbarkeit 9 15 Ausf hrung 25 28 61 101 107 325 326 Ablauf einer Aktion 239 einer Anweisung 298 353 einer Daueraktion 291 einer Operation 23 einer Schleife 191 193 eines Dienstes 29 31 123 eines Kommandoaufrufs 104 152 154 155 195 240 268 eines Moduls 99 eines Prozeduraufrufs 175 303 306 325 eines Pr flings 293 eines Tests 291 294 eines Zweigs 156 Ausf hrungszeit Laufzeit Ausgabe 11 13 53 100 103 155 158 159 162 165 166 417 C Sachwortverzeichnis 418 187 190 195 197 209 226 264 290 301 368 Daten Ausgabedaten Fehlerausgabe 93 grafische 201 205 214 312 sortierte 204 Standardausgabe 103 tabellierte 214 Testausgabe 93 295 textuelle 200 204 374 Ausgabestrom 157 162 195 374 Ausnahmebehandlung 126 Aussage 18 29 30 218 logische 32 pr dikatenlogische 187 Auswahl 7 45 156 271 An
234. d effizient zu reali sieren Das Entfernen eines Elements ist etwas schwieriger und fordert Laufzeit zum Suchen des Elements Der durchschnittli che Suchaufwand steigt linear mit der Lange der Liste Dies ist beim Testwerkzeug gleichgiiltig da es kaum mit vielen gleich zeitigen Dauertests beauftragt wird In anderen Anwendungen kann der Suchaufwand jedoch kritisch sein Mengenklasse fur Zeichenketten Das Mengenklassenmodul ContainersSetsOfString haben wir im Rechtschreibungspr fprogramm in 10 3 1 S 261 eingesetzt Seine Schnittstelle haben wir in 11 1 1 festgelegt um es als Priif ling in unserem Testszenarium zu benutzen Nun ist die innere Struktur der Klasse Set zu entwerfen und zu implementieren und zwar als dynamische Objektstruktur Eine Menge lasst sich als verkettete Liste realisieren wie wir bei der Registratur im Testwerkzeug gesehen haben Mengen von Zeichenketten k nnen aber umfangreich werden Denken wir etwa an das W rterbuch zum Pr fen der Rechtschreibung Ein 11 3 1 Graph Diagramm 11 3 1 1 Bild 11 11 Binarbaum 11 3 Mengenklasse f r Zeichenketten mal erstellt bleibt es relativ stabil aber eine oft benutzte Opera tion ist das Suchen eines Worts im W rterbuch Die Effizienz des Einf gens und Entfernens eines Elements ist also unkritisch aber das Suchen soll m glichst effizient sein Welche dynami sche Objektstruktur erf llt diese Anforderung Rekursive Objektstruktur Bin rbaum Abstrahi
235. d h seine Dienste m s sen aufgerufen werden Zur Laufzeit werden die Zusicherungen gepr ft verletzte Zusicherungen f hren zu Traps Traps decken Vertragsbr che auf die Stellen an denen die Implementation der vertraglichen Spezifikation widerspricht Unter einem Testfall verstehen wir den Aufruf eines Dienstes eines Pr flings wobei der Pr fling in einem bestimmten Zustand ist und der Dienst mit bestimmten aktuellen Parame terwerten versorgt wird Die Anzahl m glicher Testf lle ist i A so gro dass ein Test nur eine Teilmenge von Testfallen ausf h ren kann Ein solcher Test ist partiell und kann daher nicht nach weisen dass ein Pr fling fehlerfrei ist Wie entdeckt man mit m glichst wenig Testf llen und hoher Wahrscheinlichkeit m glichst viele Fehler Testf lle gezielt manuell zu konstruieren kann aufw ndig sein Dagegen ist es einfach und effektiv Testf lle mit automatischen Zufallsverfah ren auszuw hlen Wir sprechen dann von randomisierten Tests Ein sehr oft wiederholter Zufallstest ist ein Stresstest da er den Pr fling willk rlichen Testf llen aussetzt Testverfahren f r Klassen Wir beschreiben nun das Testverfahren in einzelnen Schritten mit Begriffen von Component Pascal und BlackBox Gegeben sei ein Klassenmodul SomeThings das eine Klasse Thing definiert Ent h lt das Modul mehrere Klassendefinitionen so wenden wir das Verfahren auf jede einzelne Klasse an 1 Vorbereiten des Pr flings SomeTh
236. daries type extension with methods dynamic loading of modules and garbage collection Type extension makes Component Pascal an object oriented lan guage An object is a variable of an abstract data type consisting of private data its state and procedures that operate on this data Abstract data types are declared as extensible records A Component Pascal Language Report Component Pascal covers most terms of object oriented lan guages by the established vocabulary of imperative languages in order to minimize the number of notions for similar concepts Complete type safety and the requirement of a dynamic object model make Component Pascal a component oriented lan guage This report is not intended as a programmer s tutorial It is intentionally kept concise Its function is to serve as a reference for programmers What remains unsaid is mostly left so inten tionally either because it can be derived from stated rules of the language or because it would require to commit the definition when a general commitment appears as unwise Appendix A defines some terms that are used to express the type checking rules of Component Pascal Where they appear in the text they are written in italics to indicate their special mean ing e g the same type It is recommended to minimize the use of procedure types and super calls since they are considered obsolete They are retained for the time being in order to simplify the use of existing
237. das zu ent fernende Element so leistet dieser rekursive Algorithmus das Gew nschte Falls der Baum nicht leer ist falls item kleiner als das Element der Wurzel ist entferne item aus dem linken Teilbaum sonst falls item gr er als das Element der Wurzel ist entferne item aus dem rechten Teilbaum sonst ist item an der Wurzel also falls der linke Teilbaum leer ist ersetze die Wurzel durch den rechten Teilbaum sonst falls der rechte Teilbaum leer ist ersetze die Wurzel durch den linken Teilbaum sonst sind beide Teilb ume nicht leer also lasse den linken Teilbaum an seiner Stelle entferne das kleinste Element aus dem rechten Teilbaum und setze es an die Stelle des zu entfernenden item an der Wurzel F r das Element im Knoten K ist das n chstgr ere Element gleich dem kleinsten Element im rechten Teilbaum von K Ent fernen wir beispielsweise mit diesem Algorithmus aus dem Baum von Bild 11 15 das Zeichen L so erhalten wir diesen Baum Die ersten vier F lle des Algorithmus sind leicht zu implemen tieren 323 11 Dynamische Objektstrukturen PROCEDURE Remove VAR tree Node item Element BEGIN ASSERT item NIL BEC precondPar2NotNil IF tree NIL THEN IF item lt tree item THEN Remove tree left item ELSIF item gt tree item THEN Remove tree right item ELSIF tree left NIL THEN tree tree right ELSIF tree right NIL THEN tree tree left ELSE MoveMin tree right tree item
238. de Bezeichnung klassenorientiertes Program mieren lauten doch hat sich die Bezeichnung objektorientiertes Programmieren verbreitet Von der Spezifikation zur Implementation Wir bereiten den Schritt von einer Cleo Klasse zu einer Compo nent Pascal Klasse vor siehe Bild 9 5 unten In Cleo stehen Module und Klassen als gleichberechtigte Ein heiten nebeneinander Ihre Texte sind in sich abgeschlossen und voneinander getrennt Nur die Benutzungsbeziehung verbindet Module und Klassen miteinander Modulks Modul Ls Klasse L1 Klasse L2 In Component Pascal sind Klassen Modulen untergeordnet Der Text einer Klasse ist Teil eines Moduls Zur Benutzungsbezie hung kommt die textuelle Schachtelung nesting hinzu In einem Modul k nnen beliebig viele Klassen vereinbart sein Dieser Ansatz erkl rt sich historisch aus der Weiterentwicklung von Modula und Oberon zu Component Pascal Aus der textuel len Schachtelung folgen aber Eigenschaften von Component 239 9 Objektorientiertes Programmieren Module als Komponenten Formel 9 3 Klasse als Verbundtyp 240 Pascal in denen es sich von anderen objektorientierten Sprachen unterscheidet und die hinsichtlich Komponentenorientierung interessant sind Mehrere Klassen die zusammenwirkend eine gemeinsame Aufgabe l sen k nnen in ein Modul gepackt werden um ihre logische Einheit auszudr cken Solche Module eignen sich gut als wiederverwendbare Komponenten Das
239. delader NI a a geladener _ Objektcode A ocf 4 geladener Objektcode B ocf_ Die Schnittstellendatei A osf enth lt also die Daten ber die sich die beiden Module A und B zur bersetzungszeit verst ndi gen die Definitionen der von A exportierten Merkmale Der bersetzer pr ft ob B die Merkmale von A richtig benutzt Schnittstellenfehler werden so zur bersetzungszeit erkannt Was passiert bei nderungen an den Modulen B ist unabh n gig von A nderbar d h nderungen an B haben keinen Einfluss auf A nur B muss neu bersetzt werden Wird A ge ndert so sind zwei F lle zu unterscheiden 1 Die Schnittstelle von A ist nicht von der nderung betroffen In diesem Fall erzeugt der bersetzer keine neue Schnittstel lendatei A osf die vorhandene Datei bleibt unver ndert Der bersetzer erzeugt nat rlich eine neue Codedatei A ocf B muss nicht neu bersetzt werden es kennt von A ja nur die Schnittstelle und diese ist gleich geblieben 2 Die Schnittstelle von A ist von der nderung betroffen In diesem Fall erzeugt der bersetzer sowohl eine neue Schnitt stellendatei A osf als auch eine Codedatei A ocf B muss nach Beispiel Version eines Merkmals 5 5 Getrennt bersetzen dynamisch laden bersetzt werden wenn sich Merkmale von A die B benutzt ge ndert haben Laden Der Lader transportiert den Inhalt von Objektcodedateien in den Hauptspeicher die Schnittstel
240. deln den Rand der grafischen Darstellung und den Namen des Ger ts in textuelle Klammern MODULE Kaffeeautomat END Kaffeeautomat Drei Punkte deuten stets etwas Fehlendes zu Erg nzen des an 2 Dienste teilen sich in Abfragen und Aktionen Sie haben Namen und k nnen Parameter haben siehe unten Wir bernehmen die Bezeichnungen aus Bild 1 1 als Namen Allerdings m ssen Namen hier eindeutig und daher zusam menh ngend sein anstelle eines Leerzeichens verbindet ein Unterstrich _ zwei Namenteile Abfrage 3 Abfragen geben Auskunft ber den Zustand eines Moduls ver ndern ihn aber nicht Sie liefern als Ergebnis result einen Wert value Wir modellieren Anzeigen als Abfragen die Liste leiten wir mit dem Schl sselwort QUERIES ein QUERIES eingenommener_Betrag Preis auBer_Betrieb gesammelter_Betrag Aktion 4 Aktionen ver ndern den Zustand eines Moduls liefern aber kein Ergebnis 1 Einf hrung Programm 1 1 Kaffeeautomat als Modul roh 1 2 Leitlinie 1 1 Modulare Zusammenfassung Druckkn pfe modellieren wir als Aktionen eingeleitet mit ACTIONS Wir versehen die Namen der Druckkn pfe wo n tig mit Parametern ACTIONS Geld_einnehmen Betrag Kaffee_ausgeben Geld_zur ckgeben initialisieren neuer _Preis Der Geldschlitz wird zu einem Parameter Betrag f r den Wert der eingeworfenen M nzen Doch Parameter gibt es nicht ohne Aktion daher der Druckknopf Geld einnehmen in
241. der Im Folgenden setzen wir voraus dass der Leser mit der grafi schen Benutzungsoberflache eines Betriebssystems wie Micro soft Windows oder Apple Mac OS der zugeh rigen Dateiver waltung und einem Editor vertraut ist BlackBox l uft gleicherma en auf diesen Plattformen und unter st tzt die Entwicklung portierbarer plattformunabh ngiger Softwaresysteme Die im Buch abgebildeten Bildschirmaus schnitte stammen von BlackBox Release 1 3 2 auf Windows NT 4 Bei sp teren Versionen oder auf anderen Plattformen kann sich ein unwesentlich anderes Erscheinungsbild ergeben Dem Leser empfehlen wir BlackBox auf dem eigenen PC zu installieren und die hier beschriebenen Handgriffe zu ben ber die Bezugsquellen informiert das Vorwort Module Subsysteme Komponenten Von 4 7 1 S 73 wissen wir dass sich ein Component Pascal Pro gramm aus Modulen zusammensetzt Die Anzahl der Module kann gro sein ja sie w chst Daher m chte man die Module bersichtlich organisieren Module sollen au erdem wiederver wendbar sein man will Module die andere Menschen andern orts entwickelt haben in eigenen Programmen benutzen Dabei k nnen Namenskonflikte auftreten Verschiedene gleichnamige Module sind nicht gleichzeitig benutzbar Module umbenennen ist l stig Um diese Probleme in den Griff zu bekommen zerlegt BlackBox die Menge der Module in Subsysteme BlackBox Menge von Subsystemen Subsystem Menge von Modulen Dokumenten und
242. der Assoziationen dar siehe Bild 6 11 nicht in Bild 6 10 Die Zahlen an den Kantenenden hei en Kardinalit ten sie geben an wieviele Objekte der Klasse am einen Kantenende mit wievielen Objekten der Klasse am anderen Kantenende in Beziehung stehen k nnen A Assoziation m n Ein A Objekt steht mit m bis n B Objekten in Beziehung Kardinalit ten r s Ein B Objekt steht mit r bis s A Objekten in Beziehung Die gerichteten gestrichelten Kanten vom Component Pascal zum Cleo Modul zur Abfrage und zur Aktion stellen eine spe zielle Assoziation die Implementationsbeziehung dar siehe Bild 6 12 Die Zahlen an den Kantenenden sind in Bild 6 10 z B so zu lesen Zu einem Cleo Modul kann es mehrere Component Pascal Module geben die sich in der Implementation unter scheiden Umgekehrt nehmen wir Eindeutigkeit an Bei einer Abfrage stehen drei m gliche Implementationen zur Auswahl A wird durch B implementiert A Pnprementadon B implementiert A B Weiter brauchen wir die Bestandteilbeziehung in Form der Komposition dargestellt durch eine gerichtete Kante mit einer schwarzen Raute auf der Seite des Ganzen und dem leeren Ende auf der Seite des Teils siehe Bild 6 13 Die Kardinalit ten in Bild 6 10 sind so zu lesen Zu einem Modul geh ren 0 bis n Dienste bzw exportierte Merkmale Ein Dienst bzw Merkmal geh rt zu genau einem Modul A Komposition B ist fester Bestandteil von A 145 6 Vom Spezifizieren zum Implementieren Bild
243. der Schnittstelle einer Zerlegungseinheit zu beschreiben Dabei ist genau und verst ndlich festzulegen was die Einheit machen soll Auch das Spezifizieren ist eine kreative T tigkeit die kein Rechner ausf hren kann In Abschnitt 2 4 haben wir bereits die Methode der Spezifikation durch Vertrag und die grundlegenden Begriffe Dienst Abfrage Aktion Vorbedingung Nachbedingung Invariante kennenge lernt diese Kenntnis vertiefen wir in den folgenden Kapiteln Die in Kapitel 2 verwendete Notation ist eine Spezifikationsspra che die wir Cleo nennen Die Syntax von Cleo spezifizieren wir in Kapitel 4 mit einer weiteren Notation der erweiterten Bak kus Naur Form Au erdem lernen wir dort als Darstellungsmit tel Syntaxdiagramme kennen S chrittweise Verfeinerung und strukturierte Programmierung 3 1 4 Implementations Sprache 3 1 5 3 1 F nf Ebenen Entwurf Zweck des Entwurfs Feinentwurf ist zu einer spezifizierten Softwareeinheit Datenstrukturen und Algorithmen zu den Diensten zu entwerfen Dabei ist festzulegen wie die Einheit ihre Auf gabe erf llen soll Ein Algorithmus ist eine Vorschrift die in endlich vielen Schritten eine Aufgabe l st Auch das Entwerfen ist eine kreative T tigkeit allerdings abh ngig von der Aufgabe und der Qualit t der Spezifikation Wurde gut spezifiziert so f llt der Entwurf g nstigenfalls wie der Apfel vom Baum Methoden des Entwurfs sind schrittweises Verfeinern u
244. der Tastendruck um das Modell entsprechend zu ndern Im Beispiel des Textes wechselt der Interaktor die Form des Mauszeigers wenn sich dieser in die Textsicht bewegt erfasst die Mauszeigerposition zum Klickzeitpunkt und registriert getippte Zeichen Eine wesentliche Entwurfsentscheidung des MVC Konzepts ist die Trennung der Sicht vom Modell Eine Sicht braucht ein Modell um es darzustellen Zu einem Modell kann es mehrere Sichten geben die dasselbe Modell unterschiedlich zeigen Zu 363 12 Vom Entwerfen zum Testen Text in BlackBox Bild 12 7 Model View Controller Entwurf fur Text in BlackBox Bild 12 8 Modell Klassenhierarchie in BlackBox 364 jeder Sicht geh rt ein Interaktor der mit der Sicht und dem zugeh rigen Modell interagiert BlackBox realisiert Varianten des MVC Konzepts f r Texte und f r Formen die haupts chlich f r Layouts von Dialogboxen genutzt werden F r Texte konkretisiert BlackBox Bild 12 6 so TextControllers Controller TextModels Model Die Klassen Model View und Controller in Bild 12 7 sind nicht kon kret sondern abstrakte Klassen des BlackBox Component Fra mework zu denen die Entwicklungsumgebung konkrete Stan darderweiterungen liefert siehe S 88 Jede der drei MVC Klassen ist Teil einer Klassenhierarchie deren Muster das Bei spiel der Model Klassen zeigt Konzeptklassen TextModels FormModels Schnittstellen klassen TextModels FormModels Imple
245. der kann langsamer laufen Effizienz kann auch mit anderen Qualit tsmerkmalen konfligie ren Dann ist abzuw gen welchen Preis man f r Zuverl ssig keit Benutzbarkeit Wartbarkeit nderbarkeit und Wiederver wendbarkeit zu zahlen bereit ist Zusammenfassung Wir haben eine erste Vorstellung des Softwareentwicklungs Prozesses gewonnen indem wir ihn in die f nf Ebenen Zer legung Spezifikation Entwurf Implementierung und Test gegliedert haben Beim Entwickeln von Software steht der Funktionsaspekt im Vordergrund Software soll Anwendern die Funktionen bie ten die sie bei ihren T tigkeiten brauchen Daneben ist auch der Qualit tsaspekt zu beachten Software soll die Qualit tsmerkmale aufweisen die sie zu einem n tz lichen Werkzeug f r Benutzer und einem pflegeleichten Pro dukt f r Entwickler machen Literaturhinweise Dieses Kapitel hat Themen der weit gef cherten Literatur ber Softwaretechnik angeschnitten Als Anregung zur weiterf hren den Lekt re seien exemplarisch die B cher von B U Pagel und H W Six 26 und G Pomberger und G Blaschek 27 genannt Die Anregung zu Bild 3 1 verdanken wir W Hesse et al 12 Den Ansatz der evolution ren partizipativen Softwareentwick lung hat C Floyd eingef hrt 37 Das Modell der nahtlosen Softwareentwicklung stammt von K Walden und J M Nerson 32 Umfassende Werke zur komponentenorientierten Soft wareentwicklung haben F Griffel 11 und C
246. die restlichen Konkreti sierungsschritte ein z B einen bersetzer f r eine Hochspra che Dies ist in Bild 3 1 der Weg oben nach rechts und dann nach unten In der Praxis verl uft der Weg oft irgendwo in der Mitte des Rechtecks doch der Weg oben rechts ist anzustreben Dieses Buch will einen kleinen Beitrag dazu leisten indem es Metho den der Abstraktion und der Spezifikation betont Fr her zerlegte man den Softwareentwicklungsprozess in von einander abgegrenzte starr aufeinander folgende Phasen Dage gen sind j ngere Softwareentwicklungsmodelle evolution r Komplexitat reduzieren durch abgestuftes Erweitern An Produkten und Dokumenten orientieren Komplexitat reduzieren durch Zerlegen und Kombinieren 3 1 F nf Ebenen Iterative Modelle erlauben bestimmte Arbeitsschritte so lange zu wiederholen bis das entwickelte Produkt gut genug ist Auch wir wollen die f nf Ebenen nicht strikt von links oben nach rechts unten wie eine Treppe hinuntergehen Fehler k n nen uns auf jeder Ebene unterlaufen Je fr her ein Fehler pas siert und je sp ter er erkannt wird umso aufw ndiger ist er zu beheben Um Fehler zu korrigieren muss man leicht auf vorher gehende Entwicklungsebenen zur ckkehren k nnen Bei inkrementellen Entwicklungsmodellen beginnt man mit einem Prototyp mit eingeschr nkter Funktionalit t und baut diesen etappenweise am besten partizipativ d h mit intensi ver Beteiligung zuk nftiger Benutzer
247. dule bieten Schnitt stellen mit parametrisierten Prozeduren wobei Funktionen Eigenschaften bergebener Materialien untersuchen und gew hnliche Prozeduren bergebene Materialien bearbeiten Bei MathVectorsOfiInteger sind die Materialien Vektoren Wir beschr nken uns hier darauf die Suchfunktion MinIndexOf zu implementieren f r die Sortierprozedur Sort siehe Abschnitt 8 4 f r andere Operationen Abschnitt 8 5 Zun chst sind aber ben tigte Sprachelemente vorzustellen Offene Reihungen Bei den Ein Ausgabemodulen In Out und UtilitiesOut ist uns der Parametertyp ARRAY OF CHAR f r Zeichenketten beliebiger L nge begegnet Hinter diesem konkreten Konstrukt steht ein allge meines Konzept Beim Typ einer Reihung kann die Angabe der L nge fehlen es handelt sich dann um eine offene Reihung open array Offene Reihungen d rfen nur verwendet werden als Typen formaler Parameter Basistypen von Zeigern siehe 10 3 5 S 274 Elementtypen offener Reihungen Offene Reihungen erlauben eine sichere Parameter bergabe von Reihungen ohne dass der formale Reihungsparameter die Typsicherheit Flexibilitat 82 Zeichen z hlen L nge der Reihung festlegt Wir erl utern das am Beispiel der in Programm 8 6 spezifizierten Sortierprozedur Sort Eine Component Pascal Prozedur mit einem Reihungsparame ter k nnte so vereinbart sein PROCEDURE Sort VAR x ARRAY 100 OF INTEGER Dieser Ansatz scheitert praktisch an der Typpr
248. dung in das Log Fenster aus UtilitiesRepeater 9456 calls of TestSetsOfString Test Do performed Dieses einfache Testmittel f hrt einen Dauertest im Vordergrund aus F r viele Tests gen gt das hat aber den Nachteil dass die Ausf hrung eines Dauertests andere Interaktionen mit Black Box ausschlie t Lange Dauertests l sst man g nstiger im Hin tergrund laufen Dazu dienen diese Prozeduren Start action registriert action um action Do wiederholt im Hin tergrund aufrufen zu lassen Start registriert ein bestimmtes Action Objekt nur einmal Stop action beendet die Ausf hrung von action Do im Hinter grund Stop ist effektlos wenn sich action nicht auf ein regi striertes Objekt bezieht oder NIL ist Zwischen den Aufrufen von Start und Stop ist BlackBox offen f r Interaktionen Ein Einzeltest Do sollte allerdings kurz dauern So lassen sich beliebig viele Dauertests nebenl ufig parallel zeit lich ineinander verschr nkt ausf hren Da man Dauertests zu beliebigen Zeitpunkten starten und stoppen kann ist eine Aus kunft ber die gerade laufenden Dauertests n tzlich Show zeigt alle im Hintergrund laufenden Daueraktionen etwa so im Log Fenster an UtilitiesRepeater next time ms 1 Action Name Number of Performed Calls of Do ContainersSetsOfComparable TestInvariants 1234 ContainersStrings TestInvariants 2468 TestSetsOfComparable Test 4567 TestSetsOfString Test 6183 Je mehr Dauertests laufen de
249. dur bergibt den Mengen baum und bernommene Parameter an die Baumprozedur folgt also dem Schema PROCEDURE VAR set SetDesc Name formale Parameter NEW BEGIN Name set root aktuelle Parameter END Name Die Mengenprozedur enth lt auch die Zusicherungen um ihren spezifizierten Vertrag zu pr fen Die Baumprozedur arbeitet als privater Zulieferer ohne Vertrag sozusagen auf Vertrauensbasis Sie wird beim Testen der Mengenprozedur mitgetestet Nun sind f r die einzelnen Dienste Algorithmen zu entwerfen und zu implementieren Als ersten Dienst w hlen wir die Abfrage IsEmpty deren Implementation trivial ist PROCEDURE IsEmpty tree Node BOOLEAN BEGIN RETURN tree NIL END IsEmpty PROCEDURE IN set SetDesc IsEmpty BOOLEAN NEW BEGIN RETURN IsEmpty set root END IsEmpty Als zweiten Dienst w hlen wir ForAllDo Seine Semantik haben wir auf S 266 mit einer Pseudo FOR Schleife beschrieben Statt einer Schleife setzen wir beim Baum die Inorder Traversierung ein siehe S 315 Die Baumprozedur ForAllDo erh lt eine lokale gew hnliche Prozedur Inorder die die geforderte Arbeit leistet indem sie sich rekursiv aufruft PROCEDURE ForAllDo tree Node VAR action ActionDesc PROCEDURE Inorder tree Node BEGIN IF tree NIL THEN Inorder tree left action Do tree item Inorder tree right END END Inorder BEGIN Inorder tree END ForAllDo Problem Checklnvariants 11
250. e BEGIN ASSERT newNextTime gt 0 BEC precondPar1 Nonnegative nextTime newNextTime END SetNextTime Actions PROCEDURE Write IN name ARRAY OF CHAR count INTEGER BEGIN StdLog Open StdLog Ln StdLog String UtilitiesRepeater StdLog Int count StdLog String calls of name Do performed StdLog Ln StdLog Ln END Write PROCEDURE UntilBreakDo action Action Ch Repeat calling action Do until the user presses the ESC key Output action name and other data VAR name ARRAY nameLength OF CHAR count INTEGER BEGIN ASSERT action NIL BEC precondPar1NotNil Services GetTypeName action name count 0 StdLog Open StdLog String Type ESC to stop calling name StdLog Ln REPEAT action Do INC count UNTIL XYplane ReadKey BasisASCII ESC Write name count END UntilBreakDo 309 11 Dynamische Objektstrukturen PROCEDURE Start action Action Start action in background call action Do every nextTime register name Effectless if action is already running VAR secretary Secretary BEGIN ASSERT action NIL BEC precondPar1 NotNil secretary first WHILE secretary NIL amp secretary action action DO secretary secretary next END IF secretary NIL THEN NEW secretary secretary action action Services GetTypeName action secretary name secretary next first first secretary Services DoLater secre
251. e Baum geordneter Bin r baum binary tree Baum Bin rbaum Bindelader dynamischer 80 101 102 106 108 Binder 62 83 101 Bindezeit 62 82 83 binding Bindung Bindung 61 62 80 109 dynamische 269 285 303 336 342 347 statische 81 342 Typbindung 18 23 25 27 28 38 128 268 von formalem an aktuellen Parameter 24 von Konstante an Wert 113 von Name an Typ 174 von Steuerelement an Modulmerkmal 170 von Variable an Typ 114 von Variable an Wert 114 127 Bit 6 54 138 Bitmuster 60 BlackBox 87 88 90 93 96 98 101 103 105 110 112 120 126 136 149 152 157 177 183 185 194 195 224 279 291 294 364 366 368 374 375 Servervariante 90 419 C Sachwortverzeichnis BlackBox Component Builder 81 85 87 BlackBox Component Framework 88 177 260 364 Blatt 314 317 322 BOOLEAN 18 breadth first traversal Traversierung Breitentra versierung Browser 88 94 96 110 117 158 Buchstabe 118 174 272 bug Fehlerursache BYTE 140 Byte 54 C C 58 60 80 84 126 129 136 C 58 80 84 126 129 136 259 279 342 call Aufruf callee Aufgerufener caller Aufrufer call stack Aufrufkeller carrier Tr ger Carrier Rider Mapper 363 365 366 375 CASE 297 298 CHAR 18 134 236 character Zeichen child Kind CHR 135 190 CLASS 36 37 72 230 235 236 245 254 257 264 266 288 Cleo 39 44 51 66 72 86 111 117 119 122 124
252. e x Out Ln Out Type steht f r eine der Schreiboperationen f r 11 Kaffeeautomat_EinAusgabe brauchen wir Out Int und Out String Implementation Wir haben die Puzzlest cke gesammelt die wir nun zusammen setzen um 1Kaffeeautomat_EinAusgabe zu implementieren 159 7 Ein und Ausgabe Programm 7 3 Kommandomodul fur Ein Ausgabe zu Kaffeeautomat 12 gt 3 3 3 3 160 MODULE I1Kaffeeautomat_EinAusgabe IMPORT In Out Dialog KA I1Kaffeeautomat Kommandos PROCEDURE Zustand_anzeigen CONST Stellen 4 BEGIN Out Open Out String I1 Kaffeeautomat_EinAusgabe Out Ln Out String auBer Betrieb IF KA auBer_Betrieb THEN Out String ja Out Ln ELSE Out String nein Out Ln Out String eingenommener Betrag Out Int KA eingenommener_Betrag Stellen Out Ln Out String Preis ys Out Int KA Preis Stellen Out Ln Out String gesammelter Betrag Out Int KA gesammelter_Betrag Stellen Out Ln END END Zustand_anzeigen PROCEDURE initialisieren VAR neuer_Preis INTEGER BEGIN In Open In Int neuer_Preis Out Open IF In Done OR neuer_Preis lt 0 THEN Out String Bitte geben Sie einen positiven Preis ein Out Ln ELSE KA initialisieren neuer_Preis Zustand_anzeigen END END initialisieren PROCEDURE Geld_einnehmen VAR Betrag INTEGER BEGIN In Open In Int Betrag Out Open IF KA au er_Betrieb THEN Out
253. e Component Pascal Implementation zu transformieren l sen wir in Abschnitt 11 3 wo wir mehr ber dynamische Objektstrukturen wissen Pro gramm 11 2 zeigt vorerst die syntaktische Schnittstelle in Com ponent Pascal DEFINITION ContainersSetsOfString TYPE Action POINTER TO ActionDesc ActionDesc ABSTRACT RECORD VAR action ActionDesc Do item Element NEW ABSTRACT END Element POINTER TO ARRAY OF CHAR Set POINTER TO SetDesc SetDesc EXTENSIBLE RECORD IN set SetDesc ForAllDo VAR action ActionDesc NEW IN set SetDesc Has x Element BOOLEAN NEW IN a SetDesc IsDisjoint IN b SetDesc BOOLEAN NEW IN set SetDesc IsEmpty BOOLEAN NEW VAR set SetDesc Put x Element NEW VAR set SetDesc Remove x Element NEW VAR a SetDesc SetDifference IN b c SetDesc NEW VAR a SetDesc Setintersection IN b c SetDesc NEW 289 11 Dynamische Objektstrukturen 11 1 2 Bild 11 2 Entwurfsmuster f r Testmodul und Testwerkzeug 290 VAR a SetDesc SetSymDifference IN b c SetDesc NEW VAR a SetDesc SetUnion IN b c SetDesc NEW VAR set SetDesc WipeOut NEW END END ContainersSetsOfSiring Die Klasse Set ist durch EXTENSIBLE als erweiterbar vereinbart Ihre Prozeduren sind jedoch nicht redefinierbar da ihnen das Attribut EXTENSIBLE fehlt d h sie sind final Das Klassenattribut EXTENSIBLE verhindert Zuweisungen mit Wertsemantik weil diese zu Verletzun
254. e Hyperver bindung aktivieren Beim Anlegen der Verbindung mit Tools gt Create Link muss die Selektion der EBNF Syntax lt CallSequence gt char lt gt entsprechen Entlader Ein Modul wird durch den Aufruf eines Kommandos geladen Oft werden dieselben Module fiir aufeinander folgende Kom mandoaufrufe gebraucht Es w re unsinnig ein Modul mit jedem Kommandoaufruf neu zu laden Deshalb bleiben gela dene Module im Speicher Module werden zwar automatisch geladen aber nicht automa tisch entladen Das System kann nicht wissen welche Module nicht mehr gebraucht werden das wei h chstens der Benut zer ndert ein Entwickler ein Modul und bersetzt es neu dann will er es wohl zum Testen ausf hren Bevor das Modul genauer die neue Version geladen werden kann muss die alte Version explizit entladen werden Zum Entladen gibt es zwei Meniibefehle es entl dt Dev Unload das Modul dessen Quelltext im aktiven Fenster steht Dev Unload Module List die Module deren Namen selektiert sind Im Log Fenster erscheint eine Erfolgs oder Misserfolgsmeldung zur Kommandoausf hrung Ein einzelnes Modul bersetzt und entl dt Dev gt Compile and Unload Gleichzeitiges Dr cken der Strg Taste und Anklicken eines Aufrufsymbols vor einem Komman doaufruf bewirkt Entladen und Neuladen des Kommandomo duls und Ausf hren des Kommandos Bild 5 15 Geladene Module Loaded Modules Texilinds Te klappers Te
255. e Klasse u nenenenenen 235 Programm 9 4 Zeichenmenge als Klasse in Modul 241 Programm 9 5 Schnittstelle der Zeichenmenge als Klasse 244 Programm 10 1 Beh lter als abstrakte Klasse neeenennneeennnnnnnnnnn 254 Programm 10 2 Tasse als erweiterter Beh lter unnnnnnneenen 254 Programm 10 3 Magnetkarte als erweiterter Beh lter 0 0 0 0 eee 255 Programm 10 4 Warenautomat aan es een studie 256 Programm 10 5 Kaffeeautomat als erweiterter Warenautomat 257 Programm 10 6 Fahrscheinautomat als erweiterter Warenautomat 257 Programm 10 7 Worterpriifer als Modul eee erence renee nee 280 Programm 11 1 Zus tzliche Merkmale der Mengenklasse unn 288 Programm 11 2 Schnittstelle des Mengenklassenmoduls ene 289 Programm 11 3 Schnittstelle des Testwerkzeugmoduls nenee 292 Programm 11 4 Testmodul f r Zeichenkettenmengen uueeeeenee 298 Programm 11 5 Schnittstelle des Standardmoduls Services reduziert 302 Programm 11 6 Testwerkzeugmodul eeneeeenenennnesenenn 308 xxxvii Programmverzeichnis 25 2 05 xxxviii Programm 11 7 Klassenmodul f r Zeichenkettenmengen uuunene 327 Programm 12 1 Schnittstelle des Konzeptklassenmoduls eee 342 Programm 12 2 Konzeptklassenmodul neseennessnnenensesnennnenn 343 Programm 12 3 Flache Schnittstelle des Klass
256. e in diesem Buch pr sentierte EBNF Notation stammt von N Wirth 30 34 Oberon und Oberon 2 sind in 22 23 24 und 30 beschrie ben Component Pascal in 40 Das einf hrende Programmier lehrbuch fiir Oberon mit einem Kapitel ber Oberon 2 von M Reiser und N Wirth 30 eignet sich gut fiir Anfanger Ebenfalls an Anf nger wendet sich E Nikitin 24 S Warford 40 liefert eine fundierte Einf hrung in das Programmieren die die F hig keiten der Entwicklungsumgebung BlackBox nutzt J R M hl bacher et al 23 f hren in Oberon 2 ein basierend auf der Ent wicklungsumgebung Pow der Universit t Linz H M ssenb ck 22 setzt Programmiererfahrung und Kenntnisse von Pascal Modula 2 oder Oberon voraus um in objektorientiertes Pro grammieren einzuf hren Zu den Programmiersprachen Oberon und Component Pascal findet man viele Informationen im Internet Alles ber Oberon bietet The Oberon Webring 43 Einzelne elektronische Quellen sind 41 42 44 45 46 47 48 Die Oberon Newsgroup diskutiert unter 49 bungen Mit diesen Aufgaben ben Sie das Umgehen mit der EBNF Stellen Sie die EBNF Regeln der Formeln 4 2 4 3 4 4 und 4 5 als Syntaxdiagramme dar 85 4 Programmiersprachen Aufgabe 4 2 EBNF Regeln Aufgabe 4 3 Ableitungs vorschriften Aufgabe 4 4 Ableitungen Aufgabe 4 5 Syntax von Cleo 86 Wie sind die EBNF Regeln der Formel 4 2 zu ndern wenn ein Name mindestens ein
257. eString IN x ARRAY OF CHAR String str ARRAY OF CHAR OpenNew ffnet ein neues Ausgabefenster mit der berschrift newTitle und einem Lineal mit festen Tabulatorpositionen Das Lineal ist unsichtbar der Men befehl Text Show Marks macht es sichtbar Damit kann man zu unterscheidende Ausgabetexte nacheinander in verschiedene Fenster leiten WriteTab gibt ein Tabulatorzeichen aus Nach obigem Entwurf erzeugt Write eine zweispaltige Tabelle eine Spalte f r das Zeichen eine f r seine H ufigkeit Write l sst sich leicht so ndern dass es eine Tabelle mit 2 n Spalten erzeugt In Bild 8 1 ist n 3 Grafische Ausgabe Wieder verwendbarkeit Programm 8 5 Schnittstelle des Grafikausgabe moduls reduziert Entwurf 2 des Ausgabeschritts 8 2 1 3 Sortieren 82 Zeichen z hlen Zur grafischen Ausgabe eines H ufigkeitsdiagramms verwen den wir eine kartesische Fl che Der x Achse entsprechen die Ordnungszahlen der Zeichen der y Achse ihre H ufigkeiten Anstatt nur den Punkt x y ORD c frequency ORD c zu zeich nen ziehen wir eine senkrechte Linie von ORD c 0 nach ORD c frequency ORD c H ufigkeitsdiagramme kommen in vielen Aufgaben vor Die Teilaufgaben des Zeichnens waagrechter und senkrechter Linien in einer kartesischen Fl che lassen sich gut in ein wiederver wendbares Modul packen Hier ist eine Schnittstelle DEFINITION GraphlUitilities PROCEDURE Dra
258. ecretary secretary secretary next END Hier ist nur eine Eigenschaft von secretary zu pr fen n mlich secretary action action Ist diese Bedingung erf llt so kann die Schleife abgebrochen werden es ist dann secretary NIL und Start muss kein neues Secre tary Objekt erzeugen weil das Action Objekt schon registriert ist Ist die Bedingung nicht erf llt dann ist secretary NIL und Start muss ein neues Secretary Objekt erzeugen Damit erhalten wir als Algorithmus f r Start secretary first WHILE secretary NIL amp secretary action action DO secretary secretary next END IF secretary NIL THEN NEW secretary END Entfernen eines Elements UtilitiesRepeater Stop entfernt ein Secretary Objekt aus der Liste sofern es darin enthalten ist Ist die Liste beispielsweise im Zustand von Bild 11 9 so berf hrt der Aufruf UtilitiesRepeater Stop test in dem test auf ein TestSetsOfString Test Objekt zeigt die Liste in den folgenden Zustand 11 2 Testwerkzeugmodul Bild 11 10 Liste nach Entfernen des letzten Elements TestThings Test TestSetsOfString Test sod action action I i next NIL next NIL Secretary Das Secretary Objekt zu test ist jetzt unerreichbar und damit der automatischen Speicherbereinigung tiberlassen das Test Objekt bleibt ber den im Bild nicht dargestellten test Zeiger des auf rufenden Testmoduls
259. eichnis ist Sein Name ist frei w hlbar in Bild 5 1 heifst es BlackBox F r die Servervariante von BlackBox ist dies zu relativieren Sie arbeitet mit zwei Verzeichnisb umen Das Installationsverzeich nis befindet sich auf dem Server und enth lt die gemeinsam benutzten Module das Arbeitsverzeichnis eines Entwicklers enth lt seine privaten individuell benutzten Module Das Installations und das Arbeitsverzeichnis sind gleich struk turiert d h es gelten dieselben Regeln und sie k nnen identisch benannte Unterverzeichnisse enthalten Daher sprechen wir im Folgenden allgemein vom Wurzelverzeichnis Formel 5 2 Namengebung fur Subsysteme Formel 5 3 Namengebung fur Module 5 2 Dateiorganisation BlackBox sucht Dateien zuerst unter dem Arbeits dann unter dem Installationsverzeichnis erzeugte Dateien legt es blicher weise unter dem Arbeitsverzeichnis in den entsprechenden Sym und Code Verzeichnissen ab siehe unten Subsysteme Zu jedem Subsystem gibt es im Wurzelverzeichnis ein gleichna miges Verzeichnis Verzeichnisname Subsystemname Jedes Subsystemverzeichnis enth lt i A folgende Verzeichnisse f r bestimmte Dateien Code f r die Objektcodedateien der Module Docu f r Dokumentationsdateien zu den Modulen Mod f r die Quelltextdateien der Module Rsrc f r Ressourcen zu den Modulen Sym f r die Schnittstellendefinitionen der Module Code und Sym erzeugt BlackBox bei Bedarf automatisch nach R c
260. eihung 135 138 142 143 147 163 176 197 198 201 205 208 211 222 227 235 275 278 284 296 boolesche 135 ganzzahlige 225 offene 216 217 227 276 sortierbare 206 sortierte 206 209 210 227 statische 376 Reimplementation 260 Reiter 365 367 369 Rekursion 314 321 323 334 Relation 336 339 342 347 Brauchtrelation 79 314 geerbte 336 Gleichheitsrelation 339 Ordnungsrelation 206 316 335 337 339 Teilmengenrelation 337 RENAMES 257 REPEAT 311 312 repository Lager Ressource 87 88 91 97 result Ergebnis RETURN 115 116 203 222 rider Reiter right Recht Robustheit 48 151 153 162 163 173 178 185 Rolle 1 2 12 14 15 37 root Wurzel R ckgabe 300 C Sachwortverzeichnis R ckkehr aus Prozeduraufruf 275 326 R ckkehrstelle einer Prozedur 116 225 R ckw rtsrechnen 295 run Ausf hrung S Schachtelung textuelle 239 von Kommentaren 148 Schalter 6 20 32 133 134 138 144 147 177 255 Schleife 189 191 194 195 199 209 213 216 224 226 227 266 284 306 314 320 Ausgabeschleife 192 195 204 214 Bedingungsschleife 189 199 203 209 226 311 314 Eingabeschleife 191 193 195 Endlosschleife 191 194 fu gesteuerte 311 kopfgesteuerte 189 203 rumpfgesteuerte 203 terminierende 191 194 226 Z hlschleife 193 194 199 209 226 Schleifendurchlauf 191 193 198 209 222 224 Schleifenrumpf 189 191 195 199 202 203 213
261. eilaufgaben ununnneeeneee 5 Leitlinie 1 3 Trennung von Abfragen und Aktionen nnneennnen 5 Leitlinie 1 4 Namen von Abfragen eenennnenenenenenenenenenenenenenenen nennen 5 Leitlinie 1 5 Namen von Aktionen tarse innne a aii 6 Leitlinie 1 6 Keine Seiteneffekte monensin a a a 6 Leitlinie 2 1 Vollst ndige Spezifikation s sssssssssssissessssrersississesseesessessesse 34 Leitlinie 6 1 Konstantenvereinbarungen RE AEE EEEE 141 Leitlinie 6 2 Ausgedr ckte Abh ngigkeit von Konstanten 142 Leitlinie 6 3 Exportpolitikes cite ea Ra 144 Leitlinie 7 1 Robustheit vei ee rad 151 Leitlinie 7 2 Vorbedingungen und Benutzereingaben u nee 151 Leitlinie 7 3 Zweck von Vorbedingungen uuuneessnnsnesenenenen 151 Leitlinie 7 4 Trennung von Funktion und Ein Ausgabe unn 153 Leitlinie 7 5 Benutzbarkeit 22 22128 he Mannes 182 Leitlinie 8 1 Terminierung von Schleifen neeesnenenen 191 Leitlinie 8 2 Z hlschleifen mnane 22 2 32a20 228 ae 194 xxxiii Leitlinienverzeichnis 25 2 05 Leitlinie 8 3 Z ahlvariablen asarna a e 2 22 san 194 Leitlinie 9 1 Modell und Spezifikation eeeeeennssnesesenenen 229 Leitlinie 9 2 Namen von Klassen und Modulen neccen 241 Leitlinie 10 1 L kalit t zu 8882 rasen 283 xxxiv 25 2 05 Programmverzeichnis Programm 1 1 Kaffeeautomat als Modul roh 4 Programm 1 2 Schalter als Modul roh
262. ein Kommandoknopf klickbar sein Wenn die Vorbe dingung fiir die entsprechende Aktion des Funktionsmoduls 177 7 Ein und Ausgabe Muster fur einen Wachter 7 4 3 2 Muster fur ein Kommando Robustheit 7 4 4 178 I1Kaffeeautomat erf llt ist Bei den bisherigen L sungen haben wir diese Vorbedingung zerlegt um differenzierte Meldungen an den Benutzer auszugeben Jetzt entfallen die Meldungen und wir k nnen die Vorbedingung wieder zusammensetzen Aller dings brauchen wir sie negiert da der Schalter disabled nicht ena bled heift Die f r die bewachte Variante des Kommandomoduls I1Kaffeeautomat_DBbewacht zu programmierenden W chter folgen also dem ausnahmsweise deutsche Namen verwendenden Schema PROCEDURE Kommando_bewachen VAR par Dialog Par BEGIN par disabled Vorbedingung zu I1Kaffeeautomat Kommando END Kommando_bewachen Die Vorbedingungen haben wir bereits beim Spezifizieren durch Vertrag formuliert wir k nnen sie z B aus den Programmen 2 5 S 31 2 8 S 35 und 6 2 S 124 ablesen Kommandos Durch das Einf hren der W chter vereinfachen sich die Algo rithmen der Kommandos Die Auswahlanweisungen in Pro gramm 7 4 zum Pr fen von Bedingungen entfallen mit allen Zweigen bis auf den letzten ebenso die Fehlermeldungen Der Rest folgt dem Schema PROCEDURE Kommando BEGIN rufe entsprechende Aktion von I1Kaffeeautomat auf zeige Meldung an Zustand_ bertragen END Kommando Das K
263. eine Aktion die etwas ver ndert aber kein Ergebnis liefert Abfragen erlauben es einem Kunden den aktuellen Zustand eines Moduls festzustellen ohne diesen Zustand gleichzeitig zu ndern Die Werte aller Abfragen eines Moduls zu einem Zeit punkt erfassen den f r Kunden sichtbaren Modulzustand Die ser Modulzustand ndert sich nur durch Aktionen Die obigen Regeln beziehen sich darauf welche Merkmale wel chen Modellelementen zuzuordnen sind also auf die Struktur des Modells Die folgenden Regeln handeln davon was ein Modell bedeutet und wie wir m glichst verst ndliche selbster kl rende Modelle durch geschickte Namengebung erhalten Sind Namen Schall und Rauch Beispielsweise ist das Modul MODULE A QUERIES ab cd ACTIONS e f g h i j END A zu Programm 1 1 strukturell quivalent Zweifellos spart es Schreibaufwand und Platz ist aber ohne Erl uterung was denn die Namen A a b bedeuten sollen unverst ndlich und somit nicht handhabbar Bedachtvoll gew hlte Namen f r Begriffe helfen uns Dinge zu begreifen Unsere Umgangssprache kennt verschiedene Wortarten f r ver schiedene Zwecke Substantive bezeichnen Dinge Adjektive und Partizipien Eigenschaften von Dingen und Verben T tig keiten Diese Wortarten decken vieles ab was wir verbal aus dr cken k nnen Weshalb sollten wir den gewohnten Umgang mit der Sprache nicht beim Modellieren von Software nutzen W hle als Name einer Abfrage entweder ein
264. einem Modul zusammen 211 8 Strukturiertes und modulares Programmieren Programm 8 7 MODULE I1CharCounter Zeichenz hler als IMPORT Modul GraphUtilities Vectors MathVectorsOflnteger In Utilitiesin Out UtilitiesOut PROCEDURE Do Fh Read characters from the input stream until its end is reached Count the frequency of each character Show the results in textual and graphical output ordered by characters and by frequencies CONST numberOfChars ORD MAX CHAR ORD MIN CHAR 1 undefined 1 numberOfColumns 3 TYPE Frequency INTEGER Index INTEGER VAR c CHAR frequency frequencySorted ARRAY numberOfChars 1 OF Frequency i k Index 1 freq Frequency 2 I writeCount INTEGER PROCEDURE Write c CHAR freq Frequency BEGIN Out WriteChar c Out WriteTab Out Writelnt freq Out WriteTab quis INC writeCount IF writeCount MOD numberOfColumns 0 THEN Out WriteLn ELSE Out WriteTab END END Write BEGIN Initializations In Open Out OpenNew H ufigkeit Vectors Init frequency 0 Input LOOP In ReadRawChar c IF In failed THEN EXIT END INC frequency ORD c END 212 3 1 I 5 eS 3 1 I gt 1 P uffervariable 82 Zeichen z hlen Output ordered by characters Out WriteLn Out WriteString Haufigkeit nach Zeichen geordnet Out WriteLn writeCount 0 GraphUtilities OpenNew FOR i
265. eiterungsbeziehung strukturiert Die Benut zungsbeziehung dient der Aufgabenteilung und Zerlegung die Erweiterungsbeziehung der Klassifikation und Speziali sierung Polymorphie und dynamisches Binden sind Mechanismen die flexibel anpassbare und erweiterbare Komponenten erm glichen Abgeschlossene vollst ndig implementierte Lieferanten k nnen Kunden mit spezifischen Auftr gen bedienen Kunden steht der Weg offen von Lieferanten spe zifizierte Dienste in eigenen Erweiterungsklassen zu redefi nieren und den Lieferanten eigene Objekte zur Bearbeitung zu bergeben Literaturhinweise Konstruktionstechniken f r Syntaxanalyseprogramme sind in G Pomberger und G Blaschek 27 und ausf hrlich in N Wirth 34 dargestellt darunter auch die in 10 3 4 vorgestellte Technik bungen Mit diesen Aufgaben ben Sie das Erweitern von Klassen Entwickeln Sie mit den in 10 3 vorgestellten Techniken ein Modul das Eingabetexte einliest und die Durchschnitts und Vereinigungsmengen der in den Texten vorkommenden ganzen Zahlen ausgibt Transformieren Sie dazu das Modul ContainersSet Ofinteger Programm 6 7 S 140 in ein Klassenmodul und erwei tern Sie dieses geeignet Erweitern Sie das Modul I1WordChecker um ein Kommando PROCEDURE Count wordLength INTEGER F r wordLength lt 0 ist es effektlos sonst liest es einen Eingabe text z hlt die H ufigkeit der W rter der L ngen 1 bis wordLength gibt l ngere W rter aus und stel
266. ektcode Ein Programm hei t indi rekt ausf hrbar wenn es in einer Form vorliegt von der es automatisch in ein direkt ausf hrbares Programm transformiert werden kann z B als Quelltext einer Hochsprache Diese Trans formation wird durch ein anderes Programm genauer durch die Ausf hrung eines bersetzerprogramms bewerkstelligt und kann dem Benutzer verborgen bleiben Wir m ssen klar zwischen Programm und Programmablauf unterscheiden Ein Programm kann mehrere Male beliebig oft ausgef hrt werden Es handelt sich dann um verschiedene Abl ufe desselben Programms Ein Programmablauf ist eine dynamische Einheit Die Abl ufe k nnen zeitlich nacheinander auf demselben Prozessor oder r umlich getrennt auf verschiede nen Prozessoren erfolgen Programmabl ufe k nnen sich wesentlich in ihrem Verhalten in den Ergebnissen die sie pro duzieren unterscheiden obwohl das zugrundeliegende Pro gramm stets dasselbe ist und sich nicht ver ndert Unterschied liches Verhalten von Programmabl ufen r hrt in erster Linie von unterschiedlichen Eintrittspunkten oder Eingabedaten her es k nnen aber auch andere Einfl sse mitwirken Ein Prozessor kann zu einem Zeitpunkt nur ein Programm aus f hren aber mehrere Programme nacheinander Was auf einem Prozessor abl uft bezeichnen wir als Prozess eine dynamische 81 4 Programmiersprachen Definitionen Programm oder System Wo liegt der Anfang Wo liegt die Grenze Wo lieg
267. eller Parameter wordWriter Do PROCEDURE 11 WordChecker WordWriterDesc formaler VAR Parameter action ContainersSetsOfString ActionDesc Do Anweisungen Prozedurimplementation zu I1WordChecker WordWriterDesc ForAllDo ruft die Prozedur Do seines formalen Parameters action auf An welche Implementation dieser Prozedur wird der Auf ruf gebunden An das Do des dynamischen Typs von action also das Do von I1WordChecker WordWriterDesc siehe Bild 10 9 Das Bin den des Aufrufs an die Prozedurimplementation findet erst zur Laufzeit statt abh ngig vom Typ des Objekts an das der for male Parameter gebunden ist dies nennt man dynamisches Binden dynamic binding Fassen wir die beiden Aspekte dieses Konzepts zusammen Typsicherheit Zur bersetzungszeit wird bei polymorphen Parameter bergaben gepr ft ob die beteiligten Typen ver tr glich sind Dadurch ist garantiert dass zur Laufzeit eine ber den formalen Parameter aufgerufene Prozedur existiert Flexibilit t Zur Laufzeit wird beim Aufruf einer Prozedur eines polymorphen formalen Parameters die passende Implementation der Prozedur gew hlt n mlich die an den aktuellen Parameter gebundene Dadurch sind implemen tierte bersetzte und geladene Komponenten offen f r Anpassungen und Erweiterungen Nun wenden wir uns wieder der Aufgabe der Rechtschreibpr fung zu 269 10 Statische Klassenstrukturen 10 3
268. en Nutzen zur L sung praktischer Aufgaben Die mechanische Pragmatik untersucht Fragen wie die bersetzbarkeit von Pro grammiersprachen ihre Anforderungen an Betriebssysteme und Abh ngigkeiten von Rechnerarchitekturen Die Pragmatik ist Gegenstand der Diskussion Entwicklung und Forschung Eine Frage der Pragmatik ist etwa ob die Sprache das Konzept Modul durch ein Konstrukt unterst tzen soll und falls ja wie es dargestellt werden soll ob z B durch MODULE Modulname Text END Modulname oder durch Text Das zweite Konstrukt ist offenbar k rzer als das erste es ver zichtet auf Schl sselw rter als Rahmen f r den Inhalt Text des Moduls und sowie auf einen Modulnamen als Sprachelement woraus sich ein globaler Namenraum f r die Dienste aller Module ergibt Aus Sicht der menschlichen Pragmatik ist zu untersuchen welches Konstrukt zu besser verst ndlichen und wartbaren Programmen f hrt Das erste Konstrukt entspricht der Antwort von Oberon und Component Pascal das zweite der von C und C Andere pragmatische Fragen sind Soll die Negation durch NOT oder die Konjunktion durch AND amp oder amp amp dargestellt werden Semantik In den Abschnitten 2 3 und 2 4 hat uns die Semantik der Druck kn pfe eines Kaffeeautomaten besch ftigt Die Semantik einer Programmiersprache behandelt die Bedeutung der Zeichen und ihre Beziehungen zu den Objekten auf die sie anwendbar sind Sie legt
269. en Zeichen und W rter stellen Informationen dar was sie bedeuten ist eine Frage der Interpretation Ihre Bedeutung ist iA kontextabh ngig d h sie h ngt von der Umgebung ab in der die Zeichen oder W rter stehen Ein beliebiges Wort ber einem Alphabet kann f r uns bedeutungslos sein Ein Zeichen oder Wort dem wir eine Bedeutung beimessen hei t Symbol Ein n tzliches Programm symbolisiert eine Aufgabenl sung Exkurs Programmiersprachen und andere formale Sprachen sind eigent lich keine Sprachen denn sie dienen nicht der Verst ndigung von Men schen untereinander sondern sie sind Kalkiile starre Regeln zum Erstel len automatisch ausf hrbarer Rechenvorschriften Nat rliche Sprachen sind eigentlich nicht nat rlich sondern als menschliche Kommunikations mittel resultieren sie aus einem Jahrtausende andauernden sozialen und kulturellen Prozess Zur Verwirrung der Begriffe tr gt bei dass man Pro gramme mit Zeichen der Schriftsprache darstellt Rechner Wir schieben hier einen berblick ber Grundbegriffe der Rech nertechnik ein deren Kenntnis f r das Programmieren wenn nicht erforderlich so doch hilfreich ist Die meisten heutigen Rechner sind nach dem Architekturkonzept aufgebaut das wie folgt zu charakterisieren ist Ein Rechner Rechensystem computer ist eine programmgesteu erte Maschine zur Datenverarbeitung sie kann Eingabedaten aufnehmen Programme und Daten speichern und transformie ren und Ausgabeda
270. en Buchstaben enthalten muss Vergleichen Sie die Durchlaufvorschrift f r Syntaxdiagramme S 68 und den Ableitungsalgorithmus f r EBNF Regeln S 69 miteinander F hren Sie Ableitungen der Programme 2 1 S 19 2 2 S 20 und 2 3 S 20 mit den EBNF Regeln von Formel 4 6 aus Die durch Formel 4 6 syntaktisch definierte Cleo Sprache unter liegt folgenden Einschr nkungen Dienste sind entweder ffentlich oder haben genau einen Kunden Dienste haben h chstens einen Parameter Ein erweitertes Cleo besitzt folgende Eigenschaften Dienste k nnen beliebig viele Kunden haben Kundennamen stehen in einer Liste und sind durch Kommas getrennt Dienste k nnen beliebig viele Parameter haben Formale Parameter stehen in einer Liste und sind durch Kommas getrennt ndern Sie die Syntax sodass sie das erweiterte Cleo beschreibt Beseitigen Sie die erste zweite Einschr nkung indem Sie das Nichtterminal Client FormalParameter durch zwei Nichtterminale ClientList und IdentList FormalParameters und FPSection mit entspre chenden Regeln ersetzen Voraussetzung 5 1 Formel 5 1 S oftwaremodell von BlackBox Die Entwicklungsumgebung BlackBox Eine Programmiersprache ist ein Mittel eine Sprachumgebung der zugeh rige Werkzeugkasten Die Sprachumgebung zu Component Pascal deren Merkmale und Werkzeuge wir hier skizzieren ist Teil eines Produkts der schweizer Firma Oberon microsystems Inc des BlackBox Component Buil
271. en bekommt muss damit zufrieden sein denn ein Kaffeeautomat ist und verh lt sich wie ein Warenautomat Wer einen Beh lter erwartet und eine Tasse erh lt muss zufrieden sein denn eine Tasse ist und verh lt sich wie ein Beh lter Ein Objekt kann nur so benutzt werden wie es eingesetzt wird also dem Typ der Gr e entsprechend die an es gebunden ist Mit dem Beispiel von Bild 10 5 Wer einen Warenautomaten bekommen hat wei nur dass dieser f r den Dienst Ware aus geben einen Beh lter fordert Da eine Pappschachtel ein Beh l ter ist kann er dem Automaten eine Pappschachtel hinhalten Pech wenn sich hinter dem Warenautomaten ein Kaffeeautomat verbirgt denn dieser fordert mehr als einen Beh lter eine Tasse Die Pappschachtel ist zwar ein Beh lter aber keine Tasse Dies ist das Kovarianzproblem Die Einsetzungsregel findet also ihre Ausnahme beim kovarianten Erweitern 10 2 2 10 2 Erweiterung von Klassen Objektorientierte Programmiersprachen unterscheiden sich in den Regeln wie die Signaturen geerbter Dienste angepasst wer den d rfen Eiffel erlaubt kovariantes Anpassen von Parameter typen Component Pascal C Java erlauben es nicht Compo nent Pascal fordert dass die Parametertypen geerbter Dienste gleich bleiben invariante Erweiterung Ergebnistypen redefi nierter Funktionen sind kovariant anpassbar Der Grund daf r liegt darin dass bei einem sicheren erweiterbaren komponen tenorientierten Syste
272. ene Prozeduren Typerweiterung Component Pascal fasst Klassen als weiterentwickelte mit zus tzlichen Eigenschaften ausger stete Verbunde auf 9 4 Von der Spezifikation zur Implementation Die Daten einer Klasse werden als Felder eines Verbundtyps modelliert Die algorithmischen Dienste einer Klasse werden als Proze duren modelliert die an den Verbundtyp gebunden sind Details zeigen wir am folgenden Beispiel das Thema Typerwei terung greifen wir in Kapitel 10 auf 9 4 1 Menge als Klasse Mit einer Klasse ist stets auch ein Modul zu programmieren Wie soll man Module und Klassen benennen Leitlinie 9 2 RER BE x Namen von Klassen Benenne eine Klasse mit einem Substantiv im Singular das ein und Modulen einzelnes Exemplar der Klasse in der vertrauten Terminologie der Anwendung beschreibt z B Konto Das Substantiv kann mit einem weiteren Wort qualifiziert sein z B Sparkonto Ver wende verst ndliche Namen vermeide kryptische Abk rzun gen z B nicht Sprknt Die Gesamtheit der Objekte einer Klasse entspringt letztlich dem Modul das diese Klasse vereinbart Benenne deshalb ein Modul mit dem Subsystemnamen gefolgt vom Namen seiner wichtigsten Klasse im Plural z B BankKonten Wir formulieren nun die Cleo Klasse Set von Programm 9 3 als eine in ein Modul eingebettete Klasse in Component Pascal Dabei m ssen wir einen konkreten Elementtyp festlegen hier CHAR Die Implementationsteile stammen von den Prog
273. enmoduls f r Zeichenketten 348 Programm 12 4 Klassenmodul f r Zeichenketten nsenennnnn 349 Programm 12 5 Schnittstelle des Klassenmoduls f r Mengen geordneter Elemente 2 2 an a r an Bann 354 Programm 12 6 Klassenmodul f r Mengen geordneter Elemente 355 Programm 12 7 Eingabemod ul ts sis ciawianiandiendausihardausa tents 370 Programm 12 8 Ausgabemodul 2 232 De ame 372 25 2 05 Tabellenverzeichnis Tabelle 1 1 Beispiele zu Schnittstelle und Implementation 9 Tabelle 1 2 Beispiele zu Benutzungsoberfl che uunenne 12 Tabelle 2 1 Beispiele zu Exemplar und Typ uneeenesnnenen 17 Tabelle 2 2 Grundtypena2 2 un te cede dein abate Seta 18 Tabelle 2 3 Modul und Typeigenschaft eeeeeeeennnnne 38 Tabelle 4 1 Operatoren und Begrenzer von Cleo oo eects 71 Tabelle 5 1 Standardsubsysteme issii iraire 89 Tabelle 5 2 Subsysteme dieses Buchs ueeeneeeenneennnne 89 Tabelle 5 3 Beispiele zur Namengebung nnneeennennenenen 92 Tabelle 6 1 Schnittstelle und Implementation 146 Tabelle 7 1 Parameter bergabearten exemplarisch uuenee 175 Tabelle 8 1 Partieller Vergleich von UtilitiesIn und Inu 202 Tabelle 8 2 Partieller Vergleich von UtilitiesOut und Out 204 Tabelle 8 3 Wertetabelle boolescher Operatoren unennee 218 Tabelle 8 4 Kurze Auswertung boolescher Ausdr cke nun
274. ensnnnensenen een 159 Programm 7 3 Kommandomodul f r Ein Ausgabe zu Kaffeeautomat 160 Programm 7 4 Kommandomodul f r Dialogbox zu Kaffeeautomat 167 Programm 7 5 Kommandomodul f r bewachte Dialogbox zu Kaffeeauto Mat ee Deren ee 178 Programm 7 6 W chter f r Betragsfelder u eeenneeennneee 182 Programm 7 7 Melder f r Betrag und Preis neeenneeenenmnn 183 Programm 8 1 Zeichensammler als Modul uuueuseeensensneeennnnnnnnn 196 Programm 8 2 Leeren einer Zeichenmenge IE ee Hou aseow wean 197 Programm 8 3 Spezifikation von Diensten der Zeichenmenge 198 Programm 8 4 Ist die Zeichenmenge leer uun neennnenenenne 199 Programm 8 5 Schnittstelle des Grafikausgabemoduls reduziert 205 Programm 8 6 Spezifikation des Vektormoduls reduziert n n 206 Programm 8 7 Zeichenz hler als Modul 20000220seeennenenseeenneennnnnn 212 Programm 8 8 Schnittstelle von XYplane reduziert neeen 214 Programm 8 9 Grafikausgabemodul reduziert ueeeenemennee 215 Programm 8 10 Vektormodul reduziert ceesensseeesennneensnnnnnnnnennnnnnnn 220 25 2 05 Programmverzeichnis Programm 8 11 Suchfunktion f r Index Variante geninan na e leise eee as ak ames 223 Programm 9 1 Tass8 als Klasse 2 4 ea 230 Programm 9 2 Spezifikation von Kaffee ausgeben 233 Programm 9 3 Menge als generisch
275. ents pr ft die Bedingung item NIL NIL ist der Defaultinitialisierungswert von item siehe S 275 PROCEDURE ChecklInvariants tree Node VAR ordered BOOLEAN item Element PROCEDURE Inorder tree Node BEGIN IF ordered amp tree NIL THEN Inorder tree left ordered ordered amp item NIL OR item lt tree item item tree item Inorder tree right END END Inorder 321 11 Dynamische Objektstrukturen BEGIN ordered TRUE Inorder tree ASSERT ordered BEC invariant END Checklnvariants IsDisjoint Dass rekursives Traversieren nicht nur mit einer gew hnlichen Prozedur sondern auch mit einer Funktion m glich ist zeigt die Implementation der Abfrage IsDisjoint PROCEDURE AreDisjoint tree other Node BOOLEAN PROCEDURE Inorder tree Node BOOLEAN BEGIN RETURN tree NIL OR other NIL OR Inorder tree left amp Has other tree item amp Inorder tree right END Inorder BEGIN RETURN Inorder tree END AreDisjoint PROCEDURE IN a SetDesc IsDisjoint IN b SetDesc BOOLEAN NEW VAR result BOOLEAN BEGIN result AreDisjoint a root b root ASSERT result AreDisjoint b root a root BEC postcondResultOk RETURN result END IsDisjoint Has Die Implementation der Abfrage Has sucht ein Element im Baum Dazu ist ein Weg von der Wurzel zum Knoten mit dem gefundenen Element zu gehen oder zu einem Blatt falls der Ba
276. entwicklern immer wich tiger Wiederverwendbare Softwarekomponenten m ssen eng lisch dokumentiert sein um einen Markt zu finden BlackBox ist englisch dokumentiert Au erdem sind englische W rter oft k rzer als entsprechende deutsche Keine Regel ohne Aus nahme Ausgenommen ist der Kaffeeautomat den ich durch g ngig deutsch modelliere F r die Neuauflage habe ich Fehler korrigiert Programme opti miert und Angaben aktualisiert Der Component Pascal Lan guage Report im Anhang entspricht der Version vom M rz 2001 Danksagungen Vorwort Ich danke allen die mir bei der Arbeit an diesem Buch geholfen haben vor allem meinem Kollegen Prof Helmut Ketz vom Fachbereich Management und Automation der Fachhochschule Reutlingen Er hat das ganze Buchprojekt von der Idee bis zum Druck mitgestaltet ich habe seine Lehrmaterialien und zahlrei chen Kommentare zum Manuskript gepliindert Nur wegen sei ner Bescheidenheit erscheint er nicht als Koautor des Buchs Mein Dank kann seinen Beitrag nicht ausgleichen Markus Hirt danke ich fiir sein Engagement und seine Rat schlage den Kollegen der Firmen Oberon microsystems und Esmertec fiir die anregenden Diskussionen tiber Komponenten technologien Besonderer Dank gebiihrt Dr Dominik Gruntz der das ganze Manuskript durchgearbeitet und mit seinen kon struktiven Vorschl gen wesentlich zur Verbesserung beigetra gen hat Ganz herzlich gedankt sei auch Friederike Gottschalk die nicht nur unz
277. eplatz f r den Kaffee Eine Spezifikation ist h chstens so gut wie das Modell das ihr zugrunde liegt Ein mangelhaftes Modell ist nicht durch eine gute Spezifikation zu reparieren denn diese kann die M n gel bestenfalls korrekt widerspiegeln Kaffeeautomat eingenommener i Geld Betrag EUR Geld einnehmen i schlitz i Kaffee Preis EUR Kaffee ausgeben au er 7 Geld Betrieb Geld zur ckgeben usgabe gesammelter Sonn Betrag EUR initialisieren 229 9 Objektorientiertes Programmieren 9 1 1 Programm 9 1 Tasse als Klasse 230 Verbessern wir also erst das physische Modell siehe Bild 9 1 Bei dieser Gelegenheit erg nzen wir nicht nur einen Platz f r die Kaffeeausgabe sondern auch einen f r die Geldr ckgabe Bevor wir den Knopf Kaffee ausgeben dr cken m ssen wir eine Tasse auf den Kaffeeausgabeplatz stellen sonst verschwin det der Kaffee im Ablauf Die Tasse sollte vorher leer sein sonst l uft sie ber wenn der Automat sie f llt Was folgt aus diesen nderungen f r das Softwaremodell des Kaffeeautomaten Die Aktionen Kaffee_ausgeben und Geld_zur ckgeben erhalten Parameter siehe S 24 Kaffee_ausgeben INOUT Pott Tasse Geld_zur ckgeben OUT Betrag NATURAL Die Tasse erscheint als Typ Tasse eines formalen Parameters von Kaffee_ausgeben Von einem Typ kann es beliebig viele Exemplare geben das trifft sich gut denn der Automat soll ja viele Tassen f llen W re die Tasse a
278. er Men befehl Tools Insert Commander platziert ein Aufrufsymbol an die Schreibmarkenposition Exkurs Ein commander ist ein Kommandeur ein Befehlshaber einer Ver nichtungsmaschinerie die Stadt und Land verwiisten Leben zerst ren kann Dass die informatische Terminologie mit militarischen Meta Menu Bild 5 14 Kommando aufruffolge Kommandosprache Signatur 5 3 Werkzeuge phern wie Befehl Kommando fire rule kill process durchsetzt ist erkl rt sich aus ihren Anf ngen im milit rischen Bereich Zwar k n nen wir fragw rdige aber etablierte Bezeichnungen kaum vermeiden wollen jedoch wenigstens diese Tradition nicht fortsetzen und nicht neue v llig sinnlose Metaphern unreflektiert einf hren Aufrufsymbole bieten dem Entwickler eine einfache und schnelle M glichkeit aus der Schnittstelle eines Moduls ein klei nes Men aus Kommandoaufrufen zusammenzustellen und abzuspeichern Dazu gen gt der Texteditor der Formeditor ist nicht erforderlich Im obigen Beispiel ist das Kommandofenster als Dokument Menu ode im Subsystemverzeichnis I1 gespeichert BlackBox vereinheitlicht damit die Ans tze der kommandoori entierten und der men orientierten Benutzungsoberfl chen DB StdLog String At is not 2 Fy StdLog Int 8 StdLog Ln E kisnot 218 Der Kommandointerpreter kann nicht nur parameterlose Proze duren aufrufen aber auch nicht jede beliebige Prozedur Die Sprache die er akzep
279. er fehlen die einzige Abfrage on wird zu einer booleschen Gr e 19 2 Spezifizieren Programm 2 2 Schalter als Modul typisiert Programm 2 3 Zeichenmenge als Modul typisiert 2 2 20 MODULE Switch QUERIES on BOOLEAN ACTIONS SwitchOn SwitchOff Toggle END Switch Eine Menge Beim Mengen Programm 1 3 S 8 steht fest dass die Enth ltab frage zu einer booleschen Gr e wird Has x BOOLEAN Doch von welchem Typ soll der mehrfach vorkommende Para meter x sein der ein Element darstellt Sicher muss an allen Stel len derselbe Typ stehen eben der Elementtyp der Menge Man kann nicht Kiesel in eine leere Kiste legen und Goldst cke darin erwarten Wir sind frei einen beliebigen Typ zu w hlen und entscheiden uns hier f r den Zeichentyp CHAR MODULE Set QUERIES Has x CHAR BOOLEAN ACTIONS Put x CHAR Remove x CHAR END Set Benutzung angebotener Dienste Ein Kunde benutzt einen Lieferanten indem er dessen Dienste aufruft call Der Kunde ist der Aufrufer caller der Lieferant der Aufgerufene callee Wir sprechen auch vom Zugriff access des Kunden auf die Dienste des Lieferanten Benutzen Aufru fen Zugreifen bedeuten im Wesentlichen dasselbe doch ist Auf rufen etwas konkreter Vereinbarung Wir unterscheiden zwischen der Vereinbarung und dem Aufruf eines Dienstes Vereinbarungen declaration kennen wir schon eine Spezifikation eines Moduls besteht zun chst
280. er gibt es eine Ausnahme von dieser Regel weil es um Ein Ausgabe geht Das Kommandomodul exportiert die Variable Anzeige an die Dialogbox die Benutzungsoberflache Entwurf l1Kaffeeautomat_DialogBox besitzt durch die Variable Anzeige einen Zustand der den Zustand des Funktionsmoduls I1Kaffeeautomat und die Eingaben des Benutzers widerspiegelt Anstelle des Kommandos Zustand_anzeigen von 1Kaffeeautomat_EinAusgabe tritt eine private Prozedur Zustand_ bertragen die die Abfragewerte von IiKaffeeautomat nach Anzeige bertr gt und ausgibt Sie ist immer aufzurufen nach dem sich der Zustand von I1Kaffeeautomat ge ndert hat also nach jedem Aktionsaufruf Das allgemeine Muster der Algorithmen der Kommandos von 1 Kaffeeautomat_DialogBox sieht in Pseudocode so aus IF 11Kaffeeautomat nicht im erwarteten Zustand THEN zeige Meldung A an ELSIF Eingabewert im Anzeigefeld nicht verwendbar THEN zeige Meldung B an ELSE rufe entsprechende Aktion von I1Kaffeeautomat auf zeige Meldung C an Zustand_ bertragen END Das Pr fen eines Eingabewerts kommt wieder nur bei initialisieren und Geld_einnehmen vor Eingabewerte m ssen nicht wie bei I1Kaffeeautomat_EinAusgabe explizit eingelesen werden Benutzer eingaben in der Dialogbox ndern den Zustand von Anzeige automatisch sodass ein Eingabewert direkt in einem Verbund feld steht 7 3 3 Programm 7 4 Kommandomodul fur Dialogbox zu Kaffeeautomat 1 I gt 7 3 Kaffee
281. er so einfach ist bietet es sich an sein Verhalten grafisch darzustellen SwitchOn SwitchOn Toggle SwitchOff SwitchOff Toggle F r jeden Zustand zeichnen wir einen Kreis und schreiben die Bezeichnung des Zustands hinein F r jeden m glichen ber gang transition von einem Zustand zu einem anderen zeichnen wir einen Pfeil der vom Vorzustand zum Nachzustand f hrt Da sich Zust nde durch Aktionen ndern beschriften wir die Pfeile mit den Namen der entsprechenden Aktionen Diese Art der Darstellung hei t Zustands bergangsdiagramm oder kurz Zustandsdiagramm state chart Sie ist ein ausge zeichnetes Mittel um den Zusammenhang zwischen Zust nden und Aktionen zu veranschaulichen Allerdings sind Zustands diagramme nicht bei jedem Modul praktisch anwendbar Der Kaffeeautomat hat z B so viele Zust nde dass ihre Darstellung in einem Diagramm un bersichtlich w re Ein Zustandsdia gramm kann man durchlaufen indem man von einem Zustand ausgehend einem Pfeil folgt Mehrere von einem Zustand ausgehende Pfeile bedeuten alternative Wege unter denen man jeweils einen w hlt Warum hat Programm 1 2 nur eine Abfrage on aber Bild 1 4 zwei Zust nde off und on Die Abfrage on liefert als Ergebnis ent weder ja d h on ist wahr oder nein d h on ist nicht wahr also on ist falsch also off ist wahr Eine Abfrage gen gt um Auskunft ber den aktuellen Zustand zu erteilen 1 Einf hru
282. er type includes the values of the smaller type REAL gt SHORTREAL gt LONGINT gt INTEGER gt SHORTINT gt BYTE Types 2 and 3 are character types with the type hierarchy CHAR gt SHORTCHAR 6 2 Array Types An array is a structure consisting of a number of elements which are all of the same type called the element type The number of elements of an array is called its length The elements of the array are designated by indices which are integers between 0 and the length minus 1 ArrayType ARRAY Length Length OF Type Length ConstExpression A type of the form ARRAY LO L1 Ln OF T is understood as an abbreviation of ARRAY LO OF ARRAY L1 OF ARRAY Ln OF T Arrays declared without length are called open arrays They are restricted to pointer base types see 6 4 element types of open array types and formal parameter types see 10 1 Examples ARRAY 10 N OF INTEGER ARRAY OF CHAR A Component Pascal Language Report 6 3 Record Types A record type is a structure consisting of a fixed number of ele ments called fields with possibly different types The record type declaration specifies the name and type of each field The scope of the field identifiers extends from the point of their dec laration to the end of the record type but they are also visible within designators referring to elements of record variables see 8 1 If a record type is exported field identifiers that are to be visib
283. erbare Typen uunneennn 174 74 2 Parametertibergabearten 0 0 eee 175 7 43 Entwiitt 2 222222 aaa 176 Inhaltsverzeichnis 74 4 Implementation eeeneeeeenn 178 TAD Dialogbox n 0e een 180 7 5 Kaffeeautomat mit meldender Dialogbox 181 75 1 W chter f r Felder enenenenn 182 75 2 Mel der 2 20s2 2 u Es dasha 183 7 6 Zusammenfassung eenneeeenenesnenenene 185 7 7 Liter turhinweise u a nansansitesnadeanennn 185 7 8 bungen BEE EIER OR ER T ANR 185 Strukturiertes und modulares Programmieren 187 8 1 Zeichen sammeln sisie arenira ken 187 SLE Entw rb aanzassensierzee aan 187 8 1 2 Implementation neeeeennen 196 8 1 3 Erweitern des Mengenmoduls 197 81 4 Fazit einer A a aai 199 8 2 Zeichen z hlen 2 2222 2 22 Er 200 8 2 1 Entwurf sepi aaar ar E 200 8 2 2 Implementation eeeeeennen 211 8 2 3 Implementieren von Grafikprozeduren 214 8 2 4 Implementieren von Vektoroperationen 216 825 Fazit sk age cceeye dah eiea e eaa Eae a 225 8 3 Zusammenfassung enennnnenensnnennnenene 226 8 4 Literaturhinweise eesessesseesnensennensneennenneennennennnnnn 227 8 5 bungen DREIER SEND ah wee aguante tes Ae AEIR 227 Objektorientiertes Programmieren 229 9 1 1 Tassenii eeiucteitiikeisietsitin chlahkesiniegket 229 91 1 Klassen2sse a area 230 9 1 2 Vertrag und Zustandsdiagramm 231 9 1 3 Benutz
284. eren wir bei dynamischen Objektstrukturen vom Inhalt der Objekte so bleiben Strukturen brig die gerichteten Gra phen entsprechen das sind mathematische Gebilde die die Graphentheorie untersucht Ein Graph besteht aus einer Menge von Knoten node und einer Menge von Kanten edge die je zwei Knoten verbinden Bei einem gerichteten Graphen directed graph haben die Kanten eine Richtung die vom Startknoten zum Zielknoten weist Der Zielknoten einer Kante ist von ihrem Startknoten erreichbar reachable Daher nennen wir ein Objekt oder Element einer ver zeigerten Struktur auch Knoten und bertragen auch andere Begriffe der Graphentheorie auf dynamische Objektstrukturen Grafische Darstellungen von Graphen sind uns schon oft begeg net In Diagrammen bildet man Knoten auf Rechtecke oder Kreise Kanten auf Striche oder Pfeile ab Bin rbaum Die uns vertrauten Dateiverzeichnisstrukturen sind konkrete vielverzweigte B ume siehe Bild 5 1 S 90 Hier untersuchen wir einen abstrakten speziellen Baum Vater gt Teilbaum linker Sohn rechter Sohn Blatt ri Ein Bin rbaum binary tree im Folgenden auch kurz Baum genannt ist ein Graph bei dem h chstens ein Knoten die Wurzel root des Baums nicht Zielknoten einer Kante ist 313 11 Dynamische Objektstrukturen Rekursion Iteration 11 3 1 2 314 jeder Knoten au er der Wurzel Zielknoten von genau einer Kante ist deren Startknoten Vater
285. erplatz zu H ufigkeits reihungen exemplarisch Entwurf 1 des Ausgabeschritts Entwurf 2 des Ausgabeschritts Effizienz Entwurf 3 des Ausgabeschritts Effizienz Sicherheit 82 Zeichen z hlen 0 1 2 3 4 5 frequency 60 49 0 12 49 39 Frequency Frequency Frequency Frequency Frequency Frequency ARRAY 6 OF Frequency 0 1 2 3 4 5 frequency Sorted 0 12 39 49 49 60 Frequency Frequency Frequency Frequency Frequency Frequency ARRAY 6 OF Frequency Die sortierte H ufigkeitsreihung frequencySorted ist elementweise auszugeben mit einer Z hlschleife angesetzt FOR i ORD MIN CHAR TO ORD MAX CHAR DO gib frequencySorted i aus END Zwei kleine Verbesserungen Die interessanten gro en H ufig keiten sollen zuerst kommen die H ufigkeit 0 interessiert nicht und soll nicht in der Ausgabe erscheinen Lassen wir also die Schleife mit negativer Schrittweite von oben nach unten z hlen und pr fen wir den H ufigkeitswert vor dem Ausgeben FOR i ORD MAX CHAR TO ORD MIN CHAR BY 1 DO IF frequencySorted i gt 0 THEN gib frequencySorted i aus END END Da die Reihung frequencySorted sortiert ist haben ihre ersten Ele mente den H ufigkeitswert 0 Bei den letzten Durchl ufen der FOR Schleife liefert die Bedingung frequencySorted i gt 0 stets FALSE d h da ist nichts mehr auszuf hren Eine Bedingungs schleife passt besser i ORD MA
286. ersetzt 3 La meldet der bersetzer einen Syntaxfehler denn Dieser Text wird bersetzt entspricht keiner m glichen syntaktischen Einheit Die Fehlerstelle ist mit einem grauen Quadrat mit wei em Kreuz markiert das durch Anklicken eine Fehlermeldung enth llt 99 5 Die Entwicklungsumgebung BlackBox Bild 5 9 S yntaxfehlermarke aufgeklappt Ubersetzerarten Bild 5 10 Kompilation 100 ii My hl ocd MOQLLE M ht voc uile Dieser Text wird bersetzt END 11 Paty felch Dieser Text werd micht Gherseizi Der bersetzer markiert in einem Lauf m glichst viele Fehler Fehlermarken sind spezielle Objekte die der bersetzer in den Text einbettet Man kann mit den Men befehlen Dev Next Error die Schreibmarke zum n chsten Fehler bewe gen Dev gt Toggle Error Mark eine Fehlermarke auf und zuklappen Dev Unmark Errors alle Fehlermarken entfernen Auf diese BlackBox spezifischen Hinweise folgen einige allge meine Bemerkungen zum bersetzerbegriff Auf Hochsprache nebene unterscheidet man zwei Arten von bersetzern Eingabe l uft auf Ausgabe a N Objektcode A l uft sp ter auf S gt S gt Ein Kompilierer compiler transformiert Quelltext geschlos sen in semantisch quivalenten Maschinencode der sich zu beliebigen Zeitpunkten binden laden und ausf hren l sst In Bild 5 10 erscheint der erzeugte Objektcode in zwei Rollen als Ausgabedaten u
287. ersprachen nach verschiedenen Kriterien klassifizieren Ublich ist eine Klassifikation nach Abstraktions ebenen hier von unten nach oben aufgereiht Eine Maschinensprache ist durch einen Prozessortyp defi niert Unter Maschinencode oder Objektcode versteht man die interne ausf hrbare Darstellung eines Maschinenpro gramms als Bitmuster Eine Assemblersprache maschinenorientierte Sprache ist eine symbolische textuelle Darstellung einer Maschinensprache Ein Assemblerprogramm Assemblercode ist ein Programm in Assemblersprache siehe Beispiel in Bild 4 3 H here problemorientierte Programmiersprachen Hoch sprachen haben m chtigere Konstrukte als Maschinenbe fehle verbergen Details der Rechnerarchitektur erm glichen die Formulierung von Algorithmen unabh ngig von einem bestimmten Prozessor und orientieren sich an den Bed rf nissen eines Anwendungsbereichs Ein Quellprogramm Quellcode Quelltext ist ein Programm in Hochsprache Man spricht von der semantischen L cke zwischen den Kon zepten der Hochsprachen und denen der Maschinensprachen Eine andere Klassifikation w hlt als Kriterium den Anwen dungsbereich und unterscheidet zwischen universell einsetzba ren Programmiersprachen und Programmiersprachen f r spezi elle Anwendungsbereiche Entwickler und Maschine Programme l sen Aufgaben dazu werden sie von Menschen erdacht und formuliert Transformiert und ausgef hrt werden Programme von
288. ertes S oftwaremodell 2 6 38 Anders als ein Modul besitzt eine Klasse auch eine Typeigen schaft Eine Klasse ist ein Typ ihre Objekte sind Exemplare die ses Typs Insofern gleichen Klassen den in Abschnitt 2 1 vorge stellten Grundtypen Grundtypen unterscheiden sich von Klassen darin dass ihnen die Moduleigenschaft fehlt Grundiyp Moduleigenschaft ja ja nein Typeigenschaft nein ja ja Aus dieser Sicht ist ein Modul ein Spezialfall eines Objekts Ein Modul ist ein einzigartiges Objekt ein Einzelobjekt singleton Seine Klasse hat nur ein Element von seinem Typ gibt es nur ein Exemplar In diesem Fall sind die Begriffe Klasse und Typ red undant Da Einzelobjekte in der Praxis oft vorkommen ist das Modulkonstrukt durchaus sinnvoll man spart damit eine Ver einbarung und einen Namen Das Prinzip der Zusammenfassung gleichartiger Objekte zu Klassen ist eine weitere Auspr gung des Prinzips der Abstrak tion Mit der Klasse erhalten wir eine zweite grundlegende Modellierungseinheit es gilt jetzt erg nzend zu Formel 1 1 S 2 Softwaremodell Programm Menge von Modulen und Klassen Das Programmieren mit Klassen behandeln wir in Kapitel 9 Zusammenfassung Wir haben wesentliche Konzepte und Methoden kennengelernt die wir beim Entwickeln von Software insbesondere zum Spe zifizieren brauchen Dazu geh ren das Abstrahieren durch das Zusammenfassen gleichartiger Objekte zu Typen und Klassen das Para
289. esc NEW Shallow copy source into target For internal use only BEGIN target root source root END Copy PROCEDURE Union tree other Node Node Left as an exercise for the reader END Union PROCEDURE VAR a SetDesc SetUnion IN b c SetDesc NEW Left as an exercise for the reader END SetUnion PROCEDURE Difference tree other Node Node VAR result Node PROCEDURE Preorder tree Node BEGIN IF tree NIL THEN IF Has other tree item THEN Put result tree item 331 11 332 Dynamische Objektstrukturen END Preorder tree left Preorder tree right END END Preorder BEGIN IF tree other THEN Preorder tree END RETURN result END Difference PROCEDURE VAR a SetDesc SetDifference IN b c SetDesc NEW Postcondition a OLD b OLD c 1 VAR oldB oldC SetDesc Solve aliasing problems a b a c BEGIN oldB Copy b oldC Copy c a root Difference b root c root a Checklnvariants ASSERT a IsDisjoint oldC BEC postcondSupplierOk ASSERT a lsEmpty OR oldB IsEmpty BEC postcondSupplierOk END SetDifference PROCEDURE Intersection tree other Node Node Left as an exercise for the reader END Intersection PROCEDURE VAR a SetDesc Setintersection IN b c SetDesc NEW Left as an exercise for the reader END Setilntersection PROCEDURE SymDifference tree other Node
290. eshalb entfallen die Zweige ELSE error Da ein Text mit einem beliebigen Zeichen beginnen kann liefert die Bedingung char IN first Text in Analyze und ReadText stets TRUE Analyze wird berfl ssig Das erste Zeichen eines Wortes ist ein Buchstabe deshalb ist first word durch letter zu ersetzen Das Pr fen von char IN first nonword im ELSIF Zweig von ReadText kann ent fallen da die Bedingung aus NOT char IN letter folgt Die ersten Pr fungen IF char IN in ReadWord und ReadNonword k nnen ent fallen da schon ReadText die Bedingungen pr ft Damit erhalten wir die vereinfachten Prozeduren PROCEDURE ReadtText BEGIN next WHILE TRUE DO IF char IN letter THEN ReadWord ELSE ReadNonword END END END ReadText PROCEDURE ReadWord BEGIN next WHILE char IN letter DO next END END ReadWord X 272 Konkretisieren 10 3 W rter sammeln Rechtschreibung pr fen PROCEDURE ReadNonword BEGIN next WHILE char IN nonletter DO next END END ReadNonword Das Symbol 6 bei ReadText zeigt dass konkrete Details zu erg nzen sind z B geh rt zu jeder WHILE Schleife die Fortset zungsbedingung Ende des Eingabetextes nicht erreicht Da wir zur Eingabe das Modul Utiltiesin mit dem Aliasnamen In benutzen lautet diese Bedingung In failed Weiter ersetzen wir das abstrakte next durch das konkrete In ReadRawChar char Zur abstrakten Bedingung char IN letter bietet das Modul Basi sChars eine Pr ffu
291. essesnsesesessnennsesesesnneunnnesnn 336 Bild 12 2 Entwurfsmuster f r Menge exemplarisch 337 XXU Abbildungsverzeichnis 25 2 05 xxvi Bild 12 3 Hierarchie allgemeiner Konzeptklassen ne 338 Bild 12 4 Spezifikation und Test von Konzeptklassen exemplarisch 340 Bild 12 5 Konzeptklassen konkrete Klassen und Testszenarium 341 Bild 12 6 Model View Controller Entwurfsmuster ccnee 363 Bild 12 7 Model View Controller Entwurf f r Text in BlackBox 364 Bild 12 8 Modell Klassenhierarchie in BlackBox ee 364 Bild 12 9 Carrier Rider Mapper Entwurfsmuster ueeenee 365 Bild 12 10 Carrier Rider Mapper Entwurf f r Text in BlackBox 366 Bild 12 11 Klassendiagramm zur Eingabe unnnneeeenneen 366 Bild 12 12 Objektdiagramm zur Eingabe neenee 367 Bild 12 13 Klassendiagramm zur Ausgabe nenennnee 368 Bild 12 14 Objektdiagramm zur Ausgabe enneeeenen 368 25 2 05 Aufgabenverzeichnis Aufgabe 1 1 Kaffeesorte und Zutaten cccccceccccccescceecsssssssccessssesesesssssseeees 15 Aufgabe 1 2 ZigarettenautOMat aaae aa e a 15 Aufgabe 1 3 W rfel 2 TIE EIA Mek 15 Aufgabe 1 4 LU aE EAE IAI A E ESE hs TA as ERE 15 Aufgabe 1 5 Datum BEPERA AE E E E tem cas ENE IE 16 Aufgabe 1 6 Kreis unseren nal ETs 16 Aufgabe 1 7 Widerstandsschaltung e neeeennennnneeeneen 16 Aufgabe 1 8 Getriebeschaltung u u ss0s2
292. estellten Methoden und Programme oder Teilen davon ent stehen Seite wird vom Verlag ausgefiillt iii Seite wird vom Verlag ausgefiillt Hintergrund Zielgruppe Maskulin Feminin Ziele und Methoden Vorwort Die Softwareindustrie setzt seit den 80er Jahren zunehmend Objekttechnologien ein jetzt gewinnen Komponententechnolo gien an Bedeutung Die Informatik Ausbildung an Hochschulen soll die Studierenden auf professionelles Entwickeln qualit tvol ler Software vorbereiten Deshalb sollte die Lehre technologi sche Innovationen rechtzeitig aufnehmen damit sie langfristig praxisrelevant bleibt Dazu sind neue Konzepte und Methoden didaktisch aufzubereiten um sie Einsteigern in die Informatik zu erschlie en Solche Argumente erw gend richtet sich dieses Lehrbuch an Studierende mit Informatik als Haupt oder Nebenfach Es ver mittelt Grundlagen die zu einer Einf hrung in die Informatik geh ren Meinem Arbeitsplatz entsprechend orientiert es sich an der Ausbildung an Fachhochschulen doch auch Studierende anderer Hochschulen und Lehrende an Schulen k nnen es nut zen Das Buch eignet sich zur Vorlesungsbegleitung und zum Selbststudium Bei allen Berufs und Personenbezeichnungen wie Leser Benut zer Entwickler meine ich stets Menschen beiderlei Geschlechts Das Buch f hrt den Leser ber modulare und objektorientierte Softwaretechniken an die Komponententechnologie heran Module Klassen und Komponenten folgen de
293. esten Wert 60 der Name Preis ist unver nderlich an den Wert 60 gebunden Eine Typan gabe ist nicht erforderlich aus der Wertangabe ist ersichtlich dass es sich um eine ganze Zahl handelt Man beachte die Exportmarke am Namen Sie bewirkt dass Kunden alle Zugriffsrechte an Preis erhalten aber bei Konstan ten ist nur lesender Zugriff m glich d h bei Kunden darf l1 Kaffeeautomat Preis in Ausdrticken vorkommen Allgemein gilt die Transformation QUERIES CONST konstante Abfrage Typ konstante Abfrage Wert 113 6 Vom Spezifizieren zum Implementieren 6 1 4 2 Cleo Component Pascal Component Pascal Bild 6 2 Speicherplatze zu Variablen exemplarisch 114 Variablen Bei parameterlosen Abfragen liegt es nahe sie als schreibge sch tzte Variable zu implementieren Component Pascal kennt keinen Grundtyp NATURAL sodass wir stattdessen auf INTEGER und Programm 2 5 S 31 zur ckgreifen m ssen QUERIES au er_Betrieb BOOLEAN eingenommener_Betrag NATURAL Preis NATURAL QUERIES FOR Betriebspersonal gesammelter_Betrag NATURAL VAR auBer_Betrieb BOOLEAN eingenommener_Betrag INTEGER Preis INTEGER gesammelter_Betrag INTEGER Component Pascal erlaubt es Vereinbarungen von Variablen gleichen Typs mit einer Namenliste abzuk rzen sodass wir auch schreiben k nnen VAR auBer_Betrieb BOOLEAN eingenommener_Betrag Preis gesammelter_Betrag INTEGER Mit diesen Verein
294. estfalle Der Zufall wirkt konkret beim W hlen einer aufzurufenden Aktion von Containers SetsOfString Set beim Setzen einer Zeichenkette die in eine der Mengen ein zuf gen ist Seiteneffekt Mehrfache Auswahl 11 1 Pr fling Testmodul und Testwerkzeug beim W hlen der an einer Aktion beteiligten Mengen Dazu braucht Test das Modul MathRandom das einen Zufallszah lengenerator enth lt und Dienste bietet die zuf llige Werte ver schiedener Typen liefern Konkret benutzt Test von MathRandom folgendes Uniformi lower upper INTEGER INTEGER liefert eine zuf llige gleichverteilte Ganzzahl aus dem Intervall lower upper GetString OUT string ARRAY OF CHAR besetzt den Ausgabepa rameter string mit zuf lligen alphanumerischen Zeichen Uniforml ist eine seiteneffektbehaftete Funktion denn zwei auf einander folgende Aufrufe mit gleichen Parameterwerten lie fern meist verschiedene Ergebnisse Bei Zufallsfunktionen wei chen wir erstmals von unseren Leitlinien 1 3 S 5 und 1 6 S 6 ab Der Grund ist Bequemlichkeit Randomisierte Algorithmen las sen sich so k rzer formulieren Der Preis daf r ist dass wir mit Ausdr cken in Zusicherungen kritischer umgehen m ssen Die Auswahl einer aufzurufenden Aktion kann man mit einer mehrfachen Auswahlanweisung programmieren action MathRandom Uniforml 1 n IF action 1 THEN wahle Index i einer Menge rufe die 1 entsprechende Aktion von s
295. et i auf ELSIF action 2 THEN w hle Index i einer Menge rufe die 2 entsprechende Aktion von set i auf ELSIF action 3 THEN END Jede Bedingung vergleicht denselben Ausdruck action mit einer Konstante 1 2 3 F r diesen Spezialfall bietet Component Pascal eine elegantere und effizientere Auswahlanweisung die CASE Anweisung Wir transformieren das obige Codest ck in das folgende quivalente CASE MathRandom Uniforml 1 n OF l de wahle Index i einer Menge rufe die 1 entsprechende Aktion von set i auf 2 w hle Index i einer Menge rufe die 2 entsprechende Aktion von set i auf 3 ELSE END 297 11 Dynamische Objektstrukturen 11 1 3 5 Programm 11 4 Testmodul f r Zeichenketten mengen 3 gt 1 298 Ist f r den Wert des Ausdrucks MathRandom Uniforml 1 n kein Fall 1 2 3 vorhanden und fehlt der ELSE Zweig so bricht die Ausf hrung der CASE Anweisung mit einem Trap ab Deshalb sehen wir hier einen leeren ELSE Zweig vor F r Details der CASE Anweisung verweisen wir auf den Component Pascal Language Report Anhang A 9 5 S 394 Implementation Der Entwurf des Testmoduls ist so weit gediehen dass wir ihn in eine Implementation umsetzen MODULE TestSetsOfString IMPORT BEC BasisErrorConstants Sets ContainersSetsOfString MathRandom Out UtilitiesOut UtilitiesRepeater CONST numberOfSets 5 maxltemLength 20 TYPE WriterDesc RECORD Set
296. et wird Mit Adressen sind gewisse Rechenoperationen m glich Der Zugriff Lesen Schreiben auf eine Zelle erfolgt ber ihre Adresse Eine Zelle ist die kleinste adressierbare Einheit meist gilt 1 Zelle 1 Byte 8 Bit Ein Wort bedeutet hier ein Maschinenwort das aus n Bytes besteht wobei rechnerabh ngig n 1 2 4 sein kann Die Maschinensprache ist die Menge der Programme die sich als Folgen von Befehlen aus dem Befehlsvorrat des Prozessors konstruieren lassen und die der Prozessor ausf hren kann Zum Prozessor geh rt ein Satz von Registern das sind kleine nur einige Byte gro e aber schnelle Speicher die keine Adressen Bild 4 3 Register und Speicher Befehlszyklus 4 2 Rechner sondern Namen haben Befehle greifen auf Register und Spei cherzellen zu im Wesentlichen k nnen sie Daten zwischen Speicher und Registern und zwischen Regi stern bewegen Daten in Registern manipulieren z B durch Rechenoperatio nen und logische Verkn pfungen und den Programmablauf steuern Prozessorregister Hauptspeicher Datenregister DO gt fe a OA3F MOVE W 10 DO Befehlsregister 0A40 ADDA W 2 DO ADDA W 2 DO 0A41 MOVE W DO 49 Befehlsz hler 0A41 Die Tatigkeit des Prozessors ist die sequenzielle Befehlsaus f hrung Er holt die Befehle einzeln aus dem Speicher und bear beitet sie nacheinander Den Befehlszyklus des Prozessors beschreibt dieser in programmiersprachen hnlichem Pse
297. etDesc WipeOut NEW IN a SetDesc Write END 2 I Attribut Fabrik Programm 12 6 Klassenmodul f r Mengen geordneter Elemente 12 1 Polymorphe Mengenklasse f r geordnete Elemente VAR emptySet SetDesc PROCEDURE New Set PROCEDURE StartTestInvariants PROCEDURE StopTestinvariants PROCEDURE TesilnvariantsOnce PROCEDURE TestInvariantsUntilBreak END ContainersSetsOfComparable Die Nummern in der folgenden Liste entsprechen den Num mern bei den Symbolen in Programm 12 5 1 Das Klassenattribut LIMITED bei Set verhindert das Erweitern der Klasse sowie das Vereinbaren Erzeugen und Zuweisen von Objekten in Kundenmodulen Die Klasse ist damit fiir Kunden final das vereinbarende Modul kontrolliert die Klasse und ihre Objekte vollstandig 2 Kunden erhalten nur durch Aufruf der Fabrikfunktion New Zugriff auf Set Objekte Wegen ihres Seiteneffekts darf sie nicht in Zusicherungen aufgerufen werden MODULE ContainersSetsOfComparable Interface Description Concrete polymorphic implementation class Set for sets consisting of BasisGenerals Comparable elements provides set operations and comparison relations Only dynamic objects may be used as receivers and parameters Restrictions and Design and Implementation Description Same as for ContainersSetsOfString see S 327 P IMPORT BEC BasisErrorConstants BG BasisGenerals ContainersStrings Used in InitRandom only which needs a concrete
298. etrag 60 Einheiten mehr und die Tasse ist hoffentlich gef llt mit Kaffee Man beachte dass der Aktionsaufruf Kaffeeautomat Kaffee_ausgeben keinen Wert liefert Ausdruck Ein Abfragenaufruf ist ein spezieller Ausdruck was ist ein all gemeiner Ausdruck Ein weiteres Beispiel ist der arithmetische Ausdruck a 12 c d e den wir von der mathematischen Notation in eine Softwarenota tion transformieren a 12 c d e Ein Ausdruck ist eine Vorschrift zur Berechnung eines Werts ein nach gewissen Regeln strukturiertes Gebilde das nach gewissen Regeln abgearbeitet d h ausgewertet wird Ein Aus druck setzt sich zusammen aus Operanden z B a 12 c d e Operationen z B und ggf Klammern z B Ein Operand ist ein passives Teil eines Ausdrucks das einen Wert liefert Ein Operand kann ein Wert z B 12 ein Abfra genaufruf z B a ein formaler Parameter z B c oder wieder Typbindung Seiteneffekt 2 2 4 Bild 2 1 Formaler Parameter 2 2 Benutzung angebotener Dienste ein aus anderen Teilen zusammengesetzter Ausdruck z B a 12 sein Eine Operation ist ein aktives Teil das seine Operanden mit einander verkn pft und aus ihren Werten einen neuen Wert bildet Klammern parenthesis sind ordnende Teile die die Reihen folge der Ausf hrung der Operationen bestimmen Die Auswertung evaluation eines Ausdrucks ist damit die Aus f hrung einer Folge von Operationen
299. etzer compiler Den bersetzungs prozess sto en wir an indem wir ein entsprechendes Kom mando eingeben Quell und Objektcode werden blicherweise in Dateien auf dem Hintergrundspeicher abgelegt Der vom bersetzer erzeugte Objektcode kann unvollst ndig sein er ist dann mit anderen Codeteilen zu einem ausf hrbaren Ganzen zusammenzuf gen Diesen Vorgang nennt man Binden das dazu benutzte Werkzeug Binder linker Im dritten Schritt kann der ausf hrbare Objektcode in den Hauptspeicher bertragen werden Dieser Vorgang hei t Laden das dazu benutzte Werkzeug Lader loader Der geladene Objektcode kann schlie lich in einer Sprachumgebung zum Ablauf gebracht werden Oft aber nicht zwingend erfolgt das Ausf hren execute run direkt nach dem Laden Das Modell von Bild 4 6 bilden wir auf vier aufeinander fol gende Zeitpunkte oder intervalle ab zu denen das Programm eine Transformation erf hrt Zur bersetzungszeit wird Quelltext bersetzt Zur Bindezeit werden Objektcodeteile gebunden Zur Ladezeit wird gebundener Objektcode geladen e Zur Laufzeit Ausfiihrungszeit wird geladener Objektcode ausgef hrt Das Adjektiv statisch charakterisiert oft Programmeigenschaf ten die zur bersetzungs oder Bindezeit festliegen w hrend sich dynamisch auf die Lade oder Laufzeit bezieht Wir haben hier die Arbeitsschritte der Implementierung m g lichst allgemein und unabh ngig von einer bestimmten Pro gram
300. evSearch Bild 5 5 Dokumentation von DevSearch SearchinDocu Sucher 5 3 Werkzeuge DevSearch DEFINITION DewSearch PROCEDURE Compare PROCEDURE SeanchinDeocu PROCEDURE SearchinSources PROCEDURE Select pat ARRAY OF CHARI END DevwSearch Zj Der Browser zeigt Schnittstellen Quelltext und Dokumentati onsdateien To browse bedeutet grasen naschen oder in B chern schm kern Wir wollen Browser aber nicht mit Graser Nascher oder Schm kerer bersetzen Die Men befehle Info Source Info Documentation funktionieren analog zu Info gt Interface Falls nur ein Modulname selektiert ist so zeigt der Browser die Schnittstelle den Quell text bzw die Dokumentation des ganzen Moduls ist ein qualifi zierter Name selektiert z B DevSearch SearchInDocu so zeigt er die entsprechende Stelle z B bei Info Documentation PROCEDURE Ee Guard Testis Select onSuard Search all available documentation teats in al subsystems and in Manuais for the occurrence of E the selected text pattern Search is case sensitive al Viele Mentibefehle kann man durch Tastenkombinationen abkiirzen die man auch selbst festlegen kann Beim Program mieren ist es angenehm an beliebiger Stelle in einem Quelltext einen unbekannten Namen per Maus zu selektieren und den Browser per Taste zu aktivieren um die gew nschte Auskunft zu erhalten Hier zeigen sich die Vorteile einer integrierten Ent wicklungsumgebung die profes
301. f setWrite in set ForAllDo zu ndern PROCEDURE WriteSef VAR wordWriter WordWriterDesc BEGIN set ForAllDo wordWriter END WriteSet 267 10 Statische Klassenstrukturen 10 3 3 Typbindung und Typpr fung Beispiel Polymorphie 268 Damit sind die Ausgabekommandos von I1WordChecker impleme tiert Wie wirkt sich die statische Struktur der Klassen auf die Ausf hrung eines Kommandoaufrufs aus Dazu untersuchen wir die dynamische Struktur der beteiligten Objekte Polymorphie und dynamisches Binden Seit 2 3 2 S 27 kennen wir das Konzept der Typbindung und sta tischen Typpr fung Variablen und Parameter sind an Typen gebunden Der bersetzer pr ft bei Zuweisungen ob der zuzu weisende Ausdruck zur Variable bei Parameter bergabe ob der aktuelle zum formalen Parameter passt Kompatibilit t bedeutet bisher grob gesagt dass die beteiligten Gr en vom gleichen Typ sind F r die exakten Definitionen verschiedener Kompatibilit tsarten in Component Pascal siehe Anhang A Appendix A S 406 Statische Typpr fung tr gt wesentlich zur Sicherheit von Programmen bei So garantiert der bersetzer bei Beispiel 1 sauf S 266 bis S 267 durch die Typpr fung dass beim bergeben eines item vom Typ Element an Do von Action das einen Wert des Typs Element erwar tet alles passt Wie verh lt es sich bei Beispiel 2 auf S 267 bis S 267 11WordChecker WriteSet bergibt an ForAllDo das an Containers SetsOfS
302. feeautomaten hal ten wir uns noch nicht an diese Konvention Allgemein hat eine Typvereinbarung die Form TYPE Typname Typ wodurch der Name auf der linken Seite neu eingef hrt und an den Typ auf der rechten Seite gebunden wird rechts kann ein bekannter Typname siehe S 140 oder ein neu konstruierter Typ stehen siehe oben Einfache Typen sind Grundtypen oder sol che die sich auf Grundtypen zur ckf hren lassen strukturierte Typen sind Reihungen und Verbunde Eine Typvereinbarung empfiehlt sich wenn von dem Typ mehr als ein Exemplar gebraucht wird Sie ist zwingend wenn der Typ als Parametertyp einer Prozedur erscheint weil Component Pascal Typvertr glichkeit und Typpr fung auf Typnamen zur ckf hrt nicht auf die Speicherstruktur des Typs Globale Typen kann ein Modul wie andere Merkmale exportie ren Exportiert ein Modul eine Prozedur mit einem selbst verein barten Typ als Typ eines formalen Parameters so muss es auch diesen Typ exportieren weil Kunden diesen Typ kennen m s sen um die Prozedur mit einem aktuellen Parameter dieses Typs aufzurufen Component Pascal erzwingt das leider nicht Parameter bergabearten Parameter bergabe in Component Pascal ist in vorigen Abschnitten schon vorgekommen Component Pascal kennt im Wesentlichen die f r Cleo vorgestellten bergabearten der Ein gabe Ausgabe und Ein Ausgabe bietet sie aber in Verbindung mit zwei Implementationsvarianten an Bei Wert bergabe w
303. ferant nderbares 220 Maschinenmodul 133 ausf hrbares 119 195 205 Mengenklassenmodul 288 238 312 318 Ausgabemodul 159 204 372 mit Zustand 133 134 247 Beh lterklassenmodul 287 ohne Zustand 216 245 247 Beh ltermodul 134 187 Quellmodul 150 Cleo Modul 74 Standardmodul 158 166 Component Pascal Modul 168 172 185 187 204 74 99 214 301 302 362 374 defektes 123 syntaktisch korrektes 117 dokumentiertes 327 Testmodul 46 287 288 290 Ein Ausgabemodul 216 292 294 298 301 302 335 362 374 307 376 Eingabemodul 158 202 370 Testwerkzeugmodul 287 Eintrittsmodul 82 290 292 308 elementspezifisches 207 Typenmodul 245 247 entladbares 105 vereinbarendes 21 112 127 erweiterbares 220 240 275 355 erweitertes 197 Werkzeugkastenmodul 216 Funktionsmodul 153 162 243 247 164 166 177 184 186 wiederverwendbares 83 293 205 206 220 287 geladenes 104 105 107 150 Modula 73 85 239 152 Modulart 246 generisches 207 208 MODULE 3 6 8 19 21 26 27 31 globales 92 33 36 58 72 74 77 79 99 Grafikausgabemodul 215 112 117 118 124 131 132 implementiertes 152 238 134 137 138 140 144 153 327 160 163 167 178 196 206 importiertes 107 212 215 220 235 236 241 431 C Sachwortverzeichnis 432 246 248 280 298 308 327 343 349 355 370 372 Moduleigenschaft 37 38 Modulkopf 74 77 Muster 17 36 155 302 311 312 340 342 354 362 364
304. ffee_ausgeben l sst sich nicht direkt verallge meinern Zun chst ist ihr Name in Ware_ausgeben zu ndern Die Variante Programm 9 2 hat aber einen Parameter vom Typ Tasse und wir wollen weder einen Fahrschein noch sonst eine Ware mit einer Tasse abholen au er Getr nken Das Verallgemeinern des Kaffeeautomaten zum Warenautomaten gelingt nur wenn gleichzeitig die Tasse verallgemeinert wird Zu was Stellen wir uns vor der vom Fahrscheinautomaten ausgegebene Fahrschein ist kein St ck Papier sondern eine aufladbare Magnetkarte die bei der Bahnfahrt durch Entladen entwertet wird aber wieder verwendbar bleibt Damit k nnen wir aus Tasse und Magnet karte einen Beh lter abstrahieren Beh lter als abstrakte Klasse Ein Klassendiagramm stellt den Sachverhalt dar Beh lter verh lt sich wie ein Magnetkarte Aus der Spezifikation der Tasse Programm 9 1 S 230 abstrahie ren wir die Spezifikation der abstrakten Klasse Beh lter 253 10 Statische Klassenstrukturen Programm 10 1 Beh lter als abstrakte Klasse Erweitern Programm 10 2 Tasse als erweiterter Beh lter Erben 254 CLASS Beh lter QUERIES leer BOOLEAN voll BOOLEAN ACTIONS leeren PRE NOT leer POST NOT voll f llen PRE leer POST voll INVARIANTS NOT leer AND voll END Beh lter Die Spezifikationen der konkreten Klassen Tasse und Magnetkarte erhalten wir als Erweiterungen extension der Spezifikation von Beh lter
305. flug zu generischen Modulen wenden wir uns wieder der Aufgabe zu die H ufigkeit von Zeichen sortiert aus zugeben Init von Programm 8 6 initialisiert eine Reihung x alle Elemente von x erhalten denselben Wert item Wir setzen es zum Initialisie ren der H ufigkeitsreihung ein Der Aufruf MathVectorsOflInteger Init frequency 0 geh rt als Verfeinerung zum ersten Schritt des Grobentwurfs des Algorithmus von S 202 vor den Eingabeschritt Sort von Programm 8 6 sortiert eine Reihung x Es w re voreilig die Haufigkeitsreihung zu sortieren weil dabei die Zuordnung zwischen Zeichen und H ufigkeit verloren geht Stattdessen vereinbaren wir eine zweite Reihung gleichen Typs VAR frequency frequencySorted ARRAY numberOfChars OF Frequency kopieren nach dem Eingabeschritt die H ufigkeitsreihung durch eine Zuweisung frequencySorted frequency und sortieren die Kopie MathVectorsOflnteger Sort frequencySorted Nebenbei erfahren wir dass die Zuweisung von Reihungen als Ganzes definiert ist Sie weist jedes Element der Reihung auf der rechten Seite Quelle dem entsprechenden Element auf der lin ken Seite zu Ziel Voraussetzung daf r ist dass Quelle und Ziel von demselben Typ sind sonst ware die Zuweisung nicht typ und speichersicher Bei Zeichenreihungen gelten spezielle Regeln Das Ergebnis des obigen Vorgangs veranschaulichen wir mit Stellvertretern der beiden Reihungen mit nur 6 Elementen Bild 8 3 Speich
306. formal parameter of a record or array type Ch 10 1 or if a pointer is used as argu ment of the standard procedure LEN Ch 10 3 A type guard v T asserts that the dynamic type of v is T or an extension of T i e program execution is aborted if the dynamic A Component Pascal Language Report type of v is not T or an extension of T Within the designator v is then regarded as having the static type T The guard is applica ble if 1 v is an IN or VAR parameter of record type or v is a pointer to a record type and if 2 Tis an extension of the static type of v If the designated object is a constant or a variable then the des ignator refers to its current value If it is a procedure the desig nator refers to that procedure unless it is followed by a possibly empty parameter list in which case it implies an activation of that procedure and stands for the value resulting from its execu tion The actual parameters must correspond to the formal parameters as in proper procedure calls see 10 1 If a designates an array of character type then a denotes the null terminated string contained in a It leads to a run time error if a does not contain a 0X character The selector is applied implic itly if a is used as an operand of the concatenation operator Ch 8 2 4 a relational operator Ch 8 2 5 or one of the predeclared procedures LONG and SHORT Ch 10 3 Examples of designators refer to examples in Ch 7
307. fsmuster f r Testmodul und Testwerkzeug 290 Bild 11 3 Klassendiagramm des Testszenariums eeeee 296 Bild 11 4 Test Objekt in New vor der R ckgabe nene 300 25 2 05 Abbildungsverzeichnis Bild 11 5 Test Objekt nach der Riickgabe und Zuweisung an test 300 Bild 11 6 Entwurfsmodell des Iestwerkzeugs uuennnene 301 Bild 11 7 Anker bei leerer Liste cccccccccceeccceesssccessssessscccssssecseessesess 304 Bild 11 8 Liste mit einem Element uneensensnnesennnnnnennnnennnnnnnn 305 Bild 11 9 Liste mit zwei Elementen cunsseessensnneeennnnennnnnnennnennnn 305 Bild 11 10 Liste nach Entfernen des letzten Elements 307 Bild 11 11 Bin arbaum e 2 0 tie lees dea aah 313 Bild 11 12 Braorder 2422 2 EEN ee Na hessen 315 Bild 11 13 Norden ee ROS ARIS Pe PO eR PRO 315 Bild 11 14 Bostorder cs en een re 315 Bild 11 15 Geordneter Bin rbaum exemplarisch eeesee 316 Bild 11 16 Geordneter Bin rbaum mit Projektion 0 0 0 0 eee 317 Bild 11 17 Entwurfsmodell des Mengenklassenmoduls 318 Bild 11 18 Mengenbaum mit drei Elementen u ueen 319 Bild 11 19 Baum nach Entfernen eines Elements eccere 323 Bild 11 20 Aliassituation ru 82a A E E een 325 Bild 11 21 Seichte Kopien nn een aten 326 Bild 12 1 Entwurfsmuster f r polymorphen Beh lter geordneter Ele mente exemplarisch ueseses
308. function proce dure must contain a return statement which defines its result All constants variables types and procedures declared within a procedure body are local to the procedure Since procedures may be declared as local objects too procedure declarations may be nested The call of a procedure within its declaration implies recursive activation Local variables whose types are pointer types or procedure types are initialized to NIL before the body of the procedure is executed Objects declared in the environment of the procedure are also visible in those parts of the procedure in which they are not con cealed by a locally declared object with the same name ProcedureDeclaration ProcedureHeading ProcedureBody ident ProcedureHeading PROCEDURE Receiver IdentDef FormalParameters MethAttributes ProcedureBody DeclarationSequence BEGIN StatementSequence END DeclarationSequence CONST ConstantDeclaration TYPE TypeDeclaration VAR VariableDeclaration ProcedureDeclaration ForwardDeclaration ForwardDeclaration PROCEDURE Receiver IdentDef FormalParameters MethAttributes If a procedure declaration specifies a receiver parameter the pro cedure is considered to be a method of the type of the receiver see 10 2 A forward declaration serves to allow forward refer ences to a procedure whose actual declaration appears later in the text The form
309. g abge bildet W rter sammeln Rechtschreibung pr fen Wir kn pfen an die Aufgabe von Abschnitt 8 1 an wobei uns jetzt die W rter anstelle der Zeichen eines Textes interessieren Ein Programm soll die Rechtschreibung eines Eingabetextes pr fen Dazu soll es die W rter des Textes mit dem Inhalt eines W rterbuchs vergleichen und alle W rter die nicht im W rter buch vorkommen in alphabetischer Reihenfolge ausgeben Au erdem soll es je nach Anforderung die gefundenen die unbekannten und die W rter des W rterbuchs ausgeben Entwurf Wir sehen f r die L sung der Aufgabe das Modul I1WordChecker vor und zerlegen zun chst die Aufgabe in Teilaufgaben die wir Kommandos zuordnen Die Hauptaufgabe das Lesen eines Tex tes und Ausgeben der unbekannten W rter bernimmt das Kommando Check Check ben tigt ein W rterbuch woher kommt es Ein weiteres Kommando InitDictionary liest einen Ein gabetext und definiert die gelesenen W rter als W rterbuch 261 10 Statische Klassenstrukturen Ein Ausgabe Beh lter Daten Mengenoperation 262 Schon die Kommandos InitDictionary und Check erm glichen die Rechtschreibung beliebiger Texte gegen ber beliebigen W rter b chern zu pr fen Logisch betrachtet kommen drei Mengen von W rtern vor die wir sogleich benennen dictionary W rterbuch foundWords Gefundene zu pr fende W rter des Eingabetextes unknownWords Unbekannte W rter des Eingabetextes Weitere Komma
310. g einer Dienstausf hrung weglassen 123 6 Vom Spezifizieren zum Implementieren LI Cleo Component Pascal 6 2 5 Programm 6 2 Kaffeeautomat vertraglich spezifiziert 124 Au erdem gilt Abfragen ver ndern den Zustand des Moduls nicht Ist eine Abfrage als Funktion implementiert so darf diese den Zustand nicht ver ndern sie muss seiteneffektfrei sein siehe Leitlinie 1 6 S 6 Dann kann sie auch die Invariante nicht ver ndern und die Pr fung der Invariante kann wegfallen Sind wir aber nicht ganz sicher ob eine Funktion seiteneffektfrei pro grammiert ist so hilft die Invariantenpr fung den Fehler schneller zu finden Allgemein gilt die Transformation INVARIANTS Bedingung PROCEDURE Checklnvariants BEGIN ASSERT Bedingung BEC invariantModule END Checklnvariants PROCEDURE Aktionsname formale Parameter BEGIN Checklnvariants ASSERT Vorbedingung BEC precondition Checklnvariants ASSERT Nachbedingung BEC postcondition END Aktionsname Damit haben wir f r fast alle Cleo Konstrukte gezeigt wie sie in Component Pascal Konstrukte zu transformieren sind Die Transformation von Cleo Klassen behandeln wir in Kapitel 9 Ein Kaffeeautomat mit Vertrag Fassen wir nun das Ergebnis des Transformationsschritts Bild 6 1 2 in einer vertraglichen Spezifikation des Kaffeeautomaten zusammen bevor wir die Prozeduren im Schritt 3 implemen tieren MODULE 11Kaffeeautomat IMPORT BEC Bas
311. gabe auch keinen Zustand keinen Initialisierungsteil und keine Invarianten Es stellt keine Vor und garantiert keine Nachbedingungen son dern pr ft die Bedingungen unter denen es 1Kaffeeautomat sicher aufrufen und dessen Zustand ausgeben kann berlegen wir uns zun chst ein allgemeines Muster dem die Algorithmen der Kommandos von l1Kaffeeautomat_EinAusgabe fol gen und notieren es in Pseudocode 155 7 Ein und Ausgabe Entwurf 1 des Algorithmus Auswahl Entwurf 2 des Algorithmus Mehrfache Auswahl 156 lies Eingabewert IF 11Kaffeeautomat im erwarteten Zustand und Eingabe erfolgreich und gelesener Wert verwendbar THEN rufe entsprechende Aktion von I1Kaffeeautomat auf zeige Zustand von 1Kaffeeautomat an ELSE gib Meldung aus END Das Lesen und Pr fen eines Eingabewerts kommt nur bei initiali sieren und Geld_einnehmen vor bei den anderen Kommandos ent fallen diese Teile Wir brauchen erstmals eine Auswahlanweisung IF THEN ELSE END damit das Kommando je nach Fall unterschiedlich reagiert siehe 4 7 3 S 76 Ist die zwischen IF und THEN stehende Bedingung erf llt so f hrt der Ablauf mit der zwischen THEN und ELSE stehenden Anweisungsfolge fort sonst mit der Anweisung zwischen ELSE und END Die Bedingung in Entwurf 1 des Algorithmus setzt sich aus drei Einzelbedingungen zusammen die alle gelten m ssen damit I1Kaffeeautomat korrekt aufgerufen wird So weit so gut Der Nachteil des Algorithm
312. gang Transitivit t 339 Trap 120 136 151 157 195 218 279 280 294 295 298 353 Trapnummer Fehlernummer Trapstelle 150 Trapursache 150 295 C Sachwortverzeichnis Trapzeitpunkt 151 152 Traversierung 320 321 324 Breitentraversierung 315 eines Baums 314 rekursive 322 Tiefentraversierung 315 Trennung von Funktion und Ein Aus gabe 15 153 187 214 von Sicht und Modell 363 TRUE 18 218 Typ 17 18 23 27 35 37 38 45 75 76 114 115 127 128 134 137 144 158 163 165 168 176 193 201 208 216 230 233 235 237 238 240 244 245 253 255 258 263 268 269 275 277 294 297 304 318 333 335 337 341 365 374 Abfragetyp 21 22 abstrakter 268 Datentyp anonymer 174 217 318 319 anwendungsspezifischer 365 Basistyp 216 258 275 277 319 boolescher 18 23 derselbe 20 208 217 dynamischer 269 353 einfacher 174 Elementtyp einer Menge 20 134 139 140 199 235 236 241 245 262 318 335 337 376 einer Reihung 135 137 138 197 206 208 216 217 221 Empf ngertyp 353 Ergebnistyp 25 259 353 erweiterbarer 284 319 Erweiterungstyp 258 268 exportierter 141 177 318 319 Feldtyp 165 44 C Sachwortverzeichnis 442 Ganzzahltyp 18 34 140 generischer 134 globaler 175 Grundtyp 18 37 38 75 114 116 138 140 174 176 implizit vereinbarter 75 Indextyp 140 konkreter 134 206 207 235 236 241 Mengentyp 138 319
313. ge dauernden TestUntilBreak das BlackBox f r andere Aktionen blockiert lautet Testen im Hintergrund TestSetsOfString StartTest startet einen Dauertest im Hintergrund TestSetsOfString StopTest stoppt ihn Die L nge des Zeitintervalls nach dem ein Einzeltest wiederholt wird stellen wir mit dem Kommandoaufruf 11 1 3 2 Fehler Spezifikation durch Vertrag Testen des Vertrags 11 1 Pr fling Testmodul und Testwerkzeug UtilitiesRepeater SetNextTime 100 milliseconds ein Je k rzer das Intervall ist umso mehr Einzeltests finden statt je l nger umso weniger wird die Reaktionsf higkeit von BlackBox beeintr chtigt Welche Dauertests gerade laufen zeigt 0 UtilitiesRepeater Show Testmethode Den Entwurf von TestSetsOfString bereiten wir mit allgemeinen Bemerkungen zum Testen vor Zun chst untersuchen wir ver schiedene Bedeutungen des Begriffs Fehler error Der Zweck eines Tests ist Fehlverhalten fault zu provozieren d h Situationen beim Ausf hren eines Pr flings in denen sich dieser unerwartet verh lt Die Gr nde bemerkten Fehlverhal tens muss der Tester ein Entwickler der einen Test durchf hrt erschlie en Eine Fehlerursache defect bug ist eine statische Eigenschaft des Pr flings seines Quelltextes oder Objektcodes Sie ist wiederum entstanden durch einen Denkfehler mistake des Programmierers Ein Test ist erfolgreich wenn Fehler auf treten Ein intensiver erfolgloser Test l s
314. ge deutsche Namen erscheinen verstiimmelt Um sthetische und ergonomische M ngel des Defaultlayouts zu beseitigen editiert man die Dialogbox Ist sie im Layoutmo dus so stellt der Dialogboxeditor das Men Layout zur Verf gung n tzlich sind auch die Edit gt Select Befehle Der Men befehl Edit gt Object Properties 7 3 Kaffeeautomat mit Dialogbox offnet eine Inspekteurdialogbox sie zeigt die Eigenschaften des selektierten Objekts an Bild 7 12 zeigt den Inspekteur passend zu Bild 7 11 Mit dem Inspekteur definiert man Eigenschaften eines Steuerelements einer Dialogbox und seine Bindungen an Merkmale von Modulschnittstellen Beim Arbeiten mit dem Inspekteur wiederholt man typischerweise die Schritte 1 Selektiere ein Steuerelement durch direktes Anklicken oder Anklicken des Next Knopfs des Inspekteurs 2 Trage Eigenschaften des Steuerelements im Inspekteur ein 3 Klicke auf den Apply Knopf des Inspekteurs Bild 7 12 Inspekteurdialogbox Inspector et Field fi Cafeosuwtomet_Ceelogi on Anzeige Areg In unserem Beispiel hat die Dialogbox nach dem Editieren das Layout von Bild 7 13 das dem physischen Modell des Kaffeeau tomaten Bild 1 1 S 1 hnelt 171 7 Ein und Ausgabe Bild 7 13 Editierte Dialogbox im Layoutmodus Dialogbox speichern Dialogbox benutzen 172 Bis fo are De m Es Pa Geld tunickgeberi L j gesammehar il Bereg inibalisieren Nach dem Editieren speiche
315. gebeziehungen sind nicht der Willk r des Ent werfers entsprungen Initialisierungen m ssen am Anfang ste hen die Eingabe der Daten muss vor ihrer Verarbeitung erfol gen die Verarbeitung vor ihrer Ausgabe Nur die Reihenfolge der beiden Ausgabezweige ist nicht festgelegt W rde man jeder Teilaufgabe ein Kommando zuordnen so w ren nur drei von 120 m glichen Aufrufreihenfolgen zul ssig eine sprudelnde Quelle f r Bedienerfehler Der Entwerfer steht damit vor den Alternativen Kommandos so entwerfen dass jedes eine kleine aber abge schlossene Teilaufgabe erledigt und die Kommandos m g lichst wenig voneinander abh ngen Zu den Kommandos eine Dialogbox gestalten und die Auf rufreihenfolge der Kommandos mit W chtern kontrollieren siehe Abschnitt 7 4 Zusammenfassung Wir haben zwei Aufgaben gel st und dabei gelernt dass es Wiederholungsanweisungen in Form von Bedingungs und Z hlschleifen gibt man Schleifen so konstruieren soll dass sie terminieren vertragliche Spezifikationen mit pr dikatenlogischen Aus dr cken aussagekr ftiger werden pr dikatenlogische Spezifikationen von Diensten zu Imple mentationen mit Schleifen f hren 8 4 8 5 Aufgabe 8 1 Algorithmus optimieren Aufgabe 8 2 Mengenmodul Aufgabe 8 3 Grafikmodul Aufgabe 8 4 Vektormodul Aufgabe 8 5 Spur 8 4 Literaturhinweise Reihungen und Schleifen zusammenpassen weil sich beim einen Datenelemente bei
316. gen ausgef hrt werden Strukturierte Anweisungen setzen sich aus Anweisungen und Bedingungen mit folgenden Konstrukten zusammen Folge Sequenz Anweisung A gefolgt von Anweisung B wird dargestellt durch A B 4 7 Die Implementationssprache Component Pascal Auswahl Alternative Falls Bedingung C erf llt dann Anweisung A sonst Anweisung B wird dargestellt durch IFCTHEN AELSE BEND Option Falls Bedingung C erf llt dann Anweisung A sonst Nichts wird dargestellt durch IF C THEN AEND Wiederholung Iteration Solange Bedingung C erf llt wie derholt Anweisung A wird dargestellt durch WHILE C DO AEND Die Methode Algorithmen nur aus solchen einfachen und strukturierten Anweisungen zu konstruieren hei t strukturier tes Programmieren Eine detaillierte Erl uterung der Anwei sungen folgt in 6 3 1 S 127 7 2 2 S 155 und 8 1 1 1 S 188 Ver gleichen Sie jedoch diese Konstrukte mit den Konstrukten der EBNF Regeln in Abschnitt 4 5 Die Syntax von Programmier sprachen und der Aufbau von Algorithmen folgen hnlichen Strukturgesetzen Importliste Wie wir seit Abschnitt 1 1 wissen kann ein Modul andere Module benutzen Module treten in den Rollen Kunde und Lie ferant auf In Component Pascal importiert ein Kundenmodul benutzte Lieferantenmodule explizit indem es die Namen der Lieferanten in einer Importliste nennt eingeleitet mit dem Schl sselwort IMPORT Das IMPORT Konstrukt folgt direkt auf den Modulkopf
317. gen von Klasseninvarianten f hren k nnten Spezifikation des Testwerkzeugmoduls Das Testwerkzeug hat die Aufgabe Dauertests durchzuf hren die sich durch Wiederholen von Einzeltests ergeben Einem Kunden des Testwerkzeugs also einem Testmodul obliegt es einen Einzeltest zu definieren der nat rlich bei jedem Aufruf mit anderen Werten arbeitet Wir l sen diese Aufgabe mit dem Entwurfsmuster das wir zur Ausgabe einer Menge verwendet haben siehe Bild 10 8 S 266 Das Werkzeugmodul UtilitiesRepeater bietet eine abstrakte Klasse Action mit einer abstrakten Prozedur Do die von Kunden in einer Erweiterungsklasse als Einzeltest zu implementieren ist einen Satz von Prozeduren die auf Objekten von Erweite rungsklassen von Action operieren siehe Bild 11 2 TestSetsOfString UtilitiesRepeater Action Do UntilBreakDo Start Stop Das Muster von S 266 adaptieren wir sodass f r die Klasse Action nur Referenzsemantik statt auch Wertse mantik erlaubt ist die Prozedur Do parameterlos statt parametrisiert ist die Kunden von Action Prozeduren statt einer anderen Klasse sind Prozedurale Schnittstelle 11 1 Pr fling Testmodul und Testwerkzeug Die Schnittstellenprozeduren von UtilitiesRepeater zu entwerfen und ihre Semantik zu beschreiben ist der n chste Schritt UntilBreakDo action ruft action Do wiederholt auf bis die Escape Taste gedr ckt wird dann gibt es z B diese Mel
318. gesucht ist die Menge der gelesenen Zei chen Als Zeichenmenge k nnen wir das Beh ltermodul Contai nersSetOfChar benutzen siehe Programm 6 6 S 138 Ein grober Entwurf eines Algorithmus f r Do ist 1 bereite Anfangszustand f r benutzte Dienste vor 2 lies Zeichen vom Eingabestrom und f ge sie zur Menge hinzu 3 gib jedes in der Menge enthaltene Zeichen aus 187 8 Strukturiertes und modulares Programmieren 8 1 1 1 Entwurf 1 des Eingabeschritts 188 Jeder Schritt ist zu verfeinern zu formalisieren und zu konkreti sieren Wir konzentrieren uns zun chst auf den Kern der Auf gabe den zweiten und dritten Schritt Aus der L sung folgt dann was im ersten Schritt zu tun ist Eingabe Nach jeder Leseoperation ist zu pr fen ob ein Zeichen gelesen wurde falls ja wird das gelesene Zeichen zur Menge hinzuge f gt und das n chste gelesen Am Ende des Eingabestroms ist kein Zeichen mehr zu lesen Mit der Kenntnis von Programm 7 3 S 160 k nnte der Algorithmus so aussehen In Char c1 IF In Done THEN ContainersSetOfChar Put c1 In Char c2 IF In Done THEN ContainersSetOfChar Put c2 In Char c3 IF In Done THEN ContainersSetOfChar Put c3 In Char c4 END END END Die Namen c1 c2 bezeichnen nacheinander gelesene Zeichen es k nnen beliebig viele sein Brauchen wir f r jedes Zeichen eine Variable Nein eine Variable gen gt VAR c CHAR Nach dem Aufruf ContainersSetOfChar Put c i
319. git letter A A 7 Ya Ag NZ A R O g er 6 g a y digit o 4 J 2 PS 4 5 6 7 1 8 9 Examples x Scan Oberon2 GetSymbol firstLetter 2 Numbers are unsigned integer or real constants The type of an integer constant is INTEGER if the constant value belongs to INTEGER or LONGINT otherwise see 6 1 If the constant is speci fied with the suffix H or L the representation is hexadecimal otherwise the representation is decimal The suffix H is used to specify 32 bit constants in the range 2147483648 2147483647 At most 8 significant hex digits are allowed The suffix L is used to specify 64 bit constants A real number always contains a decimal point Optionally it may also contain a decimal scale factor The letter E means times ten to the power of A real number is always of type REAL number integer real integer digit digit digit hexDigit H L real digit digit digit ScaleFactor ScaleFactor E digit digit hexDigit digit A B C D E F Examples 1234567 INTEGER 1234567 ODH INTEGER 13 12 3 REAL 12 3 4 567E8 REAL 456700000 OFFFFOOOOH INTEGER 65536 OFFFFOOOOL LONGINT 4294901760 3 Character constants are denoted by the ordinal number of the character in hexadecimal notation followed by the letter X character digit hexDigit X 4 Strings are
320. gramm 2 5 MODULE Kaffeeautomat Kaffeeautomat mit QUERIES Bedingungen auBer_Betrieb BOOLEAN eingenommener_Betrag INTEGER Preis INTEGER QUERIES FOR Betriebspersonal gesammelter_Betrag INTEGER ACTIONS Geld_einnehmen IN Betrag INTEGER PRE NOT auBer_Betrieb Betrag gt 0 POST eingenommener_Betrag OLD eingenommener_Betrag Betrag Kaffee_ausgeben PRE NOT au er_Betrieb eingenommener_Betrag gt Preis POST eingenommener_Betrag OLD eingenommener_Betrag Preis gesammelter_Betrag OLD gesammelter_Betrag Preis Geld_zur ckgeben PRE NOT au er_Betrieb POST eingenommener_Betrag 0 ACTIONS FOR Betriebspersonal initialisieren IN neuer_Preis INTEGER PRE neuer_Preis gt 0 POST NOT au er_Betrieb eingenommener_Betrag 0 Preis neuer_Preis gesammelter_Betrag 0 INVARIANTS eingenommener_Betrag gt 0 Preis gt 0 gesammelter_Betrag gt 0 END Kaffeeautomat Jeder Dienst au er initialisieren verlangt als Vorbedingung dass der Automat betriebsbereit ist Nur initialisieren stellt diese Bedin gung her Das bedeutet dass der Automat w hrend der Ausf h rung eines Dienstes au er Betrieb gehen kann 31 2 Spezifizieren Vollst ndigkeit Fazit 2 4 2 Invariante 32 Aus den Vor und Nachbedingungen l sst sich ermitteln wie die Aktionen nacheinander aufgerufen werden d rfen Ist der Automat au er_Betrieb so ist initialisieren die einzige erlaubte Aktion Unter der Vorausse
321. gramms 7 232 Durchschnitt 288 324 325 339 dynamic binding Bindung dynamische dynamisch 28 34 62 80 81 84 116 136 162 203 223 224 234 240 259 E EBNF Backus Naur Form erwei terte edge Kante Editieren 61 107 171 Editor 62 87 89 91 98 106 110 Dialogboxeditor 103 170 184 185 Texteditor 98 103 Effekt 6 18 28 29 157 284 Effizienz 49 50 54 79 120 129 137 138 176 194 199 209 210 220 222 223 225 280 283 313 Eiffel 39 249 259 342 375 Ein Ausgabe 13 14 48 154 157 160 162 163 185 187 201 214 225 262 293 sequenzielle 173 185 textuelle 201 Ein Ausgabebaustein 53 Eingabe 11 13 53 62 100 101 151 154 155 157 159 162 165 166 173 226 271 273 284 363 366 368 Daten Eingabedaten Texteingabe 94 366 Eingabestrom 157 158 162 187 190 195 202 284 Einheit 17 239 adressierbare 54 Darstellungseinheit 6 dynamische 81 Funktionseinheit 293 Ladeeinheit 74 80 240 lexikalische 66 67 71 104 logische 4 240 Modellierungseinheit 2 38 237 modulare 142 Programmeinheit 49 74 Schutzeinheit 240 Softwareeinheit 12 45 46 Struktureinheit 44 237 248 syntaktische 64 65 71 99 161 bersetzungseinheit 74 79 82 240 vertraglich spezifizierte 293 Zeiteinheit 291 303 Zerlegungseinheit 44 Einheitlichkeit 283 Einschr nkung 327 Element Datenelement einer Liste 305 307 312 einer Menge 8 33 3
322. grenzer sind Sonderzeichen Paare von Son derzeichen oder Schl sselw rter Schl sselw rter bestehen aus Gro buchstaben und sind reservierte W rter d h sie d rfen nicht f r Namen verwendet werden Operatoren Begrenzer Sonder EAT lt gt lt gt zeichen Schliissel AND DIV ACTIONS worter IMPLIES MOD INOUT NOT OR OUT CLASS END FOR IN INVARIANTS MODULE OLD POST PRE QUERIES Syntaktische Einheiten Auf der Basis der in 4 6 1 vorgestellten lexikalischen Einheiten betrachten wir nun syntaktische Einheiten von Cleo Terminale Symbole Das Alphabet der Terminale der syntaktischen Ebene kennt Namen Literale Operatoren und Begrenzer also die auf der lexikalischen Ebene definierten Einheiten Bei spiele sind ident number MODULE In Ausdr cken vorkommende Schl sselw rter m sste man eigentlich klammern z B MODULE Doch da die Gro schreibung Verwechslun md gen mit Nichtterminalen ausschlie t verzichtet man auf die Leerzeichen Zeilenumbruch usw d rfen nicht in Symbolen auf treten Sie werden ignoriert wo sie nicht Symbole trennen So ist MODULEAENDA 71 4 Programmiersprachen 4 6 2 2 Konvention 72 syntaktisch falsch weil das Schltisselwort MODULE gesperrt geschrieben ist und zwischen dem Schliisselwort END und dem Namen A ein Leerzeichen fehlt Syntaktisch korrekt ist hingegen MODULE A QUERIES i INTEGER END A obwohl links und rechts des Begrenzer
323. gsober fl chen das Unterscheiden der Rollen von Entwicklern und Benut zern In den folgenden Kapiteln entwickeln wir diese Ans tze weiter Literaturhinweise Zum Beispiel des Kaffeeautomaten angeregt hat uns J M J z quel 13 Dass Programme und Spezifikationen wesentlich das selbe bedeuten und sich nur in der Ausf hrbarkeit unterschei den darauf hat D Andrews hingewiesen 35 Viele informatische Begriffe wie Programmiersprache Befehl Kommunikationskanal k nstliche Intelligenz ent halten fragw rdige Metaphern Einer der Autoren die dies pro blematisieren und f r ein bewusstes Umgehen mit der Sprache pl dieren ist D Siefkes 38 bungen Mit diesen Aufgaben ben Sie das Modellieren mit Modulen Diensten Abfragen und Aktionen Modellieren Sie einen Kaffeeautomaten bei dem man Sorte und Zutaten w hlen kann koffeinfrei koffeinhaltig ohne mit Milch ohne mit Zucker Ziehen Sie Abschnitt 1 2 2 zu Rate Falls Sie Raucher sind modellieren Sie einen Zigarettenautoma ten sonst einen Automaten Ihrer Wahl Modellieren Sie einen W rfel Modellieren Sie eine Uhr Man kann die Zeit abfragen und Stunden und Minuten einstellen Die Uhr kann ticken 15 1 Einf hrung Aufgabe 1 5 Datum Aufgabe 1 6 Kreis Aufgabe 1 7 Widerstands schaltung Aufgabe 1 8 Getriebeschaltung 16 Modellieren Sie eine Datumsanzeige Man kann das Datum abfragen und einstellen Um 0
324. gsteile schreiben In diesem Beispiel ist immer an den Nachbedingun gen abzulesen wie die entsprechenden Zuweisungen lauten Zum Beispiel wird die Nachbedingung 131 6 Vom Spezifizieren zum Implementieren Programm 6 3 Kaffeeautomat implementiert 132 NOT auBer_Betrieb durch die Zuweisung auBer_Betrieb FALSE erf llt und die Nachbedingung eingenommener_Betrag OLD eingenommener_Betrag Betrag durch INC eingenommener_Betrag Betrag Das Gesamtergebnis sieht so aus MODULE I1Kaffeeautomat IMPORT BEC BasisErrorConstants Queries VAR auBer_Betrieb BOOLEAN eingenommener_Betrag Preis gesammelter_Betrag INTEGER Invariants PROCEDURE Checklnvariants BEGIN ASSERT eingenommener_Betrag gt 0 BEC invariantModule ASSERT Preis gt 0 BEC invariantModule ASSERT gesammelter_Betrag gt 0 BEC invariantModule ASSERT gesammelter_Betrag MOD Preis 0 BEC invariantModule END ChecklInvariants Actions PROCEDURE initialisieren neuer_Preis INTEGER BEGIN ASSERT neuer_Preis gt 0 auBer_Betrieb FALSE eingenommener_Betrag 0 Preis neuer_Preis gesammelter_Betrag 0 on BEC precondPariNonzero Checklnvariants ASSERT auBer_Betrieb ASSERT eingenommener_Betrag 0 ASSERT Preis neuer_Preis ASSERT gesammelter_Betrag 0 END initialisieren BEC postcondSupplierOk BEC postcondSupplierOk BEC postcondSupplierOk BEC pos
325. gt definiert sein Mit die sem Ansatz sind die Konjunktion und die Disjunktion nicht kommutativ d h die textuelle Reihenfolge der Operanden spielt eine Rolle Beispiel Demnach sind die obigen Ausdr cke 1 und 2 nicht quiva lent W hrend Ausdruck 2 undefiniert sein und seine Aus wertung zu einem Fehler f hren kann liefert Ausdruck 1 immer einen booleschen Wert m Gilt result notFound so wird der zweite Operand der Dis junktion nicht ausgewertet Ausdruck 1 liefert TRUE m Gilt result notFound nicht so wird der zweite Operand also result lt LEN x AND x result item ausgewertet Gilt dabei result lt LEN x so wird auch x result item ausgewer tet An dieser Stelle der Auswertung ist sichergestellt dass x result item definiert ist Gilt aber result lt LEN x nicht so wird x result item nicht ausgewertet und Aus druck 1 liefert FALSE Nur die Reihenfolge der Auswertung der Operanden bei der Konjunktion der Disjunktion und der Implikation ist durch die Sprache festgelegt ber die Auswertungsreihenfolge bei anderen Operatoren entscheidet trotzdem der bersetzer bauer Kurze Auswertung in Component Pascal wertet boolesche Ausdr cke generell kurz Component Pascal aus Auch in Cleo gilt kurze Auswertung sonst w re Programm gia ceg 8 6 fehlerhaft 219 8 Strukturiertes und modulares Programmieren Beispiel Pragmatik von Programmier Sprachen 8 2 4 3 Programm 8 10 Vektormodul
326. gt der Transformationsschritt von einem Component Pascal Modul zu einer Component Pascal Klasse siehe Bild 9 5 rechts Wir haben ihn exemplarisch mit der Menge vollzogen Welche Module eignen sich allgemein dazu sie in Klassen zu transformieren Wir haben verschiedene Arten von Modulen kennengelernt ein Unterscheidungskriterium ist ob das Modul einen Zustand hat oder nicht 9 5 1 Abstrakte Datenstruktur als Modul 9 5 Von der abstrakten Datenstruktur zum abstrakten Datentyp Module ohne Zustand wie Konstantenmodule z B BasisError Constants Werkzeugkastenmodule z B MathVectors und nat rlich Typenmodule sind nur als Einzelexemplare sinn voll Module mit Zustand sind abstrakte Datenstrukturen Solche Module sind potenzielle Kandidaten fiir die Transformation in einen abstrakten Datentyp ja eine Klasse z B von ContainersSetOfChar nach ContainersSetsOfChar Transformationsschema Allgemein verl uft die Transformation nach folgendem Muster MODULE Subsystemname Thing IMPORT Liste der benutzten Module CONST Vereinbarungen von Konstanten TYPE Vereinbarungen von Typen VAR Vereinbarungen von Variablen PROCEDURE Vereinbarungen von Prozeduren BEGIN initiale Anweisungen END SubsystemnameThing Im Einzelnen sind folgende Anderungen auszuf hren Den Modulnamen um ein s f r den Plural erweitern Zwei Typvereinbarungen f r die Klasse erg nzen eine f r den Zeigertyp eine f r den
327. gungen und Invarianten zu implementieren schieben aber einen Abschnitt ber Fehlernummern ein Fehlernummern Die einfache Variante der ASSERT Prozedur l sst nicht erkennen welche Art von Bedingung vorliegt ASSERT Preis gt 0 Daher bevorzugen wir die Variante mit dem zweiten Parameter Semantik Konstantenmodul 6 2 3 6 2 Von Cleo zu Component Pascal Schritt 2 ASSERT Preis gt 0 110 Die Fehlernummer 110 ist eine literale Konstante sie steht f r die Zahl einhundertundzehn Hier bedeutet sie Modulinva riante was ihr jedoch nicht anzusehen ist Besser ist es ihr einen symbolischen Namen zu geben der ihren Zweck aus driickt Dies geschieht mit einer Konstantenvereinbarung CONST invariantModule 110 Mit der symbolischen Konstanten invariantModule lautet die Zusi cherung ASSERT Preis gt 0 invariantModule Der Leser erkennt jetzt am Namen der Fehlernummer dass es sich um eine Modulinvariante handelt Dazu braucht er den Wert von invariantModule 110 nicht zu kennen Man kann invariantModule 110 als Abbildung betrachten die dem Zei chen invariantModule das Zeichen 110 zuordnet Mit der Terminologie von 4 4 4 S 60 k nnen wir sagen Der codierte Wert von invariantModule ist unwesentlich es kommt auf die Bedeutung des Symbols invariantModule an Wir brauchen symbolische Konstanten nicht nur f r Invarian ten sondern auch f r andere Bedingungen und zwar in vielen Modu
328. h Hinzunehmen weiterer Ausdr cke etwa zum Kaffeeautomaten Programm 2 8 S 35 ausbauen hnlich wie wir in 4 6 1 2 den Namen Apfel aus Formel 4 6 Syntax von Cleo 4 7 4 7 1 Formel 4 7 Softwaremodell von Component Pascal 4 7 Die Implementationssprache Component Pascal Syntaxregeln abgeleitet haben Dazu br uchten wir zun chst die Regeln f r die Nichtterminale Client QueryDeclaration ActionDeclara tion und Expression Wir f hren diese Regeln nicht einzeln ein sondern stellen sie hier zusammen Unit MODULE CLASS ident QUERIES Client QueryDeclaration ACTIONS Client ActionDeclaration INVARIANTS Expression END ident Client FOR ident QueryDeclaration ident FormalParameter Type Conditions ActionDeclaration ident FormalParameter Conditions FormalParameter IN OUT INOUT ident Type Type ident Conditions PRE ExpressionSequence POST ExpressionSequence ExpressionSequence Expression Expression SimpleExpression Relation SimpleExpression SimpleExpression Term AddOperator Term Term Factor MulOperator Factor Factor Designator literal OLD Expression NOT Factor Relation ee ler gt AddOperator OR IMPLIES MulOperator DIV MOD AND Designator ident ident Expression Expression Die Implementationssprache Compone
329. he rungen spezifizieren WHILE a DO ASSERT a b END ASSERT a Hier stehen a fiir eine seiteneffektfreie Fortsetzungsbedingung und b fiir Anweisungen Nach der Schleife ist also die Abbruch bedingung a erfiillt die negierte Fortsetzungsbedingung Im Entwurf 2 ist nach der WHILE Schleife das Ende des Eingabe stroms erreicht und alle gelesenen Zeichen sind in der Zeichen menge enthalten Ausgabe Untersuchen wir den dritten Schritt des Grobentwurfs des Algo rithmus von S 187 Die Formulierung jedes Zeichen verlangt auch hier eine Schleife Alle Zeichen sind der Reihe nach zu betrachten f r jedes Zeichen sind die gleichen Anweisungen auszuf hren Mit der Vereinbarung VAR c CHAR verfeinern wir den Schritt mit einer WHILE Schleife c kleinstes Zeichen WHILE c ist ein g ltiges Zeichen DO falls c in der Zeichenmenge enthalten ist gib c aus c n chstes Zeichen END Um diesen Pseudocode so zu formalisieren dass der bersetzer ihn akzeptiert benutzen wir die Standardfunktionen MIN MAX ORD und CHR siehe 6 3 5 1 S 134 und Anhang A 10 3 S 402 c MIN CHAR WHILE c lt MAX CHAR DO IF ContainersSetOfChar Has c THEN Out Char c END c CHR ORD c 1 END Wie ergibt sich aus einem Zeichen das n chste 1 Das Zeichen c als Zahl interpretieren ORD c 2 diese Zahl um 1 erh hen ORD c 1 3 die neue Zahl als Zeichen interpretieren CHR ORD c 1 Korrektheit
330. hen Diese Prozedur ist in das Programm 7 5 aufzunehmen Die genannten Elemente der Dialogbox sind an diesen W chter zu binden die Dialogbox sieht dann aus wie in Bild 7 20 Allgemein gilt Nicht nur Kommandokn pfen sondern beliebi gen Dialogelementen k nnen W chter zugeordnet sein Der 183 7 Ein und Ausgabe 7 5 2 Programm 7 7 Melder fur Betrag und Preis 184 Zustand eines Kommandoknopfs wechselt zwischen nicht klick bar und klickbar der eines beliebigen Steuerelements zwischen passiv und aktiv Melder Den ersten Mangel beheben wir mit einem weiteren Mechanis mus von BlackBox einem Melder notifier Wahrend ein Wach ter nur den Zustand von Steuerelementen beeinflusst kann ein Melder auch Werte von Dialogfeldern andern Genau diese Fahigkeit brauchen wir Sobald ein Benutzer in eines der Dialog felder Betrag oder Preis einen negativen Wert schreibt setzt ein Melder den Wert auf 0 zurtick Ein Melder wird vom Programmierer vereinbart Aufgerufen wird er von BlackBox nach jeder Interaktion mit einem Dialog feld das an den Melder gebunden ist aber bevor BlackBox die Wachter aufruft Ein Melder hat die Signatur PROCEDURE NameNotify op from to INTEGER Der Name NameNotify ist frei w hlbar endet aber gem unserer Programmierkonvention mit Notify Der Melder muss exportiert sein damit BlackBox ihn aufrufen kann In unserem Beispiel sind die Parameter irrelevant Bequemer weise schreiben wir
331. her und technischer Kommunikation nicht verwischen Der Begriff Mensch Maschine Interaktion ist nicht unproblematisch da der Mensch ein autonom und bewusst handelndes Subjekt der Rechner hingegen eine reaktiv operierende Maschine ist Wir verwenden jedoch diesen Begriff weil wir keinen besseren kennen Den Begriff Schnittstelle reservieren wir f r Verbindungen zwischen Dingen Ger ten Programmen usw Kunde und Lieferant sind Rollen die Softwareeinheiten im Kunden Lieferanten Modell spielen Exkurs Die Begriffe Kunde und Lieferant benutzen wir als Meta pher die Beziehungen zwischen Softwareteilen veranschaulichen soll Wir hoffen dass Verwechslungen von Kunden und Lieferantenmodu len mit Menschen die als Kunden und Lieferanten im Gesch ftsleben agieren ausgeschlossen sind Unter Kunde verstehen wir ein Modul das ein anderes Modul benutzt nicht etwa eine Person die einen Ent wicklungsauftrag f r ein Programm vergibt oder ein Softwarepaket kauft Ebenso meint Lieferant ein Modul nicht einen Hersteller oder Bild 1 8 Benutzer und Kommandos 1 4 Benutzer Kunde Lieferant Verk ufer von Software Sprache ist t ckisch Obwohl ein Kunde einen Lieferanten benutzt ist ein Kunde kein Benutzer Denn die Bezeichnung Benutzer f r ein Modul w rde damit konfligieren dass wir nur Men schen als Benutzer bezeichnen Aus den Definitionen folgt Das Programm 1 1 bietet als Liefe rantenmodul
332. hmen_bewachen VAR par Dialog Par BEGIN par disabled KA auBer_Betrieb OR Anzeige Betrag lt 0 END Geld_einnehmen_bewachen PROCEDURE Geld_einnehmen BEGIN KA Geld_einnehmen Anzeige Betrag Anzeige Betrag 0 Anzeige Meldung Betrag akzeptiert Zustand_ bertragen END Geld_einnehmen 179 7 Ein und Ausgabe PROCEDURE Kaffee_ausgeben_bewachen VAR par Dialog Par BEGIN par disabled KA au er_Betrieb OR KA eingenommener_Betrag lt KA Preis END Kaffee_ausgeben_bewachen PROCEDURE Kaffee_ausgeben BEGIN KA Kaffee_ausgeben Anzeige Meldung Hier ist Ihr Kaffee wohl bekomm s Zustand_ bertragen Dialog Beep END Kaffee_ausgeben PROCEDURE Geld_zur ckgeben_bewachen VAR par Dialog Par BEGIN par disabled KA au er_Betrieb OR KA eingenommener_Betrag lt 0 END Geld_zur ckgeben_bewachen PROCEDURE Geld_zur ckgeben VAR Betrag ARRAY 20 OF CHAR BEGIN Strings IntToString KA eingenommener_Betrag Betrag KA Geld_zur ckgeben Anzeige Meldung Hier erhalten Sie Betrag Zenti Euro zur ck Zustand_ bertragen END Geld_zur ckgeben BEGIN Zustand_ bertragen END I1Kaffeeautomat_DBbewacht 7 4 5 Dialogbox Die Kommandokn pfe in der Dialogbox sind an die W chter zu binden Dazu ffnet man die Dialogbox im Layoutmodus und benutzt den Inspekteur siehe viertes Feld in Bild 7 12 180 7 4 Kaffeeautomat mit bewachter Dialogbox Bild
333. hrt einen Hauptspeicher oder kurz Speicher memory der als passive Komponente Programme und Daten enth lt und in Ein Ausgabebausteine ber die Programme und Daten ein und ausgegeben werden Ein wesentliches Merkmal ist die universelle freie Program mierbarkeit Der Rechner ist strukturell unabh ngig von den zu bearbeitenden Aufgaben er wird erst arbeitsf hig durch ein Programm im Unterschied zu Rechenmaschinen mit fest einge bauten Mechanismen Das Programm ist eine Folge von Befeh len und stellt einen durch den Rechner ausf hrbaren Algorith mus zur L sung einer Aufgabe dar 53 4 Programmiersprachen Bild 4 2 Hauptspeicher 54 Flexibilitat und Effizienz werden erreicht durch die Programm speicherung d h Programme werden von au en in den Rech ner eingegeben und im Speicher abgelegt und durch den ein heitlichen Speicher der sowohl Befehle als auch Daten aufnimmt Der Zugriff auf Befehle und Daten unterliegt dem Konzept der Speicheradressierung Der Speicher besteht aus einer Menge Z gleichartiger durchnummerierter Zellen deren Inhalt ber ihre Nummer die Adresse hei t zugreifbar ist Adressen Zellen Jede Zelle kann Werte speichern der Inhalt einer Zelle ist ein Wort ber dem Bin ralphabet 0 1 Jede Zelle hat eine Adresse Adressen sind nat rliche Zahlen die Adressenmenge sei etwa A 0 k 1 Damit ist ein Adressraum eine Abbildung s A gt Z i gt sli durch die Z linear geordn
334. iablen belegten Speicherplatz automatisch frei Eine automatische Speicherbe reinigung garbage collection wird von Zeit zu Zeit aktiv und sammelt nicht mehr genutzte Speicherbereiche zur sp teren Wiedervergabe auf Nicht nur einzelne Variablen sondern aus solchen mittels Zeigern zusammengesetzte dynamische Daten bzw Objektstrukturen k nnen unerreichbar werden Beim Pro grammieren mit automatischer Speicherbereinigung ist es normal dass unerreichbare Datenstrukturen entstehen s ubert die M llabfuhr den Speicher regelm ig von uner reichbaren Elementen bleibt stets Speicherplatz zum Erzeugen dynamischer Varia blen verfiigbar Automatisch oder manuell Existenzdauer Speichersicherheit Zeiger als Parameter 10 3 W rter sammeln Rechtschreibung pr fen k nnen keine h ngenden Bez ge entstehen Ein h ngender Bezug dangling reference bezieht sich auf einen Speicher platz der nicht oder f r eine andere Variable reserviert ist Deshalb ist automatische Speicherbereinigung eine Vorausset zung f r die Speichersicherheit einer Programmiersprache Exkurs Bei Programmiersprachen ohne automatische Speicherbereini gung muss sich der Programmierer um die Speicherplatzverwaltung dynamischer Variablen k mmern indem er Aufrufe von L schopera tionen programmiert Der manuelle Ansatz birgt zwei Fehlerquellen Wird eine dynamische Variable nicht gel scht wenn der letzte Bezug auf sie verschwi
335. iagnose 295 Fehlererkennung 46 295 Fehlermarke 99 100 Fehlermeldung 93 99 110 280 Fehlernummer 120 121 150 157 353 Fehlerquelle 129 142 194 261 279 Fehlerstelle 99 Fehlerursache 126 152 293 295 Feld 169 241 247 286 303 Anzeigefeld 163 164 166 boolesches 169 einer Dialogbox 165 166 168 182 184 eines Verbunds 164 166 168 169 177 244 exportiertes 169 privates 243 245 schreibgeschtitztes 169 Textfeld 169 173 Fenster 93 94 96 119 150 152 162 205 214 301 363 369 374 aktives 99 104 155 158 363 Ausgabefenster 204 262 263 284 Kommandofenster 103 Loaded Modules Fenster 105 Log Fenster 93 103 104 110 154 157 159 162 173 291 374 Men fenster 103 162 Textfenster 94 102 149 157 367 Trapfenster 120 149 150 152 154 295 Variables Fenster 152 XYplane Fenster 214 Fenstergr e 98 field Feld eines Verbunds Finalisierungsteil 74 80 301 Fl che kartesische 205 214 216 Flexibilitat 54 217 218 269 fold Falter Folge 45 271 304 sortierte 316 von Aktionsaufrufen 28 233 von Anweisungen 76 156 189 203 311 von EBNF Ausdr cken 65 von Kanten 314 von Kommandoaufrufen 103 von Zust nden 211 232 FOR 26 113 193 197 204 205 209 266 Formalisieren 42 188 190 197 205 Formatierung von Daten 365 375 Fortran 129 C Sachwortverzeichnis forward declaration Vereinbarung Vorw rts vereinbarung forwarding
336. ichersicher Operationen 6 3 5 2 Programm 6 5 Zeichenmenge implementiert Effizienz 6 3 Von Cleo zu Component Pascal Schritt 3 Der Typ einer Variable bestimmt die zul ssigen Operationen auf seinen Exemplaren Deshalb sind mit indizierten Variablen alle Operationen m glich die der Elementtyp der Reihung erlaubt also insbesondere Zuweisungen und Parameter bergaben Direkte Implementation Um die Prozeduren des Zeichenmengenmoduls mit der Rei hung has zu implementieren brauchen wir zum Indexberechnen die Typanpassung von CHAR nach INTEGER und zum Setzen der indizierten Variable die Zuweisung MODULE ContainersSetOfChar IMPORT BEC BasisErrorConstants VAR has ARRAY ORD MAX CHAR ORD MIN CHAR 1 OF BOOLEAN PROCEDURE Has x CHAR BOOLEAN BEGIN RETURN has ORD x END Has PROCEDURE Put x CHAR BEGIN has ORD x TRUE ASSERT Has x BEC postcondSupplierOk END Put PROCEDURE Remove x CHAR BEGIN has ORD x FALSE ASSERT Has x BEC postcondSupplierOk END Remove END ContainersSetOfChar Da der Initialisierungsteil des Moduls fehlt werden nach dem Laden alle Elemente von has implizit mit FALSE initialisiert d h die Menge ist anfangs leer F r jedes Zeichen x CHAR gilt 0 ORD MIN CHAR lt ORD x lt ORD MAX CHAR LEN has 1 sodass ORD x die Indexvorbedingung f r has stets erf llt und keine Bereichs berschreitung v
337. icht der Subsysteme nneenee 88 5 2 Dateiorganisation setrit ikae eeir eiee REA EAER 90 5 2 1 Wurzelverzeichnis eeeneneee 90 52 2 N Subsystemet 2n nase 91 5 2 3 Module und Dateien nenenne 91 59 WELk ZOU gE peiie rr fae teks Pople ela eed 92 Jak Log Fenster eenaa 93 5 3 2 Online Dokumentation ueeeneenee 93 5 3 3 Browser und Sucher nnnenee 94 9 3 4 Lager oaae ierti aenea n aaien ran 96 5 3 5 Editor ea 98 5 36 bersetzer an ensnenuksnlhsnahse 99 5 3 7 Kommandointerpreter und Lader 101 53 8 Entl der naine misma shai hein ies 104 5 4 Programmentwicklung uuneeeeeeeeeee 105 5 5 Getrennt bersetzen dynamisch laden 107 5 5 1 bersetzen Sana een 107 55 2 Lade ripi neesi eae ea balun 109 5 6 Zusammenfassung neennnenensnennnnnene 110 5 7 Literaturhinweise eseesessessesnensennnneennnneene nennen 110 Vom Spezifizieren zum Implementieren u 111 6 1 Von Cleo zu Component Pascal Schritt 1 111 TY Modules 2 2 2 2 112 6 1 2 Merkmale ua 112 6 1 3 Rechte und Exportmarken nnence 112 6 1 4 Abfragen once asian tects 113 6 1 5 Aktionen sr iia tates 116 xiii Inhaltsverzeichnis xiv 6 1 6 Ein spezifizierter Kaffeeautomat 117 6 2 Von Cleo zu Component Pascal Schritt 2 119 6 2 1 Zusicherungen cece cece 119 6 2 2 Fehlernummern
338. icklungsumgebung BlackBox liefert Laufzeitinfor mationen die dem Tester helfen Fehlerursachen schnell zu lokalisieren Exkurs Cleo und Component Pascal sind befreundet aber nicht verhei ratet Cleo Spezifikationen kann man auch in andere Implementations sprachen transformieren doch eignet sich nicht jede Programmierspra che gleicherma en gut als Zielsprache So bieten beispielsweise C und C zwar Zusicherungen in Form eines Makros doch liefert dieses keine Laufzeitinformation Java kennt keine Zusicherungen man k nnte sie aber mit dem Ausnahmemechanismus nachbilden Von Cleo zu Component Pascal Schritt 3 Von den Transformationsschritten Bild 6 1 haben wir mit Pro gramm 6 2 die Schritte 1 und 2 ausgef hrt nun gehen wir 6 3 1 Bild 6 6 Zuweisung exemplarisch Bild 6 7 Zuweisung allgemein 6 3 Von Cleo zu Component Pascal Schritt 3 Schritt 3 Wir komplettieren Programm 6 2 indem wir eine Implementation angeben Dazu brauchen wir ein weiteres Spra chelement von Component Pascal Zuweisungen Zuweisungen Zu einer Zuweisung geh ren ein Variablenbezeichner und ein Ausdruck Zuweisen bedeutet die bezeichnete Variable an den Wert des Ausdrucks zu binden Dies ist in drei Schritten imple mentiert 1 Aus dem Bezeichner die Adresse der Variable ermitteln 2 Den Ausdruck auswerten 3 Den Wert im Speicherplatz der Variable deponieren Im einfachsten Fall ist der Bezeichner ein Variablenname etwa
339. ie Ausgabekommandos WriteDictionary WriteFoundWords und WriteUnknownWords schreiben den Inhalt der jeweiligen Menge alphabetisch sortiert in das Ausgabefenster Mit dem Aliasna men Out f r UtilitiesOut und der Vereinbarung VAR set ContainersSetsOfString SetDesc folgen sie dem Muster wobei Kursives zu ersetzen ist PROCEDURE WriteSef BEGIN Out WriteLn Out WriteString l1WordChecker uses the following set Out WriteLn set Write END WriteSet 263 10 Statische Klassenstrukturen Wieder verwendbarkeit Entwurf in Cleo 264 Dieser Entwurf setzt voraus dass ContainersSetsOfString SetDesc eine typgebundene Prozedur Write bietet die den Inhalt des Empf ngers mittels UtiitiesOut sortiert ausgibt siehe 19 Nachtei lig ist die eingeschr nkte Wiederverwendbarkeit dieses Write das die Ausgabe mit UtilitiesOut fest eingebaut hat Andere Kun den der Mengenklasse k nnten andere Ziele f r die Ausgabe von Mengeninhalten fordern Der Nachteil l sst sich beseitigen indem Write per Parameter erf hrt wie es ein Mengenelement ausgeben soll set Write wordWriter Objektorientiert gedacht ist der aktuelle Parameter wordWriter von set Write ein Objekt das f hig sein muss ein Mengenelement aus zugeben wordWriter ist Exemplar einer Klasse etwa WordWriterDesc und etwa so lokal vereinbart PROCEDURE WriteSef VAR wordWriter WordWriterDesc BEGIN set Write wordWriter END Write Set Die folgende
340. ie Standardmodule Out und StdLog schreiben Ausgabetext immer in dasselbe Log Fenster Das Modul UtilitiesOut kann ein neues Fenster ffnen um Text auszugeben Es schreibt nacheinander in verschiedene Fen ster aber immer nur in das zuletzt ge ffnete Mit Model Formatter und View Objekten k nnen wir mehrere Ausgabestr me gleichzeitig in verschiedene Fenster lenken Zusammenfassung Das letzte Kapitel hat uns an fortgeschrittene Themen der objekt und komponentenorientierten Programmierung heran gef hrt Polymorphe Beh lter k nnen Elemente verschiedener Typen enthalten Konzeptklassen modellieren abstrakte Ideen und F higkei ten wie Vergleichbarkeit und Speicherbarkeit Schnittstellenklassen entkoppeln Schnittstellen von potenzi ell vielen Implementationen die in Implementationsklassen verborgen werden Fabriken beliefern Kunden von Schnittstellenklassen mit Objekten privater Implementationsklassen Objekt bergreifende Invarianten sind Bedingungen die mehrere Objekte gemeinsam erf llen m ssen Sie lassen sich als Zusicherungen in Pr fprozeduren formulieren und durch randomisierte Tests pr fen Ein objektorientiertes Testverfahren pr ft systematisch bei konkreten Klassen ob sie geerbte und eigene objekt bergrei fende Invarianten erf llen 12 4 12 5 12 4 Literaturhinweise In kovarianten Erweiterungssituationen erg nzen dynami sche Typpr fungen die statischen Entw
341. ieferantenmoduls muss eine genaue Beschreibung der Schnittstelle zur Verf gung stellen Das Prinzip der Trennung von Schnittstelle und Implementa tion ist eine Auspr gung des allgemeineren Prinzips der Abstraktion Unwesentliche Information wird ausgeblendet Keiner muss alles wissen um arbeitsteilig zu entwickeln Die technischen Beispiele zeigen einen weiteren Aspekt Der Entwickler eines Radios muss dieses nicht v llig neu entwerfen er kann Empf nger Verst rker und Lautsprecher passend zusammenschalten Dazu muss er die Schnittstellen dieser Komponenten kennen Der Entwickler eines Autos muss dieses nicht in allen Details neu konstruieren er kann Elektrik Reifen Bremsen Getriebe aus dem Angebot von Zulieferfirmen w hlen Dazu muss er die Schnittstellen der Komponenten kennen Die Softwarepraxis n hert sich dieser Situation Der Entwickler einer Anwendung muss diese nicht ganz neu konstruieren er kann vorhandene Komponenten wiederverwenden Dazu muss er ihre Schnittstellen kennen Ein Softwareentwickler verf gt daher u a ber folgende F higkeiten 1 4 Bild 1 7 Mensch Maschine Modell Analogie 1 4 Benutzer Kunde Lieferant Er kann die Spezifikationen beliebiger Komponenten so gut verstehen dass er diese Komponenten in seinen Program men effektiv nutzen kann Er kann die Schnittstellen der von ihm entwickelten Kompo nenten so gut beschreiben dass andere seine Spezifikationen verstehen k nnen
342. ient dazu Meldungen auszugeben ARRAY 60 OF CHAR ist ein Reihungstyp fiir Zeichenketten mit der maxima len Lange 60 1 Die Schl sselw rter RECORD und END begrenzen einen Verbund typ sie umschlie en eine Liste von Elementen die Felder Attri but field hei en Verbundfelder werden syntaktisch wie Varia blen vereinbart Zur Konstruktion eines Verbundtyps ist also fiir jedes Feld ein Name z B au er_Betrieb und ein Typ z B BOOLEAN anzugeben RECORD Feldname A Feldtyp A Feldname B Feldtyp B END Vom obigen Verbundtyp ist nur ein Exemplar zu vereinbaren eine Variable des Verbundtyps die wir nach ihrem Zweck Anzeige nennen VAR Anzeige RECORD auBer_Betrieb BOOLEAN END Der Variable Anzeige ist zur Laufzeit ein Speicherplatz zugeord net der aus Speicherpl tzen fiir die Verbundfelder besteht siehe Bild 7 10 Der Name Anzeige bezeichnet den Verbund als Ganzes Die ein zelnen Felder eines Verbunds sind mit der Punktnotation expli Bild 7 10 Speicherplatz zu Verbund exemplarisch Operationen Export von Feldern 7 3 Kaffeeautomat mit Dialogbox zit benennbar und direkt zugreifbar Beispielsweise bezeichnen die qualifizierten Namen Anzeige auBer_Betrieb und Anzeige Meldung zwei Felder des Verbunds Anzeige Allgemein hat eine qualifi zierte Variable die Form Verbundvariablenname Feldname Die Notation entspricht absichtlich der von Cleo fiir den Zugriff auf Dienste von O
343. ieren dazu keine abstrakte Datenstruk tur denn es gen gt eine konkrete Reihung von Z hlern VAR frequency ARRAY numberOfChars OF INTEGER Ahnlich wie bei der Implementation der Zeichenmenge wird jedes Zeichen auf einen Index dieser Reihung abgebildet Ganze Zahlen kommen als Indizes und als Elemente der Reihung vor mit unterschiedlicher Bedeutung Zur besseren Lesbarkeit des Programmtextes vereinbaren wir fiir jeden Zweck einen Typ TYPE Frequency INTEGER Index INTEGER Mit den vereinbarten Variablen VAR c CHAR frequency ARRAY numberOfChars OF Frequency erh lt man zu einem Zeichen seine H ufigkeit 1 Das Zeichen c als Zahl interpretieren ORD c 2 diese Zahl als Index eines Reihungselements verwenden frequency ORD c Ein grober Entwurf eines Algorithmus fiir Do ist 201 8 Strukturiertes und modulares Programmieren Grobentwurf des Algorithmus 8 2 1 1 Tabelle 8 1 Partieller Vergleich von UtilitiesIn und In Entwurf 1 des Eingabeschritts Muster zur sequenziellen Eingabe und Verarbeitung mit WHILE Muster zur sequenziellen Eingabe und Verarbeitung mit LOOP 202 1 bereite Anfangszustand f r benutzte Dienste vor und initialisiere Daten 2 lies Zeichen vom Eingabestrom und registriere ihre H ufigkeiten 3 gib die vorkommenden Zeichen sortiert mit ihren H ufigkeiten aus 4 gib die vorkommenden H ufigkeiten sortiert mit den Zeichen aus Wir beginnen wieder damit den
344. iesRepeater braucht zur Registratur der Action Objekte f r die Hintergrundaktionen und ihrer Secretary Objekte einen Beh lter eine Art Menge Den Beh lter implementiert es selbst statt eine geeignete Beh lterkomponente zu benutzen und zwar als dynamische Objektstruktur Wir w hlen daf r die Organisati onsform einer einfach verketteten Liste singly linked list Ihre Elemente sind in einer Folge angeordnet jedes Element hat einen Zeiger auf seinen Nachfolger Hier sind die Elemente Secretary Objekte und der Nachfolgerzeiger hei t next VAR first Secretary vereinbart eine private Variable von UtilitiesRepeater als Anker auf seine Liste von Secretary Objekten Nach dem Laden des Moduls hat first den Wert NIL d h die Liste ist leer first NIL Secretary 11 2 2 1 Bild 11 8 Liste mit einem Element Bild 11 9 Liste mit zwei Elementen 11 2 Testwerkzeugmodul Einf gen eines Elements UtilitiesRepeater Start f gt ein neues Secretary Objekt in die Liste ein Beispielsweise hat die Liste nach dem Aufruf UtilitiesRepeater Start test von S 300 in dem test auf ein TestSetsOfString Test Objekt zeigt den Zustand von Bild 11 8 Auch die Komposition des neuen Secretary Objekts mit dem tibergebenen Test Objekt ber den polymorphen Action Zeiger ist dargestellt item set writer restoring ten action I name TestSetsOfString Test first count 0
345. ieser Zahl 10000H Aber eigentlich wollen wir die Kardinalit t des Wertebe reichs von CHAR deutlich ausdr cken Mit den Vereinbarungen c CHAR und i INTEGER gilt in Compo nent Pascal siehe Anhang A 10 3 S 402 ORD c ist die Ordnungszahl von c CHR i das Zeichen mit der Ordnungszahl i MOD 100004 MIN CHAR ist das kleinste 0X MAX CHAR das gr te Zeichen OFFFFX ORD und CHR passen CHAR und INTEGER Werte explizit aneinan der an Es ist CHR ORD c c und ORD CHR i i f r ORD MIN CHAR lt i lt ORD MAX CHAR Damit ergibt sich die Anzahl der Werte von CHAR zu ORD MAX CHAR ORD MIN CHAR 1 Nun ist von der booleschen Reihung ein Exemplar zu vereinba ren eine Variable des Reihungstyps die wir nach ihrem Zweck has nennen VAR has ARRAY ORD MAX CHAR ORD MIN CHAR 1 OF BOOLEAN Die Lange einer Reihung liefert die Standardfunktion LEN Wegen LEN has ORD MAX CHAR ORD MIN CHAR 1 135 6 Vom Spezifizieren zum Implementieren Bild 6 8 Speicherplatz zu Reihung exemplarisch Zugriff Speichersicherheit AND als amp 136 ist der rechts stehende Ausdruck nur einmal n mlich bei der Vereinbarung der Reihung has hinzuschreiben Der Variable has ist zur Laufzeit ein Speicherplatz zugeordnet der aus LEN has Speicherpl tzen f r boolesche Werte besteht 0 1 2 LEN has 2 LEN has 1 has FALSE TRUE P A TRUE FALS
346. ifier or 2 Tais declared in a type declaration of the form Ta Tb or 3 a and b appear in the same identifier list in a variable record field or formal parameter declaration Equal types Two types Ta and Tb are equal if 1 Ta and Tb are the same type or 2 Ta and Tb are open array types with equal element types or 3 Ta and Tb are procedure types whose formal parameter lists match or 4 Ta and Tb are pointer types with equal base types Matching formal parameter lists Two formal parameter lists match if 1 they have the same number of parameters and 2 they have either equal function result types or none and 3 parameters at corresponding positions have equal types and 4 parameters at corresponding positions are both either value IN OUT or VAR parameters Type inclusion Numeric and character types include the values of smaller types of the same class according to the following hierarchies REAL gt SHORTREAL gt LONGINT gt INTEGER gt SHORTINT gt BYTE CHAR gt SHORTCHAR Type extension base type Given a type declaration Tb RECORD Ta END Tb is a direct extension of Ta and Ta is a direct base type of Tb A type Tb is an extension of a type Ta Ta is a base type of Tb if 1 Ta and Tb are the same types or 2 Tb is a direct extension of an extension of Ta or 3 Tais of type ANYREC If Pa POINTER TO Ta and Pb POINTER TO Tb Pb is an extension of Pa Pais a base type of Pb if
347. igenschaften von Zeichenketten die diese Klasse nutzt sind das Kopieren von Zeigern auf Zeichenketten und das Vergleichen von zwei Zeichenketten mit der Ordnungs relation lt Genau betrachtet ist die Schnittstelle der Klasse unab h ngig von ihrem Elementtyp ihre Implementation mit einem geordneten Bin rbaum nutzt die Ordnung des Elementtyps Daher ist die Implementation auf Elementtypen verallgemeiner bar f r die eine Ordnungsrelation lt definiert und der Wertebe reich vollst ndig geordnet ist F r je zwei Exemplare x y des Elementtyps gilt entweder x lt y y lt x oder x y Mit den Begriffen von S 206ff und S 235f formuliert Die Spezi fikation der Mengenklasse ist generisch f r beliebige Elementty pen ihre Implementation mit einem geordneten Bin rbaum ist generisch f r Elementtypen mit vollst ndiger Ordnung Eine Menge f r Zeichenketten wollen wir etwa so vereinbaren stringSet Set OF String Component Pascal unterst tzt diesen generischen Ansatz nicht erlaubt jedoch eine objektorientierte polymorphiebasierte L sung die ihm nahe kommt 335 12 Vom Entwerfen zum Testen Comparable SetOF Comparable Bild 12 1 Entwurfsmuster f r polymorphen Beh lter geordneter Elemente exemplarisch Set OF String 336 Vollst ndig geordnete Mengen von Dingen kommen in der Rea lit t oft vor Daher liegt der objektorientierte Ansatz nahe die vollst ndige Ordnung als Klasse zu modellieren Wir def
348. iligt ist Die Komposition ist mit Referenzsemantik implementiert Secretary hat einen poly morphen Action Zeiger der sich zur Laufzeit auf ein Test Objekt eines Testmoduls bezieht In UtilitiesRepeater setzen wir das Muster der Weiterleitung for warding ein um das Do von Secretary zu implementieren Es ruft das Do des Action Objekts des Empf ngers auf Die Aggregation in Bild 11 6 bezieht sich auf Secretary selbst und ist daher nur mit Referenzsemantik zu implementieren Sie repr sentiert eine Liste von Secretary Objekten f r nebenl ufige Dauertests Diesem Aspekt widmen wir den Abschnitt 11 2 2 Nun machen wir uns mit der Schnittstelle des Lieferantenmo duls Services vertraut an das UtilitiesRepeater Teilaufgaben dele giert Wir beschr nken uns auf die zum L sen der Aufgabe ben tigten Dienste DEFINITION Services CONST immediately 1 now 0 resolution 1000 TYPE Action POINTER TO ABSTRACT RECORD a Action Do NEW ABSTRACT END PROCEDURE Dolater a Action notBefore LONGINT PROCEDURE GetTypeName IN rec ANYREC OUT type ARRAY OF CHAR PROCEDURE RemoveAction a Action PROCEDURE Ticks LONGINT Other procedures not shown END Services DoLater a notBefore registriert a um a Do einmal zum absolu ten Zeitpunkt notBefore im Hintergrund aufrufen zu lassen a ist ein polymorpher Zeiger er bezieht sich auf ein Objekt einer Erweiterung von Services Action das Do wird dyn
349. imalziffer beginnen damit er sich im ersten Zei chen von Zahlen unterscheidet Deshalb steht vor dem Wieder holungsausdruck der Auswahlausdruck letter _ Cleo kennt zwei Arten von Namen Implizit definierte Namen legt die Sprache selbst fest n mlich gem Tabelle 2 2 S 18 die Typnamen BOOLEAN CHAR NATURAL INTEGER REAL und die Wertenamen FALSE TRUE Explizit definierte Namen legt der Programmierer in Vereinba rungen fest In Beispielen haben wir solche Namen benutzt Kaffeeautomat Preis Geld_einnehmen Switch on Set Put Per Konvention sind alle implizit definierten Namen gro geschrieben f r explizit definierte Namen verwenden wir Gro und Kleinbuchsta ben wie in der Schriftsprache blich Wir k nnen durch Anwenden der Regeln von Formel 4 2 belie bige Namen erzeugen Der Algorithmus dazu lautet 1 Gehe vom Startsymbol aus 2 Ersetze im aktuellen Ausdruck m ein Nichtterminal durch seinen definierenden Ausdruck oder eine Auswahl oder Option durch einen Fall oder eine Wiederholung durch den zu wiederholenden Aus druck gefolgt von der Wiederholung oder m eine Wiederholung durch Nichts 3 Wiederhole Schritt 2 solange bis der Ausdruck nur noch Terminale enth lt Wir f hren den Algorithmus an einem Beispiel aus Dabei zeigt das Zeichen gt einen Ersetzungsschritt an ident gt letter _ letter _ digit gt letter letter _ digit gt A letter _ digit
350. in Modul das eine Konzeptklasse Concept definiert 1 Formuliere die objekt bergreifenden Invarianten zu Concept als Zusicherungen in einer Modulprozedur SomeCon 339 12 Vom Entwerfen zum Testen Bild 12 4 Spezifikation und Test von Konzeptklassen exemplarisch 12 1 5 Verfahrensschritte 340 cepts CheckConceptinvariants Versehe diese Prozedur mit Einga beparametern f r die an einer Invariante beteiligten Objekte 2 Programmiere zu jeder Erweiterung von Concept eine Pr f prozedur die SomeConcepts CheckConceptinvariants mit aktuellen Objekten aufruft und eventuell weitere Regeln pr ft BasisGenerals 7 CheckAnyInvariants A I PartComparable CheckPartComparablelnvariants A I Comparable CheckComparablelnvariants Auf Any PartComparable und Comparable angewandt liefert das Ver fahren den Entwurf von Bild 12 4 an dem ein Muster erkennbar ist Die Invariantenpr fprozedur einer Erweiterungsklasse ruft die Pr fprozedur ihrer Basisklasse auf und pr ft die zus tzli chen objekt bergreifenden Invarianten ihrer Klasse Testverfahren f r konkrete Klassen Im Beispiel ist ContainersSetsOfComparable Set eine konkrete Erwei terungsklasse zu BasisGenerals PartComparable und Containers Strings String eine zu BasisGenerals Comparable Konkrete Erweiterun gen von Konzeptklassen testen wir doppelt Ist SomeThings ein Modul das eine konkrete Klasse Thing definiert die SomeCon cepts Concept erwe
351. iner Klasse 258 260 265 285 302 eines Moduls 200 invariante 259 352 konkrete 336 340 347 353 354 364 kovariante 257 258 352 375 376 Standarderweiterung 364 Typerweiterung 240 241 244 258 Erzeugung dynamische 279 einer dynamischen Variable 276 278 eines Objekts 238 279 295 300 306 338 341 355 ESC 312 evaluation Auswertung EXCL 138 execute ausf hren Exemplar 17 37 38 75 135 137 217 230 234 235 237 238 241 243 251 252 255 258 264 275 277 335 Einzelexemplar 230 238 247 Existenzdauer 162 275 279 EXIT 203 explizit 69 75 77 80 135 136 176 245 276 Export 112 144 301 318 eines Felds 165 eines Typs 175 schreibgeschtitzter 114 143 165 Exportart 165 Exportmarke 112 115 118 Exportpolitik 144 240 expression Ausdruck EXTENDS 254 EXTENSIBLE 289 290 319 348 349 extension Erweiterung F Fabrik 240 300 347 349 355 368 369 374 factory Fabrik Fallunterscheidung Auswahl FALSE 18 218 Falter 92 97 98 fault Verhalten Fehlverhalten Fehler 35 43 46 49 83 99 100 109 119 124 139 151 152 191 218 219 229 280 293 296 325 347 353 354 Denkfehler 293 Eingabefehler 162 Laufzeitfehler 83 109 220 Programmierfehler 130 220 Schnittstellenfehler 108 semantischer 83 Syntaxfehler 25 83 99 100 271 272 Tippfehler 135 Typfehler 27 80 128 bersetzungszeitfehler 83 Fehlerart 83 Fehlerd
352. ingabedaten versorgt und die erzeugten Ausgabedaten 45 3 Softwareentwicklung Zusicherung Testmodul Iteratives Entwicklungsmodell Bild 3 2 Entwicklungszyklus 46 werden untersucht Diese T tigkeit kann man gelegentlich sche matisch ausf hren zum Testen komplexer Softwareeinheiten muss man jedoch spezielle Testprogramme schreiben was wie derum Kreativit t erfordert Die in diesem Buch vorgestellte Testmethode ist mit der Methode der Spezifikation durch Vertrag verbunden Implementierte Softwareeinheiten pr fen sich dabei selbst mittels eingebauter Konstrukte die Fehler erkennen Dar ber hinaus zeigen wir in den Kapiteln 11 und 12 wie der Entwurf eines Tests in den Ent wurf der Softwareeinheit zu integrieren ist Spezielle Notationen ben tigen wir dazu nicht Wichtige Begriffe sind Zusicherung Testfall Testmodul und Testwerkzeug Wir haben nun auf jede der f nf Ebenen der Softwareentwick lung einen Blick geworfen In der Praxis durchqueren wir die Ebenen nicht nur einmal sequenziell Sp testens der Test soll zeigen was schief gelaufen ist und was noch fehlt Zum Korri gieren von Fehlern Verbessern und Erweitern des Programms m ssen wir schlechtenfalls die Zerlegungsstruktur g nstigen falls die Implementation ndern Der Test ist die gro e H rde die die Software nehmen muss bevor sie zum Produkt wird Doch auch in anderen Ebenen entdecken wir hoffentlich schon Fehler wenn wir Teilergebnisse kritisch d
353. ings m Programmiere eine an SomeThings Thing gebundene Proze dur Checklnvariants die die Klasseninvarianten enth lt m Programmiere zu jeder an SomeThings Thing gebundenen Prozedur die Vor und Nachbedingungen 2 Entwickeln des Testmoduls TestThings m Frweitere die Klasse UtilitiesRepeater Action zu TestThings Test m Vereinbare in TestThings Test mindestens ein Objekt thing vom Typ SomeThings Thing m Implementiere die Prozedur Do von TestThings Test so dass sie jede Aktion von thing in jeder relevanten Situation ein mal aufruft Ist die Aktion parametrisiert so versorge ihre Parameter mit Zufallswerten die die Vorbedingungen erf llen Meist ist es unn tig die Abfragen von thing expli Fazit Analogie 11 1 Pr fling Testmodul und Testwerkzeug zit aufzurufen da sie in Zusicherungen benutzt und dadurch mitgetestet werden Das Do von TestThings Test stellt also einen randomisierten Einzeltest bereit der wie derholt aufgerufen beliebig viele zuf llige Testf lle abdeckt Erzeuge ein Objekt test vom Typ TestThings Test Programmiere die in 11 1 3 1 beschriebenen Testkomman dos bergebe dabei test an entsprechende Dienste von Uti litiesRepeater 3 Fehlererkennung Rufe das Testkommando TestThings TestUntil Break oder TestThings StartTest auf Solange es still l uft ist kein Fehler erkannt Tritt ein Trap auf so ist der Test erfolgreich 4 Fehlerdiagnose Das Trapfenster erm glicht es Laufzeitin
354. inieren eine abstrakte Klasse Comparable statten sie mit den Relationen lt gt lt und gt aus und fordern dass sie Formel 12 1 erf llt Die Mengenklasse Set generalisieren wir indem wir als ihren Elementtyp Comparable zulassen Dazu ersetzen wir in Programm 11 7 S 327 die Typvereinbarung Element POINTER TO ARRAY OF CHAR durch Element Comparable und benennen das Modul in ContainersSetsOfComparable um Nun kann ein Objekt der Mengenklasse ContainersSetsOfComparable Set Objekte beliebiger konkreter Erweiterungen von Comparable spei chern Einer Menge etwa vereinbart durch VAR set ContainersSetsOfComparable Set ist von au en nicht anzusehen von welchem Typ ihre Elemente sind Deshalb nennen wir die neue Mengenklasse polymorph Allgemein kann ein polymorpher Beh lter Elemente verschie denen Typs speichern Comparable Um ContainersSetsOfComparable Set im Rechtschreibpr fungsmodul einzusetzen vereinbaren wir eine Zeichenkettenklasse String als konkrete Erweiterung von Comparable TYPE String POINTER TO RECORD Comparable string POINTER TO ARRAY OF CHAR END und redefinieren die geerbten Relationen Da diese Klasse von der Anwendung und vom Beh lter unabh ngig sein soll ord nen wir sie einem eigenen Modul ContainersStrings zu Eine Menge bindet Operationen mit Elementen dynamisch Zwei Elemente sind dabei nur vergleichbar wenn sich ihre 12 1 2 Bild 12 2 Entwurfsmuster f
355. integer type Visven INCL v x v SET x integer type vi v x 0 lt x lt MAX SET NEW vV pointer to record or fixed array allocate v NEW v x0 xn v pointer to open array allocate v with xi integer type lengths x0 xn In ASSERT x n and HALT n the interpretation of n is left to the underlying system implementation 10 4 Finalization A predeclared method named FINALIZE is associated with each record type as if it were declared to be bound to the type ANYREC 403 A Component Pascal Language Report 404 PROCEDURE a ANYPTR FINALIZE NEW EMPTY The FINALIZE procedure can be implemented for any pointer type The method is called at some unspecified time after an object of that type or a base type of it has become unreachable via other pointers not globally anchored anymore and before the object is deallocated It is not recommended to re anchor an object in its finalizer and the finalizer is not called again when the object repeatedly becomes unreachable Multiple unreacha ble objects are finalized in an unspecified order 11 Modules A module is a collection of declarations of constants types vari ables and procedures together with a sequence of statements for the purpose of assigning initial values to the variables A module constitutes a text that is compilable as a unit Module MODULE ident ImportList DeclarationSequence BEGIN StatementSequence CLOSE StatementSequence
356. ir Fehler bei Aliassituationen vermeiden Betrachten wir etwa zur Vereinbarung PROCEDURE VAR a SetDesc SetDifference IN b c SetDesc NEW den Aufruf x SetDifference x y Bei seiner Ausf hrung liegt am Anfang des Anweisungsteils beispielsweise folgende Struktur vor a b x root c y root W rde die Empf ngermenge a ver ndert bevor die Operation als Ganzes beendet ist so w rde auch die Operandenmenge b ver ndert und das Ergebnis eventuell verf lscht Dies trifft bei unserer Implementation nicht zu da sie a erst nach Abschluss der Operation aktualisiert a root Difference b root c root Diese Zuweisung an a x ndert jedoch den Operanden b x Das Problem stellt sich bei den Nachbedingungen die wir mit Zusicherungen pr fen und die den Zustand der Operanden vor Ausf hrung der Operation ben tigen Hier hilft seichtes Kopie ren der Operandenmengen 325 11 Dynamische Objektstrukturen Seichtes Kopieren Bild 11 21 Seichte Kopien 326 Seichtes Kopieren shallow copy eines Objekts bedeutet dass nur das Objekt selbst kopiert wird nicht die Objekte auf die es zeigt Davon zu unterscheiden ist tiefes Kopieren deep copy das ein Objekt und von diesem erreichbare Objekte kopiert Bei unserer Menge bedeutet seichtes Kopieren das Kopieren des Ankers auf den Baum w hrend tiefes Kopieren die gesamte Baumstruktur kopiert Mit den Vereinbarungen PROCEDURE VAR t
357. ird der formale Parameter an den Wert des aktuellen Parameters gebunden Der aktuelle Parameter muss ein Ausdruck sein Der formale Parameter fungiert als lokale Variable der Prozedur die implizit mit dem Wert des aktuellen Parameters initialisiert wird Zuweisungen an den formalen Parameter beziehen sich auf einen Speicherplatz der nur f r die Dauer der Ausf hrung des Prozeduraufrufs reserviert ist 175 7 Ein und Ausgabe Tabelle 7 1 Parameter Ubergabearten exemplarisch Bezug Bild 7 16 Referenzparameter exemplarisch 176 Bei Referenz bergabe wird der formale Parameter an den aktuellen Parameter gebunden Der aktuelle Parameter muss eine Variable sein Der formale Parameter fungiert als neuer nur lokal in der Prozedur g ltiger Name f r den aktuellen Parameter Zuweisungen an den formalen Parameter bezie hen sich auf den Speicherplatz des aktuellen Parameters Eingabe Ausgabe Ein und Ausgabe PROC P x REAL nicht m glich struktu PROC P rierter Typ Vector einfacher PROC P PROC P OUT x REAL VAR x REAL nicht einfacher Typ erlaubt PROC P PROC P PROC P IN x Vector OUT x Vector VAR x Vector struktu rierter Typ Tabelle 7 1 stellt die Parameter bergabearten von Component Pascal anhand exemplarischer Prozedurvereinbarungen zusam men Dabei steht PROC P fiir PROCEDURE Prozedurname Werttiber gabe erfolgt nur in der Richtung vom A
358. is die gew nschte Information gefunden ist Eine wichtige heranklickbare Informationsquelle ber die Program miersprache ist der Component Pascal Language Report siehe Anhang A 93 5 Die Entwicklungsumgebung BlackBox 5 3 3 Texteingabe Browser Bild 5 3 BlackBox Menu Info 94 Browser und Sucher Oft will man die Schnittstelle eines Moduls betrachten die Dokumentation lesen oder den Quelltext bearbeiten Dabei hel fen zwei hnlich funktionierende Werkzeuge Damit ein Werk zeug erf hrt wonach man sucht ist ein Text einzugeben Dazu kann man ein beliebiges Textfenster verwenden und den einzu gebenden Text per Mausklick selektieren selektierter Text erscheint invertiert Interessiert uns etwa die Schnittstelle des Moduls DevSearch so selektieren wir DevSearch und rufen den Men befehl Info Interface auf es gen gt den Anfang von DevSearch oder nur vorange hende Leerzeichen zu selektieren RA Tools Controk amp Text SOL obw Tut Wire Open Log Gear Log Loaded Modules Global Variables ieh State Heap Spy Message Spy Cantral List Source Flat Interface Documentation Repository Search In Sources Search In Docu Compare Texts Fg Es ffnet sich ein Fenster mit der Schnittstelle von DevSearch siehe Bild 5 4 Vergleichen wir die Namen in den Bildern 5 3 und 5 4 so ahnen wir schon dass Men befehle durch Prozedu ren in Modulen implementiert sind Bild 5 4 Schnittstelle von D
359. isErrorConstants Queries VAR auBer_Betrieb BOOLEAN eingenommener_Betrag Preis gesammelter_Betrag INTEGER 6 2 Von Cleo zu Component Pascal Schritt 2 Invariants PROCEDURE Checklnvariants BEGIN ASSERT eingenommener_Betrag gt 0 BEC invariantModule ASSERT Preis gt 0 BEC invariantModule ASSERT gesammelter_Betrag gt 0 BEC invariantModule ASSERT gesammelter_Betrag MOD Preis 0 BEC invariantModule END ChecklInvariants Actions PROCEDURE initialisieren neuer_Preis INTEGER BEGIN ASSERT neuer_Preis gt 0 BEC precondPar1 Nonzero Checklnvariants ASSERT auBer_Betrieb BEC postcondSupplierOk ASSERT eingenommener_Betrag 0 BEC postcondSupplierOk ASSERT Preis neuer_Preis BEC postcondSupplierOk ASSERT gesammelter_Betrag 0 BEC postcondSupplierOk END initialisieren PROCEDURE Geld_einnehmen Betrag INTEGER Postcondition eingenommener_Betrag OLD eingenommener_Betrag Betrag 1 BEGIN ASSERT au er_Betrieb BEC precondSupplierOk ASSERT Betrag gt 0 BEC precondPar1 Nonnegative Checklnvariants END Geld_einnehmen PROCEDURE Kaffee_ausgeben Postcondition eingenommener_Betrag OLD eingenommener_Betrag Preis gesammelter_Betrag OLD gesammelter_Betrag Preis 1 BEGIN ASSERT au er_Betrieb BEC precondSupplierOk ASSERT eingenommener_Betrag gt Preis BEC precondSupplierOk
360. ist ob sie nicht der bersetzer selbst vornimmt 213 8 Strukturiertes und modulares Programmieren Tabellierte Ausgabe Trennung von Funktion und Ein Ausgabe Aufsteigend oder absteigend 8 2 3 8 2 3 1 Programm 8 8 Schnittstelle von XYplane reduziert Semantik 214 2 writeCount z hlt f r die Ausgabeprozedur Write die Doppel spalten Es muss global bez glich Write vereinbart sein denn lokal k nnte es Write nicht als Ged chtnis dienen 3 writeCount wird als Teil der Schleifeninitialisierung vor jeder Ausgabeschleife auf 0 gesetzt 4 Write inkrementiert writeCount Jedes numberOfColumns te Mal gibt Write einen Zeilenumbruch statt einen Tabulator aus 5 Der funktionale Teil der Aufgabenl sung besteht nur aus einer Zuweisung und einem Prozeduraufruf alles andere ist Initialisierung und Ein Ausgabe 6 Weil frequencySorted aufsteigend sortiert ist beginnt die Schlei fenvariable i mit dem gr ten Index Im H ufigkeitsdia gramm sollen die H ufigkeiten aber von links nach rechts fallen deshalb steht f r den x Wert LEN frequencySorted 1 i statt i Implementieren von Grafikprozeduren Das von Programm 8 7 benutzte Modul Graphutilities ist zu imple mentieren Die Implementation benutzt XYplane ein Standard modul f r einfache grafische Ausgabe in eine kartesische Fl che Alle Oberon Sprachumgebungen bieten XYplane zusammen mit In und Out f r Lernzwecke an XYplane Der i
361. it Um in Nachbedingungen Beziehungen zwischen vorher und nachher ausdr cken zu k nnen erlauben wir dort Ausdr cke mit dem OLD Konstrukt Ein Schalter Um das Schalter Programm 2 2 vertraglich zu spezifizieren bestimmen wir zuerst die Invariante Der Schalter hat nur zwei Zust nde die er unbeschr nkt einnehmen kann Also gibt es Vorbedingung Nachbedingung Programm 2 6 Schalter mit Bedingungen 2 4 Spezifikation durch Vertrag keine Invariante bzw sie ist immer TRUE und wir m ssen sie nicht aufschreiben Um die Vor und Nachbedingungen zu bestimmen gehen wir vom Zustandsdiagramm Bild 1 4 S 7 aus Man kann solche Bedingungen systematisch aus Zustandsdiagrammen herleiten hier lesen wir sie intuitiv daraus ab F r jede Aktion A gilt Von jedem Zustand geht ein mit A beschrifteter Pfeil aus Das bedeutet Jede Aktion darf in jedem Zustand aufgerufen werden d h es gibt keine Vorbedingungen bzw sie sind alle TRUE Bei SwitchOn enden alle Pfeile im Zustand on also lautet seine Nachbedingung on Die Nachbedingung zu SwitchOff ergibt sich analog zu NOT on Bei Toggle ist der Nachzustand immer dem Vor zustand entgegengesetzt also lautet die Nachbedingung on NOT OLD on Zusammengefasst erhalten wir folgende Spezifikation die den Schalter vollst ndig beschreibt er ist ja auch sehr primitiv MODULE Switch QUERIES on BOOLEAN ACTIONS SwitchOn POST on SwitchOff POST NOT on Toggle
362. itert so lautet das Verfahren 1 Wende das Testverfahren von 11 1 3 3 S 294 auf Some Things Thing an um das Verhalten einzelner Thing Objekte zu testen 2 Modifiziere das Testverfahren von 11 1 3 3 um objekt ber greifende Invarianten mehrerer Thing Objekte zu testen m Erweitere die Klasse UtilitiesRepeater Action zu TestThings Testin variants und redefiniere die Prozedur Do sodass sie einen randomisierten Einzeltest bereitstellt der wiederholt auf gerufen beliebig viele zuf llige Testf lle abdeckt Bild 12 5 Konzeptklassen konkrete Klassen und Testszenarium 12 1 Polymorphe Mengenklasse f r geordnete Elemente m Vereinbare in Do die Objekte thing1 thingn vom Typ Some Things Thing die zum Formulieren der objekt bergreifen den Invarianten erforderlich sind a Im Anweisungsteil von Do Initialisiere thing1 thingn mit Zufallswerten rufe SomeConcepts CheckConceptinvariants thing1 thingk auf k lt n formuliere die objekt bergreifenden Invarianten zu Thing als Zusicherungen m Erzeuge ein Objekt testInvariants vom Typ TestThings TestInvari ants m Programmiere Testkommandos analog zu den in 11 1 3 1 S 292 beschriebenen bergebe dabei testInvariants an ent sprechende Dienste von UtilitiesRepeater BasisGenerals PartComparable Comparable X T ContainersSets OfComparable A ContainersStrings Action UtilitiesRepeater 341 12 Vom En
363. itialisierungsteil 74 80 131 134 137 139 151 155 Inkrementierung 129 194 214 223 224 Inorder 315 316 320 321 324 361 INOUT 24 158 230 input output device Ger t Ein Ausgabeger t instance Exemplar instruction Befehl INTEGER 18 114 122 140 236 Interaktion 93 152 168 183 184 291 363 Interaktor 363 368 interface Schnittstelle International Standardization Organization 66 Interpretation 101 Interpreter 88 89 101 Kommandbointerpreter 101 104 106 110 149 152 154 Intervall 136 138 193 297 Zeitintervall 291 293 303 304 Invariante 30 35 38 39 44 120 122 124 143 147 155 220 231 237 240 246 254 255 280 293 321 340 geerbte 255 Implementationsinvariante 139 321 Klasseninvariante 37 246 290 294 339 klassentibergreifende 240 Modulinvariante 30 80 84 121 131 139 246 objekt bergreifende 240 339 341 347 353 361 362 374 C Sachwortverzeichnis verletzte 30 INVARIANTS 30 72 119 123 124 Iteration Schleife Wiederholung J Java 126 129 259 K Kante 313 314 316 gerichtete 145 313 ungerichtete 145 Kardinalit t 135 145 363 Kind 314 319 Klammer 22 23 65 textuelle 3 245 Klasse 36 38 44 49 75 82 89 145 229 230 234 243 245 249 252 256 258 260 262 264 265 267 268 280 284 286 290 293 294 296 302 304 312 318 333 334 336 337 340 342 343 348 349 354 355 365 368 abstrakte 2
364. ition INTEGER BEGIN RETURN formatter Pos END Position PROCEDURE SetPosition newPosition INTEGER BEGIN formatter SetPos newPosition END SetPosition PROCEDURE WriteBool x BOOLEAN BEGIN formatter WriteBool x TextViews ShowRange model model Length viewHeight model Length TextViews any END WriteBool PROCEDURE WriteChar x CHAR PROCEDURE Writelnt x INTEGER PROCEDURE WritelntForm x base minWidth INTEGER fillChar CHAR showBase BOOLEAN PROCEDURE WriteLn PROCEDURE WriteReal x REAL PROCEDURE WriteRealForm x REAL precision minWidth expWidth INTEGER fillChar CHAR PROCEDURE WriteRuler IN tab ARRAY OF INTEGER VAR i INTEGER ruler TextRulers Ruler BEGIN ruler TextRulers dir New NIL FOR i 0 TO LEN tab 1 DO TextRulers AddTab ruler tab i Ports mm END formatter WriteView ruler END WriteRuler PROCEDURE WriteSet x SET PROCEDURE WriteString IN x ARRAY OF CHAR 373 12 12 2 7 12 3 374 Vom Entwerfen zum Testen PROCEDURE WriteTab BEGIN OpenNew UtilitiesOut END UtilitiesOut Die mit angedeuteten Prozedurr mpfe folgen demselben Muster wie WriteBool Offene Details der Ein Ausgabemodule sollen den Leser dazu anregen sich entsprechende Informatio nen aus der BlackBox Online Dokumentation zu beschaffen Fazit Textausgabe ist in BlackBox auf drei Arten m glich D
365. ittlich ausgef hrten Elemen taroperationen ist die Abh ngigkeit von n wesentlich Alle Vari anten sind linear in n d h die mittlere Suchzeit vervielfacht sich mit der Reihungsl nge Doch die Variante 3 ist doppelt so schnell wie Variante 1 Der Effizienzgewinn wird mit einer um ein Viertel komplexeren algorithmischen Struktur erkauft erkennbar etwa an den drei R ckkehrstellen anstelle einer Fazit Bei dieser Aufgabe haben wir den Algorithmus wieder durch schrittweises Verfeinern entworfen doch begonnen haben wir mit dem Entwurf der konkreten Datenstruktur zum Z hlen der Zeichen Die Wahl einer ganzzahligen Reihung f r die H ufig keiten hat es erm glicht im Algorithmus mit Operationen eines Vektormoduls die lokal vereinbarten Daten zu bearbeiten All gemeine Teilaufgaben der Ein Ausgabe haben andere Module bernommen eine spezielle Teilaufgabe haben wir an eine lokale Prozedur delegiert Ware bei dieser Ausgabe eine Zerlegung in mehrere Komman dos angemessener um der Leitlinie 1 2 S 5 zu entsprechen In der vorliegenden L sung Programm 8 7 h ngen die Teilaufga ben voneinander ab siehe Bild 8 6 Ein Pfeil von A nach B bedeutet dass A ausgef hrt sein muss bevor B ausgef hrt wer den kann 225 8 Strukturiertes und modulares Programmieren Bild 8 6 Reihenfolge der Teilaufgaben 8 3 226 Initializations Input Output ordered Processing by characters y Output ordered by frequencies Diese Reihenfol
366. ja derselbe Typ INTEGER sind 217 8 Strukturiertes und modulares Programmieren 8 2 4 2 Ausdruck 1 Tabelle 8 3 Wertetabelle boolescher Operatoren Beispiel Ausdruck 2 218 Dieses Sort erf hrt die L nge des aktuellen Parameters nicht aus der Vereinbarung des formalen Parameters sondern mittels LEN x Die L nge einer Reihung ist zur Laufzeit bekannt Dies erm glicht sowohl typ und speichersicheres als auch flexibles Programmieren mit Reihungsparametern Kurze Auswertung boolescher Ausdr cke Im Cleo Programm 8 6 erscheint eine zusammengesetzte Nach bedingung result notFound OR result lt LEN x AND x result item In der Aussagenlogik ist jeder Teilausdruck eines Ausdrucks stets definiert als Werte kommen nur FALSE und TRUE vor In einem Programmablauf gilt das nicht Der Teilausdruck x result item ist z B nur definiert wenn 0 lt result und result lt LEN x gilt sonst f hrt die Auswertung zu einem Fehler einem Trap in Compo nent Pascal In Programmiersprachen gibt es daher prinzipiell zwei unter schiedliche Ans tze boolesche Operatoren und Ausdr cke zu behandeln die lange und die kurze Auswertung 1 Die lange Auswertung bernimmt von der booleschen Alge bra der Logik die Semantik der Operatoren die bekanntlich durch Tabelle 8 3 beschrieben ist a und b sind boolesche Aus dr cke Als zus tzliche Regel ist ein Ausdruck undefiniert wenn wenigstens ein Teilausdr
367. kfrage die anderen Verzeichnisse sind von Hand anzulegen Module und Dateien Zu jedem Modul gibt es eine Quelltextdatei Suffix ode f r oberon document eine Objektcodedatei Suffix ocf f r oberon code file eine Schnittstellendatei Suffix osf fiir oberon symbol file die bin re Darstellung der Modulschnittstelle mit den Definitio nen der exportierten Symbole des Moduls optional eine Dokumentationsdatei Suffix odc optional Ressourcendateien Suffix odc Die Objektcode und Schnittstellendateien erzeugt der Uberset zer Dialogboxen kann ein Werkzeug generieren die anderen Dateien erstellt man von Hand mittels eines Editors Modulnamen beginnen mit einem Subsystemnamen Modulname Subsystemname Moduldateiname Moduldateiname Name seiner Quelltext Objektcode und Schnittstellendateien ohne Suffix Umgekehrt ist das Pr fix des Modulnamens bis zum ersten Kleinbuchstaben oder der ersten Ziffer auf den die ein Gro 91 5 Die Entwicklungsumgebung BlackBox Tabelle 5 3 Beispiele zur Namengebung 5 3 Bild 5 2 BlackBox Men oberfl che Dokumentzentriert 92 buchstabe folgt ein Subsystemname z B bei AbcDe1F ist Abc der Subsystemname Hat der Name keinen Klein Gro Wechsel so handelt es sich um ein globales Modul das zum Subsystem System geh rt Zwei Beispiele verdeutlichen die Namenregeln Beispiel 1 Beispiel 2 Modulname TextCmds 11MyModule Subsystem Text 1 Que
368. kt fiir den Softwareent wickler n tzlich denn die Abkiirzungsregel erlaubt durch eine minimale nderung am Quelltext ein Lieferantenmodul durch ein anderes mit gleicher Schnittstelle zu ersetzen Dazu muss nur der Lieferantenname in der IMPORT Liste ausgetauscht wer den die Abk rzung bleibt MODULE ClientOfClock IMPORT Clock BlackForestClock END ClientOfClock 4 7 5 Getrennt oder unabhangig 4 7 Die Implementationssprache Component Pascal MODULE ClientOfClock IMPORT Clock SwissClock END ClientOfClock Die Kunde Lieferant Benutzungs oder hier Import Beziehung zwischen Modulen erweitern wir zur Brauchtrelation Ein Modul A braucht ein Modul B wenn A gleich B oder Kunde von B ist oder einen Kunden von B braucht Ein Modul braucht also sich die importierten Module und die von diesen importierten usw Im Beispiel MODULE ClientOfClock MODULE Clock MODULE Services IMPORT IMPORT IMPORT Clock Services END ClientOfClock END Clock END Services braucht ClientOfClock sich Clock Services und vielleicht weitere Module Getrenntes Ubersetzen Getrennte Ubersetzung bedeutet dass ein Programm in Uber setzungseinheiten zerlegt ist die einzeln tibersetzt werden Dabei kennt der bersetzer alle benutzten Gr en sodass er Typpr fungen ber die Grenzen der bersetzungseinheiten hinaus so durchf hren kann als ob er das Programm als Ganzes bersetzt Getrennte bersetzbarkeit ist eine Eigenschaft
369. l sungen Kapitel 6 zeigt einen systematischen Weg von der Spezifikation zur Implementation einer Softwareeinheit Kapitel 7 befasst sich mit der Ein und Ausgabe von Programmen und dem Gestalten interaktiver Benutzungsoberfl chen Die Kapitel 8 und 9 f hren in strukturiertes modulares und objektorientiertes Programmieren ein Kapitel 10 bis 12 vertiefen die Themen von statischen Klassenstrukturen ber dynamische Objektstrukturen bis zu Entwurfsmustern Gleichzeitig weiten sie den Blick auf den Softwareentwicklungsprozess vom grafi schen Entwerfen ber das methodische Spezifizieren bis zum systematischen Testen Die Kapitel enden meist mit drei Abschnitten derselben Art Eine Zusammenfassung liefert dem schnellen Leser einen ber blick der intensive Leser mag an dieser Stelle ber den Inhalt des Kapitels nachdenken Literaturhinweise verbanne ich aus dem laufenden Text um sie kapitelweise zusammenzustellen Anhand von bungsaufgaben ohne L sungen kann sich der Leser den Stoff erarbeiten vii Vorwort Anhange Darstellung des Textes i J Neue deutsche Rechtschreibung Dokumentations sprache englisch Zweite Auflage viii Da die vollst ndige offizielle Sprachbeschreibung von Compo nent Pascal im Anhang abgedruckt ist kann ich mich im Haupt text mehr auf Programmiertechniken konzentrieren als auf Ein zelheiten der Programmiersprache Das Literaturverzeichnis enth lt vor allem Verweise auf Lehr
370. lasse darf die Vorbedingung eines geerbten Dienstes abschw chen die Nachbedingung eines geerbten Dienstes verst rken die geerbte Invariante verst rken Das bedeutet Eine Erweiterungsklasse darf von Kunden weni ger verlangen und ihnen mehr bieten als ihre Basisklasse Magnetkarte verst rkt allerdings durch die Verst rkung der Inva riante die Vorbedingung zu leeren indirekt auf voll Das gezeigte Abstraktions und Erweiterungskonzept erlaubt die Klassifikation der Begriffe Bild 10 4 auf die Spezifikationen der Klassen abzubilden Statt zwei konkrete Klassen in zwei vollst ndigen unabh ngigen Spezifikationen mit replizierten Teilen zu beschreiben brauchen wir drei Spezifikationen eine zus tzliche f r die abstrakte Klasse die die gemeinsamen Teile an einer Stelle konzentriert und zwei Erweiterungen von dieser Wir bewegen uns bisher auf der Ebene der Spezifikation Auf der Ebene der Implementation ist Beh lter als abstrakte Klasse nicht oder nicht vollst ndig implementiert und daher gibt es keine Exemplare vom Typ Beh lter Dagegen sind die konkreten Klassen Tasse und Magnetkarte vollst ndig implementiert und es kann Exemplare vom Typ Tasse und vom Typ Magnetkarte geben Tasse und Magnetkarte erben die gemeinsame Spezifikation von Beh lter aber ihre Implementationen k nnen sich unterscheiden Warenautomat als abstrakte Klasse Nachdem Beh lter spezifiziert ist l sst sich auch Warenautomat spe zifizieren
371. le Lattice Operations PROCEDURE VAR a ComparableDesc SetMin IN b c ComparableDesc NEW Postcondition a minimal value of b and c BEGIN IF b LessEqual c THEN a Copy b ELSE a Copy c END END SetMin PROCEDURE VAR a ComparableDesc SetMax IN b c ComparableDesc NEW Postcondition a maximal value of b and c BEGIN IF b LessEqual c THEN a Copy c ELSE a Copy b END END SetMax 3 Dynamisches Binden Fabrik Objekt bergreifende Invariante 12 1 7 12 1 Polymorphe Mengenklasse f r geordnete Elemente Invariants PROCEDURE CheckComparablelnvariants IN a b c ComparableDesc VAR d Comparable BEGIN CheckPartComparablelnvariants a b c Connectivity Rules a lt b OR b lt a ASSERT a LessEqual b OR b LessEqual a BEC invariantClass a lt bORa bORDb lt a ASSERT a Less b OR a Equal b OR b Less a BEC invariantClass Minimum and Maximum Rules If s nonempty set of elements then for all e in s min S lt e lt max s d a Clone d SetMin a b ASSERT d LessEqual a amp d LessEqual b BEC invariantClass d SetMax a b ASSERT a LessEqual d amp b LessEqual d BEC invariantClass END CheckComparablelnvariants END BasisGenerals Die Nummern in der folgenden Liste entsprechen den Num mern bei den Symbolen in Programm 12 2 1 Die Konzeptklassen sind abstrakt do
372. le outside the declaring module must be marked They are called public fields unmarked elements are called private fields RecordType RecAttributes RECORD BaseType FieldList FieldList END RecAttributes ABSTRACT EXTENSIBLE LIMITED BaseType Qualident FieldList IdentList Type IdentList IdentDef IdentDef The usage of a record type is restricted by the presence or absence of one of the following attributes ABSTRACT EXTENSI BLE and LIMITED A record type marked as ABSTRACT cannot be instantiated No variables or fields of such a type can ever exist Abstract types are only used as base types for other record types see below Variables of a LIMITED record type can only be allocated inside the module where the record type is defined The restriction applies to static allocation by a variable declaration Ch 7 as well as to dynamic allocation by the standard procedure NEW Ch 10 3 Record types marked as ABSTRACT or EXTENSIBLE are extensible i e a record type can be declared as an extension of such a record type In the example TO EXTENSIBLE RECORD x INTEGER END T1 RECORD T0 y REAL END T1 is a direct extension of To and To is the direct base type of T1 see App A An extended type T1 consists of the fields of its base type and of the fields which are declared in T1 All identifiers declared in the extended record must be different from the iden tifiers de
373. len Daher ist es sinnvoll sie an einer Stelle zu vereinbaren und ffentlich zug nglich zu machen Dazu kreieren wir ein Modul das nur solche Vereinbarungen enth lt nennen es Error Constants und ordnen es dem Subsystem Basis zu weil es grund legende Dienste f r viele Kunden bereitstellt Seine Dienste sind allerdings sehr einfach nur Konstanten Ein Modul das nur konstante Abfragen bietet hei t Konstantenmodul l1Kaffeeautomat soll BasisErrorConstants benutzen also importieren Wir definieren dazu einen Aliasnamen wie in 4 7 45 77 gezeigt MODULE I1Kaffeeautomat IMPORT BEC BasisErrorConstants ASSERT Preis gt 0 BEC invariantModule END I1Kaffeeautomat Vor und Nachbedingungen Cleo Vor und Nachbedingungen werden in Zusicherungen transformiert Vorbedingungen stehen am Beginn des Anwei 121 6 Vom Spezifizieren zum Implementieren Cleo Component Pascal NOT als Cleo Component Pascal 6 2 4 122 sungsteils der Prozedur Nachbedingungen am Ende Cleo Nachbedingungen die das OLD Konstrukt enthalten sind in Component Pascal nicht formulierbar Man kann sie mit zus tz lichen Variablen nachbilden doch ist dies aufw ndig Wir notie ren sie als Kommentar nach dem Prozedurkopf ACTIONS Geld_einnehmen IN Betrag NATURAL PRE NOT au er _Betrieb POST eingenommener_Betrag OLD eingenommener_Betrag Betrag PROCEDURE Geld_einnehmen Betrag INTEGER Postconditi
374. len in Programm 11 6 1 Statt einer WHILE verwenden wir hier eine REPEAT Schleife Sie ist eine fu gesteuerte Bedingungsschleife mit Abbruch bedingung ihr Rumpf wird mindestens einmal ausgef hrt Das allgemeine Muster der REPEAT Anweisung lautet ies REPEAT Zu wiederholende Anweisungen UNTIL Abbruchbedingung Semantik Wir spezifizieren ihre Semantik mit Zusicherungen wobei first BOOLEAN eine zu tzliche Variable a eine Anweisungs folge und beine seiteneffektfreie Abbruchbedingung ist 311 11 Dynamische Objektstrukturen 11 2 4 11 3 312 first TRUE REPEAT ASSERT first OR b first FALSE a UNTIL b ASSERT b 2 Wurde eine Taste gedr ckt so liefert der Funktionsaufruf XYplane ReadKey das entsprechende Zeichen sonst 0X Als Seiteneffekt entfernt ReadKey das Zeichen aus dem Tastatur puffer XYplane kennen wir von 8 2 3 1 S 214 Readkey hat nichts mit grafischer Ausgabe zu tun aber welches Modul sollte es aufnehmen BasisASCII ist ein Konstantenmodul mit Symbolen f r die nicht druckbaren Steuerzeichen des ASCII Zeichensatzes ESC ist das Symbol fiir das Escape Zeichen 3 Show verwendet das auf S 306 vorgestellte Muster zum Durchlaufen einer Liste Fazit An Hand der Implementation des Testwerkzeugs haben wir die dynamische Objektstruktur der einfach verketteten Liste ken nengelernt Das Einf gen eines Elements am Anfang der Liste und das Durchlaufen der Liste sind leicht un
375. lendateien ben tigt er nicht Werden immer alle Module bersetzt so k nnen beim Binden und Laden keine Fehler auftreten Soll der Lader z B das Modul B laden so erkennt er dass B A braucht Deshalb l dt er zuerst A bindet Ban A und l dt dann B Aber man will m glichst wenig nach bersetzen So kann es pas sieren dass man z B vergisst B zu bersetzen obwohl jemand den von B benutzten Schnittstellenteil von A ge ndert hat W rde der Lader dann A und B laden so erg be sich ein Kom patibilit tsproblem B benutzt die alte Schnittstelle von A A implementiert eine neue Die Folge w re ein u U schwerer Lauf zeitfehler Das ist nicht tragbar BlackBox l st das Kompatibilit tsproblem durch Versionierung der einzelnen Merkmale einer Schnittstelle Der bersetzer ver sieht jedes Merkmal der Schnittstelle mit einer Versionsnummer In Bild 5 18 hat das Merkmal x der Schnittstelle von A die Version vi In jeder Codedatei notiert der bersetzer die benutzten Schnittstellenmerkmale mit ihren Versionsnummern In Bild 5 18 beziehen sich die Codedateien von A und B beide auf die Version V1 von A x Soll B geladen werden so pr ft der Lader ob der geladene oder zu ladende Code von A und der zu ladende Code von B sich auf kompatible Schnittstellenversionen von A beziehen In Bild 5 18 passen die Objektcodes zusammen da beide mit A x V1 erzeugt wurden In diesem Fall l dt der Lader die Module Betrachten wir den Fall 1 S 108
376. lle Sprachumgebungen bestehen aus einem ber setzer und einer Laufzeitumgebung f r Programmabl ufe wobei zwischen der Programmierumgebung und den Anwen dungsprogrammen eine scharfe Trennlinie gezogen ist Black Box kennt diese Trennung nicht Sowohl die Entwicklungsum gebung als auch die entwickelten Programme sind Module in Subsystemen Man entwickelt keine in sich abgeschlossenen Anwendungen sondern erweitert das vorhandene Ger st um zus tzliche Dienste und F higkeiten die wiederum offen f r Erweiterungen sind bersicht der Subsysteme BlackBox als k ufliches Produkt besteht aus Standardsubsyste men Tabelle 5 1 bietet einen berblick ber diese Subsysteme und ihre Aufgaben Jedes Subsystem hat einen Namen der mit einem Kleinbuchstaben oder einer Ziffer endet und keinen Wechsel von Klein auf Gro buchstaben enth lt Tabelle 5 1 Standardsubsysteme Tabelle 5 2 Subsysteme dieses Buchs 5 1 Module Subsysteme Komponenten Name Aufgabe Communication Schnittstellen zu Rechnernetzen Controllers Werkzeuge f r OLE Automation Development Entwicklungswerkzeuge wie bersetzer und Lader Allgemeine Online Dokumentation dtF Treiber f r Sal Visuelles Layoutwerkzeug f r Dialogboxen Schnittstellen zum Betriebssystem hier MS Windows Overview by Examples Beispielmodule Object Linking and Embedding Schnittstellen zum MS Standard f r Dokumente Standard Query Language S
377. lltextdatei Text Mod Cmds odc 11 Mod MyModule odc Inhalt der MODULE TextCmds MODULE I1MyModule Quelltextdatei lt e Objektcodedatei Text Code Cmds ocf 11 Code MyModule ocf Schnittstellendatei Text Sym Cmds osf 11 Sym MyModule osf Werkzeuge Nach diesem berblick ber die Grundstrukturen wenden wir uns den Werkzeugen zu mit denen wir in BlackBox navigieren und arbeiten Beim Start von BlackBox erscheint eine Men ober fl che ee LEE ee Manche Meniis kennt der erfahrene PC Benutzer von anderen Programmen manche sind spezifisch fiir BlackBox Wir gehen nicht auf Details ein sondern erl utern einige Konzepte Das wichtigste Grundkonzept beim Arbeiten mit BlackBox ist wohl die dokumentzentrierte Sicht Der Benutzer ffnet bear beitet und schlie t Dokumente statt Anwendungsprogramme aufzurufen Dokumente erfassen nicht nur reinen Text sie die nen dazu vielf ltige Arten von Objekten aufzunehmen und zu speichern Bilder unbewegte und bewegte Grafiken Dialogbo xen Solche und andere Objekte wie Aufrufsymbole Hyperver bindungen Falter sind in Dokumente einbettbar siehe unten Vergleich 5 3 1 Vergleich 5 3 2 5 3 Werkzeuge Manche Objekte sind Beh lter und k nnen selbst wieder Objekte enthalten Die Technik der zusammengesetzten Doku mente erm glicht es Entwicklern und Benutzern aktive und interaktive Dokumente zu gestalten Durch sein Dokumentenmodell unterscheidet sich Black
378. ln lauten Vereinbare zu jeder EBNF Regel eine gew hnliche Prozedur Die Aufgabe dieser Prozedur ist das durch die Regel defi nierte Nichtterminal im Eingabetext zu erkennen Nenne die Prozedur per Konvention wie das Nichtterminal mit einem vorangestellten Read Die Analyse beginnt mit einer Prozedur namens Analyze Das Beispiel liefert die Prozeduren Analyze ReadText ReadWord ReadNonword wobei ReadText dem schon spezifizierten entspricht siehe S 263 Bilde den Anweisungsteil jeder Prozedur aus den rechten Seiten der entsprechenden EBNF Regel nach dem in Tabelle Tabelle 10 1 Transformations regeln von der EBNF zum Algorithmus Transformieren 10 3 W rter sammeln Rechtschreibung pr fen 10 1 zusammengestellten Schema Dabei bedeuten die in den Anweisungen benutzten Symbole char Variable die stets das zuletzt gelesene Zeichen enth lt next Prozedur die das n chste Zeichen von der Eingabe liest und char zuweist first E Menge der Startsymbole des Ausdrucks E error Prozedur die einen Syntaxfehler meldet Ausdruck E Anweisung S E x IF char x THEN next ELSE error END Nonterminal ReadNonterminal Expression S Expression Expression IF char IN first Expression THEN S Expression END Expression WHILE char IN first Expression DO S Expression END Factor Factor Factor S Factory S Factor S Factor Termo Term
379. logbox im Layoutmodus eeeeeeeenee 170 Bild 7 12 Inspekteurdialogbox neennnnenennnnene 171 Bild 7 13 Editierte Dialogbox im Layoutmodus neeeeeeeee 171 Bild 7 14 Dialogbox im Maskenmodus uuneeeeeesesenenenen 172 Bild 7 15 Benutzer Benutzungsoberfl che und Module 173 25 2 05 Abbildungsverzeichnis Bild 7 16 Referenzparameter exemplarisch uueeeeeeee 176 Bild 7 17 Bewachte Dialogbox u neeeeeeeeennenennenene 180 Bild 7 18 Kommando und W chter uneseseseeneesnenseesennneesnnennen 181 Bild 7 19 Bewachte Dialogbox Schwachstellen uuune 182 Bild 7 20 Meldende Dialogbox aisome ann 184 Bild 8 1 Textuelle Ausgabe von IlCharCounter Do nnene 200 Bild 8 2 Grafische Ausgabe von IlCharCounter Do unee 201 Bild 8 3 Speicherplatz zu H ufigkeitsreihungen exemplarisch 209 Bild 8 4 Spur der H ufigkeitsreihung eeeeenneennee 211 Bild 8 5 Klassifikation von Typen neneeenenenenn 221 Bild 8 6 Reihenfolge der Teilaufgaben 0 0 0 eee eee 226 Bild 9 1 Physisches Modell des Kaffeeautomaten mit Ausgabepl t ZEN E AE EEEIEE E T ENE EEEE eee 229 Bild 9 2 Zustandsdiagramm einer Tasse nuuneneeenenneen 231 Bild 9 3 Benutzungsstruktur des Kaffee Szenariums statisch 234 Bild 9 4 Aufrufstruktur eines Kaffee Szenarios dynamisch 234 Bild 9 5 Transformation vom Modul zur
380. loyd Fanny Michaela Reisin G Schmidt STEPS to Software Development with Users In C Ghezzi J A McDermid Hrsg ESEC 89 Lecture Notes in Computer Science Bd 387 Springer Verlag 1989 S 48 64 Dirk Siefkes Beziehungskiste Mensch Maschine In Gero von Randow Hrsg Das kritische Computerbuch Grafit Verlag GmbH Dortmund 1990 S 90 110 Horst Zuse Anmerkungen zum John von Neumann Rechner FIFF Kommunikation 2 99 Juni 1999 S 10 19 J Stanley Warford Programming in BlackBox Prepublication Pepperdine University 1996 1999 ftp ftp pepperdine edu pub compsci prog bbox ftp ftp inf ethz ch pub software Oberon ftp ftp ssw uni linz ac at pub Oberon The Oberon Webring home page http www factorial com hosted webrings oberon The Oberon Home Page der ETH Z rich http www oberon ethz ch http oberon ssw uni linz ac at Oberon html Oberon microsystems Inc home page http www oberon ch http www zel org entry htm http www modulaware com Oberon Newsgroup comp lang oberon http www omg com uml Sachwortverzeichnis Symbole 18 114 18 64 18 342 284 amp 136 19 22 64 71 18 113 18 169 22 64 es 18 71 128 18 206 316 335 342 18 206 342 18 64 128 342 gt 18 206 342 gt 18 206 342 64 136 276 356 3 64 197 64 297 122 gt 69 bedienen 12 Bedienerfehler 151 226 I AA 0 0X
381. ls Modul modelliert so k nnte der Auto mat immer nur dieselbe Einzeltasse f llen Au erdem kann ein Modul nicht Parameter sein Klasse Wir modellieren vom Benutzen einer physischen Tasse ausge hend Dienste einer Tasse Das Vorgehen gleicht dem Modellie ren des Kaffeeautomaten durch ein Modul Dienste teilen sich in Abfragen und Aktionen Der Unterschied ist dass die Tasse ein Typ der Kaffeeautomat ein Einzelexemplar ist Den Schritt vom Modul zur Klasse vom Einzelexemplar zum Typ mit beliebig vielen Exemplaren haben wir in Abschnitt 2 5 kennengelernt CLASS Tasse QUERIES leer BOOLEAN voll BOOLEAN ACTIONS leeren PRE NOT leer POST NOT voll f llen PRE leer POST voll 9 1 2 Vom Vertrag zum Zustandsdiagramm Bild 9 2 Zustandsdiagramm einer Tasse Vom Zustandsdiagramm zum Vertrag 9 1 Tassen INVARIANTS NOT leer AND voll END Tasse Die verschiedenen Zust nde die eine Tasse einnehmen kann studieren wir anhand eines Zustandsdiagramms und ben daran das Spezifizieren durch Vertrag Vertrag und Zustandsdiagramm Die beiden booleschen Abfragen leer und voll erlauben zun chst vier Zust nde Eine Tasse kann leer oder voll sein aber nicht beides gleichzeitig die Invariante NOT leer AND voll schlie t einen physisch unm glichen Zustand aus Eine Tasse kann aber auch nur teilweise gef llt sein deshalb f hren wir die Abk rzung teilvoll NOT leer AND NOT voll ein Wir f llen nu
382. ls das Datenelement in der Wurzel sind und jeder Teilbaum ein geordneter Bin rbaum ist Die gespeicherten Daten erh lt man in sortierter Folge wenn man den Baum in Inorder durchl uft Wir sehen das wenn wir die Daten auf eine Gerade unter dem Baum projezieren wobei die Projektionsstrahlen weder sich noch Kanten des Baums schneiden siehe Bild 11 16 Inorder liefert die Zeichen also alphabetisch sortiert EI KLNR Bild 11 16 Geordneter Binarbaum mit Projektion 11 3 1 4 11 3 2 11 3 Mengenklasse f r Zeichenketten Suchaufwand Der Umfang size eines Baums ist die Anzahl seiner Knoten seine H he height die Anzahl der Knoten im l ngsten Weg von der Wurzel zu einem Blatt Ein Baum ist ausgewogen balanced wenn f r jeden Knoten die H hen des linken und rechten Teil baums um h chstens 1 differieren Beispielsweise hat der Baum in Bild 11 16 den Umfang 6 die H he 3 und ist ausgewogen Der Aufwand zum Suchen eines Elements in einem geordneten Bin rbaum ist im Durchschnitt proportional zu seiner H he Suchaufwand H he Ist der Baum ausgewogen so ist seine H he ungef hr gleich dem Logarithmus seines Umfangs zur Basis 2 H he 1d Umfang Somit w chst der mittlere Suchaufwand mit Id Umfang Suchaufwand Id Umfang Ist der Baum zu einer Liste entartet so ist der durchschnittliche Suchaufwand proportional zum Umfang Suchaufwand Umfang Im Beispiel von Bild 11 16 ist der mittlere Sucha
383. lsAlphaLatin1 char BEC precondition NEW word maxWordLength word 0 char i 15 In ReadRawChar char WHILE In failed amp i lt LEN word 1 amp Chars lsAlphaLatin1 char DO word i char INC i In ReadRawChar char END ASSERT In failed OR i LEN word 1 OR Chars IsAlphaLatin1 char BEC invariant ASSERT word NIL amp LEN word gt 0 amp word i 0X BEC invariant END ReadWord 281 10 Statische Klassenstrukturen is 5 eS 6 IS 282 PROCEDURE ReadNonword BEGIN ASSERT In failed amp Chars lsAlphaLatin1 char BEC precondition In ReadRawChar char WHILE In failed amp Chars lsAlphaLatin1 char DO In ReadRawChar char END ASSERT In failed OR Chars lsAlphaLatin1 char BEC postcondition END ReadNonword BEGIN ReadText words WipeOut In Open In ReadRawChar char WHILE In failed DO IF Chars IsAlphaLatini char THEN ReadWord words Put word ELSE ReadNonword END END END ReadText Commands PROCEDURE InitDictionary BEGIN ReadText dictionary Out OpenNew I1WordChecker END InitDictionary PROCEDURE WriteDictionary VAR wordWriter WordWriterDesc BEGIN Out WriteLn Out WriteString I1WordChecker uses the following dictionary Out WriteLn dictionary ForAllDo wordWriter END WriteDictionary PROCEDURE WriteFoundWords VAR wordWriter WordWriterDesc BEGIN Out WriteLn
384. lt die H ufigkeiten der regi strierten Wortl ngen textuell und grafisch dar Kombinieren Sie dazu L sungselemente der Programme 8 7 S 212 und 10 7 285 10 Statische Klassenstrukturen Aufgabe 10 3 W rter suchen 286 Erweitern Sie das Modul I1WordChecker um ein Kommando PROCEDURE Search word ARRAY OF CHAR Es liest einen Eingabetext und gibt aus ob es das Wort word im Text gefunden hat oder nicht Nehmen Sie dazu an dass Contai nersSetsOfString eine gegen ber Abschnitt 10 3 erweiterte Schnitt stelle bietet Die Klasse Action hat zus tzlich eine abstrakte Funk tion PROCEDURE IN action ActionDesc Valid item Element BOOLEAN NEW ABSTRACT Die Klasse Set hat zus tzlich eine Prozedur PROCEDURE IN set SetDesc WhileValidDo VAR action ActionDesc NEW Sie iteriert ber die Elemente der Menge und bearbeitet sie mit action Do solange sie action Valid erf llen Die Pseudo WHILE Schleife item set Firstltem WHILE item Defined AND action Valid item DO action Do item set Next item END dr ckt diese Semantik aus I1WordChecker vereinbart eine Erwei terungsklasse zu ContainersSetsOfString Action die Valid und Do implementiert und eine weitere Prozedur PROCEDURE IN action ActionDesc SetWord IN word ARRAY OF CHAR NEW vereinbart sowie ein Feld word ContainersSetsOfString Element 11 1 Bild 11 1 Benutzungsstruktur eines Testszenariums Statisch Namen Dynamis
385. m das statische Pr fen von Parametertypen und das dynamische Laden von Modulen nicht mit kovarianter Anpassung von Parametern vereinbar sind Component Pascal bietet mit dynamischer Typpr fung ein Konzept mit dem sich die Struktur von Bild 10 5 und die Pro gramme 10 4 10 5 und 10 6 angemessen implementieren lassen Optionen der Anpassung Allgemein bietet das Konzept des Erweiterns von Klassen fol gende M glichkeiten Eine Erweiterungsklasse darf 1 geerbte Vertr ge geregelt anpassen 2 geerbte Dienste geregelt umbenennen 3 die Signatur eines geerbten Dienstes geregelt anpassen 4 die Rechte an einem geerbten Dienst geregelt anpassen 5 einen geerbten Dienst mit einer Implementation versehen 6 weitere Dienste vereinbaren Bei den Optionen 1 bis 4 deutet jeweils das W rtchen gere gelt an dass die Regeln von der Programmiersprache festge legt sind und sich die Sprachen in diesen Regeln unterscheiden Deshalb stellen wir die Diskussion dieser Aspekte zur ck und konzentrieren uns im Folgenden auf die Optionen 5 und 6 die allen objektorientierten Programmiersprachen gemein sind Mit zwei Definitionen formulieren wir sie neu Ein Dienst hei t abstrakt wenn er spezifiziert aber nicht imple mentiert ist Eine Klasse hei t abstrakt wenn sie wenigstens einen abstrakten Dienst hat sie hei t konkret wenn alle ihre Dienste implementiert sind Eine Erweiterungsklasse kann 5a abstrakte
386. m 2 8 ee Delete Component Pascal syntaktische semantische Implementation Spezifikation 2 Spezifikation P gt P gt Programm 6 1 Programm 6 2 Programm 6 3 1 Die Notation wechseln wir von der Spezifikationssprache Cleo zur Implementationssprache Component Pascal und erhalten zun chst eine syntaktische Spezifikation in Compo nent Pascal siehe Abschnitt 6 1 2 Die syntaktische Spezifikation in Component Pascal erwei tern wir zu einer semantischen Spezifikation durch Vertrag siehe Abschnitt 6 2 3 Die Spezifikation in Component Pascal versehen wir mit einer Implementation siehe Abschnitt 6 3 Von Cleo zu Component Pascal Schritt 1 Wir erl utern ben tigte Begriffe von Component Pascal geben jeweils zu Cleo Konstrukten links oder zuerst entsprechende Component Pascal Konstrukte rechts oder danach an und zei gen den Transformationsschritt Bild 6 1 1 am Beispiel des Kaf feeautomaten 111 6 Vom Spezifizieren zum Implementieren 6 1 1 6 1 2 Programmier konvention 6 1 3 112 Module Wie wir aus den Abschnitten 4 7 und 5 1 wissen besteht ein Component Pascal Programm aus einer Menge von Modulen und jedes Modul geh rt in BlackBox zu einem Subsystem Daher liegt es auf der Hand Cleo Module direkt in Component Pascal Module zu transformieren MODULE Kaffeeautomat MODULE I1iKaffeeautomat END Kaffeeautomat END I1Kaffeea
387. m Prinzip der Trennung von Schnittstelle und Implementation Deshalb beginne ich mit dem Entwerfen und Spezifizieren von Schnitt stellen das Implementieren dieser Schnittstellen schlie t sich daran an Wie in Ingenieurdisziplinen blich steht damit das Was das Beschreiben der Funktion vor dem Wie dem Realisie ren der Funktion durch eine Struktur Die Methode des Spezifi zierens und Programmierens durch Vertrag setze ich konse quent ein um zu zeigen wie man systematisch zuverl ssige korrekte und robuste Software konstruieren kann Software erscheint als Architektur als strukturierte Ansamm lung von Einheiten die ber definierte Schnittstellen zusam menwirken Die Lehrinhalte entwickle ich anhand aufeinander aufbauender Beispielkomponenten wobei ich Softwarequali t tsmerkmale wie Wartbarkeit und Wiederverwendbarkeit beachte Der Leser lernt nach dem Ansatz des schrittweisen ff Vorwort Unterschiede zu anderen Lehransatzen Voraussetzungen Programmiersprache Bezugsquelle der Beispielprogramme Bezugsquelle fur ComponentPascal und BlackBox vi nens von Blackboxes zun chst Module und Klassen zu benut zen bevor er sie implementiert und erweitert Dabei ergibt sich das Entwickeln von Software als Prozess des Beschreibens und Transformierens von Strukturen Der Lehrstoff beschr nkt sich nicht auf das Thema Implementa tion und vernachl ssigt nicht Themen wie Spezifikation und Test Programmiersprachliche
388. m anderen Anweisungen wieder holen formale Parameter die L nge von Reihungen offen lassen k nnen damit die Prozedur aktuelle Reihungen beliebiger L nge bearbeiten kann man durch Aufzeichnen von Spuren die Wirkungsweise von Algorithmen besser verstehen kann es g nstig ist wenn eine Programmiersprache boolesche Ausdr cke kurz statt lang auswertet Suchalgorithmen oft vorkommen dreimal in zwei Aufga ben man die Komplexit t von Algorithmen bestimmen und ver gleichen kann Literaturhinweise Algorithmen zum Suchen und Sortieren sind Gegenstand zahl loser Lehrb cher Wir verweisen auf 33 und 40 bungen Mit diesen Aufgaben ben Sie strukturiertes Programmieren indem Sie vorgestellte Module erweitern Die Abfrage IsEmpty ist in Programm 8 4 mit einem Suchalgorith mus implementiert der sich optimieren l sst Wie Erweitern Sie ContainersSetOfChar um eine boolesche Abfrage IsFull die TRUE liefert wenn f r alle Zeichen Has c gilt und eine Aktion Fill deren Nachbedingung IsFull ist Implementieren Sie die auf S 205 spezifizierte Prozedur DrawHori zontalLine von GraphUitilities Implementieren Sie die in Programm 8 5 spezifizierten Dienste Init Sorted und Sort von MathVectorsOfinteger Es gen gt beim Pr fen ob eine Reihung sortiert ist benachbarte Elemente zu verglei chen Ein einfacher Sortieralgorithmus vertauscht benachbarte Elemente F hren Sie den Sortieralgorithmus
389. mehrfach verwendete Konstante einen Namen der ihre Bedeutung ausdr ckt ausgenommen f r Werte wie 0 und 1 Ist ein Konstantenwert zu ndern so ist nur eine Stelle die Konstantenvereinbarung zu ndern Alle anderen Vereinba rungen und die Algorithmen die die symbolische Konstante benutzen sind unabh ngig vom Konstantenwert 141 6 Vom Spezifizieren zum Implementieren Leitlinie 6 2 Ausgedruckte Abhangigkeit von Konstanten 6 4 Datenabstraktion 142 H ngt der Wert einer Konstante von anderen Konstanten ab so stelle dies im definierenden Ausdruck explizit dar siehe 23 Nicht dargestellte Abh ngigkeiten bersieht man beim Andern von Werten leicht sie f hren so zu fehlerhaften Algo rithmen Schnittstelle und Implementation Rekapitulieren wir die Begriffe Schnittstelle und Implementa tion die uns seit Abschnitt 1 3 besch ftigen Eine Spezifikation der Schnittstelle eines Lieferantenmoduls enth lt alle Informa tionen die ein Entwickler eines Kunden zum Benutzen des Lieferanten und des Lieferanten selbst f r dessen Implementation ben tigt Ein Kunde kann eine Schnittstelle benutzen ohne auf die dahinter verborgene Implementation zuzugreifen Auch von einem physischen Kaffeeautomaten m ssen wir nicht wissen wie er den Kaffee kocht es gen gt wenn wir die Kn pfe richtig dr cken k nnen Eine Implementation kann ohne Auswirkung auf Kunden ge ndert werden eine Schnittstelle nicht
390. mentations StdModel StdModel klassen Die abstrakteste Klasse Stores Store realisiert das Konzept der Speicherbarkeit in einer Datei Es folgen zwei weitere Konzept klassen bevor z B TextModels Model die Schnittstelle vervollstan digt Die Implementationsklassen z B TextModels StdModel sind 12 2 Entwurfsmuster 12 2 2 Bild 12 9 Carrier R ider Mapper Entwurfsmuster privat Kunden erhalten nur Zugriff auf Objekte dieser Klassen indem sie Fabrikfunktionen aufrufen Carrier Rider Mapper Die Idee beim Carrier Rider Mapper Entwurfsmuster ist Datenbeh lter von Zugriffen auf die Daten zu trennen und diese vom Formatieren der Daten Den drei Aufgaben sind drei Klas sen zugeordnet Client Mapper Rider Carrier erie Ein Trager carrier enthalt logisch linear angeordnete Daten auf die er rohe Zugriffe mit Positionsangaben erlaubt Modelle k nnen die Rolle von Tr gern spielen Ein Reiter rider hat eine von seinem Tr ger unabh ngige aktuelle Position auf den Tr gerdaten und bietet sequenzielle und wahlfreie Datenzugriffe Ein Abbilder mapper veredelt die rohe Schnittstelle seines Reiters W hrend sich Reiter auf Datenzugriffe weniger Typen beschr nken erlauben Abbilder Zugriffe auf Daten von Standard oder anwendungsspezifischen Typen 365 12 Vom Entwerfen zum Testen Bild 12 10 Carrier R ider Mapper Entwurf f r Text in BlackBox 12 2 3 Bild 12 11 Klassendiagramm zur Eingabe 36
391. metrisieren von Diensten das Vergeben von Rechten und Kontrollieren von Zugriffen das Binden von Gr en an Typen und Pr fen ihrer Typver tr glichkeit das Spezifizieren von Schnittstellen durch Vertr ge die sich aus Vor und Nachbedingungen von Diensten und Invarian ten von Modulen bzw Klassen zusammensetzen 2 7 2 8 Aufgabe 2 1 Geldeingabe Aufgabe 2 2 Geldr ckgabe Aufgabe 2 3 Kaffeesorte und Zutaten Aufgabe 2 4 Zigarettenautomat Aufgabe 2 5 W rfel Aufgabe 2 6 Uhr Aufgabe 2 7 Datum 2 7 Literaturhinweise Literaturhinweise Die Methode der Spezifikation durch Vertrag hat B Meyer aus gearbeitet er nennt sie Entwerfen und Programmieren durch Vertrag design programming by contract 17 21 Meyer hat damit Spezifikationsmethoden die auf theoretischen Arbeiten von R W Floyd und C A R Hoare aufbauen praktisch anwendbar gemacht Hinweise zu den theoretischen Grundla gen findet man in 17 21 Unsere Notation zur Spezifikation lehnt sich an die Program miersprachen Eiffel und Oberon an wir geben ihr daher den Namen Cleo ein K rzel f r Contract Specification Language based on Eiffel and Oberon Eiffel von B Meyer ist in 18 beschrieben der Entwerfer diskutiert in diesem umfassenden kommentierten Referenzmanual auch Ziele Konzepte und Ent wurfsentscheidungen 20 ist eine Kurzfassung von 18 Eine Weiterentwicklung von Oberon ist Component Pascal ber das wir
392. miersprache oder Sprachumgebung gehalten In Abschnitt 4 7 und Kapitel 5 lernen wir eine Variante kennen die weitere Aspekte ins Spiel bringt 4 5 Beispiel Bild 4 7 Syntaxdiagramm zu einem Kaffeeautomaten Formel 4 1 EBNF Ausdruck zum Kaffeeautomaten 4 5 Die erweiterte Backus Naur Form Die erweiterte Backus Naur Form Wir stellen uns nun der in 4 4 3 aufgeworfenen Frage wie man die Syntax einer Programmiersprache exakt festlegen kann Nehmen wir als Beispiel das Modell eines vereinfachten Kaffee automaten der hnlich wie der in Aufgabe 2 1 mit Kaffeem n zen arbeitet Er akzeptiert beim Eingeben nur eine M nze danach gibt er entweder Kaffee aus oder die M nze zur ck Diese zwei Schritte sind wiederholbar nur am Anfang muss der Automat einmal initialisiert werden Bild 4 7 stellt dieses Verhal ten grafisch dar ame Kaffee_ausgeben 4 Minze_einnehmen lt M nze_zur ckgeben Das Diagramm ist in Pfeilrichtung zu durchlaufen die runden K stchen stehen f r Aufrufe von Aktionen Bei einer Verzwei gung in mehrere Richtungen w hlt man einen Pfad So erh lt man etwa initialisieren M nze_einnehmen Kaffee_ausgeben M nze_einnehmen M nze_ zur ckgeben als eine m gliche Folge von Aktionsaufrufen von unendlich vielen Dasselbe Verhalten l sst sich auch textuell darstellen initialisieren M nze_einnehmen Kaffee_ausgeben M nze_zur ckgeben
393. mponent Pascal das wir in Abschnitt 4 7 vorstellen Auf textuelle Notationen beschr nkt k nnen wir definieren Eine Programmiersprache ist eine formale Sprache zur Darstel lung von Modellen die mit Rechnern bearbeitbar oder auf sol chen ausf hrbar sind Was aber ist eine formale Sprache Dazu einige Grundbegriffe Ein Zeichen character ist ein Element aus einer endlichen Menge die zur Darstellung von Information vereinbart ist und Alphabet Zeichensatz vorrat hei t Reiht man Zeichen anein ander so erh lt man Zeichenfolgen Zeichenkette string Eine 51 4 Programmiersprachen Semantik Sprache oder Kalk l 4 2 52 als Einheit betrachtete endliche Zeichenfolge ist ein Wort ber dem Alphabet Ist A ein Alphabet dann bezeichne W A die Menge aller W rter ber A Eine Teilmenge S von W rtern ber einem Alphabet A hei t formale Sprache Welche W rter x W A zu einer Sprache S c W A geh ren und welche nicht ist durch formale Regeln festlegbar dazu mehr in Abschnitt 4 5 In diesem Sinne ist eine Programmiersprache eine Menge von W rtern die allerdings ziemlich lang sein k nnen und Pro gramme hei en Unter diesen Programmen ist i A nur ein klei ner Teil dem Menschen n tzlich der gro e Rest ist praktisch bedeutungslos Bei Zeichen und W rtern m ssen wir klar zwischen etwas Bezeichnendem und dem dadurch Bezeichneten zwischen Darstellung und Bedeutung zwischen Form und Sinn unter scheid
394. mus optimieren indem wir daf r sorgen dass der gesuchte Wert item in der Reihung x vorkommt und zwar unter dem letzten Index 82 Zeichen z hlen Programm 8 11 Suchfunktion f r Index Variante 3 8 2 4 4 x ist aber ein Eingabeparameter wie es sich f r eine Funktion geh rt MinindexOf darf nicht schreibend auf x zugreifen Diese Einschr nkung ist f r die optimierte Variante aufzugeben x muss ein Ein Ausgabeparameter sein die Signatur von Minin dexOf ndert sich Die Semantik bleibt erhalten denn der aktuelle Parameter soll nach dem Aufruf wieder denselben Zustand wie vorher haben Die urspr ngliche Parameterart von x sichern wir per Kommentar zu PROCEDURE MinIndexOf IN VAR x ARRAY OF Any item Any Index VAR i Index lastltem Any BEGIN lastltem X LEN x 1 x LEN x 1 item i 0 WHILE x i item DO INC i END x LEN x 1 lastltem IF i lt LEN x 1 THEN RETURN i ELSIF item lastltem THEN RETURN LEN x 1 ELSE RETURN notFound END END MinlIndexOf Wir nehmen die effizienteste Variante Programm 8 11 in Pro gramm 8 10 auf Komplexit tsanalyse Wir haben den Suchalgorithmus schrittweise optimiert nun interessieren uns Ma zahlen anhand derer wir die Effizienz der drei Varianten exakt bestimmen und vergleichen k nnen d h wir wollen die Komplexit t der Algorithmen analysieren Dabei unterscheiden wir den statischen und dynamischen Aspek
395. n Vorbedingungen sind ein geeignetes Mittel f r Lieferanten um zu pr fen ob Kunden ihre Anforderungen erf llen 151 7 Ein und Ausgabe Entwanzen nach dem Tode Zustand einer Kommando ausfuhrung Zustand eines Moduls 7 2 152 Vorbedingungen haben also ihren Platz dort wo es um Aufruf beziehungen innerhalb der Software zwischen Prozeduren Modulen Objekten geht Interaktionen zwischen Mensch und Software miissen wir anders gestalten dazu im Folgenden mehr Exkurs Das Trapfenster von Bild 7 2 und die Verbindung zum Quell text Bild 7 3 erstellt der Post Mortem Debugger von BlackBox Ein Debugger von bug Wanze Mucke Defekt ist ein Werkzeug das dem Entwickler beim Suchen von Fehlerursachen hilft Post Mortem bedeutet nach dem Tode wenn der Programmablauf in eine Falle trap gest rzt ist aus der er nicht herauskommt Ein Post Mortem Debugger liefert Laufzeitinformation zum Zeitpunkt an dem ein Feh ler erkannt und der Programmablauf abgebrochen wird Die biolo gisch waidm nnischen Metaphern erinnern an den wilden Westen als Trapper Fallen stellten um Tiere nicht nur Wanzen zu fangen und zu t ten Wir halten diese Metaphern f r fragw rdig aber aus der ameri kanischen Geschichte erkl rbar Exkurs In Bild 7 2 zeigen die Zeilen ab der dritten Zeile die Arbeit die BlackBox bis zum eigentlichen Kommandoaufruf erledigt Das Dialog system ruft den Kommandointerpreter und dieser
396. n Concrete extensible implementation class String using referenced strings extending BasisGenerals Comparable Intended to be used as element type of containers IMPORT StdLog BEC BasisErrorConstants BG BasisGenerals MathRandom Utilities Repeater TYPE P2AString POINTER TO ARRAY OF CHAR String POINTER TO StringDesc StringDesc EXTENSIBLE RECORD BG Comparable string P2AString END 349 12 SH 12 gt 3 1 I 350 Vom Entwerfen zum Testen Testing TYPE TestInvariants POINTER TO RECORD UtilitiesRepeater Action END VAR testInvariants TestInvariants String Invariants PROCEDURE IN a StringDesc Checkinvariants NEW EXTENSIBLE BEGIN ASSERT a string NIL BEC invariantClass END ChecklInvariants Redefinitions of Procedures bound to Any Comparison Relations PROCEDURE IN a StringDesc Equal IN b BG AnyDesc BOOLEAN EXTENSIBLE BEGIN WITH b StringDesc DO RETURN a string b string OR a string b string ELSE HALT BEC precondParsTypeOk END END Equal Initializations and Settings PROCEDURE VAR target StringDesc InitDefault EXTENSIBLE BEGIN NEW target string 1 target ChecklInvariants END InitDefault PROCEDURE VAR target StringDesc InitRandom EXTENSIBLE CONST minLength 2 minLength gt 2 else invariant checking of SetOfString fails maxLength 10 BEGIN
397. n Klassen sind abstrakte Datentypen Module lassen sich schematisch in Klassen transformieren Module als Strukturierungseinheiten der Software dienen dazu Aufgaben eines Anwendungsbereichs zu modellieren Klassen als Strukturierungseinheiten der Software dienen dazu Klassen von Dingen eines Anwendungsbereichs zu modellieren Component Pascal kapselt Klassen in Module Dadurch sind Module atomare Komponenten eines komponentenorientier ten Systems Component Pascal realisiert Klassen als erweiterbare Ver bunde mit typgebundenen Prozeduren 9 7 9 8 Aufgabe 9 1 Kaffeeautomaten Aufgabe 9 2 Tassen Aufgabe 9 3 Kaffeeautomaten und Tassen 9 7 Literaturhinweise Literaturhinweise Als Klassiker und Bestseller der Objektorientierung ist B Meyer 21 sehr empfehlenswert es liefert eine softwaretechnisch begr ndete Einf hrung in objektorientierte Konzepte und die Programmiersprache Eiffel 21 ist die berarbeitete Auflage des Originals von 17 17 die deutsche Ausgabe der ersten Auflage von 21 Mit objektorientiertem Modellieren befassen sich 4 und 25 mit objektorientiertem Programmieren 13 22 und 27 Ubungen Mit diesen Aufgaben ben Sie das Erstellen von Klassen aus gegebenen Modulen oder Spezifikationen und das Benutzen von Klassen Transformieren Sie nach dem Schema von 9 5 1 das Modul I1Kaffeeautomat Programm 6 3 S 132 in ein Klassenmodul l1Kaffeeautomaten mit einer Klasse Kaffeeautom
398. n die jeweils aus einer Ansammlung von Diensten bestehen Eine Schnittstelle interface legt fest was ein Lieferant bereit stellen muss und was ein Kunde erhalten kann Eine Spezifika tion enth lt Informationen die Entwickler von Kunden zum Benutzen eines Lieferanten ben tigen Bild 1 5 Kunden Lieferanten Modell mit Schnittstelle Ausf hrbarkeit Bild 1 6 Schnittstelle und Implementation Wie istes zu tun Tabelle 1 1 Beispiele zu Schnittstelle und Implementation 1 3 Schnittstelle und Implementation bietet benutzt Schnittstelle Menge von Diensten Softwareentwickler konstruieren nicht nur Spezifikationen son dern auch Programme die auf Rechnern ausf hrbar und von Menschen benutzbar sind Programme und Spezifikationen unterscheiden sich in der Ausf hrbarkeit Eine Spezifikation ist ein eventuell nicht maschinell ausf hrbares Programm Ein Pro gramm ist eine maschinell ausf hrbare Spezifikation Spezifika tionen kann der Entwickler in Gedanken ausf hren Programme der Rechner Schnittstelle Modul Implementation Um ein ausf hrbares Programm zu erhalten muss man eine spezifizierte Schnittstelle durch eine Implementation erg nzen Eine Implementation eines Moduls ist eine im Innern des Moduls verborgene Struktur die zu der Schnittstelle passt und das spezifizierte Verhalten realisiert Eine Implementation legt fest wie eine Spezifikation zu erf llen ist Das Auseinanderhal
399. n Kommandomodul 11 Kaffeeautomat_DialogBox f r eine Dialogbox MODULE I1Kaffeeautomat_DialogBox MODULE I1Kaffeeautomat IMPORT I1 Kaffeeautomat END I1Kaffeeautomat_DialogBox END I1Kaffeeautomat Die Schnittstelle von I1Kaffeeautomat_DialogBox weist folgende Merkmale auf Zu jeder Aktion von l1Kaffeeautomat bietet I1Kaffeeautomat_DialogBox ein gleichnamiges parameterloses Kommando 1Kaffeeautomat_DialogBox hat keine Abfragen sondern Anzeige felder Um diese zu implementieren brauchen wir ein weite res Sprachelement von Component Pascal Verbunde 1Kaffeeautomat_DialogBox ist genauso robust wie l1 Kaffeeautomat_EinAusgabe Verbunde Verbunde sind wie Reihungen strukturierte Daten die der Pro grammierer definieren kann Im Unterschied zu Reihungen bestehen sie nicht aus indizierten Elementen gleichen Typs son dern aus benannten Elementen jeweils beliebigen Typs F r den Kaffeeautomaten brauchen wir einen Verbund der die Anzeigefelder einer Dialogbox zu einer Einheit zusammenfasst 163 7 Ein und Ausgabe Verbundtyp Verbundvariable Zugriff 164 RECORD auBer_Betrieb BOOLEAN Betrag eingenommener_Betrag Preis gesammelter_Betrag INTEGER Meldung ARRAY 60 OF CHAR END Neben Anzeigefeldern die den Abfragen des Funktionsmoduls entsprechen gibt es zwei weitere Felder Betrag dient dazu den gerade eingegebenen Betrag vom bereits eingenommenen zu unterscheiden Meldung d
400. n Uberlegungen schreiben wir in Cleo Notation nieder Das Ausgeben eines Mengenelements muss ein Dienst eine Aktion der Klasse WordWriter sein Diese Aktion muss als Parameter ein Mengenelement haben Da die Aktion das Men genelement nur ausgeben soll ist es ein Eingabeparameter CLASS WordWriter ACTIONS Write IN word ContainersSetsOfString Element END WordWriter Damit haben wir eine W rter Schreiber Klasse mit nur einer Schreib Aktion noch nicht viel mehr als eine Prozedur in Com ponent Pascal Wo soll die Klasse vereinbart sein Wie das Mengenelement auszugeben ist mit UtilitiesOut wei nur das Modul I1WordChecker Demnach muss I1WordChecker die Aktion Write von WordWriter implementieren Die Klasse WordWriter muss in ContainersSetsOfStrng bekannt sein denn die dort vereinbarte Klasse Set benutzt WordWriter als Parametertyp seiner Aktion Write CLASS Set QUERIES Bild 10 7 Benutzungs und Erweiterungsstruktur 10 3 W rter sammeln Rechtschreibung pr fen ACTIONS Write IN wordWriter WordWriter END Set 1WordChecker ist Kunde von ContainersSetsOfString Containers SetsOfString ist ein von I1WordChecker unabh ngiger Lieferant einer Mengenklasse Wie l sen wir den Widerspruch auf Wie erreichen wir dass Con tainersSetsOfString eine von I1WordChecker unabh ngige Klasse Word Writer kennt und als Parametertyp benutzen kann und gleichzei tig I1WordChecker die Aktion Write von WordWri
401. n Unterschied zwi schen Benutzungsoberfl che Schnittstelle und Implementation veranschaulichen Schnittstelle Implementation Netzstecker Empf nger Antennen Verst rker buchse Lautsprecher Benzintank Motor Getriebe ffnung Lenkung Auspuff Reifen Bremsen Benutzungs oberfl che Druck und Drehkn pfe Schieberegler Z ndschloss Lenkrad Pedale Schalthebel Exkurs Begriffe wie Benutzerschnittstelle Mensch Maschine Schnittstelle Mensch Maschine Kommunikation Dialogsystem sind gebr uchlich aber irref hrend Weder besitzt ein Mensch eine Schnittstelle zu einer Maschine noch kann er mit einer Maschine kom munizieren schon gar nicht einen Dialog f hren Kommunikation setzt gleichartige autonome Akteure voraus die bermittelte Informationen hnlich interpretieren Einem Rechner d rfen wir kein echtes Verst nd nis f r menschliche Intentionen unterstellen Ein Dialog setzt zwei gleichberechtigte Subjekte voraus dies ist bei Mensch und Maschine nicht der Fall Der Mensch benutzt die Maschine Ein Rechner ist f r einen Menschen nur ein Werkzeug zur Verarbeitung von Daten und ein Medium zur bermittlung von Daten an andere Menschen Werkzeuge und Medien werden vom Menschen nicht bedient sondern benutzt Damit sie benutzbar sind m ssen sie eine menschengerechte Oberfl che aufweisen Wir wollen die Unterschiede zwischen Menschen und Maschinen zwischen menschlic
402. n oder parameterlose Funktionen implementieren Angenommen wir vereinbaren im Beispiel eine private Variable ausgegebene_Tassen die die Anzahl der ausgeschenkten Tassen speichert Dann k nnen wir die Abfrage gesammelter_Betrag als Funktion realisieren QUERIES Preis NATURAL gesammelter_Betrag NATURAL VAR Preis ausgegebene_Tassen INTEGER PROCEDURE gesammelter_Betrag INTEGER BEGIN RETURN ausgegebene_Tassen Preis END gesammelter_Betrag Jede Funktion wird mit dem Schliisselwort PROCEDURE eingelei tet Die Exportmarke ist Schreibzugriffe auf Funktionen sind nicht m glich Das leere Klammerpaar ist als syntaktischer Zucker bei parameterlosen Funktionen dazuzustreuen Wesent lich ist Zur Vereinbarung der Funktion geh rt nicht nur die Signatur der Kopf der Funktion hier PROCEDURE gesammelter_Betrag INTEGER sondern auch ein Rumpf body hier 115 6 Vom Spezifizieren zum Implementieren LS Cleo Component Pascal 6 1 5 Cleo Component Pascal 116 BEGIN RETURN ausgegebene_Tassen Preis END gesammelter_Betrag der hier nur aus einem Anweisungsteil besteht mit nur einer Anweisung RETURN ausgegebene_Tassen Preis Der Ausdruck ausgegebene_Tassen Preis wird berechnet die RETURN Anweisung gibt diesen Wert an die Aufrufstelle zur ck Der Funktionsrumpf geh rt jedoch schon zur Implementation die wir erst im Schritt 3 erstellen Allgemein gilt die Tran
403. n zu dokumentieren unter denen die Set Klasse korrekt arbeitet damit Entwickler von Kunden sich daran halten k nnen siehe unten 1 MODULE ContainersSetsOfString Interface Description Concrete implementation class Set for sets consisting of POINTER TO ARRAY OF CHAR elements provides set operations Static and dynamic set objects may be used as receivers and parameters Restrictions Set cannot guarantee its invariant by itself Clients of Set must be cooperative they must not supply a call of ForAllDo with an action that changes the values of items in a set change items of a set via aliasing pointers Design and Implementation Description Set is implemented by a binary search tree ordered by referenced strings Invariant If the following condition holds before a call of a procedure bound to Set then it will hold after the call too For each node t of the tree associated with the receiver it holds For each node Is of the left subtree of t it holds Is item lt t item For each node rs of the right subtree of t it holds rs item gt t item 1 IMPORT BEC BasisErrorConstants TYPE Element POINTER TO ARRAY OF CHAR Action POINTER TO ActionDesc ActionDesc ABSTRACT RECORD END Node POINTER TO RECORD item Element Invariant item NIL left right Node END 327 11 Dynamische Objektstrukturen Set POINTER TO SetDesc SetDesc EXTENSIBLE RECORD root Node root NIL
404. nd Durchschnitt sind sogar drei Objekte betei ligt Relationen und Operationen mit Objekten folgen Regeln eines zugrunde liegenden mathematischen Konzepts Die Mathematik beschreibt die Regeln ihrer Objekte durch Axiome und daraus abgeleitete S tze Softwaretechnisch erscheinen die Regeln als objekt bergreifende Invarianten Eine objekt ber greifende Invariante ist eine Bedingung die mehrere Objekte stets gemeinsam erf llen m ssen Tabelle 12 1 nennt Beispiele Mathematik Axiom oder Satz Softwaretechnik Objekt bergreifende Invariante Symmetrie der V x y Gleichheits x y gt y x relation F r je zwei Objekte x y der Klasse K x y IMPLIES y x Transitivit t der V x y z Ordnungs x lt y a y lt 2z relation gt x lt 2 Fiir je drei Objekte x y z der Klasse K x lt y AND y lt z IMPLIES x lt 2 Assoziativit t Y x y z der Vereinigung x y Uz x Uy Uz Fiir je drei Objekte x y z der Klasse K XU y UZ XUy Uz Konzeptklassen dienen vielen Erweiterungen als Basis Die Erweiterungsklassen implementieren die Konzepte und sollen dabei deren Regeln einhalten Wir wollen daher die Regeln einer Konzeptklasse exakt spezifizieren und bei einer beliebigen Erweiterungsklasse pr fen ob sie diese Regeln einh lt Mit folgendem Verfahren k nnen wir solche Regeln objekt bergreifende Invarianten systematisch testen Dabei sei Some Concepts e
405. nd als ausf hrbares Programm Bild 5 11 Interpretation 5 3 Werkzeuge Quelltext Q Eingabe Interpreter l uft auf f hrt Anweisung von Q direkt aus ni Ein Interpreter untersucht einzelne Konstrukte des Quelltex tes und f hrt sie direkt der Reihe nach auf dem Rechner aus ohne geschlossenen Maschinencode zu erzeugen siehe Bild 5 11 Wir verwenden weiterhin die Bezeichnung bersetzer nicht als Oberbegriff sondern als Synonym zu Kompilierer Beide Techniken das Kompilieren und das Interpretieren haben ihre Vor und Nachteile kombiniert eingesetzt k nnen sie sich zu einem m chtigen Werkzeugsatz erg nzen Deshalb bietet BlackBox sowohl einen bersetzer als auch einen eingeschr nk ten Interpreter Kommandointerpreter und Lader Dem Entwicklungsmodell von Bild 4 6 S 61 zufolge kommen jetzt Binder und Lader ins Spiel Von 4 7 6 S 80 wissen wir dass zu Component Pascal also auch BlackBox ein dynamischer Bindelader geh rt Der dritte oder zweite im Bunde ist der Kommandointerpreter In BlackBox ist ein Kommando eine gewohnliche Prozedur mit einer eingeschrankten Signatur aus der Schnittstelle eines Moduls Im einfachsten Fall ist ein Kommando parameterlos Einen Kommandoaufruf schreibt man in der Punktnotation z B 11MyModule Do oder allgemein Modulname Kommandoname aktuelle Parametern 101 5 Die Entwicklungsumgebung BlackBox Bild 5 12 Kommandoaufruf mit Men befehl Bild 5 13
406. nd ihren Typen den for malen Parametern entsprechen Im Beispiel gen gt es beim Aufruf eine ganze Zahl als aktuellen Parameter einzusetzen Kaffeeautomat Geld_einnehmen 60 Der Wert 60 passt zum formalen Parameter Betrag da er zum Wertebereich von INTEGER geh rt Er wird an Betrag bergeben er flie t vom Aufrufer zum Aufgerufenen Betrag 60 60 Parameter bergabe INTEGER Bei der Parameter bergabe wird der formale Parameter an den Wert des aktuellen Parameters gebunden Als aktuelle Eingabe parameter sind Ausdr cke einzusetzen Sie k nnen beliebig komplex sein nur ihr Typ muss passen So wird beim Aufruf Kaffeeautomat Geld_einnehmen Kaffeeautomat Preis 2 zun chst der Abfragenaufruf Kaffeeautomat Preis ausgewertet der Ergebniswert angenommen 60 wird mit 2 multipliziert 120 wird an Betrag bergeben Es gibt zwei weitere Arten von Parametern Ausgabe und Ein Ausgabeparameter die mit OUT bzw INOUT vereinbart werden Ein von Programm 2 1 abweichendes Beispiel f r einen Ausga beparameter ist Geld_zur ckgeben OUT Betrag INTEGER Beim Aufruf dieses Dienstes muss der aktuelle Parameter eine Gr e sein die an einen Wert gebunden werden kann Kaffeeautomat Geld_zur ckgeben Geldbeutel Hier ist Geldbeutel das Ziel des ausgegebenen Betrags Der Wert wird vom Aufgerufenen an den Aufrufer bergeben Betrag 60 gt Geldbeutel 60 Parameter bergabe INTEGER 8
407. nd sie effektlos Eine einzulesende Zeichenkette ist durch Leer Zeilenum bruch Tabulatorzeichen oder doppelte Hochkommas begrenzt Muster zum Einlesen 7 2 3 2 Programm 7 2 Schnittstelle von Out Semantik Muster zum Ausgeben 7 2 4 7 2 Kaffeeautomat mit einfacher Ein Ausgabe Im algorithmischen Muster zum Einlesen eines einzelnen Werts In Open In Type x IF In Done THEN verarbeite x END steht In Tyoe f r eine der Leseoperationen f r l1Kaffeeautomat_EinAusgabe brauchen wir nur In Int Out Die syntaktische Schnittstelle des Ausgabemoduls lautet DEFINITION Out PROCEDURE Char ch CHAR PROCEDURE Int i n INTEGER PROCEDURE Ln PROCEDURE Open PROCEDURE Real x n REAL PROCEDURE String str ARRAY OF CHAR END Out Thre Semantik sei wieder informal beschrieben Open aktiviert das Log Fenster d h bringt es auf dem Bild schirm nach vorne Char Int Real String schreiben den bergebenen Parameter wert in das Log Fenster Die Parameter sind Eingabeparame ter Beachte Der Eingabe eines Werts von der aufrufenden Prozedur entspricht die Ausgabe des Werts an die Benut zungsoberfl che Der zweite Parameter n bei Int und Real gibt die Mindestan zahl der auszugebenden Stellen der Zahl ibzw x an Ln schreibt ein Zeilenumbruchzeichen in das Log Fenster Das algorithmische Muster zum Ausgeben eines einzelnen Werts in einer eigenen Zeile sieht so aus Out Open Out Typ
408. nd struk turiertes Programmieren beide sind unabh ngig von speziellen Programmiersprachen Wir gehen in den Kapiteln 8 und 9 auf diese Methoden und zugeh rige Notationen und Darstellungsmit tel ein Dazu geh ren grafische Layouts von Datenstrukturen Pseudocode regul re Ausdr cke und Zustandsdiagramme Wichtige Begriffe sind Datenstruktur Algorithmus Zuweisung Bedingung Folge Auswahl Wiederholung und als Abstrak tion Prozedur Implementierung Zweck der Implementierung ist eine spezifizierte und entwor fene Softwareeinheit zu implementieren Die L sung der Auf gabe wird in einer Implementationssprache formuliert um sie maschinell ausf hrbar zu machen Diese T tigkeit kann der Ent wickler im Wesentlichen schematisch ausf hren wenn er bei Zerlegung Spezifikation und Entwurf gut gearbeitet hat Man spricht daher auch von der Codierung eines Entwurfs Die Methode der Implementierung ist Ergebnisse vorhergehen der Ebenen nach relativ festen Regeln zu transformieren Damit befassen sich die Kapitel 6 bis 12 Die Notation daf r ist in die sem Buch die Implementationssprache Component Pascal Wichtige Begriffe sind Konstante Typ Variable Vereinbarung Ausdruck Anweisung Prozedur Funktion und Parameter Test Zweck des Tests ist zu pr fen ob die Implementation einer aus f hrbaren Softwareeinheit ihrer Spezifikation widerspricht Die Einheit wird aktiviert und ihr Verhalten beobachtet d h sie wird mit E
409. ndet so wird sie unerreichbar Der Speicher platz unerreichbarer Variablen h uft sich als M ll im Speicher an und ersch pft schlie lich den freien Speicherplatz Wird eine dynamische Variable gel scht obwohl noch ein Bezug auf sie existiert so entsteht ein h ngender Bezug Die Folgen h n gender Bez ge sind gravierender als die unerreichbarer Variablen Zu objektorientiertem Programmieren geh rt dynamisches Erzeugen von Objekten Deshalb bieten objektorientierte Programmiersprachen automatische Speicherbereinigung Ausnahmen bilden objektorientiert erweiterte Sprachen bei denen automatische Speicherbereinigung nicht mit dem Speichermodell der Ursprache vereinbar ist z B C Die Existenzdauer einer dynamischen Variable ist also durch den Programmablauf bestimmt Sie reicht vom Erzeugen der Variable bis zu dem Zeitpunkt an dem sie unerreichbar wird Eine Zeigervariable mit Wert NIL darf nicht dereferenziert wer den BlackBox pr ft zur Laufzeit vor dem Dereferenzieren einer Zeigervariable ob sie den Wert NIL hat falls ja erzeugt BlackBox einen Trap Zur Semantik einer Dereferenzierung geh rt also eine implizite Vorbedingung z B ASSERT word NIL word 0 a Ist in einem Anweisungsteil unbekannt ob eine Zeigervariable an NIL oder einen Bezug auf eine dynamische Variable gebunden ist so kann dies gepriift werden z B IF word NIL THEN word 0 char ELSE Dereferencing word causes a trap END Eine Pr
410. ndomodul I1Kaffeeautomat_EinAusgabe realisiert eine Benutzungsoberfl che und nutzt als Kunde die Dienste von I1Kaffeeautomat Der Begriff Funktion bedeutet hier Funktionalit t nicht etwa mathematische Funktion oder Funktionsprozedur MODULE I1Kaffeeautomat_EinAusgabe MODULE I1Kaffeeautomat IMPORT I1Kaffeeautomat END I1Kaffeeautomat_EinAusgabe END I1Kaffeeautomat In diesem Entwurf steckt eine allgemeine Idee Trenne beim Entwurf einer Aufgabenl sung Aspekte der Funktion von Aspekten der Benutzungsoberfl che sodass sie unabh ngig voneinander implementierbar sind Gr nde f r die Aufteilung sind Funktionale Teile m ssen kor rekt Benutzungsoberfl chen robust sein Zum funktionalen Teil einer Aufgabenl sung kann man verschiedene Benutzungsober fl chen gestalten z B um den Anforderungen verschiedener Benutzergruppen zu entsprechen Die Trennung von Funktion und Ein Ausgabe erlaubt es die Qualit tsmerkmale Korrekt heit und Robustheit getrennt zu betrachten und zu erzielen Benutzungsoberfl che MODULE l1 Kaffeeautomat_EinAusgabe Kunde Kommandomodul Kunde N 7 benutzt S p benutzt Schnittstelle MODULE l1 Kaffeeautomat Funktionsmodul Lieferant In diesem Sinn ist l1Kaffeeautomat ein Funktionsmodul Funktio nalit tsmodul und Bild 7 5 nimmt den Entwurf f r den n ch sten Abschnitt vorweg Doch zun chst entwerfen wir die Benutzungsoberfl che MODULE I1Kaffeeautomat_DialogBox K
411. ndos geben den Inhalt dieser Mengen aus Ein Aufrufmen sieht damit so aus 11WordChecker InitDictionary 11 WordChecker Check 11 WordChecker WriteDictionary 11 WordChecker WriteFoundWords 11 WordChecker WriteUnknownWords Utilitiesout Open F r die Ein Ausgabe verwenden wir die Module Utilitiesin und UtilitiesOut Falls der Benutzer das Ausgabefenster zwischen zwei Rechtschreibpr fungen geschlossen hat kann er es mit UtilitiesOut Open wieder ffnen An die Stelle des Aufrufmen s kann eine Dialogbox treten siehe Abschnitt 7 3 Es liegt nahe die drei logischen Mengen mit Objekten einer Mengenklasse zu realisieren Eine generische Mengenklasse ist in Programm 9 3 S 235 spezifiziert von dieser ben tigen wir eine Variante mit dem Elementtyp Zeichenkette In Component Pascal erwarten wir ein Klassenmodul ContainersSetsOfString mit einer Klasse Set die wie in Programm 9 5 S 244 definiert ist aber mit angepasster Typvereinbarung fiir Element Damit sind die Mengen so zu vereinbaren VAR dictionary foundWords unknownWords ContainersSetsOfString SetDesc Die Menge der unbekannten W rter ergibt sich indem man aus der Menge der gefundenen W rter die im W rterbuch vorkom menden W rter entfernt Die Mengenklasse bietet daf r noch keinen Dienst eine typische Situation Der Entwickler findet in der Modul und Klassenbibliothek oft was er braucht aber manchmal muss er die Funktionalit t der Bibliothek erweitern Wi
412. nee 50 Programmiersprachen ueneeeseseenenenennnesneneneneennnenen 51 AT Grundbegriffe enre e chien ren seen eee 51 4 27 Rechner EE 52 4 3 Klassifikation von Implementationssprachen 56 4 4 Entwickler und Maschine ceneneenen 56 4AT Pragmatik cc 5 555 cde asters 22 58 44 2 Semantik wise cist ace veel 58 4 43 Synta niani ia s a eeriat a atid 59 44 4 Darstellung im Rechner 0 0 eee 60 4 4 5 Arbeitsschritte und Werkzeuge 61 4 5 Die erweiterte Backus Naur Form neeeeene 63 4 6 Syntax der Spezifikationssprache Cleo u 66 4 6 1 Lexikalische Einheiten nene 66 4 6 2 Syntaktische Einheiten 71 4 7 Die Implementationssprache Component Pascal 73 4 7 1 Programmstruktur eeeeeennnn 73 4 7 2 Merkmale u a ee fake 75 4 7 3 Anweisungen snene henni 76 ATA Impo rtliste 22 22 22 222 HeRann 77 4 7 5 Getrenntes bersetzen sssi 79 Inhaltsverzeichnis 4 7 6 Dynamisches Laden und Entladen 80 4 8 Programm Ablauf Prozess nneeeneen 8 4 9 Fehlerarten und Sicherheit neeneene 83 4 10 Zusammenfassung ccc sees esses sees 84 4 11 Literaturhinweise usenessesseesenesenseensensennnnnennnnnenn nen 85 4 12 bungen RE RESTE En ee secon Rass odors caste de rare econ eats 85 Die Entwicklungsumgebung BlackBox neee 87 5 1 Module Subsysteme Komponenten ununnce 87 5 1 1 bers
413. nen Nachbedingungen konjunk tiv zu verkn pfen sind Dies l sst sich zu OLD voll OR OLD teilvoll IMPLIES teilvoll OR leer vereinfachen und weiter zu NOT OLD leer IMPLIES NOT voll Da NOT leer als Vorbedingung zugesichert ist reduziert sich der Ausdruck weiter zu NOT voll also genau der Nachbedingung von Programm 9 1 Damit ist die quivalenz von Bild 9 2 und Programm 9 1 gezeigt Zustandsdiagramme kann man durchlaufen indem man den Pfeilen folgt hnlich wie bei Syntaxdiagrammen siehe Bild 4 7 S 63 Es ist zweckm ig einen Startzustand manchmal meh rere Startzust nde festzulegen wir kennzeichnen ihn durch einen Doppelkreis in Bild 9 2 der Zustand leer Wir starten im Zustand leer kommen durch f llen nach voll von da durch leeren nach teilvoll oder leer In teilvoll k nnen wir durch leeren beliebig oft bleiben bevor wir nach leer gehen Dort angekom men wiederholt sich der Ablauf Alle m glichen Folgen von Zust nden k nnen wir textuell mit einem EBNF Ausdruck beschreiben siehe Abschnitt 4 5 leer voll teilvoll Hier bilden leer voll und teilvoll ein Alphabet terminaler Symbole Ein EBNF Ausdruck in dem nur Terminale vorkommen hei t regul rer Ausdruck regular expression Eine formale Sprache hei t regul r regular language wenn sie sich mit einem einzi Regularer Ausdruck Formel 9 2 Aktionsfolge einer Tasse 9 1 3 Programm 9 2 Spezifikation von Kaffee ausgeben 9 1 Ta
414. nen mit Abfragen Auskunft ber den Maschinenzustand erhal ten und ihn mit Aktionen ver ndern Ein implementierter Schalter Das primitivste Maschinenmodul ist ein Schalter wie er in Pro gramm 2 6 S 33 spezifiziert ist Entsprechend leicht ist es zu implementieren f r jede Aktion gen gt eine Zuweisung 133 6 Vom Spezifizieren zum Implementieren Programm 6 4 Schalter implementiert 6 3 5 Behaltermodul Entwurf 6 3 5 1 Reihungstyp 134 MODULE 1 Switch VAR on BOOLEAN PROCEDURE SwitchOn BEGIN on TRUE END SwitchOn PROCEDURE SwitchOff BEGIN on FALSE END SwitchOff PROCEDURE Toggle BEGIN on on END Toggle END 11 Switch Der Initialisierungsteil des Moduls fehlt on wird nach dem Laden implizit mit FALSE initialisiert Implementierte Mengen Die im Programm 2 7 S 34 spezifizierte Menge ist ein Modul mit Zustand geh rt aber zur Art der Beh ltermodule Ein Beh lter modul kann Elemente eines Typs aufnehmen speichern und wieder abgeben Sein Zustand entspricht den gespeicherten Ele menten Kunden k nnen den Beh lterinhalt abfragen und ndern Beh lter fassen wir im Subsystem Containers zusammen Das Mengenmodul modelliert eine Menge im mathematischen Sinn Der Wertebereich des Elementtyps entspricht einer Grund menge der Zustand des Moduls entspricht einer Teilmenge die ser Grundmenge Ein direkter Entwurf ist jedem Element der Grundmenge einen Schalter zuzu
415. ner Schleife weist deren Terminierung nach da die Variante nicht kleiner als 0 werden kann Beim Entwurf 2 der Ausgabeschleife auf S 190 ist die gepr fte Variable c Sie wird im Schleifenrumpf direkt ver ndert aber die Abbruchbedingung c gt MAX CHAR ist zu stark sie ist immer FALSE Wir k nnen die Schleife zum Terminieren bringen indem wir die Abbruchbedingung abschw chen bzw die Fortset zungsbedingung verst rken Aus c lt MAX CHAR folgt c lt MAX CHAR daher ist c lt MAX CHAR eine st rkere Fortsetzungsbedin gung als c lt MAX CHAR Damit erhalten wir eine verbesserte terminierende Version c MIN CHAR WHILE c lt MAX CHAR DO IF ContainersSetOfChar Has c THEN Out Char c END c CHR ORD c 1 END ASSERT c gt MAX CHAR ASSERT c MAX CHAR IF ContainersSetOfChar Has c THEN Out Char c END Die Abbruchbedingung ist c gt MAX CHAR nach der Schleife gilt sogar c MAX CHAR F r c MAX CHAR ist die IF Anweisung aus dem Schleifenrumpf noch einmal hinzuschreiben Suchen wir eine elegantere L sung Anstatt ein Zeichen als Zahl zu interpretieren um den Nachfolger zu erhalten nehmen wir eine Zahl und interpretieren sie bei Bedarf als Zeichen VAR i INTEGER Der Entwurf 4 orientiert sich am Entwurf 2 i ORD MIN CHAR WHILE i lt ORD MAX CHAR DO IF ContainersSetOfChar Has CHR i THEN Out Char CHR i END INC i END Zahlschleife
416. ner einseitigen Auswahl anweisung beschreiben ASSERT Bedingung Fehlernummer ist quivalent mit IF Bedingung THEN HALT Fehlernummer END HALT ist eine Standardprozedur sie beendet den Programmab lauf mit einem Trap Gem Programmierkonvention schreiben wir den Aufruf fett Man beachte dass die Reihenfolge der Bedingungen bei Aus wahlanweisungen eine Rolle spielt Im Entwurf 2 des Algorith mus ist es z B sinnlos die Verwendbarkeit eines Werts zu pr fen wenn schon seine Eingabe gescheitert ist Bevor wir Entwurf 2 des Algorithmus in eine Implementation umsetzen k nnen m ssen wir wissen wie die Ein und Aus gabe zu bewerkstelligen sind BlackBox bietet wie alle Oberon Sprachumgebungen zwei Module die sich gut f r Lernzwecke eignen diese stellen wir vor Eingabemodul In und Ausgabemodul Out Das Modul In dient dem sequenziellen Lesen von Werten aus einem Textfenster das Modul Out dem sequenziellen Schreiben von Werten in das Log Fenster Die Werte k nnen Zahlen Zei chen oder Zeichenketten sein sie bilden aneinandergereiht einen Text der Eingabe bzw Ausgabestrom hei t Die aktuelle 157 7 Ein und Ausgabe 7 2 3 1 Programm 7 1 Schnittstelle von In Sprachelemente Semantik 158 Lese bzw Schreibposition im Text zeigt jeweils hinter das zuletzt gelesene bzw geschriebene Zeichen und kann nur durch eine Lese bzw Schreiboperation ver ndert d h weitergesetzt werden Eine genaue
417. neuer_Preis Lokale Vereinbarungen einer Prozedur stehen zwischen ihrem Kopf und ihrem Anweisungsteil Vereinbarungs und Anweisungsteil einer Prozedur bilden ihren Rumpf Die Syntax lautet vereinfacht ProcDecl PROCEDURE IdentDef FormalPars DeclSeq BEGIN StatementSeq END ident Die syntaktische Einheit DeclSeq ist die gleiche wie beim Ver einbarungsteil eines Moduls 161 7 Ein und Ausgabe Sichtbarkeitsbereich Existenzdauer In Open vor OutOpen Fazit 162 m Statische Eigenschaft Lokale Merkmale sind nur inner halb des vereinbarenden Prozedurrumpfs sichtbar sie sind Privateigentum der Prozedur m Dynamische Eigenschaft Lokale Variable existieren nur w hrend eines Aufrufs der vereinbarenden Prozedur Beim Aufruf einer Prozedur wird f r jede lokale Variable Speicherplatz reserviert bei der R ckkehr aus dem Proze duraufruf wird der Speicherplatz freigegeben 2 neuer_Preis wird nicht durch eine Zuweisung initialisiert son dern durch den Prozeduraufruf In Int neuer_Preis 3 Der Eingabestrom muss vor dem Ausgabestrom ge ffnet sein damit In vom Fenster des Kommandoaufrufs liest Umgekehrt w re durch Out Open das Log Fenster aktiv und In w rde versuchen die Eingabe vom Log Fenster zu lesen 4 Statt alle F lle zu differenzieren sind bei initialisieren und Geld_einnehmen zwei F lle fehlerhafter Eingabe zusammenge fasst 5 Der Aufruf Dialog Beep erzeugt einen kurzen Piepston
418. ng 1 2 2 Mathematisches Modell Programm 1 3 Menge als Modul roh Programmier konvention 1 3 Was istzu tun Eine Menge Das zweite zu modellierende Ger t ist ideeller Art eine Menge Aus der Mengenlehre wissen wir dass man pr fen kann ob ein Element x in einer Menge M enthalten ist Istxe M Man kann ein Element x zu einer Menge M hinzuf gen Ersetze M durch M U x oder aus M entfernen Ersetze M durch M x In ein Softwaremodell transformiert sieht das so aus MODULE Set QUERIES Has x ACTIONS Put x Remove x END Set Die Abfrage Has x ist entgegen Leitlinie 1 4 nicht mit einem Adjektiv benannt sondern mit einem konjugierten Verb das die Frage Menge hast du das Element x ausdr ckt Die Antwort kann nur ja oder nein lauten K nnten die Abfrage Contains x die Aktionen Include x und Exclude x hei en Ja Aber Aus Softwaresicht ist eine Menge eine spezielle Art von Beh lter container bei Beh ltern nennen wir einheitlich die Ent h ltabfrage Has das Hinzuf gen Put das Entfernen Remove Eine Menge mit maximal n Elementen hat 2 verschiedene Zust nde Deshalb eignen sich Zustandsdiagramme ab n gt 3 schlecht dazu das Verhalten von Mengen darzustellen Schnittstelle und Implementation Die Programme 1 1 bis 1 3 sind Spezifikationen eines Kaffeeau tomaten eines Schalters und einer Menge Beschreibungen ihrer Schnittstellen zu anderen Module
419. ng result Checkinvariants ASSERT result string aString BEC postcondResultOk RETURN result END New 351 12 Vom Entwerfen zum Testen SH gt SH gt Kovarianz 352 Testing Redefinition of Procedure bound to UtilitiesRepeater Action PROCEDURE this TestInvariants Do VAR a b c StringDesc BEGIN Choose random strings and check the axioms of a totally ordered set a InitRandom b InitRandom c InitRandom BG CheckComparablelnvariants a b c END Do Commands PROCEDURE TestInvariantsOnce BEGIN testInvariants Do END TestInvariantsOnce PROCEDURE TestinvariantsUntilBreak BEGIN Utilities Repeater UntilBreakDo testinvariants END TestInvariantsUntilBreak PROCEDURE StartTestinvariants BEGIN Utilities Repeater Start testInvariants END StartTestInvariants PROCEDURE StopTestinvariants BEGIN UtilitiesRepeater Stop testInvariants END StopTestlnvariants BEGIN Built in test every time the module is loaded NEW testinvariants testInvariants Do CLOSE StopTesitinvariants END ContainersStrings Die Nummern in der folgenden Liste entsprechen den Num mern bei den Symbolen in Programm 12 4 1 Bei Equal LessEqual und Copy liegen kovariante Erweiterungs situationen vor die statisch z B durch PROCEDURE IN a StringDesc Equal IN b StringDesc BOOLEAN auszudr cken w ren Doch Component Pascal verlang
420. ng einer Gleichung spezifizieren variable Ausdruck ASSERT variable Ausdruck Nach der Zuweisung hat die Variable denselben Wert wie der zugewiesene Ausdruck Streng genommen gilt die Zusicherung nur wenn die Variable links nicht im Ausdruck rechts vor kommt und wenn sowohl Variable als auch Ausdruck seitenef fektfrei sind siehe S 23 Beispielsweise erh ht die Zuweisung i i 1 den Wert von i um 1 aber i i 1 ist immer falsch Man beachte den Unterschied zwischen variable Ausdruck und variable Ausdruck Das erste Konstrukt ist eine Anweisung als solche ver ndert es einen Zustand hier den Zustand der Variable auf der linken Seite Das zweite Konstrukt ist ein Ausdruck als solcher liefert es einen Wert Hier handelt es sich um einen booleschen genauer relationalen Ausdruck eine Gleichung die aus zwei Teilaus dr cken besteht Der linke Teilausdruck ist hier eine Variable vom rechten Teilausdruck wissen wir nichts Genaues Beide Ausdr cke werden ausgewertet die Werte werden miteinander verglichen Sind sie gleich so liefert die Gleichung den Wert TRUE sonst FALSE u Die Zeichen und so wenig sie sich unterscheiden bedeuten doch grunds tzlich Verschiedenes Component Pascal hebt den semantischen Unterschied syntaktisch dadurch hervor dass ein Operator ist der Gleichheitsoperator w hrend nur ein Begrenzer ist Exkurs Das Zuweisungssymbol ist
421. ngen einer Exportmarke oder an seinen Namen u 6 1 4 6 1 4 1 6 1 Von Cleo zu Component Pascal Schritt 1 exportiert Exportierte Namen schreiben wir gem Program mierkonvention fett Damit entfallen bei der Transformation FOR Konstrukte Export marken kommen hinzu Allgemein ergibt sich das Schema QUERIES ACTIONS FOR CONST VAR PROCEDURE Dienstname Dienstname Verschiedene Exportmarken erlauben verschiedene Arten von Zugriffen siehe unten Cleo stellt die Frage Wer darf zugrei fen Component Pascal fragt Wie darf zugegriffen werden Abfragen In der Realit t gibt es sowohl feste als auch ver nderliche Gr en die von anderen Gr en abh ngen k nnen In einem Pro gramm k nnen Gr en gespeichert oder berechnet werden Dies widerspiegelt sich bei der Transformation von Abfragen Eine Cleo Abfrage wird in eines der Component Pascal Merk male Konstante schreibgesch tzte Variable oder Funktion transformiert genau genommen ist die Wahl schon ein Imple mentierungsschritt siehe Bild 6 1 3 Dabei k nnen nur Funk tionen Parameter haben Jede der drei Transformationen erh lt die Eigenschaft einer Abfrage dass ein Aufruf ein Ausdruck ist Konstanten Nehmen wir f r den Moment an der Preis einer Tasse Kaffee sei stabil Dann ergibt sich die Transformation QUERIES CONST Preis NATURAL Preis 60 Preis erh lt mit der Vereinbarung den f
422. nktion mit dem Kopf PROCEDURE IsAlphaLatin1 c CHAR BOOLEAN Mit dem Aliasnamen Chars BasisChars ersetzen wir char IN letter durch Chars IsAlphaLatin1 char Bei den konkretisierten Fassungen der Prozeduren erg nzen wir Vor und Nachbedingungen um ihre Semantik zu betonen PROCEDURE ReadText BEGIN In Open In ReadRawChar char WHILE In failed DO IF Chars lsAlphaLatin1 char THEN ReadWord ELSE ReadNonword END END ASSERT In failed BEC postcondition END ReadText PROCEDURE ReadWord BEGIN ASSERT In failed amp Chars lsAlphaLatin1 char BEC precondition In ReadRawChar char WHILE In failed amp Chars lsAlphaLatin1 char DO In ReadRawChar char END ASSERT In failed OR Chars lsAlphaLatin1 char BEC postcondition END ReadWord 273 10 Statische Klassenstrukturen Erg nzen 10 3 5 Analogie 274 PROCEDURE ReadNonword BEGIN ASSERT In failed amp Chars lsAlphaLatin1 char BEC precondition In ReadRawChar char WHILE In failed amp Chars lsAlphaLatin1 char DO In ReadRawChar char END ASSERT In failed OR Chars IsAlphaLatin1 char BEC postcondition END ReadNonword Die Prozeduren sind jetzt in einer Fassung in der sie den Einga betext entlang seiner syntaktischen Struktur lesen d h erken nen Sie bearbeiten den Eingabetext aber noch nicht Die urspr ngliche Aufgabe ist W rter aus einem Text zu filtern Da Nichtw rter nicht zu bear
423. nneeennnnennnnn 11 Bild 1 8 Benutzer und Kommandos ccccccceseceesssssesscceessseceseseesseeseees 13 Bild 1 9 Modelle und Rollen uneeaeesennseeseneennnnnennnnnnnnnnennnnnen 14 Bild 2 1 Formaler Parameter ccccccccccccsscccsssssesscecsssssesssesscsssseeessesesess 23 Bild 2 2 Parameter bergabe bei Eingabeparameter une 24 Bild 2 3 Parameter bergabe bei Ausgabeparameter nun 24 Bild 2 4 Rechte und Zugriffskontrolle eneennnnesnenenen 26 Bild 2 5 Typbindung und Typpr fung neeeeneenenn 28 Bild 2 6 Kunden Lieferanten Modell mit Bedingungen 30 Bild 2 7 Klasse und Objekt u uusue anne 37 Bild 3 1 F nf Ebenen der Softwareentwicklung ueeneeeee 41 xix Abbildungsverzeichnis 25 2 05 XX Bild 3 2 Entwicklungszyklus esenenessnenenenenenenenenen nenn 46 Bild 4 1 Grundstruktur eines speicherprogrammierten Rechners 53 Bild 4 2 Hauptspeicher 0 02 2 2s alba 54 Bild 4 3 Register und Speicher issuri naih ii 55 Bild 4 4 Mensch Programm Rechner ueeeneeenne 57 Bild 4 5 F nf Aspekte von Programmiersprachen unenseenee 57 Bild 4 6 Transformation eines Programms ca aioa A 61 Bild 4 7 Syntaxdiagramm zu einem Kaffeeautomaten une 63 Bild 4 8 Syntaxdiagramme Zu Namen anere series senseeeaeeaarens es 67 Bild 4 9 Schnittstelle und Implementationen nnneeeee 78 Bild5 1 Bl
424. nnennee 20 2 2 1 Vereinbarung sisii vst has iiion ea 20 22 2 Auf esa ean ea ehana raaraa i laians 21 22 9 Ausdr cke anori aaa 22 2 2 4 Parameter bergabe 0 eee eee 23 2 3 Syntax und Semantik eeeeennnnnnenenenenenen 25 2 3 1 Recht und Zugriffskontrolle oc 25 2 3 2 Typbindung und Typpr fung un 27 2 4 Spezifikation durch Vertrag oo cece eee 28 2 4 1 Ein Kaffeeautomat nennennenneee 29 24 2 Ein Sch lter 2 u 2 2 er 32 2 4 3 Eine Menge enii ni E AS 33 244 Noch ein Kaffeeautomat enenee 34 2 5 Mehrere Kaffeeautomaten ccccccscescesseecesseeeseseesees 36 2 6 Zusammenfassung ueeenennnnenenenenenenenenen nenn 38 xi Inhaltsverzeichnis xii 2 7 Literaturhinweise anerkannte 39 2 8 Ubungen een taet sit adc sule tenth a te seuss a e duct ROEA 39 Softwareentwicklung unseeenssnenenennnenenennnnnnnnn 41 Sly F nf Ebenen 2 rasen 41 IT x Zerlegung age 44 3 1 2 Spezifikation iiser apaiia aisia 44 3 1 3 Ehtw rf enaena Narann ect ai 45 3 1 4 Implementierung eennnnennnee 45 3 15 TeSt pe even eine Rare 45 3 2 Softwarequalitatsmerkmale nneenee 47 32 1 Funktionale Qualita tsmerkmale 47 32 2 Strukturelle Qualit tsmerkmale 48 3 2 3 Leistungsmerkmale eunnneeneee 49 3 3 Zusammenfassung ueeseennnnnenenenennenenenen nenn 50 34 TLiteraturhinweise u nenenessensasnne
425. nnung von Schnittstelle und Implementation 118 DEFINITION N Kafeesutomat WAR Preis INTEGER auber_Betrieb BOOLEAN Bingenommener_Betrag INTEGER gesammeker_Betrag NTEGER PROCEDURE Geld_einnehmen Betrag INTEGER PROCEDURE Geld_zurockgeben PROCEDURE Katfee_ausgepen PROCEDURE inibalisieren neuer Preis NTEGER END N Kaffeeautomat Die automatisch erzeugte Schnittstelle Bild 6 4 hnelt dem Pro gramm 6 1 sehr was nicht verwundert denn das Modul ist ja noch nicht vollst ndig implementiert Die Unterschiede sind Das Schl sselwort MODULE ist durch DEFINITION ersetzt Nur ffentliche Merkmale sind angezeigt private nicht Im Beispiel fehlen private Merkmale Bei Prozeduren erscheinen nur die K pfe nicht die R mpfe Kommentare und Exportmarken sind entfernt Schreib schutz Exportmarken bleiben erhalten Die Merkmale sind alphabetisch sortiert Alle Gro buchsta ben kommen vor allen Kleinbuchstaben Kunden k nnen diese Schnittstelle benutzen Hier zeigt sich wie n tzlich das Trennen von Schnittstelle und Implementation ist Sobald die Schnittstelle eines Lieferantenmoduls bereitsteht k nnen Entwickler arbeitsteilig parallel weiterarbeiten einer programmiert ein Kundenmodul das die Lieferantenschnitt stelle benutzt ein anderer implementiert den Lieferanten pas send zu dessen Schnittstelle Ist der Lieferant fertiggestellt wird er neu bersetzt
426. nt Pascal Component Pascal ist eine modulare objekt und komponen tenorientierte Programmiersprache in der Entwicklungslinie der von Niklaus Wirth entworfenen Programmiersprachen Pascal Modula und Oberon Wirth und Hanspeter M ssenb ck erwei terten Oberon zu Oberon 2 die Firma Oberon microsystems Inc entwickelte daraus Component Pascal Eine vollst ndige und exakte Beschreibung der Sprache der Component Pascal Language Report ist im Anhang A abge druckt Wir stellen hier die wesentlichen Merkmale von Compo nent Pascal vor deren Kenntnis wir f r die folgenden Kapitel voraussetzen Einzelne Konstrukte von Component Pascal f h ren wir dort ein wo wir sie zur L sung einer Aufgabe brauchen Programmstruktur Die Grundeinheit in Component Pascal ist das Modul Component Pascal Programm Menge von Modulen 73 4 Programmiersprachen 74 Wir haben durch den Kaffeeautomaten und die Spezifikations sprache Cleo bereits eine Vorstellung von einem Modul In Component Pascal ist ein Modul eine logische Programmeinheit eine bersetzungseinheit eine Ladeeinheit Je nach Sichtweise besteht ein Modul aus einer Schnittstelle und einer Implementation einer Menge zusammengeh riger Daten und Algorithmen einem Modulkopf einem Vereinbarungsteil einem Initiali sierungsteil und einem Finalisierungsteil Die Schnittstelle eines Cleo Moduls k nnen wir nach einfachen Leitlinien in die Schnittstelle eines C
427. nt Pascal ist das Modul auch eine Ladeeinheit Module werden bei Bedarf dynamisch gebunden und geladen Die Sprachumgebung stellt dazu einen dynamischen Bindela der zur Verf gung Bei Bedarf meint den Zeitpunkt zu dem ein Benutzer ein Kommando eines Kommandomoduls eingibt Damit das Kommando ausgef hrt werden kann muss das Kommando modul geladen sein Zuvor m ssen die vom Kommandomo dul gebrauchten Module geladen sein und das Kommando modul muss an seine Lieferanten gebunden sein damit es sie benutzen kann Dynamisch meint dass das Binden und Laden erfolgt nach dem bereits andere Kommandos ausgef hrt und Module geladen wurden Unmittelbar nach dem Laden eines Moduls werden die Anwei sungen seines Initialisierungsteils einmal ausgef hrt Sie die nen dazu die Variablen des Moduls zu initialisieren und die Modulinvarianten herzustellen Ein Modul ist erst nach seiner Initialisierung benutzbar Damit der Initialisierungsteil eines Moduls Lieferanten benutzen kann m ssen diese vorher initia lisiert sein Die Reihenfolge der Initialisierung schlie t Zyklen in der Brauchtrelation der Module aus Module bleiben so lange im Speicher bis sie explizit z B durch Eingabe eines Entladekommandos entladen werden Unmittel bar vor dem Entladen eines Moduls werden die Anweisungen seines Finalisierungsteils einmal ausgef hrt Damit k nnen Ressourcen des Betriebssystems freigegeben werden die das Modul w hrend seiner Benutz
428. nteressierende Teil der Schnittstelle von XYplane ist DEFINITION XYplane CONST draw 1 erase 0 PROCEDURE Clear PROCEDURE Dot x y mode INTEGER PROCEDURE IsDot x y INTEGER BOOLEAN PROCEDURE Open END XYplane Open ffnet ein neues Fenster mit einer wei en kartesischen Fl che der Gr e 0 255 x 0 255 und dem Titel XYplane Der Punkt 0 0 ist links unten Clear IsDot und Dot stellen die Vorbedingung dass Open wenig stens einmal aufgerufen wurde Clear l scht alle Punkte im zuletzt ge ffneten XYplane Fen ster d h zeichnet sie wei 8 2 3 2 Programm 8 9 Grafikausgabemodul reduziert 1 I gt 82 Zeichen z hlen IsDot x y zeigt an ob der Punkt x y schwarz ist Dot x y draw bzw Dot x y erase zeichnet den Punkt x y schwarz bzw wei sofern er innerhalb der Fl che liegt als Nachbedingung gilt IsDot x y bzw IsDot x y Implementation Eine Folge von Punkten bildet eine Linie Hier ist eine partielle Implementation von GraphUtilities MODULE Graphutilities IMPORT XYplane CONST maxXP 256 maxYP 256 PROCEDURE OpenNew Open a new window with a rectangular drawing area of size 0 maxXP 1 X 0 maxYP 1 1 BEGIN XYplane Open END OpenNew PROCEDURE Draw VerticalLine x y INTEGER Draw a vertical line of range 0 y at position x Precondition OpenNew must have been called before 1 V
429. ntifiers are predeclared their meaning is defined in the indicated sections ABS 10 3 INTEGER 6 1 ANYPTR 6 1 FALSE 6 1 ANYREC 6 1 LEN 10 3 ASH 10 3 LONG 10 3 ASSERT 10 3 LONGINT 6 1 BITS 10 3 MAX 10 3 BOOLEAN 6 1 MIN 10 3 BYTE 6 1 NEW 10 3 CAP 10 3 ODD 10 3 CHAR 6 1 ORD 10 3 CHR 10 3 REAL 6 1 DEC 10 3 SET 6 1 ENTIER 10 3 SHORT 10 3 EXCL 10 3 SHORTCHAR 6 1 HALT 10 3 SHORTINT 6 1 INC 10 3 SHORTREAL 6 1 INCL 10 3 SIZE 10 3 INF 6 1 TRUE 6 1 5 Constant Declarations A constant declaration associates an identifier with a constant value ConstantDeclaration IdentDef ConstExpression ConstExpression Expression A constant expression is an expression that can be evaluated by a mere textual scan without actually executing the program Its operands are constants Ch 8 or predeclared functions Ch 10 3 that can be evaluated at compile time Examples of constant declarations are N 100 A Component Pascal Language Report limit 2 N 1 fullSet MIN SET MAX SET 6 Type Declarations A data type determines the set of values which variables of that type may assume and the operators that are applicable A type declaration associates an identifier with a type In the case of structured types arrays and records it also defines the structure of variables of this type A structured type cannot contain itself TypeDeclaration IdentDef Ty
430. ntik Der pragmatische Hintergrund ist dass wir die mathemati sche Infixnotation gewohnt sind Eiffel erlaubt alternativ oder zus tzlich zur funktionalen Notation eine semantisch quivalente Infixnotation mit Operatorsymbolen C erlaubt das berladen von Operatoren wobei es die Operanden ber ladener Operatoren statisch bindet Das berladen von Operatoren ist kein objektorientiertes Konzept seine Semantik unterscheidet sich von der Definition und Redefinition klassengebundener vererbbarer Ope rationen mit dynamischer Bindung Deshalb ist das berladen von Operatoren ungeeignet um damit unseren objektorientierten Entwurf zu implementieren Wir stellen nun die Schnittstellen der Konzeptklassen vor ihre Semantik beschreiben wir danach DEFINITION BasisGenerals TYPE Any POINTER TO AnyDesc AnyDesc ABSTRACT RECORD IN source AnyDesc Clone Any NEW ABSTRACT VAR target AnyDesc Copy IN source AnyDesc NEW ABSTRACT Attribut Programm 12 2 Konzeptklassen modul 12 1 Polymorphe Mengenklasse f r geordnete Elemente IN a AnyDesc Equal IN b AnyDesc BOOLEAN NEW ABSTRACT VAR target AnyDesc InitDefault NEW EMPTY VAR target AnyDesc InitRandom NEW ABSTRACT VAR a AnyDesc Swap VAR b AnyDesc NEW IN a AnyDesc Unequal IN b AnyDesc BOOLEAN NEW IN a AnyDesc Write NEW EMPTY END PartComparable POINTER TO PartComparableDesc PartComparableDesc ABSTRACT RECORD AnyDe
431. nvariantClass a b lt a ASSERT alb LessEqual a BEC invariantClass Zufall Seicht oder tief kopieren 12 1 Polymorphe Mengenklasse f r geordnete Elemente a b lt a ASSERT alb LessEqual a BEC invariantClass a lt b lt gt a b b ASSERT a LessEqual b aUb Equal b BEC invariantClass a lt b lt gt a b a ASSERT a LessEqual b alb Equal a BEC invariantClass Consistency Rules a b a a b d SetDifference a alb ASSERT aDb Equal d BEC invariantClass a b a b b a a b d SetUnion aSb alb ASSERT aUb Equal d BEC invariantClass END Do Commands Initialization and Finalization Same as for ContainersStrings see S 352 ff END ContainersSetsOfComparable Die Nummern in der folgenden Liste entsprechen den Num mern bei den Symbolen in Programm 12 6 1 Eine Vorw rtsvereinbarung forward declaration einer Proze dur ist erforderlich wenn ein Aufruf der Prozedur im Quell text vor ihrer eigentlichen Vereinbarung erscheint 2 InitRandom initialisiert den Empfanger mit einer zufalligen Anzahl zuf lliger String Objekte Wie in Programm 12 4 wird InitRandom benutzt um objekt bergreifende Invarianten bei zufalligen Objekten zu priifen 3 Dieses Copy kopiert tief aber nicht ganz tief Das Duplikat Set Objekt gleicht strukturell dem Original da der Pr or deralgorithmus der Baumprozedur den Originalb
432. nzer Zahlen Die sortierte Reihung enth lt dieselben Werte wie vorher aber an anderen Stellen unter anderen Indizes Eine Prozedur Sort die dies leistet stellt das Modul MathVectorsOfInteger bereit Reihungen mit Zahlen als Elementtyp entsprechen Vektoren der Mathematik F r Vektoren gibt es eine eigene Arithmetik man kann Vektoren aber nicht nur addieren sondern auch f r geo metrische und statistische Berechnungen nutzen So liegt es nahe all diese Vektoroperationen in einem wiederverwendba ren Modul zusammenzufassen Verschiedene Arten von Zahlen f hren zu verschiedenen Arten von Vektoren Die Spezifikation eines Vektormoduls kann von der Zahlenart abstrahieren ja sogar nicht nur Zahlen sondern allgemeinere Elemente betrachten Die in Programm 8 6 vorge stellte vertragliche Spezifikation des Vektormoduls ist gene risch d h sie l sst den konkreten Elementtyp der Reihung m g lichst offen und setzt allgemeine Platzhaltertypen an Stellen wo der Elementtyp vorkommt Da manche Operationen vom Ele menttyp gewisse Eigenschaften fordern benutzt die Spezifika tion mehrere Platzhalter Hier interessieren nur die Operationen des Vektormoduls die zur L sung der Zeichenh ufigkeitsaufgabe beitragen F r die Operation Sort gilt Eine Reihung ist nur sortierbar wenn f r den Elementtyp die Ordnungsrelationen lt gt lt gt definiert sind und f r je zwei Werte x y des Typs entweder x lt y x lt y oder x y gilt
433. oder LONGINT an dies verhindert hier berl ufe Die nderungen liefern das folgende Modul MODULE ContainersSetOflnteger IMPORT BEC BasisErrorConstants 6 3 Von Cleo zu Component Pascal Schritt 3 1 I gt Fazit Leitlinie 6 1 Konstanten vereinbarungen TYPE Integer BYTE or SHORTINT CONST shift MIN Integer sizeOflntegerSet MAX Integer MIN Integer 1 sizeOfSET MAX SET MIN SET 1 VAR set ARRAY sizeOflntegerSet DIV sizeOfSET OF SET PROCEDURE Has x Integer BOOLEAN BEGIN RETURN x shift MOD sizeOfSET IN set x shift DIV sizeOfSET END Has PROCEDURE Put x Integer BEGIN INCL set x shift DIV sizeOfSET x shift MOD sizeOfSET ASSERT Has x BEC postcondSupplierOk END Put PROCEDURE Remove x Integer BEGIN EXCL set x shift DIV sizeOfSET x shift MOD sizeOfSET ASSERT Has x BEC postcondSupplierOk END Remove BEGIN ASSERT sizeOflntegerSet MOD sizeOfSET 0 BEC invariantModulelmpl END ContainersSetOflnteger Der Typ Integer muss exportiert werden weil er als Parametertyp exportierter Prozeduren vorkommt siehe 1 9 Programm 6 7 ist nur durch ndern der Typvereinbarung sowohl f r BYTE als auch SHORTINT verwendbar weil es folgende Leitlinien zur Sicherheit Lesbarkeit und nderbarkeit von Pro grammen beachtet Vermeide literale Konstanten in Anweisungsteilen Vereinbare f r jede
434. oftware Entwicklung Carl Hanser Verlag M nchen Wien 1993 337 S Peter Rechenberg Was ist Informatik Eine allgemeinverst ndliche Einf hrung Carl Hanser Verlag M nchen Wien 1994 2 bearb u erweit Auflage 349 S Peter Rechenberg Gustav Pomberger Hrsg Informatik Handbuch Carl Hanser Verlag M nchen Wien 1999 2 aktual u erweit Auflage 1166 S Martin Reiser Niklaus Wirth Programmieren in Oberon Das neue Pascal Addison Wesley Deutschland GmbH Bonn 1994 343 S Clemens Szyperski Component Software Beyond Object Oriented Programming Addison Wesley Longman Ltd Harlow 1998 411 S Kim Walden Jean Marc Nerson Seamless Object Oriented Software Architecture Analysis and Design of Reliable Systems Prentice Hall International UK Ltd Hertfordshire 1995 438 S Niklaus Wirth Algorithmen und Datenstrukturen mit Modula 2 B G Teubner Stuttgart 1996 5 Auflage 299 S Niklaus Wirth Grundlagen und Techniken des Compilerbaus Addison Wesley Deutschland GmbH Bonn 1996 195 S Derek Andrews Programming and Programming Languages In Mark Woodman Hrsg Programming Language Choice Practice and Experience International Thomson Computer Press London 1996 S 255 276 Friedrich L Bauer Wer erfand den Neumann schen Rechner Informatik Spektrum Band 21 Heft 2 April 1998 S 84 88 413 B Literaturverzeichnis Elektronische Quellen 414 37 A Ae A SES Christiane F
435. olution DIV second END Do Dieses Do leitet einen Aufruf weiter an secretary action Do das dynamisch gebunden wird Das Feld count registriert die Anzahl der Aufrufe Da Services DoLater fiir nur einen Aufruf im Hinter grund sorgt wird es von Do erneut aufgerufen Den n chsten Aufrufzeitpunkt bestimmt Do so Das Zeitintervall nextTime von der von UtilitiesRepeater angebo tenen Zeiteinheit Millisekunden in die von Services erwartete Zeiteinheit Ticks umrechnen 303 11 Dynamische Objektstrukturen 11 2 2 Bild 11 7 Anker bei leerer Liste 304 aus dem Zeitintervall einen absoluten zuk nftigen Zeit punkt berechnen Dynamische Objektstruktur Liste Bild 11 6 enth lt eine Aggregation mit Selbstbezug auf die Secre tary Klasse Sie erscheint in der Typvereinbarung TYPE Secretary POINTER TO RECORD Services Action next Secretary END als Zeiger next der sich auf ein Objekt der Klasse Secretary bezieht die gerade definiert wird Solche Selbstbez ge sind nur mit Zeigern m glich Dem statischen Selbstbezug entspricht zur Laufzeit der Bezug eines Objekts auf ein anderes Objekt dessel ben Typs So kann man mit Zeigern dynamische Objektstruktu ren realisieren Die Elemente der Struktur sind Objekte die Struktur ergibt sich aus der Verzeigerung der Objekte Dynamisch bedeutet dass die Struktur zur Laufzeit ver nder lich ist Objekte kommen in die Struktur und verlassen sie wieder Utilit
436. omat geladen und initialisiert wird dann 1Kaffeeautomat_DialogBox und die Dialog box ge ffnet wird Bild 7 15 erg nzt die bereits in den Bildern 1 9 S 14 und 7 5 dargestellten Beziehungen D Benutzer interagiert Benutzungsoberfl che Kommandoaufruf Dialogbox l dt benutzt Funktionsmodul Kommandomodul Die Dialogbox Bild 7 14 verh lt sich im Wesentlichen wie das Aufrufmen Bild 7 6 Unterschiede im Detail sind Betrag und Preis brauchen zur Eingabe nicht selektiert sein statt Aufruf symbole sind Kommandokn pfe anzuklicken Meldungen benutzt 173 7 Ein und Ausgabe Fazit 7 4 174 erscheinen statt im Log Fenster im zweitletzten Textfeld Tippen wir beispielsweise in der Dialogbox in das Feld Betrag eine 5 und klicken auf den Knopf Geld einnehmen so erscheint die Meldung Bitte dr cken Sie zuerst auf initialisieren Mit dem Kommandomodul Programm 7 4 und der Dialogbox Bild 7 14 haben wir eine robuste und ansprechende grafische Benutzungsoberfl che realisiert die die Anforderungen von S 163 erf llt Verglichen mit der sequenziellen Ein Ausgabe von Pro gramm 7 3 ist f r die Dialogbox etwas weniger zu program mieren aber mehr am Dialogboxlayout zu editieren Die Dialogbox l sst den Benutzer jederzeit jeden Komman doknopf anklicken Akzeptiert der Kaffeeautomat den Kom mandoaufruf nicht so erh lt der Benutzer einen Hinweis Den letzten Aspekt empfinden wir als
437. ommandomodul 153 7 Ein und Ausgabe Entwurf der Kommandoschnittstel le 7 2 1 Bild 7 6 Aufrufmen zu Kaffeeautomat mit Ein Ausgabe 154 Schnittstelle des Kommandomoduls 1 1Kaffeeautomat_EinAusgabe Sie orientiert sich syntaktisch an I1 Kaffeeautomat ndert jedoch die Semantik Zu jeder Aktion von 11Kaffeeautomat bietet 11 Kaffeeautomat_EinAusgabe ein gleichnamiges Kommando 1Kaffeeautomat_EinAusgabe hat keine Abfragen nur Komman dos Statt Abfragen gibt es ein Kommando Zustand_anzeigen das die Abfragewerte von I1Kaffeeautomat ausgibt iKaffeeautomat_EinAusgabe toleriert jede Benutzereingabe Kommandos stellen keine Vorbedingungen sondern pr fen ob vom Benutzer eingegebene Auftr ge und Werte verwend bar sind falls nicht geben sie erl uternde Meldungen aus Die Kommandos von 1Kaffeeautomat_EinAusgabe k nnten diesel ben Parameter haben wie die Aktionen von I1Kaffeeautomat da der Kommandointerpreter diese akzeptiert Wir nutzen jedoch hier eine allgemeinere Technik Die Kommandos sind parame terlos in ihrem Anweisungsteil lesen sie Werte mit speziellen Eingabeoperationen ein Wir gehen den Weg von der Benutzungsoberfl che von Bild 7 6 zur Implementation Benutzungsoberfl che Kaffecauvtomat_Findurgabe Preis 2 IKafesautomat_Ein usgabe initialisieren 0 TKaleeautomat _Eireausgeie Zusland_anzeigen Belrag 1Kafeeautormat_EinAusgabe Geld_einnehmen 10 IKafeeautornat_Ein usga
438. ommandomodul ist allerdings nur noch im Zusammen wirken mit einer entsprechenden Dialogbox robust ber die Kommandokn pfe der Dialogbox werden die Kommandos nur gerufen wenn die Schaltfl chen aktiv sind Die Kommandos bleiben aber direkt aufrufbar unabh ngig von der Dialogbox und dem Zustand ihrer Kommandokn pfe F r Aufrufe an der Dialogbox vorbei sind die Kommandos nicht mehr robust Implementation Setzen wir den Entwurf direkt in die Implementation um 7 4 Kaffeeautomat mit bewachter Dialogbox Programm 7 5 MODULE 1 1Kaffeeautomat_DBbewacht Kommandomodul f r IMPORT bewachte Dialogbox Dialog zu Kaffeeautomat Strings KA I1Kaffeeautomat VAR Anzeige RECORD auBer_Betrieb BOOLEAN Betrag eingenommener_Betrag Preis gesammelter_Betrag INTEGER Meldung ARRAY 60 OF CHAR END PROCEDURE Zustand_ bertragen BEGIN Anzeige au er_Betrieb KA au er_Betrieb Anzeige eingenommener_Betrag KA eingenommener_Betrag Anzeige Preis KA Preis Anzeige gesammelter_Betrag KA gesammelter_Betrag Dialog Update Anzeige END Zustand_ bertragen Wachter und Kommandos PROCEDURE initialisieren_bewachen VAR par Dialog Par BEGIN par disabled Anzeige Preis lt 0 END initialisieren_bewachen PROCEDURE initialisieren BEGIN KA initialisieren Anzeige Preis Anzeige Meldung Neuer Preis akzeptiert Zustand_ bertragen END initialisieren PROCEDURE Geld_einne
439. omparableDesc SetMin IN b c BasisGenerals ComparableDesc NEW IN a StringDesc ChecklInvariants NEW EXTENSIBLE IN source StringDesc Clone String EXTENSIBLE 1 I gt Attribut Fabrik Programm 12 4 Klassenmodul f r Zeichenketten 12 1 Polymorphe Mengenklasse f r geordnete Elemente VAR target StringDesc Copy IN source BasisGenerals AnyDesc EXTENSIBLE IN a StringDesc Equal IN b BasisGenerals AnyDesc BOOLEAN EXTENSIBLE VAR target StringDesc InitDefault EXTENSIBLE VAR target StringDesc InitRandom EXTENSIBLE IN a StringDesc LessEqual IN b BasisGenerals PartComparableDesc BOOLEAN EXTENSIBLE IN a StringDesc Write EXTENSIBLE END PROCEDURE New IN aString ARRAY OF CHAR String PROCEDURE StartTestInvariants PROCEDURE StopTestinvariants PROCEDURE TestInvariantsOnce PROCEDURE TestinvariantsUntilBreak END ContainersStrings Die Nummern in der folgenden Liste entsprechen den Num mern bei den Symbolen in Programm 12 3 1 Die Klasse String erh lt das Klassenattribut EXTENSIBLE damit ihre Prozedur Write redefinierbar ist Das Prozedurattribut EXTENSIBLE sorgt f r Redefinierbarkeit einzelner Prozeduren 2 Die Fabrikfunktion New liefert ein neues String Objekt das eine Kopie einer gegebenen Zeichenkette aString enth lt Wegen ihres Seiteneffekts darf sie nicht in Zusicherungen aufgerufen werden MODULE ContainersStrings Interface Descriptio
440. omponent Pascal Schritt 2 In diesem Abschnitt f hren wir zun chst einige Konzepte von Component Pascal ein um damit Spezifikation durch Vertrag in Component Pascal zu realisieren Den Transformationsschritt Bild 6 1 2 zeigen wir wieder am Beispiel des Kaffeeautomaten Zusicherungen Component Pascal bietet keine Konstrukte die direkt den PRE POST und INVARIANTS Konstrukten von Cleo entsprechen Den noch ist eine Transformation der Spezifikation m glich indem man die Bedingungen als Zusicherungen formuliert Eine Zusicherung assertion ist eine Aussage ber den Zustand eines Programmablaufs Sie kann berall stehen wo eine Anweisung stehen kann Erreicht ein Programmablauf eine Zusicherung so muss diese erf llt sein sonst ist das Programm fehlerhaft 119 6 Vom Spezifizieren zum Implementieren Standardprozedur und Codeexpansion berladen von Namen 6 2 2 120 Component Pascal bietet Zusicherungen in Form einer gew hn lichen Standardprozedur in zwei Varianten ASSERT b BOOLEAN ASSERT b BOOLEAN n INTEGER Exkurs Eine Standardprozedur ist als fester Bestandteil der Sprache implizit vereinbart vordeklariert predeclared H ufiger Grund daf r ist Effizienz Da der bersetzer die Standardprozeduren kennt kann er an Aufrufstellen den Code der Prozedur direkt einsetzen expandieren und so f r effiziente Implementationen sorgen Die Standardprozedu ren von Component Pascal sind in Anhang A
441. omponent Pascal Moduls transformieren was wir am Beispiel des Kaffeeautomaten in Kapitel 6 zeigen Als Implementationssprache zeichnet sich Component Pascal durch die F higkeit aus Daten und Algorith men zu beschreiben W hrend ein Cleo Modul die Struktur MODULE Modulname QUERIES Vereinbarungen von Abfragen ACTIONS Vereinbarungen von Aktionen INVARIANTS Invarianten END Modulname besitzt finden wir bei Component Pascal Modulen die Struktur MODULE Modulname IMPORT Liste der benutzten Module CONST Vereinbarungen von Konstanten TYPE Vereinbarungen von Typen VAR Vereinbarungen von Variablen PROCEDURE Vereinbarungen von Prozeduren BEGIN initiale Anweisungen CLOSE finale Anweisungen END Modulname 4 7 2 4 7 Die Implementationssprache Component Pascal Die erste EBNF Regel der Syntax von Component Pascal lautet Module MODULE ident ImportList DeclSeq BEGIN StatementSeq CLOSE StatementSeq END ident Merkmale Ein Component Pascal Modul setzt sich im Wesentlichen aus Vereinbarungen von Merkmalen zusammen Eine Vereinbarung legt den Namen und die Art eines Merkmals fest Ein Merkmal ist eine Konstante ein Typ eine Variable oder eine Prozedur Eine Prozedur ist eine gew hnliche Prozedur oder eine Funkti onsprozedur Der Oberbegriff Merkmal kommt im Component Pascal Language Report nicht vor hilft aber oft Aufz hlungen vermeiden Die Begriffe seien hier kurz beschrieben Eine Konstante
442. on Schnittstellen von Modulen und Klassen bestehen aus Dien sten die sich in Abfragen und Aktionen teilen Eine Schnittstelle kann durch Vertr ge aus Vor und Nachbe dingungen und Invarianten spezifiziert werden Eine Implementation definiert zu einer gegebenen Schnitt stelle die Daten die den spezifizierten Zustand repr sentie ren die Speicherstruktur der Daten und die Algorithmen zu den Diensten Unterschiede Der wesentliche Unterschied zwischen Modulen und Klassen ist Klassen sind Typen Module nicht Von Klassen kann es beliebig viele Exemplare geben die Objekte hei en Von einem Modul gibt es nur ein Exemplar Wir beziehen nun die Ebenen der Implementation und des Pro grammablaufs ein 9 Objektorientiertes Programmieren Bild 9 6 Modul verschiedene bersetzungszeit Zeitpunkte Laufzeit Modul Ein Modul existiert als Einzelexemplar und zwar zur ber setzungszeit als Quelltext zur Laufzeit als geladener Code und Daten im Speicher Ein Modul ist i A eine abstrakte Datenstruktur Eine Modulimplementation ist vollst ndig d h ein imple mentiertes Modul ist ausf hrbar Bild 9 7 Klasse und Objekt bersetzungszeit verschiedene Zeitpunkte Objekt O Objekt O Objekt O3 Objekt 0 K K K K Laufzeit Klasse Eine Klasse ist ein Typ Sie existiert zur Ubersetzungszeit als Quelltext Zur Laufzeit liegen nur Typinformationen tiber die Objekte von Klassen vor Andere Sichtweise
443. on eingenommener_Betrag OLD eingenommener_Betrag Betrag BEGIN ASSERT au er_Betrieb BEC precondSupplierOk ASSERT Betrag gt 0 BEC precondPar1 Nonnegative Anweisungsteil END Geld_einnehmen Eine kleine syntaktische nderung betrifft den Negationsoperator den Component Pascal durch das Zeichen darstellt Allgemein gilt die Transformation ACTIONS Aktionsname formale Parameter PRE Vorbedingung POST Nachbedingung PROCEDURE Aktionsname formale Parameter BEGIN ASSERT Vorbedingung BEC precondition ASSERT Nachbedingung BEC postcondition END Aktionsname Invarianten Auch Cleo Invarianten werden in Zusicherungen transformiert Zus tzlich ist jedoch eine gew hnliche parameterlose private Prozedur zu schreiben deren Anweisungsteil aus diesen Zusi cherungen besteht Wir nennen sie Checkinvariants das Check im Namen dr ckt als Verb den Zweck der Prozedur aus Im Bei spiel werden wegen des Typwechsels von NATURAL nach INTEGER aus zwei vier Invarianten Cleo Component Pascal Cleo Component Pascal 6 2 Von Cleo zu Component Pascal Schritt 2 INVARIANTS Preis gt 0 gesammelter_Betrag MOD Preis 0 PROCEDURE Checklnvariants BEGIN ASSERT eingenommener_Betrag gt 0 BEC invariantModule ASSERT Preis gt 0 BEC invariantModule ASSERT gesammelter_Betrag gt 0 BEC invariantModule ASSERT gesammelter_Betrag MOD Preis 0 BEC invariantModule
444. on der Sprache Die Anzahl ausgef hrter Elementaroperationen ist nicht bei jedem Ablauf desselben Algorithmus gleich sie kann mal gr er mal kleiner sein abh ngig von den Eingabedaten Beim Suchalgorithmus h ngt die Anzahl von den Parametern ab von der L nge der Reihung der Anordnung der Elementwerte dem gesuchten Wert Anstelle exakter Zahlen ermittelt man Sch tz werte f r den besten schlechtesten und durchschnittlichen Fall Wir begn gen uns damit die Durchschnittswerte zu bestimmen Bei allen Varianten h ngt die Anzahl der Schleifen durchl ufe von der Reihungsl nge n LEN x ab Im besten Fall wird die Schleife 0 mal im schlechtesten n mal und im Mittel n 2 mal durchlaufen F r Variante 1 erhalten wir die Absch t zung 2 n 1 2 2 n 2 1 1 2 n 5 Tabelle 8 5 Vergleich der Suchalgorithmen 8 2 5 Alternative 8 2 Zeichen z hlen Zu beachten ist dass die Zuweisung result i zwar im Schleifen rumpf steht aber h chstens einmal ausgef hrt wird weil danach die Schleifenabbruchbedingung result notFound erf llt ist Variante 2 liefert die Absch tzung 1 n 1 2 2 n 2 1 1 2 3 2 n 5 Variante 3 ergibt 3 nt1 2 1 n 2 1 2 1 n 1 lt n 7 Komplexit tsma zahl Variante Statisch Dynamisch GB 5 2n 5 3 2 n 5 n 7 Tabelle 8 5 stellt die Ma zahlen der drei Algorithmen zusam men Bei der Anzahl der durchschn
445. onentenger st zu arbeiten Das Ger st erledigt Teilaufgaben um die sich der Programmierer sonst selbst kiim mern muss 75 Kaffeeautomat mit meldender Dialogbox Die bewachte Dialogbox l sst den Benutzer jederzeit auch nega tive Zahlen in die Felder Betrag und Preis eintragen 182 Bild 7 19 Bewachte Dialogbox Schwachstellen Leitlinie 7 5 Benutzbarkeit 7 5 1 Programm 7 6 Wachter fur Betragsfelder Zustand eines S teuerelements 7 5 Kaffeeautomat mit meldender Dialogbox Kaffeeautomat bewacht Iolx Wozu sollte die Dialogbox Werte anzeigen die von keinem Kommando akzeptiert werden Die bewachte Dialogbox zeigt die Felder Betrag eingenommener Betrag und gesammelter Betrag an obwohl der Kaffeeautomat au er Betrieb ist Es ist sinnlos einen Betrag einzugeben solange der Kaffeeautomat nicht initialisiert ist Formulieren wir diese M ngel um zu einer positiven Leitlinie Eine gute Benutzungsoberfl che l sst den Benutzer stets alles Sinnvolle tun und visualisiert durch Ausblenden was gerade sinnlos ist W chter f r Felder Den zweiten Mangel beheben wir schnell indem wir den Fel dern Betrag eingenommener Betrag und gesammelter Betrag und ihren Beschriftungen einen gemeinsamen W chter zuordnen so wie wir im vorigem Abschnitt jedem Kommando einen W chter zugeordnet haben PROCEDURE Anzeige_bewachen VAR par Dialog Par BEGIN par disabled KA auBer_Betrieb END Anzeige_bewac
446. ontroller Entwurfsmuster Kardinalit t 12 2 Entwurfsmuster erfahren wie ein Programm Eingabetext vom aktiven Fenster erhalten und Ausgabetext in ein neues Fenster lenken kann Dabei lernen wir zwei wichtige Entwurfsmuster kennen das Model View Controller und das Carrier Rider Mapper Muster Model View Controller Das Model View Controller Entwurfsmuster MVC wurde zusammen mit der objektorientierten Programmiersprache Smalltalk am Xerox Palo Alto Research Center entwickelt Heute liegt es vielen grafischen Benutzungsoberfl chen zugrunde MVC steht f r drei abstrakte Klassen die zusammenwirkend Daten speichern visualisieren und manipulieren F r Datenar ten wie Text Bild Tabelle oder Dialogbox spezialisiert man die abstrakten Klassen und konkretisiert das Entwurfsmuster zu einem Entwurf Controller Ein Modell ist ein Beh lter f r Daten Zum Beispiel Text besteht nicht nur aus einer Zeichenfolge sondern zu jedem Zeichen geh ren auch Attribute wie Typ Stil Gr e und Farbe der Schrift Ein Textmodell speichert und verwaltet diese Daten Eine Sicht view dient dazu den Inhalt eines Modells visuell in einem Fenster auf dem Bildschirm darzustellen Zum Bei spiel zeigt eine Sicht eines Textmodells die Zeichen des Tex tes ihren Attributen entsprechend an Ein Interaktor controller kontrolliert die Interaktion zwi schen dem Benutzer und der Sicht Er interpretiert Eingaben des Benutzers wie Mausklick o
447. onzeptklassen nennen Diesen Begriff ordnen wir in eine Klassifikation von Klassen ein Eine abstrakte Klasse dient der Erweiterung sie bietet eine offene Schnittstelle die von Kunden benutzt und von Erwei terungen implementiert werden kann hat aber keine voll st ndige Implementation m Eine Konzeptklasse ist eine abstrakte Klasse die ein bestimmtes Konzept eine Idee mit einer strukturierten Ansammlung von Diensten realisiert m Eine Schnittstellenklasse ist eine abstrakte Klasse mit einer vollst ndigen Schnittstelle die nur implementiert 337 12 Vom Entwerfen zum Testen Beispiele Wartbarkeit Bild 12 3 Hierarchie allgemeiner Konzeptklassen 338 aber nicht um weitere Dienste erg nzt werden muss um sinnvoll nutzbar zu sein Eine konkrete Klasse ist vollst ndig implementiert von ihr k nnen Objekte erzeugt werden m Eine Implementationsklasse ist eine konkrete Klasse die eine Schnittstellenklasse erweitert indem sie alle geerbten Dienste implementiert ohne neue Dienste zu definieren In diesem Sinn sind ContainersSetsOfString Action S 267 UtilitiesRe peater Action S 290 und Services Action S 301 Schnittstellenklas sen I1WordChecker WordWriter TestSetsOfString Test und UtilitiesRepea ter Secretary sind jeweils zugeordnete Implementationsklassen PartComparable und Comparable sind Konzept aber keine Schnitt stellenklassen da ihre Erweiterungen meist weitere Dienste definieren Mit
448. ordnen dessen Stellung angibt ob das Element in der Menge enthalten ist oder nicht Reihungen Zum Zeichentyp CHAR geh ren 216 verschiedene Werte Eine Zeichenmenge implementieren wir freilich nicht mit 216 Exem plaren der Bauart des Programms 6 4 die Programmiersprache erlaubt es 216 boolesche Variablen auf einmal zu vereinbaren Der Datentyp daf r ist eine Reihung ARRAY 216 OF BOOLEAN Die Schl sselw rter ARRAY und OF kennzeichnen einen generi schen Typ aus dem erst bei einer Vereinbarung ein konkreter Typ konstruiert wird Zu dieser Konstruktion ist S tandardfunktionen Explizite Typanpassung Reihungsvariable 6 3 Von Cleo zu Component Pascal Schritt 3 die Anzahl der Elemente z B 2 6 und der Typ der Elemente z B BOOLEAN anzugeben ARRAY ElementanzahlOF Elementtyp Eine Reihung besteht also aus einer Anzahl gleicher Elemente Die Elemente sind in einer Folge angeordnet und von 0 bis Ele mentanzahl 1 durchnummeriert Elementanzahl muss ein konstanter ganzzahliger positiver Ausdruck sein und hei t die L nge der Reihung Sie legt die Gr e des ben tigten Speicherplatzes zur bersetzungszeit fest Elementtyp kann ein beliebiger Typ sein der Elementtyp der Reihung Die Zahlendarstellung 2 ist lexikalisch nicht vorgesehen Wir k nnten den berechneten Wert 65536 hinschreiben doch bei solch langen Zahlen schleichen sich leicht Tippfehler ein Eine Alternative w re die Hexadezimaldarstellung d
449. ored in an array of character type There are no pre declared identifiers for string types because there is no need to use them in a declaration Constant strings which consist solely of characters in the range 0X 0FFX and strings stored in an array of SHORTCHAR are of type Shortstring all others are of type String 7 Variable Declarations Variable declarations introduce variables by defining an identi fier and a data type for them VariableDeclaration IdentList Type Record and pointer variables have both a static type the type with which they are declared simply called their type and a dynamic type the type of their value at run time For pointers and variable parameters of record type the dynamic type may be an extension of their static type The static type determines which fields of a record are accessible The dynamic type is used to call methods see 10 2 Examples of variable declarations refer to examples in Ch 6 i j k INTEGER x y REAL p q BOOLEAN s SET F Function a ARRAY 100 OF REAL 387 A Component Pascal Language Report 388 w ARRAY 16 OF RECORD name ARRAY 32 OF CHAR count INTEGER END t c Tree 8 Expressions Expressions are constructs denoting rules of computation whereby constants and current values of variables are combined to compute other values by the application of operators and function procedures Expressions consist of operands and opera tors Parentheses may be
450. orkommen kann Nach dem bersetzen des Moduls betrachten wir seine Codeda tei siehe 5 3 4 S 96 und stellen fest dass es ein Speicherver schwender ist Es belegt 65536 Bytes Datenspeicher 137 6 Vom Spezifizieren zum Implementieren 6 3 5 3 Mengentyp Operationen Entwurf Programm 6 6 Zeichenmenge optimiert 138 Ein boolescher Schalter kostet ein Byte Speicherplatz alle Schalter zusammen also 216 Bytes Der belegte Speicherplatz ist unabh ngig davon ob die Menge wenige oder viele Elemente enth lt Suchen wir also nach einer Implementation die weniger Spei cherplatz braucht Verbessern Component Pascal hat einen Grundtyp SET f r Mengen Die Grundmenge ist auf das Intervall 0 31 beschr nkt Der prag matische Grund daf r ist dass die Mengenoperationen effizient mit einzelnen Maschinenbefehlen implementierbar sind F r jedes Mengenelement ist ein Bit vorgesehen sodass die Menge selbst 4 Bytes Speicherplatz belegt Mit den Vereinbarungen s SET und i INTEGER mit MIN SET lt i lt MAX SET schreiben sich die Mengenoperationen in Compo nent Pascal so i IN s bedeutet Istie s INCL s i bedeutet Ersetze s durch s U i EXCL s i bedeutet Ersetze s durch s i Gr ere Mengen sind leicht als Reihungen mit dem Elementtyp SET zu konstruieren Mit den Konstantenvereinbarungen CONST sizeOfCHARset ORD MAX CHAR ORD MIN CHAR 1 sizeOfSET MAX SET MIN SET
451. ormieren das physische Modell in ein Softwaremodell Programm genannt das einen Kaffeeautomaten simuliert d h nachbildet Die grundlegende Modellierungseinheit ist das Modul es gilt Softwaremodell Programm Menge von Modulen Module hneln Automaten das Zustands Verhaltens Modell von Bild 1 2 passt auch zu ihnen Bevor wir uns mit Eigenschaf ten eines Moduls im Einzelnen befassen kl ren wir die wichtig ste Beziehung zwischen Modulen Dazu dient das Kunden Lie feranten Modell eine Metapher aus dem Gesch ftsleben Module erscheinen hier in zwei Rollen benutzt Dienste een Ze bietet Dienste Jedes Modul ist ein Lieferant supplier indem es potenziel len Kunden Dienste service bietet 1 1 Ein Kaffeeautomat Ein Modul kann ein Kunde client eines Lieferanten sein indem es dessen Dienste benutzt Modulare Software ist durch die Kunde Lieferant Beziehung oder Benutzungsbeziehung uses relation zwischen Modulen strukturiert Kundenmodule benutzen Lieferantenmodule bzw deren Dienste Den Kaffeeautomaten von Bild 1 1 k nnen wir als Lieferanten betrachten dessen Dienste seine Anzeigen und Druckkn pfe sind Zum Modellieren verwenden wir eine formale textuelle Notation und transformieren den Automaten gem folgender Regeln und Schritte in ein Programm 1 Ein Modul hat einen Namen identifier Seine Kunden brau chen diesen Namen um das Modul von anderen Modulen unterscheiden zu k nnen Wir wan
452. ozedur mit einem Zeiger als Ein oder Ein Ausgabepa rameter die auf diesen zugreift sollte als Vorbedingung fordern dass er nicht NIL ist z B 279 10 Statische Klassenstrukturen Effizienz oder Sicherheit Implementation 10 3 6 Programm 10 7 W rterpr fer als Modul 280 PROCEDURE Do word POINTER TO ARRAY OF CHAR BEGIN ASSERT word NIL BEC precondition bearbeite word END Do Hier ist word ein formaler Wertparameter Bei einem Aufruf mit einer Zeigervariable actualWord als aktuellem Parameter etwa Do actualWord wird als Wert ein Bezug auf eine Zeichenkette nicht die Zei chenkette oder NIL bergeben Wertparameter von Zeigertypen funktionieren also hnlich wie Referenzparameter arbeiten aber mit expliziten ver nderlichen Bez gen Ein Aufruf Do NIL f hrt zwar ohne und mit Vorbedingung zu einem Trap aber die Vorbedingung dokumentiert die Anforderung besser erkennt im Ablauf einen Fehler fr her und liefert die Fehlermeldung Vorbedingung verletzt die den Aufrufer von Do statt Do oder eine von Do gerufene Prozedur zum Verursacher des Fehlers erkl rt Die Mengenklasse von ContainersSetsOfString benutzt Referenz semantik denn die Elemente der Mengen sind Zeiger auf Zei chenketten Referenzsemantik vermeidet beim Einf gen das Kopieren der Zeichenketten ein Effizienzaspekt Die L sung birgt aber ein Problem Die Zeichenketten in einer Menge k n nen ber Aliaszeige
453. p NATURAL haben wir Freiraum zum Nachdenken tiber wesentliche Bedingungen gewonnen Mehrere Kaffeeautomaten Ist der Kaffeeautomat au er Betrieb so sucht der Kaffees chtige einen anderen Auf jeder Etage stehen Ger te gleicher Bauart nach derselben Blaupause gefertigt Sollen wir als Softwareent wickler eine Simulation mit vielen Kaffeeautomaten program mieren so wollen wir nicht jeden Automaten einzeln als Modul modellieren das w re zu aufw ndig Es gen gt eine Beschrei bung ein Muster dem alle Kaffeeautomaten folgen Sie geh ren zu einer Klasse Zur Darstellung einer Klasse verwenden wir ein Klassenkonstrukt das mit dem Modulkonstrukt fast iden tisch ist nur das Schl sselwort MODULE ist durch CLASS ersetzt CLASS Kaffeeautomat Inhalt wie bei Programm 2 8 END Kaffeeautomat Die Klasse Kaffeeautomat ist ein Vorbild f r Automaten mit glei chen Diensten Sie ist auch eine ideelle Zusammenfassung sol cher Automaten eine Abstraktion Ein konkreter Automat ist ein Objekt dieser Klasse Die Objekte die wir brauchen verein baren wir und unterscheiden sie voneinander indem wir jedem Objekt einen frei gew hlten Namen geben und die Klasse zuordnen der es angeh ren soll Moduleigenschaft Kunden Lieferanten Modell Bild 2 7 Klasse und Objekt 2 5 Mehrere Kaffeeautomaten KA1 Kaffeeautomat KA2 Kaffeeautomat Solche Vereinbarungen k nnen in Kundenmodulen und klas sen als Abfragen oder Parameter s
454. parent des Zielknotens hei t jeder Knoten Startknoten von h chstens zwei Kanten ist deren Zielknoten linkes left und rechtes Kind right child des Startknotens hei en und jeder Zielknoten einer Kante entweder linkes oder rechtes Kind seines Vaters ist Ein Weg path ist eine Folge von Kanten bei der der Zielknoten der einen Kante der Startknoten der n chsten ist Jeder Knoten eines Baums ist auf genau einem Weg von der Wurzel erreich bar Die Wurzel ist von keinem anderen Knoten des Baums erreichbar Ein Knoten der nicht Startknoten ist hei t ein Blatt leaf des Baums Jeder Knoten eines Baums ist Wurzel eines Teilbaums subtree Damit ist ein Bin rbaum entweder leer oder hat eine Wurzel und einen linken und einen rechten Teil baum Diese kurze exakte Beschreibung ist rekursiv und eignet sich als Definition Der Begriff den sie definiert Baum erscheint selbst in der Definition Teilbaum Rekursion ist uns bei der EBNF Definition der Cleo Syntax Formel 4 6 S 73 und der Definition der Brauchtrelation S 79 begegnet B ume sind rekursive Strukturen Rekursiv formuliert ist ein Baumknoten ein Vater wenn er einen nicht leeren Teilbaum hat sonst ist er ein Blatt Ein Baumknoten B ist von einem Knoten A desselben Baums erreichbar wenn B ein Knoten eines Teilbaums von A ist Listen sind B ume bei denen nur linke oder nur rechte Teil b ume vorkommen Daher sind Listen auch rekursive Struktu
455. pe Type Qualident ArrayType RecordType PointerType ProcedureType Examples Table ARRAY N OF REAL Tree POINTER TO Node Node EXTENSIBLE RECORD key INTEGER left right Tree END CenterTree POINTER TO CenterNode CenterNode RECORD Node width INTEGER subnode Tree END Object POINTER TO ABSTRACT RECORD END Function PROCEDURE x INTEGER INTEGER 6 1 Basic Types The basic types are denoted by predeclared identifiers The asso ciated operators are defined in 8 2 and the predeclared function procedures in 10 3 The values of the given basic types are the fol lowing 1 BOOLEAN the truth values TRUE and FALSE 2 SHORTCHAR the characters of the Latin 1 character set OX OFFX 3 CHAR the characters of the Unicode character set OX OFFFFX 4 BYTE the integers between MIN BYTE and MAX BYTE 5 SHORTINT the integers between MIN SHORTINT and MAX SHORTINT 383 A Component Pascal Language Report 384 6 INTEGER the integers between MIN INTEGER and MAX INTEGER 7 LONGINT the integers between MIN LONGINT and MAX LONGINT 8 SHORTREAL the real numbers between MIN SHORTREAL and MAX SHORTREAL the value INF 9 REAL the real numbers between MIN REAL and MAX REAL the value INF 10 SET the sets of integers between 0 and MAX SET Types 4 to 7 are integer types types 8 and 9 are real types and together they are called numeric types They form a hierarchy the larg
456. peOut als Initialisierungs prozedur set WipeOut Transformationsschema B ndeln wir das Vorgehen beim Mengenbeispiel zu einer allge meinen Transformation einer Cleo Klasse in eine Component Pascal Klasse CLASS Klassenname TYPES Vereinbarungen von Typen QUERIES konstante Abfrage Typ variable Abfrage Typ berechnete Abfrage formale Parameter Typ ACTIONS Aktionsname formale Parameter 245 9 Objektorientiertes Programmieren Component Pascal 9 5 246 INVARIANTS Bedingung END Klassenname Ein neuer Aspekt sind die Invarianten die beim Mengenbeispiel nicht vorkommen Die Transformation verl uft hnlich wie bei Modulen Zu Modulinvarianten definieren wir eine Prozedur Checkinvariants zu Klasseninvarianten eine typgebundene Proze dur Checklnvariants MODULE SubsystemnameKlassennames CONST konstante Abfrage Wert TYPE Vereinbarungen von Typen Klassenname POINTER TO KlassennameDesc KlassennameDesc RECORD variable Abfrage Typ END PROCEDURE IN this KlassennameDesc berechnete Abfrage formale Parameter Typ NEW BEGIN END berechnete Abfrage PROCEDURE IN this KlassennameDesc ChecklInvariants NEW BEGIN ASSERT Bedingung END ChecklInvariants PROCEDURE VAR this KlassennameDesc Aktionsname formale Parameter NEW BEGIN END Aktionsname END SubsystemnameKlassennames Von der abstrakten Datenstruktur zum abstrakten Datentyp Vor uns lie
457. pen erlaubt weil es manchmal n tig ist von einem Eingabeparame ter eine Kopie zu erstellen in solchen F llen ist Wert bergabe bequemer als explizites Kopieren Ein Unterschied zwischen den beiden Eingabearten ist dass ein formaler Wertparameter Ziel von Zuweisungen und aktueller Ein und Ausgabepara meter sein kann ein IN Referenzparameter nicht Entwurf Nach diesen Vorbereitungen entwerfen wir die verbesserte Dia logbox zum Kaffeeautomaten W chter Der Programmierer vereinbart zu jedem Kommando eine Proze dur die W chter guard hei t und dazu dient den Zustand des Kommandoknopfs zwischen klickbar und nicht klickbar umzu schalten Aufgerufen wird der W chter vom BlackBox Ger st immer dann wenn der Kommandoknopf einen Zustandswech sel brauchen k nnte Ein W chter hat die Signatur PROCEDURE SomeCommandGuard VAR par Dialog Par Der Name SomeCommandGuard ist frei w hlbar setzt sich aber gem unserer Programmierkonvention aus dem Namen des zu bewachenden Kommandos und Guard zusammen Der W chter muss exportiert sein damit BlackBox ihn aufrufen kann Der Parameter Dialog Par ist ein vom Modul Dialog exportierter Verbundtyp der als Typ des Ein Ausgabeparameters par erscheint Von seinen Feldern interessiert hier nur der boolesche Schalter disabled den der W chter einstellen muss Es bedeutet par disabled der Kommandoknopf ist nicht klickbar par disabled der Kommandoknopf ist klickbar Wann soll
458. pper Abbilder 429 C Sachwortverzeichnis 430 Maschine 11 12 52 56 57 abstrakte 133 Maskenmodus 172 Material 216 243 Mathematik 18 23 59 129 134 206 300 313 339 347 Maus 13 53 95 Mausklick 94 363 Mauszeiger 363 MAX 135 190 Medium 12 Melder 183 185 Meldung 48 104 154 156 164 168 173 177 185 291 memory Speicher Menge 8 20 33 134 137 139 147 235 245 262 266 274 280 285 286 288 290 296 297 304 312 313 318 319 321 326 333 335 337 354 355 361 376 geordnete 316 Grundmenge 134 138 leere 139 197 199 245 319 Teilmenge 134 von ganzen Zahlen 140 von Zeichen 20 34 187 190 195 197 199 201 von Zeichenketten 298 312 317 327 zuf llige 300 Mengenlehre 8 337 Mensch Maschine Interaktion 11 14 53 57 151 152 Men 13 92 94 98 103 149 151 170 172 Aufrufmenti 149 154 173 185 262 292 textuelles 185 Mentibefehl 93 96 99 100 102 104 105 152 158 169 170 172 184 204 224 Meniidefinition 88 98 Meniileiste 172 Men oberfl che 92 110 Merkmal 2 5 75 109 110 112 118 163 170 175 202 204 244 252 268 283 285 288 exportiertes 108 112 118 144 145 240 283 importiertes 79 lokales 79 161 162 ffentliches exportiertes privates 112 118 143 Methode 38 Entwurfsmethode 45 Spezifikationsmethode 28 39 44 293 334 Testmethode 46 293 MIN 135 190 mistake Fehler Denkfehler M
459. pro duzieren soll die Steuerungssoftware zu erstellen Dagegen ist die L sung ein System ausfiihrbarer Programme stets ein for males Konstrukt voller konkreter Details Auf dem Weg von der Aufgabe zur L sung bewegt sich der Entwickler im Spannungs feld abstrahieren konkretisieren und verbalisieren formalisie ren Damit Menschen die Aufgabe und die L sung verstehen k nnen m ssen sie abstrahieren d h Wesentliches von Unwesentlichem tren nen und verbalisieren d h bisher Unausgesprochenes dokumentie ren Um der L sung eine rechnergem e Gestalt zu geben vollzieht der Entwickler Schritte des Formalisierens und Konkretisierens Fr her versuchte man zun chst viele Einzelheiten zur Aufga benl sung zusammenzutragen bevor man diese in eine dem Rechner angepasste Form brachte In Bild 3 1 ist dies der Weg links nach unten und dann nach rechts Man beschritt ihn weil geeignete Techniken der Modellierung fehlten die Maschinen sprache des Rechners war das prim re Mittel zur Formalisie rung Dieser Weg ist aber ung nstig zeitaufw ndig und fehler tr chtig weil ein Rechner formale Konkretisierungsschritte schneller und zuverl ssiger als ein Mensch durchf hren kann Heute konzentrieren sich professionelle Softwareentwickler auf kreative Arbeitsschritte und versuchen zuerst eine Aufgabe auf hohem Abstraktionsniveau zu formalisieren Ist dies gelungen setzen sie den Rechner als Werkzeug f r
460. procedure without parameters must have an empty parameter list It must be called by a func tion designator whose actual parameter list is empty too The result type of a procedure can be neither a record nor an array FormalParameters FPSection FPSection Type FPSection VAR IN OUT ident ident Type Let f be the formal parameter and a the corresponding actual parameter If f is an open array then a must be array compatible to f and the lengths of f are taken from a Otherwise a must be parameter compatible to f see App A Examples of procedure declarations PROCEDURE Readint OUT x INTEGER VAR i INTEGER ch CHAR BEGIN i 0 Read ch WHILE 0 lt ch amp ch lt 9 DO i 10 i ORD ch ORD 0 Read ch END XSi END Readlnt A Component Pascal Language Report PROCEDURE Writelnt x INTEGER 0 lt x lt 100000 VAR i INTEGER buf ARRAY 5 OF INTEGER BEGIN i 0 REPEAT bufli x MOD 10 x x DIV 10 INC i UNTIL x 0 REPEAT DEC i Write CHR buf i ORD 0 UNTIL i 0 END Writelnt PROCEDURE WriteString IN s ARRAY OF CHAR VAR i INTEGER BEGIN i 0 WHILE i lt LEN s amp s i 0X DO Write sfi INC i END END WriteString PROCEDURE Log2 x INTEGER INTEGER VAR y INTEGER assume x gt 0 BEGIN y 0 WHILE x gt 1 DO x x DIV 2 INC y END RETURN y END Log2 PROCEDURE Modify VAR n Node BEGIN I
461. qual PROCEDURE IN a SetDesc Equal IN b BG AnyDesc BOOLEAN Deep equal BEGIN WITH b SetDesc DO RETURN Equal a root b root ELSE HALT BEC precondPars TypeOk END END Equal Initializations and Settings PROCEDURE VAR target SetDesc InitDefault BEGIN target WipeOut END InitDefault gt 3 3 gt 12 1 Polymorphe Mengenklasse f r geordnete Elemente PROCEDURE VAR target SetDesc InitRandom CONST numberOfltems 100 VAR i INTEGER item ContainersStrings String BEGIN target WipeOut FOR i 1 TO MathRandom Uniforml 0 numberOfltems DO NEW item item InitRandom target Put item END END InitRandom PROCEDURE Copy VAR target Node source Node PROCEDURE Preorder tree Node BEGIN IF tree NIL THEN Put target tree item Preorder tree left Preorder tree right END END Preorder BEGIN IF target source THEN target NIL Preorder source END END Copy PROCEDURE VAR target SetDesc Copy IN source BG AnyDesc Deep copy BEGIN WITH source SetDesc DO Copy target root source root target Checklnvariants ASSERT target Equal source BEC postcondReceiverOk ELSE HALT BEC precondParsTypeOk END END Copy Output PROCEDURE Write tree Node BEGIN IF tree NIL THEN Write tree left tree item Write Write tree right END END Write 357 12 Vom Entwerfen zum Tes
462. r Implementation von Programm 6 6 aus da der Speicherbedarf im Gigabytebereich liegen wiirde Die L sung soll aber so allgemein sein dass sie mit einer mini malen Anderung sowohl fiir BYTE als auch SHORTINT giiltig ist Untersuchen wir also was an Programm 6 6 zu ndern ist 1 Die Typanpassung vom Mengenelementtyp CHAR zum Indextyp INTEGER mit ORD passt nicht 2 Ein ganzzahliger Mengenelementtyp erlaubt negative Zah len aber ein Index muss nichtnegativ sein Um BYTE und SHORTINT von vornherein gleich zu behandeln f hren wir einen neuen Typnamen Integer ein wahlweise mit einer der beiden Typvereinbarungen TYPE Integer BYTE TYPE Integer SHORTINT Zu 1 Aus ORD x wird einfach x weil der Elementtyp Integer direkt als Indextyp verwendbar ist Zu 2 Der Wert des Mengenelements x ist zu verschieben um einen nichtnegativen Index zu erhalten Betrachten wir zuerst was mit dem kleinsten Wert geschehen soll MIN Integer 0 Daraus konstruieren wir die Abbildung MIN Integer MIN Integer MIN Integer x x MIN Integer MAX Integer MAX Integer MIN Integer Mathematisch einfach aber im Programm problematisch denn der Ergebniswert unter der Verschiebung um MIN Integer liegt fiir nichtnegative x nicht im Wertebereich von Integer Ein Uber lauf k nnte das Ergebnis verf lschen Zum Gl ck passt Compo nent Pascal Ganzzahlwerte vor arithmetischen Operationen implizit an INTEGER
463. r Start and Stop Design Description Extension of Services Action is hidden IMPORT Services StdLog XYplane BasisASCIl BEC BasisErrorConstants CONST millisecond 1 Time units second 1000 millisecond minute 60 second hour 60 minute day 24 hour time Unit millisecond nextTimeDefault millisecond nameLength 50 TYPE Time INTEGER Invariant Time gt 0 Unit milliseconds Action POINTER TO ABSTRACT RECORD END Secretary POINTER TO RECORD Services Action action Action Set by Start called by Secretary Do name ARRAY nameLength OF CHAR Set by Start used by Stop Show count INTEGER Used by Start Secretary Do Stop next Secretary END VAR nextTime Time Set by SetNextTime used by Secretary Do first Secretary Registry for Action objects Uses Secretary action as key Definition of Procedure bound to Action PROCEDURE action Action Do NEW ABSTRACT 308 1 I gt 11 2 Testwerkzeugmodul Redefinition of Procedure bound to Services Action PROCEDURE secretary Secretary Do BEGIN ASSERT secretary action NIL BEC invariantClass secretary action Do ING secretary count Services DoLater secretary Services Ticks nextTime Services resolution DIV second END Do Settings PROCEDURE SetNextTime newNextTime Time I Set nextTime to newNextTim
464. r au erhalb der Menge manipuliert werden Dadurch k nnen Invarianten der Menge verletzt werden d h die L sung ist nicht modulsicher Zeiger sind durch Adressen implementiert Die Speicherzelle einer Zeigervariable enth lt die Adresse einer dynamischen Variable genauer ihre Anfangsadresse oder den Wert NIL Implementation Wir vervollst ndigen nun die Entwurfsteile des Moduls f r Rechtschreibpr fungen zu einer Implementation und erl utern danach offene Details MODULE I1WordChecker IMPORT Chars BasisChars BEC BasisErrorConstants Sets ContainersSetsOfString In Utilitiesin Out UtilitiesOut 10 3 W rter sammeln Rechtschreibung pr fen gt 1 I 1 I gt 4 i gt CONST maxWordLength 100 TYPE WordWriterDesc RECORD Sets ActionDesc END VAR dictionary foundWords unknownWords Sets SetDesc Redefinition of Procedure bound to Sets Action PROCEDURE VAR wordWriter WordWriterDesc Do word Sets Element BEGIN ASSERT word NIL BEC precondition Out WriteString word Out WriteLn END Do Parser PROCEDURE ReadText OUT words Sets SetDesc Read words discard nonwords from the input stream until its end is reached Put read words into parameter words I VAR char Chars Char Last read character word Sets Element Last read word PROCEDURE ReadWord VAR i INTEGER BEGIN ASSERT In failed amp Chars
465. r erschweren die Aufgabe des vorigen Abschnitts Zeichen sind nicht nur zu sammeln sondern es ist zu z hlen wie oft sie vorkommen Ein Programm soll die Zeichen eines Eingabetextes einlesen und die H ufigkeit jedes Zeichens registrieren und in Tabellen und Diagrammen ausgeben die nach a Zeichen und b H ufigkeit geordnet sind Um die Aufgabe schnell brauchbar zu l sen suchen wir wieder schon w hrend des Entwurfs in der Modulbibliothek nach ferti gen n tzlichen kleinen Werkzeugen Entwurf Die Aufgabe ist wie die vorige klein genug f r ein einzelnes Kommando Do des Moduls I1CharCounter Der Kommandoaufruf CharCounter Do liefert auf den Component Pascal Language Report siehe Anhang A angewandt die Ausgabe H ufigkeit 2 H ufigkeit nach Zeichen geordnet Oe 153 mk a pichen nach H ufigkeit geordnet 8865 e 5948 3164 r 434 2515 i 29407 a 1 Die textuelle Ausgabe in Bild 8 1 ist gek rzt die grafische in Bild 8 2 verkleinert Bild 8 2 Grafische Ausgabe von 11C harC ounter Do Ein Ausgabe Registrierung 8 2 Zeichen z hlen Der funktionale Teil ist wieder so klein dass wir ihn nicht modular trennen sondern nur innerhalb des Algorithmus von Do Zur Abwechslung verwenden wir f r die textuelle Ein Ausgabe die Module Utilitiesin und UtilitiesOut f r die grafische Ausgabe das Modul Graphutilities Um die H ufigkeit der Zeichen zu z hlen steht uns kein Modul zur Verf gung Wir defin
466. r leere Tassen dann aber voll Geleert wird eine Tasse schluckweise mit wievielen Schlucken berlassen wir dem Trinkenden Das Zustandsdiagramm Bild 9 2 stellt das Verhalten einer Tasse mit dem Vertrag von Programm 9 1 gra fisch dar leeren leeren Wie in 2 4 2 S 32 erw hnt kann man aus einem Zustandsdia gramm systematisch eine vertragliche Spezifikation herleiten Pr fen wir also ob Bild 9 2 und Programm 9 1 in diesem Sinn quivalent sind Die Aktion f llen kommt in Bild 9 2 nur bei einem bergang vor der Vorzustand ist leer der Nachzustand voll Mit der Gleichset 231 9 Objektorientiertes Programmieren Durchlaufen eines Zustandsdiagramms Formel 9 1 Zustandsfolge einer Tasse 232 zung Vorzustand Vorbedingung Nachzustand Nachbedin gung entspricht dies genau der Spezifikation von f llen in Pro gramm 9 1 leeren kommt bei vier berg ngen vor Der Menge der m gli chen Vorzust nde entspricht die Disjunktion der Vorbedingun gen voll OR teilvoll Da leer AND voll als Zustand ausgeschlossen ist ist dies gleichwertig mit der Vorbedingung NOT leer In der Nachbedingung erscheinen die Vor und die Nachzu st nde Zu jedem Vorzustand gibt es eine Nachbedingung die den Vorzustand implikativ mit den m glichen Nachzust nden verkn pft Im Beispiel ergibt sich die Nachbedingung OLD voll IMPLIES teilvoll OR leer OLD teilvoll IMPLIES teilvoll OR leer wobei die Zeilen mit den einzel
467. r nehmen hier an dass ContainersSetsOfString einen Dienst f r die Differenz zweier Mengen bietet mit seiner Implementation 10 3 W rter sammeln Rechtschreibung pr fen Gemeinsame Teilaufgabe Implementation der Kommandos 10 3 2 befassen wir uns in Abschnitt 11 3 Dieser Dienst ist eine an den Typ SetDesc gebundene Prozedur bei dessen Aufruf drei Men genobjekte beteiligt sind a SetDifference b c bedeutet soviel wie a b c Sowohl InitDictionary als auch Check lesen einen Text und f llen die gelesenen W rter in ein Mengenobjekt Diese Teilaufgabe dele gieren wir an eine Prozedur die nicht exportiert sein muss PROCEDURE ReadText OUT words ContainersSetsOfString SetDesc ReadText liest W rter vom Eingabetext und f gt sie in words ein bis das Ende des Eingabetextes erreicht ist Der Entwurf ist so weit gediehen dass wir die Kommandos InitDictionary und Check implementieren k nnen PROCEDURE lnitDictionary BEGIN dictionary WipeOut ReadText dictionary END InitDictionary PROCEDURE Check BEGIN foundWords WipeOut ReadText foundWords unknownWords SetDifference foundWords dictionary WriteUnknownWords END Check Einen gro en Teil der Arbeit leistet die Prozedur ReadText Sie ist so wichtig dass wir ihr den Abschnitt 10 3 4 widmen Doch zuvor implementieren wir die Ausgabekommandos indem wir unser Wissen ber das Erweitern von Klassen anwenden Abstrahieren von der Ausgabe D
468. r und Maschine H here Programmiersprachen dienen auch dem Zweck von der Darstellung der Daten und Algorithmen im Rechner zu abstra hieren damit der Programmierer sich auf das Modellieren der Aufgabe und ihrer L sung konzentrieren kann Arbeitsschritte und Werkzeuge Spezifikation amp Entwurf formulieren amp editieren Quellprogramm bersetzen amp binden ausf hrbarer Objektcode laden amp ausf hren Objektcode in Ausf hrung Wir k nnen nun die in 3 1 4 S 45 skizzierte Ebene der Imple mentierung mit einzelnen Arbeitsschritten durchqueren Vor jedem Schritt liegt das Programm in einer spezifischen Form als Zwischenprodukt oder in einem bestimmten Zustand vor Mit jedem Schritt f hren wir bestimmte T tigkeiten aus die ein wei E g 61 4 Programmiersprachen Zeitpunkt 62 teres Zwischenprodukt oder einen anderen Zustand des Pro gramms hervorbringen Entsprechende Werkzeuge unterst tzen die T tigkeiten siehe Bild 4 6 Wir gehen von einem Programm in Form einer Spezifikation und eines Entwurfs aus Der erste Schritt ist diese Idee mit den Mitteln der Implementationssprache als Quellprogramm zu for mulieren Als Werkzeug benutzen wir dazu einen Editor er erm glicht die interaktive Eingabe des Quelltextes Im zweiten Schritt wird das Quellprogramm in Objektcode transformiert Dieser Vorgang hei t bersetzen das dazu benutzte Werkzeug bers
469. ramm 205 214 216 421 C Sachwortverzeichnis 422 Dialogbox 13 88 89 91 92 149 163 165 174 176 178 180 181 184 186 226 262 363 364 bewachte 178 180 182 Defaultdialogbox 169 170 184 editierte 171 eines Men befehls 169 Inspekteurdialogbox 170 171 180 183 leere 184 meldende 184 Dialogsystem 12 152 Dienst 2 6 8 9 15 19 22 26 31 33 34 36 39 44 45 48 86 88 112 121 144 147 151 153 165 187 195 198 199 202 226 230 233 237 241 253 255 258 260 262 264 285 293 295 297 302 303 320 337 338 341 362 abstrakter 259 260 266 geerbter 259 338 implementierter 259 ffentlicher 25 86 parametrisierter 21 24 redefinierter 267 seiteneffektbehafteter 6 seiteneffektfreier 6 spezifizierter 227 Differenz 288 324 325 327 symmetrische 288 324 325 Digitaltechnik 53 directed graph Graph gerichteter disjunkt 288 Disjunktion 17 218 219 232 DIV 18 Dokument 43 53 87 89 92 98 103 110 149 172 191 aktives 93 Benutzungsdokument 48 interaktives 93 Men dokument 155 Ressourcendokument 171 zusammengesetztes 93 98 368 Dokumentation 89 93 95 97 112 339 Online Dokumentation 110 185 374 375 Dokumentsystem 98 dot notation Notation Punktnotation Drag amp Drop 98 Drag amp Pick 98 Drucker 13 53 Dualsystem 53 60 Durchlaufen einer Liste 306 312 314 eines Syntaxdiagramms 68 eines Zustandsdia
470. rammen 6 6 S 138 8 2 S 197 und 8 4 S 199 Programm 9 4 MODULE ContainersSetsOfChar Zeichenmenge als IMPORT Klasse in Modul BEC BasisErrorConstants CONST sizeOfCHARset ORD MAX CHAR ORD MIN CHAR 1 sizeOfSET MAX SET MIN SET 1 TYPE Element CHAR 1 oS Set POINTER TO SetDesc 2 IF SetDesc RECORD 3 set ARRAY sizeOfCHARset DIV sizeOfSET OF SET END 241 9 Objektorientiertes Programmieren gt 5 eS 6 IS 5 oS 242 PROCEDURE IN set SetDesc IsEmpty BOOLEAN NEW VAR result BOOLEAN i INTEGER BEGIN result set set 0 i 1 WHILE result amp i lt LEN set set DO result set set i INC i END RETURN result END IsEmpty PROCEDURE IN set SetDesc Has x Element BOOLEAN NEW BEGIN RETURN ORD x MOD sizeOfSET IN set set ORD x DIV sizeOfSET END Has PROCEDURE VAR set SetDesc Put x Element NEW BEGIN INCL set set ORD x DIV sizeOfSET ORD x MOD sizeOfSET ASSERT set Has x BEC postcondSupplierOk END Put PROCEDURE VAR set SetDesc Remove x Element NEW BEGIN EXCL set set ORD x DIV sizeOfSET ORD x MOD sizeOfSET ASSERT set Has x BEC postcondSupplierOk END Remove PROCEDURE VAR set SetDesc WipeOut NEW VAR i INTEGER BEGIN FOR i 0 TO LEN set set 1 DO set set i END ASSERT set lsEmpty BEC postcondSupplierOk END WipeOut BEGIN
471. re bound to UtilitiesRepeater Action PROCEDURE this TestInvariants Do VAR a b c aUb bUc aDb alb blc aSb d e f SetDesc BEGIN Choose random sets a InitRandom b InitRandom c InitRandom Initialize other sets aUb SetUnion a b bUc SetUnion b c aDb SetDifference a b alb SetIntersection a b blc SetIntersection b c aSb SetSymDifference a b Check set rules BG CheckPartComparablelnvariants a b c Idempotence Rules a a a d SetUnion a a ASSERT d Equal a BEC invariantClass a a a d Setintersection a a ASSERT d Equal a BEC invariantClass Association Rules a b c a b c d SetUnion aUb c e SetUnion a bUc ASSERT d Equal e BEC invariantClass a b c a b c d Setintersection alb c blc Setlntersection b c e Setintersection a blc ASSERT d Equal e BEC invariantClass Commutation Rules a b b a d SetUnion b a ASSERT aUb Equal d BEC invariantClass a b b a d Setintersection b a ASSERT alb Equal d BEC invariantClass a b b a d SetSymDifference b a ASSERT aSb Equal d BEC invariantClass 359 12 360 Vom Entwerfen zum Testen Neutral Element Rules a 0 a d SetUnion a emptySet ASSERT d Equal a BEC invariantClass a 0 a d SetDifference a emptySet ASSERT d Equal a BEC invariantClass Inverse Element
472. rn wir die Dialogbox im Layoutmo dus als Ressourcendokument im Rsrc Verzeichnis des Subsy stems im Beispiel unter 11 Rsrc Kaffeeautomat_DialogBox odc Dialogboxen lassen sich brigens wie andere Objekte kopieren und in Beh lterobjekte einbetten Interagiert ein Anwender mit einer Dialogbox so soll er ihr Lay out nicht ver ndern Dazu dient der Maskenmodus Der Ent wickler kann eine im Layoutmodus ge ffnete Dialogbox mit dem Men befehl Dev Mask Mode in den Maskenmodus bringen blicherweise ruft man aber ein Kommando des Standardmoduls StdCmds auf um die Dialogbox im Maskenmodus zu ffnen hier mit Aufrufsymbol amp StdCmds OpenAuxDialog I1 Rsrc Kaffeeautomat_DialogBox Kaffeeautomat Der erste Parameter ist der Pfadname der Datei die die Dialog box enth lt der zweite erscheint im Titel der ge ffneten Dialog box siehe Bild 7 14 Das Kommando kann man wie blich in einem Dokument einer Hyperverbindung oder einem Men der Men leiste unterbringen Bild 7 14 Dialogbox im Maskenmodus Bild 7 15 Benutzer Benutzungs oberflache und Module 7 3 Kaffeeautomat mit Dialogbox Katieeauto reat eingenommener Bereg O W ae gesammaeler 7 Bereg initialiseren Beim Offnen eines Dokuments das eine Dialogbox enth lt wer den die Module an die sie gebunden ist dynamisch geladen falls sie noch ungeladen sind Beispielsweise f hrt der obige Kommandoaufruf dazu dass zuerst 1Kaffeeaut
473. rns Die komponentenorientierte Softwareentwicklung stellt Wiederver wendbarkeit in den Mittelpunkt indem sie sich mit Techniken zum Erstellen wiederverwendbarer Komponenten befasst Leistungsmerkmale Die Leistung eines Motors misst man in Kilowatt wie misst man die Leistung von Software Keine leichte Frage doch spielen Beziehungen zwischen produzierten Daten Raum und Zeit eine Rolle Die Effizienz eines Softwareprodukts ist das Verh ltnis zwischen seiner Funktionalit t und dem Umfang der eingesetzten Betriebsmittel Ma e f r das Laufzeitverhalten einer Programmeinheit sind der Speicherbedarf und die Prozessorzeit die eine Ausf hrung der Programmeinheit beansprucht Pro gramme sollen Speicherplatz und Prozessorzeit gut zur Durch f hrung ihrer Aufgaben nutzen d h sparsam damit umgehen Zwar werden Speicher und Prozessoren durch den Preisverfall bei der Hardware immer billiger doch wird ein Anwender unter zwei funktional und qualitativ gleichwertigen Program 49 3 3 3 3 4 50 Softwareentwicklung men stets jenes vorziehen das weniger Speicher verschwendet und schneller lauft Optimieren bedeutet die Effizienz eines Programms zu erh hen ohne es funktional oder qualitiativ zu ndern Zwischen Speicherbedarf und Prozessorzeit gibt es oft einen Konflikt man kann meist nicht beides gleichzeitig optimieren Ein schneller Algorithmus kann mehr Speicher brauchen ein speichersparen
474. rpuffer 312 Taste 95 312 Abbruchtaste 195 Escape Taste 195 291 Tastendruck 363 Tastenkombination 95 194 195 Terminal 64 66 68 71 232 Test 41 45 46 50 104 106 169 195 216 287 291 295 301 320 340 354 362 Black Box Test 293 Dauertest 290 293 312 334 eines Funktionsmoduls 185 eines Moduls 151 Einzeltest 290 292 293 295 296 340 354 erfolgreicher 293 295 Funktionstest 293 partieller 294 randomisierter 294 295 334 340 374 Stresstest 294 Zufallstest 294 Tester 126 151 293 295 Testfall 46 294 295 zuf lliger 296 340 Testszenarium 287 296 312 341 342 Text 92 94 99 100 112 149 155 157 158 162 223 239 261 262 272 363 364 366 368 369 374 Ausgabetext 204 363 374 Dokumentationstext 96 Eingabetext 102 187 191 193 195 200 202 209 261 263 270 274 283 285 286 363 formatierter 185 Programmtext 22 25 112 201 Quelltext 56 84 90 94 102 104 106 108 112 152 238 244 293 295 361 selektierter 94 Titel einer Dialogbox 172 eines Fensters 204 214 369 trace Spur Trager 365 366 Transformation 14 19 22 34 45 112 113 115 116 119 122 124 147 148 198 eines Programmst cks 194 297 von Cleo in Component Pas cal 111 117 von Modellen 2 4 8 von Modul in Klasse 236 237 246 248 von Programmen 62 148 von Spezifikation in Imple mentation 126 229 245 246 249 289 transition Zustands ber
475. rs user des Automaten indem wir seine Anzeigen lesen und uns so ber seinen Zustand informieren links im Bild 1 1 Geld einwerfen Kn pfe dr cken und so seinen Zustand ver ndern rechts im Bild 1 1 1 Einf hrung Bild 1 2 Zustands Verhaltens Modell Modul Formel 1 1 Modulares S oftwaremodell Bild 1 3 Kunden Lieferanten Modell Dienst Der untere Teil in Bild 1 1 zeigt Merkmale des Automaten die nur dem Betriebspersonal zug nglich sind Initialisieren bedeu tet in einen Anfangszustand versetzen Verhalten Einwirkung Automat Auswirkung Aktion Reaktion Der Automat hat also einen Zustand state und ein Verhalten behaviour das von seinem Zustand und dem gedr ckten Knopf abh ngt Das Verhalten l sst sich als Ursache Wirkungs Bezie hung beschreiben Der Kaffeeautomat wird uns nur einen Kaf fee liefern wenn er betriebsbereit ist und wir gen gend Geld einwerfen Wir k nnen uns den Kaffeeautomaten vorstellen haben ihn gra fisch und verbal skizziert Freilich das physische Modell in Bild 1 1 scheint seltsam denn welcher Kaffeeautomat hat einen Druckknopf Geld einnehmen Normalerweise reicht es M n zen in den Schlitz zu stecken Bei manchen Automaten legt man Geld in einen Schieber und schiebt es ein Der Geldeinnah meknopf ist ein Modellelement das uns die folgende Arbeit erleichtert Denn jetzt schl pfen wir in die Rolle eines Software entwicklers developer und transf
476. ruck 8 1 1 3 Wieder verwendbarkeit 8 1 Zeichen sammeln NT 2000 als Task man kann ihn mit dem Task Manager been den Doch das ist hart denn eigentlich ist nur ein endlos schlei fender Kommandoablauf zu stoppen BlackBox reagiert manch mal wie gew nscht auf die Tastenkombination Strg Pause Hilft das nicht so f gen wir in den Schleifenrumpf den Kommando aufruf BasisTestUtilities StopOnBreak ein etwa WHILE DO BasisTestUtilities StopOnBreak END Dann beendet ein Tastendruck einen Ablauf der den Schleifen rumpf wiederholt mit einem Trap Als Abbruchtaste dient die Escape Taste Nachdem die Schleife gut getestet ist k nnen wir den Aufruf wieder herausnehmen Initialisierung Der erste Schritt des Grobentwurfs des Algorithmus von S 187 bleibt zu verfeinern Offenbar sind der Ein und der Ausgabe strom in der richtigen Reihenfolge zu initialisieren siehe S 162 In Open Out Open Setzen wir die Codest cke des Entwurfs zu einem ausf hrbaren Modul zusammen und testen dieses mit verschiedenen Eingabe texten so stellen wir fest dass die Ausgabe jedesmal gleich bleibt oder l nger wird auch bei k rzeren Texten Richtig der Zeichenmenge werden durch ContainersSetOfChar Put CHR i im Rumpf der Eingabeschleife S 189 immer nur Zeichen hinzu gef gt keine entfernt Eine schnelle Abhilfe ist im Rumpf der Ausgabeschleife S 193 die Zeichen wieder zu entfernen IF ContainersSetOfChar Has CHR i THE
477. rz Schleifen Den Schleifenrumpf bildet die zu wiederholende Anweisungsfolge Die WHILE Schleife ist eine Bedingungsschleife weil die Wie derholung von einer Bedingung gesteuert wird Sie ist eine kopfgesteuerte Schleife weil die Schleifenbedingung vor dem Rumpf steht und vor diesem ausgef hrt wird Die Bedingung bedeutet bei der WHILE Schleife eine Fortsetzungsbedingung weil der Rumpf wiederholt wird solange die Bedingung erf llt ist Das allgemeine Muster der WHILE Schleife lautet initialisierende Anweisungen WHILE Fortsetzungsbedingung DO zu wiederholende Anweisungen END Wozu dient die Anweisungsfolge vor der Schleife Die Bedin gung ist ein boolescher Ausdruck in dem mindestens eine Variable vorkommt deren Wert im Schleifenrumpf ver ndert wird Diese Variable muss schon beim ersten Auswerten der Bedingung einen g ltigen Wert besitzen diesen Wert erh lt die Variable durch eine initialisierende Anweisung vor der Schleife Im Entwurf 2 muss die Anweisung In Char c die ein Zeichen liest einmal vor der Schleife ausgef hrt werden damit das Pr fen von In Done sinnvoll ist und falls In Done erf llt ist die Anweisung ContainersSetOfChar Put c ein tats chlich gelesenes Zeichen zur Menge hinzuf gt 189 8 Strukturiertes und modulares Programmieren Semantik 8 1 1 2 Entwurf 1 des Ausgabeschritts Entwurf 2 des Ausgabeschritts 7N 190 Die Semantik der WHILE Anweisung l sst sich gut mit Zusic
478. s kein Leerzeichen steht Diese Regeln schlie en Mehrdeutigkeiten aus Nichtterminale Symbole Die Nichtterminale bestehen aus einer Folge von Buchstaben begin nend mit einem Gro buchstaben z B Unit Client QueryDeclaration Dadurch unterscheiden sie sich von Nichtterminalen der lexikalischen Ebene wie ident und number die mit einem Kleinbuchstaben beginnen und von Schl sselw rtern Das Startsymbol der Cleo Syntax ist Unit die erste Regel lautet Unit MODULE CLASS ident QUERIES Client QueryDeclaration ACTIONS Client ActionDeclaration INVARIANTS Expression END ident Ein einfachstes Wort dieser Sprache ist daher MODULE A END B Trotzdem ist dies kein Cleo Programm denn es gibt eine zus tz liche Vorschrift die nicht in der EBNF Syntax ausgedriickt ist Die Namen nach MODULE und END miissen gleich sein Solche Vorschriften die beschreiben in welchen Zusammenh ngen welche Namen auftreten d rfen hei en Kontextbedingungen Einfacherweise definiert man sie verbal nicht formal MODULE AENDA ist ein einfachstes freilich uninteressantes Cleo Programm Wir erg nzen von den berlesenen Ausdr cken die Schl sselw rter die optionalen Nichtterminale lassen wir noch weg MODULE A QUERIES ACTIONS INVARIANTS ENDA Auch dieses Cleo Programm ist noch zu nichts f hig es ist aber bereits ein Skelett an dem sich die Gestalt brauchbarer Cleo Programme abzeichnet Wir k nnten es durc
479. s ActionDesc END Test POINTER TO RECORD UtilitiesRepeater Action item Sets Element set ARRAY numberOfSets OF Sets SetDesc writer WriterDesc END VAR test Test Redefinition of Procedure bound to Sets Action PROCEDURE VAR writer WriterDesc Do item Sets Element BEGIN Out WriteString item Out WriteLn END Do Redefinition of Procedure bound to UtilitiesRepeater Action PROCEDURE this Test Do PROCEDURE N INTEGER BEGIN RETURN MathRandom Uniforml 0 LEN this set 1 END N gt 3 gt 5 I 11 1 Pr fling Testmodul und Testwerkzeug BEGIN CASE MathRandom Uniforml 1 12 OF 1 4 NEW this item MathRandom Uniforml 2 maxltemLength MathRandom GetString this item this set N Put this item 5 this set N Remove this item 6 this set N WipeOut 7 8 this set N SetUnion this set N this set N 9 this set N SetDifference this set N this set N 10 this set N SetIntersection this set N this set N 11 this set N SetSymDifference this set N this set N 12 IF this set N IsDisjoint this set N amp this set N lsEmpty THEN this set N ForAllDo this writer Out WriteLn END ELSE END END Do Factory PROCEDURE New Test VAR result Test index INTEGER BEGIN NEW result NEW result item MathR
480. s Kaffeeautomaten um eine weitere Eigenschaft der statischen Semantik Rechte an Diensten Recht und Zugriffskontrolle In Programm 2 1 sind einfach mit QUERIES bzw ACTIONS einge leitete Dienste etwa QUERIES eingenommener_Betrag INTEGER ACTIONS Geld_einnehmen IN Betrag INTEGER ffentlich public zug nglich d h jedes Modul kann sie als potenzieller Kunde benutzen Ein Modul kann aber auch Rechte right an seinen Diensten gezielt verschiedenen Kundengrup pen geben d h das Modul entscheidet welche Kunden welche 25 2 Spezifizieren Programm 2 4 Kaffeeautomat als Modul kontrollierend Bild 2 4 Rechte und Zugriffskontrolle 26 Dienste benutzen d rfen Zugriffsbeschr nkungen zeigen wir in QUERIES und ACTIONS Konstrukten mit FOR Konstrukten an QUERIES FOR Betriebspersonal gesammelter_Betrag INTEGER ACTIONS FOR Betriebspersonal initialisieren IN neuer_Preis INTEGER So darf nur der Kunde Betriebspersonal die Dienste gesammelter_Betrag und initialisieren benutzen Programm 2 1 nimmt damit folgende Gestalt an MODULE Kaffeeautomat QUERIES auBer_Betrieb BOOLEAN eingenommener_Betrag INTEGER Preis INTEGER QUERIES FOR Betriebspersonal gesammelter_Betrag INTEGER ACTIONS Geld_einnehmen IN Betrag INTEGER Kaffee_ausgeben Geld_zur ckgeben ACTIONS FOR Betriebspersonal initialisieren IN neuer_Preis INTEGER END Kaffeeautomat Kunde et Aufruf Lieferant hat Recht kontrolliert
481. s in 10 3 4 S 270 Literale Ein Literal stellt einen konstanten Wert direkt durch seine Gestalt dar Zu Literalen geh ren Zeichen Zeichenketten und Zahlen literal character string number Ein Zeichen ist ein Unicodezeichen codiert dargestellt durch seine Ordnungszahl in hexadezimaler Darstellung gefolgt von einem X z B OFEEX Eine Zeichenkette ist eine in einfache oder doppelte Hochkommas eingeschlossene Folge von Zeichen z B This is a string Don t worry He said Allright now Dadurch unterscheiden sich Zeichenketten von Namen und Zahlen a und a 1 und 1 Die Lange einer Zeichenkette ist die Anzahl ihrer Zeichen Eine Zeichenkette der Lange 1 ist wie ein Zeichen zu verwenden character digit hexDigit X hexDigit digit A B C D E F string char char char Unicodezeichen Formel 4 5 Syntax von Zahlen 4 6 1 4 Tabelle 4 1 Operatoren und Begrenzer von Cleo 4 6 2 4 6 2 1 Konvention 4 6 Syntax der Spezifikationssprache Cleo Eine Zahl ist eine ganze Zahl in Dezimal z B 2429346 oder Hexadezimaldarstellung z B OCAFEH oder eine Gleitpunktzahl z B 13 18E 35 jeweils vorzeichenlos number integer real integer digit digit digit hexDigit H L real digit digit digit ScaleFactor ScaleFactor E digit digit Operatoren und Begrenzer Operatoren und Be
482. sbarkeit auf eine andere Plattform Hardware oder Software ber tragbar sein Portierbarkeit zus tzliche Anforderungen der Benutzer erf llen k nnen Erweiterbarkeit Modul Klasse Komponente 3 2 3 3 2 Softwarequalititsmerkmale Wartbarkeit und Anderbarkeit kann man nur indirekt in Soft ware hineinkonstruieren indem man andere Merkmale beach tet N tzlich sind z B die Verst ndlichkeit von Entw rfen und Spezifikationen und die Lesbarkeit von Programmen Eine gute modulare Zerlegung f rdert Wart und nderbarkeit da Fehler leicht in Modulen zu lokalisieren sind und f r viele Anpassun gen nur Implementationen einzelner Module zu ndern Schnittstellen zu erweitern oder weitere Module hinzuzuf gen sind Methoden aber auch Mittel wie Programmiersprachen unterst tzen Wart und nderbarkeit mehr oder weniger gut Einheiten der Erweiterung sind neben Modulen auch Klassen dazu mehr in Kapitel 10 Das Erweitern eines Softwaresystems ist ein Spezialfall des Wiederverwendens Allgemein ist Wieder verwendbarkeit der Grad in dem sich Teile eines Softwarepro dukts in anderen Produkten f r andere Aufgaben in anderen Zusammenh ngen wiederverwenden lassen Wiederverwend bare Teile k nnen Entw rfe Spezifikationen und Implementa tionen sein Einheiten der Wiederverwendung sind das Modul und die Klasse Module sind durch Benutzen wiederverwendbar Klas sen auch durch die objektorientierte Technik des Erweite
483. sc IN a PartComparableDesc Greater IN b PartComparableDesc BOOLEAN NEW IN a PartComparableDesc GreaterEqual IN b PartComparableDesc BOOLEAN NEW IN a PartComparableDesc Less IN b PartComparableDesc BOOLEAN NEW IN a PartComparableDesc LessEqual IN b PartComparableDesc BOOLEAN NEW ABSTRACT anana END Comparable POINTER TO ComparableDesc ComparableDesc ABSTRACT RECORD PartComparableDesc VAR a ComparableDesc SetMax IN b c ComparableDesc NEW VAR a ComparableDesc SetMin IN b c ComparableDesc NEW END PROCEDURE CheckAnylnvariants IN a b c AnyDesc PROCEDURE CheckPartComparablelnvariants IN a b c PartComparableDesc PROCEDURE CheckComparablelnvariants IN a b c ComparableDesc END BasisGenerals Das Symbol zeigt in Programm 12 1 auf die Prozeduren InitDe fault und Write mit dem Prozedurattribut EMPTY Es bedeutet dass die Prozedur einen leeren Rumpf hat und redefinierbar ist Eine leere Prozedur ist effektlos sie macht im Unterschied zu einer abstrakten Prozedur ihre Klasse nicht abstrakt MODULE BasisGenerals Interface Description Most abstract concept classes Any PartComparable Comparable to be used for various extensions Any is the base class providing the concepts of equality relation copying and cloning PartComparable is an extension of Any providing the concept of a partially ordered set Comparable is an extension of Par
484. schen Zeichen z B 8 a Der Unicode eine Weiterentwicklung des ASCII Codes verwendet zur Zeichencodierung 16 Bits sodass er 2 65536 verschiedene Zeichen darstellen kann Damit umfasst er viele Schriften d h neben den Schriftzeichen europ ischer Sprachen u a auch Katakana Hiragana chinesische Zeichen aber auch alte Sprachen wie Sanskrit und gypti sche Hieroglyphen sowie Satzzeichen mathematische und grafische 4 6 Syntax der Spezifikationssprache Cleo 4 6 1 2 Bild 4 8 Syntaxdiagramme zu Namen Zeichen Moderne Programmiersprachen wie Component Pascal und Betriebssysteme wie Windows NT 2000 verwenden den Unicode Namen Ein Name ist eine Folge von Buchstaben aus der Latin1 Erwei terung des ASCII Zeichensatzes Unterstrichen und Dezimalzif fern beginnend mit einem Buchstaben oder Unterstrich Zur lexikalischen Einheit Name geh rt eine kleine formale Spra che mit den Nichtterminalen ident letter und digit ident ist das Startsymbol Um ihre Syntax zu beschreiben brauchen wir schon alle Operationen der EBNF au er der Option Wir n hern uns der textuellen Darstellung ber eine grafische Bild 4 8 zeigt die Struktur von Namen mit drei Syntaxdiagrammen f r jede EBNF Regel eines AR m letter y A HO A g O Was bedeuten die grafischen Elemente der Syntaxdiagramme Sie entsprechen Metas
485. schte Component Pascal bietet Standardprozeduren INC und DEC mit denen der Effekt dieser Zuweisungen so erzielt werden kann INC i k DEC i k Die Prozeduraufrufe kosten weniger als die Zuweisungen da der Uber setzer ihren Code expandiert und dabei die Adresse von i nur einmal statt zweimal berechnet Der Effizienzgewinn bleibt allerdings mikro skopisch klein Uber die Effizienz eines Algorithmus entscheidet seine Entwurfsstruktur weit mehr als Optimierungen einzelner Anweisun gen wie wir in 8 2 4 4 S 223 sehen werden Besonders h ufig kommt Erh hen oder Erniedrigen um 1 vor weshalb es daf r Varianten von INC und DEC mit nur einem Parameter der zu ver ndernden Variable gibt INC i ist quivalent zu INC i 1 DEC i ist quivalent zu DEC i 1 129 6 Vom Spezifizieren zum Implementieren 6 3 2 Defaultinitialisierung 130 Initialisierung Die Zuweisung i i 1 erh ht den Wert von i um 1 dazu wird der aktuelle Wert von i im Ausdruck i 1 ermittelt Was aber wenn dies die erste Anweisung nach der Vereinbarung von i ist Welchen Wert hat dann i Dies ist das Initialisierungsproblem Eine Variable soll auch beim ersten Lesezugriff auf sie einen bestimmten korrek ten Wert besitzen Eine Variable initialisieren hei t sie an einen Anfangswert binden Generell unterscheidet man bei Program miersprachen zwei Vorgehensweisen Implizite Initialisierung bedeutet dass der bersetzer auto matisch
486. se oben 4 dient der Erweiterungsklasse unten als Basisklasse Die Strukturierungsmittel des Benutzens und Erweiterns verlei hen dem objektorientierten Programmieren gro e Ausdrucks kraft Ihre vielf ltigen Einsatzm glichkeiten bergen aber auch Abstraktion Arbeitsteilung Klassifikation 10 3 10 3 1 Kommandos 10 3 W rter sammeln Rechtschreibung pr fen Fehlerquellen Setzt der Entwickler die beiden Strukturierungs mittel zweckwidrig ein so entstehen schwer durchschaubare Softwaregebilde Deshalb sei ihr Zweck noch einmal betont Die Benutzungs und die Erweiterungsbeziehung realisieren zwei verschiedene Aspekte des Prinzips der Abstraktion Die Benutzungsbeziehung realisiert das Verh ltnis Kunde Lieferant und damit das Prinzip der Aufgabenteilung des Zerlegens und Zusammenfassens Die Erweiterungsbeziehung realisiert das Verh ltnis Oberbe griff Unterbegriff und damit das Prinzip der begrifflichen Klassifikation des Generalisierens und Spezialisierens Auf der Ebene des objektorientierten Entwurfs stehen weitere Strukturierungsmittel zur Verf gung diese haben wir in 6 4 2 S 144 mit einer UML hnlichen grafischen Notation exemplarisch benutzt Wie verhalten sich die Beziehungen der Entwurfsebene und die der Implementationsebene zueinander Komposition Aggregation und Assoziation werden alle auf die Benutzungsbeziehung abgebildet Die Klassifikation wird auf die Erweiterungsbeziehun
487. set LEN set 1 Das algorithmische Muster von S 197 f hrt zur folgenden Implementation Dabei gilt nach jedem Schleifendurchlauf result set 0 amp set 1 amp amp set i Nach dem letzten Durchlauf mit i LEN set 1 hat result also den gesuchten Wert PROCEDURE IsEmpty BOOLEAN VAR result BOOLEAN i INTEGER BEGIN result TRUE FOR i 0 TO LEN set 1 DO result result amp set i END RETURN result END IsEmpty Doch halt Die Zeichenmenge ist genau dann nicht leer wenn wenigstens eines der SET Elemente der Reihung set nicht leer ist Um dies festzustellen sind nicht unbedingt alle SET Elemente 198 Programm 8 4 Ist die Zeichenmenge leer 8 1 4 8 1 Zeichen sammeln zu pr fen Sobald eine nicht leere Teilmenge gefunden ist ist die Gesamtmenge nicht leer und kann durch Pr fen weiterer Teil mengen nicht mehr leer werden die Schleife kann dann beendet werden Nicht eine Z hlschleife sondern eine Bedingungs schleife ist das passende Konstrukt PROCEDURE IsEmpty BOOLEAN VAR result BOOLEAN i INTEGER BEGIN result set 0 i 1 WHILE result amp i lt LEN set DO result set i INC i END ASSERT result OR i gt LEN set BEC invariant RETURN result END IsEmpty Die Schleifeninitialisierung priift die erste Teilmenge set 0 und setzt i auf den Index der n chsten Teilmenge Der
488. setzen jetzt voraus dass es f r die nat rlichen Zahlen einen Typ NATURAL mit dem Wertebereich 0 1 2 gibt d h 0 gilt als nat rliche Zahl siehe Tabelle 2 2 Dann k nnen wir Betr ge und Preise vom Typ NATURAL vereinbaren und alle Bedingungen der Form Gr e gt 0 streichen denn sie sind jetzt implizit als Typeigenschaft gefor dert So transformieren wir dynamische Eigenschaften in stati sche Diese Transformation lasst sich auch in umgekehrter Rich tung ausf hren Die Grenze zwischen statischer und dynamischer Semantik ist also unscharf Mit der Einf hrung des Typs NATURAL fallen alle Invarianten und einige Vorbedingungen weg Es entfallen triviale Bedin 2 4 Spezifikation durch Vertrag gungen die sich leicht als Typeigenschaft als Wertebereich formulieren lassen Bedeutet trivial dass es sich nicht lohnt sol che Bedingungen zu pr fen Nein berschreitungen von Wer tebereichen sind Fehler die in der Praxis oft vorkommen Daher ist es wichtig sie zu verhindern Wir haben alle Invarianten gestrichen hei t das dass der Kaf feeautomat keine Invarianten besitzt Studieren wir die Spezifi kationen der Aktionen so erkennen wir gesammelter_Betrag erh ht sich immer nur um Preis Preis ist nach dem Initialisieren fest gesammelter_Betrag ist 0 Also kann gesammelter_Betrag immer nur ein Vielfaches von Preis sein Damit haben wir eine nichttriviale Invariante gefunden gesammelter_Betrag MO
489. sformation QUERIES berechnete Abfrage formale Parameter Typ PROCEDURE berechnete Abfrage formale Parameter Typ BEGIN RETURN END berechnete Abfrage Das Schl sselwort END markiert das statische Ende einer Proze dur eine RETURN Anweisung ein dynamisches Ende d h der Ablauf endet in der Prozedur mit der RETURN Anweisung und kehrt an die Aufrufstelle zur ck Statisches und dynamisches Ende k nnen m ssen aber nicht zusammenfallen Deshalb heben wir R ckkehrstellen per Programmierkonvention durch fettgeschriebene RETURNs hervor Aktionen Eine Cleo Aktion transformieren wir in eine gew hnliche Com ponent Pascal Prozedur Die Eigenschaft einer Aktion dass ein Aufruf eine Anweisung ist erh lt sich bei der Transformation ACTIONS Geld_einnehmen IN Betrag NATURAL Kaffee_ausgeben Geld_zur ckgeben ACTIONS FOR Betriebspersonal initialisieren IN neuer_Preis NATURAL PROCEDURE Geld_einnehmen Betrag INTEGER PROCEDURE Kaffee_ausgeben PROCEDURE Geld_zur ckgeben PROCEDURE initialisieren neuer_Preis INTEGER Ein neues Detail ist dass bei Component Pascal Prozeduren mit Parametern von Grundtypen die Angabe der Parameterart IN TS Cleo Component Pascal 6 1 6 Programm 6 1 Kaffeeautomat syntaktisch Spezifiziert 6 1 Von Cleo zu Component Pascal Schritt 1 fehlt Die fiir Cleo erl uterte Semantik gilt jedoch auch hier Die Parametertibergabearten von Component Pascal
490. signator denoting a variable If it denotes an element of a structured variable the component selectors are evaluated when the formal actual parameter sub stitution takes place i e before the execution of the procedure If a formal parameter is a value parameter the corresponding actual parameter must be an expression This expression is eval uated before the procedure activation and the resulting value is assigned to the formal parameter see also 10 1 ProcedureCall Designator ActualParameters Examples Writelnt i 2 1 see 10 1 INC w k count t Insert John see 11 9 3 Statement Sequences Statement sequences denote the sequence of actions specified by the component statements which are separated by semicolons StatementSequence Statement Statement 9 4 If Statements IfStatement IF Expression THEN StatementSequence ELSIF Expression THEN StatementSequence ELSE StatementSequence END If statements specify the conditional execution of guarded state ment sequences The Boolean expression preceding a statement 393 A Component Pascal Language Report 394 sequence is called its guard The guards are evaluated in sequence of occurrence until one evaluates to TRUE whereafter its associated statement sequence is executed If no guard is sat isfied the statement sequence following the symbol ELSE is exe cuted if there is one Example IF ch gt A amp ch lt Z
491. signments replace the current value of a variable by a new value specified by an expression The expression must be assign ment compatible with the variable see App A The assignment operator is written as and pronounced as becomes Assignment Designator Expression If an expression e of type Te is assigned to a variable v of type Ty the following happens 1 if Tv and Te are record types all fields of that type are assigned 2 if Tv and Te are pointer types the dynamic type of v becomes the dynamic type of e 3 if Tv is an array of character type and e is a string of length m lt LEN v v i becomes ei for i 0 m 1 and v m becomes OX It leads to a run time error if m gt LEN v 392 A Component Pascal Language Report Examples of assignments refer to examples in Ch 7 i 0 i i Log2 i j Log2 see 10 1 2 3 5 7 11 13 x y x y i w i 1 name John DO narx i pan i O 9 2 Procedure Calls A procedure call activates a procedure It may contain a list of actual parameters which replace the corresponding formal parameters defined in the procedure declaration see Ch 10 The correspondence is established by the positions of the parameters in the actual and formal parameter lists There are two kinds of parameters variable and value parameters If a formal parameter is a variable parameter the corresponding actual parameter must be a de
492. sionelles Arbeiten unterstiitzt Das zweite Werkzeug ist der Sucher Bei Info Search In Sources Info Search In Docu 95 5 Die Entwicklungsumgebung BlackBox Bild 5 6 BlackBox Lager 96 ist ein Wort zu selektieren nach dem in allen Quell bzw Doku mentationstexten gesucht wird Alle Werkzeuge suchen Dateien nicht sondern erwarten sie an Orten die durch die in 5 2 3 genannten Namenregeln bestimmt sind So zeigt der Browser in den obigen Beispielen die Schnitt stellendatei Dev Sym Search osf bzw die Dokumentationsdatei Dev Docu Search ocf an Lager Der Browser erwartet einen Modulnamen als Eingabe Was tun wenn man ein Modul sucht aber seinen Namen nicht kennt oder vergessen hat Manchmal f llt er einem ein wenn man ihn sieht In solchen F llen kann man im Lager repository nach schauen Der Men befehl Info Repository schreibt eine alphabetisch sortierte Liste aller Subsysteme in ein Fenster ep Story BEE Basis gt Comm gt e Containers cd e Dev e Cit Electric gt lt Form Graph 6 Hest 6 1 e 2 gt lt Math e b see ole Sql e Std System Test Text Utilities e n E aj Bild 5 7 Lager Form S ubsystem 5 3 Werkzeuge Die aufeinander zeigenden schwarzen Pfeile rechts der Namen sind Falter folds im zugeklappten Zustand Durch Anklicken eines Pfeils klappt ein Falter auf und bringt seinen zuvor verbor genen Inhalt zum Vorschein
493. ssen gen Nichtterminal beschreiben l sst das durch einen regul ren Ausdruck definiert ist Notieren wir beim Durchlaufen des Zustandsdiagramms statt der Zust nde die Aktionen so erhalten wir einen anderen regu l ren Ausdruck f llen leeren leeren Bild 9 2 Formel 9 1 und Formel 9 2 sind quivalent in dem Sinn dass jedes aus jedem anderen herleitbar ist abgesehen von den Namen die in den Ausdr cken nicht alle vorkommen Damit haben wir verglichen mit Programm 9 1 kompakte Spezifika tionen der Tasse gefunden die eine Vorstellung vom Zusam menhang der Zust nde oder Aktionen vermitteln Regul re Ausdr cke eignen sich gut um zul ssige Folgen von Aktions aufrufen darzustellen Eine Spezifikation durch Vertrag l sst sich dagegen leichter um eine Implementation erg nzen Benutzung Zur ck zum Modellieren des Kaffeeautomaten Bild 9 1 Die Aktion Kaffee_ausgeben erwartet vom Parameter Pott des Typs Tasse dass er vor dem Aufruf leer ist und sie garantiert dass er nachher voll ist Der Parameter muss deshalb von der Art Ein und Ausgabe sein Die Spezifikation lautet Kaffee_ausgeben INOUT Pott Tasse PRE NOT auBer_Betrieb eingenommener_Betrag gt Preis Pott leer POST eingenommener_Betrag OLD eingenommener_Betrag Preis gesammelter_Betrag OLD gesammelter_Betrag Preis Pott voll Gegentiber Programm 2 8 S 35 bietet dieses Kaffee_ausgeben mit der zus tzlichen Nachbedingung Pott voll dem K
494. ssen dass der Lieferant wenn er einen Auftrag angenommen hat die Nachbedingungen des Dienstes erf llen wird In unserem Bei spiel kann Geld_einnehmen zusichern den bergebenen Betrag zu registrieren eingenommener_Betrag OLD eingenommener_Betrag Betrag Der OLD Ausdruck liefert dabei den Wert den eingenommener_Betrag vor der Ausf hrung des Dienstes hatte Vor und Nachbedingungen sind also Aussagen ber den abfragbaren Zustand des Lieferanten und ber die Parameter und Ergebnisse des Dienstes Aussagen formulieren wir als boo lesche Ausdr cke Vor und Nachbedingungen stellen die in Bild 1 2 S 2 erw hnte Ursache Wirkungs Beziehung dar Die Vorbedingungen eines Dienstes beschreiben die Ursachen die zur Ausf hrung des geforderten Dienstes f hren die Nachbe dingungen beschreiben die Wirkungen dieser Ausf hrung Nicht alle Zust nde eines Moduls die syntaktisch erlaubt sind und im Wertebereich der sie beschreibenden Gr en liegen sind semantisch sinnvoll Was sollte z B Kaffeeautomat Preis 100 bedeuten Dass der Automat nie einen negativen Preis anzeigt k nnen wir durch einen booleschen Ausdruck spezifizieren 29 2 Spezifizieren Invariante Bild 2 6 Kunden Lieferanten Modell mit Bedingungen 30 Preis gt 0 Solche Aussagen die f r ein Modul stets gelten hei en Modu linvarianten oder kurz Invarianten Genauer W hrend ein Modul einen Dienst ausf hrt k nnen seine Invarianten zeit
495. sssssesesssssseeess 186 Aufgabe 8 1 Algorithmus optimieren u ueenennenenenenen 227 Aufgabe 8 2 Mengehm odul 2 222er 227 Aufgabe 8 3 Grafikmod lv 222322 222 e samen el 227 Aufgabe 8 4 Vektormodul 2 engeren 227 Aufgabe 8 5 SP lsessesnameusinketnshalknsansienen ET 227 Aufgabe 8 6 xxviii 25 2 05 Aufgabenverzeichnis Komplexit tsanalyse nnennenenennnene 228 Aufgabe 8 7 Auswertung boolescher Ausdr cke une 228 Aufgabe 9 1 Kaffeeautomaten ic cccccccccsccccccscsessccsssssecesssessscsssssssecssesseesees 249 Aufgabe 9 2 Tassen NEA E E AE ESE 249 Aufgabe 9 3 Kaffeeautomaten und Tassen cccccccccccessesessssssssesessseeees 249 Aufgabe 10 1 Zahlen sammeln oocccccecccccssccsssssssssscecsscccsssssecssessesssesssssseesees 285 Aufgabe 10 2 W rter z hlen 2 2 2222 ran 285 Aufgabe 10 3 W rter suchen 222 2 222 Essen 286 Aufgabe 11 1 Enthaltensein rekursiv nseeenennneeensenennneenennnnnnnnnennnnnnnn 334 Aufgabe 11 2 Einf gen und Entfernen iterativ ueneneeennnnen 334 Aufgabe 11 3 Mengenoperationen aisse eiras ospearen aa iaaa 334 Aufgabe 11 4 Umfang einer Menge eennneeenenennneneen 334 Aufgabe 12 1 Anpassen des Testmoduls zur Mengenklasse 376 Aufgabe 12 2 Anpassen des Moduls zur Rechtschreibpriifung 376 Aufgabe 12 3 Verallgemeinern der Mengenklasse e 376 xxix Aufgabenverzeichnis 25 2 05 XXX
496. st den Tester hoffen dass der Pr fling seine Aufgabe in Anwendungen erf llen wird Eine allgemeine Testmethode ist der Funktions oder Black Box Test Er bezieht sich nur auf die spezifizierte Schnittstelle und das beobachtbare Verhalten eines Pr flings nicht auf seine verborgene Implementation und Struktur Ein Funktionstest soll erkennen dass die Implementation des Pr flings von seiner Spezifikation abweicht Unser Testverfahren ist ein Funktionstest der auf der Methode der Spezifikation durch Vertrag basiert Diese Spezifikationsme thode ist dort anwendbar wo Dienste von Modulen oder Klas sen auf internen Zust nden oder Parametern operieren also bei Funktionsmodulen und klassen im Sinne von Funktionalit t Die Vertragsmethode findet ihre Grenze bei Diensten die mit ihrer Umgebung interagieren z B bei Kommandos mit Ein Ausgabe bei Operationen auf Dateien oder der Kommunikation mit anderen Rechnern Im Folgenden ist ein Pr fling eine ver traglich spezifizierte Funktionseinheit Modul oder Klasse Ein Pr fling ist mit Invarianten und Vor und Nachbedingungen von Diensten spezifiziert Seine Spezifikation ist in Form von Zusicherungen von vornherein in seine Implementation einge baut Diese Zusicherungen dienen als permanente Testanwei sungen mit denen sich ein Pr fling selbst testet Ein Pr fling 293 11 Dynamische Objektstrukturen 11 1 3 3 Verfahrensschritte 294 muss zum Testen nur benutzt werden
497. st der Wert der Variable c in der Menge enthalten c ist frei das n chste Zeichen des Eingabestroms aufzunehmen In Char c Problematisch am Entwurf 1 ist dass wir nicht wissen nach wievielen Zeichen der Eingabestrom endet Theoretisch w ren beliebig viele IF Anweisungen ineinander zu schachteln doch das ist schreibtechnisch nicht machbar Tats chlich liegt hier keine Fallunterscheidung vor sondern eine Wiederholung immer gleicher Schritte solange eine bestimmte Bedingung erf llt ist Die Bedingung ist hier In Done Entwurf 2 des Eingabeschritts Wiederholung Bedingungsschleife Initialisierung 8 1 Zeichen sammeln d h das Lesen war erfolgreich das Ende des Eingabestroms ist noch nicht erreicht und das gelesene Zeichen ist verarbeitbar Anstatt die Wiederholung mit anzudeuten ist es pr gnan ter die wiederholt zu pr fende Bedingung und die zu wieder holenden Anweisungen nur einmal hinzuschreiben und das Wiederholen dem Ablauf des Algorithmus aufzutragen Diesem Zweck dienen Wiederholungsanweisungen Mit der in 4 7 3 S 76 vorgestellten WHILE Anweisung lautet der Algorithmus In Char c WHILE In Done DO ContainersSetOfChar Put c In Char c END Ist die zwischen WHILE und DO stehende Bedingung erf llt so wird die durch DO und END geklammerte Anweisungsfolge aus geftihrt danach kehrt der Ablauf zum WHILE zurtick d h die Bedingung wird erneut ausgewertet Wiederholungsanweisungen hei en ku
498. stalten wir zwecks Einheitlichkeit auch die bergabe des Wortes von ReadWord nach ReadText mit einer Variable word und eliminieren den Parameter word des Entwurfs von ReadWord auf S 274 2 ReadWord erzeugt eine neue dynamische Zeichenkettenvaria ble f r das n chste zu lesende Wort Da es die L nge von W rtern in beliebigen Eingabetexten nicht kennt legt I1WordChecker eine maximale Wortl nge fest mindestens 2 Es vereinbart eine symbolische Konstante und gibt sie seinen 283 10 10 3 7 10 4 284 Statische Klassenstrukturen Kunden bekannt ReadText zerteilt l ngere W rter in St cke maximaler L nge 3 Die Schleife zum F llen der dynamischen Zeichenkettenva riable mit gelesenen Buchstaben kombiniert die Eingabe mit dem Bearbeiten der Reihung siehe Programm 8 4 S 199 Ein Reihungselement ist f r das Zeichenkettenendesymbol 0X vorgesehen Die Defaultinitialisierung hat 0X schon korrekt platziert 4 Eine weitere Nachbedingung beschreibt den Effekt von Read Word auf word Wegen NEW word maxWordLength ist word NIL wegen word 0 char ist LEN word gt 0 Dabei bezeichnet word die in word gespeicherte Zeichenkette LEN word z hlt das Endesymbol 0X nicht mit 5 ReadText bergibt den Zeiger auf die von ReadWord gelesene Zeichenkette an die Menge words seinen Ausgabeparameter 6 InitDictionary darf ein neues Ausgabefenster erst nach dem ffnen des Eingabestroms ffnen Fazit
499. steht f r eine feste Gr e sie liefert immer denselben Wert Ein Beispiel f r eine Konstantenvereinba rung ist CONST minutesPerHour 60 Ein Typ ist eine Abstraktionsklasse von Gr en mit gleicher Struktur gleichem Wertebereich gleichen Operationen und gleichem Speicherplatzbedarf Ein Typ dient dazu Exem plare des Typs zu vereinbaren Grundtypen sind implizit durch die Sprache vereinbart vorvereinbart Standardtyp das Typkonzept entfaltet sich wenn der Programmierer selbst explizit neue Typen vereinbart Insbesondere sind Klassen Typen die aus anderen Typen aufgebaut sind Typen d rfen in Vereinbarungen von Typen Variablen und Prozedursigna turen auftreten Ein Beispiel f r zwei einfache Typvereinba rungen ist TYPE Hour INTEGER Minute INTEGER Eine Variable steht f r eine ver nderliche Gr e sie ist von einem vereinbarten Typ und liefert einen nderbaren gespei cherten Wert Ein Beispiel f r eine Variablenvereinbarung ist VAR hour Hour Eine Prozedur ist eine Abstraktion eines Algorithmus sie kann Parameter haben m Eine gew hnliche Prozedur steht f r eine Ver nderung sie ist eine Zusammenfassung von Anweisungen die etwas tun Der Begriff ist eine Abstraktion des Begriffs Anweisung entsprechend ist ein Aufruf einer gew hnli chen Prozedur eine Anweisung Ein Beispiel f r die Ver 75 4 Programmiersprachen 4 7 3 Elementare Anweisung Strukturierte Anweisung 76 einb
500. stellung ohne diese Nachteile ber Syntaxdiagramme und textuelle EBNF Notation sind quivalent da man mit ihnen die selben Sprachen beschreiben kann Die Elemente der EBNF Notation haben wir in Abschnitt 4 5 eingef hrt ident letter _ letter _ digit letter A er gt Ya z at A A oO g DR 6 g y digit o 4 PO p 3 4 5 6 7 8 9 Die Buchstaben der Unterstrich und die Dezimalziffern sind Terminale und daher mit dem Metasymbol umschlossen z B a o letter und digit stehen jeweils f r ein Symbol aus einer Menge Diese Symbole werden aufgelistet und durch das Metasymbol f r Auswahl getrennt Um bei letter nicht alle Buchstaben hin schreiben zu m ssen und ausgelassene Alternativen eines Inter valls anzudeuten verwenden wir wie im Syntaxdiagramm zwei Punkte Damit k nnten wir die Regel f r digit auch lascher notieren digit o 9 Klassifikation von Namen Konvention Ableitung Ableitungs algorithmus fur EBNF Regeln Beispiel 4 6 Syntax der Spezifikationssprache Cleo Eine Folge von Buchstaben wird durch letter dargestellt F r ident brauchen wir Folgen von Buchstaben Unterstrichen und Dezimalziffern also den Ausdruck letter _ digit Dies erlaubt auch die leere Folge Ein Name soll aber nicht leer sein sondern aus mindestens einem Zeichen bestehen Au erdem soll er nicht mit einer Dez
501. stheit ist die Angemessenheit mit der ein Softwarepro dukt auf nicht vorgesehene Benutzungen reagiert Ein robu stes Programm erkennt falsche Eingaben von Benutzern und behandelt sie mit hilfreichen Meldungen Der Ablauf eines nicht robusten Programms kann dagegen durch falsche Ein gabe in einen fehlerhaften Zustand geraten und abst rzen Benutzbarkeit eines Softwareprodukts ist der Grad zu dem es intendierte Benutzer angenehm handhaben k nnen d h ohne Frustration und Stress Ein Aspekt ist Verst ndlichkeit Benut zer m ssen die F higkeiten des Systems verstehen k nnen Das erfordert konzeptuell klare leicht erlernbare Benutzungsober fl chen selbsterkl rende Namen f r Dienste vern nftige Systemreaktionen und gute durchschaubare Benutzungsdoku mente Strukturelle Qualit tsmerkmale Komplexe Software ist leider immer fehlerbehaftet Fehlerbehe bung daher eine wesentliche Daueraufgabe Die Wartbarkeit eines Softwareprodukts ist umso besser je geringer der zum Korrigieren von Fehlern erforderliche Aufwand ist Neben der Wartung bed rfen Softwareprodukte auch st ndiger Pflege um sie an neue Anforderungen und Gegebenheiten anzupassen Die nderbarkeit eines Softwareprodukts ist umso besser je leichter nderungen durchf hrbar sind Man differen ziert nach dem Zweck der nderung Das Produkt soll mit m g lichst geringem Aufwand an ver nderte Anforderungen und Aufgaben der Benutzer anpassbar sein Anpas
502. sto weniger Prozessorzeit bleibt fiir Interaktionen Deshalb ist die Wiederholfrequenz der Einzel tests einstellbar Zus tzliche Prozeduren sind SetNextTime newNextTime setzt das Zeitintervall zwischen zwei Aufrufen auf newNextTime Zeiteinheit ist die Millisekunde StopAll beendet die Ausf hrung aller Daueraktionen im Hin tergrund Die folgende syntaktische Schnittstelle definiert zus tzlich einige Zeitgr en 291 11 Dynamische Objektstrukturen Programm 11 3 Schnittstelle des Testwerkzeugmoduls 11 1 3 11 1 3 1 292 DEFINITION UtilitiesRepeater CONST day 86400000 hour 3600000 millisecond 1 minute 60000 second 1000 timeUnit 1 TYPE Action POINTER TO ABSTRACT RECORD action Action Do NEW ABSTRACT END Time INTEGER VAR nextTime Time PROCEDURE SetNextTime newNextTime Time PROCEDURE Show PROCEDURE Start action Action PROCEDURE Stop action Action PROCEDURE StopAll PROCEDURE UntilBreakDo action Action END UtilitiesRepeater Testmodul zur Mengenklasse Wir entwickeln nun das Testmodul TestSetsOfString zu ContainersSetsOfString beginnend mit dem Entwurf der Komman dos f r ein Aufrufmen Entwurf der Kommandos Zum Testen im Vordergrund dienen diese Kommandoaufrufe TestSetsOfString TestOnce f hrt einen Einzeltest aus TestSetsOfString TestUntilBreak einen Dauertest bis zum Abbruch mit Escape Die Alternative zum beliebig lan
503. t Der statische Aspekt bezieht sich auf den Text eines Algorith mus Dazu z hlt man einfach wie oft gewisse Merkmale vor kommen Konkret notieren wir hier die Anzahlen der 1 lokalen Variablenvereinbarungen 2 atomaren Bedingungen wie Vergleiche 3 Zuweisungen und Inkrementierungen 223 8 Strukturiertes und modulares Programmieren 224 4 strukturierten Anweisungen 5 RETURN Anweisungen Die Anzahl 1 ist ein grobes Ma f r den Speicherbedarf der Daten die Summe der Anzahlen 2 bis 5 f r den Speicherbe darf des Codes Diese Anzahlen h ngen vom Algorithmus ab kaum von der verwendeten Programmiersprache Der exakte Speicherbedarf der globalen Variablen und des Codes in einer konkreten Sprachumgebung ist an der erzeugten Codedatei abzulesen In BlackBox z hlt der Men befehl Info Analyze Module u a die Anzahl der Anweisungen in einem Modul Interessanter ist hier der dynamische Aspekt der sich auf das Laufzeitverhalten eines Algorithmus bezieht Dazu z hlt man wie oft gewisse elementare Operationen bei einem Ablauf des Algorithmus ausgef hrt werden Konkret summieren wir hier die Anzahlen der atomaren Bedingungen Zuweisungen Inkrementierungen und RETURN Anweisungen F r eine genauere Analyse k nnte man die verschiedenen Ele mentaroperationen differenzieren oder gewichten wir unterlas sen dies hier der Einfachheit halber Die berechnete Zahl h ngt wieder vom Algorithmus ab nicht v
504. t PROCEDURE MoveMin VAR tree Node OUT item Element Remove node with minimal element in tree move its element to item BEGIN ASSERT tree NIL BEC precondPar1 NotNil IF tree left NIL THEN item tree item tree tree right ELSE MoveMin tree left item END ASSERT item NIL BEC postcondParNotNil END MoveMin PROCEDURE Remove VAR tree Node item Element Delete node with node item item from tree such that the order is kept BEGIN ASSERT item NIL BEC precondPar2NotNil IF tree NIL THEN IF item lt tree item THEN Remove tree left item ELSIF item gt tree item THEN Remove tree right item ELSIF tree left NIL THEN tree tree right ELSIF tree right NIL THEN 330 11 3 Mengenklasse f r Zeichenketten tree tree left ELSE MoveMin tree right tree item END END END Remove PROCEDURE VAR set SetDesc Remove x Element NEW Exclude x from set BEGIN ASSERT x NIL BEC precondPar1 NotNil Remove set root x set Checklnvariants ASSERT set Has x BEC postcondSupplierOk END Remove PROCEDURE WipeOut OUT tree Node BEGIN tree NIL END WipeOut PROCEDURE VAR set SetDesc WipeOut NEW Exclude all elements from set 1 BEGIN WipeOut set root set Checklnvariants ASSERT set IsEmpty BEC postcondSupplierOk END WipeOut PROCEDURE VAR target SetDesc Copy IN source SetD
505. t 0 THEN Anzeige Betrag 0 Anzeige Meldung Bitte geben Sie einen positiven Geldbetrag ein ELSE KA Geld_einnehmen Anzeige Betrag Anzeige Betrag 0 Anzeige Meldung Betrag akzeptiert END 2 Zustand_ bertragen END Geld_einnehmen PROCEDURE Kaffee_ausgeben BEGIN IF KA auBer_Betrieb THEN Anzeige Meldung Bitte dr cken Sie zuerst auf initialisieren ELSIF KA eingenommener_Betrag lt KA Preis THEN Anzeige Meldung Bitte geben Sie mehr Geld ein ELSE KA Kaffee_ausgeben Anzeige Meldung Hier ist Ihr Kaffee wohl bekomm s Dialog Beep END 2 Zustand_ bertragen END Kaffee_ausgeben PROCEDURE Geld_zur ckgeben VAR 3 Betrag ARRAY 20 OF CHAR BEGIN IF KA au er_Betrieb THEN Anzeige Meldung Bitte dr cken Sie zuerst auf initialisieren ELSE 3 nS Strings IntToString KA eingenommener_Betrag Betrag KA Geld_zur ckgeben 3 Anzeige Meldung Sie erhalten Betrag Zenti Euro zur ck END 2 Zustand_ bertragen END Geld_zur ckgeben BEGIN 4 Zustand_ bertragen END I1Kaffeeautomat_DialogBox In der folgenden Liste von Bemerkungen entsprechen die Num mern den Nummern bei den Symbolen in Programm 7 4 1 Ein Aufruf Dialog Update Anzeige steht als letzte Anweisung in Zustand_ bertragen um die Dialogfelder jedesmal zu aktualisie ren wenn der Zustand von I1Kaffeeautomat bertragen wird 168 7 3 Kaffeeautomat mit Dialogbox Typkonver
506. t wicklungsmodell von Bild 4 6 S 61 folgend brauchen wir zuerst einen Editor Editor Der BlackBox Editor gleicht in Grundmerkmalen weitgehend verbreiteten Editoren Editorbefehle finden sich in den Mentis File Edit Attributes Text und Window Wir gehen nicht auf tibliche Funktionen ein sondern nennen einige interessante spezifische F higkeiten die den BlackBox Editor und das zugrundelie gende Dokumentsystem auszeichnen Man kann z B Textteile mittels Drag amp Drop Technik verschieben und kopieren Attribute von Textteilen wie Stil Grad Farbe und Schriftart mittels Drag amp Pick Technik setzen eingegebene Befehle mit einem bis zum vorhergehenden Speichern unbeschr nkten Undo Redo Mechanismus korri gieren Edit gt Undo Edit gt Redo den Zeilenumbruch mit Tools Document Size automatisch an die Fenstergr e anpassbar machen die Men definitionen betrachten und ndern Men Info diese sind n mlich als Dokumente gespeichert Das Wichtigste ist jedoch dass man in Dokumente beliebige Objekte einbetten kann Dazu stehen alle F higkeiten die Black Box f r sich selbst nutzt den Entwicklern und Benutzern zur Verf gung Beispielsweise kann man an beliebiger Schreibmar kenposition in einem Dokument mit Tools Create Link eine Hyperverbindung anlegen siehe S 104 Tools Create Fold einen neuen Falter einf gen Edit Paste Object und Edit gt Insert Object Objekte einbetten
507. t Die Information steckt in der Rei hung frequency es ist der Index dessen Element den Wert 60 hat hier 0 Die Zahl 0 ist dann wieder als Zeichen 0X zu interpretie ren Die Teilaufgabe lautet Gegeben frequency und frequencySorted i Gesucht Index k mit frequency k frequencySorted i Das Vektormodul l st diese Suchaufgabe mit der Operation Min IndexOf k MathVectorsOflnteger MinIndexOf frequency frequencySorted i Da die sortierte Reihung aus der unsortierten durch Vertauschen der Elementwerte hervorgegangen ist kommt jeder Wert frequencySorted i in frequency vor und die Funktion MinIndexOf kann und muss einen giiltigen Indexwert als Ergebnis liefern Im All gemeinen kann MinIndexOf nicht davon ausgehen dass ein ange gebener Wert in der Reihung enthalten ist Findet MinindexOf den gesuchten Wert nicht in der Reihung so gibt es den Wert not Found zurtick der kein giiltiger Index ist d h es gilt notFound lt 0 Nach der obigen Zuweisung sind die Zusicherungen ASSERT k MathVectorsOflinteger notFound ASSERT 0 lt k amp k lt LEN frequency erf llt d h k kann als Index in frequency verwendet werden Eine H ufigkeit kann mehrfach vorkommen in Bild 8 3 z B 49 Welchen Indexwert liefert MathVectorsOflnteger MinIndexOf frequency 49 Entwurf 5 des Ausgabeschritts Bild 8 4 Spur der Haufigkeitsreihung 8 2 2 8 2 Zeichen z hlen 3 oder 4 Die Spezifikation Programm 8
508. t sie sind ausgehend von der Homepage der Fachhochschule Reutlingen mit der Webadresse http www el fh reutlingen de ffentlich zug nglich Dem Leser empfehle ich begleitend zur Lekt re des Buchs mit BlackBox zu arbeiten Oberon microsystems stellt eine kostenlose Ausbildungsversion des BlackBox Component Builder zur Verf gung Man kann sie von der Homepage der Firma mit der Webadresse Bezugsquellen fur Oberon Gliederung des Buchs Kapitelenden Vorwort http www oberon ch auf den eigenen Rechner herunterladen Die Postanschrift der Firma lautet Oberon microsystems Inc Technopark Technoparkstrasse 1 8005 Z rich CH Schweiz Informationen ber andere Sprachumgebungen zu Oberon und ihren Nachfolgern erh lt man ber die Webadresse http www factorial com hosted webrings oberon Die ersten beiden Kapitel umrei en die Themen des Buchtitels exemplarisch und stellen die Methode der Spezifikation durch Vertrag vor Das Beispiel des Kaffeeautomaten dient auch in sp teren Kapiteln der Anschauung W hrend Kapitel 3 einen berblick ber den Softwareentwick lungsprozess liefert auf den die Inhalte des Buchs sich letztlich beziehen f hrt Kapitel 4 den Leser in die Begriffswelt der Pro grammiersprachen ein Nach diesen allgemein gehaltenen Kapi teln wendet sich Kapitel 5 einem Produkt zu der Entwicklungs umgebung BlackBox Sie dient im Folgenden als Werkzeug zum praktischen Erproben erarbeiteter Aufgaben
509. t bei Parametern invariante Erweiterung d h die statischen Typen der Parameter m ssen in allen durch Redefinieren entstandenen Versionen einer Prozedur gleich sein siehe S Dynamische Typpr fung Zufall Seicht oder tief kopieren 12 1 Polymorphe Mengenklasse f r geordnete Elemente 259 An die Stelle der statischen Typpr fung tritt die Pr fung des dynamischen Parametertyps zur Laufzeit mittels einer speziellen Auswahlanweisung der bewachten Anwei sung hier WITH b StringDesc DO RETURN a string b string OR a string b string ELSE HALT BEC precondParsTypeOk END Im W chter guard b StringDesc steht links eine Bezugsgr e rechts ein Typname der eine Erweiterung des statischen Typs der linken Seite ist Ist der dynamische Typ von b mit StringDesc vertr glich so wird der auf DO folgende Anwei sungsteil ausgef hrt wobei mit b alle von StringDesc definier ten Operationen erlaubt sind sonst wird der ELSE Zweig ausgef hrt falls vorhanden sonst bricht die Ausf hrung mit einem Trap ab Im Beispiel endet die Ausf hrung im ELSE Zweig auch mit einem Trap doch zeigt die Trapnummer BEC precondParsTypeOk eine verletzte Vorbedingung an und erkl rt so den Aufrufer der Prozedur nicht die Prozedur selbst zum Verursacher des Fehlers 2 InitRandom initialisiert den Empf nger mit einer zuf lligen Zeichenkette zuf lliger L nge InitRandom wird benutzt um objekt bergreifende Invarianten bei zuf
510. t der Zeitpunkt 82 Einheit die auch mehrere aufeinanderfolgende Programmab l ufe umfassen kann Wir haben den Begriff Programm mehrfach unter spezifischen Gesichtspunkten eingef hrt als Softwaremodell eines Sachverhalts Spezifikation die implementiert und ausf hrbar sein kann Menge von Modulen und oder Klassen allgemeiner ber setzungseinheiten Wort einer Programmiersprache Folge von Maschinenbefehlen maschinell ausf hrbaren Algorithmus der eine Aufgabe l st Exkurs In traditionellem Sinn und vielen Programmiersprachen hat ein Programm genau einen Eintrittspunkt bei dem alle Programmab l ufe beginnen und es ist vollst ndig in dem Sinne dass alle Teile die w hrend eines Ablaufs gebraucht werden bereits zur bersetzungs oder Bindezeit als Ganzes vorliegen Diese Vorstellung vermischt von einander unabh ngige Konzepte und ist viel zu eng f r einen moder nen Programmbegriff Manche Autoren der objekt und komponenten orientierten Programmierung sprechen deshalb anstelle von Programmen von Systemen Wir meinen dagegen dass zum Program mieren auch ein Programm geh rt nur m ssen wir diesen Begriff neu interpretieren Wir pr zisieren welche Merkmale ein Programm charakterisie ren Ein Programm besteht aus einer Menge von Modulen und der Angabe einer Menge von Aktionen dieser Module Diese Aktionen dienen als m gliche Eintrittspunkte f r Programmab l ufe Ein Modul mit einem Ein
511. tComparable providing the concept of a totally ordered set 343 12 Vom Entwerfen zum Testen IMPORT BEC BasisErrorConstants TYPE Any POINTER TO AnyDesc AnyDesc ABSTRACT RECORD END PartComparable POINTER TO PartComparableDesc PartComparableDesc ABSTRACT RECORD AnyDesc END Comparable POINTER TO ComparableDesc ComparableDesc ABSTRACT RECORD PartComparableDesc END Procedures bound to Any Comparison Relations PROCEDURE IN a AnyDesc Equal IN b AnyDesc BOOLEAN NEW ABSTRACT Postcondition result a b 1 oS PROCEDURE IN a AnyDesc Unequal IN b AnyDesc BOOLEAN NEW Postcondition result a b BEGIN RETURN a Equal b END Unequal Initializations and Settings PROCEDURE VAR target AnyDesc InitDefault NEW EMPTY Initialize target with default values PROCEDURE VAR target AnyDesc InitRandom NEW ABSTRACT Initialize target with random values PROCEDURE VAR target AnyDesc Copy IN source AnyDesc NEW ABSTRACT Copy the values of source into target Precondition source s dynamic type is an extension of target s type Useful for polymorphic entities where assignment does not work Production 2 PROCEDURE IN source AnyDesc Clone Any NEW ABSTRACT Create a duplicate of source and return a pointer to the duplicate Output PROCEDURE IN a An
512. taktisch korrektes 83 217 227 241 243 245 247 Testprogramm 46 263 264 267 269 271 unvollstandiges 82 274 279 283 284 286 vollst ndiges 82 290 291 294 301 318 Programmierbarkeit 53 320 321 325 326 340 Programmieren 85 98 106 181 343 348 352 353 361 218 278 294 295 297 334 abstrakte 267 290 343 347 klassenorientiertes 239 aufgerufene 269 280 komponentenorientiertes aufrufende 158 159 374 Ausgabeprozedur 204 214 maschinennahes 85 effektlose 343 modulares 142 147 exportierte 123 141 175 181 objektorientiertes 85 229 finale 290 347 239 243 249 251 260 Funktionsprozedur 279 374 Funktion 435 C Sachwortverzeichnis 436 geerbte 303 348 gew hnliche 75 101 116 147 149 169 216 247 270 318 320 322 implementierte 303 347 Initialisierungsprozedur 245 Invariantenpr fprozedur 321 340 347 362 374 konkrete 347 leere 343 lokale 204 225 283 307 320 321 327 Modulprozedur 339 neu definierte 348 354 parameterlose 169 290 parametrisierte 216 290 private 166 319 321 redefinierbare 290 343 349 redefinierte 296 348 354 rekursive 318 320 324 327 Schnittstellenprozedur 291 Sortierprozedur 216 217 spezifizierte 227 Standardprozedur 120 129 157 276 Traversierungsprozedur 327 typgebundene 240 243 248 263 264 267 294 318 319 uberladene 276 vereinbarende 275 vordeklarierte St
513. tanten Typen schreibge sch tzte Variablen und Prozeduren Vermeide den Export schreibbarer Variablen da dies dem Konzept der Datenkapse lung widerspricht brigens tr gt das Primitivbeispiel des Schalters nichts zu dieser Dis kussion bei da Programm 6 4 funktional nicht weniger bietet als das ohne Datenkapselung auskommende Modul MODULE I1Switch VAR on BOOLEAN END I1Switch 6 4 2 Cleo und Component Pascal Wir haben am Beispiel des Kaffeeautomaten gezeigt wie man eine Cleo Spezifikation systematisch in eine Component Pascal Implementation transformiert Bild 6 10 stellt Beziehungen zwi schen Cleo und Component Pascal Konstrukten in einem Dia gramm zusammen dessen Elemente sich an der Unified Mode ling Language UML orientieren Bild 6 10 Beziehungen zwischen Cleo und Component Pascal BO geet Dk cates ct esata ed PISSURARSENSVERVERSTERERERE GEN Component Pascal Modul 1 n 1 Modul 0 n OR 0 n j Konstante oa i 1 AK Abfra 0 1 DAN 5 lt y I lesbare 7 element 0 1 1 Variable 1 Y i exportiertes ichgi i I Merkmal Funktion E SA 1 D gew hnliche i Prozedur Prozedur 144 6 4 Schnittstelle und Implementation Bild 6 11 Assoziation Bild 6 12 Implementation Bild 6 13 Komposition Es handelt sich um ein Klassendiagramm das hier als Begriffs diagramm dient und mit folgenden Elementen aufgebaut ist Knoten stehen f r Klassen bzw Begriffe ungerichtete Kanten stellen allgemeine Beziehungen o
514. tary Services now END END Start PROCEDURE Stop action Action I Stop action in background output action name and other data Effectless if action is not running VAR previous secretary Secretary BEGIN previous first secretary first WHILE secretary NIL amp secretary action action DO previous secretary secretary secretary next END IF secretary NIL THEN Services RemoveAction secretary Write secretary name secretary count IF previous secretary THEN first secretary next ELSE previous next secretary next END END END Stop 310 11 2 Testwerkzeugmodul PROCEDURE Show Output the names of all running background actions and other data VAR secretary Secretary BEGIN StdLog Open StdLog Ln StdLog String UtilitiesRepeater next time ms StdLog Int nextTime StdLog Ln StdLog String Action Name Number of Performed Calls of Do StdLog Ln 3 secretary first WHILE secretary NIL DO StdLog String secretary name StdLog Int secretary count StdLog Ln secretary secretary next END StdLog Ln END Show PROCEDURE StopAll Stop all background actions Show how they terminate BEGIN Show WHILE first NIL DO Stop first action Show END END StopAll BEGIN nextTime nextTimeDefault END UtilitiesRepeater Die Nummern in der folgenden Liste von Bemerkungen ent sprechen den Nummern bei den Symbo
515. tcondSupplierOk 3 oo Maschinenmodul 6 3 4 6 3 Von Cleo zu Component Pascal Schritt 3 PROCEDURE Geld_einnehmen Betrag INTEGER Postcondition eingenommener_Betrag OLD eingenommener_Betrag Betrag 1 BEGIN ASSERT au er_Betrieb BEC precondSupplierOk ASSERT Betrag gt 0 BEC precondPar1 Nonnegative INC eingenommener_Betrag Betrag Checklnvariants END Geld_einnehmen PROCEDURE Kaffee_ausgeben Postcondition eingenommener_Betrag OLD eingenommener_Betrag Preis gesammelter_Betrag OLD gesammelter_Betrag Preis 1 BEGIN ASSERT au er_Betrieb BEC precondSupplierOk ASSERT eingenommener_Betrag gt Preis BEC precondSupplierOk DEC eingenommener_Betrag Preis INC gesammelter_Betrag Preis Checklnvariants ASSERT gesammelter_Betrag gt 0 BEC postcondSupplierOk END Kaffee_ausgeben PROCEDURE Geld_zuriickgeben BEGIN ASSERT auBer_Betrieb BEC precondSupplierOk eingenommener_Betrag 0 Checklnvariants ASSERT eingenommener_Betrag 0 BEC postcondSupplierOk END Geld_zur ckgeben BEGIN auBer_Betrieb TRUE END I1Kaffeeautomat Dieses Kaffeeautomatenmodul ist im Unterschied zum Fehler konstantenmodul ein Beispiel fiir ein Modul mit Zustand als solches bietet es Aktionen die den Modulzustand ndern Es geh rt dabei zur Art der Maschinenmodule Seine Abfragen und Aktionen stellen eine abstrakte Maschine dar Kunden k n
516. te und kon strukte es gibt und wie diese sich zusammensetzen Die Syntax wird beschrieben durch Regeln die die Struktur von Program men bestimmen Die Syntax der meisten Programmiersprachen ist weitgehend bis vollst ndig formalisiert Notationen f r syntaktische Regeln sind Grammatiken und Syntaxdiagramme Beide stellen wir in Abschnitt 4 5 vor Grammatiken in der speziellen Auspr gung der erweiterten Backus Naur Form Die Abgrenzung zwischen Syntax und Semantik ist unscharf Es ist durchaus m glich gewisse Eigenschaften einer Sprache alter nativ als semantisch oder syntaktisch festzulegen Eine Frage der Syntax ist etwa ob p q f S 59 4 Programmiersprachen Zeichencode Zahlensystem Prozessor und S peichermodell 60 eine zul ssige Zeichenfolge darstellt eine semantische Frage was die Zeichenfolge bewirkt und eine pragmatische Frage wie verst ndlich sie ist Der Kreis schlie t sich wenn eine Sprache schlecht verst ndliche Konstrukte syntaktisch verbietet Das Beispiel ist ein Ausdruck in C Darstellung im Rechner Zur Darstellung im Rechner geh ren folgende Aspekte 1 Zeichencode Wie werden Zeichen im Rechner dargestellt 2 Zahlensysteme Wie werden Zahlen im Rechner dargestellt 3 Prozessor und Speichermodell Wie werden Konstrukte eines Programms in eine rechnerinterne Darstellung ber setzt Beispielsweise steht das Zeichen a im Rechner als Bitmuster 01100001 Eine Abbild
517. tehen Sie gleichen Vereinba rungen von Gr en eines Grundtyps etwa Betrag INTEGER Preis INTEGER Jedes Objekt ist wie ein Modul zu benutzen siehe Abschnitt 2 2 nur an der Stelle des Modulnamens steht ein Objektname KA1 Geld_zur ckgeben KA2 Geld_einnehmen 60 Allgemein sieht ein Aufruf so aus Objektname Dienstname aktuelle Parameter Wir spezifizieren Klassen wie Module mit der Methode der Spe zifikation durch Vertrag blo die Invarianten hei en hier genauer Klasseninvarianten Die Moduleigenschaft kommt nicht der Klasse sondern ihren Objekten zu Jedes Objekt hat einen eigenen Zustand und ein Verhalten Die Klasse legt die m glichen Zust nde und das Verhalten ihrer Objekte fest Die Klasse selbst hat keinen Zustand und kein Verhalten Die bei Modulen eingef hrte Kunde Lieferant Beziehung ber tragen wir auf Klassen Jede Klasse ist Lieferant von Diensten Eine Klasse kann Kunde anderer Klassen sein Eine Klasse B ist Kunde einer Klasse A wenn in B ein Objekt a der Klasse A ver einbart ist CLASS B CLASS A QUERIES a A ACTIONS Do IN a A END B ENDA Kundenklassen benutzen Lieferantenklassen Die Benutzungs beziehung besteht auch zwischen Modulen und Klassen beide k nnen die Kunden und die Lieferantenrolle spielen ist Typ von Ge Objekt ist Exemplar von 37 2 Spezifizieren Typeigenschaft Tabelle 2 3 Modul und Typeigenschaft Prinzip Formel 2 1 Modulares und objektorienti
518. ten 4 PROCEDURE IN a SetDesc Write BEGIN Write a root END Write Production 5 I PROCEDURE IN source SetDesc Clone Set Deep clone VAR result Set BEGIN NEW result result Copy source RETURN result END Clone Redefinitions of Procedures bound to PartComparable Order Relations PROCEDURE LessEqual tree other Node BOOLEAN PROCEDURE Inorder tree Node BOOLEAN BEGIN RETURN tree NIL OR Inorder tree left amp Has other tree item amp Inorder tree right END Inorder BEGIN RETURN tree other OR Inorder tree END LessEqual PROCEDURE IN a SetDesc LessEqual IN b BG PartComparableDesc BOOLEAN BEGIN WITH b SetDesc DO RETURN LessEqual a root b root ELSE HALT BEC precondParsTypeOk END END LessEqual Definitions of Tree Operations and Procedures bound to Set Same as for ContainersSetsOfString except that item Less tree item replaces item lt tree item item Greater tree item replaces item gt tree item ShallowCopy renames the former Copy see S 328 ff Factory PROCEDURE New Set New empty Set VAR result Set 358 gt 12 1 Polymorphe Mengenklasse f r geordnete Elemente BEGIN NEW result result ChecklInvariants ASSERT result IsEmpty BEC postcondResultOk RETURN result END New Testing Redefinition of Procedu
519. ten erzeugen Hardware bezeichnet die konkrete technische Realisierung eines Rechners der durch abstrakte funktionale Eigenschaften charakterisiert ist Software Bild 4 1 Grundstruktur eines Speicher programmierten Rechners 4 2 Rechner umfasst dagegen die Programme die auf einem Rechner ablau fen k nnen und die T tigkeit der Hardware steuern sowie die dazu geh renden Daten Einsatzregeln und Dokumente Eine Schnittstelle der Hardware zur Software bildet der Befehlsvor rat instruction set des Rechners Die Hardware besteht aus einer Zentraleinheit und Peripherie ger ten Zur Peripherie geh ren Ein Ausgabeger te input out put device f r die Mensch Maschine Interaktion wie Tastatur und Maus zur Eingabe Bildschirm und Drucker zur Ausgabe sowie Hintergrundspeicherger te backing storage device zur dauerhaften Datenhaltung Mit weiteren Ger ten kann ein Rech ner mit seiner Umgebung interagieren und an Rechnernetze angeschlossen sein Der Rechner ist in Digitaltechnik realisiert d h er benutzt dis krete Zust nde anstelle von stetigen Alle Programme und Daten sind bin r codiert d h durch zweiwertige Zust nde dar gestellt anstelle von z B zehnwertigen Mit Zahlen gerechnet wird im Dualsystem anstelle des Dezimalsystems Prozessor Prozessor Hauptspeicher Der Rechner ist logisch und physisch gegliedert in mindestens einen Prozessor der als aktive Komponente die Befehle eines Programms ausf
520. ten von Schnittstelle und Implementation ist in der Softwaretechnik sehr wichtig aber nicht nur dort In vielen Situationen ist das Was zu kl ren bevor man nach dem Wie fragen kann Tabelle 1 1 nennt technische Beispiele Implementation elektronische Bauteile Dr hte Geh use Schnittstelle Ver Anschl sse f r st rker Audioger te und Lautsprecher Netzstecker 1 Einf hrung Analogie Prinzip Analogie 10 Schnittstelle Implementation Verbren ffnungen f r Vergaser Motorblock Kolben nungs Z ndkerzen K hlsystem Kurbelwelle Ventile motor Kurbelwellenende Pleuelstangen Der Entwickler eines CD Spielers oder einer Lautsprecherbox muss nicht wissen aus welchen elektronischen Bauelementen ein bestimmter Verst rker besteht er muss die Anschl sse von Verst rkern mit ihren Kenndaten kennen Die Entwickler von Verst rkern m ssen diese Daten zur Verf gung stellen Der Entwickler einer Z ndkerze muss nicht wissen aus welcher Legierung der Motorblock gegossen und wie lang die Pleuel stange ist er muss das Z ndkerzengewinde und die Daten ber Kompression und Verbrennung kennen Der Entwickler des Motors muss diese Daten zur Verf gung stellen Bei Software ist es hnlich Der Entwickler eines Kundenmoduls kann von der Implementation eines Lieferantenmoduls absehen und sich darauf konzentrieren die Schnittstelle des Lieferanten zu verstehen Der Entwickler des L
521. ter implementieren kann Durch Abstraktion 11 WordChecker ContainersSetsOfString WordWriter gt WordWriter Write Write Bild 10 7 stellt die Benutzungsbeziehung der Module und die Erweiterungsbeziehung der Klassen dar ContainersSetsOfString vereinbart eine Klasse WordWriter und legt fest dass sie eine Aktion Write hat ContainersSetsOfString wei nicht wie es Write implementieren soll also l sst es Write abstrakt Damit ist WordWriter eine abstrakte Klasse ABSTRACT CLASS ContainersSetsOfString WordWriter ACTIONS Write IN word Element IS ABSTRACT END WordWriter 1WordChecker erweitert die Klasse ContainersSetsOfString WordWri ter und redefiniert die Aktion Write in seinem Sinn Damit ist WordWriter eine konkrete Klasse CLASS I1WordChecker WordWriter EXTENDS ContainersSetsOfString WordWriter REDEFINES Write ACTIONS Write IN word ContainersSetsOfString Element END WordWriter 265 10 Statische Klassenstrukturen Semantik Verallgemeinern 1 I Bild 10 8 Abstrakte Namen f r abstrakte Klassen und Dienste 266 Welche Semantik hat Write ContainersSetsOfString WordWriter defi niert Write als abstrakt und legt seine syntaktische Schnittstelle fest den Parameter vom Typ Element es kann jedoch nicht ver traglich spezifizieren wie Write wirkt Jede Erweiterungsklasse von WordWriter kann Write ziemlich beliebig implementieren ohne sich am Namen Write zu orientieren
522. th Institut fiir Computersysteme ETH Ziirich 1987 Contents 1 Introduction 2 Syntax 3 Vocabulary and Representation 4 Declarations and Scope Rules 5 Constant Declarations 6 Type Declarations 6 1 Basic Types 6 2 Array Types 6 3 Record Types 6 4 Pointer Types 6 5 Procedure Types 377 A Component Pascal Language Report 378 6 6 String Types 7 Variable Declarations 8 Expressions 8 1 Operands 8 2 Operators 9 Statements 9 1 Assignments 9 2 Procedure Calls 9 3 Statement Sequences 9 4 If Statements 9 5 Case Statements 9 6 While Statements 9 7 Repeat Statements 9 8 For Statements 9 9 Loop Statements 9 10 Return and Exit Statements 9 11 With Statements 10 Procedure Declarations 10 1 Formal Parameters 10 2 Methods 10 3 Predeclared Procedures 10 4 Finalization 11 Modules Appendix A Definition of Terms Appendix B Syntax of Component Pascal Appendix C Domains of Basic Types Appendix D Mandatory Requirements for Environment 1 Introduction Component Pascal is Oberon microsystems refinement of the Oberon 2 language Oberon microsystems thanks H M ssen b ck and N Wirth for the friendly permission to use their Oberon 2 report as basis for this document Component Pascal is a general purpose language in the tradi tion of Pascal Modula 2 and Oberon Its most important fea tures are block structure modularity separate compilation static typing with strong type checking also across module boun
523. tiert ist eine kleine Teilmenge von Compo nent Pascal Beispielsweise versteht er die Kommandoauf ruffolge im Men fenster von Bild 5 14 deren Effekt die Ausgabe der Zeichenkette It is not 2 der Ganzzahl 8 und eines Zeilenum bruchzeichens ist Das Modul StdLog dient der Standardausgabe in das Log Fenster Kommandos haben eine eingeschr nkte Signatur d h sie k n nen als Parameter maximal zwei Zeichenketten gefolgt von maximal zwei Ganzzahlen haben Aktuelle Parameter sind durch aufeinander folgende Kommandoaufrufe durch zu trennen Aufrufe mit Parametern und Aufruffolgen m ssen in doppelte Hochkommas eingeschlossen sein damit der Kom mandointerpreter Anfang und Ende erkennen kann Kommen Zeichenketten als Parameter vor so sind sie mit einfachen Hoch kommas zu klammern Mit den in Abschnitt 4 5 erworbenen Kenntnissen k nnen wir die Syntax dieser Sprache in EBNF ausdr cken 103 5 Die Entwicklungsumgebung BlackBox Formel 5 4 Syntax der Sprache des Kommando interpreters Hyperverbindung 104 CommandCall SimpleCall CallSequence SimpleCall ident ident CallSequence Call Call Call SimpleCall string string integer integer SimpleCall integer integer string char Die lexikalischen Einheiten sind in 4 6 1 3 S 70 definiert Der Kommandointerpreter lasst sich auch tiber ein
524. tierung 7 3 4 Defaultlayout 2 Jedes Kommando ruft am Ende Zustand_ bertragen auf damit die Dialogbox nach einer Interaktion stets den Zustand von I1Kaffeeautomat darstellt Sonst k nnten vom Benutzer ver n derte Felder mit anderen Werten Verwirrung stiften 3 Geld_zur ckgeben soll den zur ckzugebenden Wert von I1Kaffeeautomat eingenommener_Betrag im Meldungsfeld ausge ben eingenommener_Betrag ist eine Zahl w hrend Meldung eine Zeichenkette ist Der Wert ist vom Typ INTEGER in den Typ ARRAY n OF CHAR zu konvertieren Das Standardmodul Strings bietet dazu eine Prozedur IntToString Die lokale Variable Betrag nimmt den konvertierten Wert auf Ein Namenskonflikt mit dem Verbundfeld Anzeige Betrag ist ausgeschlossen da die Gr en in disjunkten Namenr umen vereinbart sind Die Zeichenkette Betrag ist mit literalen Zeichenketten zu einem Satz zu kombinieren Das Verketten von Zeichenket ten erledigt in Component Pascal ein Operator der mit dem Pluszeichen dargestellt ist 4 Anzeige ist zu initialisieren Dazu gen gt ein Aufruf von Zustand_ bertragen davon unber hrte Felder sind implizit mit Defaultwerten initialisiert Betrag mit 0 Meldung mit der leeren Zeichenkette Nachdem das Kommandomodul bersetzt ist erstellen wir eine Dialogbox dazu Dialogbox Eine einfache und direkte Vorgehensweise ist sich eine Dialog box automatisch erzeugen zu lassen Dazu ist der Mentibefehl Controls New
525. tiesin Programm 12 7 optimiert den Zeiger model der Objektstruktur von Bild 12 12 weg Die mit angedeuteten Prozedurr mpfe folgen alle demselben Muster wie ReadBool 371 12 Vom Entwerfen zum Testen 12 2 6 Implementieren des Ausgabemoduls Es folgt die Implementation des Ausgabemoduls UtilitiesOut Programm 12 8 MODULE UtilitiesOut Ausgabemodul IMPORT Ports Strings TextMappers TextModels TextRulers TextViews Views CONST tabDistanceDefault 10 viewHeight 10 viewWidth 200 VAR modelCount INTEGER title ARRAY 100 OF CHAR model TextModels Model formatter TextMappers Formatter PROCEDURE Open BEGIN Views OpenAux TextViews dir New model title END Open PROCEDURE SetTabs tabDistance INTEGER VAR i INTEGER ruler TextRulers Ruler BEGIN ASSERT tabDistance gt 0 ruler TextRulers dir New NIL FOR i 1 TO viewWidth DIV tabDistance DO TextRulers AddTab ruler i tabDistance Ports mm END formatter WriteView ruler A ruler is a view thus can be written to the text END SetTabs PROCEDURE OpenNew IN newTitle ARRAY OF CHAR VAR modelCountStr ARRAY 5 OF CHAR BEGIN INC modelCount Strings IntToString modelCount modelCountStr title newTitle modelCountStr model TextModels dir New formatter ConnectTo model Open 372 12 2 Entwurfsmuster SetTabs tabDistanceDefault END OpenNew PROCEDURE Pos
526. tische Benutzungsstruktur des Szenariums ruft auf ruft auf ruft auf Kaffeeautomat FT De Tasse In Bild 9 4 sind Kunde Kaffeeautomat und Tasse als Objekte zu interpretieren Es handelt sich um die dynamische Aufrufstruk tur eines Szenarios d h eines Ablaufs des Szenariums Die Schreibweise Tasse kennzeichnet ein Exemplar der Klasse Tasse vor dem kann ein Objektname stehen Im Beispiel hat das Tassenobjekt aber zwei Namen beim Kunden hei t es mein_Haferl beim Kaffeautomaten Pott 9 2 Programm 9 3 Menge als generische Klasse Generische Klasse 9 2 Mengen Mengen Ein zweites Beispiel f r eine Klasse liefert die in 1 2 2 S 8 einge f hrte Menge Es ist motiviert durch Anwendungen die meh rere Mengen eben Exemplare einer Mengenklasse ben tigen siehe Abschnitt 10 3 Wir modellieren Set als Cleo Klasse indem wir wie in Abschnitt 2 5 vorgehen Das Schl sselwort MODULE durch CLASS ersetzen Dabei kombinieren wir die Pro gramme 2 7 S 34 und 8 3 S 198 Von 8 6 S 206 bernehmen wir das Konstrukt der TYPES Liste um eine generische Menge zu spezifizieren Der Elementtyp Element ist offen gelassen erst bei einer Implementation der Klasse ist er zu konkretisieren CLASS Set TYPES Element Generic element type QUERIES IsEmpty BOOLEAN Has IN x Element BOOLEAN POST result IMPLIES NOT IsEmpty ACTIONS Put IN x Element POST Has x Remove IN x Element POST NOT Has
527. tonen wir die wichtigen Namen durch Fettschrift DEFINITION ContainersStrings IMPORT BasisGenerals P2AString POINTER TO ARRAY OF CHAR String POINTER TO StringDesc StringDesc EXTENSIBLE RECORD BasisGenerals ComparableDesc BasisGenerals PartComparableDesc BasisGenerals AnyDesc string P2AString IN source BasisGenerals AnyDesc Clone BasisGenerals Any NEW ABSTRACT VAR target BasisGenerals AnyDesc Copy IN source BasisGenerals AnyDesc NEW ABSTRACT IN a BasisGenerals AnyDesc Equal IN b BasisGenerals AnyDesc BOOLEAN NEW ABSTRACT VAR target BasisGenerals AnyDesc InitDefault NEW EMPTY VAR target BasisGenerals AnyDesc InitRandom NEW ABSTRACT VAR a BasisGenerals AnyDesc Swap VAR b BasisGenerals AnyDesc NEW IN a BasisGenerals AnyDesc Unequal IN b BasisGenerals AnyDesc BOOLEAN NEW IN a BasisGenerals AnyDesc Write NEW EMPTY IN a BasisGenerals PartComparableDesc Greater IN b BasisGenerals PartComparableDesc BOOLEAN NEW IN a BasisGenerals PartComparableDesc GreaterEqual IN b BasisGenerals PartComparableDesc BOOLEAN NEW IN a BasisGenerals PartComparableDesc Less IN b BasisGenerals PartComparableDesc BOOLEAN NEW IN a BasisGenerals PartComparableDesc LessEqual IN b BasisGenerals PartComparableDesc BOOLEAN NEW ABSTRACT VAR a BasisGenerals ComparableDesc SetMax IN b c BasisGenerals ComparableDesc NEW VAR a BasisGenerals C
528. traversierungen depth first traversal im Unter schied zu den Breitentraversierungen breadth first traversal 315 11 Dynamische Objektstrukturen 11 3 1 3 Beispiel Bild 11 15 Geordneter Binarbaum exemplarisch 316 Geordneter Binarbaum Baumknoten k nnen Daten bzw Objekte enthalten Die Men genklasse von ContainersSetsOfString implementieren wir mit einem Baum der Zeichenketten speichert und zwar so ange ordnet dass ein gesuchtes Element schnell zu finden ist B ume mit dieser Eigenschaft hei en geordnete Bin rb ume oder bin re Suchb ume Dabei ist wesentlich dass die Menge der Datenwerte vollst ndig geordnet ist F r den Datentyp muss also eine Ordnungsrelation definiert sein Da dies f r Zeichen ketten und Zeichen zutrifft gen gen Zeichen um das Konzept zu veranschaulichen F gen wir in einen geordneten Bin rbaum die Zeichen LINKER der Reihe nach ein so erh lt er diese Gestalt Alle Zeichen links der Wurzel E I K sind kleiner als das Zei chen der Wurzel L alle rechts davon gr er N R Entspre chendes gilt f r jeden Teilbaum Also definieren wir rekursiv Ein geordneter Bin rbaum binary search tree ist ein Bin rbaum der Daten Objekte mit einer Ordnungsrelation lt kleiner und vollst ndig geordnetem Wertebereich so speichert dass alle Daten im linken Teilbaum kleiner als das Datenelement in der Wurzel sind alle Daten im rechten Teilbaum gr er a
529. tring SetDesc gebunden ist als aktuellen Parameter ein Objekt namens wordWriter vom Typ l1WordChecker WordWriter Desc ForAllDo hat einen formalen Referenzparameter namens action vom Typ ContainersSetsOfString ActionDesc Sollte unsere L sung an der statischen Typpr fung scheitern weil die Typen des formalen und des aktuellen Parameters ver schieden sind Ist die L sung nicht typsicher Die in 10 2 1 genannten Regeln beantworten diese Fragen Im Beispiel sind I1WordChecker WordWriterDesc und ContainersSetsOf String ActionDesc verschiedene Typen aber I1WordChecker WordWriter Desc ist eine Erweiterung von ContainersSetsOfString ActionDesc es erbt alle Merkmale von ContainersSetsOfString ActionDesc Nach der Typvertr glichkeitsregel ist der aktuelle Parameter wordWriter mit dem formalen Parameter action vertr glich Der formale Referenzparameter action ist eine polymorphe Gr e Er erwartet ein Objekt des Typs ContainersSetsOf String ActionDesc das es nicht geben kann da dieser Typ abstrakt ist und erh lt ein Objekt des Typs I1WordChecker WordWriterDesc Bild 10 9 Referenzparameter und dynamisches Binden exemplarisch Dynamisches Binden Fazit 10 3 W rter sammeln Rechtschreibung pr fen im Einklang mit der Einsetzungsregel Der statische Typ von action ist ContainersSetsOfString ActionDesc sein dynamischer Typ zum Zeitpunkt des Aufrufs setForAllDo wordWriter ist I1WordChecker WordWriterDesc aktu
530. trittspunkt hei t Eintrittsmodul Vom Eintrittspunkt h ngt ab wie sich ein Programmablauf ver h lt Ein Programm kann also mehrere Eintrittspunkte haben Es kann Aktionen geben die keine Eintrittspunkte sind diese Aktionen k nnen intern vom Programm benutzt werden Ein Programm hei t vollst ndig wenn es alle von seinen Ein trittsmodulen gebrauchten Module umfasst Die meisten Pro gramme die wir betrachten sind unvollst ndig Es sind ein zelne Module oder Modulgruppen bei denen wir gebrauchte Module aus der Betrachtung ausschlie en Wann muss ein Pro gramm vollst ndig sein Je sp ter der Zeitpunkt umso besser Vollst ndigkeit zur bersetzungszeit bedeutet dass alle gebrauchten Module gemeinsam bersetzt werden m ssen Dies ist bei gro en Programmen wegen des Aufwands bei 4 9 Fehlerarten Sicherheit 4 9 Fehlerarten und Sicherheit kleinen Anderungen ung nstig aber von manchen lteren Programmiersprachen gefordert Vollst ndigkeit zur Bindezeit bedeutet dass alle gebrauch ten Module zu einem ausf hrbaren Ganzen zusammenge bunden werden m ssen Dies ist ung nstig da wiederver wendbare Module zu jedem Objektprogramm dazugebunden werden und so unn tig Speicherplatz ver schwenden Dieser Ansatz ist aber noch verbreitet Vollst ndigkeit zur Ladezeit bedeutet dass gebrauchte Module gemeinsam geladen und dabei auch gebunden werden sofern sie nicht schon geladen sind Dies ist g nstig weil
531. ttet Beispiele f r kompatible Komponenten finden sich leicht Ein Dieselmotor erwartet Diesel l ein Ottomotor Benzin Motor l geh rt in den Motor Benzin in den Tank Mit Salzwasser l uft kein Verbrennungsmotor in der Software kann ein Dienst der mit Parameterwerten falschen Typs aufgerufen wird nicht kor rekt arbeiten Bild 2 5 veranschaulicht das Konzept der Typpr fung bei der Parameter bergabe Aktuelle und formale Parame ter m ssen passen wie die Schraube in die Mutter und der Stecker in die Steckdose 27 2 Spezifizieren Bild 2 5 Typbindung und Typpr fung 2 4 Dynamische Semantik 28 Aufruf aktueller Parameter Geld_einnehmen 50 10 Vy V Ausdruck Name Pe Art Typ y V Geld_einnehmen IN Betrag INTEGER formaler Parameter Vereinbarung Spezifikation durch Vertrag Trotz aller Priifungen die Programme 2 1 bis 2 4 sind als Spezi fikationen unvollstandig denn sie beschreiben nicht was die Dienste tun Die Namen der Dienste geben dem Entwickler bestenfalls Hinweise Ein Kunde des Kaffeeautomaten Pro gramms 2 1 kann zwar keinen Parameter falschen Typs tiberge ben aber falsche Parameterwerte erlaubt die Spezifikation Zudem wissen wir nicht was etwa bei der Aufruffolge Kaffeeautomat Kaffee_ausgeben Kaffeeautomat Geld_zur ckgeben passiert liefert der Automat Kaffee und Geld Der physische Automat w rde wohl nicht einmal reagieren Wir haben ver gessen M nzen einzu
532. ttributes are used to restrict and document the desired usage of a method NEW ABSTRACT EMPTY and EXTENSI BLE NEW must be used on all newly introduced methods and must not be used on redefining methods The attribute helps to detect inconsistencies between a record and its extension when one of the two is changed without updating the other Abstract and empty method declarations consist of a procedure header only Abstract methods are never called A record con taining abstract methods must be abstract A method redefined by an abstract method must be abstract An abstract method of an exported record must be exported Calling an empty method has no effect Empty methods may not return function results and may not have OUT parameters A record containing new empty methods must be extensible or abstract A method rede fined by an empty method must be empty or abstract Abstract or empty methods are usually redefined implemented in a record extension They may not be called via super calls A con crete nonabstract record extending an abstract record must implement all abstract methods bound to the base record Concrete methods which contain a procedure body are either extensible or final no attribute A final method cannot be rede fined in a record extension A record containing extensible meth ods must be extensible or abstract If v is a designator and M is a method then v M denotes that method M which is bound to the dynami
533. twerfen zum Testen 12 1 6 Component Pascal Infixnotation in Programmier sprachen Redefinieren oder berladen Programm 12 1 Schnittstelle des Konzeptklassen moduls 342 Bild 12 5 integriert die Bilder 12 1 12 2 und 12 3 mit dem Test szenarium von Bild 12 4 abstrahiert es Aus diesem Entwurf k nnen wir ein Muster extrahieren nach dem wir L sungen zu hnlichen Aufgaben gestalten Implementieren der Konzeptklassen Die Entwurfsideen sind erl utert die Implementierung der Klassen beginnt Zun chst kl ren wir die technische Frage wie eine Relation in die Implementationssprache umzusetzen ist In Component Pascal formulieren wir die Relationen lt gt lt gt als typgebundene boolesche Funktionen Die Schreibweise f r relationale Ausdr cke lautet damit x Equal y statt X y x Unequal y statt x y x Less y statt x lt y x Greater y statt x gt y x LessEqual y statt x lt y x GreaterEqual y statt x gt y Exkurs Component Pascal beschr nkt die Infixnotation mit Operator symbolen wie lt gt lt gt auf Standardtypen und bietet dem Programmierer nur die M glichkeit eigene Klassen mit benann ten parametrisierten Funktionen auszustatten wobei Aufrufe in Punktnotation mit geklammerten Parametern erscheinen Die M chtig keit der Sprache Aufgabenl sungen zu modellieren schr nkt dies nicht ein denn es handelt sich um eine Frage der Syntax nicht der Sema
534. tzung NOT au er_Betrieb gilt Geld_einnehmen darf immer aufgerufen werden aber nur mit nichtnegativem Betrag Geld_zuriickgeben ist auch stets aufrufbar Kaffee_ausgeben darf nur aufgerufen werden wenn der Auto mat mindestens den Preis einer Tasse Kaffee eingenommen hat Dieser Zustand ist nur zu erreichen indem Geld_einnehmen gen gend oft mit gen gend gro en Teilbetr gen aufgerufen wird Ist der Kaffeeautomat mit Programm 2 5 vollst ndig spezifi ziert d h verhalten sich alle m glichen Implementationen zu dieser Spezifikation genau gleich Nein Die Spezifikation ist unvollst ndig oder partiell da die Nachbedingungen nur fest legen welche Teilzust nde sich ndern aber nicht welche gleichbleiben Eine genauere Spezifikation f r Geld_einnehmen lautet Geld_einnehmen IN Betrag INTEGER PRE NOT au er_Betrieb Betrag gt 0 POST eingenommener_Betrag OLD eingenommener_Betrag Betrag Preis OLD Preis gesammelter_Betrag OLD gesammelter_Betrag Sie berl sst der Implementation nur noch die Entscheidung ob sich au er_Betrieb ndert oder nicht Da Aktionen oft nur wenig ndern gem Leitlinie 1 2 S 5 lassen wir der Einfachheit hal ber zus tzliche Nachbedingungen der Art x OLD x weg Dies gilt insbesondere bei Abfragen die ja generell nichts ver ndern Res mieren wir Zur Spezifikation durch Vertrag brauchen wir die Aussagenlogik Einfache logische Aussagen kennen jedoch keine Ze
535. uck undefiniert ist a IMPLIES b Lange oder vollst ndige Auswertung bedeutet dass jeder Operand bei einer Operation vollstandig ausgewertet wird und dann das Ergebnis gem Tabelle 8 3 bestimmt wird Nach diesem Ansatz sind die Konjunktion und die Disjunk tion kommutativ d h die Operanden diirfen vertauscht wer den ohne dass sich der Wert der Aussage ndert Demnach ist der obige Ausdruck 1 quivalent mit z B x result item AND result lt LEN x OR result notFound 8 2 Zeichen z hlen Ist x result item undefiniert so ist sowohl Ausdruck 1 als auch Ausdruck 2 undefiniert Die Reihenfolge der Auswertung der Operanden einer Ope ration ist nicht durch die Sprache festgelegt sondern bleibt der Implementation des bersetzers berlassen 2 Die kurze Auswertung definiert f r die Konjunktion die Disjunktion und die Implikation eine andere Semantik Tabelle 8 4 Kurze Auswertung Ausdruck wird ausgewertet wie Funktionsrumpf boolescher a AND b IF a THEN RETURN b ELSE RETURN FALSE END Ausdr cke aORb IF a THEN RETURN TRUE ELSE RETURN b END a IMPLIES b IF NOT a THEN RETURN TRUE ELSE RETURN b END Bei kurzer oder bedingter Auswertung werden die Operan den von links nach rechts ausgewertet wobei die Auswer tung abgebrochen wird sobald das Ergebnis feststeht d h der zweite Operand wird gef nicht ausgewertet Der zweite Operand muss also nicht unbedin
536. udo code notierte Algorithmus WHILE Maschinenzustand aktiv DO greife auf die Speicherzelle zu deren Adresse im Befehlsz hler steht hole von dort den n chsten Befehl in das Befehlsregister setze den Befehlsz hler weiter f hre den Befehl im Befehlsregister aus END Oft werden Befehle linear ausgef hrt Sie stehen in aufeinander folgenden Speicherzellen geordnet nach aufsteigenden Adres sen Doch da Programme mit nur linearer Befehlsfolge zu starr sind bewirken spezielle Befehle ein Abweichen von der linearen Befehlsausf hrung Damit lassen sich abh ngig von Registerin halten andere Befehlsfolgen ausf hren oder Befehlsfolgen mit anderen Daten wiederholen Nach der Ausf hrung eines Sprungbefehls mit der Adresse i wird ein Befehl mit der Adresse j i 1 geholt bei einem bedingten Sprungbefehl nur falls eine Bedingung erf llt ist sonst wird bei i 1 fortgesetzt Ein Aufrufbefehl ist ein Sprungbefehl der einen sp teren R ck sprung zu dem Befehl erlaubt der nach dem Aufrufbefehl steht 55 4 Programmiersprachen 4 3 Sprache der Maschine Sprache der Anwendung 4 4 56 Die Befehlsausf hrungszeiten liegen heute im Nanosekunden bereich also die Prozessorleistung bei einigen 100 Millionen Befehlen pro Sekunde und die Speicherkapazit t bei einigen Hundert Megabytes Damit genug ber Rechner kehren wir zum Thema Programmiersprachen zur ck Klassifikation von Implementationssprachen Man kann Programmi
537. ufrufer zum Aufgerufe nen und scheidet daher fiir Ausgabeparameter aus Ein Referenzparameter ist durch einen impliziten konstanten Bezug auf eine Variable den aktuellen Parameter realisiert Bezug bedeutet dass der gespeicherte Wert des formalen Para meters nicht ein Wert seines vereinbarten Typs ist sondern sich auf einen solchen Wert bezieht Implizit bedeutet dass beim Zugriff auf einen formalen Parameter automatisch auf die bezo gene Variable zugegriffen wird nicht auf den Bezug Konstant bedeutet dass der Bezug nicht ge ndert werden kann formaler Referenzparameter von P VAR x Vector x Ref Vector aktueller Parameter beim Aufruf P y 0 1 2 3 4 5 y 6 0 4 9 0 5 1 2 4 9 3 9 REAL REAL REAL REAL REAL REAL Vector Implementation Wert oder Referenz bergabe 7 4 3 7 4 3 1 7 4 Kaffeeautomat mit bewachter Dialogbox Bild 7 16 veranschaulicht diesen Sachverhalt Konkret imple mentiert sind Beziige durch Adressen Die Speicherzelle eines formalen Referenzparameters enthalt die Adresse des aktuellen Parameters Bei strukturierten Typen als Eingabeparameter gibt es zwei M glichkeiten Referenz bergabe ist zu bevorzugen da sie das Kopieren des aktuellen Parameters spart und somit effizienter ist Der Kopieraufwand ist bei Grundtypen vernachlassigbar aber nicht bei gro en Reihungen oder Verbunden Die weniger effiziente Wert bergabe ist trotzdem bei strukturierten Ty
538. ufwand 2 3 und ld Umfang 2 8 Entwurf ContainersSetsOfString exportiert eine Klasse f r Mengen von Zei chenketten Eine Menge implementieren wir durch einen geord neten Bin rbaum Der Baum ist ein privater Lieferant f r die Menge 11 Dynamische Objektstrukturen Bild 11 17 l l Entwurfsmodell des i implementiert Sia Mengenklassen on nu a moduls geordneter Elemente Bin rbaum 2 Empf nger typgebundene Prozeduren ffentlich privat Bild 11 17 zeigt die statische Struktur des Entwurfs mit dem wir unterschiedliche Programmierstile bei der Menge und beim Baum demonstrieren Einzelne Entscheidungen stellen wir tabellarisch einander gegen ber Tabelle 11 1 Menge und Baum 11 3 2 1 318 Klasse abstrakter Datentyp ffentlich exportiert privat modulintern vertraglich spezifiziert ohne Vertrag erweiterbar nicht erweiterbar Zeigertyp Set f r Referenzsemantik Zeigertyp Node f r Referenzsemantik Verbundtyp SetDesc f r Wertsemantik anonymer Verbundtyp keine Wertsemantik typgebundene Prozeduren Empf nger vom Iyp SetDesc Prozeduren Parameter vom Typ Node an Baumprozedur delegierend elementar iterativ rekursiv oder rekursive lokale Prozedur benutzend Mengenoperationen als gew hnliche Prozeduren Typen Als Typen zu vereinbaren sind der exportierte Elementtyp Mengenoperationen als Funktionen Element
539. ukturen 11 1 3 4 Bild 11 3 Klassendiagramm des Testszenariums Wie viele Mengen Zufallswerte 296 Das Testverfahren kann nicht besser sein als die vertragliche Spezifikation des Pr flings Je unvollst ndiger die Spezifika tion desto weniger Fehler kann das Verfahren entdecken Entwurf des Einzeltests Nach der geleisteten Vorarbeit k nnen wir uns auf Schritt 2 des Testverfahrens 11 1 3 3 konzentrieren TestSetsOfString erweitert die Klasse UtilitiesRepeater Action zu Test und redefiniert deren Pro zedur Do sodass sie einen Einzeltest von ContainersSetsOfString darstellt Bild 11 3 kombiniert die Bilder 11 1 11 2 und 10 8 S 266 zu einem Entwurfsmodell TestSetsOfString 1 im l Action MathRandom ContainersSetsOfString UtilitiesRepeater Eine Entwurfsentscheidung ist die Mengenoperationen mit mehreren Mengenobjekten zu testen Die Anzahl der Mengen legen wir mit einer symbolischen Konstante numberOfSets fest mit minimalem Wert 3 Einem Test Objekt ordnen wir numberOfSets Set Objekte fest zu In Bild 11 3 erscheint dies als Komposition in der Implementation vereinbart Test die Reihung set ARRAY numberOfSets OF ContainersSetsOfString SetDesc Nat rlich benutzt Test seine Set Objekte seine Pr flinge Ein Test Objekt besteht weiter aus einem Writer Objekt dessen Typ eine Erweiterung von ContainersSetsOfString Action ist vergleiche Bild 10 8 S 266 Test erzeugt zuf llige T
540. ul Ihre L sung von Aufgabe 6 2 187 7 Ein und Ausgabe 188 Voraussetzung 8 1 Ein Ausgabe Behalter Grobentwurf des Algorithmus Strukturiertes und modulares Programmieren Hier l sen wir zwei Aufgaben wobei wir Teilaufgaben Modulen zuordnen und Prozeduren implementieren Dabei lernen wir weitere algorithmische Strukturen und zugeh rige Sprachele mente von Component Pascal kennen Gelegentlich spezifizieren wir Dienste vertraglich mit pr dika tenlogischen Aussagen Es ist nicht notwendig aber hilfreich wenn der Leser Grundbegriffe der Pr dikatenlogik erster Stufe kennt insbesondere die Quantoren f r alle und es gibt ein und die zugeh rigen Rechenregeln Zeichen sammeln Ein Programm soll die Zeichen eines Eingabetextes einlesen und als geordnete Folge ausgeben wobei jedes gelesene Zeichen nur einmal in der Ausgabefolge vorkommt Entwurf Die Aufgabe ist klein genug f r ein einzelnes Kommando Wir ordnen das Kommando dem Modul I1CharCollector zu und nen nen es Do Die Benutzungsoberfl che ist der Kommandoaufruf iCharCollector Do Auf sich selbst angewandt liefert er die Ausgabe 1CDlacehlort Die in Leitlinie 7 4 S 153 empfohlene Trennung von Funktion und Ein Ausgabe greift hier nicht weil der funktionale Teil zu gering ist F r die Ein Ausgabe verwenden wir die Standard module In und Out Von einem Zeichen ist nur gefragt ob es im Eingabetext vor kommt oder nicht d h
541. um Kaffeeautomaten Dazu erinnern wir an zwei bereits definierte Begriffe Kommandomodul Ein Kommandomodul ist ein Modul das Elemente f r eine Benutzungsoberfl che bereitstellt die aus Kommandoaufru fen Men s oder Dialogboxen bestehen kann siehe S 13 Kommando In BlackBox ist ein Kommando eine gew hnliche Prozedur mit einer eingeschr nkten Signatur aus der Schnittstelle eines Moduls siehe 5 3 7 S 101 7 1 Kaffeeautomat als Kommandomodul Wir k nnen das in Programm 6 3 S 132 implementierte Modul I1Kaffeeautomat formal als Kommandomodul betrachten und Auf rufe seiner Aktionen als Kommandoaufrufe in einem Textfenster zusammenstellen benutzen und als Dokument speichern siehe Bild 7 1 Abfragenaufrufe akzeptiert der Kommandointerpreter nicht Einen Text mit Kommandoaufrufen und Aufrufsymbolen nennen wir Aufrufmen Bild 7 1 Aufrufmen zu Kaffeeautomat Kaffesautomat Freis MK steesutomat initisisieren 60 Betrag H Katecautomat Geld_einnehmen 10 liKatfecautomat afer _ausgeben liKaffeeautonat Geld zurbckgeben Klicken wir nachdem I1Kaffeeautomat bersetzt ist zuerst auf das Aufrufsymbol vor Kaffee _ausgeben so passiert nicht das Gew nschte sondern es erscheint ein Trapfenster 149 7 Ein und Ausgabe Bild 7 2 Trapfenster zum Aufruf von Kaffee_ausgeben Bild 7 3 Trapursache in Kaffee_ausgeben 150 TRAP 20 precondition violated Kaffeesutomat kaffee_ausgeben 0000014
542. um das Element nicht enth lt Diese Aufgabe ist mit einem iterativen Algorithmus l sbar sodass wir sie nicht n her disku tieren Put Das Einf gen eines Elements item mit der Aktion Put l sst sich ebenfalls iterativ implementieren doch die rekursive L sung ergibt sich direkt aus der Baumstruktur Falls der Baum leer ist erzeuge einen neuen Knoten und ordne ihm item zu sonst falls item kleiner als das Element der Wurzel ist f ge item in den linken Teilbaum ein sonst falls item gr er als das Element der Wurzel ist f ge item in den rechten Teilbaum ein sonst ist item bereits im Baum enthalten und nichts zu tun Den Algorithmus setzen wir in diese Component Pascal Proze dur um 322 Remove Bild 11 19 Baum nach Entfernen eines Elements 11 3 Mengenklasse f r Zeichenketten PROCEDURE Put VAR tree Node item Element BEGIN ASSERT item NIL BEC precondParsConsistent IF tree NIL THEN NEW tree tree item item ELSIF item lt tree item THEN Put tree left item ELSIF item gt tree item THEN Put tree right item END END Put Auch das Entfernen eines Elements mit der Aktion Remove for mulieren wir rekursiv Aufgabe 11 2 verlangt eine iterative L sung Zu beachten ist dass der Knoten mit dem gefundenen Element nicht einfach gel scht werden kann seine Teilb ume m ssen erhalten bleiben und wieder so in den Baum eingeh ngt werden dass seine Ordnung erhalten bleibt Ist item
543. unden mehr verlangt mit der zus tzlichen Vorbedingung Pott leer aber auch mehr von ihm Wir zeigen warum das so ist Pott ist eine Tasse und Tasse bietet voll nur als Nachbedingung von f llen Also muss die Implementation von Kaffee_ausgeben Pott f llen aufrufen um die Nachbedingung Pott voll zu gew hrleisten Tasse fordert jedoch leer als Vorbedingung von f llen Da Kaffee_ausgeben den Pott vom Kunden als Parameter erh lt reicht es die Vorbe dingung von f llen als Pott leer an den Kunden weiter sonst m s ste es selbst den Pott leeren So kann es getrost Pott f llen aufrufen 233 9 Objektorientiertes Programmieren Aufruf Bild 9 3 Benutzungsstruktur des Kaffee Szenariums statisch Bild 9 4 Aufrufstruktur eines Kaffee Szenarios dynamisch 234 Da f llen von Tasse die Nachbedingung voll garantiert kann auch Kaffee_ausgeben seinem Kunden Pott voll zusichern Um die Aktion Kaffee_ausgeben aufrufen zu k nnen braucht es eine Tasse die von einem Kunden zu vereinbaren ist mein_Haferl Tasse Der Aufruf lautet damit Kaffeeautomat Kaffee_ausgeben mein_Haferl und das Trinken oder Ausschtitten sieht etwa so aus WHILE NOT mein_Haferl leer DO mein_Haferl leeren END So gest rkt untersuchen wir die Beziehungen zwischen den beteiligten Modulen Klassen und Objekten benutzt benutzt benutzt Kaffeeautomat re Tasse In Bild 9 3 ist Tasse als Klasse zu interpretieren Es handelt sich um die sta
544. ung 9 4 2 Cleo 9 4 Von der Spezifikation zur Implementation sondern innerhalb der Klammern RECORD und END erscheinen ohne das Schl sselwort PROCEDURE um den Zusammenhang zwischen Typ und typgebundenen Prozeduren zu verdeutli chen Das Feld set erscheint nicht in der Schnittstelle weil es im Sinne der Datenkapselung privat ist Das Modul ContainersSetsOfChar exportiert nur Typen eine Klasse f r die Menge und den Elementtyp der Menge Da es keine Pro zeduren exportiert hat es keinen sichtbaren Zustand und geh rt zur Art der Module ohne Zustand und zwar zu den Typenmo dulen Ein Typenmodul stellt eine Schnittstelle aus Typen zur Verf gung Kunden k nnen diese Typen nutzen um Gr en zu vereinbaren Der im Beispiel vorliegende Spezialfall ist das Klassenmodul Es definiert eine oder mehrere Klassen Ein Problem haben wir fast vergessen Die Initialisierung von Objekten Beim Mengenmodul Programm 6 6 S 138 sorgt die Defaultinitialisierung daf r dass die Menge nach dem Laden leer ist Bei der Vereinbarung eines Mengenobjekts durch VAR set ContainersSetsOfChar Set gilt das nur wenn die Vereinbarung global ist in einem Modul aber nicht wenn sie lokal ist in einer Prozedur Ein lokales Objekt set ist nach der Vereinbarung in einem undefinierten Zustand es wird wie andere Variablen nicht implizit initialisiert Also muss es der Programmierer explizit durch eine Anweisung initialisieren Im Beispiel eignet sich Wi
545. ung areas Sh Ree ne 233 9 2 Mengen nun En Dae ee eves 235 93 Vom Modul zur Klasse nnnnneen 236 9 3 1 Gemeinsamkeiten ueeennneeneeennnn 237 9 32 Unterschiede 237 9 4 Von der Spezifikation zur Implementation 239 9 4 1 Menge als Klasse nneennnneenee 241 9 4 2 Transformationsschema eeeene 245 xU Inhaltsverzeichnis xvi 10 11 9 5 Von der abstrakten Datenstruktur zum abstrakten Da teny p reee aeran enra EERE EA EEE RETA 246 9 5 1 Transformationsschema eeene 247 9 6 Zusammenfassung nneenennenenensnnennnnene 248 9 7 Literaturhinweise useescesseeseesnensnnnensneeneenneenennennnnen 249 9 8 bungen Nennen TEE 249 Statische Klassenstrukturen eenenenenn 251 10 1 Fahrscheinautomaten cccceccceseececeesecseecsecseeeeees 251 10 1 1 Generalisieren spezialisieren 252 10 1 2 Beh lter als abstrakte Klasse 253 10 1 3 Warenautomat als abstrakte Klasse 255 10 1 4 Klassenstruktur enennneen 257 10 2 Erweiterung von Klassen uunennnnemenee 258 10 2 1 Klasse als Typ wee e serene nein 258 10 2 2 Optionen der Anpassung ou 259 10 2 3 Benutzen oder erweitern nneeeee 260 10 3 W rter sammeln Rechtschreibung pr fen 261 10 3 ENtWUTE 8 2 2 anereee 261 10 3 2 Abstrahieren von der Ausgabe 263 10 3 3 Polymorphie und dynamisches Binden
546. ung c A gt B die jedem Zeichen ae A aus einem Zeichensatz A genau ein Zeichen c a b B aus einem Zeichensatz B zuordnet ist ein Code c a hei t codierte Darstel lung von a Die uns gebr uchlichen Zeichen werden zwecks maschineller Speicherung bertragung und Verarbeitung bin r codiert Die codierte Darstellung eines Zeichens als Dualzahl interpretiert hei t Ordnungszahl des Zeichens Aus der nat rli chen Ordnung der Zahlen folgt die k nstliche Ordnung der Zei chen Daher gibt es ein kleinstes und ein gr tes Zeichen Zu 2 ein Beispiel mit Zahlen Die Dezimalzahl 123 erscheint im Rechner als Dualzahl 01111011 Zahlen werden zur Speicherung und Verarbeitung meist in das Dualsystem konvertiert da die ses besser als das Dezimalsystem zur Rechnertechnik passt Au erdem haben Zahlen einen beschr nkten Wertebereich Gleitpunktzahlen auch beschr nkte Genauigkeit weil sie in Speicherpl tzen fester Bitgr e stehen Zum Aspekt 3 betrachten wir als Beispiel die Zuweisung assi gnment Xi 1 die der Zahlenvariable x den Wert 1 zuweist Variablen und Zuweisungen behandeln wir in 6 1 4 2 S 114 und 6 3 1 S 127 Sie wird in einen Maschinenbefehl bersetzt etwa MOVE W 1 OAFFE Dies ist allerdings seine Darstellung in Assemblersprache im Rechner steht der Befehl bin r codiert als Bitmuster etwa so 0101 1100 0000 0001 1010 1111 1111 1110 4 4 5 Bild 4 6 Transformation eines Programms 4 4 Entwickle
547. ung dynamisch angefordert hat Ein Modul kann nur entladen werden wenn keine Kunden von ihm mehr geladen sind da diese an das Modul gebunden sind Das dynamische Laden unterscheidet Component Pascal von den meisten anderen Programmiersprachen es macht Compo nent Pascal zu einer komponentenorientierten Sprache Der Component Pascal Language Report fordert ausdr cklich diese Bei Bedarf oder im Voraus 4 8 Statisch Dynamisch 4 8 Programm Ablauf Prozess F higkeit von Sprachumgebungen die mit Component Pascal konform sein sollen Dies ist auch ein Punkt an dem Compo nent Pascal ber seine Vorg ngersprache Oberon 2 hinausgeht In Kapitel 5 stellen wir eine Sprachumgebung zu Component Pascal vor den BlackBox Component Builder Exkurs Bei konventionellen Sprachen werden die Programmteile sta tisch gebunden bevor das Programm ausgef hrt wird Das Programm wird im Voraus geladen erst w hrend des Programmablaufs kann der Benutzer Kommandos eingeben Das bedeutet dass auch Programm teile f r Kommandos die der Benutzer nie eingibt gebunden und gela den sind Programm Ablauf Prozess Mit diesem Wissen ber eine konkrete Programmiersprache im Hinterkopf wenden wir uns wieder allgemeinen Begriffen zu Ein Programm ist eine statische Einheit die in verschiedenen Formen existiert Ein Programm hei t direkt ausf hrbar wenn es in einer Form vorliegt die unmittelbar auf einem Prozessor ablaufen kann z B als Obj
548. ungs oder Problemanalysen liegen jenseits des Rah mens des Buchs Wir stellen jetzt als Orientierungshilfe zum Lesen der folgenden Kapitel die einzelnen Ebenen vor 43 3 Softwareentwicklung 3 1 1 Modulare und objektorientierte Zerlegung 3 1 2 Spezifikation durch Vertrag 44 Zerlegung Zweck der Zerlegung Grobentwurf design decomposition ist eine gegebene Aufgabe in Teilaufgaben zu zerlegen und diesen Teilaufgaben Struktureinheiten zuzuordnen um die Komplexit t der Aufgabe zu reduzieren Die Struktur einheiten sind so zu entwerfen dass sie nderungsstabil und wiederverwendbar sind Offenbar handelt es sich beim Zerlegen um eine kreative T tigkeit die man nicht einem Rechner bertra gen kann Bei komplexen Aufgaben m ssen die Entwickler ber einen reichen Erfahrungsschatz an Zerlegungsmustern mit ihren Vor und Nachteilen verf gen Als Methoden stellen wir dazu in den Kapiteln 8 und 9 das modulare Zerlegen und das objektorientierte Modellieren vor Grundlegende Begriffe zur Zerlegung haben wir in den vorher gehenden Kapiteln kennengelernt Modul Klasse Schnittstelle Kunde Lieferant Beziehung Bild 1 3 S 2 modulare Benut zungsstruktur Die schon eingef hrten und noch einzuf hren den grafischen Darstellungsmittel und Notationen mit textuellen Elementen orientieren sich an der Unified Modeling Language UML Spezifikation Zweck der Spezifikation ist Syntax und Semantik
549. ur Menge exemplarisch 12 1 3 Klassifikation 12 1 Polymorphe Mengenklasse f r geordnete Elemente Typen vertragen Wir k nnen daher die polymorphe Mengen klasse nutzen um beliebige vergleichbare Elemente zu spei chern aber ein Mengenobjekt kann nur Elemente vertr glicher Typen enthalten Im Beispiel bedeutet das Sobald ein Mengen objekt ein erstes Objekt vom Typ String enth lt akzeptiert dieses Mengenobjekt nur noch String Objekte als weitere Elemente Abstrahieren von der Mengenklasse Wir haben den Elementtyp der Mengenklasse verallgemeinert k nnen wir weitere Eigenschaften von Mengen abstrahieren Die Teilmengenrelation aus der Mengenlehre bekannt ist eine Ordnungsrelation allerdings sind Mengen von Mengen i A nicht vollst ndig sondern nur partiell geordnet Jede vollst n dige Ordnung ist eine partielle Ordnung aber nicht umgekehrt PartComparable Comparable Um die partielle Ordnung zu modellieren f hren wir eine neue Klasse PartComparable als Basisklasse von Comparable ein Die Men genklasse Set definieren wir als Erweiterung von PartComparable Set repr sentiert Mengen vollst ndig geordneter Elemente ihre Objekte Die Menge dieser Set Objekte ist partiell geordnet Konzept Schnittstellen und Implementationsklassen Die mathematischen Konzepte der partiellen und vollst ndigen Ordnung realisieren wir also softwaretechnisch mit den Klassen PartComparable und Comparable die wir deshalb K
550. urch A Die Option ist ein Spezialfall der Auswahl mit dem zus tzli chen Symbol wie empty f r das leere Wort so dargestellt Ale Eine Folge bindet st rker als eine Auswahl Der Ausdruck AB C bedeutet entweder A gefolgt von B oder C Mit runden Klam mern kann man wie bei arithmetischen Ausdr cken Aus dr cke gruppieren um die Reihenfolge der Operationen zu beeinflussen So bedeutet A B C A gefolgt von B oder C Dies ist quivalent zu AB AC Man kommt also ohne runde Klammern aus aber mit ihnen kann man u U einen mehrfach vorkommenden Ausdruck aus klammern wie bei arithmetischen Ausdrticken Aus Wortern tiber einem Alphabet kann man neue Alphabete bilden und aus diesen wieder neue W rter Eine Programmier sprache ist eine formale Sprache bei der man blicherweise zwei Ebenen unterscheidet Ein Programm ist auf der syntaktischen Ebene eine Folge von Symbolen ber einem Alphabet von terminalen Symbolen z B MODULE Clock QUERIES time Time 65 4 Programmiersprachen 4 6 4 6 1 4 6 1 1 Codes 66 lexikalischen Ebene eine Folge von Zeichen ber einem Zei chensatz z B MODULECIockQUERIEStime Time Ein Terminal der syntaktischen Ebene kann eine lexikalische Einheit sein also ein Nichtterminal der lexikalischen Ebene So k nnen wir auch sagen Ein Programm ist ein Satz ein Satz eine Folge von W rtern ein Wort eine Folge von Zeichen Syntax der Spezifikationssprache Cleo
551. urchleuchten ed age u Entwurf ntwur 7 ar z i _ Test mere ESS e A Bild 3 2 bringt die Ebenen in ein iteratives Entwicklungsmodell Die durchgezogenen Pfeile markieren den Idealweg die strich punktierten die Umwege der Realit t Sie weisen im Bild nur vom Test zu den anderen Ebenen doch soll jede Ebene mit jeder 3 2 3 2 Softwarequalit tsmerkmale anderen verbunden sein Diese Pfeile lassen wir fort um das Bild nicht zu berladen Softwarequalit tsmerkmale Wie bei anderen Produkten sind bei Software zwei Aspekte zu unterscheiden Wozu ist die Software n tze welche Funktionen bietet sie was kann ich damit machen Wie gut erf llt die Software ihren Zweck wie gut kann ich mit ihr umgehen Der erste Aspekt ist die Funktion der zweite die Qualit t Ist eine bestimmte Aufgabe softwarem ig zu l sen so muss die Anwendung eine entsprechende Funktionalit t bieten Ist diese gegeben kommt sofort die Qualit t ins Spiel Jeder wei aus eigener Erfahrung oder aus der Presse von Pannen oder Kata strophen aufgrund von Softwarefehlern Da man in immer mehr Bereichen auch in denen G ter Umwelt und Leben betroffen sind Software einsetzt gewinnt das Entwickeln von Software mit hoher Qualit t an Bedeutung Was aber ist Qualit t Qualit t unterscheidet sich von Quantit t etwas Messbarem ist also etwas Nichtmessbares Um Qualit t von Software begreifbar zu machen hat m
552. urfsmuster beschreiben wesentliche allgemeine L sungsstrukturen f r wiederkehrende Aufgaben des Soft wareentwurfs Das Model View Controller Entwurfsmuster liegt der Soft ware vieler interaktiver Benutzungsoberfl chen zugrunde es separiert die Aspekte der Speicherung der Visualisierung und der Manipulation von Daten Das Carrier Rider Mapper Entwurfsmuster trennt die Aspekte der Speicherung des Zugriffs und der Formatie rung von Daten voneinander Damit haben wir uns eine solide Basis f r ein tieferes Verst nd nis der Objekt und der Komponententechnologie geschaffen auf der unsere weitere Arbeit aufbauen kann Literaturhinweise Die Konzeptklassen Any PartComparable und Comparable sind nach Vorbildern der Eiffel Basis Klassenbibliotheken entworfen 19 Der Begriff des Entwurfsmusters hat sich mit dem Buch von E Gamma R Helm R Johnson und J Vlissides verbreitet 5 Die Autoren pr sentieren einen Katalog von Musterl sungen zu Fragen des objektorientierten Softwareentwurfs die sich immer wieder hnlich stellen J M Jezequel M Train und C Mingins 14 wenden die Vertragsmethode auf diese Entwurfsmuster an und zeigen so dass Entwurfsmuster durch vertragliche Spezifi kationen an Ausdruckskraft Verst ndlichkeit und Wiederver wendbarkeit gewinnen Das Model View Controller Entwurfs muster erl utern H M ssenb ck 22 und S Warford 40 Das Carrier Rider Mapper Entwurfsmuster ist in C Szyperski 31
553. us ist dass er im ELSE Zweig nicht diffe renziert welche Einzelbedingung verletzt ist Folglich erh lt der Benutzer eine ungenaue Meldung oder der Algorithmus pr ft die Bedingungen noch einmal Verbessern wir also den Algo rithmus lies Eingabewert IF 11Kaffeeautomat nicht im erwarteten Zustand THEN gib Meldung A aus ELSIF Eingabe erfolglos THEN gib Meldung B aus ELSIF gelesener Wert nicht verwendbar THEN gib Meldung C aus ELSE rufe entsprechende Aktion von I1Kaffeeautomat auf zeige Zustand von 1Kaffeeautomat an END Bei der mehrfachen Auswahlanweisung werden die mit IF THEN und ELSIF THEN geklammerten F lle einzeln der Reihe nach gepr ft Bei der ersten erf llten Bedingung wird der zuge h rige THEN Zweig gew hlt Ist keine Bedingung erf llt so wird der ELSE Zweig gew hlt falls vorhanden sonst nichts Nach Ausf hrung des einen gew hlten Zweigs geht die Ablaufkon trolle an die Stelle nach dem END ber Semantik Reihenfolge der Bedingungen 7 2 3 7 2 Kaffeeautomat mit einfacher Ein Ausgabe Die Semantik von Auswahlanweisungen l sst sich gut mit Zusi cherungen spezifizieren IF a THEN ASSERT a b ELSIF c THEN ASSERT a amp c d ELSIF e THEN ASSERT a amp c amp e f ELSE ASSERT a amp c amp e g END Dabei stehen a c und e f r seiteneffektfreie Bedingungen b d f und g f r Anweisungen Umgekehrt k nnen wir den Effekt der Zusicherungsprozedur ASSERT mit ei
554. utomat Neben einem Subsystemnamen hier 11 sind als syntaktischer Zucker die Begrenzer und zu erg nzen Allgemein gilt die Transformation MODULE Modulname MODULE SubsystemnameModulname END Modulname END SubsystemnameModulname Merkmale Cleo Dienste transformieren wir in Component Pascal Merk male Die Schl sselw rter QUERIES und ACTIONS entfallen bzw werden durch Kommentare ersetzt stattdessen erscheint eines der Schl sselw rter CONST VAR PROCEDURE QUERIES CONST VAR PROCEDURE ACTIONS PROCEDURE In einem Quellprogramm ist ein Kommentar eine Zeichenfolge die der Ubersetzer ignoriert d h er beriicksichtigt sie nicht zur Codeerzeugung sodass sie Programmablaufe nicht beeinflusst Kommentare sind Dokumentationsmittel sie dienen dazu die Verst ndlichkeit von Programmtexten zu erh hen In Component Pascal ist ein Kommentar ein beliebiger Text der zwischen einem Klammerpaar steht Wir setzen Kom mentare gem Programmierkonvention kursiy um sie von ech tem Quelltext abzuheben Rechte und Exportmarken Im Unterschied zu Cleo kennt Component Pascal keine an aus gew hlte Kunden vergebene Rechte Merkmale werden entwe der exportiert und sind damit ffentlich public d h allen potenziellen Kunden gleicherma en zug nglich oder sie wer den nicht exportiert und sind damit privat d h nur im verein barenden Modul selbst sichtbar Ein Merkmal wird durch Anh
555. vielleicht nicht das denkbar beste weil damit eine Zuweisung von rechts nach links zu lesen ist ent 6 3 1 1 Effizienz 6 3 Von Cleo zu Component Pascal Schritt 3 gegen unserer gewohnten Leserichtung In einer seiteneffektfreien Pro grammiersprache w re die Notation Ausdruck gt variable g nstiger Konrad Zuse verwendete sie schon 1945 in der ersten Pro grammiersprache dem Plankalk l Sp ter setzte sich die von rechts nach links Richtung durch das ist seit Algol 60 verbreitet 16 Manche Programmiersprachen darunter C C und Java verwenden als Zuweisungszeichen eine Notation der fr hen 50er Jahre die sich mit Fortran verbreitete Nachteilig ist daran dass die Sprache ein neues Gleichheitssymbol einf hren muss In der Mathematik wird seit rund 350 Jahren weltweit einheitlich als Gleichheitszeichen benutzt Deshalb haben viele Programmiersprachen f r denselben Zweck bernommen und als Zuweisungszeichen eingef hrt Wenn C C Java daf r und verwenden so ist das zwar einerseits nur ein syntaktischer Unterschied andererseits aber ein nicht gerade genia les Abweichen von einem Standard und eine vermeidbare Fehlerquelle Inkrementieren und Dekrementieren In Programmen ist oft der Wert einer ganzzahligen Variable zu erh hen oder zu erniedrigen Mit den Vereinbarungen VAR i k INTEGER bewirken Zuweisungen der Art i i k i i k das Gew n
556. von Programmiersprachen die zum Entwickeln gro er Softwaresy steme unbedingt gefordert ist weil bersetzungen viel Zeit kosten k nnen Mit getrennter bersetzbarkeit kann man ge n derte Programmteile in kleinen Einheiten effizient nach berset zen ohne Sicherheit zur Laufzeit einzub en In Component Pascal ist das Modul die bersetzungseinheit Lieferanten eines Moduls A m ssen einmal vor A bersetzt sein damit ihre Schnittstellen zur bersetzungszeit des Kunden bekannt sind Der bersetzer pr ft bei importierten Merkmalen genau wie bei lokalen ob sie korrekt benutzt sind z B ob Anzahl und Typen aktueller Parameter zu den formalen Para metern passen Man kann Lieferanten bersetzen ohne deshalb ihre Kunden nach bersetzen zu m ssen vorausgesetzt die Lie feranten behalten ihre Schnittstelle bei Exkurs Von getrennter bersetzung zu unterscheiden ist die unabh n gige bersetzung Dabei wird ein Programmteil ohne Kenntnis 79 4 Programmiersprachen 4 7 6 Initialisierung Finalisierung 80 benutzter Teile bersetzt Erst beim Binden der einzelnen Teile sind offene Bez ge feststellbar Typfehler werden u U nicht einmal zur Laufzeit erkannt Beispiele Ein Standard Pascal Programm wird als Ganzes bersetzt C und C bieten unabh ngige bersetzung der Programmierer kann getrennte bersetzung simulieren wenn er sich strikt an bestimmte Regeln h lt Dynamisches Laden und Entladen In Compone
557. wHorizontalLine x y INTEGER PROCEDURE DrawVerticalLine x y INTEGER PROCEDURE OpenNew END Graphutilities OpenNew ffnet ein neues Fenster mit einer kartesischen Fl che Der Koordinatenursprung liegt in der linken unteren Ecke des Fensters Das Fenster zeigt nur Punkte mit nichtne gativen Koordinaten DrawHorizontalLine zeichnet eine waagrechte Linie von 0 y nach x y DrawVerticalLine zeichnet eine senkrechte Linie von x 0 nach x y Die Verfeinerung und Formalisierung des Entwurfs 1 von S 204 lautet damit GraphlUitilities OpenNew FOR i ORD MIN CHAR TO ORD MAX CHAR DO IF frequency i gt 0 THEN Write CHR i frequency i GraphUtilities DrawVerticalLine i frequency i END END Wir haben damit die H lfte der gestellten Aufgabe gel st In der Praxis stellen wir die L sungselemente zu einem ausf hrbaren Modul zusammen und testen es hier warten wir damit bis die L sung des zweiten Aufgabenteils vorliegt Nach H ufigkeit sortierte Ausgabe Der zweite Aufgabenteil ist die Datenpaare Zeichen H ufig keit nach H ufigkeit sortiert auszugeben Durch die Struktur der H ufigkeitsreihung frequency bedingt liegen diese Daten paare nach Zeichen sortiert vor Eine Teilaufgabe lautet 205 8 Strukturiertes und modulares Programmieren Vektoren Generisches Modul Programm 8 6 Spezifikation des Vektormoduls reduziert 206 Sortiere eine gegebene Reihung ga
558. wei lig verletzt sein Sie gelten aber vor und nach jedem Aufruf eines Dienstes Jeder Dienst muss also siehe Bild 2 6 Auftrag Dienst 2 MaA XN Vorbedingung Invariante Nachbedingung 1 pr fen ob die Invarianten erf llt sind 2 pr fen ob seine Vorbedingungen erf llt sind 3 falls die Invarianten und Vorbedingungen erf llt sind seine Aufgabe erledigen andernfalls den Auftrag ablehnen 4 nachweisen dass er die Invarianten erhalten oder wiederher gestellt hat 5 nachweisen dass er seine Nachbedingungen erf llt hat Der einzige Dienst vor dessen Aufruf die Invarianten nicht gel ten und der sie deshalb nicht priift ist initialisieren die Aufgabe des Initialisierens ist die Invarianten erstmals zu erf llen Die Methode Module mit Vor und Nachbedingungen und Invarianten zu spezifizieren hei t Spezifikation durch Vertrag specification by contract Um sie konkret anzuwenden brauchen wir einige syntaktische Regeln Vorbedingungen leiten wir mit dem Schl sselwort PRE ein Nachbedingungen mit POST und Invarianten mit INVARIANTS F r jede einzelne Bedingung spen dieren wir der Lesbarkeit halber eine Zeile Die Bedingungen sind jeweils konjunktiv zu verkn pfen d h jede Bedingung muss gelten Die Bezeichnungen der Bedingungen verwenden 2 4 Spezifikation durch Vertrag wir im Singular und im Plural je nach Aspekt Die Invariante meint z B die Konjunktion der einzelnen Invarianten Pro
559. weisung mehrfache 156 297 von EBNF Ausdr cken 65 Auswertung 22 24 127 191 193 218 220 bedingte kurze kurze 218 220 222 227 228 lange 218 220 227 228 vollst ndige lange B backing storage device Ger t Ein Ausgabeger t Backus Naur Form 85 erweiterte 44 59 64 66 84 85 103 148 270 271 314 balanced tree Baum ausgewogener basic type Typ Grundtyp Baum 313 320 322 324 326 361 abstrakter 313 ausgewogener 317 Bin rbaum 313 314 bin rer Suchbaum 316 geordneter Bin rbaum 316 317 321 333 335 376 konkreter 313 leerer 314 322 323 Teilbaum 314 317 319 322 323 Verzeichnisbaum 90 vielverzweigter 313 Bedeutung Semantik Bedingung 30 31 33 34 45 76 119 121 124 139 155 157 177 180 185 188 189 209 223 271 273 297 306 321 339 374 Abbruchbedingung 190 193 203 225 311 Invariante Nachbedingung Vorbedingung atomare 224 Fortsetzungsbedingung 189 191 192 273 konstante 139 191 Kontextbedingung 72 nichttriviale 35 Schleifenbedingung 189 203 222 225 seiteneffektfreie 157 190 203 311 triviale 34 35 Befehl 15 53 54 84 Aufrufbefehl 55 Maschinenbefehl 60 82 138 Sprungbefehl 55 Befehlsausf hrung 55 Befehlsausf hrungszeit 56 Befehlsvorrat 53 54 Befehlszyklus 55 Begrenzer 71 112 128 Begriff 5 12 145 146 252 255 314 Oberbegriff 253 261 Unterbegriff 253 261 Beh lter 8 8
560. werfen Offen ist also das Verhalten des Automaten oder Moduls die Bedeutung oder Wirkung seiner Dienste zu spezifizieren Man kann dies als Spezifikation der dynamischen Semantik bezeich nen Dynamisch bedeutet hier dass man die Eigenschaften erst w hrend des Betriebs des Automaten pr fen kann d h w h rend der Ausf hrung der Simulation Wir zeigen am Beispiel des Kaffeeautomaten eine Spezifikati onsmethode anschlie end wenden wir sie bei den Beispielen des Schalters und der Menge an 2 4 1 Auftrag Vorbedingung Nachbedingung 2 4 Spezifikation durch Vertrag Ein Kaffeeautomat Erg nzen wir das Kunden Lieferanten Modell um einige Begriffe Der Kunde beauftragt den Lieferanten einen bestimm ten Dienst zu leisten Der Lieferant entscheidet ob er den Auf trag annimmt oder nicht Der Lieferant kann Vorbedingungen precondition zu dem Dienst stellen Nur wenn diese Vorbedingungen erf llt sind nimmt der Lieferant den Auftrag an und beginnt den Dienst auszuf hren Der Kunde ist daf r verantwortlich die Vorbedin gungen einzuhalten Beispielsweise kann der Automat den Auf trag Kaffeeautomat Geld_einnehmen 1000 zur ckweisen indem er als Vorbedingung fordert einen nicht negativen Betrag als Parameter zu bergeben Betrag gt 0 Im Gegenzug garantiert der Lieferant dem Kunden dass nach Ausf hrung des Dienstes bestimmte Nachbedingungen post condition gelten Der Kunde kann sich darauf verla
561. with fixed length the allocation has to be done with NEW p if T is an n dimen sional open array type the allocation has to be done with NEW p e0 en 1 where T is allocated with lengths given by the expres sions e0 en 1 In either case a pointer to the allocated variable is assigned to p p is of type P The referenced variable p pro nounced as p referenced is of type T Any pointer variable may assume the value NIL which points to no variable at all All fields or elements of a newly allocated record or array are cleared which implies that all embedded pointers and procedure varia bles are initialized to NIL The predeclared type ANYPTR is defined as POINTER TO ANYREC Any pointer to a record type is therefore an extension of ANYPTR The procedure NEW cannot be used for variables of type ANYPTR A Component Pascal Language Report 6 5 Procedure Types Variables of a procedure type T have a procedure or NIL as value If a procedure P is assigned to a variable of type T the for mal parameter lists see Ch 10 1 of P and T must match see App A P must not be a predeclared procedure or a method nor may it be local to another procedure ProcedureType PROCEDURE FormalParameters 6 6 String Types Values of a string type are sequences of characters terminated by a null character 0X The length of a string is the number of char acters it contains excluding the null character Strings are either constants or st
562. x WipeOut POST IsEmpty END Set Die Spezifikation ist unabh ngig von speziellen Eigenschaften des Typs Element Sie fordert von Element nur dass es als Parame tertyp einsetzbar ist Diese Eigenschaft hat jeder Typ Eine Implementation die nicht von speziellen Eigenschaften von Ele ment abh ngt hei t generische Implementation sie funktioniert f r alle konkreten Element Typen Mit einer generischen Imple mentation sind Mengenobjekte mit konkreten Elementtypen hnlich wie Reihungen zu vereinbaren etwa charSet Set OF CHAR intSet Set OF INTEGER TassenSet Set OF Tasse 235 9 Objektorientiertes Programmieren Elementspezifische Klasse 9 3 236 Das hei t ein konkreter Elementtyp wird nicht schon bei der Implementation der Klasse festgelegt sondern erst bei der Ver einbarung eines Objekts Andererseits zeigen die Programme 6 6 S 138 und 6 7 S 140 unterschiedliche Implementationen f r Mengen der Elementty pen CHAR und INTEGER die spezielle Eigenschaften dieser Typen nutzen Eine Menge des Elementtyps Tasse w rde noch eine andere Implementation erfordern In Implementationssprachen die generische Klassen nicht unterst tzen z B Component Pascal ist f r jeden Elementtyp eine eigene Klasse zu implementieren Vereinbarungen von Mengenobjekten sehen dann etwa so aus charSet SetOfChar intSet SetOflnteger Tassenmenge SetOfTasse In beiden F llen sind die vereinbarten Objekte z B so zu
563. xtsicht 363 368 Sichtbarkeit 112 127 162 side effect Seiteneffekt Signatur 25 75 101 103 115 177 183 223 257 259 274 275 eingeschr nkte 149 Simulation 2 14 25 28 36 singleton Einzelobjekt size Umfang Smalltalk 363 Software 1 42 47 49 52 53 139 152 237 248 338 339 modulare 3 Softwareentwicklung 6 10 14 38 41 46 50 106 evolution re 42 50 inkrementelle 43 iterative 43 46 komponentenorientierte 43 49 50 nahtlose 43 50 partizipative 43 50 Softwareentwicklungsprozess 42 43 Softwarekonstruktion objektorientierte 248 284 Softwaretechnik 9 41 50 339 347 Sortieren 205 208 227 Speicher 49 53 55 84 104 238 278 279 Hauptspeicher 53 62 109 Hintergrundspeicher 62 Speicheradressierung 54 Speicherbarkeit 364 374 Speicherbedarf 49 50 75 137 139 140 von Code 224 von Daten 224 Speicherbereich 278 Speicherbereinigung automatische 278 279 307 326 Speicherinhalt 54 Speicherkapazit t 56 191 Speicherplatz 83 84 105 114 115 136 165 279 belegter 138 einer dynamischen Variable 276 278 einer lokalen Variable 162 einer Reihung 135 136 209 einer unerreichbaren Varia ble 279 einer Variable 119 127 einer Zeigervariable 275 eines formalen Parameters 175 Speicherplatzverwaltung 279 Speicherung 60 375 Programmspeicherung 54 Speicherzelle 54 115 176 280 Spezialisierung 252 257 261 285 Spezifikation 8 9 11 15 20 28
564. yDesc Write NEW EMPTY Write the values of the fields of a to some output medium Swapping 1 oS PROCEDURE VAR a AnyDesc Swap VAR b AnyDesc NEW Exchange the values of a and b VAR c Any 344 3 1 I is 1 I 12 1 Polymorphe Mengenklasse f r geordnete Elemente BEGIN c a Clone a Copy b b Copy c END Swap Invariants PROCEDURE CheckAnyInvariants IN a b c AnyDesc VAR aUEb BOOLEAN d e Any BEGIN aUEb a Unequal b Reflexivity Rule a a ASSERT a Equal a BEC invariantClass Symmetry Rule a b IMPLIES b a ASSERT aUEb OR b Equal a BEC invariantClass Transitivity Rule a b amp b c IMPLIES a c ASSERT aUEb OR b Unequal c OR a Equal c BEC invariantClass Swapping Rule d a Clone e b Clone d Swap e ASSERT a Equal e amp b Equal d BEC invariantClass END CheckAnyInvariants Procedures bound to PartComparable Order Relations PROCEDURE IN a PartComparableDesc LessEqual IN b PartComparableDesc BOOLEAN NEW ABSTRACT Postcondition result a lt b PROCEDURE IN a PartComparableDesc Less IN b PartComparableDesc BOOLEAN NEW Postcondition result a lt b BEGIN RETURN a LessEqual b amp a Equal b END Less PROCEDURE IN a PartComparableDesc GreaterEqual IN b PartComparableDesc BOO
565. ymbolen Eckige K stchen stehen f r Nichtterminale Kreise und die abgerundeten K stchen in Bild 4 7 f r Terminale Gerichtete Kanten zeigen an wie die Sym bole aufeinander folgen d rfen Das Nichtterminal dessen defi 67 4 Programmiersprachen Durchlaufvorschrift f r Syntaxdiagramme Formel 4 2 Syntax von Namen 68 nierende Regel das Diagramm darstellt steht links oben an der Eingangskante Zwei Punkte in den Diagrammen von letter und digit stehen jeweils f r Buchstaben oder Ziffern aus einem Intervall die aus Platzgr nden weggelassen sind voraussetzend dass der Leser den Zeichensatz kennt Nach folgender Vorschrift bildet man aus Syntaxdiagrammen W rter der beschriebenen Sprache im Beispiel also Namen 1 Durchlaufe das Diagramm beginnend mit dem Startsymbol am Eingang links oben in Pfeilrichtung bis zum Ausgang rechts unten 2 W hle bei jeder Verzweigung einen der Pfade 3 Notiere alle auf dem Weg besuchten Terminale nacheinander 4 Unterbreche bei einem Nichtterminal den Durchlauf suche das zu dem Nichtterminal geh rende Diagramm auf und durchlaufe erst dieses gem 1 4 bevor du an der Unter brechungsstelle fortf hrst Syntaxdiagramme sind anschaulich gut lesbar und das Umge hen damit ist leicht zu lernen Nachteilig ist dass sie viel Platz beanspruchen aufw ndig zu zeichnen und nicht direkt maschi nell zu verarbeiten sind Wir gehen deshalb zu einer textuellen Dar
566. z 67 312 Latin1 66 67 Zeiger 216 242 274 276 280 284 300 304 307 319 335 367 368 371 Ergebniszeiger 324 lokaler 305 307 polymorpher 302 303 305 Zeilenumbruch 98 Zeitpunkt absoluter 302 304 Aufrufzeitpunkt 303 Zentraleinheit 53 Zerlegung 41 43 46 50 225 261 285 modulare 44 49 199 Zerteiler 270 Zerteilung 70 271 Zufallszahlengenerator 297 Zugriff 20 54 138 165 211 258 355 365 375 auf Feld 247 auf formalen Parameter 176 auf Reihungselement 136 445 C Sachwortverzeichnis 446 148 213 auf Variable 247 Datenzugriff 365 direkter 142 143 147 indirekter 142 lesender 113 114 130 142 schreibender 114 115 142 sequenzieller 365 Speicherzugriff 84 wahlfreier 365 Zugriffsart 113 Zugriffsbeschr nkung 26 Zugriffskontrolle 25 26 38 128 Zugriffsrecht 113 Zusammenfassen 4 36 38 261 Zusicherung 46 119 122 126 128 147 157 190 203 210 221 277 293 295 297 301 311 320 325 339 341 347 349 355 374 verletzte 294 Zustand 1 2 6 7 17 22 23 29 32 33 61 119 124 146 151 155 162 166 168 223 231 233 237 239 245 246 254 278 294 295 305 306 325 326 Anfangszustand 2 155 187 202 diskreter 53 einer Dialogbox 184 einer Kommandoausftihrung 152 einer Variable 128 147 eines Kommandoknopfs 177 178 183 eines Moduls 3 5 6 29 131 134 152 196 eines Objekts 37 339 eines Steuerelements 182 183 interner
567. zelverzeichnis 90 91 view Sicht Visualisierung 375 Vollst ndigkeit 82 Vorbedingung 29 34 38 39 44 120 121 123 124 136 137 150 152 154 155 177 197 214 220 232 233 237 253 255 257 273 279 280 293 294 implizite 279 verletzte 353 Vordergrund 291 292 Vorg nger 307 Vorrang 65 WwW Wachter 177 180 181 183 185 226 353 gemeinsamer 182 Wartbarkeit 48 49 338 Wartung 48 Weg 7 314 317 322 Weiterleitung 215 302 303 367 369 Werkzeug 12 41 42 50 57 61 62 87 89 91 92 94 96 98 101 105 106 110 152 200 Testwerkzeug 46 287 288 290 301 308 312 Werkzeugkasten 87 Wert 3 5 18 19 22 24 29 54 60 70 75 76 113 115 116 121 128 130 134 135 140 141 154 157 159 163 166 168 175 176 182 183 188 189 191 193 197 198 206 208 210 218 222 224 227 275 280 290 296 298 303 304 321 353 367 Anfangswert 130 boolescher 219 Datenwert 316 Defaultinitialisierungswert 321 Defaultwert 119 130 169 276 Durchschnittswert 224 einer Abfrage 154 166 einer Konstante 141 einer Variable 151 eines Ausdrucks 127 eines Dialogfelds 183 Eingabewert 156 166 Ergebniswert 22 24 140 222 ganzzahliger 140 Indexwert 136 210 kleinster 140 konvertierter 168 Parameterwert 24 27 28 151 159 294 297 Sch tzwert 224 bergebener 27 Zufallswert 294 296 297 341 Wertebereich 17 18 22 29 34 35 60 75 115 127 134 135 140 27
Download Pdf Manuals
Related Search
Related Contents
West Coast Trail: 2014 Hiker Preparation Guide Princess Household Appliances BV 68CT8 User's Manual MASSEY FERGUSON ZT Series Specifications Manuale installatori rivelatore di fumo ad aspirazione LaserSense User Manual 取扱説明書 CardioVex ECG DUET - DMC Equipamentos MANUAL DE UTILIZAÇÃO Copyright © All rights reserved.
Failed to retrieve file