Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Ähnliche Präsentationen


Präsentation zum Thema: "Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,"—  Präsentation transkript:

1 Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften, Zugriffsrechte und Collections Prof. Dr. Max Mühlhäuser Dr. Guido Rößling

2 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 Inhaltsverzeichnis Klasseneigenschaften Zugriffsrechte Collections (Wrapper und Collection-Typen) 2

3 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 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. 3

4 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 Klasseneigenschaften Klasseneigenschaften werden mit dem Schlüsselwort static definiert Zugriff mit. –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(...) 4

5 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 Klasseneigenschaften 5 class Person { static int personCount = 0; Person(.. ) { personCount++; //... } //... Initialisierung erfolgt vor dem Ausführen einer Methode static Variable existiert einmal für alle Objekte Bei der Erzeugung einer neuen Person wird der Zähler aktualisiert

6 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 Klasseneigenschaften // class Person (fortgesetzt) //... static int personCount() { return personCount; } //... 6 Abfrage der Anzahl der existierenden Personen

7 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 Zugriff über den Klassennamen int count = Person.personCount(); System.out.println(count +" objects"); Andere typische Nutzung boolean largerThan(Circle b ) {.. } static boolean largerThan(Circle a, Circle b) {..} Klasseneigenschaften 7 Vergleicht zwei Circle-Objekte Empfänger wird mit einem anderen Objekt verglichen

8 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 Klasseneigenschaften Klassenmethoden können nicht auf Instanz-Merkmale zugreifen. 8 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.

9 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 Klasseneigenschaften Statische Intialisierung ::= static { } Ziel: Initialisierung von Klassenattributen Analog zu Konstruktoren für Objekte Sinnvoll, wenn eine einfache Initialisierung nicht ausreicht 9

10 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 Klasseneigenschaften Ausführung beim Laden der Klassendefinition 10 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); } //... } 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); } //... } Statische Intialisierung

11 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 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) 11

12 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 Inhaltsverzeichnis Klasseneigenschaften Zugriffsrechte Collection (Wrapper und Collection-Typen) 12

13 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 Zugriffsrechte Elemente einer Klasse werden mit ihrer Sichtbarkeit deklariert – ::= 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 ( private ) –Package Elemente (kein Modifier) –Interne Elemente ( protected ) –Elemente mit freiem Zugriff ( public ) 13

14 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 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 14

15 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 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. 15 public Jede Klasse darf auf das Element zugreifen

16 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 Zugriffsrechte 16 Gleiche Klasse public protected package private in anderen Packages Erben in anderen Packages gleiches Package Erben im gleichen Package Überblick Haben die gleichen Zugriffsrechte

17 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 Zugriffsrechte 17 package A; public class AA { public int one; protected int two; void three() { … } private void four() { … } } package A; public class AA { public int one; protected int two; void three() { … } private void four() { … } } package B; class BA extends AA { // one, two } package B; class BA extends AA { // one, two } package A; class AB { // one, two, three } package A; class AB { // one, two, three } package B; class BB { // one } package B; class BB { // one } package A; class AC extends AA { // one, two, three } package A; class AC extends AA { // one, two, three }

18 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 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 18

19 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 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 19

20 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 Zugriffsrechte Sichtbarkeit in UML public + protected # private - Kein Modifier Sichtbarkeit ist undefiniert 20 Class -privateAttribute : AnotherClass #protectedAttribute : int +publicMethod(x: int) : boolean

21 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 Inhaltsverzeichnis Klasseneigenschaften Zugriffsrechte Collection (Wrapper und Collection-Typen) 21

22 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 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. 22

23 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 Wrapper-Klassen 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 23 Werte und Referenzen

24 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 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 Value() 24

25 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 Autoboxing - Autounboxing Seit Java 1.5+ gibt es eine implizite Umwandlung von int nach Integer (andere Typen analog) // AUTOBOXING Integer integer = 5; // AUTO-UNBOXING int i = integer; 25 Integer integer = new Integer(5); int i = integer.intValue();

26 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 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 –Direkter Zugriff auf Objekte über Index Set (hat die Implementierung HashSet ) –Objekt kann nur einmal enthalten sein SortedSet (hat die Implementierung TreeSet ) –als Set, aber geordnet, Nutzer kann eine spezifische Vergleichsstrategie festlegen 26 Collection SortedSet Set List

27 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 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.) 27

28 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 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 28

29 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 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) 29

30 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 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 30

31 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 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! 31

32 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 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 32

33 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 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! 33

34 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 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 34 Map SortedMap

35 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 Klasse: java.util.HashMap 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. 35

36 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 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 36

37 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 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 37

38 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 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 38

39 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 Iteratoren Ein Einsatz von Iteratoren sieht wie folgt aus: Dazu gibt es eine spezielle Variante der for-Schleife: 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 39 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 for (Object o : intList) // Iterator holen // weiter, solange Element da s += (Integer)o; // Element zur Summe addieren

40 Dr. G. Rößling Prof. Dr. M. Mühlhäuser RBG / Telekooperation © Grundlagen der Informatik I: T15 Collection Framework Auf Grund des Umfangs dieses Themas und der kurzen Zeit haben wir die Collections kaum abgedeckt Mehr über Collections unter Mehrere spezielle Klassen sind verfügbar Bevor Sie selbst einen Typ implementieren, prüfen Sie 40


Herunterladen ppt "Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,"

Ähnliche Präsentationen


Google-Anzeigen