Grundlagen der Informatik 1

Slides:



Advertisements
Ähnliche Präsentationen
C Sharp (C#) Martin Saternus Senior Student Partner
Advertisements

der Universität Oldenburg
der Universität Oldenburg
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Kritische Betrachtung
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Kapselung , toString , equals , Java API
der Universität Oldenburg
Objektorientierte Programmierung
Abstrakte Klassen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Listen Richard Göbel.
Indirekte Adressierung
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Konstruktoren.
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
Interface bzw. Schnittstelle anschaulich: Hüllenklasse
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Einführung in die OOP in Java
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Programmieren mit JAVA
Programmieren mit JAVA
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
Zusammenfassung Vorwoche
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
Abstrakte Klassen, Interface
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
Das Collection-Framework von JAVA
Einführung in die Programmierung Datensammlung
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik I Thema 14: Schrittweise.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Grundlagen der Programmierung
Copyright 2011 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2011/12 Kapitel 11, Folie 1 2 Dr. Christian Herzog Technische.
Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik I Thema 16: Ausnahmebehandlung.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
EPROG Tutorium #6 Philipp Effenberger
EPROG Tutorium #5 Philipp Effenberger
EPROG Tutorium #3 Philipp Effenberger
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
Neuerungen in Java 5/6/7. Stefan Bühler für InfoPoint Überblick Java 5 neue Sprachfeatures Erweiterungen Klassenbibliothek Java 6 Erweiterungen.
Programmiervorkurs WS 2014 Referenzdatentypen
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
Java-Kurs Übung Besprechung der Hausaufgabe
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 14. Vorlesung WS 2001/2002.
C++ FÜR cOMPUTERSPIELENTWICKLER
Import java.util.*; Hilfsklassen, die man eigentlich immer braucht.
Implementieren von Klassen
 Präsentation transkript:

Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften, Zugriffsrechte und Collections Prof. Dr. Max Mühlhäuser Dr. Guido Rößling

Inhaltsverzeichnis Klasseneigenschaften Zugriffsrechte Collections (Wrapper und Collection-Typen)

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.

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(...)

Klasseneigenschaften class Person { static int personCount = 0; Person( .. ) { personCount++; // ... } static Variable existiert einmal für alle Objekte Initialisierung erfolgt vor dem Ausführen einer Methode Bei der Erzeugung einer neuen Person wird der Zähler aktualisiert

Klasseneigenschaften // class Person (fortgesetzt) // ... static int personCount() { return personCount; } Abfrage der Anzahl der existierenden Personen

Klasseneigenschaften 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) {..} Empfänger wird mit einem anderen Objekt verglichen Vergleicht zwei Circle-Objekte

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.

Klasseneigenschaften Statische Intialisierung <Static-Initializer> ::= static { <Statements> } Ziel: Initialisierung von Klassenattributen Analog zu Konstruktoren für Objekte Sinnvoll, wenn eine einfache Initialisierung nicht ausreicht

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

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)

Inhaltsverzeichnis Klasseneigenschaften Zugriffsrechte Collection (Wrapper und Collection-Typen)

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 (private) Package Elemente (kein Modifier) Interne Elemente (protected) Elemente mit freiem Zugriff (public)

Zugriffsrechte private package (implizit; kein Modifier angegeben) 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

Zugriffsrechte protected public 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

Zugriffsrechte Überblick Haben die gleichen Zugriffsrechte private package protected public Erben in anderen Packages Gleiche Klasse Erben im gleichen Package gleiches Package in anderen Packages Haben die gleichen Zugriffsrechte

Zugriffsrechte package A; package A; class AC extends AA { // one, two, three } 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 A; class AB { // one, two, three } package B; class BB { // one }

Zugriffsrechte Klassen-Modifier Entweder public oder implizit Weltweite Einzigartigkeit Nur eine Klasse pro Datei kann public sein Datei muss den Namen „Klassenname.java“ haben oder implizit Nur sichtbar im gleichen Package

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

Zugriffsrechte Sichtbarkeit in UML Class public  + protected  # private  - Kein Modifier  Sichtbarkeit ist undefiniert Class -privateAttribute : AnotherClass #protectedAttribute : int +publicMethod(x: int) : boolean

Inhaltsverzeichnis Klasseneigenschaften Zugriffsrechte Collection (Wrapper und Collection-Typen)

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.

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

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()

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; Integer integer = new Integer(5); int i = integer.intValue();

Collections Collection 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 Collection List Set SortedSet

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.)

Collections: Listen void clear() boolean contains(Object o) 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

Collections: Listen E remove(int pos) boolean remove(Object O) 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)

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

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!

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

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!

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

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.

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

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

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

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

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