3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

Ähnliche Dokumente
Klassenmethoden. Klassenvariablen. Für das Auslesen des Studentenzählers definieren wir eine öffentliche Klassenmethode:

2. Unterprogramme und Methoden

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Repetitorium Informatik (Java)

Einstieg in die Informatik mit Java

1 Klassen und Objekte

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Vererbung, Polymorphie

Objektorientierte Programmierung und Klassen

Implementieren von Klassen

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Einstieg in die Informatik mit Java

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Java Einführung Methoden in Klassen

Tag 7 Repetitorium Informatik (Java)

Java Einführung Klassendefinitionen

Einstieg in die Informatik mit Java

10. Pakete. Ein Paket (package) bündelt thematisch zusammengehörige Klassen und Schnittstellen zu einer Klassenbibliothek.

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Einstieg in die Informatik mit Java

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Einstieg in die Informatik mit Java

4. Vererbung. Idee der Vererbung. Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende Klassen vor:

Klassen als Datenstrukturen

1. Abstrakte Klassen

Felder - Arrays. Typ feldname[] = new Typ[<ganze Zahl >]; Beispiel: double vektor[] = new double[5]; auch eine Initialisierung ist möglich.

Einstieg in die Informatik mit Java

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

5.5.8 Öffentliche und private Eigenschaften

Folienpaket 7 Themenschwerpunkte: Methoden in OOP /2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Allgemeines - Prinzipien

3 Objektorientierte Konzepte in Java

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Methoden und Wrapperklassen

Tag 4 Repetitorium Informatik (Java)

4. Vererbung Die Klasse Object. Die Klasse Object

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r

1. Referenzdatentypen: Felder und Strings

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

Geschachtelte Klassen

7. Übung Informatik II - Objektorientierte Programmierung

Java für Bauingenieure

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Fragen zur OOP in Java

Objektorientierte Programmierung Studiengang Medieninformatik

Javakurs für Anfänger

Programmiersprache Java Objektorientierte Programmierung II

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Weitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax

Aufgabe 1 (12 Punkte)

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Javakurs für Anfänger

Javakurs für Anfänger

Prozeduren vs. Funktionen

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Klassenvariablen, Klassenmethoden

Algorithmen und Datenstrukturen 06

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Einführung in die Programmierung

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen

Modellierung und Programmierung 1

C++ Klassen weitere Funktionen

3 Objektorientierte Konzepte in Java

Javakurs für Anfänger

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

Einstieg in die Informatik mit Java

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

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Einstieg in die Informatik mit Java

C++ - Objektorientierte Programmierung Vererbung

5 Vererbung. Subklassen, Superklassen, Pakete Zugriffsrechte

Algorithmen und Datenstrukturen II

Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ

Java Einführung Methoden. Kapitel 6

Tag 4 Repetitorium Informatik (Java)

Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen. J. W. v. Goethe.

Konstruktor. Grundlagen der Programmierung. Stephan Kleuker 90

Intuitive Einführung. Informatik B Objektorientierte Programmierung in Java. Vorlesung 01: Objektorientierte Programmierung (Teil 1)

Javakurs 2013 Objektorientierung

Javakurs für Anfänger

Klassen. Kapitel Klassendeklaration

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

7. Klassenmethoden Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

Einführung in die Programmierung WS 2009/10. Übungsblatt 5: Typen, Variablen und einfache Methoden in Java

Umsetzung einer Klassenkarte in einer Programmiersprache

Java Datentypen und Variablen

Die Klasse java.lang.object. Thorsten Treffer

Algorithmen und Datenstrukturen

Philipp Güttler Objektorientierung und komplexe Datentypen

Programmieren in Java

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Begriffe 1 (Wiederholung)

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

Einstieg in die Informatik mit Java

Abschnitt 6: Klassen, Objekte und Methoden in Java

Programmieren in Java

Transkript:

Klassenvariablen Wir wollen die Zahl der instantiierten Studentenobjekte zählen. Dies ist jedoch keine Eigenschaft eines einzelnen Objektes. Vielmehr gehört die Eigenschaft zu der Gesamtheit aller Studentenobjekte. Eigenschaften einer Klasse als Ganzes werden durch Klassenvariablen repräsentiert. Syntax für eine private Klassenvariable: private static Datentyp Variablenname = Initialwert; Beispiel: private static int studzaehler = 0; Das Schlüsselwort static macht eine Variable zur Klassenvariable. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 81

