7. Klassenmethoden Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi 1 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Einführung in die Programmierung (fbw), SS 2007. 28.5.2008 Ü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. 28.5.2008 Agenda Geheimnisprinzip Geheimnisprinzip Klassenmethoden Geheimnisprinzip (Information Hiding): eines der wichtigsten Konzepte des Software Engineering David L. Parnas 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. 28.5.2008 Nutzer- und Anbieterrollen: Klassen Nutzer Deklaration … C c; … 5 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. 28.5.2008 Nutzer- und Anbieterrollen: Methoden Nutzer Anbieter Deklaration … C c; ReturnType result; … Definition (Außensicht) Signatur public class C { public ReturnType m (ParamType1 p1) Nutzung … result = c.m(p1); … Implementierung (Innensicht) { … return result; } 6 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Einführung in die Programmierung (fbw), SS 2007. 28.5.2008 Steuerung der Sichtbarkeit: Modifier Modifier: – private: nur innerhalb der Klasse sichtbar – public: überall sichtbar class Fraction { 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; } … } 7 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Einführung in die Programmierung (fbw), SS 2007. 28.5.2008 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; …. borrower = new Person(); … // instance methods public String toString() { String result; // instance methods result = name; … return result; public String toString() { String result; ... result = borrower.getName(); ... } } Private Sichtbarkeit: Zwischen { und } } … 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. 28.5.2008 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. 28.5.2008 Klassen, Objekte, Klassenvariablen, Klassenmethoden, Instanzvariablen, Instanzmethoden – Was ist was? Kunde nimm Kredit auf Kundennummer Konto suche Kunden drucke Kontoauszug Kontoauszugsdrucker Anzahl der Kunden führe Zahlungslauf durch hebe Geld ab Zahlungslauf Mehrwertsteuersatz rechne in Fremdwährung um Betrag Währung zahle Geld ein Bank lege neuen Kunden an 11 Kredit IP-Adresse Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Einführung in die Programmierung (fbw), SS 2007. 28.5.2008