Technische Universität Darmstadt
Telecooperation/RBG
Grundlagen der Informatik 1
Thema 15: Klasseneigenschaften, Zugriffsrechte und
Collections
Prof. Dr. Max Mühlhäuser
Dr. Guido Rößling
Copyrighted material; for TUD student use only
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Inhaltsverzeichnis
• Klasseneigenschaften
• Zugriffsrechte
• Collections (Wrapper und Collection-Typen)
Grundlagen der Informatik I: T15
2
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Klasseneigenschaften
• Manche Eigenschaften sollten von allen Instanzen
einer Klasse geteilt werden:
–
Zähler, wie viele Instanzen einer Klasse
erzeugt wurden.
–
Einzigartige Identifikationen einer Instanz
(z.B. Kundennummer)
–
Konstanten, notwendig für alle Objekte
• Klassenvariablen und Klassenmethoden sind
Merkmale, die mit der Klasse selbst (und nicht
den Objekten) verbunden sind.
Grundlagen der Informatik I: T15
3
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Klasseneigenschaften
• Klasseneigenschaften werden mit dem Schlüsselwort
static definiert
• Zugriff mit <Class>.<Identifier>
– In der Klasse kann man den Klassennamen weg lassen
• Es kann von überall darauf zugegriffen werden, wo die
Klasse sichtbar ist.
• Bekannte Beispiele
– Klassenattribut: System.out
– Klassenmethode:
public static void main(...)
Grundlagen der Informatik I: T15
4
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Klasseneigenschaften
class Person {
static int personCount = 0;
static Variable
existiert einmal für
alle Objekte
Initialisierung erfolgt vor dem
Ausführen einer Methode
Person( .. ) {
personCount++;
// ...
}
// ...
Bei der Erzeugung einer neuen
Person wird der Zähler
aktualisiert
Grundlagen der Informatik I: T15
5
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Klasseneigenschaften
// class Person (fortgesetzt)
// ...
static int personCount() {
return personCount;
}
Abfrage der Anzahl der
existierenden Personen
// ...
Grundlagen der Informatik I: T15
6
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Klasseneigenschaften
• Zugriff über den Klassennamen
int count = Person.personCount();
System.out.println(count +" objects");
• Andere typische Nutzung
Empfänger wird mit einem
anderen Objekt verglichen
boolean largerThan(Circle b ) {.. }
static boolean largerThan(Circle a,
Circle b) {..}
Vergleicht zwei Circle-Objekte
Grundlagen der Informatik I: T15
7
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Klasseneigenschaften
Klassenmethoden können nicht
auf Instanz-Merkmale zugreifen.
class Mistake {
int i;
public static void main(String[] args) {
something(i);
// ...
}
}
Nur möglich, wenn ein Objekt
erzeugt wurde oder „i“ eine
Klassenvariable ist.
Grundlagen der Informatik I: T15
8
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Klasseneigenschaften
Statische Intialisierung
<Static-Initializer> ::= static { <Statements> }
• Ziel: Initialisierung von Klassenattributen
• Analog zu Konstruktoren für Objekte
• Sinnvoll, wenn eine einfache Initialisierung nicht
ausreicht
Grundlagen der Informatik I: T15
9
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Klasseneigenschaften
Statische Intialisierung
public class InitializationExample {
private static double[] vector
= new double[6];
// static initialization block
static {
for (int i = 0; i < vector.length; i++) {
vector[i] = 1.0/(i + 1);
}
Ausführung beim Laden
}
der Klassendefinition
// ...
}
Grundlagen der Informatik I: T15
10
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Konstanten
• Können nur einmal einen Wert zugewiesen bekommen
– Danach nur Lesezugriff => unveränderlich
• Konstanten werden wie Variablen deklariert, aber es
wird das Schlüsselwort final verwendet
– private final int MAXIMUM_NUMBER_CARDS = 5;
– Eine Konstante muss immer initialisiert werden
– Konvention: mit Großbuchstaben benennen (mehrere
Wörter mit Unterstrichen trennen)
Grundlagen der Informatik I: T15
11
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Inhaltsverzeichnis
• Klasseneigenschaften
• Zugriffsrechte
• Collection (Wrapper und Collection-Typen)
Grundlagen der Informatik I: T15
12
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Zugriffsrechte
• Elemente einer Klasse werden mit ihrer Sichtbarkeit
deklariert
– <Modifier> ::= private | ε | protected | public
– Mit Hilfe des Sichtbarkeits-Modifier wird festgelegt,
welche Kunden welche Attribute / Methoden /
Klassen nutzen dürfen.
• Vier Ebenen der Sichtbarkeit
– Versteckte Elemente
– Package Elemente
– Interne Elemente
– Elemente mit freiem Zugriff
Grundlagen der Informatik I: T15
(private)
(kein Modifier)
(protected)
(public)
13
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Zugriffsrechte
private
• Zugriff nur aus der Klasse selbst erlaubt
package (implizit; kein Modifier angegeben)
• Das Klassenelement ist sichtbar für alle Klassen im gleichen Package
• Kein Zugriff aus anderen Packages zulässig
–
Nicht einmal von Erben aus anderen Packages!
Package als Sammlung von Klassen, die einander „vertrauen“,
haben einen hohen Zusammenhalt
Grundlagen der Informatik I: T15
14
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Zugriffsrechte
protected
• Alle Klassen des gleichen Packages dürfen auf das Element
zugreifen, allerdings auch alle Erben dieser Klassen
(auch aus einem anderen Package)
Erben als „vertrauenswürdige“ Kunden haben das Recht,
die Implementierung der Superklasse zu sehen.
public
• Jede Klasse darf auf das Element zugreifen
Grundlagen der Informatik I: T15
15
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Zugriffsrechte
Überblick
private
package
protected
public
Gleiche
Klasse
Erben im
gleichen
Package
gleiches
Package
Erben in
anderen
Packages
in anderen
Packages
Haben die gleichen Zugriffsrechte
Grundlagen der Informatik I: T15
16
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Zugriffsrechte
package A;
public class AA {
public int
protected int
void
private void
}
one;
two;
three() { … }
four() { … }
package A;
class AB {
// one, two, three
}
package A;
class AC extends AA {
// one, two, three
}
package B;
class BA extends AA {
// one, two
}
package B;
class BB {
// one
}
Grundlagen der Informatik I: T15
17
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Zugriffsrechte
Klassen-Modifier
• Entweder public
– Weltweite Einzigartigkeit
– Nur eine Klasse pro Datei kann public sein
– Datei muss den Namen „Klassenname.java“ haben
• oder implizit
– Nur sichtbar im gleichen Package
Grundlagen der Informatik I: T15
18
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Zugriffsrechte
Modifier und Redefinition
• Wenn eine Methode erneut definiert wird, kann die
Sichtbarkeit nur erweitert werden.
• Grund: Substituierbarkeit
– Es muss möglich sein, ein Objekt eines spezifischeren Typs
mit einem generelleren Objekt zu ersetzen
– Die Subklasse muss wenigstens so viele Merkmale anbieten
wie die Superklasse.
Sie darf keine erneut definierten Merkmale vor Klienten
verstecken
Grundlagen der Informatik I: T15
19
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Zugriffsrechte
Sichtbarkeit in UML
• public
• protected
• private
+
#
-
• Kein Modifier
Sichtbarkeit ist undefiniert
Class
-privateAttribute : AnotherClass
#protectedAttribute : int
+publicMethod(x: int) : boolean
Grundlagen der Informatik I: T15
20
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Inhaltsverzeichnis
• Klasseneigenschaften
• Zugriffsrechte
• Collection (Wrapper und Collection-Typen)
Grundlagen der Informatik I: T15
21
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Collection Typen
• Eine häufig benötigte Form von Datenstrukturen ist
eine Collection (Sammlung), die unterschiedliche
Datenelemente speichert.
– entweder genau der gleiche Typ
– oder der gleiche Typ (mit Subtypen)
– oder gemischte Typen
• Abhängig vom geplanten Gebrauch kann eine
Collection…
–
–
–
–
–
Schnellen Zugriff auf die einzelnen Elemente unterstützen.
Die Sortierung der Elemente unterstützen.
Die Möglichkeit zum Zugriff auf bestimmte Elemente geben.
Bei Bedarf wachsen.
usw.
Grundlagen der Informatik I: T15
22
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Wrapper-Klassen
Werte und Referenzen
• Primitive Datentypen sind keine Referenztypen
Sie werden nicht von Object abgeleitet und besitzen keine
Methoden.
Sie können Variablen vom Typ Object nicht zugewiesen
werden.
• Manchmal ist es sinnvoll (z.B. für Collections),
primitive Datentypen so zu behandeln, als wären sie
Objekte Wrapper-Klassen
Grundlagen der Informatik I: T15
23
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Wrapper-Klassen
• Der Name der Klasse ist vom primitiven Datentyp
abgeleitet, Großbuchstabe am Anfang
– java.lang.Byte,
java.lang.Short,
java.lang.Integer, java.lang.Long,
java.lang.Float,
java.lang.Double,
java.lang.Character
• Wrapper-Objekte sind unveränderlich
– Wertzuweisung über den Konstruktor
– Wertabfrage über die Methode <primitiveType>Value()
Grundlagen der Informatik I: T15
24
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Autoboxing - Autounboxing
• Seit Java 1.5+ gibt es eine implizite Umwandlung von
int nach Integer (andere Typen analog)
// AUTOBOXING
Integer integer = 5;
Integer integer = new Integer(5);
// AUTO-UNBOXING
int i = integer;
int i = integer.intValue();
Grundlagen der Informatik I: T15
25
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Collections
Java bietet eine Menge unterschiedlicher Collections (Sammlungen) an
(implementieren das java.util.Collection Interface, oder eines der
folgenden Subinterfaces (nicht vollständig!)):
• Collection
•
•
– Ein allgemeines Interface für das Sammeln von Objekten
– Keine Restriktionen / Garantien bezüglich Duplikate / Ordnung /
Sortierung, usw.
List (hat die Implementierungen ArrayList, LinkedList,Vector,…)
– Objekte sind sortiert
– Kann Duplikate enthalten
Collection
– Direkter Zugriff auf Objekte über Index
Set (hat die Implementierung HashSet)
– Objekt kann nur einmal enthalten sein
List
Set
• SortedSet (hat die Implementierung TreeSet)
– Ein Set, aber geordnet. Nutzer kann
eine spezifische Vergleichsstrategie
festlegen
Grundlagen der Informatik I: T15
SortedSet
26
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Collections: Listen
• Im folgenden wird von Collections vom Typ „E“ (für
Element) ausgegangen; dieser Typ ist durch „passende“
Typen ersetzbar.
– Details folgen im Foliensatz zu Generischen Datentypen
• Das Interface java.util.List bietet folgende Methoden:
– boolean add(E e)
• Anhängen des Elements e an die Liste
– void add(int pos, E e)
• Einfügen des Elements e an Position pos; verschiebt alle Elemente
ab Position pos um eine Position nach hinten
– boolean addAll(Collection c)
• Anhängen aller Elemente der Collection c an die Liste
– boolean addAll(int pos, Collection c)
• Einfügen aller Elemente der Collection c an Position pos (s.o.)
Grundlagen der Informatik I: T15
27
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Collections: Listen
• void clear()
– Löscht alle Elemente der Liste
• boolean contains(Object o)
– Liefert true, wenn sich Objekt o in der Liste befindet
• boolean containsAll(Collection c)
– Liefert true, wenn alle Objekte der Collection c in der Liste sind
• E get(int pos)
– Liefert das Element an Position pos der Liste
• int indexOf(Object o)
– Liefert die erste Position, an der sich o in der Liste befindet,
sonst -1. Gegenstück: int lastIndexOf(Object o)
• boolean isEmpty()
– Liefert true wenn die Liste leer ist
Grundlagen der Informatik I: T15
28
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Collections: Listen
• E remove(int pos)
– Entfernt das Objekt an Position pos und liefert es zurück
• boolean remove(Object O)
– Versucht Objekt o aus der Liste zu entfernen; true bei Erfolg
• int size()
– Liefert die Größe der Liste
• Object[] toArray()
– Liefert ein Array, das alle Elemente der Liste umfasst
• Konstruktoren in den Erbenklassen:
– Parameterlos
– Mit Collection als Parameter – kopiert alle Werte in die Liste
– Spezialfälle (siehe bei Untertyp)
Grundlagen der Informatik I: T15
29
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Collections: Implementierungen von List
• java.util.LinkedList
– Fügt folgende Methoden hinzu (Auswahl):
•
•
•
•
void addFirst(E)
void addLast(E)
E getFirst()
E getLast()
• java.util.ArrayList
– Elemente werden in einem Array gespeichert
– Neue Methoden (Auswahl):
• void ensureCapacity(int minCapacity) – falls die Liste
weniger Elemente als minCapacity fassen kann, wird das Array
vergrößert
• void trimToSize() – verkleinert das Array auf die Listengröße
– Neuer Konstruktor: ArrayList(int initialCapacity) für Größe
Grundlagen der Informatik I: T15
30
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Collections: Implementierung von List
• java.util.Vector:
– Prinzipiell identisch zu java.util.ArrayList ( arraybasiert)
– Zugriffe erfolgen synchronisiert
• Vermeidet Probleme, wenn zwei Objekte gleichzeitig schreibend
oder schreibend/lesend zugreifen wollen
– „Standardklasse“ für viele Anwendungen
– Konstruktoren:
• Vector() – legt einen Vector mit vordefinierter Größe an
• Vector(int c) – legt Vector mit Größe c an
• Vector(int c, int inc) – legt Vector mit Größe c an; wenn diese nicht
langt, werden immer „inc“ Elemente hinzugenommen
• Der letzte Konstruktor ist zu bevorzugen
– Man sollte vorher bestimmen, mit wievielen Daten man rechnet!
Grundlagen der Informatik I: T15
31
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Collections: Set
• Ein Set repräsentiert eine mathematische Menge
– Daher ist ein gegebenes Objekt nur maximal einmal vorhanden
• Umfasst die meisten der schon bekannten Methoden
–
–
–
–
–
–
–
–
–
–
boolean add(E e)
boolean addAll(Collection c)
void clear()
boolean contains(Object O)
boolean containsAll(Collection c)
boolean isEmpty()
boolean remove(Object O)
boolean removeAll(Collection c)
int size()
Object[] toArray()
• Einfügen scheitert, wenn das Objekt schon vorhanden ist
Grundlagen der Informatik I: T15
32
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Collections: Set
• Konkrete Instanzen von Set:
– java.util.HashSet: verwaltet die Daten in einer Hashtabelle (sehr
effizienter Zugriff)
– java.util.TreeSet: verwaltet die Daten in einem Baum mit
Zugriffszeiten in O(log n).
• Es gibt weitere spezialisierte Implementierungen
– Bitte schauen Sie selbst in die JDK API Documentation!
Grundlagen der Informatik I: T15
33
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Interface: Map
• Manchmal sollen Objekte nicht über einen
numerischen Index, sondern über einen Schlüssel
(einzigartiger, aber sonst zufälliger Wert) auffindbar
sein, z.B. eine Telefonnummer mit „Nachname +
Vorname“
• Unterstützt durch das Interface java.util.Map
• … und der abgeleiteten Schnittstelle SortedMap
Map
SortedMap
Grundlagen der Informatik I: T15
34
Klasse: java.util.HashMap
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
• Implementiert das Interface java.util.Map.
• Erlaubt Zugriff auf Elemente durch einen
berechneten Schlüssel, z.B. „Nachname + Vorname“
• Schlüssel wird in numerischen Index (Hashwert)
konvertiert und für effizienten Zugriff genutzt
– Sehr effizienter Zugriff
– Hashing-Theorie im nächsten Semester
• Nützliche Konstruktoren
– HashMap()
Standard-Konstruktor
– HashMap(int size)
legt eine neue HashMap der Größe size an
– HashMap(Map t)
legt eine HashMap an, die alle Elemente in der Map enthält,
die mit „t“ referenziert werden.
Grundlagen der Informatik I: T15
35
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Klasse: java.util.HashMap
• Nützliche Methoden…
– Object put(Object key, Object value)
speichert "value" zum Auffinden mit "key"
– Object get(Object key)
findet das Objekt gespeichert unter "key"
– boolean containsKey(Object key)
beantwortet, ob ein Objekt unter "key" liegt
– boolean containsValue(Object value)
beantwortet, ob "value" in der HashMap ist
– Object remove(Object key)
löscht "key" und die assoziierten Objekte
Grundlagen der Informatik I: T15
36
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Iteratoren
• Java nutzt einen Iterator, um über Elemente in einer
Collection zu laufen („zu iterieren“)
• Normalerweise erhält man den Iterator durch den Aufruf
von iterator() auf der Collection
– Das gilt für alle Subklassen des Collection Interface
– Für eine Hashtable nutzt man keys() und darauf iterator()
• iterator() liefert eine Instanz von java.util.Iterator
Grundlagen der Informatik I: T15
37
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Iteratoren
Ein Iterator bietet nur drei Operationen:
• boolean hasNext() – gibt es noch weitere Elemente?
• Object next() – liefert das nächste Element, falls eines
existiert
– Sonst wird eine NoSuchElementException geworfen (siehe T18)
– Prüfen Sie vorher die Existenz mit hasNext()!
• void remove() – entfernt das zuletzt gelieferte Element
– Wird nicht von allen Typen unterstützt
– In dem Fall wird eine UnsupportedOperationException ausgelöst
Grundlagen der Informatik I: T15
38
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Iteratoren
• Ein Einsatz von Iteratoren sieht wie folgt aus:
List intList = Arrays.asList(1, 2, 3); // Liste anlegen
int s = 0;
for (Iterator it = intList.iterator(); // Iterator holen
it.hasNext(); ) // weiter, solange Elemente da
s += (Integer)it.next(); // Element zur Summe addieren
• Dazu gibt es eine spezielle Variante der for-Schleife:
for (Object o : intList) // Iterator holen
// weiter, solange Element da
s += (Integer)o; // Element zur Summe addieren
• Diese Schleife nutzt den Iterator für next()
– Der Wert wird dann in jeder Iteration an o zugewiesen
• Nutzbar für iterierbare Elemente – Collections, Arrays
Grundlagen der Informatik I: T15
39
Dr. G. Rößling
Prof. Dr. M. Mühlhäuser
RBG / Telekooperation
©
Collection Framework
• Auf Grund des Umfangs dieses Themas und der kurzen
Zeit haben wir die Collections kaum abgedeckt
• Mehr über Collections unter
http://java.sun.com/docs/books/tutorial/collections/index.html
• Mehrere spezielle Klassen sind verfügbar
• Bevor Sie selbst einen Typ implementieren, prüfen Sie
http://java.sun.com/javase/6/docs/technotes/guides/collections/index.html
Grundlagen der Informatik I: T15
40