Wenn die Zugriffsrechte nicht dagegen sprechen, erfolgt der Zugriff auf eine Klassenvariable durch: Klassenname.Variablenname Beispiel: Wäre studzaehler öffentlich, könnte man den Zählerwert wie folgt ausgeben: System.out.println(Student.studZaehler); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 82

Klassenmethoden Für das Auslesen des Studentenzählers definieren wir eine öffentliche Klassenmethode: public static int getzaehler() { return studzaehler; } Nutzung der Klassenmethode: System.out.println(Student.getZaehler()); Eine Klassenmethode ist eine Methode, die der Klasse als Ganzes zugeordnet ist. In Klassenmethoden ist kein Zugriff auf Instanzvariablen möglich. Nutzung allgemein: Klassenname.Methodenname( aktuelle Parameter ) Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 83

Wie können wir dafür sorgen, dass bei der Erzeugung von Objekten der Studentenzähler korrekt erhöht wird? Eine (noch nicht optimale) Möglichkeit: Wir verpacken die Erzeugung in einer Klassenmethode: public static Student createstudent() { studzaehler = studzaehler + 1; return new Student(); } Nutzung: Student studi = Student.createStudent(); System.out.println(Student.getZaehler()); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 84

Warum nicht optimal? Bei älteren Programmen, die new verwenden, wird der Zähler nicht erhöht. Wie können wir dies abstellen? Verwendung eines sogenannten Konstruktors (siehe folgendes Thema). Klassenmethoden und Klassenvariablen werden in Klassendiagrammen durch Unterstreichung gekennzeichnet. Student -name: -nummer: -studzaehler: +getname() +getnummer() +setname(string) +setnummer(int) +validatenummer() +tostring() +getzaehler() +createstudent() String int int String int void void boolean String int Student Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 85

Vereinbarung von Konstanten Die Vereinbarung von Konstanten erfolgt innerhalb einer Klassendefinition. Konstanten sind Klassenvariablen. Durch das Schlüsselwort final wird die nachträgliche Änderung des Variablenwerts verboten. Syntax für die Deklaration öffentlicher Konstanten: public static final Datentyp Variablenname = Initialwert; Beispiel: Definition von Konstanten für Studienfächer: public static final int MATHEMATIK STUDIUM = 1; public static final int INFORMATIK STUDIUM = 2; public static final int BIOLOGIE STUDIUM = 3;... Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 86

Der Zugriff erfolgt wie bei Klassenvariablen: Klassenname.Variablenname Es hat sich die Schreibweise durchgesetzt, dass Konstantennamen ausschließlich aus Großbuchstaben und Unterstrichen bestehen. Teilwörter werden durch einen Unterstrich getrennt (siehe Java Code Conventions). Die Zuweisung an eine als Konstante vereinbarte Variable führt zu einem Fehler bei der Übersetzung. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 87

3. Klassen Konstruktor Konstruktor Mit Konstruktoren können wir Einfluss auf die Erzeugung eines Objektes nehmen. Konstruktoren erlauben es, den Anfangszustand von Objekten zu parametrisieren. Der Aufruf des/der Konstruktoren erfolgt implizit bei Anwendung von new. Syntax für einen öffentlichen Konstruktor: public Klassenname( Parameterliste ) { Anweisungen } Ein Konstruktor heißt immer so wie die Klasse. In der Parameterliste werden Argumente vereinbart. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 88

3. Klassen Konstruktor Der einfachste Konstruktor für Student lautet: public Student() { } Allgemein ist dies der Standard-Konstruktor. Er wird automatisch angelegt, wenn kein Konstruktor definiert wurde (aber nur genau für diesen Fall). Wir sollten im Konstruktor dafür sorgen, dass automatisch der Zähler für die Studentenobjekte erhöht wird. public Student() { studzaehler = studzaehler + 1; } Damit ist die Klassenmethode createstudent überflüssig. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 89

