5.5.8 Öffentliche und private Eigenschaften



Ähnliche Dokumente
Objektorientierte Programmierung

5.4 Klassen und Objekte

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Programmieren in Java

Javakurs 2013 Objektorientierung

Einführung in die Programmierung

Computeranwendung und Programmierung (CuP)

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Einführung in die Java- Programmierung

SEP 114. Design by Contract

Studentische Lösung zum Übungsblatt Nr. 7

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Java: Vererbung. Teil 3: super()

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Programmierkurs Java

Java Kurs für Anfänger Einheit 5 Methoden

Innere Klassen in Java

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

BEISPIELKLAUSUR Softwareentwicklung:

Browsereinstellungen für moneycheck24 in Explorer unter Windows

Einführung in die Programmierung

Objektorientierte Programmierung

Objektbasierte Entwicklung

Große Übung Praktische Informatik 1

3 Objektorientierte Konzepte in Java

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Objektorientierte Programmierung für Anfänger am Beispiel PHP

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Vorkurs C++ Programmierung

Objektorientierte Programmierung OOP

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

Programmierkurs Java

Graphic Coding. Klausur. 9. Februar Kurs A

Kapitel 6. Vererbung

Kapitel 6. Vererbung

Grundlagen der höheren Mathematik Einige Hinweise zum Lösen von Gleichungen

2. Semester, 2. Prüfung, Lösung

REFLEX Zeiterfassung

Programmierkurs Java

Handbuch ECDL 2003 Professional Modul 3: Kommunikation Kalender freigeben und andere Kalender aufrufen

Vorbereitung auf die SEPA-Umstellung

Zählen von Objekten einer bestimmten Klasse

5. Abstrakte Klassen

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

5. Tutorium zu Programmieren

Java Einführung Methoden in Klassen

Anleitung über den Umgang mit Schildern

Kapitel 6. Vererbung

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Datenbanken Kapitel 2

Tragen Sie bitte im Anmeldefeld die Daten ein, die Sie von uns erhalten haben.

Anton Ochsenkühn. amac BUCH VERLAG. Ecxel für Mac. amac-buch Verlag

Software Engineering Interaktionsdiagramme

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden

Testklausur 1 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten

Arbeiten mit UMLed und Delphi

Lehrer: Einschreibemethoden

Vererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung.

Objektorientierte Programmierung. Kapitel 12: Interfaces

Java Einführung Abstrakte Klassen und Interfaces

Schnelleinstieg. Datenimport für die EXPOSÉ - Familie. Import von Adress / Objektdaten aus MS Excel. = Datenintegration aus anderen Lösungen

Hilfedatei der Oden$-Börse Stand Juni 2014

Professionelle Seminare im Bereich MS-Office

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Objektorientierung: Klassen und Objekte

Software Engineering Klassendiagramme Einführung

Angaben zu einem Kontakt...1 So können Sie einen Kontakt erfassen...4 Was Sie mit einem Kontakt tun können...7

Institut für Programmierung und Reaktive Systeme 26. April Programmieren II. 10. Übungsblatt

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: )

Diana Lange. Generative Gestaltung Operatoren

MCRServlet Table of contents

1. So beginnen Sie eine Kalkulation

Gezielt über Folien hinweg springen

Primzahlen und RSA-Verschlüsselung

Dokumentation IBIS Monitor

1 Mathematische Grundlagen

Benutzerhandbuch - Elterliche Kontrolle

Design by Contract with JML

Abwesenheitsnotiz im Exchange Server 2010

Kapitel 4 Das Projekt Digitaluhr Seite 1

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Arrays Fortgeschrittene Verwendung

Typumwandlungen bei Referenztypen

Modellierung und Programmierung 1

Jederzeit Ordnung halten

Softwaretechnik (Allgemeine Informatik) Überblick

Wie melde ich meinen Verein bei BOOKANDPLAY an?

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Umfrage. Didaktischer Kommentar. Lernplattform

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

ecaros2 - Accountmanager

