Software Entwicklung 2 UML umgesetzt
Klasse (vereinfacht) attribut : int Klasse operation() : void public class Klasse { int attribut; void operation() { 2
Sichtbarkeit der ttribute public class Klasse { Klasse + publicttribut : int # protectedttribut : int - privatettribut : int ~ packagettribut : int public int publicttribut; protected int publicttribut; private int privatettribut; int packagettribut; 3
Sichtbarkeit der Operationen public class Klasse { Klasse + publicoperation() # protectedoperation() - privateoperation() ~ packageoperation() public void publicoperation(){ protected void publicoperation() { private void privateoperation() { void packageoperation() { 4
Beispiel - m : int + getm() : int + setm(m : int) : void public class { private int m; public int getm() { return m; public void setm(int m) { this.m = m; x: y: z: m = 42 m = 0 m = 0 x = new (); y = new (); z = new (); x.setm(42); 5
Statische ttribute - m : int public class { private static int m; public int getm() { return m; + getm() : int + setm(m : int) : void public void setm(int m) { this.m = m; entspricht:.m = m; x: y: z: m = 42 m = 42 m = 42 x = new (); y = new (); z = new (); x.setm(42); 6
ssoziationen: gerichtet - m : int + getm() : int + setm(m : int) : void public class { private int m; public int getm() { return m; public void setm(int m) { this.m = m; - ref B + getref() : + setref(ref : ) : void public class B { private ref; public getref() { return ref; public void setref( ref) { this.ref = ref; 7
ssoziationen: ungerichtet - m : int + getm() : int + setm(m : int) : void - ref public class { private int m; private B ref; public int getm() { return m; public void setm(int m) { this.m = m; - ref B + getref() : + setref(ref : ) : void public class B { private ref; public getref() { return ref; public void setref( ref) { this.ref = ref; 8
ssoziationen: ggregation (Java) - m : int + getm() : int + setm(m : int) : void public class { private int m; public int getm() { return m; public void setm(int m) { this.m = m; - ref B + getref() : + setref(ref : ) : void public class B { private ref; public getref() { return ref; public void setref( ref) { this.ref = ref; 9
ssoziationen: Komposition (Java) - m : int + getm() : int + setm(m : int) : void public class { private int m; public int getm() { return m; public void setm(int m) { this.m = m; - ref B + getref() : + setref(ref : ) : void public class B { private ref; public getref() { return ref; public void setref( ref) { this.ref = ref; 10
ssoziationen: ggregation (C++) - m : int + getm() : int + setm(m : int) : void class { private: int m; public: int getm() { return m; void setm(int m) { this->m = m; ; - ref B + getref() : + setref(ref : ) : void class B { private: * ref; public: B() { ~B() { getref() { return ref; void setref( ref) { this->ref = ref; ; 11
ssoziationen: Komposition (C++) - m : int + getm() : int + setm(m : int) : void class { private: int m; public: int getm() { return m; void setm(int m) { this->m = m; ; - ref B + getref() : + setref(ref : ) : void class B { private: * ref; public: B() { ~B() { delete ref; getref() { return ref; void setref( ref) { this->ref = ref; ; 12
ggregation vs. Komposition ggregation (Java) B typebobject = new B(); typebobject.setref(new ()); obj = typebobject.getref(); typebobject = null; int x = obj.getm(); ggregation (C++) B * typebobject = new B; typebobject->setref(new ); * obj = typebobject->getref(); delete typebobject; typebobject = NULL; int x = obj->getm(); Komposition (Java) B typebobject = new B(); typebobject.setref(new ()); obj = typebobject.getref(); typebobject = null; int x = obj.getm(); Vorsicht! Komposition (C++) B * typebobject = new B; typebobject->setref(new ); * obj = typebobject->getref(); delete typebobject; typebobject = NULL; int x = obj->getm(); Crash! 13
Kardinalitäten - ref B public class B { private ref; * - ref B public class B { private LinkedList<> ref; mögliche Realisierung 14
Vererbung - m : int + getm() : int + setm(m : int) : void public class { private int m; public int getm() { return m; public void setm(int m) { this.m = m; - n : int B + getn() : int + setn(n : int) : void public class B extends { private int n; public int getn() { return n; public void setn(int n) { this.n = n; 15
Vererbung - m : int obj = new (); obj.getm(); obj.getn(); + getm() : int + setm(m : int) : void obj = new B(); obj.getm(); obj.getn(); // ((B)obj).getN(); - n : int B B obj = new B(); obj.getm(); obj.getn(); + getn() : int + setn(n : int) : void B obj = new (); 16
Vererbung - a : int # b : int + dosomething() : void + set(a : int) : void public void dosomething() { a = 1; b = 2; c = 3; d = 4; + c : int ~ d : int B + dosomething() : void public void dosomething() { a = 1; // set(1); b = 2; c = 3; d = 4; 17
bstrakte Klassen - a : int + dosomething() : void + set(a : int) : void public abstract class { private int a; public abstract void dosomething(); public void set(int a) { this.a = a; obj = new (); B public class B extends { public void dosomething() { set(42); + dosomething() : void obj = new B(); 18
Interfaces + dosomething() : void public interface { void dosomething(); obj = new (); B public class B implements { public void dosomething() { System.out.println(42); + dosomething() : void obj = new B(); 19
us einem Kundengespräch und wie Sie sehen können, haben alle rtikel in unserem Lager einen festen Platz mit Lagerplatznummer. ußerdem soll zu jedem rtikel auch die Bezeichnung, der Preis und eine kurze Beschreibung angezeigt werden. Eine Rechnung enthält, neben den Rechnungsposten, eine eindeutige Rechnungsnummer, die Kundennummer, ein Rechnungsdatum und zwei dressen. Eine ist die Rechnungsadresse, die andere die Lieferadresse. Wir trennen beide selbst dann, wenn die dressen identisch sind. Wir unterscheiden zwischen Privatadressen und Firmenadressen. Bei Firmenadressen gibt es die Felder Vorname und Name nicht, dafür aber den Firmen- und bteilungsnamen. Die Kundennummer ist einfach eine Zahl. Vielleicht können wir sie in Zukunft nutzen um alle Bestellungen eines Kunden zu suchen. Ist es möglich, die Software bereits in 4 Wochen 20
Klassendiagramm 21
Klasse rtikel public class rtikel { private int lagerplatz; private String bezeichnung; private String beschreibung; private float preis; public String getbeschreibung() { return beschreibung; public void setbeschreibung(string beschreibung) { this.beschreibung = beschreibung; public String getbezeichnung() { return bezeichnung;... 22
(abstrakte) Klasse dresse public abstract class dresse { protected String strasse; protected int plz; protected String ort; public String getort() { return ort; public void setort(string ort) { this.ort = ort; public int getplz() { return plz;... 23
Klasse Privatadresse public class Privatadresse extends dresse { private String vorname; private String name; public String getname() { return name; public void setname(string name) { this.name = name;... 24
Klasse Firmenadresse public class Firmenadresse extends dresse { private String firmenname; private String abteilung; public String getbteilung() { return abteilung; public void setbteilung(string abteilung) { this.abteilung = abteilung;... 25
Klasse Rechnung public class Rechnung { private dresse rechnungsadresse; private dresse lieferadresse; private long rechnungsnr; private long kundennummer; private Date datum; private LinkedList<rtikel> posten; public Rechnung(rtikel a, dresse r, dresse l) { posten = new LinkedList<rtikel>(); posten.add(a); rechnungsadresse = r; lieferadresse = l; public Iterator<rtikel> posteniterator() { return posten.iterator(); public void addposten(rtikel posten) { this.posten.add(posten); public void removeposten(rtikel posten) { this.posten.remove(posten);... 26