Grundlagen der Informatik I: T15 - Technische Universität Darmstadt

Werbung
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
Herunterladen