7. Klassenmethoden Einführung in die Programmierung (fbw) Sommersemester 2007 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi 1 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Einführung in die Programmierung (fbw), SS 2007. 8.5.2007 Übersicht über den Kurs Einordnung in den gesamten Kurs 1. Einführung 2. Funktionen 3. Variablen 4. Kontrollstrukturen 5. Klassen und Objekte 6. Konstruktoren 7. Klassenmethoden 8. Vererbung 9. Erweiterte Java-Konzepte 2 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Einführung in die Programmierung (fbw), SS 2007. 8.5.2007 Agenda Geheimnisprinzip Geheimnisprinzip Klassenmethoden Geheimnisprinzip (Information Hiding): eines der wichtigsten Konzepte des Software Engineering Information Hiding (D.L. Parnas, 1972): – Implementierung komplexer Datenstrukturen soll in einer Klasse (Modul) verborgen werden – Nutzer erhalten nur eine abstrakte Sicht auf die Daten (abstrakte Datenstrukturen) – Datenzugriff nur über die Methoden (Encapsulation = Kapselung) Gekapselte (abstrakte) Klassen besitzen einen Zustand ("Gedächtnis"), der durch Zugriffsmethoden geändert werden kann Die Datenkapselung hat folgende Vorteile: – Gekapselte Klassen sind einfacher nutzbar (reduzierte Komplexität) – Sie können ohne Auswirkung auf andere Klassen geändert werden Es bestehen jedoch auch Nachteile: – Zugriff etwas weniger effizient – Eingeschränkte Flexibilität des Zugriffs, da nur über Methoden der Klasse auf die Daten zugegriffen werden kann 4 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Einführung in die Programmierung (fbw), SS 2007. 8.5.2007 Steuerung der Sichtbarkeit: Modifier Modifier: – private: nur innerhalb der Klasse sichtbar class Fraction { – public: überall sichtbar private int z; // Zähler private int n; // Nenner – protected, package scope: Mischformen (später) public int getZ () { return this.z; } Gilt für Variablen und Methoden Variablen sollten in der Regel private deklariert werden. Soll lesender und / oder schreibender Zugriff explizit erlaubt werden, dann über Getter / Setter-Methoden public int getN () { return this.n; } … } 5 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Einführung in die Programmierung (fbw), SS 2007. 8.5.2007 Nutzer- und Anbieterrollen: Klassen Nutzer Deklaration … C c = null; … 6 Definition (Außensicht) … public class C { … } Nutzung … c = new C(); … Anbieter Entweder selbst definiert, Teil der JavaBibliothek oder von Dritten Implementierung (Innensicht) Type1 variable1; … ReturnType method1(ArgType1) … Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Einführung in die Programmierung (fbw), SS 2007. 8.5.2007 Nutzer- und Anbieterrollen: Methoden Nutzer Anbieter Deklaration … C c; ReturnType result; … Definition (Außensicht) Signatur public class C { ReturnType method1(ArgType1) Nutzung … result = c.m(arg1); … Implementierung (Innensicht) { … return result; } 7 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Einführung in die Programmierung (fbw), SS 2007. 8.5.2007 Sichtbarkeit von Variablen und Methoden Rot = Definition public class Loan { private Person borrower; private Book borrowedBook; public class Person { // instance variables private String name; String address; Private Sichtbarkeit: Zwischen { und } // instance methods public String toString() { String result; // instance methods public String toString() { String result; ... result = borrower.getName(); ... } result = name; … return result; } … public String getName() { return name; } } Lokale Variablen von Methoden sind automatisch privat } Blau = Nutzung 8 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Einführung in die Programmierung (fbw), SS 2007. 8.5.2007 Agenda Geheimnisprinzip Klassenmethoden Klassenmethoden Klassenvariablen und -methoden Bisher betrachtete Variablen und Methoden beziehen sich auf die einzelne Objekte class Customer { Instanzvariablen / -methoden // class variables public static int numberOfCustomers; Variablen, Konstanten und Methoden, die sich auf alle Objekte beziehen Klassenvariablen / Methoden // instance variables private String name; … Typische Beispiele: Instanziierung, Suche // class methods public static Customer makeCustomer (String name, …) {…} public static Customer findCustomer (int number) {…} Keyword in Java: static Häufig werden statt dessen auch Managerklassen verwendet // instance methods public void changeAddress (String newAdress) {…} } 10 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Einführung in die Programmierung (fbw), SS 2007. 8.5.2007