3. Klassen Konstruktor Überladen von Konstruktoren Wie Methoden können auch Konstruktoren überladen werden. D.h., es darf mehrere Konstruktoren zu einer Klasse geben. Diese müssen sich aber in ihrer Signatur unterscheiden. Weiterer möglicher Konstruktor für Student: public Student(String name, int nummer) { studzaehler = studzaehler + 1; } this.name = name; this.nummer = nummer; Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 90

3. Klassen Konstruktor Innerhalb eines Konstruktors darf als erste Anweisung ein anderer Konstruktor aufgerufen werden. Dies erfolgt durch das Schlüsselwort this in Verbindung mit aktuellen Parametern. Beispiel: public Student(String name, int nummer) { this(); this.name = name; this.nummer = nummer; } Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 91

Der statische Initialisierer Ein Konstruktor ermöglicht uns eine objektbezogene Initialisierung. Gibt es auch eine klassenbezogene Initialisierung? Ja, mit Hilfe des statischen Initialisierers. Syntax: static { Anweisungen } Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 92

Ein statischer Initialisierer einer Klasse wird ausgeführt, wenn die Klasse geladen wird. Eine Klasse wird vom Class Loader der virtuellen Maschinene geladen, wenn sie das erste mal benötigt wird. Eine Klasse kann mehrere statische Initialisierer haben. Für die Anweisungen gelten die Einschränkungen eines statischen Kontextes: Nur Zugriff auf statische Komponenten einer Klasse. Zugriff auf alle (auch private) Teile einer Klasse. Weitere Einschränkung: Statische Initialisierer haben nur Zugriff auf statische Komponenten, die im Programmcode vor ihnen definiert wurden. Beispiel zum statischen Initialisierer. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 93

3. Klassen Beispiele Nutzen der Kapselung Wenn wir Programmlogik in einem Objekt kapseln, dann können wir 1. diese Logik mehrmals zur gleichen Zeit einsetzen, Beispiel: gleichzeitig mehrere unabhängige Objekte 2. in unterschiedlichen Zusammenhängen nutzen und Beispiel: Programm zum Zählen von Zeilen, Wörtern und Zeichen 3. komplexere Objekte aus einfacheren Objekten zusammensetzen. Beispiel: Die Klassen TorZaehler und Spielstand Leichtere Wiederverwendbarkeit Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 94

3. Klassen Beispiele Weitere Beispiele: Klausuraufgabe Skyline Entwerfen Sie eine Klasse zur Ermittlung der Skyline, die von einer Menge von Gebäuden erzeugt wird. 5 5 0 5 10 15 0 5 10 15 Gebäude Skyline Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 95

3. Klassen Beispiele Die Skyline reicht in der Breite von 0 bis B. Jedes Gebäude wird beschreiben durch ein Tripel (l, h, r) mit 0 l < r B. Hierbei ist l der linke Rand, r der rechte Rand und h die Höhe des Gebäudes. Die oben angegebene Skyline wird beispielsweise durch B = 15 und die Gebäude (3, 3, 10), (6, 6, 12), (11, 4, 14) erzeugt. Die Klasse soll die folgenden Methoden aufweisen: Ermittlung der Breite B der Skyline. Einfügen eines Gebäudes (l, h, r) in die Skyline. Ermittlung der Höhe der Skyline an der Stelle i. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 96

3. Klassen Beispiele Klausuraufgabe TextSpeicher Definieren Sie eine Klasse für die Speicherung von Texten. Ein Objekt Ihrer Klasse soll bis zu 15 Texte speichern können. Jedem Text ist dabei eine Position im Speicher zugeordnet. Für die Verwaltung der Texte sollen die folgenden Methoden zur Verfügung stehen: Löschen eines Textes Der Text an Position i wird aus dem Speicher entfernt. Alle Texte mit einer Position größer als i rücken um eine Position nach vorne. Speichern eines Textes Der Text wird an der ersten freien Position gespeichert. Ist der Textspeicher voll, so wird der an der ersten Position gespeicherte Text gelöscht und der neue Text wird als letzter Text im Speicher abgelegt. Rückgabe des Textes an Position i Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 97