Objektorientiertes Programmieren • Hat Softwareentwicklung revolutioniert • Ist bei heutigen grossen Softwareprojekten nicht mehr wegzudenken • Hat viele Vorteile gegenüber rein prozeduraler Programmierung • Java ist (voll) objektorientiert. 1 Die wichtigsten objektorientierten Begriffe: • • • • • • • • • Klassen Objekte Member, Methoden Konstruktor Kapselung Überladen Vererbung Polymorphismus Überschreiben 2 Klassen, Objekte Beispiel: Haus Programmierebene: Klasse Reale Welt: Haus Bauplan entspricht Objekte von Klasse „Haus“ Gebaute Häuser anhand Bauplan Haus 1 Haus 3 Haus 2 3 Klassen, Objekte Beispiel: Mensch Programmierebene: Klasse Reale Welt: Mensch DNS entspricht Objekte von Klasse „Mensch“ Erzeugte Menschen gemäss DNS Werner Julia und Hanna Katja 4 Deklaration einer neuen Klasse in Java Name der Klasse public class Rechteck { } hier wird der Sourcecode bzw. der „Bauplan“ der Klasse eingetragen 5 Member (Daten) Methoden (Funktionen) Beispiel: Auto Programmierebene: Reale Welt: Klasse Auto Rad Motor Achsen ... ... Fahren() Bremsen() Blinken() ... ... R1, R2, R3, R4 Motor2Takt VAchse, HAchse Motor2Takt R4 Daten (Attribute) (Eigenschaften) HAchse R3 VAchse R2 Methoden (Funktionen) (Sub, Function) R1 6 Member können sein: • Basisdatentypen: Integer, Double, Boolean, etc • Objekte vorhandener Klassen: String, Date, etc. • Objekte selbst erstellter Klassen: Rad, Kreis, Punkt, Person, etc. 7 Member einer Klasse in Java hinzufügen public class Rechteck { //member public String name; public int x,y; public int breit,hoch; } 8 Methoden einer Klasse in Java hinzufügen public class Rechteck { //member public String name; public int x,y; public int breit,hoch; //methods public void verschieben(int dx, int dy) { x=x+dx; y=y+dx; } public int getX() { return x; } public int getY() { return y; } } 9 Konstruktor: Methode in einer Klasse mit dem selben Namen wie die Klasse, welche bei der Erzeugung eines Objekts der Klasse aufgerufen wird. 10 Konstruktor Rechteck R1 = new Rechteck(10,5,150,50); erzeugt Objekt aus Klasse Im vorliegenden Beispiel werden vier Rechteck-Objekte mit den Namen: R1, R2, RQ und Rt erzeugt Rechteck public int x,y,breit,hoch; Rechteck R2 = new Rechteck(0,0,90,55); Konstruktor erzeugt Objekte aus der Klasse „Rechteck“ Rechteck RQ = new Rechteck(1,5,40,58); Rechteck(x,y,b,h) Rechteck Rt = new Rechteck(0,0,20,130); 11 Konstruktor einer Klasse in Java hinzufügen public class Rechteck { //member public String name; public int x,y; public int breit,hoch; public Rechteck(int x, int y,int b, int h) { this.x=x; this.y=y; breit=b; hoch=h; } Konstruktor //methods public void verschieben(int dx, int dy) { x=x+dx; y=y+dy; } public int getX() { return x; } public int getY() { return y; } } 12 Konstruktor Beispiel Klasse Person public class Person { String Name; int Age; String profession; //Konstruktor public Person(String N, int age, String p) { Name=N; Age=age; profession=p; } public void Anzeigen() { System.out.println("Name: " + Name + " Alter: " + Age + " Beruf: " + profession); } } 13 Konstrukor erzeugen von Objekten in der ClientKlasse In der Klasse „FH_Biel“ werden drei neue Personen erzeugt. Man nennt solch eine Klasse auch „Client“, da sie die Klasse Person benutzt. //Clientclass for Person public class FH_Biel { public static void main(String[] args) { Person p1=new Person("Walter Kuhn",23,"Schreiner"); Person dagobert=new Person("Dagobert Duck",64,"Milliardaer"); Person p2=new Person("Sigmund Freud",77,"Psychoanalytiker"); } p1.Anzeigen(); dagobert.Anzeigen(); p2.Anzeigen(); } 14 Information Hiding: Daten und Funktionen werden in der Klasse nach aussen „abgeschirmt“ oder versteckt. 15 Information Hiding Klasse Student: setGroesse(double g) Daten sind nur über Schnittstellenmethoden zugänglich. String getName() setName(String s) private String Name private int Alter private double Groesse int getAlter() setAlter(int a) double getGroesse() 16 Member sind private public class Student { //Members private String Name; private int Alter; private String Fachbereich; //Methods public Student(String name) { Name = name; } public int getAlter() { return Alter; } Information Hiding public void setAlter(int alter) { Alter = alter; } Klasse StudentGekapselt: public String getFachbereich() { return Fachbereich; } public void setFachbereich(String fachbereich) { Fachbereich = fachbereich; } public String getName() { return Name; } } public void setName(String name) { Name = name; } 17 Gekapselter und nicht gekapselter Zugriff auf Daten einer Klasse: Hidden (versteckt) Not hidden (nicht versteckt) Student Student private String Name; private int Alter; private String Fachbereich; public String Name; public int Alter; public String Fachbereich; Student hans = new Student(...); Student hans = new Student(...); hans.Alter=18; hans.Fachbereich="Mikrotechnik"; String fb=hans.Fachbereich; hans.setAlter(18); hans.setFachbereich("Mikrotechnik"); String name=hans.getFachbereich(); Zugriff auf Member der Klasse Student 18 Überladen einer Methode public class Time { private int hour,min,sec; public void SetTime(int h, int m, int s) { hour=h; Gleiche min=m; Methodennamen sec=s; } } Verschiedene Parameter Datentypen public void SetTime(int h, int m) { hour=h; min=m; sec=0; } Durch Überladen der Methode SetTime(), kann die Zeit mit oder ohne Sekunden gesetzt werden. SetTime(13,23,5); SetTime(10,0); 19 Vererbung • Bei der Vererbung wird gleicher Sourcecode in einer Basisklasse zusammengefasst. Dadurch wird bestehender Sourcecode wiederverwendet. • Eine neue Klasse kann von einer bereits bestehenden Klasse abgeleitet werden. Diese erbt dann alle Member und Methoden der bestehenden Klasse. • Einer abgeleiteten Klasse kann zusätzliche Funktionalität hinzugefügt werden. 20 Vererbung UML-Diagramm Beispiel Spielkarte Rectangle In der Java Library bereits vorhandene Klasse für ein Rechteck. Der Source-Code kann nicht verändert werden. Wird vererbt Spielkarte Spielkarte erbt alle Funktionalitäten von Rectangle. Spielkarte können jetzt alle nötigen Member und Methoden hinzugefügt werden die für eine Spielkarte benötigt werden. 21 Java Sourcecode Klasse Spielkarte erbt Klasse Rectangle Klassendeklaration mit dem Zusatz extends public class Spielkarte extends Rectangle { // hier kann Code zur Erweiterung eingesetzt werden } 22