GSD-Radionik iradionics Android-App

Arge Betriebsinformatik GmbH & Co.KG, CAP News 40, Februar CAP-News 40

Software Engineering Klassendiagramme Assoziationen

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Deklarationen in C. Prof. Dr. Margarita Esponda

Transkript:

5.5.8 Öffentliche und private Eigenschaften Schnittstellen vs. Implementierungen: Schnittstelle einer Klasse beschreibt, was eine Klasse leistet und wie sie benutzt werden kann, ohne dass ihre Implementierung sichtbar wird. Die Schnittstelle könnte folgende Informationen enthalten: Name der Klasse Allgemeine Beschreibung des Zwecks der Klasse Liste der Konstruktoren und Methoden der Klasse Parameter und Ergebnistyp für jeden Konstruktor und jede Methode Beschreibung des Zwecks jedes Konstruktors und jeder Methode Schnittstelle = Abstraktion einer Klasse. Ein Programmierer soll Klassen benutzen können, ohne den Quelltext gesehen zu haben Implementierung einer Klasse bezeichnet den kompletten Quellcode, der die Klasse definiert 63

5.5.8 Öffentliche und private Eigenschaften Zugriffsmodifikatoren: definieren die Sichtbarkeit eines Datenfeldes, eines Konstruktors und einer Methode Öffentliche (public) Elemente sind sowohl innerhalb der definierenden Klasse als auch von anderen Klassen aus zugreifbar Private (private) Elemente sind ausschließlich innerhalb der definierenden Klasse zugreifbar Unterscheidung von Schnittestelle und Implementierung: Schlüsselwort public deklariert ein Element einer Klassendefinition (Datenfeld / Methode) als Teil der Schnittstelle (öffentlich sichtbar) Schlüsselwort private deklariert es als Teil der Implementierung (verbogen für den Zugriff von außen) 64

