Upload
lilo-zerbst
View
104
Download
2
Embed Size (px)
Citation preview
PKJ 2005/1Stefan Dissmann
Ausblick
Es fehlen noch:
• Möglichkeiten zum Strukturieren größerer Programme
• Umgang mit variabler Zahl von Elementen• Umgang mit nicht-sequentiellen Strukturen• Umgang mit Strukturen aus heterogenen Typen
In JAVA gelöst durch
Klassen und Objekte
PKJ 2005/2Stefan Dissmann
Erkenntnisse
Prinzipien bei der Gestaltung von abgeschlossenen Einheiten:
• Kapselung• Jede Einheit hat Grenzen.
• Lokalität• Funktionen und Daten der Einheit sind zusammengefasst.
• konzeptionelle Vollständigkeit• Jede Einheit kann ihre Aufgaben erledigen.
• Geheimhaltung von „Interna“• Jede Einheit verbirgt Daten und Handlungsumsetzung.
• Autonomie• Jede Einheit entscheidet selbstständig.
PKJ 2005/3Stefan Dissmann
Klassen und Objekte
Objekt ist abgeschlossene Einheit im JAVA-Programm
Klasse istKonstruktionsbeschreibung für Objekte
Folgerungen:• Klasse wird benötigt, um Objekt zu erzeugen.• Aus einer Klasse können viele Objekte erzeugt werden.
PKJ 2005/4Stefan Dissmann
Beispiel – Klasse Studierende
Folgende Daten von jedem Studierenden sollen verwaltet werden:
• Vorname Text• Name Text• Matrikelnummer Zahl• Studiengang Text• Semesterzahl Zahl
PKJ 2005/5Stefan Dissmann
Klasse
public class Studierende {
private String name, vorname, studiengang;
private int matNr, semester;
}
PKJ 2005/6Stefan Dissmann
Klasse
public class Studierende {
private String name, vorname, studiengang;
private int matNr, semester;
}
neu
Geheimnisprinzip Attribut
PKJ 2005/7Stefan Dissmann
Attribut
private String name, vorname, studiengang;
Attribut• ist „Variable “ auf Ebene einer Klasse• steht in der ganzen Klasse zur Verfügung• wird ähnlich vereinbart wie eine Variable in Methode• hat eine Angabe zu Zugriffsrecht (hier: private)
private• verbirgt Attribut innerhalb eines Objektes,• so dass kein Zugriff von Objekten anderer Klassen aus möglich
ist.• Objekte der Klasse Studierende sind völlig abgeschottet!
PKJ 2005/8Stefan Dissmann
Methode
Lösung:
• Hinzufügen von Methoden, die auf Attribute zugreifen.• Methoden müssen von außen zugreifbar sein.
Analogie:Tasten des Fernsehers oder Videorekorders
PKJ 2005/9Stefan Dissmann
Klasse
public class Studierende {
private String name, vorname, studiengang;
private int matNr, semester;
public void setzeName(String n) {
name = n;
}
public String gibName() {
return name;
}
}
PKJ 2005/10Stefan Dissmann
Klasse
public void setzeName(String n) {
name = n;
}
public String gibName() {
return name;
}
• Methoden nutzen Attribut name lesend und schreibend.• Vereinbarung der Methoden ohne static.• Implementierung der Methoden wie bekannt.
PKJ 2005/11Stefan Dissmann
Nutzung von Klassen
Offene Fragen:
Wie werden Objekte erzeugt?Wie werden Objekte genutzt?Wie werden Methoden angesprochen?
PKJ 2005/12Stefan Dissmann
Nutzung von Klassen
public class TestStud {
public static void main(String[] args) {
Studierende stud;
}
}
• Vereinbart nur eine Referenz, die auf Objekte der Klasse Studierende verweisen kann.
• Dadurch ist noch kein Objekt erzeugt.
PKJ 2005/13Stefan Dissmann
Nutzung von Klassen
public class TestStud {
public static void main(String[] args) {
Studierende stud;
stud = new Studierende(); }
}
• Es wird ein neues Objekt der Klasse Studierende erzeugt.• Die Referenz stud verweist auf diese Objekt.•() ist notwendig!
PKJ 2005/14Stefan Dissmann
Nutzung von Klassen
public class TestStud {
public static void main(String[] args) {
Studierende stud;
stud = new Studierende(); stud.setzeName("Musterfrau");
}
}
•setzeName des Objekts, auf das stud verweist, wird aufgerufen!
•"Musterfrau" wird als Parameter übergeben.• Folge:
Das Attribut name des Objekts wird auf "Musterfrau" gesetzt.
PKJ 2005/15Stefan Dissmann
Nutzung von Klassen
public class TestStud {
public static void main(String[] args) {
Studierende stud;
stud = new Studierende(); stud.setzeName("Musterfrau");
}
}
• Zugriff über .-Notation•x.y heißt (in JAVA) immer:
Nimm das Objekt, auf das x verweist,und von diesem Objekt (die Methode) y.
PKJ 2005/16Stefan Dissmann
Nutzung von Klassen
public class TestStud {
public static void main(String[] args) {
Studierende stud;
stud = new Studierende(); stud.setzeName("Musterfrau"); System.out.println("Name:
"+stud.gibName());
}
}
•gibName des Objekts, auf das stud verweist, wird aufgerufen!
•gibName liefert den Wert des Attributs name!
PKJ 2005/17Stefan Dissmann
Referenzen auf Klassen
Studierende stud1, stud2;
stud1 = new Studierende();
stud1.setzeName("Schmidt");
stud2 = stud1;
stud2.setzeName("Müller");
stud1.zeigeName();
stud2.zeigeName();
PKJ 2005/18Stefan Dissmann
Referenzen auf Klassen
Studierende stud1, stud2;
stud1 = new Studierende();
stud1.setzeName("Schmidt");
stud2 = stud1;
stud2.setzeName("Müller");
stud1.zeigeName();
stud2.zeigeName();
stud1 stud2
PKJ 2005/19Stefan Dissmann
Referenzen auf Klassen
Studierende stud1, stud2;
stud1 = new Studierende();
stud1.setzeName("Schmidt");
stud2 = stud1;
stud2.setzeName("Müller");
stud1.zeigeName();
stud2.zeigeName();
stud1 stud2
Studierende
name:
PKJ 2005/20Stefan Dissmann
Referenzen auf Klassen
Studierende stud1, stud2;
stud1 = new Studierende();
stud1.setzeName("Schmidt");
stud2 = stud1;
stud2.setzeName("Müller");
stud1.zeigeName();
stud2.zeigeName();
stud1 stud2
Studierende
name:"Schmidt"
PKJ 2005/21Stefan Dissmann
Referenzen auf Klassen
Studierende stud1, stud2;
stud1 = new Studierende();
stud1.setzeName("Schmidt");
stud2 = stud1;
stud2.setzeName("Müller");
stud1.zeigeName();
stud2.zeigeName();
stud1 stud2
Studierende
name:"Schmidt"
PKJ 2005/22Stefan Dissmann
Referenzen auf Klassen
Studierende stud1, stud2;
stud1 = new Studierende();
stud1.setzeName("Schmidt");
stud2 = stud1;
stud2.setzeName("Müller");
stud1.zeigeName();
stud2.zeigeName();
stud1 stud2
Studierende
name:„Müller"
PKJ 2005/23Stefan Dissmann
Referenzen auf Klassen
Studierende stud1, stud2;
stud1 = new Studierende();
stud1.setzeName("Schmidt");
stud2 = stud1;
stud2.setzeName("Müller");
stud1.zeigeName();
stud2.zeigeName();
stud1 stud2
Studierende
name:„Müller"
PKJ 2005/24Stefan Dissmann
Referenzen auf Klassen
Studierende stud1, stud2;
stud1 = new Studierende();
stud1.setzeName("Schmidt");
stud2 = stud1;
stud2.setzeName("Müller");
stud1.zeigeName();
stud2.zeigeName();
stud1 stud2
Studierende
name:„Müller"
PKJ 2005/25Stefan Dissmann
Attribute – Zuweisung durch expliziten Konstruktor
public Studierende (String n, String vn, String sg) {
name = n;
…
}
Expliziter Konstruktor ist spezielle Methode:• Name = Name der Klasse• keine Angabe eines Rückgabetyps, kein return• zurückgegeben wird immer ein Objekt der Klasse• Aufruf mit new• Rumpf wird nach Initialisierung ausgeführt • Rumpf kann Programmkonstrukte enthalten
PKJ 2005/26Stefan Dissmann
Lebensdauer von Objekten
Objekt wird durch Aufruf eines Konstruktors erzeugt!
Wann und wie wird ein Objekt vernichtet?Im Prinzip gar nicht; Objekte existieren immer
weiter!