Implementierung Umsetzung OO Konzepte in JAVA JAVA *.java C++ C++ public class Projekt { private String Bezeichnung; private Date Termin; public Projekt(String bez, Date ter) { } } public class Auftraggeber private String FirmenName; private String Ort; private Hashtable BeauftragteProjekte; ... Projekt Bezeichnung Termin Projekt() 0..* leer Beauftragt 1 Auftraggeber FirmenName Ort Aggregation beauftragt() storniert()
Implementierung der Methoden in JAVA JAVA *.java C++ C++ public class Auftraggeber { private String FirmenName; private String Ort; private Hashtable BeauftragteProjekte; public Projekt beauftragt(String bez, Date term) Projekt neuPrj = new Projekt(bez, term); BeauftragteProjekte.put(bez, neuPrj); return neuPrj; } ...
Tätigkeiten der Implementierung "Programmieren im Kleinen" Konzeption von Datenstrukturen und Algorithmen Verfeinerung Dokumentation der Problemlösung Zeit- und Speicherkomplexität bestimmen Test oder Verifikation
Ergebnisse der Implementierung .java C++ C++ public class Projekt { private String Bezeichnung; private Date Termin; Quellcode Objektcode Testprotokoll, Testplan .class C++ C++ 010010100100111010100010111110111 100111001110110010010111000110101 100101001111010101111010111100101 110111001011111101000000000000100 000000011010001000010111101011011 .doc C++ C++ Testcase 123: Zeitnachweis erfassen Vorbedingung:
Programmierfehler Eine Klassifikation Quelle: Grams 90, S.19 Programmierfehler Irrtümer Schnitzer überindividuell (Denkfallen) individuell angeborenes Verhalten erlerntes Verhalten Begabung Ausbildung
Prinzipien der Implementierung Verbalisierung Schrittweise Verfeinerung Integrierte Dokumentation Problemadäquate Datentypen
Verbalisierung Aussagekräftige Namensgebung C++ C++ // wenig aussagekräftige Bezeichner Feld1, Liste, Zähler // besser Messreihe1, BestellPositionen, AnzahlAnZeichen problemfreie, technische Bezeichner problembezogene Bezeichner
Verbalisierung Aussagekräftige Namensgebung C++ C++ // Berechnung einer Prämie P = G1 + Z * D; // besser Prämie = Grundprämie1 + Zulage * Dienstjahre; Ohne Aussagekraft, zu kurz klar
Verbalisierung Symbolische Konstanten C++ C++ // Konstante Prämie = 50.0 + 10.0 * Dienstjahre; // besser final float Grundprämie = 50.0; final float Zulage = 10.0; Prämie = Grundprämie + Zulage * Dienstjahre; unverständliche Konstante klar
Verbalisierung integrierte Kommentare C++ C++ // i um eins erhöhen i = i + 1; // besser Menge = Menge + 1; sagt bereits der Programmcode dokumentierender Programmcode
Integrierte Dokumentation Programmkopf C++ C++ /** * class Kunde * Auftraggeber in der Projektverwaltung * * @author Daniela Worel * @version V1.0 * @see IT Kompaktkurs * state akzeptiert */ class Kunde ...
Problemadäquate Datentypen z.B. Aufzählungstyp C++ C++ // schlecht int stand; // 1=ledig, 2=verheiratet,… // besser enum Familienstand {ledig,verheiratet,geschieden,verwitwet}; Familienstand stand; // noch besser class Familienstand { public boolean isLedig() {} ...
Abstrakte Datentypen z.B. Familienstand C++ C++ // enumeration class class Familienstand { private int Stand; public boolean isLedig() {} public boolean isVerheiratet() {} public void setVerheiratet() {} public void setGeschieden() {} ... }
Entwurfsmuster Beobachter Observable from java.util 1 * <interface> Observer from java.util hat > addObserver() deleteObserver() notifyObservers() View- Familienstand Familienstand isVerheiratet() isGeschieden() setVerheiratet() ... update ()
Implementierung des Beobachtermusters in JAVA C++ C++ class Familienstand extends Observable { public void setVerheiratet() { ... notifyObservers(); } ... } class ViewFamilienstand implements Observer ...