Post on 11-Oct-2015
Grundlagen der
Softwaretechnik(SWT)
Vorlesung im Wintersemester 2012/2013Leibniz Universitt Hannover
Prof. Dr. Kurt SchneiderFachgebiet Software Engineering
Kurt.Schneider@Inf.Uni-Hannover.de
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 3SWT 2012-13
1.
Grundlagen der Softwaretechnik
1. Wieso Software Engineering?
2. Programmieren: Vom Einzelkmpfer zum Groprojekt
3. Entwurf: Strukturen und nicht-funktionale Eigenschaften
4. Entwrfe notieren mit UML: Modelle im Software Engineering
5. Design Patterns: Entwurfserfahrungen
6. Anforderungen: Die Basis des Projekts
7. Projektmanagement: Wie alles zusammenspielen muss
8. Prozesse, Reife, Agilitt: ber den Tellerrand des Projekts
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 4SWT 2012-13
Anspruch der Veranstaltung
Lernziele von SWT (Vorlesung und bungen) Sie kennen die Schlagworte des Software Engineering Sie wissen, wie wichtige Verfahren im Prinzip funktionieren Sie haben einige selbst ausprobiert Sie wissen, wo sie genauer nachlesen knnen Sie knnen vernnftig in SW-Projekten mitarbeiten Sie achten beim Programmieren auf Verstndlichkeit Sie machen einige hufige Fehler nicht, weil Sie sie kennen Sie wgen ab und Sie entscheiden auf Basis eines begrndeten Urteils
Sie lernen dagegen nicht Grundlagen des Programmierens Irgendein kommerzielles Werkzeug zu bedienen
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 5SWT 2012-13
Organisatorisches
Aktuelle Informationen, Folien etc.: Wir verwenden StudIP Melden Sie sich auch hier an: www.se.uni-hannover.de Hier werden Bonuspunkte verwaltet.
Klausur Klausur SWT (und danach SWQ):
18.3.2013, Conti-Gebude Raum VII 201, 13:30 SWT, 14:45 SWQDiese Angaben ohne Gewhr! Lesen Sie kurz vorher www.se.uni-hannover.de
bungen: Anna Averbakh (Anna.Averbakh@inf.uni-hannover.de) Montags, 14:45 - 15:30 Uhr, MMH (Anna Averbakh)
--> berlauftermin, nur fr die Anfangsphase, dann beendet Dienstag, 11:15 12:15 Uhr, G323 (Polina Yakovleva) Dienstag, 15:00 16:00 Uhr, G323 (Oliver Karras) Mittwoch, 11:15 12:15 Uhr, G323 (Wadim Friedrich) Freitag, 10:00 11:00 Uhr, G323 (Matthias Herrmann)
Irrtum und nderungen vorbehalten!
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 6SWT 2012-13
Vorlesung bung Praktikum
Vorlesung Konzepte vorstellen Erklren kurz zeigen
bung Wichtiges noch mal zeigen Selbst anwenden/erklren Erfahrungen und Fragen diskutieren brigens: Korrelation bung-Note
Programmier Praktikum (ProPra) Programmieren ben Scheu verlieren In grerem Zusammenhang anwenden
Klausur
Berufspraxis
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 7SWT 2012-13
Wo Sie die angegebene Literatur finden
Bibliothek gegenber dem Hauptgebude
Systemstelle Software Engineering (L inf 430)
Im Lesesaal oder zu bestellen
in Anlehnung an Cockburn, A.: Writing Effective Use Cases. Addison-Wesley, 2001
Manche Bcher sind sehr gut zu
lesen. Blttern Sie doch mal durch!
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 8SWT 2012-13
Ein paar Tipps, aus Erfahrung
Das Wesen einer Vorlesung Frei gewhlt und doch kein Kino
Laptop, Block, oder Gedchtnis? Ein wenig Arbeitstechnik
Auch hier achten wir auf freundlichen, professionellen Stil Kommen Sie pnktlich Seien Sie leise, stren Sie Ihre Kollegen nicht Gehen Sie respektvoll miteinander um Spielen Sie mit Handy und Laptop: aber bitte nur drauen!
Wie man hineinruft
Wir wollen, dass Sie Erfolg habenund Ihnen die Sache Spa macht!
Anliegen und Ziele Herausforderungen an Software-Profis Grundbegriffe Geschichte und Vorbild Ingenieur Gedankenexperiment: Informationsfluss
Kapitel 1
Wieso Software Engineering?
weiche Botschaften - harte Wahrheiten
Prof. Dr. Kurt Schneider
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 10SWT 2012-13
Einstimmungsbild
http://www.plexispos.com/screens/touchkey1.jpg(20.9.2006)
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 11SWT 2012-13
Software ist berall
Bankomat Animierter Film Auto Zndschlssel Spielzeug Gehaltsabrechnung PC-Spiel Luftraumkontrolle Medizin ...
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 12SWT 2012-13
Mit SW ist jeder stndig konfrontiert
jemand muss eine Idee fr SW haben jemand muss sie entwickeln jemand muss sie kaufen jemand muss sie installieren jemand muss sie verwenden (wollen) jemand braucht die Resultate
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 13SWT 2012-13
Fazit: Einfluss von Software
SW beeinflusst Technik SW beeinflusst Wirtschaft SW beeinflusst Menschen
Software
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 14SWT 2012-13
Software ...
Ist der faszinierende Werkstoff unserer Zeit!
Aber es kommt darauf an, was man daraus macht
... und wie man es macht!
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 15SWT 2012-13
Wenn es dagegen nicht funktioniert
Katastrophenbeispiele Flugzeug bremst nicht Marssonde geht verloren Fahrkartenautomat macht einen verrckt Spiel ist nicht zu kapieren, Geburtstagskind heult
Was htten Sie besser gemacht?
Sie werden Gelegenheit bekommen, das zu beweisen: Auto Banken, Brsen Kernkraftwerke Spielzeughersteller Admin. Software
Hier oder in vielen anderen Bereichen schon in bungen und Softwareprojekt!
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 16SWT 2012-13
Softwareentwicklung richtig machenein kleiner Unterschied
Annahme: Sie wollen nicht Hobbyprogrammierer werden, sondern Softwareprofi dazu gehrt die richtige Einstellung
Nach dieser Vorlesung sollen Sie Fhigkeiten Fertigkeiten und berzeugungen gewonnen haben,
die die Wahrscheinlichkeit fr erfolgreiche Projekte erhhen.
Programmieren ist nicht schwer, professionell Entwickeln sehr Technische Seite: Programmstruktur und Methoden konomische Seite: Kosten und Nutzen Menschliche/psychologische Seite: Kunden und Mitarbeiter
Nehmen Sie die Softwaretechnik ernst, dann macht sie Spa
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 17SWT 2012-13
Kritik ist einfach
Bluescreen
Microsofts Datenerhebung
Zu komplizierte Oberflchen
Langsame Verarbeitung
Unlogische/doppelte Abfragen
Strende Releasewechsel
Sicherheitsbedenken
Anforderungen klren
Benutzer verstehen
Neueste Technik einsetzen
Seris planen und verfolgen
Qualitt und Risiken prfen
Unsere Frage muss sein: was knnen wir (als Informatiker) dagegen tun?
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 18SWT 2012-13
Herausforderung an Profis 1Software soll tun, was Kunden erwarten
Aber woher wissen wir, was Kunden erwarten? Anforderungen erfassen und umsetzen Irrglauben ablegen, wir wssten selbst am besten, was richtig ist
Und wer genau sind diese Kunden? Initiator des Auftrags, Kufer, Anwender, Marketing Nicht nur den Erstbesten befragen
Aber wenn die es nicht sagen? dann knnen sie es vielleicht einfach nicht! Wir mssen helfen dafr gibt es Techniken (Requirements Eng.)
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 19SWT 2012-13
Aber fr wen? Verschiedene Leute haben unterschiedliche Bedrfnisse Usability Engineering: Benutzerprofil erstellen
Und in welchem Zusammenhang? Eigentlich will kaum einer ein Programm bedienen sondern
eine Aufgabe erledigen Usability Engineering: Aufgabenanalyse durchfhren
Aber sind Oberflchen nicht Geschmackssache? Irrtum: darum geht es gar nicht! Man kann objektiv sagen:
manche Farbkombinationen sind physiologisch ungnstig Man merkt sich nur 5+/-2 oder 3*3 Einheiten und so weiter: das zu bedenken hilft schon sehr
Geschmacksfragen von obj. Bedienbarkeit trennen
Herausforderung an Profis 2Software soll leicht zu bedienen sein
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 20SWT 2012-13
Herausforderung an Profis 3Software soll im Zeit- und Kostenplan bleiben
Software
Zeit
Kosten Qualitt
ACHTUNG!Qualitt umfasst hier
Funktionalitt undnicht-funktionale
Eigenschaften
Realistisch planen trotz vieler Unsicherheiten Alle relevanten Aspekte methodisch planen (Projektmgmt.) Systematisch aus Erfahrung lernen
Neueste Technik einsetzen, dennoch gut schtzen Typische Informatikerfehler vermeiden, Schtztechniken
Auswirkungen von Zeit- und Kostenberziehung bedenken Risiken fr den Kunden abschtzen Damit eigene Risiken
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 21SWT 2012-13
Software Engineering
Hilft, diese Herausforderungen anzugehen
Bietet systematische Methoden und Techniken Projektmanagement Risikomanagement Requirements Engineering Usability Engineering und viele Techniken mehr
Bezieht sich auf SW-Entwicklung, -Akquisition und -Wartung
Bietet Konzepte, praktische Tipps fr den tglichen Bedarf... aber auch ungelste Forschungsfragen
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 22SWT 2012-13
SE wird beeinflusst
Fazit: Das ist kein softes Bild: harte Einflsse! SE muss sich in der Praxis dieses Spannungsfelds bewhren Software-Profis knnen sich nicht nur auf einen Aspekt strzen
Menschen
TechnikWirtschaft
SoftwareEngineering
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 23SWT 2012-13
Grundbegriffe
Software (SW) Computer programs, procedures and possibly associated
documentation and data pertaining to the operation of a computer system (IEEE Std 610.12 - 1990)
Bemerkungen: Computer system im weiteren Sinn: embedded
Software Engineering (SE)(1)the application of a systematic, disciplined, quantifiable approach
to the development, operation, and maintenance of software; that is, the application of engineering to software
(2) the study of approaches as in (1) (IEEE Std 610.12 - 1990)
offenbar ist also Engineering: a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of X
Parnas: SE erst ab 2 Personen und 2 Versionen
Softwaretechnik (SWT): hier als Synonym fr Software Engineering
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 24SWT 2012-13
Ingenieursprinzipien
A systematic, disciplined, quantifiable approach to the development, operation, and maintenance of X
Konsequenzen Kostendenken
Kein Perfektionismus
Qualittsbewutsein es luft reicht nicht
Anwendung von Normen und Regeln keine Knstler
Probleme durch Zerlegung lsen divide et impera
Baugruppen und Wiederverwendung statt not invented here
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 25SWT 2012-13
Wieso Software Engineering?
Hardware wird relativ immer billiger und besser Speicher ist grer, schneller, billiger Rechner auch Netzwerke auch
Software kann nicht mithalten Produktivittsgap Denn Software entsteht im wesentlichen im Hirn Das wchst nicht so schneller wie Chips und Speicher
Verzahnung mit Wirtschaft und Gesellschaft Immer mehr Software in allen Bereichen steigende Komplexitt wachsende Lebensdauer grere Technologiesprnge
SW=Risiko+Chance
Muss man systematischangehen, nicht zufllig
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 26SWT 2012-13
Kurze Geschichte des Software Engineering
Sehnsucht: ingenieursmig auch bei Software vorgehen! Verklrung des Ingenieurs
Bei Hardware klappt es so gut, und bei Brcken und Husern
Aber Software ist anders SW ist immateriell nur Entwicklung, keine Fertigung SW hat unstetiges Verhalten Testen viel schwieriger universelles Material fr alle mglichen Anwendungen amorphes Material keine implizite Struktur Entwickler berschtzen sich regelmig
Trotzdem mchte man SW genauso gut in den Griff kriegen
F.L. Bauer, NATO Science Conference, Garmisch-Partenkirchen 1968Anwendung von Ingenieursprinzipien fr zuverlssige SW, die auf realen Rechnern luft und mit wirtschaftlichen Mitteln erstellt wird.
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 27SWT 2012-13
NATO Science ConferenceGarmisch-Partenkirchen 1968
http://homepages.cs.ncl.ac.uk/brian.randell/NATO/N1968/
Der Begriff Software Engineeringwird geprgt
Prof. F.L. Bauer
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 28SWT 2012-13
Professionelle Softwareentwicklung?http://www.csss.cs.ubc.ca/files/images/DSCN2559.preview.jpg(29.9.06)
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 29SWT 2012-13
SW-Entwicklung
Elemente der Software-Entwicklung
Computer/Ressource
Person
7300Day One
7200Info-Material
12
a: BedienkonzeptEntwickeln (3)
3
b: KassiererschulungErarbeiten (3)
4d: InfomaterialEntwickeln (3)
e: Infomaterialverteilen
(1)
5
c: Kassierer-Schulung
halten(2)
6f: erster Tagoperativ
(1)
03
6
6
9/9
/8/7
/6
/3
/4
/0
7 8
Plan
Phase
Projekt-definition
Abfolge
Rolle
Anforderungs-erhebung
Codierung
Aktivitten
Dokument
Handbuch
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 30SWT 2012-13
SW-Entwicklung
Modelle sind Voraussetzung fr Planung
Rolle
Computer/Ressource
Dokument
Person
7300Day One
7200Info-Material
12
a: BedienkonzeptEntwickeln (3)
3
b: KassiererschulungErarbeiten (3)
4d: InfomaterialEntwickeln (3)
e: Infomaterialverteilen
(1)
5
c: Kassierer-Schulung
halten(2)
6f: erster Tagoperativ
(1)
03
6
6
9/9
/8/7
/6
/3
/4
/0
7 8
Plan
Phase
Projekt-definition
Abfolge
Anforderungs-erhebung
Codierung
Aktivitten
Handbuch
Modell
Original
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 31SWT 2012-13
Grundbegriff Modell
Original Modell
Relevante Eigenschaften
PrterierteEigenschaften
AbundanteEigensch.
Modell-Abbildung
Fragen zu Charakterisierung und Verstndnis Was ist das Original? Modell fr wen? Modell zu welchem Zweck (welche Operationen)? Welche Eigenschaften sind dafr relevant?
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 32SWT 2012-13
Wozu modelliert man was?
Modell-element
Original Relevante Eigenschaften
Fr wen, wozu?
Aktivitt Bestimmte Ttigkeit
Ziel, Ergebnis, Dauer, Teilnehmer
Projektleiter, Mitarbeiter: Plan, Aufgaben
Rolle Bndel von Aufgaben, Rechten u. Pflichten
Aufgaben, ZustndigkeitenVerantwortg.
Alle Projekt-beteiligte: wissen, wer was tun muss
Dokument Papier- oder elektron. Dokument
Zugnglich, lesbar, meist mit definierter Struktur
Autor und Leser: was ist zu leisten/zu erwarten
Person Individueller Mensch
Individuum; Fhigkeiten, Krankheiten
Projektleiter: Rollen zuweisen, Eigen-heiten beachten
Beziehungen Abhngigkeit, Kenntnisse
(verschieden) (vielfltig: meist um bersicht zu wahren
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 33SWT 2012-13
Wie modelliert man Software-Entwicklung?SPEM / Syntax
SPEM heit Software & Systems Process Engineering Meta-Model Dt.: Metamodell fr Entwicklungsprozesse der Software- und Systemtechnik Version 2.0 vom April 2008
Historie Es gibt verwirrend viele Ablaufnotationen Nach dem Vorbild von UML angegangen; aber anderes Original Als UML subset definiert (merkt man aber kaum) D.h: ordentlich definiertes Austauschformat fr Prozessbeschreibungen
SPEM ist kein Prozess sondern eine Modellierungsnotation dafr
z.B. CodeConventions
z.B.: Entwickler z.B. programmieren
z.B. SourceCode
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 34SWT 2012-13
SPEM-Notation (Auszug)
Work Product Definition Dokument oder anderes Produkt
Role Definition Bndel von (erwarteten) Fhigkeiten u. Kompetenzen AKV: Aufgaben, Kompetenzen, Verantwortlichkeiten
Task Definition Arbeitsvorgang; kann unterteilt werden
Category Zum Strukturieren von Elemente (in eine Hierarchie)
Guidance Anleitende Info.: Templates, Checklisten, Vorgaben
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 35SWT 2012-13
Person und RolleImmer genau unterscheiden
Beide Konzepte sind wichtig Aber sie bedeuten nicht das Gleiche!
Rolle Auf Zweck hin definiert:
Aufgabe erfllen Profil vorausgesetzt:
Kenntnisse, Fhigkeiten Definierte Aufgaben, Zu-
stndigkeiten, Verantwortg. Mit Erwartungen verbunden Von einer oder mehreren
Personen auszufllen
Person Individuum mit persnlicher
Geschichte: ist, wie sie ist Hat ein Profil, passt mehr oder
weniger zu Rolle Wird Rolle zugewiesen, ber-
nimmt deren Aufgaben usw. Erfllt Erwartung mehr/weniger Kann eine, mehrere oder keine
(definierte) Rolle wahrnehmen
Patrizia
Paul
Entwickler
Analytiker
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 36SWT 2012-13
Ordnung im Softwareprojektdurch Prozesse und Prozessmodelle
Aktivitten und Ablufe
Normaler Ablauf
es gibt aber Alternativen!
Analyse(Anford.) Entwurf Codierung Integration Betrieb
Code&fix: lieber nicht!
Codierung Codierung CodierungFix Fix
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 37SWT 2012-13
Beispiel fr eine Variante
Prototyping auch davon gibt es noch Unter-Varianten
Analyse(Anford.) Codierung
Integration Betrieb
EntwurfAnalyse(Anford.) Codierung
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 38SWT 2012-13
Ordnung im Softwareprojekt
7300Day One
7200Info-Material
12
a: BedienkonzeptEntwickeln (3)
3
b: KassiererschulungErarbeiten (3)
4d: InfomaterialEntwickeln (3)
e: Infomaterialverteilen
(1)
5
c: Kassierer-Schulung
halten(2)
6f: erster Tagoperativ
(1)
03
6
6
9/9
/8/7
/6
/3
/4
/0
7 8
Projektplan
Benutzer-Handbuch
Dieter-Paul
Einige Beziehungen
Patrizia
isterstellt
BetriebIntegra-tionCodierungEntwurfAnalyse(Anford.)
(Betriebs-Ing.)
Projektleiter
ProgrammiererDesignerAnalytiker
Tech.Writer
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 39SWT 2012-13
Grundbegriffe fr diese Vorlesung
Diese Dokumentarten muss man kennen
Wie die Aktivittentreten sie in verschiedenen Formen/Namen auf
Grundbezeichnungen (rechts) sind ein guter Anhaltspunkt
... wir kommen darauf zurck!
Lasten-heft
Pflichten-heft
Grob-entwurf
Fein-entwurf
Code
TechnischeDoku-
mentation
Roll-Out-Plan
Test-plne
Benutzer-Handbuch
Software = ... and documentation
BetriebIntegra-tionCodie-rungEntwurf
Analyse(Anford.)
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 40SWT 2012-13
Gedankenexperimentzum Informationsfluss in Projekten
Ein Experiment, um die Dynamik zu sehen! Softwareprojekt ist etwas hoch Dynamisches
Gesucht: Entscheidungshilfe in vielen SE-Situationen wie wirkt sich eine Handlung auf Projektfortschritt aus?
Gefunden: Softwarequanten-Metapher Metapher half schon bei der Simulation von SW-Projekten
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 41SWT 2012-13
Software-Quanten
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 42SWT 2012-13
Software-Quantenwandern
Spezifikation
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 43SWT 2012-13
Software-Quantenwandern
Spezifikation Entwurf Code
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 44SWT 2012-13
... und am Schluss
Spezifikation Entwurf Code
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 45SWT 2012-13
Zusammenfassung von Kapitel 1
Software beeinflusst Technik, Wirtschaft, Menschen
Software Engineering wird davon beeinflusst Professioneller Softwareingenieur beachtet alle Aspekte
Geschichte des Begriffs Software Engineering NATO Science Conference 68, F.L. Bauer, Engineering als Vorbild Aber Software ist ein spezielles Material!
Software Engineering: Viel Neues in Forschung und Praxis
Modelle fr bersicht und Planung Aspekte eines Softwareprojekts
Gedankenmodell Software-Quanten Probieren Sie es aus: www.se.uni-hannover.de/en/qgame
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 46SWT 2012-13
Programmhygiene und egoless programming Dokumentation und Zusammenarbeit Konfigurationsmanagement Information Hiding Interfaces
Kapitel 2
ProgrammierenVom Einzelkmpfer zum Groprojekt
Prof. Dr. Kurt Schneider
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 47SWT 2012-13
Situation Einzelkmpfer
AlleinKeiner bezahlt
Keiner beteiligt sichSelbst die Idee gehabt
Wird nicht weiterentwickelt
Muss keinem Kunden gefallenMuss nicht zusammenpassenMuss nicht verstndlich sein
Muss man keinem zeigenMuss nicht gelingen
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 48SWT 2012-13
Stellen Sie sich vor
Sie haben eine neue Stelle Sie sollen Code entwickeln und pflegen
Zu Anfang bekommen Sie das Programm eines Kollegen Er hat sehr auf Speichereffizienz geachtet, heit es Er ist leider versetzt worden Nicht mehr verfgbar
Viel Spa
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 49SWT 2012-13
Was tut dieses Programmstck?
Erst verstehen, dann verbessern
Wieso verstehen Sie das nicht?Das Programm funktioniert doch!
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 50SWT 2012-13
Quellcode dient der Kommunikation
Syntax korrekt der Compiler versteht Semantik korrekt das Programm tut, was es soll
Dennoch kann es unverstndlich und unwartbar sein! Dann ist es in der Praxis nutzlos
FazitQuellcode dient der Kommunikationmit dem Compilervor allem aber mit anderen Menschen
Quellcode
Entwickler
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 51SWT 2012-13
Erster Versuch: Bessere Formatierung
Schon besser. Bezeichner sind nicht hilfreich, im Gegenteil
berlang, kryptisch, mit Sonderzeichen bezeichnen nichts, sondern verwirren
Kein Hinweis!
FALSCH!
Bedeutung der intVar?
x, y: Koordinaten?
Irrefhrend
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 52SWT 2012-13
Zweiter Versuch: Bessere BezeichnerFazit: Auch das Format ist wichtig
Leerzeilen, Leerzeichen, TabsUmbrche, Einrckungen
Sieht wie Fehler aus
Leere strt
Leere fehlt
Gegen die Semantik
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 53SWT 2012-13
Format und Bezeichner besser
Keine Kommentare Alles public, keine Exceptions Verstehen Sie, was hier passiert und warum?
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 54SWT 2012-13
Kommentare sind kein Luxus
Schreiben Sie Programme zum Lesen fr Menschen!
Dazu gehren Bezeichner Kommentare Optische Verteilung
Hintergrundinformation Huffmann Code
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 55SWT 2012-13
Fazit: Wie sehen Programme aus?
Sie whlen im Quellcode: Klassennamen Methodennamen Leerzeichen Kommentare Einrckungen
Variablentypen Schleifen Rckgabewerte
Ziele Verstndlichkeit Lesbarkeit
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 56SWT 2012-13
Software Engineering: Zoom out
Vom Einzelkmpfer zum Team und Projekt
Programmierstil: subjektive Vorlieben und professionelles Verhalten
Sie programmieren nicht vor allem fr sich Man soll nicht merken, wer es gemacht hat (egoless!) Jemand anders macht damit weiter evtl. nach langer Zeit Software-Entwicklung ist viel mehr als Programmieren Sie mssen zusammen erfolgreich sein
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 57SWT 2012-13
Sie sind nicht allein.
Groe Systeme kann man nicht allein entwickeln
Entwicklung findet immer mit vielen Beteiligten statt Viele Kunden Viele Entwickler
Koordination erforderlich Entwicklungsprozesse fr die Ablufe Versions- und Konfigurationsmanagement fr die Technik
Untersttzung durch Werkzeuge z.B. CVS, Subversion oder Git
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 58SWT 2012-13
Richtlinien
Bezeichner: machen knapp ihre Bedeutung klar
Format: gewohnte Struktur erleichtert die Orientierung
Kommentare: erklren den Quellcode (warum ist das so?)
Externe Dokumentation: Beschreibt ausfhrlicher Hintergrnde
Aufteilung und Struktur: entspricht den Entwurfsentscheidungen Pakete: Nicht vergessen! Anzahl von Klassen, Methoden, LOC, Kommentaren: ausgewogen Vererbung: einsetzen, aber nicht zu tief vererben Komplizierte Stellen im Programm mssen erklrt werden
Wieso muss das gemacht werden? Wieso wird es so gemacht? Was bedeutet die Konstante, woher kommt die Formel? Welche Funktion hat das im Algorithmus?
Mglichst macht man aber gleich gar nichts kompliziert
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 59SWT 2012-13
Beispiele aus dem ProPra zur Diskussion
package de.unihannover.se.pp.Engine;
public class Account implements IAccount {private String name;private int balance;
public Account(String name, int balance){
setName(name);setBalance(balance);
}
public String getName() {return name;
}
public void setName(String name) {if(name == null)
throw new IllegalArgumentException();if(name.equals(""))
throw new IllegalArgumentException ("Der Kontoname sollte mindestens ein Zeichen lang sein!");this.name = name;
}
// Folgen noch getter und setter
public int getBalance() {return balance;
}
AufgabeImplementierung fr Interface IAccount- Kontostand abrufen- Inhabernamen abrufen und setzen
Sinnvoller Paketname
Gute Bezeichner
Position inkonsistent: {
Sogar sehr gut: Sonderflle behandelt
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 60SWT 2012-13
Bezeichner sorgfltig whlen
Konstanten benennen Symbolische Namen: PI statt 3.141592 Gro geschrieben: MEHRWERTSTEUER statt 16.0
Kurzbezeichner (nur) dort, wo sie blich sind Schleifenzhler: i, j, k Koordinaten: x, y Aber nicht aus Faulheit: asrstz (Abschreibungsrabattsatz) Konvention: Teilweise zur Vereinheitlichung erzwungen U2-MEA-PREM
Lngere Bezeichner Drcken inhaltliche Bedeutung aus: steuersatz, kontonr Hinweise auf Typ sind akzeptabel: kontoNrInt (nicht so gut) Aber NICHT der Typ allein: float1 Nicht zu lang whlen: steuerlichAbsetzbarerPauschbetrag Jedes Objekt soll EINE einzige Bedeutung haben: eindeutig benennen Deutsch oder Englisch: kein Gemisch
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 61SWT 2012-13
Methodennamen
Bezeichnen, was der Empfnger tun soll: () setName fillRectangle Update
Methoden mit Rckgabe: Name bezeichnet Rckgabewert isEmpty implizierte Rckgabewerte: ja oder nein getName nicht so schn, aber blich (Rckgabe: name) conflictingRules ermittelt Sammlung widersprchlicher Regeln
Rckgabe: Rules (und zwar die mit Konflikt)
Am besten lesen sich Aufrufe wie normale Stze steuerformular.steuersatz(kunde.getEinkommen()) Hallo Steuerformular, was ist der Steuersatz vom Einkommen des kunden?
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 62SWT 2012-13
Vertiefung: Variablendefinition
Nur eine pro Zeile definieren, dahinter // Kommentardouble steuersatz; // Durchschnittssatz, in Prozent
Initalisieren, wenn nicht stets erst eine Berechnung ntigdouble mehrwertsteuer = 19.0; //normaler Satz, in %
Mglichst lokal definieren Schleifenvariablen in der Schleife
for (int i = 1; i
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 63SWT 2012-13
Java-Konventionen von Sun
Google: Java code conventions (von Sun). Auszug:
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 64SWT 2012-13
Code-Konventionen
Wozu? Einheitlicher Code (egoless)
Welches sind die besten Konventionen? Eclipse, Sun, Firma XY, Ihre eigenen?
Welche sollte eine Firma verwenden, wie oft wechseln? Bekannte Einfache Prfbare
Antwort: vor allem immer dieselben!
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 65SWT 2012-13
Eclipse hilft bei Java-Konventionen
Rechtes-Maus-Men
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 66SWT 2012-13
ProPra-Beispiel zur Diskussion keine Angst: stets anonym
protected JLabel account1, account2;private IAccount acc1, acc2;
JLabel lblAcc1 = (JLabel)main.getContentPane().getComponents()[6];JLabel lblAcc2 = (JLabel)main.getContentPane().getComponents()[7];
// Fr die Fhigkeit, ein Fenster darzustellen: die GANZE Klassepublic class Fenster extends JFrame {
public Fenster(){}}
public class Konto extends JFrame implements IAccount public Konto(ArrayList liste)
Konto kann alles
Nur der Name neu?
Keine sprechenden Namenschlecht zu merken
fehleranfllig
Components nicht gemerkt,Mssen kryptisch angesprochen werden
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 67SWT 2012-13
ProPra-Beispiel zur Diskussion keine Angst: stets anonym
public MoneyTransfer(Account source, Account destination, int sum){
source.setBalance(source.getBalance() - sum);destination.setBalance(destination.getBalance() + sum);
this.sum = sum;this.source = source;this.destination = destination;
}public void execute(){
source.setBalance(source.getBalance() - sum);destination.setBalance(destination.getBalance()+sum);
}
Wieso (erst jetzt)?
Achtung: Schon im Constructor geschehen!
Besser:1. Parameter in Attribute bernehmen2. Erst bei explizitem execute() ausfhren
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 68SWT 2012-13
ProPra-Beispiel zur Diskussion keine Angst: stets anonym
package uebung01;public class MoneyTransfer implements IMoneyTransfer {
Account source;Account destination;int amount;public MoneyTransfer(Account source, Account destination, int amount) {
this.source = source;this.destination = destination;if (amount >= 0)
this.amount = amount;else
this.amount = -1;}public void execute() {
if (amount == -1)System.out.println("Buchung nicht erfolgreich - negativer Betrag!");
else {source.setBalance(source.getBalance() - amount);destination.setBalance(destination.getBalance() + amount);System.out.println("Buchung erfolgreich!");
}}
}
Wenig Luft: Leerzeilen, Kommentare
Paketname entspricht nicht der Norm
Abfrage bereits im Konstruktor. Wieso?
Fehler implizit durch Code gekennzeichnet, keine Reaktion
Scheinbar unsinnig enge Abfrage: was ist mit -200?
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 69SWT 2012-13
Programmhygiene und egoless programming Dokumentation und Zusammenarbeit Konfigurationsmanagement Information Hiding Interfaces
Kapitel 2
ProgrammierenVom Einzelkmpfer zum Groprojekt
Prof. Dr. Kurt Schneider
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 70SWT 2012-13
Dokumentation im Code
Kopfkommentare (header) Bis zu einer Druckseite/Methode blich
Struktur und Gestalt des Codes Code ist Dokument, muss lesbar gemacht werden Einrckungen, Kommentare, Bezeichner
Namen von Variablen, Klassen, Methoden usw. Hufig Namenskonventionen Dennoch sprechende Benennung
Kommentare Wo, wie viel, welche Angaben (v.a. Kopfkommentare)?
Im Projekt standardisieren! Nicht beschreiben, was man sieht (5 addieren, Exception werfen)
Eher warum es geschieht und warum auf diese Weise
Wichtig wieder:Rationale
(Begrndung)
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 71SWT 2012-13
Arten von Dokumentation
Fr den Benutzer Manual, Bedienungsanleitung Roll-Out-Plan Wartungsunterlagen, technische Dokumentation
Fr den Entwickler Codekommentare Technische Dokumentation Hintergrundinformation
Fr das Projekt und das Management Produktdokumentation Projektdokumentation (Ablauf, Zeitplne, Organisatorisches) Prozessdokumentation (Zwischendokumente, Prozessangaben)
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 72SWT 2012-13
Javadoc
Verlinkte Dokumentation, aus Kommentaren generiertdoc comments:
/** */
Schnitt-Stellen(APIs)
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 73SWT 2012-13
Javadoc / Graphics
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 74SWT 2012-13
Externe JavaDoc-Dokumentation erzeugen1. JavaDoc-Kommentare einfgen
normale Kommentare werden ignoriert
JavaDoc an die richtige Stelle schreiben
Es gibt Schlsselwrter (mit @)
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 75SWT 2012-13
Externe JavaDoc-Dokumentation erzeugen2. JavaDoc generieren
Einige weitere Angaben, [command liegt unter Java/bin/javadoc.exe],dann
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 76SWT 2012-13
Externe JavaDoc-Dokumentation erzeugen3. Erzeugte Dokumentation verwenden
Ein ganzer Dokumentenbaum wird erzeugt; z.B. index.html:
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 77SWT 2012-13
Viel ist mglich in JavaDoc
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 78SWT 2012-13
Externe DokumentationBeispiel: Entwurfsidee Huffmann-Code
Teilweise als JavaDoc aus dem Programm generiert Teils separat geschrieben (nicht im Programm: Beispiel, Theorie)
3
6
7
22
23
30
46
55
200
7
22
23
30
46
55
200
93
6
1622
23
30
46
55
200
7
93
6
16
Eintrge nach Hufigkeit sortieren.
3
6
7
22
23
30
46
55
200
97
22
23
30
46
55
200
93
6
Die zwei kleinsten streichen,ihre Summe in einen neuen Eintragstecken und einsortieren.
Diesen Schritt wiederholen,bis aus der Liste ein Baum
geworden ist.
ABCDEFGHI
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 79SWT 2012-13
Externe DokumentationBeispiel: Entwurfsidee Huffmann-Code
Auch interessant: Beweis, dass dies zu optimalem Code fhrt Wichtige Entwicklerdokumentation: Empfohlene Datenstruktur
Diesen Schritt wiederholen,bis aus der Liste ein Baum
geworden ist.
22
23
30
46
55200
7
93
6
1638
53
84
108
192392
3
6
7
22
23
30
46
55
200
ABCDEFGHI
Jeweils 0 und 1 an Verzweigung schreiben.Egal, was wohin.
Der 01-Pfad ist der Code fr den Buch-staben
0
1 1
11
11
110
0
00
00
0 0 0 0 0 1 00 0 0 0 1 10 0 0 0 00 0 0 10 1 0 00 1 0 10 0 10 1 11
Huffmann-Code
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 80SWT 2012-13
Programmhygiene und egoless programming Dokumentation und Zusammenarbeit Konfigurationsmanagement Information Hiding Interfaces
Kapitel 2
ProgrammierenVom Einzelkmpfer zum Groprojekt
Prof. Dr. Kurt Schneider
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 81SWT 2012-13
Code organisieren: Versionen und Konfigurationen
Ziele Dateien, die bei der Entwicklung anfallen, fr Team koordinieren Fr alle zugreifbar Kein versehentliches Lschen Kein gegenseitiges berschreiben Klarheit ber jeweils gltige Fassung
xyyz
xyneu
v1
V2/3
v2
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 82SWT 2012-13
Code organisieren: Versionen und Konfigurationen
Grundgebriffe Version =Def Definierter Stand eines Dokuments
Konfiguration =DefMenge der Versionen aller Bestandteile eines Systems,die zu einem definierten Stand gehren
v3v2v1
v18v17
V2.0V1.1V0.8
Teil A
Teil B
Teil C
System = A+B+C
Zeit
Konfiguration (tk)
tk
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 83SWT 2012-13
Grundlagen
Aufbau einer Versionsverwaltung
DB Filesystem
Repository
Working CopyWorking Copy
Client Client
Server
Client Interface
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 84SWT 2012-13
Wichtige Begriffe 1/2
Repository Zentraler Datenspeicher
Working Copy Lokale Arbeitskopie
Checkout Arbeitskopie aus dem
Repository erstellen Update
Arbeitskopie mit nderungen im Repository aktualisieren
Add Neue Datei/Verzeichnis dem
Repository hinzufgen Checkin/Commit
nderungen der Arbeitskopie ins Repository schreiben
v1
V2/3
v2
OptimistischMehrere haben Zugriff auf ein DokumentFalls beide ndern, gibt es Kollission
PessimistischSicherheitshalber darf nur einer ndernKeine KollissionBehindert aber Parallelarbeit
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 85SWT 2012-13
Wichtige Begriffe 2/2
Conflict Gleichzeitige nderung der selben Stelle einer Datei
Diff Differenzen zweier Dateien anzeigen
Merge Zusammenfhren von zwei in Konflikt stehenden Dateien
Tag Spezieller Name einer Version (z.B.: Release 1.4)
Branch Separater Zweig eines Projekts, an dem unabhngig vom
Hauptzweig weitergearbeitet wird Z.B.: Hauptzweig: Firefox 1.5.x, Branch: Firefox 2.0.x
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 86SWT 2012-13
VersionsmanagementPrinzip (optimistisch)
Grundoperationen1. Aufsetzen: Pfade, Rechte etc.2. Datei beim System anmelden: add3. Datei eintragen: commit4. Datei herausholen: checkout5. Datei zurckgeben: commit6. Datei nochmal holen: update
d
3 commit d2 add d
1
5b commit d6 update d
Weiterfhrendes Branches (Verzweigungen)
Abspalten: branch Verbinden: merge
Konflikte Nie beim Auslesen: optimistisch Falls beim Zurckgeben:
Merge versuchen Sonst Warnung, manuell
4b checkout d
d
4a checkout d(d ndern)
dworkingdirectories
5 commit d
7 Konflikt auflsen8 commit
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 87SWT 2012-13
Programmhygiene und egoless programming Dokumentation und Zusammenarbeit Konfigurationsmanagement Information Hiding Interfaces
Kapitel 2
ProgrammierenVom Einzelkmpfer zum Groprojekt
Prof. Dr. Kurt Schneider
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 88SWT 2012-13
Sie arbeiten im TeamStellen Sie sich vor
Sie haben den Huffmann-Code programmiert. Nun soll ihn das ganze Team benutzen.
Was geben Sie den Kollegen, damit sie das tun knnen?
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 89SWT 2012-13
Was mssen die anderen wissen?Beispiel Huffmann-Code-Programm
3
6
7
22
23
30
46
55
200
3
6
7
22
23
30
46
55
200
97
22
23
30
46
55
200
93
6
7
22
23
30
46
55
200
93
6
1622
23
30
46
55
200
7
93
6
16Eintrge nach Hufigkeit sortieren.
Die zwei kleinsten streichen,ihre Summe in einen neuen Eintragstecken und einsortieren.
Diesen Schritt wiederholen,bis aus der Liste ein Baum geworden ist.
ABCDEFGHI
Diesen Schritt wiederholen,bis aus der Liste ein Baum
22
23
30
46
55
200
7
93
6
1638
53
84
108
192
392
3
6
7
22
23
30
46
55
200
ABCDEFGHI
Jeweils 0 und 1 an Verzweigung schreiben.
0
1
1
11
11
110
0
00
0
00 0 0 0 0 1 0
0 0 0 0 1 10 0 0 0 00 0 0 10 1 0 00 1 0 10 0 10 1 11
Huffmann-Code
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 90SWT 2012-13
PerspektivenwechselWas mchten Sie in dieser Situaton wissen (mssen)?
Oh, es gibt jetzt einen effizienteren Algorithmus! Verwenden Sie doch den! Wir haben ein Modul gekauft.Es ist aber sehr kompliziert; 12 Seiten Mathe wenn Sie das nicht verstanden haben, knnen Sie das Programm kaum richtig einsetzen.Aber wir haben auch die ganze Entwicklerdoku hier drei Ordner!Super, oder?
Wollen Sie das
BetterCode
+addChar(char, int)+printCodeBook()
Oder eher das:
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 91SWT 2012-13
Also: Was mssen die anderen wissen?Beispiel Huffmann-Code-Programm
3
6
7
22
23
30
46
55
200
3
6
7
22
23
30
46
55
200
97
22
23
30
46
55
200
93
6
7
22
23
30
46
55
200
93
6
1622
23
30
46
55
200
7
93
6
16Eintrge nach Hufigkeit sortieren.
Die zwei kleinsten streichen,ihre Summe in einen neuen Eintragstecken und einsortieren.
Diesen Schritt wiederholen,bis aus der Liste ein Baum geworden ist.
ABCDEFGHI
Diesen Schritt wiederholen,bis aus der Liste ein Baum
22
2330
46
55200
7
936
1638
53
84
108
192392
367
2223304655
200
ABCDEFGHI
Jeweils 0 und 1 an Verzweigung schreiben.
0
11
11
11
110
0
00
00
0 0 0 0 0 1 00 0 0 0 1 10 0 0 0 00 0 0 10 1 0 00 1 0 10 0 10 1 11
Huffmann-Code
HuffmannCode
+addChar(char, int)+printCodeBook()
Das meiste verstecken wir!Zum Glck.
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 92SWT 2012-13
Entwurfsprinzip Information Hiding
Von David Parnas, 1972
Absolute Grundlage des SE! Taucht immer wieder auf Von Implementierung bis Doku.
Idee: Jede Einheit gibt nur das Ntigste preis, um sie zu nutzen Das ist die Schnittstelle mit Dokumentation
Wie sie funktioniert, ist dagegen versteckt (hidden) ndert sich etwas Internes, merkt man es auen nicht Da vor ihm/ihr versteckt, braucht Nutzer keine Selbstdisziplin Jede Einheit versteckt (min.) eine Entwurfsentscheidung Parnas
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 93SWT 2012-13
Beispiel/SzenarioVereinfachtes Telefonbuch
A schreibt Customer Management System (CMS) Will darin ein vereinfachtes Telefonbuch nutzen Beauftragt B
B macht sich Anforderungen klar (Name, Telefonnummer)-Eintrge verwalten Suche nach richtigem Eintrag untersttzen Lschen, Initialisieren
Alles Kompliziertere lassen wir in diesem Beispiel weg! Namen seien eindeutig, null werde abgefangen usw.
Ziel: Sinn von Information Hiding mit Interfaces zeigen
A
B
BeispielInterfaces
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 94SWT 2012-13
PhoneTable
Erster Versuch: B verwendet Array
PhoneTable(int size) setEntry(int id, String name, String number)getNumber(String name): StringgetID(String name): intdelete(id)
1234567
MllerHuber
SchneiderSchmidt
Khler
0511/978650241/12-4711
762-19666001-(303) 492
030/762-123
Als simples Array implementiertpublic void organize() {
PhoneTable ph = new PhoneTable(7);ph.setEntry(3, "May", "089/4567");nr = ph.getNumber("Khler");ph.delete(ph.getID("Huber"));
}
CMS verwendet PhoneTable
BeispielInterfaces
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 95SWT 2012-13
PhoneList
Zweiter Versuch: B versucht verkettete Liste
first(): Nodesearch(String): Nodeinsert(Node)append(Node)delete(Node)
Als verkettete Liste implementiertimport theNodePackage.Node;public void organize() {PhoneList ph = new PhoneList();// insert or appendph.insert(new Node("May", "089/4567"));nr=ph.search("Khler").get_Number();ph.delete(ph.search("Huber"));
}
CMS verwendet PhoneList
Node1 * get_Name(): String
set_Name(String)get_Number(): Stringset_Number(String)get_nextNode(): Nodeset_nextNode(Node)get_prevNode(): Nodeset_prevNode(Node)
Mller 0511/97865
Huber 0241/12-4711
Schneider 762-19666
Schmidt 001-(303) 492
Khler 030/762-123
BeispielInterfaces
nextNode
prevNode
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 96SWT 2012-13
TreeNode1 *
C berredet A zu sortiertem Baum
first(): TreeNodesearch(String): TreeNodeadd(TreeNode)delete(TreeNode)
PhoneTree
Als speziell sortierter Baum implementiertimport theTreePackage.TreeNode;public void organize(){PhoneTree ph = new PhoneTree();ph.add(new TreeNode("May", "089/4567"));nr=ph.search("Khler").get_Number();ph.delete(ph.search("Huber"));
}
CMS verwendet PhoneList
get_Name(): Stringset_Name(String n)get_Number(): Stringset_Number(String nr)get_leftNode():TreeNodeset_leftNode(TreeNode)get_rightNode():TreeNodeset_rightNode(TreeNode)
Mller 0511/97865
Huber 0241/12-4711
Schneider 762-19666
Schmidt 001-(303) 492
Khler 030/762-123
< left() > right()
BeispielInterfaces
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 97SWT 2012-13
Information Hiding: Interfaces!
add(String name, String number)get_Number(String name): Stringdelete(String name)
IPhoneBook
public void organize(){IPhoneBook ph; ph = new PhoneTree();
ph.add("May", "089/4567");nr=ph.get_Number("Khler");ph.delete("Huber");
}
JavaInterface
BeispielInterfaces
oder: PhoneList()oder: PhoneTable(7)Das ist der einzige Unterschied!
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 98SWT 2012-13
Aber wie ist es denn nun implementiert?
Programming to an Interface von zwei Seiten: Aufrufer und Anbieter verlassen sich darauf
BeispielInterfaces
add(String name, String number)get_Number(String name): Stringdelete(String name)
interfaceIPhoneBook
PhoneTable(int size)add(String name, String number)get_Number(String name): Stringdelete(String name)
PhoneTableadd(String name, String number)get_Number(String name): Stringdelete(String name)sortInverse()
PhoneTree
Wir wissen es nicht! Und wollen es nicht wissen!
implements Implementierer 3Implementierer 1
CMS ph
Aufrufer
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 99SWT 2012-13
Was zeigt das Beispiel
Abhngigkeiten zwischen Programmteilen entstehen leicht ndert sich eines, muss man das andere ndern
Aufwndig! Fehleranfllig!
Was fehlte, war ein klarer Bezugspunkt: Schnittstelle/Interface Zwischen Beteiligten ausgehandelt: Contract
Interfaces Sind syntaktische Einheit in Java
Abstrakte Klasse mit Methodenschnittstellen, ohne Rmpfe Im Aufrufer dennoch als Typ verwenden IPhoneBook Letztlich braucht man natrlich auch eine ImplementierungPhoneTree, PhoneList oder PhoneTable
Vorteile Nur Implementor-Name ist spezifisch im Aufrufer-Code Aufrufer braucht bei nderungen im Implementor nichts zu tun
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 100SWT 2012-13
Interface in Java definieren
Schlsselwort interface statt class
Methodenohne Rumpf
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 101SWT 2012-13
Interface in Java anbieten/implementieren
usw.
Als Liste implementieren
Spezialmethoden lieber private machen
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 102SWT 2012-13
Angebotene Methoden aufrufen
public void organize(){IPhoneBook ph; ph = new PhoneList();
ph.add("May", "089/4567");nr=ph.getNumber("Khler");ph.delete("Huber");
}
Methoden wie IPhoneBookImplementiert als PhoneList
Nutzerprogramm, wie CMS
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 103SWT 2012-13
Information Hiding Zusammenfassung
Trennung von Schnittstelle und Implementierung Schnittstelle muss ich kennen Implementierung lieber nicht (information hiding)
In Java: Spezielle Klassenkonstruktion
Ein Interface kann keine Instanzen haben Kann ja nichts tun, spezifiziert nur Etwas allgemeineres Konzept: Abstrakte Klasse
Implementor erbt alle Methoden der Schnittstelle berschreibt sie, d.h.: implementiert, was da passiert Kann zustzliche Methoden haben; die nutzt Aufrufer lieber nicht Nutzer bezieht sich nur auf das Interface
Vorteil von Programming to an Interface Beide Seiten knnen sich unabhngig ndern Probleme werden zerlegt
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 104SWT 2012-13
Beispiel aus dem Alltag: Info. Hiding
Volkswagen-Website, 14.11.04
Smart-Website, 14.11.04
Kommunikation nicht nur mit Rechnern Schnittstellen und APIs Prinzipien Kohsion und Kopplung Architektur und Entwurfsebenen Erfahrungen und Design Patterns Anforderungen Entwurf Codierung
Kapitel 3
EntwurfStrukturen und
nicht-funktionale Eigenschaften
Prof. Dr. Kurt Schneider
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 106SWT 2012-13
Kommunikation ber groe Systeme
Worber kommunizieren? Auch ber zuknftigen Code Nicht zu viele Details Nur die Strukturen
Wozu kommunizieren? Zur Orientierung Zum Erklren Zur Arbeitsaufteilung Zur Diskussion Zur Dokumentation
Quellcode
Entwickler
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 107SWT 2012-13
Entwurf
Einem neuen Softwaresystem Struktur geben also: strukturieren, was es noch nicht gibt fr die vielen Entwickler, die es bauen sollen: Vorgabe nur Strukturen, Details meiden (info. Hiding)
Entwurf aufschreiben Oft mit graphischen Modellen (UML, folgt spter) berlegungen und Entscheidungen textuell erklren Zielgruppe: Entwickler Aufgabe: ohne Missverstndnisse in Code umsetzen
Ziele Code verschiedener Entwickler muss zusammenpassen Qualittsanforderungen strukturell untersttzen Entwicklung und Wartung eine Richtung geben Struktur auf Dauer verstndlich machen und dadurch erhalten
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 108SWT 2012-13
Zwischenziele des Entwurfs
Entwurfsideen kommunizieren Alternativen vergleichen und
diskutieren
Kreativitt nutzen, aber Ergebnisse sichern
Erfahrungen einflieen lassen
Weichen stellen, wohin der Entwicklungszug fhrt!
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 109SWT 2012-13
Entwurfsstufen
Top-Down Entwurf
Architektur/Grobentwurf: Bleibende Strukturen Feinentwurf: Strukturen und Schnittstellen Code: Ausfllen der Strukturen, Erfllen der Schnittstellen
Reifestufen der Entwurfsdokumentation Skizze an der Tafel Abgezeichnet in grafischer Notation (meist UML): Draft berarbeitet Freigegeben, verbindlich
berlegenswert Wird Entwurf aktualisiert oder weggeworfen? Wozu dient ein UML-Modell genau? Was tut man, wenn man bei Codierung Entwurfsmngel sieht?
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 110SWT 2012-13
Strukturen sind wichtiger als Details
Struktur legt Mglichkeiten fest Manches ist damit sehr einfach Anderes sehr schwer
Das muss zu den Anforderungen passen Leider kennt man die nicht immer Oder sie ndern sich
Es gibt kaum Patentrezepte Teile und Herrsche Kohsion und Kopplung Daher auch unterschiedliche Lsungsideen Um damit weiterzuarbeiten: Dokumentieren!
Struktur prgt Verhaltensmglichkeiten
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 111SWT 2012-13
Grundprinzip: Teile und herrsche
Man kann bei einem (groen) Programm nicht an alles gleichzeitig denken
Lsung: Probleme zerkleinern Ein groes Problem wird in mehrere kleinere zerlegt
Dann werden die kleinen rekursiv zerlegt Die noch kleineren werden gelst das ist einfacher! Die Lsungen werden zusammengesetzt
Von unten nach oben werden die Teile zusammengesetzt Bis man wieder auf der obersten Ebene ankommt
Damit sollte das groe Problem gelst sein
Folgt rmischem Prinzip: divide et impera! Was man erst einmal klein zerlegt hat, hat man im Griff Wie das rmische Reich oder ein groes Programm
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 112SWT 2012-13
Programmcode im Entwurf strukturieren
Evelynentwirft
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 113SWT 2012-13
Strukturierung durch Zerlegen
Schnittstelle:DurchtrennteVerbindung
Datenflu
Kontrollflu
Vorstellung desProgramms
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 114SWT 2012-13
Schnittstellen beschreiben
Was gehrt zu einer Schnittstellenbeschreibung?
Name der Funktion oder Methode Sichtbarkeit: von wem aufrufbar? Welcher Parametertyp Welcher Rckgabetyp
Zusatzinformationen Sinn der Schnittstelle:
wer nutzt sie fr welchen Zweck? Pre-/Postconditions ber Schnitt-Stellen kann man
verhandeln und sie ndern.
Schnittstelle:DurchtrennteVerbindung
Datenflu
Kontrollflu
Teilsysteme
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 115SWT 2012-13
Java-Signatur einer MethodeSchnittstellen-Beschreibung fr den Compiler
DEFINITION Die Signatur einer Java-Methode umfasst :=DefMethodennamen und Parametertypen
KOMPLIZIERT bei Generics (z.B. List)Two method or constructor declarations M and N have the same argument types if all of the following conditions hold:
Have same numbers of formal and of type parameters Let be the formal type parameters of M and let be the formal type parameters of N. After renaming each occurrence of a Bi in N's type to Ai the
bounds of corresponding type variables and the argument types of M and N are the same.
GENAUER Two methods have the same signature [ =Def ]if they have the same name and argument types:
Java Language Specification, 3rd Edition, 2005. Download: http://java.sun.com/docs/books/jls/
Alles, was Java wissen muss, um die Methode eindeutig zu identifizieren
ACHTUNG: nichtden Rckgabewert (trotz Wikipedia)
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 116SWT 2012-13
Aufruf-SchnittstelleSchnittstellen-Beschreibung fr den Verwender
public static double factorial (int x){double fact;...return fact;}
Allgemein: die Aufruf-Schnittstelle einer Java-Methode umfasst alles, was ein Aufrufer/Verwender wissen muss - und nichts mehr:
Modifiers type name (parameter-list) [throws exceptions]
Modifier:Sichtbarkeit
Modifier:Klasse/Instanz?
Typ desRckgabewerts
Name Parameter(-liste):je Typ, Name
Rckgabe eines Werts vom Rckgabewert-Typ
Dazu: ausgelste(geworfene)
Exceptions
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 117SWT 2012-13
API: Bedienungshandbuch mit ZusatzinfoKomfortable Schnittstellen-Beschreibung
Allgemein: Application Programming Interface (API) =Defeine dokumentierte Software-Schnittstelle, mit deren Hilfe ein Programm bestimmte Funktionen eines anderen Programms nutzen kann
Dokumentation
Was tut die Funktion?
Contract:Voraussetzungen?Zusicherungen?Worauf kann sich Nutzerverlassen?
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 118SWT 2012-13
Organisatorische Schnittstellen
Zwischen Auftraggeber und Auftragnehmer
Zwischen einer Business Unit und der anderen
Zwischen einem Team und dem anderen
Zwischen einzelnen Bearbeitern
Auftraggeber
SW-Auftragnehmer
Auch fr diese Schnittstellen gelten sinngemdie selben Regeln und Erfahrungen!
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 119SWT 2012-13
Zusammenfassung: Schnittstellen
Technische Schnittstellen sind exakt festzulegen Programmiersprachen-spezifisch (Signatur, Aufruf, API) Paketzugehrigkeit, Aufrufart usw. Schnittstellen-Beschreibungen beachten!
Organisatorische Schnittstellen so genau wie mglich Organisationseinheiten und Personen Aufgaben, Kompetenzen, Verantwortlichkeiten (AKV) Genaue Regeln bei der bergabe von einem zum anderen
Das reicht noch nicht: Zusatzinformationen nicht vergessen Sinn der Schnittstelle: wieso und wieso hier getrennt? Pre-/Postconditions Ergebnis der Schnittstellen-Verhandlungen
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 120SWT 2012-13
Gute Struktur anstreben1. Was ist die Struktur von Code?
import theTreePackage.TreeNode;public void organize(){PhoneTree ph;ph.add(new TreeNode(Lahm, 089/4567));nr=ph.search(Beckenbauer).get_Number();ph.delete(ph.search(Huber));
}
CMS verwendet PhoneTree
thisCMS
newTreeNode
phPhoneTree
Objekteu. Nachrichten Fazit:Es gibt nicht nur
eine Struktur
Methodenu. Aufrufe
CMS
TreeNode
PhoneTree
addsearchdelete
newget_Number
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 121SWT 2012-13
Gute Struktur anstreben2. Was ist gute Struktur?
Wollen wir groe oder kleine Einheiten?Viele oder wenige?Wir brauchen Kriterien fr gute Struktur!
Klassenu. Vererbung
Entry
HelperEntryCodeEntry
UsingHuffmannCode
HuffmanCode
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 122SWT 2012-13
Grade von Kohsion und Kopplung3. Die wichtigsten Strukturkriterien
Kohsion soll hoch sein Zufllig Logisch hnliche Operationen Zeitlich zusammengehrig (Init) Sequenziell nacheinander
auszufhrende Funktionen Um wichtige Funktion herum Informational
(um Daten gruppiert)
Kopplung soll niedrig sein
Beeinflusst lokale Daten anderer
Globale Daten
Beeinflusst fremden Kontrollfluss (flags sind bel!)
Explizite Daten-Parameter
Objekt-basiert/-orientiert Daten verborgen Methoden zugeordnet Instanzen von Klassen
besser-werdend
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 123SWT 2012-13
Kohsion und KopplungGleiches Prinzip auf verschiedenen Ebenen
A B C D
Programm-Einheit P1
P3P2
Datenelemente
Zugriff von berallauf alle (globalen) Daten
Programmeinheiten (Module, Klassen usw.)
Klasse X Klasse Y
A
B
C
D
Klassen mit Daten
Zugriff auf fremde Daten nur ber Methoden dort
Selbstaufrufemglich
Schlecht: Daten und Programme getrennt, hngen aber voneinander ab
Besser: Objekt-Orientierung
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 124SWT 2012-13
Kohsion und KopplungGleiches Prinzip auf verschiedenen Ebenen
Klasse X Klasse Y
A
B
C
D
Klassen mit Daten
Zugriff auf fremde Daten nur ber Methoden dort
Selbstaufrufemglich
Aber hier noch nicht gut: Stark gekoppelte Klassen, wenig innere Kohsion
Besser: innen starker Zusammenhalt, wenig zwischen den Klassen
Klasse X Klasse Y
A
C
B
D
Klassen mit Daten
Weniger Abstimmungsbedarf
Innen starkerZusammenhalt
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 125SWT 2012-13
Auch auf grberem Granulat Hohe Kohsion, niedrige Kopplung anstreben
GUI
Bank
DB
Konto Kredit
BrgschaftIntro
KontoVerwaltung
Werbung
Oracle
Access
Pakete (Packages)darin: Klassen
Dazwischen: irgendeine Verwendung
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 126SWT 2012-13
Weitere Entwurfsregelngenauer hingesehen
Fr schwache Kopplung Wenige Schnittstellen: nicht viele Verbindungen Kleine Schnittstellen: wenig Informationen austauschen (Wenig Interaktion ber Schnittstellen) das ist nicht so wichtig!
Klare Verhltnisse schaffen Nur explizite Schnittstellen, keine impliziten Nebenwirkungen Dokumentieren, ob sich Einheit noch ndert (Stabilitt der Schnittstellen)
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 127SWT 2012-13
Weitere Entwurfsregelngenauer hingesehen
Once and only once: Keine Doppelungen Algorithmen doppelt Daten doppelt gehalten Struktur dupliziertFhren zu Inkonsistenzen und nderungsanomalien
Kognitive Grenzen beachten Nutzer der Schnittstellen soll mglichst wenig wissen-mssen Interna geheimhalten und verstecken Struktur des Systems begrnden und dokumentieren:
Hinweis auf hnliche Strukturen im Anwendungsfeld Hinweis auf hnliche Teamstruktur (schlechter, da vergnglich) Oder andere, explizit genannte Grnde
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 128SWT 2012-13
Architekturdie Lehre von der Struktur(-ierung)
SW-Architektur beschftigt sich mit Abstraktion, mit Zerlegung und Zusammenbau, mit Stil und sthetik. (Kruchten 95)
Architektur Legt grobe Struktur fest Liefert den Bauplan
bergang von Analyse zur Realisierung Verwendet verschiedene Sichten Abstrahiert Erklrt Systemaufbau
Schliet und begrndet Komromisse
Siehe: Starke, G. (2002): Effektive Software-Architekturen. Carl Hanser Verlag
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 129SWT 2012-13
Grundlegende Architekturen
Datenfluss-Systeme Batch Pipes and filters
Call-and-return Systeme Haupt- und Unterprogramme OO Systeme Hierarchische Schichten
Unabhngige Komponenten Kommunizierende Prozesse Event-getriebene Systeme
Virtuelle Maschinen Interpreter Regel-basierte Systeme
Repository-Systeme DB, Hypertext, Blackboards
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 130SWT 2012-13
Schichten-Architekturen
Monolithisches System
Anwendung
DBInfrastruktur
2-Schichten/2-Tier
Anwendung (mit GUI)
DBInfrastruktur
Geschftslogik
3-Schichten/3-Tier
Externes Schema
KonzeptuellesSchema
Internes Schema
System-Infrastruktur
Gemeinsame Datenbank
Netzwerk
Vgl.: Zuser et al. (2004): Software Engineering mit UML und dem Unified Process. Pearson Studium
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 131SWT 2012-13
Praxis-ZusammenfassungSchichten-Architektur und Pakete
Erstellen Sie je ein Paket (in Java: Package) fr jeden Aspekt. Stecken Sie Module, Klassen usw. in diese Pakete, sortiert nach den
Aspekten. Die Pakete sollen sich nur sparsam gegenseitig aufrufen und
dabei die mittlere Schicht nicht berspringen. Jedes Paket kann rekursiv weitere enthalten:
entweder feinere Schichten oder Groe Ansammlungen von Code, die man noch aufteilt.
Vorteile Sie knnen gezielt auf einen Aspekt zugreifen, ohne andere anzufassen. Sie brauchen (fast) nichts ber die anderen zu wissen (Information Hiding)
Min. 2Aspekte?
3Schichten
Paketezu gro?
Rekursivverfeinern
Paketstruktur
Architektur finden
N
J
J
N
WENN mindestens zwei der folgenden Aspekte vorkommen: GUI Nicht-triviale Logik Datenverwaltung/Verteilung
DANN verwenden Sie eine Drei-Schichten-Architektur!
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 132SWT 2012-13
Architekturen fr verteilte Systeme
Master-Slave
Client-Server
Peer-to-Peer
Historie der UML Objektorientierung: Konzepte und Denkweise Klassendiagramme Sequenz- und Kollaborationsdiagramme Weitere Diagrammarten
Kapitel 4
Entwrfe notieren: UMLModelle im Software Engineering
Prof. Dr. Kurt Schneider
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 134SWT 2012-13
Wozu grafische Notation (2D)?
Grafische Notation := 2-dimensionale Syntax +Semantik +Pragmatik
Modelltheorie Irrelevante Details ausblenden Relevante Eigenschaften hervorheben
Abundante Eigenschaften gnstig gestalten Leicht zu verstehen Leicht zu ndern Menschlicher Kognition entgegenkommen: Patterns, 2D >> 1D (Text)
Spektrum von Formalittsgraden Mehr oder weniger viele relevante Eigenschaften Anfangs wenige, Grobstruktur schnell erstellen Schritt fr Schritt mehr, Detail ausfeilen, nher zum Code
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 135SWT 2012-13
Was ist UML?Unified Modeling Language
Sammlung vorwiegend grafischer Sprachen [ mehrere! ] zur Erstellung von Anforderungs- und Entwurfsmodellen aus verschiedenen Perspektiven
UML-Spezifikation oder UML-Modell =DefSammlung von UML-Diagrammen, die sich inhaltlich ergnzen und berlappen
Klassenmodell spezifiziert strukturellen Aufbau des Systems Bei Anforderungen zeigt es folgende relevante Originalaspekte:
Gegenstnde der Realitt, mit denen das System umgehen muss
Bei Entwurf und Implementierung zeigt es: Klassen der Lsung
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 136SWT 2012-13
Klassen und Objekte: Eine DenkweiseGenauer hingesehen
Eine Klasse ist die gemeinsame Beschreibung des Verhaltens und der Attribute
aller Objekte dieser Klasse
Objekte sind verschiedene Individuen haben je eigenen Zustand zeigen Verhalten:
sie versenden Nachrichten und reagieren auf Nachrichten anderer Objekte
Klasse beschreibt: Verhaltensmuster Attribute pro Objekt Bezeichner
Jedes Objekt hat Dieselben Bezeichner Evtl. verschiedene Zustnde Evtl. verschiedene Attributwerte
Folglich evtl. verschiedene Situationenim selben Verhaltensmuster
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 137SWT 2012-13
Interaktionssicht
UML Diagramme
Zustands-diagramm
Verhaltenssicht:Innere Zustndeund Verhalten
der Objekteeiner Klasse
Aktivitts-diagramm
Aktivittssicht:Gemeinsame
Bearbeitung einerAufgabe
Sequenz-diagrammZusammenspiel
weniger Objekte
Use Case DiagrammBenutzersicht: Interaktion von Benutzern mit dem System
Kollaborations-diagrammZusammenspielvieler Objekte
Verteilungsdiagramm Physische Sicht: Physische Systemstruktur und Verteilung
Paketdiagramm Gliederungssicht: Aufteilung in Pakete und Substrukturen
KlassendiagrammStatische Sicht:
Beteiligte Klassen und Strukturen
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 138SWT 2012-13
Ein UML ModellBeispiel fr ein Klassendiagramm
Martin Glinz (2002): Vorlesung Requirements Engineering Grundlagen und berblick, Universitt Zrich
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 139SWT 2012-13
Historie: Merger von Methoden
Diagramm von Prof. H. Lichter, RWTH Aachen: Vorlesung Softwareentwicklung, SS 2003, aktualisiert
die drei Amigos
heute UML V2.3 (V2.x) Strkere Formalisierung; Profile zur Erweiterung
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 140SWT 2012-13
UML-Diagramme bearbeiten
Mein Tipp: Malen Sie erst von Hand Danach holen Sie sich ein Werkzeug Fr diese Vorlesung: StarUML (open source, kostenlos)
Download: http://sourceforge.net/projects/staruml (letzter Zugriff: 30.10.2011) StarUML ist nicht hypermodern, aber leicht zu handhaben Viele andere Werkzeuge sind fr unsere Zwecke weniger geeignet
Wozu Sie StarUML verwenden sollten Nach einer Handskizze: Diagramme sauber abzeichnen Speichern, Datei im Team verteilen und verwenden ndern und aktualisieren
Generieren, C# usw.? Es geht noch viel mehr mit StarUML und hnlichen Werkzeugen Das brauchen Sie in SWT noch nicht
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 141SWT 2012-13
KlassenBasisvarianten
BedeutungKlassennameKeine Attribute def.Operationen auch nicht
Verwendungshinweise
Kann Stck fr Stckvervollstndigt werden
Mssen nicht Java-konform sein
() ist Konvention fr Operation,
nicht nur in Java
Dies sind die Minimalangaben
Oft zuerst die Operationenfestlegen: Attribute zweitrangig
Konto
Konto
kontoNrkontostandkreditRahmenverschluesseltePIN
erzeugeKontoNr()verschluesslePIN()getKontoStand()einzahlen()abheben()ueberweisen()istPINkorrekt()setInhaber()getInhaber()setKreditRahmen()getKreditRahmen()
Konto
kontoNrkontostandkreditRahmenverschluesseltePINAttributnamen
Operationsnamen
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 142SWT 2012-13
Konto
+kontoNr: int-kontostand: EURO-kreditRahmen: EURO~verschluesseltePIN: SecretPINtype
+erzeugeKontoNr()+verschluesslePIN(pin)+getKontoStand()+einzahlen(betrag: EURO)+abheben(betrag: EURO)+ueberweisen(betrag: EURO, zielkonto: Konto)-istPINkorrekt(pin)+setInhaber(name: String)+getInhaber()+setKreditRahmen(kreditObergrenze: EURO)+getKreditRahmen()
Klassenfortgeschrittene Angaben
Bedeutung
KlassennameAttribute mit Typen
Sichtbarkeit+ public- private~ package# protected
OperationenSichtbarkeitParameter
mit und ohne Typ
Verwendungshinweise
Kann Stck fr Stckvervollstndigt werden
Man kann Sichtbarkeit auch zunchst offen lassen
Ebenso: ParametertypenViele Tools dulden das nicht:
alle oder keine Sichtbarkeiten
Mglichst wenige Getter und Setter
Nicht fr alle AttributeEvtl. im Modell ausblenden
Hintergrundfarbe wei
Farbe, Schatten, 3D vermeiden!
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 143SWT 2012-13
Klassenund entsprechender Code
UML-Modell
Konto
kontoNrkontostandkreditRahmenverschluesseltePIN
erzeugeKontoNr()verschluesslePIN()getKontoStand()einzahlen()abheben()ueberweisen()istPINkorrekt()setInhaber()getInhaber()setKreditRahmen()getKreditRahmen()
public class Konto {public int kontoNr;private EURO kontostand;private EURO kreditRahmen;public SecretPINtype verschluesseltePIN;public int erzeugeKontoNr() { }public SecretPINtype verschluesslePIN
(int pin) { }public EURO getKontoStand() { }public void einzahlen(EURO betrag) { }public EURO abheben(EURO betrag) { }public void ueberweisen
(EURO betrag, Konto zielkonto) { }private boolean istPINkorrekt
(Object pin){}public void setInhaber(String name) { }public String getInhaber() { }public void setKreditRahmen
(EURO kreditObergrenze) { }public EURO getKreditRahmen() { }
}
Java#if !defined(_KONTO_H)#define _KONTO_H
#include "Kunde.h"
class Konto {public:
int kontoNr;int erzeugeKontoNr();SecretPINtype verschluesslePIN(int pin);EURO getKontoStand();void einzahlen(EURO betrag);EURO abheben(EURO betrag);void ueberweisen
(EURO betrag, Konto zielkonto);void setInhaber(String name);String getInhaber();void setKreditRahmen
(EURO kreditObergrenze);EURO getKreditRahmen();
private:EURO kontostand;EURO kreditRahmen;boolean istPINkorrekt(int pin);
};
C++(Konto.h)
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 144SWT 2012-13
Interfaces
PhoneTree
+add(name, number: String)+get_Number(name: String)+delete(name: String)-sortInverse()
PhoneTable
+PhoneTable(size: int)+add(name, number: String)+get_Number(name: String)+delete(name: String)
IPhoneBook
CMS
+organize()
benutzt einInterface
Interface-Symbol(nur dessen Name ist sichtbar)
realisieren das Interface
IPhoneBook
+add(name, number)
Kompromiss in StarUML:Abstrakte Klasse
ACHTUNGgehen berdas Interfacehinaus!
IPhoneBook
+add(name, number)
Oder besser(geht leidernicht in StarUML)
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 145SWT 2012-13
Konto
+kontoNr: int-kontostand: EURO-kreditRahmen: EURO~verschluesseltePIN: SecretPINtype
+erzeugeKontoNr()+verschluesslePIN()+getKontoStand()+einzahlen()+abheben()+ueberweisen()-istPINkorrekt()+setInhaber()+getInhaber()+setKreditRahmen()+getKreditRahmen()
Schlerkonto
+zinssatz
kreditRahmen= 0
Bankomat
-istPINkorrekt()+kontostandAnzeigen()+abheben()
+arbeitsKonto+bedienstation 0..1
0..1
ecKarte
+kontoNr: int-verschlsseltePIN: SecretPINtype
+setPIN()+getPIN()+verbucheAbhebung()
+eingeleseneKarte0..1
1
Kunde
+Name
+inhaber
1..*
1..3
1
1..*
+besitzt
11..*
Kundenerfassung
+erffneKonto()+erfrageNamen()+erfrageAusweisNummer()
+neueKonten
*
1
Prfbehrde
+vermerkeNeuesKonto()+getKreditwrdigkeit()
+schufa
1
GUI
+getPIN()~gebeGeldFrei()
Beziehungen zwischen KlassenAssoziationen
Kommentar
Vererbung
Multiplizitten
Benannte Assoziationsenden
bedient
Leserichtung
ist-geffnet-in
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 146SWT 2012-13
Interaktion in SequenzdiagrammenSequenzdiagramm 1: Konto anlegen
erffneKonto()
:Kundenerfassung
new():Konto
kontoNr
erzeugeKontoNr()
kontoNr
erfrageAusweisNummer()
setKreditrahmen()
erfrageWunschPIN()
verschlsslePIN()
erfrageNamen()
setInhaber()
Schufa
getKreditwrdigkeit()
meldeNeuesKonto()
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 147SWT 2012-13
Interaktion in SequenzdiagrammenBedeutung der Symbole
erffneKonto()
:Kundenerfassung
new():Konto
kontoNr
erzeugeKontoNr()
kontoNr
erfrageAusweisNummer()
setKreditrahmen()
erfrageWunschPIN()
verschlsslePIN()
erfrageNamen()
setInhaber()
Schufa
getKreditwrdigkeit()
meldeNeuesKonto()
Das Ganze ist eineInteraktion, nicht jede Nachricht fr sich!
new() erzeugt ein Objekt Objekte
Nachrichten
Antwort
Selbstaufruf
Lebenslinie
Aktivierung
Objektname(auch Objektname:Klasse)Anonym, nur
:Klassenangabe
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 148SWT 2012-13
Interaktion als SequenzdiagrammSequenzdiagramm 2: Geld abheben am Bankomaten
:GUI :Bankomat :ec-Karte :Konto
istPINkorrekt(PIN)
getKreditRahmen()
getKontoStand()
abheben (wunschBetrag)
getPIN()
verschlsseltePINgetPIN()
PIN
gebeGeldFrei (verfgbarerBetrag)
verbucheAbhebung()
abheben (wunschBetrag)
verfgbarerBetrag
Kommentar(in allen Diagrammen erlaubt)
verfgbarerBetrag = min( wunschBetrag,
kontoStand+kreditRahmen)
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 149SWT 2012-13
Interaktion als KollaborationsdiagrammGeld abheben am Bankomaten, andere Modellart
:GUI:Bankomat
myCard:ecKarte
:Konto
2.1: getPIN()2.2: getPIN()
1: abheben() 2: abheben() 2.3: istPINkorrekt()
2.4: abheben()
2.4.1: getKontoStand() 2.4.2: getKreditRahmen()
2.5: verbuche-Abhebung()
2.6: gebeGeldFrei()
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 150SWT 2012-13
Interaktion als KollaborationsdiagrammGeld abheben am Bankomaten, andere Modellart
:GUI:Bankomat
myCard:ecKarte
:Konto
2.1: getPIN()2.2: getPIN()
1: abheben() 2: abheben() 2.3: istPINkorrekt()
2.4: abheben()
2.4.1: getKontoStand() 2.4.1: getKreditRahmen()
2.5: verbuche-Abhebung()
2.6: gebeGeldFrei()
Objekte
Objekte Objekte (Namenskonventionen wie blich)
Auslser Nachrichten mitReihenfolgeUnter-Reihenfolgen inPunkt-Notation (2.3)
Unter-Reihenfolgen,tiefer verschachtelt (2.4.1)
quivalent zu Sequenzdiagramm
Unterschiede nur in den semantischnicht-relevanten Modelleigenschaften.Fr Handhabung jedoch wichtig.
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 151SWT 2012-13
Konto
+kontoNr: int-kontostand: EURO-kreditRahmen: EURO~verschluesseltePIN: SecretPINtype
+erzeugeKontoNr()+verschluesslePIN()+getKontoStand()+einzahlen()+abheben()+ueberweisen()-istPINkorrekt()+setInhaber()+getInhaber()+setKreditRahmen()+getKreditRahmen()
Schlerkonto
+zinssatz
kreditRahmen= 0
Bankomat
-istPINkorrekt()+kontostandAnzeigen()+abheben()
+arbeitsKonto+bedienstation 0..1
0..1
ecKarte
+kontoNr: int-verschlsseltePIN: SecretPINtype
+setPIN()+getPIN()+verbucheAbhebung()
+eingeleseneKarte0..1
1
Kunde
+Name
+inhaber
1..*
1..3
1
1..*
+besitzt
11..*
Kundenerfassung
+erffneKonto()+erfrageNamen()+erfrageAusweisNummer()+erfrageWunschPIN()
+neueKonten
*
1Prfbehrde
+vermerkeNeuesKonto()+getKreditwrdigkeit()
+schufa
1
GUI
+getPIN()~gebeGeldFrei()
Klassendiagramm aktualisierenErkenntnisse aus Interaktionssicht einarbeiten
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 152SWT 2012-13
Klassendiagramm aktualisierenErkenntnisse aus Interaktionssicht einarbeiten
Konto
+kontoNr: int-kontostand: EURO-kreditRahmen: EURO~verschluesseltePIN: SecretPINtype
+erzeugeKontoNr()+verschluesslePIN()+getKontoStand()+einzahlen()+abheben()+ueberweisen()-istPINkorrekt()+setInhaber()+getInhaber()+setKreditRahmen()+getKreditRahmen()
Schlerkonto
+zinssatz
kreditRahmen= 0
Bankomat
-istPINkorrekt()+kontostandAnzeigen()+abheben()
+arbeitsKonto+bedienstation 0..1
0..1
ecKarte
+kontoNr: int-verschlsseltePIN: SecretPINtype
+setPIN()+getPIN()+verbucheAbhebung()
+eingeleseneKarte0..1
1
Kunde
+Name
+inhaber
1..*
1..3
1
1..*
+besitzt
11..*
Kundenerfassung
+erffneKonto()+erfrageNamen()+erfrageAusweisNummer()+erfrageWunschPIN()
+neueKonten
*
1Prfbehrde
+vermerkeNeuesKonto()+getKreditwrdigkeit()
+schufa
1
GUI
+getPIN()~gebeGeldFrei()
5
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 153SWT 2012-13
Methode im ZusammenhangModelle fr Statik und fr Dynamik
Konto
+kontoNr: int-kontostand: EURO-kreditRahmen: EURO~verschluesseltePIN: SecretPINtype
+erzeugeKontoNr()+verschluesslePIN()+getKontoStand()+einzahlen()+abheben()+ueberweisen()-istPINkorrekt()+setInhaber()+getInhaber()+setKreditRahmen()+getKreditRahmen()
Schlerkonto
+zinssatz
kreditRahmen= 0
Bankomat
-istPINkorrekt()+kontostandAnzeigen()+abheben()
+arbeitsKonto+bedienstation 0..1
0..1
ecKarte
+kontoNr: int-verschlsseltePIN: SecretPINtype
+setPIN()+getPIN()+verbucheAbhebung()
+eingeleseneKarte0..1
1
Kunde
+Name
+inhaber
1..*
1..3
1
1..*
+besitzt
11..*
Kundenerfassung
+erffneKonto()+erfrageNamen()+erfrageAusweisNummer()
+neueKonten
*
1
Prfbehrde
+vermerkeNeuesKonto()+getKreditwrdigkeit()
+schufa
1
GUI
+getPIN()~gebeGeldFrei()
Ein Klassendiagramm: Basis und Statische Aspekte
:GUI :Bankomat :ec-Karte :Konto
istPINkorrekt(PIN)
getKreditRahmen()
getKontoStand()
abheben (wunschBetrag)
getPIN()
verschlsseltePIN
getPIN()
PIN
gebeGeldFrei (verfgbarerBetrag)
verbucheAbhebung()
abheben (wunschBetrag)
verfgbarerBetrag
Viele Diagramme fr Dynamik
+
= das UML-Modell
:GUI
:Bankomat
myCard:ecKarte
:Konto
2.1: getPIN()2.2: getPIN()
1: abheben() 2: abheben() 2.3: istPINkorrekt()
2.4: abheben()
2.4.1: getKontoStand() 2.4.1: getKreditRahmen()
2.5: verbuche-Abhebung()
2.6: gebeGeldFrei()
Kollaborationsdiag. Sequenzdiag.und andere
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 154SWT 2012-13
Kleine Variationen durch Tooleinsatz Beispiel: Sequenzdiagramm in StarUML
:GUI :Bankomat :ec-Karte gehaltskonto : Konto
1 : abheben()2 : getPIN()
3 : verschlsseltePIN4 : getPIN()
5 : PIN
6 : istPINkorrekt()
7 : abheben()
8 : getKontoStand()
9 : getKreditRahmen()
10 : verfgbarerBetrag
11 : verbucheAbhebung()
12 : gebeGeldFrei()
Nummerierung automatisch
Gelber Hintergrund(abschaltbar)
Stapel von Aktivittsboxen
Objektname mit : nur durch Tricksen
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 155SWT 2012-13
Code entspricht Sequenzdiagramm:GUI :Bankomat :ec-Karte :Konto
istPINkorrekt (eingegebenePIN, verschlsseltePIN)
getKreditRahmen()
getKontoStand()
abheben (wunschBetrag)
getPIN()
verschlsseltePINgetPIN()
PIN
gebeGeldFrei (verfgbarerBetrag)
verbucheAbhebung()
abheben (wunschBetrag)
verfgbarerBetrag
Pseudocode einer Methode des Bankomaten// Variablen seien vorbelegtpublic void abheben (EURO wunschbetrag) {
verschlsseltePIN = meineKarte.getPIN();eingegebenePIN = dieGUI.getPIN();if (istPINkorrekt(eingegebenePIN, verschlsseltePIN) {
verfgbarerBetrag = arbeitsKonto.abheben(wunschBetrag);meineKarte.verbucheAbhebung(verfgbarerBetrag);dieGUI.gebeGeldFrei(verfgbarerBetrag);
}}
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 156SWT 2012-13
Aufbau und Verhalten von Klassenaus mehreren Diagrammen ableiten
Ein Klassendiagramm: Basis und Statische Aspekte
:GUI :Bankomat :ec-Karte :Konto
istPINkorrekt(PIN)
getKreditRahmen()
getKontoStand()
abheben (wunschBetrag)
getPIN()
verschlsseltePINgetPIN()
PIN
gebeGeldFrei (verfgbarerBetrag)
verbucheAbhebung()
abheben (wunschBetrag)
verfgbarerBetrag
Viele Diagramme fr Dynamik
:GUI
:Bankomat
myCard:ecKarte
:Konto
2.1: getPIN()2.2: getPIN()
1: abheben() 2: abheben() 2.3: istPINkorrekt()
2.4: abheben()
2.4.1: getKontoStand()2.4.1: getKreditRahmen()
2.5: verbuche-Abhebung()
2.6: gebeGeldFrei()
Kollaborationsdiag. Sequenzdiag. und andere
Bankomat
-istPINkorrekt()+kontostandAnzeigen()+abheben()
Code
Klassen, Attribute, Methoden-Schnittstellen (Parameter, Typen)
Teile von Methodenrmpfenmehrerer Klassen
Methodenrmpfe
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 157SWT 2012-13
Konsistenz von Diagrammen
Ein UML-Modell ist auf mehrere UML-Diagramme verteilt
In der Regel verschiedene relevante Aspekte betont
berlappungen mssen konsistent sein Objekte passen zu Klassen aus dem Klassendiagramm Sichtbarkeiten, Parameter und Typen sind konsistent dargestellt Methodennamen in Sequenzen passen zu Klassendiagramm Use Case Modelle (kommen noch) passen zu Interaktionspersp. Verschiedene Interaktionsdiagramme widersprechen sich nicht
Zweck aller Diagramme in einem Modell Konsistente Darstellung aller relevanten, interessanten Aspekte Genau genug fr Programmierung Mglicherweise sogar fr (teilweise oder vollstnd.) Generierung
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 158SWT 2012-13
Wnde
Weitere BeispieleComputer - Ballspiel
Blast thru Special Edition. rockSolid Software ca. 2002
WandSchlgerBoden
Ball
Steine
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 159SWT 2012-13
Klassen-Diagramm des Spiele-Beispiels
Steinpunktewert
istGetroffen ()
Wand
istGetroffen ()
Spielhindernisse, ballscore, level
start (), stop ()nextLevel ()
Schlgerbreiteelastizitt
istGetroffen ()
Ballposition, winkelgeschwindigkeit
fliegt-los ()fliegt ()trifft (Hindernis)verschwindet ()
Hindernispositiongroesse
istGetroffen ()
Msste Ball nicht auch ein Hindernis sein? Sonst prallen
Blle nicht aneinander ab.
Entwurf: zwischen Anforderungenund Entscheidungen
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 160SWT 2012-13
KollaborationsdiagrammeInteraktion mehrerer Objekte in UML
Allgemein
1:
[Bedingung] : antw := nachricht()
NachrichtenPfeile mgl. waag-/senkrechtBedingung mglichAntwort mglich (Rckgabe): 1, 1.1, 1.2, 1.1.1
::
.*:
Mehrfach (an alle)An doppeltes Klassenrechteck: 1, 1.1, 1.2, 1.1.1 ,Jedoch mit * als letzte Stelle
Beispiel
meinSpiel:Ballspiel
:Ball
::Hindernis
1: start()
1.2: fliegt ()
1.2.1*: treffer :=istGetroffen()
punktestand:Score
1.2.2: aktualisien ()
initLevel:Level1.1: aufbauen ()
Objekte (Alternativen)ObjektsymbolKlassenrechteck:
:
Benutzer (Mnnchen)
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 161SWT 2012-13
SequenzdiagrammeInteraktion von (wenigen) Objekten in UML
Allgemein
ObjekteUnterstrichenerObjektname oder:Klassenname
Objekt1
Lebenslinie des Objekts
: KonstruktionObjekt der Klassewird erzeugt
new()
AblaufWaagrecht oderschrg (Zeit vergeht)
()
DestruktionObjektwird zerstrt
delete()
Selbstaufruf()
Beispiel: Ausschnitt
myGame
:Ballnew()
shoot()
score
delete()
flies()
:Hindernis
hits()
score-or-0
delete()
updateScore()
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 162SWT 2012-13
Fugngerberweg als SequenzdiagrammeInteraktion weniger Objekte
Beispiel: Kreuzung
KnopfAnforderung
fussgaengerAnforderung
:Fugngerampel :berweg :Autoampel
stop
gelb
rotstehen
3 s
rotgelb
grnfahren
go
5 s
go
4 s
30 s
10 s
stop
Zeitangabenund Klammern sind UML-Kommentare,nur fr Menschen bedeutungsvoll.
Dieser Text ebenso.
Kurt Schneider Leibniz Universitt Hannover SWT-WS0910 - 163SWT 2012-13
Zustandsdiagramme/StatechartsVerhalten einzelner Objekte in UML
Allgemein
/[]
[]
Transitionen Von Zustand zu ZustandAber nur,