5.5.8 Öffentliche und private Eigenschaften public class Konto { private int nummer; private String inhaber; private int kontostand; public Konto(int neuenummer, String name) { public Konto(int neuenummer, String name, int betrag) { public int getkontostand() { public void kontostanddrucken() { public void einzahlen(int betrag) { public void einzahlen(int betrag, int gebuehr) { public void abheben(int betrag) { public void ueberweisen(konto empfaenger, int betrag) { 65

5.5.8 Öffentliche und private Eigenschaften Information Hiding (das Geheimnisprinzip): Die internen Details der Implementierung einer Klasse sollten vor anderen Klassen (Benutzern) verbogen sein. Dies unterstützt eine bessere Modularisierung von Anwendungen. Ein die Klasse benutzender Programmierer sollte keine Informationen über den internen Aufbau der Klasse benötigen (unmittelbare Konsequenzen des Grundgedankens der Abstraktion und Modularisierung) Es sollte ihm nicht erlaubt sein, diese internen Details zu kennen (Wartung; Kopplung) 66

5.5.8 Öffentliche und private Eigenschaften Beispiel: Klasse Datum Datenfelder nach außen geschützt und Zugriff nur über Methoden Vorteil: Veränderbarkeit der Details Neue Implementierung der Klasse soll Datum anders speichern, z.b. als Anzahl der Tage seit 1.1.1900. Die Schnittestelle aller Methoden bleiben unverändert. Alle Programme können unverändert die neue Version der Klasse Datum benutzen. Datenfelder: private int tag private int monat private int jahr Konstruktoren: Datum(int, int, int) Methoden: public int gettag() public int getmonat() public int getjahr() public boolean istschaltjahr() public void settag(int) public void setmonat(int) public void setjahr(int) 67

5.5.8 Öffentliche und private Eigenschaften Idealerweise soll eine Änderung in der Implementierung einer Klasse keine Änderung in anderen benutzenden Klassen erforderlich machen Kopplung: Wenn eine Änderung an einer Stelle des Programms keine Änderungen an anderen Stellen impliziert, dann wird dies schwache oder lose Kopplung genannt Achtung: Die Regel keine Kenntnisse über Interna erlauben bezieht sich nicht auf den Programmierer einer benutzenden Klasse, sondern auf die benutzende Klasse selbst. Der Programmierer der beiden beteiligten Klassen kann sogar derselbe sein, aber die Klassen sollten lose gekoppelt sein. 68

5.5.8 Öffentliche und private Eigenschaften public private Datenfelder erlaubt, unäublich Regelfall Met hoden Service nach au¼en int erner Gebrauch In Java können auch Datenfelder öffentlich deklariert werden. Dies bricht allerdings mit dem Geheimnisprinzip schlechter Still, kein Gebrauch empfohlen. Einige andere objektorientierte Programmiersprachen erlauben keine öffentlichen Datenfelder! Datenfelder von Klassen sollten immer privat sein 69

5.5.9 Statische Variablen und Methoden Klassenvariablen (auch statische Variablen genannt) sind Datenfelder einer Klasse, von denen immer nur ein Exemplar in der Klasse selbst, nicht aber in den erzeugten Objekten, existiert. Dies unterscheidet sie fundamental von den Instanzvariablen (bisher Datenfelder genannt). Beispiel: public class Konto { // Klassenfelder static int aktuellerzinssatz = 3; static int aktuellekontonummer; // Objektfelder int nummer; String inhaber; int kontostand = 0; Klassen- und Objektfelder können initialisiert werden 70

5.5.9 Statische Variablen und Methoden Objekte derselben Klassen benutzen gemeinsam die Klassenvariablen Manche Felder sollten aus Effizienzgründen nicht in jedem Objekt gespeichert werden; Bsp. aktuellerzinssatz Manche Felder können gar nicht in jedem Objekt gespeichert werden; Bsp. aktuellekontonummer Klasse: Konto aktuellerzinssatz 3 aktuellerkontonummer 370223 Konto1 nummer: 12345 inhaber: xxx kontostand: 1000 Konto2 nummer: 13579 inhaber: yyy kontostand: 25000 Konto3 nummer: 24678 inhaber: zzz kontostand: -1000 71

5.5.9 Statische Variablen und Methoden public class Konto { // Klassenfelder static int aktuellerzinssatz = 3; static int aktuellekontonummer; public Konto(String name) { inhaber = name; kontostand = 0; nummer = aktuellekontonummer; aktuellekontonummer++; // Objektfelder int nummer; String inhaber; int kontostand; automatisch die nächste freie Kontonummer vergeben aktuelle Kontonummer um 1 erhöhen 72

5.5.9 Statische Variablen und Methoden Quiz: Es gibt einen weiteren gewichtigen Grund, warum Daten wie der aktuelle Zinssatz nicht als Objektfelder, sondern als Klassenfelder, definiert werden sollen. Was ist es? Klasse: Konto aktuellerkontonummer 370223 Konto1 nummer: 12345 inhaber: xxx zinssatz: 3 kontostand: 1000 Konto2 nummer: 13579 inhaber: yyy zinssatz: 3 kontostand: 25000 Konto3 nummer: 24678 inhaber: zzz zinssatz: 3 kontostand: -1000 73

5.5.9 Statische Variablen und Methoden Alle bisher betrachteten Methoden sind Instanzmethoden: Sie werden an einer Instanz einer Klasse aufgerufen. Im Gegensatz dazu können Klassenmethoden (mit static zu definieren) ohne eine Instanz aufgerufen werden; die Klasse selbst reicht aus. Klassenmethoden gehören zu einer Klasse, nicht zu deren Instanzen Verarbeitung von Klassenvariablen; Bsp. getzinssatz, setzinssatz Allgemeine Methoden implementieren, die unabhängig vom aufrufenden Objekt sind; Bsp. printagb (Drucken von AGB) 74

5.5.9 Statische Variablen und Methoden public class Konto { static int aktuellerzinssatz = 3; // Klassenmethoden static int getzinssatz() { return aktuellerzinssatz; static void setzinssatz(int zinssatz) { aktuellerzinssatz = zinssatz; 75

5.5.9 Statische Variablen und Methoden Klassenname reicht zum Aufruf von Klassenmethoden aus Kann auch von einem Objekt aus aufgerufen werden 76

5.5.9 Statische Variablen und Methoden Einschränkungen für Klassenmethoden: Klassenmethoden sind mit einer Klasse statt mit Instanzen verknüpft Eine Klassenmethode kann nur auf die statischen Klassenfelder, aber nicht auf die Instanzvariablen zugreifen, die innerhalb der Klasse definiert sind (Instanzvariablen sind mit Instanzen verknüpft) Eine Klassenmethode kann nur die anderen Klassenmethoden, aber keine Instanzmethoden ihrer Klasse aufrufen 77

5.5.9 Statische Variablen und Methoden 78

5.5.10 Konstanten Häufig werden Konstanten benötigt. Diese sind ähnlich wie Variablen, können aber ihren Wert während der Ausführung nicht mehr ändern. In Java werden Konstanten mit final definiert. Konstanten müssen initialisiert werden können auf verschiedenen Ebenen verwendet werden public class X { static final double EineKlassenVariable = 3.14159; private final int EineInstanzVariable = 10; public void EineInstanzMethode() { final int EineLokaleVariable = 200; 79

5.6 Objektinteraktion Bisher: Definition einzelner Klassen (Datenfelder, Konstruktoren, Methoden). Für die Realisierung interessanter Anwendungen müssen wir viele Klassen definieren. Instanzen dieser Klassen werden erzeugt, die dann miteinander kommunizieren, um eine Aufgabe zu lösen. Beispiel: Aus Klassen (Kreis, Quadrat, Dreieck) des Projektes Figuren eine Klasse Zeichner realisieren, die z.b. die idyllische Szene zu zeichnet 80

5.6 Objektinteraktion public class Zeichner { private Quadrat wand; private Quadrat fenster; private Dreieck dach; private Kreis sonne; // Erzeuge ein Exemplar der Klasse Zeichner public Zeichner() { // nichts zu tun hier, alle Exemplarvariablen werden automatisch // mit null initialisiert 81

5.6 Objektinteraktion public void zeichnehaus() { wand = new Quadrat(); wand.vertikalbewegen(80); wand.groesseaendern(100); wand.sichtbarmachen(); fenster = new Quadrat(); fenster.farbeaendern("schwarz"); fenster.horizontalbewegen(20); fenster.vertikalbewegen(100); fenster.sichtbarmachen(); dach = new Dreieck(); dach.groesseaendern(50, 140); dach.horizontalbewegen(60); dach.vertikalbewegen(70); dach.sichtbarmachen(); sonne = new Kreis(); sonne.farbeaendern("gelb"); sonne.horizontalbewegen(180); sonne.vertikalbewegen(-10); sonne.groesseaendern(60); sonne.sichtbarmachen(); 82

5.6 Objektinteraktion public void inschwarzweissaendern() { // Ändere die Darstellung in schwarzweiß if (wand!= null) { // nur wenn schon gezeichnet wurde... wand.farbeaendern("schwarz"); fenster.farbeaendern("weiss"); dach.farbeaendern("schwarz"); sonne.farbeaendern("schwarz"); public void infarbeaendern() { // Ändere die Darstellung in Farbe if (wand!= null) { // nur wenn schon gezeichnet wurde... wand.farbeaendern("rot"); fenster.farbeaendern("schwarz"); dach.farbeaendern("gruen"); sonne.farbeaendern("gelb"); 83

5.6 Objektinteraktion Erzeugen von Objekten: Methodenaufruf: Variable = new Konstruktor (Parameterliste) Interne Methodenaufruf: Methoden aus derselben Klasse des aufrufenden Objektes Methodenname (Parameterliste) Externe Methodenaufruf: Methoden aus einer anderen Klasse Objekt.Methodenname (Parameterliste) 84

5.6 Objektinteraktion Beispiel: Anzeige einer Digitaluhr in Std. und Min. getrennt durch : Modularisierung: Prozess der Zerlegung eines Ganzen in wohl definierte Teile, die getrennt erstellt und untersucht werden können und die in wohl definierter Weise interagieren Anzeige einer Digitaluhr = Ziffernpaar : Ziffernpaar Ziffernpaar für Stunden: Startet bei null, wird jede Stunde ums eins erhöht und springt auf null zurück, wenn 23 überschritten wird Ziffernpaar für Minuten: Startet bei null, wird jede Minute ums eins erhöht und springt auf null zurück, wenn 59 überschritten wird Diese Ähnlichkeit führt dazu, von ihren Unterschieden zu abstrahieren Objekte, die die Werte von null bis zu einem bestimmten Wert anzeigen 85

5.6 Objektinteraktion public class Uhrenanzeige { private Nummernanzeige stunden; private Nummernanzeige minuten; public class Nummernanzeige { private int limit; private int wert; 86

5.6 Objektinteraktion public class Nummernanzeige { private int limit; private int wert; public Nummernanzeige (int anzeigelimit) { limit = anzeigelimit; wert = 0; public int gibwert() { return wert; public String gibanzeigewert() { if (wert < 10) return "0" + wert; else return "" + wert; Verkettung von Zeichenketten public void setzewert(int ersatzwert) { if ((ersatzwert >= 0) && (ersatzwert < limit)) wert = ersatzwert; public void erhoehen() { wert = (wert + 1) % limit; Modulo-Operator 87

5.6 Objektinteraktion public class Uhrenanzeige { private Nummernanzeige stunden; private Nummernanzeige minuten; private String zeitanzeige; public Uhrenanzeige() { stunden = new Nummernanzeige(24); minuten = new Nummernanzeige(60); anzeigeaktualisieren(); public Uhrenanzeige(int stunde, int minute) { stunden = new Nummernanzeige(24); minuten = new Nummernanzeige(60); setzeuhrzeit(stunde, minute); public void setzeuhrzeit(int stunde, int minute) { stunden.setzewert(stunde); minuten.setzewert(minute); anzeigeaktualisieren(); public void taktsignalgeben() { minuten.erhoehen(); if (minuten.gibwert() == 0) { stunden.erhoehen(); anzeigeaktualisieren(); public String gibuhrzeit() { return zeitanzeige; private void anzeigeaktualisieren() { zeitanzeige = stunden.gibanzeigewert() + ":" + minuten.gibanzeigewert(); System.out.println(zeitanzeige); 88

5.6 Objektinteraktion public class Uhrenanzeige { private Nummernanzeige stunden; private Nummernanzeige minuten; public void taktsignalgeben() { minuten.erhoehen(); if (minuten.gibwert() == 0) { stunden.erhoehen(); anzeigeaktualisieren(); externe Methodenaufruf interne Methodenaufruf 89

5.6 Objektinteraktion public class Nummernanzeige { private int limit; private int wert; public Nummernanzeige(int anzeigelimit) { limit = anzeigelimit; wert = 0; public Nummernanzeige(int limit) { this.limit = limit ; wert = 0; Der Name limit ist überladen derselbe Name wird für zwei verschiedene Dinge verwendet 90

5.6 Objektinteraktion Im Konstruktor Nummernanzeige() lautet einer der Parameter limit, genau so wie das Datenfeld limit der Klasse Nummernanzeige. Wie kann man auf das Klassenfeld limit zugreifen? Java spezifiziert, dass immer die Definition des nächsten umschließenden Blocks verwendet wird Das Schlüsselwort this bezieht sich aus das aktuelle Objekt. Dieses Konstrukt gibt somit die Möglichkeit, statt auf einen Parameter auf ein Klassenfeld mit gleichem Namen zuzugreifen. Nutzen: Das Schlüsselwort this lässt sich problemlos durch eine eindeutige Namensgebung vermeiden. Manchmal gibt es allerdings Namen, die die Bedeutung einer Variablen perfekt beschreiben. 91