1.36k likes | 1.56k Views
Software-Technik. 4 Die Implementierungsphase Prof. Dr. Helmut Balzert Lehrstuhl für Software-Technik Ruhr-Universität Bochum. Lernziele. Ein gegebenes Programm überprüfen können, ob die vorgestellten Implementierungsprinzipien eingehalten wurden
E N D
Software-Technik 4 Die Implementierungsphase Prof. Dr. Helmut Balzert Lehrstuhl für Software-Technik Ruhr-Universität Bochum
I SWT - Die Implementierungsphase Lernziele • Ein gegebenes Programm überprüfen können, ob die vorgestellten Implementierungsprinzipien eingehalten wurden • Die vorgestellten Implementierungsprinzipien bei der Erstellung eines Programms berücksichtigen können • Die Methode der schrittweisen Verfeinerung bei der Erstellung eines Programms anwenden können • Die beschriebenen Regeln und Richtlinien bei der Erstellung von Programmen beachten können.
I SWT - Die Implementierungsphase Inhalt 4 Die Implementierungsphase 4.1 Einführung und Überblick 4.2 Prinzipien der Implementierung 4.2.1 Prinzip der Verbalisierung 4.2.2 Prinzip der problemadäquaten Datentypen 4.2.3 Prinzip der Verfeinerung 4.2.4 Prinzip der integrierten Dokumentation 4.3 Methode der schrittweisen Verfeinerung 4.4 Zur Psychologie des Programmierens 4.5 Selbstkontrolliertes Programmieren 4.6 Programmierrichtlinien am Beispiel von C++.
I SWT - Die Implementierungsphase 4 Die Implementierungsphase • Zur Historie • Prof. Dr. Niklaus Wirth*15.2.1934 in Winterthur, SchweizProfessor an der ETH Zürich • Erfinder der ProgrammiersprachenPascal (1970), Modula-2 (1982) und Oberon (1989) • Erfinder der Computersysteme Lilith (1980) und Ceres (1986) zusammen mit ihren Betriebssystemen • Wegbereiter der strukturierten Programmierung und der schrittweisen Verfeinerung.
I SWT - Die Implementierungsphase 4.1 Einführung und Überblick • Aufgabe des Programmierens: • Aus vorgegebenen Spezifikationen für eine Systemkomponente die Systemkomponente zu implementieren, d.h. die geforderten Leistungen in Form eines oder mehrerer Programme zu realisieren • Implementierungsphase: • Durchführung der Programmiertätigkeiten • Eingebettet zwischen • der Entwurfsphase und • der Abnahme- und Einführungsphase.
I SWT - Die Implementierungsphase 4.1 Einführung und Überblick • Voraussetzungen • In der Entwurfsphase wurde eine Software-architektur entworfen, die zu geeigneten Systemkomponenten geführt hat • Abhängig von der Entwurfsmethode kann eine Systemkomponente folgendermaßen aussehen: • Strukturierter Entwurf: • funktionales Modul • Modularer Entwurf: • funktionales Modul • Datenobjekt-Modul • Datentyp-Modul • Objektorientierter Entwurf: • Klassen.
I SWT - Die Implementierungsphase 4.1 Einführung und Überblick • Voraussetzungen • Für jede Systemkomponente existiert eine Spezifikation • Die Softwarearchitektur ist so ausgelegt, daß die Implementierungen umfangsmäßig pro Funktion, Zugriffsoperation bzw. Operation wenige Seiten nicht überschreiten.
I SWT - Die Implementierungsphase 4.1 Einführung und Überblick
I SWT - Die Implementierungsphase 4.1 Einführung und Überblick • Aktivitäten • Konzeption von Datenstrukturen und Algorithmen • Strukturierung des Programms durch geeignete Verfeinerungsebenen • Dokumentation der Problemlösung und der Implementierungsentscheidungen • Umsetzung der Konzepte in die Konstrukte der verwendeten Programmiersprache • Angaben zur Zeit- und Speicherkomplexität • Test oder Verifikation des Programmes einschl. Testplanung und Testfallerstellung • Auch»Programmieren im Kleinen«genannt.
I SWT - Die Implementierungsphase 4.1 Einführung und Überblick • Teilprodukte • Quellprogramm einschl. integrierter Dokumentation • Objektprogramm • Testplanung und Testprotokoll bzw. Verifikationsdokumentation • Alle Teilprodukte aller Systemkomponenten müssen integriert und einemSystemtestunterzogen werden.
I SWT - Die Implementierungsphase 4.1 Einführung und Überblick • Basiskonzepte zur Implementierung der Systemkomponenten: • Kontrollstrukturen • nur »lineare Kontrollstrukturen« • »Strukturiertes Programmieren i. e. S.« • Entscheidungstabellen.
I SWT - Die Implementierungsphase 4.2 Prinzipien der Implementierung • Bei der Implementierung sollten folgende Prinzipien eingehalten werden: • Prinzip der Verbalisierung • Prinzip der problemadäquaten Datentypen • Prinzip der Verfeinerung • Prinzip der integrierten Dokumentation.
I SWT - Die Implementierungsphase 4.2.1 Prinzip der Verbalisierung • Verbalisierung • Gedanken und Vorstellungen in Worten ausdrücken und damit ins Bewußtsein bringen • Gute Verbalisierung • Aussagekräftige, mnemonische Namensgebung • Geeignete Kommentare • Selbstdokumentierende Programmiersprache.
I SWT - Die Implementierungsphase 4.2.1 Prinzip der Verbalisierung • Bezeichnerwahl • Problemadäquate Charakterisierung Konstanten, Variablen, Prozeduren usw. • Soll die Funktion dieser Größe bzw. ihre Aufgabe zum Ausdruck bringen • Bezeichner, die problemfrei sind oder technische Aspekte z.B. der Repräsentation bezeichnen, sind zu vermeiden • Die in der Mathematik übliche Verwendung einzelner Buchstaben ist ebenfalls ungeeignet.
I SWT - Die Implementierungsphase 4.2.1 Prinzip der Verbalisierung • Beispiel 1 • Feld1, Feld2, Zaehler • problemfreie, technische Bezeichner • Besser: • Messreihe1, Messreihe2, Anzahlzeichen • problembezogene Bezeichner • Beispiel 2 • P = G2 + Z1 * D • Bezeichner ohne Aussagekraft, zu kurz • Besser: • Praemie = Grundpraemie2 + Zulage1 * Dienstjahre;.
I SWT - Die Implementierungsphase 4.2.1 Prinzip der Verbalisierung • Beispiel 3 • Praemie = 50.0 + 10.0 * Dienstjahre • unverständliche Konstanten • Besser: • const float Grundpraemie2 = 50.0; • const float Zulage1 = 10.0; • Praemie = Grundpraemie2 + Zulage1 * Dienstjahre; • Durch die Verwendung benannter Konstanten wird die Lesbarkeit eines Programmes deutlich verbessert • Zusätzlich wird das Programm dadurch auch änderungsfreundlicher.
I SWT - Die Implementierungsphase 4.2.1 Prinzip der Verbalisierung • Kurze Bezeichner sind nicht aussagekräftig und außerdem wegen der geringen Redundanz anfälliger gegen Tippfehler und Verwechslungen • Der erhöhte Schreibaufwand durch lange Bezeichner wird durch die Vorteile mehr als ausgeglichen.
I SWT - Die Implementierungsphase 4.2.1 Prinzip der Verbalisierung • Verbalisierung wird durch geeigneteKommentareunterstützt • Als vorteilhaft hat sich erwiesen, denelse-Teil einer Auswahl zu kommentieren • Als Kommentar wird angegeben, welche Bedingungen imelse-Teil gelten • Beispiel if (A < 5) { ...} else //A >= 5 { ...}.
I SWT - Die Implementierungsphase 4.2.1 Prinzip der Verbalisierung • Kurzkommentare sollten vermieden werden • Die in ihnen enthaltene Information ist meist besser in Namen unterzubringen • Beispiel • I = I + 1; //I wird um Eins erhöht • Besser:Lagermenge = Lagermenge + 1; • Besonders wichtige Kommentare • In einen Kommentarkasten.
I SWT - Die Implementierungsphase 4.2.1 Prinzip der Verbalisierung • Grad der Kommentierung • Abhängig davon, ob Programmiersprache selbstdokumentierend • ADA gilt in dieser Beziehung als vorbildlich • C++ ist ein schlechtes Beispiel • Vorteile der Verbaliserung • Leichte Einarbeitung in fremde Programme bzw. Wiedereinarbeitung in eigene Programme • Erleichtert »code reviews«, Modifikationen und Wartung • Verbesserte Lesbarkeit der Programme.
I SWT - Die Implementierungsphase 4.2.2 Prinzip der problemadäquate Datentypen • Problemadäquate Datentypen • Daten-und Kontrollstrukturen eines Problems sollen sich in der programmiersprachlichen Lösung möglichst unverfälscht widerspiegeln • Programmiersprache sollte folgende Eigenschaften bezogen auf Datenstrukturen besitzen: • Umfangreiches Repertoire an Basistypen • Geeignete Typkonstruktoren • Benutzerdefinierbare Typen.
I SWT - Die Implementierungsphase 4.2.2 Prinzip der problemadäquate Datentypen • Aufgabe des Programmierers • Angebot an Konzepten einer Programmiersprache optimal zur problemnahen Lösungsformulierung verwenden • Regeln: • Können die Daten durch Basistypen beschrieben werden, dann ist der geeignete Basistyp auszuwählen • Der Wertebereich sollte so festgelegt werden, daß er möglichst genau das Problem widerspiegelt – unter Umständen durch Einschränkungen des Basistyps.
I SWT - Die Implementierungsphase 4.2.2 Prinzip der problemadäquate Datentypen • Beispiele • enumFamilienstandT {ledig, verheiratet, geschieden, verwitwet}; • enumGeschlechtT {weiblich, maennlich}; • enumAmpelT {rot, gruen, gelb}; • enumSteuerschluesselT {ohne_Steuer, Vorsteuer, halbe_MwSt,volle_MwSt}; • enumWeinpraedikateT {Kabinett, Spaetlese, Auslese, Beerenauslese, Trockenbeerenauslese}; • enumBauteiltypT {R, L, C, U, I}; • n! ist nur für nichtnegative ganze Zahlen definiert • Der Basistyp sollte entsprechend gewählt werden: • unsigned longNFAK (unsigned long n);.
I SWT - Die Implementierungsphase 4.2.2 Prinzip der problemadäquate Datentypen • TypkonstruktorFeldverwenden, wenn: aZusammenfassung gleicher Datentypen bZugriff wird dynamisch berechnet (während der Laufzeit) cHohe Komponentenanzahl möglich dFeldgrenzen statisch, dynamisch oder unspezifiziert eMittlere Zugriffszeit auf eine Komponente, unabhängig vom Wert des Index f Als zugehörige Kontrollstruktur wird die zählende Wiederholung eingesetzt • Beispiel • In einem Textsystem wird eine Textseite folgendermaßen beschrieben: • typedef char TextzeileT[Zeilenlaenge]; • typedef TextzeileT TextseiteT[Zeilenanzahl];
I SWT - Die Implementierungsphase 4.2.2 Prinzip der problemadäquate Datentypen • TypkonstruktorVerbundverwenden, wenn: aZusammenfassung logischer Daten mit unterschiedlichen Typen bZugriff wird statisch berechnet (zur Übersetzungszeit) cAnzahl der Komponenten ist immer fest dJede Komponente ist einzeln benannt, daher ist der Umfang begrenzt eKurze Zugriffszeit auf Komponente erwünscht fBei varianten Verbunden ist die Mehrfach-auswahl die geeignete Kontrollstruktur.
I SWT - Die Implementierungsphase 4.2.2 Prinzip der problemadäquate Datentypen • Typkonstruktor Verbund: Beispiele • Der Datentyp eines Adreßverwaltungsprogramms sieht problemadäquat folgendermaßen aus: structAdresseT const char* Strasse; intPLZ; const char* Wohnort; • Es sollen komplexe Zahlen verarbeitet werden; der geeignete Datentyp ist: structComplexT { floatRe, Im; };.
I SWT - Die Implementierungsphase 4.2.2 Prinzip der problemadäquate Datentypen • Vorteileproblemadäquater Datentypen • Gut verständliche, leicht lesbare, selbstdokumentierende und wartbare Programme • Statische und dynamische Typprüfungen verbessern die Qualität des jeweiligen Programms • Die Daten des Problems werden 1:1 in Datentypen des Programms abgebildet, d.h. Wertebereiche werden weder über- noch unterspezifiziert.
I SWT - Die Implementierungsphase 4.2.2 Prinzip der problemadäquate Datentypen • Voraussetzungen: • Möglichst optimale Unterstützung durch geeignete Konzepte in der verwendeten Programmiersprache • Anwendung des Prinzips der Verbalisierung, insbesondere bei der Namenswahl • Bei fehlenden modernen Sprachkonzepten ausführliche Kommentierung • Definition geeigneter Datenabstraktionen bzw. Klassen mit problemangepaßten Operationen.
I SWT - Die Implementierungsphase 4.2.3 Prinzip der Verfeinerung • Verfeinerung • Dient dazu, ein Programm durch Abstraktionsebenen zu strukturieren • Verfeinerungsstruktur kann auf 2 Arten im Quellprogramm sichtbar gemacht werden • Die oberste Verfeinerungsebene – bestehend aus abstrakten Daten und abstrakten Anweisungen – ist kompakt beschrieben • Die Realisierung jeder Verfeinerung wird an anderer Stelle beschrieben • Alle Verfeinerungsebenen sind substituiert • Die übergeordneten Verfeinerungen werden als Kommentare gekennzeichnet.
I SWT - Die Implementierungsphase 4.2.3 Prinzip der Verfeinerung • Ein Algorithmus soll aus zwei eingegebenen Daten die Anzahl der Zinstage berechnen: voidberechneZinstage() { intDatum1, Datum2; // Eingabedaten, Form TTMM intTage; // Ausgabedaten // Voraussetzung:Daten liegen innerhalb eines Jahres // Algorithmus ------------------------------------- // Eingabe // Aufgliederung in Tag und Monat // Beruecksichtigung der Sonderfaelle // Berechnung der Tage // Ausgabe }.
I SWT - Die Implementierungsphase 4.2.3 Prinzip der Verfeinerung // refinements: 1. Verfeinerung: // Eingabe cout << "1. Zinsdatums:"; cin >> Datum1; cout << "2. Zinsdatums:"; cin >> Datum2; cout << endl; // Aufgliederung in Tag und Monat // Aufgliederung in Tag // Aufgliederung in Monat // Beruecksichtigung der Sonderfaelle if(Tag1 == 31) Tag1 = 30; if (Tag2 == 31) Tag2 = 30; // Berechnung der Tage Tage = (Monat2 - Monat1) * 30 + Tag2 - Tag1; // Ausgabe if(Tage < 0) cout << "Fehler: 1. Datum liegt vor dem 2. Datum!“ << endl; elsecout << "Anzahl der Zinstage = " << Tage;.
I SWT - Die Implementierungsphase 4.2.3 Prinzip der Verfeinerung // refinements: 2. Verfeinerung: // Aufgliederung in Tag und Monat // Aufgliederung in Tag intTag1, Tag2; // Hilfsgroessen Tag1 = Datum1 / 100; Tag2 = Datum2 / 100; // Aufgliederung in Monat intMonat1, Monat2; // Hilfsgroessen Monat1 = Datum1 % 100; Monat2 = Datum2 % 100; // end berechneZinstage() • Sowohl der Kern des Algorithmus als auch die Verfeinerungsstufen sind deutlich sichtbar • Die Verfeinerungen muß man sich nur ansehen, wenn man sich für die Details interessiert.
I SWT - Die Implementierungsphase 4.2.3 Prinzip der Verfeinerung • Da die meisten Programmiersprachen eine solche Darstellung nicht erlauben, müssen die Verfeinerungensubstituiertwerden: voidberechneZinstage() { intDatum1, Datum2; // Eingabedaten, Form TTMM int Tage; // Ausgabedaten //Voraussetzung: Die Daten liegen innerhalb eines Jahres intTag1, Tag2; // Hilfsgroessen intMonat1, Monat2; // Hilfsgroessen // Eingabe cout << "1. Zinsdatums:"; cin >> Datum1; cout << “2. Zinsdatums:"; cin >> Datum2; cout << endl;.
I SWT - Die Implementierungsphase 4.2.3 Prinzip der Verfeinerung // Aufgliederung in Tag und Monat // Aufgliederung in Tag Tag1 = Datum1 / 100; Tag2 = Datum2 / 100; // Aufgliederung in Monat Monat1 = Datum1 % 100; Monat2 = Datum2 % 100; // Beruecksichtigung der Sonderfaelle if(Tag1 == 31) Tag1 = 30; if(Tag2 == 31) Tag2 = 30; // Berechnung der Tage Tage = (Monat2 - Monat1) * 30 + Tag2 - Tag1; // Ausgabe if(Tage < 0) cout << "Fehler: 1. Datum liegt vor dem 2. Datum!" << endl; elsecout << "Anzahl der Zinstage = " << Tage;.
I SWT - Die Implementierungsphase 4.2.3 Prinzip der Verfeinerung • In dieser Notation werden in Kommentarform die Verfeinerungsschichten aufgeführt • Durch Einrücken nach rechts kann man die Tiefe der Verfeinerung hervorheben • Bei diesen Kommentaren handelt es sich umVerfeinerungen,die bei der Konzeption des Programms entstanden sind und nur in Kommentarform notiert werden.
I SWT - Die Implementierungsphase 4.2.3 Prinzip der Verfeinerung • Vorteile • Der Entwicklungsprozeß ist im Quellprogramm dokumentiert • Leichtere und schnellere Einarbeitung in ein Programm • Die Details können zunächst übergangen werden • Die Entwicklungsentscheidungen können besser nachvollzogen werden • Die oberen Verfeinerungsschichten können in natürlicher Sprache formuliert werden • Ein Programm wird zweidimensional strukturiert: sowohl durch Kontrollstrukturen als auch durch Verfeinerungsschichten.
I SWT - Die Implementierungsphase 4.2.4 Prinzip der integrierten Dokumentation • Dokumentation • Integraler Bestandteil jedes Programms • Ziele der Dokumentation: • Angabe von Verwaltungsinformationen • Erleichterung der Einarbeitung • Beschreibung der Entwicklungs-entscheidungen • Warum wurde welche Alternative gewählt?.
I SWT - Die Implementierungsphase 4.2.4 Prinzip der integrierten Dokumentation • Richtlinie • Folgende Verwaltungsinformationen sind am Anfang eines Programms aufzuführen (Vorspann des Programms): 1Name des Programms 2 Name des bzw. der Programmautoren (Vor- und Nachname) 3Versionsnummer,Status und Datum 4Aufgabe des Programms: Kurzgefaßte Beschreibung 5Zeit- und Speicherkomplexität in O-Notation.
I SWT - Die Implementierungsphase 4.2.4 Prinzip der integrierten Dokumentation • Versionsnummerbesteht aus 2 Teilen: • Release-Nummer • I. allg. einstellig • Steht, getrennt durch einen Punkt, vor der Level-Nummer (maximal zweistellig) • Vor der Release-Nummer steht einV • Level-Nummer • Beispiel:V1.2 • Die Version kennzeichnet zusammen mit dem Status den Bearbeitungszustand des Programms.
I SWT - Die Implementierungsphase 4.2.4 Prinzip der integrierten Dokumentation • Bearbeitungszustände (V-Modell) • geplant • Ein neues Programm enthält die Versionsnummer 1.0 und den Status »geplant« • in Bearbeitung • Das Programm befindet sich im privaten Entwicklungsbereich des Implementierers oder unter seiner Kontrolle in der Produktbibliothek.
I SWT - Die Implementierungsphase 4.2.4 Prinzip der integrierten Dokumentation • vorgelegt • Das Programm ist aus Implementierersicht fertig und wird in die Konfigurationsverwaltung übernommen • Vom Status »vorgelegt« ab führen Modifikationen zu einer Fortschreibung der Versionsangabe • akzeptiert • Das Programm wurde von der Qualitätssicherung überprüft und freigegeben • Es darf nur innerhalb einer neuen Version geändert werden.
I SWT - Die Implementierungsphase 4.2.4 Prinzip der integrierten Dokumentation • Beispiel: Programmvorspann // Programmname: XYZ //**************************************************** // Autor 1: Vorname Nachname // Autor 2: Vorname Nachname //**************************************************** // Version: V1.0 in Bearbeitung 4.4.96 // vorgelegt 6.4.96 // akzeptiert 7.4.96 // V1.1 in Bearbeitung 15.4.96 // vorgelegt 16.4.96 //**************************************************** // Aufgabe:Aufgabenbeschreibung // Zeitkomplexitaet: O(n log 2n) // Speicherkomplexitaet O(2n).
I SWT - Die Implementierungsphase 4.2.4 Prinzip der integrierten Dokumentation • Dokumentation muß integraler Bestandteil der Software-Entwicklung sein: • Bei einer Nachdokumentation am Ende der Codeerstellung sind wichtige Informationen, die während der Entwicklung angefallen sind, oft nicht mehr vorhanden • Entwicklungsentscheidungen (z.B.: Warum wurde welche Alternative gewählt?) müssen dokumentiert werden, um bei Modifikationen und Neuentwicklungen bereits gemachte Erfahrungen auswerten zu können • Der Aufwand für die Dokumentation wird reduziert, wenn zu dem Zeitpunkt, an dem die Information anfällt von demjenigen, der sie erzeugt oder verarbeitet, auch dokumentiert wird.
I SWT - Die Implementierungsphase 4.2.4 Prinzip der integrierten Dokumentation • Das Prinzips der integrierten Dokumentation... • reduziert den Aufwand zur Dokumentenerstellung, • stellt sicher, daß keine Informationen verlorengehen, • garantiert die rechtzeitige Verfügbarkeit der Dokumentation, • erfordert die entwicklungsbegleitende Dokumentation • Eine gute Dokumentation bildet die Voraussetzung für • leichte Einarbeitung in ein Produkt bei Personalwechsel oder durch neue Mitarbeiter • gute Wartbarkeit des Produkts.
I SWT - Die Implementierungsphase 4.3 Methode der schrittweisen Verfeinerung • Schrittweise Verfeinerung(stepwise refinement) • Bietet einen methodischen Rahmen für die Anwendung der allgemeinen top-down-Methode auf das »Programmieren im Kleinen« • Im Gegensatz zum Prinzip der Verfeinerung, das das zu erreichende Ziel beschreibt, gibt die schrittweise Verfeinerung einen methodischen Ansatz an, wie man dieses Ziel erreicht • Ausgehend von einer gegebenen und präzisen Problemstellung z.B. in Form einer Systemkomponenten-Spezifikation wird eineProblemlösung mit abstrakten Daten und abstrakten Anweisungenformuliert.
I SWT - Die Implementierungsphase 4.3 Methode der schrittweisen Verfeinerung • Beispiel: • Zur Konzentration der Einkaufs-, Vertriebs- und Marketingstrategie wird in einer Weinhandlung in vierteljährlichen Abständen eine Statistik benötigt, die die Umsatzverteilung der Weinanbaugebiete angibt • Die Statistik soll den Umsatz in DM sowie die prozentuale Veränderung gegenüber der letzten Statistikperiode pro Anbaugebiet angeben.
I SWT - Die Implementierungsphase 4.3 Methode der schrittweisen Verfeinerung • Datentypen und Prozeduren: // Typ fuer Artikelnummern typedef unsigned shortArtikelNrT; typedef floatDMarkT; // Typ fuer Deutsche Mark enumGebietT {BADEN, RHEINPFALZ, WUERTTEMBERG,FRANKEN, RHEINHESSEN, HESSISCHEBERGSTR, RHEINGAU, NAHE, MITTELRHEIN, MOSELSAARRUWER, AHR, AUSLAND}; const intANZAHLGEBIETE = AUSLAND + 1 // Liste mit Umsatz in DM fuer jedes Anbaugebiet typedefDMarkT UmsatzlisteT[ANZAHLGEBIETE]; // Prozeduren voidErmittleWeinumsatz(intArtikelNr, DMarkT &ViertelJahresUmsatz, GebietT &Anbaugebiet, bool&ArtikelNrBelegt); voidUmsatzAltLesen(UmsatzlisteT &UListe); voidUmsatzAltAktualisieren(UmsatzlisteT &UListe);.
I SWT - Die Implementierungsphase 4.3 Methode der schrittweisen Verfeinerung 1. Schritt: abstrakte Problemlösung • Es werden problemspezifische Typen, Daten und Anweisungen eingeführt und in verbaler Form beschrieben • Die Typen und Daten sollen problemrelevante Aspekte benennen • Die Operationen sollen Teilaufgaben abgrenzen • Beides soll losgelöst von programmiersprachlichen Formulierungen erfolgen.
I SWT - Die Implementierungsphase 4.3 Methode der schrittweisen Verfeinerung 1. Schritt: abstrakte Problemlösung // Programmname: UmsatzProAnbaugebiet // Aufgabe: .... // Importierte Typen: // ArtikelNrT, DMarkT, GebietT, UmsatzListeT // Importierte Prozeduren: // ErmittleWeinumsatz, UmsatzAltLesen, UmsatzAltAktualisieren // Datenstrukturen ---------------------------------- // TabelleUmsatzProGebiet // Algorithmus -------------------------------------- // Vorbereitung (1) // Weinumsatz pro Anbaugebiet ermitteln (2) // Vergleich mit Umsatzstatistik der Vorperiode (3) // Umsatzstatistik Vorperiode durch neue ersetzen (4) // Druckaufbereitung und Ausgabe (5).