Objektorientierte Programmierung (OOP) Objektorientiertes Programmieren Zur Zeit am meisten verwendentes Programmierparadigma (1980 populär geworden). Neuere Ansätze: SOA (Service Oriented Approach): Dienste werden über das Internet bereit gestellt und sind über eine standardisierte Schnittstelle aufrufbar. Grundlagen: Kapselung Vererbung Polymorphismus
Von Unterprogrammen zu Klassen Siehe Präsentation 01-unterprogramme-zu-klassen
Prozeduren Hauptprogramm globale Variablen Unterprogramm a lokale Variablen Unterprogramm b lokale Variablen Unterprogramm c lokale Variablen Anweisung_1; Anweisung_2; ...
Klassen Klasse Attribute Eigenschaften Methode a lokale Variablen Methode b lokale Variablen Aktionen Methode c lokale Variablen
Konkrete Instanz einer Klasse. Klassen und Objekte Klasse Abstrakte Beschreibung von Eigenschaften (Attributen) und Aktionen (Methoden). = Schablone Objekt Konkrete Instanz einer Klasse. Eigenschaften Name: Haarfarbe: Alter: Aktionen laufen sitzen schlafen essen Eigenschaften Name: Sascha Müller Haarfarbe: blond Alter: 18 Aktionen laufen sitzen schlafen essen
Gruppenarbeit Beispiel für Klassen Zeit: 30 Minuten Aufgaben: + Die Würfelsumme größer als 4*n; + Solange würfeln, bis mindestens m 6en. + bis genau 6 Sechsen. + Soviele 1en wie 6en.
Von Unterprogrammen zu Klassen Siehe Präsentation 02-beispiele-klassen-objekte
Klassen und Objekte in Java Definition einer Klasse Erzeugung von Objekten Aufruf einer Methode eines Objektes public class <Klassenname> { Attribute und Methoden} <Klassenname> <Objektname> = new <Klassenname>(); <Objektname>.<Methodenname>(<Parameter_1>,...,<Parameter_n>);
Beispiel Klasse definieren, Objekte erzeugen public class Mensch { String name; String haarfarbe; int alter; public void schlafen(){S.o.p(name+”schläft”);} public void sitzen(){S.o.p(name+”sitzt”);} } public class TesteMensch { /** Startmethode der Klasse */ public static void main(String[] args) { Mensch patrick = new Mensch(); patrick.name="Patrick"; Mensch tim = new Mensch(); tim.name="Tim"; patrick.schlafen(); tim.sitzen(); }
Beispiel für eine Klasse und das Erzeugen eines Objektes public class Rechteck { float laenge; float breite; public float berechneF(){ float a = laenge * breite; return a; } } public class Test { public static void main(String[] arg) { Rechteck r1 = new Rechteck(); r1.laenge=10f; r1.breite=1f; Rechteck r2 = new Rechteck(); r2.laenge=5f; r2.breite=20f; float f1 = r1.berechneF(); float f2 = r2.berechneF(); S.o.p("Flächeninhalt r1:"+f1); S.o.p("Flächeninhalt r2:"+f2); } }
Konstruktoren public class Rechteck { float laenge; float breite; public Rechteck(float l1, float b1){ laenge=l1; breite=b1; } public Rechteck(float laenge1) { laenge=laenge1; } public Rechteck() {} public float berechneF(){ float a = laenge * breite; return a; } } public class Test { public static void main( String[] arg) { Rechteck r1 = new Rechteck(10f,1f); Rechteck r2 = new Rechteck(5f); r2.breite=20f; float f1 = r1.berechneF(); float f2 = r2.berechneF(); S.o.p("Flächeninhalt r1:"+f1); S.o.p("Flächeninhalt r2:"+f2); } } Konstruktor Der Konstruktor ohne Parameter (Default-Konstruktor) ist immer definiert, falls sonst kein Konstruktor angegeben ist.
Statische Attribute und der this-Operator public class Kreis{ static final float pi = 3.14127f; float radius ; public Kreis (float radius) { this.radius=radius; } public Kreis() {} public float berechneF(){ float x = pi * radius * radius; return x; } } Statisches Attribut: Wird nur einmal für die Klasse (nicht für jedes Objekt) definiert. Konflikt: lokale Variable und Attribut. this. verweist auf das Attribut. public class Test { public static void main(String[] arg) { Rechteck r1 = new Kreis(7f); float f1 = r1.berechneF(); S.o.p("Flächeninhalt r1:"+f1); S.o.p(„Wert von PI:"+Kreis.pi); } } Zugriff auf eine statische Variable.
Statische Atrribute Getter-/Setter-Methoden public class Kreis { static final float pi=3.14127f; float radius; public Kreis(float radius){ this.radius=radius; } public Kreis() {} public float getRadius() { return radius; } public void setRadius(float r1) { radius=r1; } public float berechneF(){ float a = pi * radius * radius; return a; } } Getter- und Setter- Methoden für den Zugriff auf Attribute. (Attribute direkt anzusprechen gilt als verpöhnt) public class Test { public static void main(String[] arg) { Rechteck r1 = new Kreis(); f1.setRadius(7f); float f1 = r1.berechneF(); S.o.p("Flächeninhalt r1:"+f1); } }
Getter-/Setter-Methoden in Netbeans automatisch erzeugen lassen
Objekte „printable“ machen: toString() public class Kreis { … public String toString() { return "Kreis("+radius+")"; } } public class Test { public static void main(String[] arg) { Rechteck r1 = new Kreis(); f1.setRadius(7f); float f1 = r1.berechneF(); S.o.p("Flächeninhalt von "+r1+ " ist "+f1); } } Ohne toString() Mit toString()
UML-Diagramm
Aufruf des Konstruktors
Klasse Bruch
Vererbung: Attribute werden vererbt
Vererbung: Methoden werden vererbt
Überschreiben von Methoden
Prinzipien OOP