39
Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich Boles

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Embed Size (px)

Citation preview

Page 1: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1

Programmierkurs Java

Vorlesung

am FB Informatik

der Universität Oldenburg

Vorlesung 13

Dietrich Boles

Page 2: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 2

Gliederung von Vorlesung 13

• Pakete

– Motivation

– Definition von Paketen

– Nutzung von Paketen

– Anmerkungen

– CLASSPATH

• JDK-Klassenbibliothek

– Pakete

– Beispiele

• Datenkapselung

– Definitionen

– Zugriffsrechte

– Übungen

Page 3: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 3

Pakete / Motivation

• Im allgemeinen bestehen Programme aus vielen, vielen Klassen

• bestimmte Programmteile (Klassen) werden häufig gebraucht ( Speicher)

– im allgemeinen sogar in verschiedenen Anwendungen

– im allgemeinen sogar von unterschiedlichen Programmierern

• gesucht:

– Hilfsmittel, das es einem Programmierer erlaubt, seine Klassen übersichtlich und strukturiert abspeichern und verwalten zu können

– Hilfsmittel, das es einem Programmierer erlaubt, von ihm erstellte Klassen für mehrere Anwendungen nutzen zu können bzw. auch anderen Programmierern zur Verfügung stellen zu können

• Java: Pakete (Packages)

• Klassenbibliothek: Sammlung von nützlichen, häufig gebrauchten Klassen, die (anderen) Programmierern zur Verfügung gestellt werden

• Java-Packages: Hilfsmittel zur Strukturierung von Klassenbibliotheken

Page 4: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 4

Pakete / Definition von Paketen

• Schlüsselwort: package• package-Anweisung: package <paketname>;

• Beispiel:

– Datei: GoBangBrett.java

– Datei: GoBangFigur.java

– Datei: GoBangSpieler.java

– Datei: GoBangRegeln.java

– Datei: GoBangSpielzug.java

Paket: gobang

• in jeder Datei muss als erste Anweisung (!!!!) die folgende package-Anweisung stehen: package gobang;

Page 5: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 5

Pakete / Definition von Paketen

Datei: GoBangBrett.java

package gobang;

public class GoBangBrett {

...

}

Datei: GoBangFigur.java

package gobang;

public class GoBangFigur {

...

}

Datei: GoBangSpieler.java

package gobang;

public class GoBangSpieler{

...

}

Datei: GoBangRegeln.java

package gobang;

public class GoBangRegeln {

...

}

Page 6: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 6

Pakete / Definition von Paketen

• Anmerkungen:– Der Paketname ist ein Java-Bezeichner– Die Dateien/Klassen eines Paketes müssen sich alle in demselben

Verzeichnis befinden!– In einem Verzeichnis kann nur ein einziges Paket definiert werden!– Der Name eines Verzeichnisses, in dem ein Paket definiert wird, muss

gleich dem Namen des Paketes sein!• Strukturierung von Paketen:

– Pakete lassen sich strukturieren (Punkt-Notation verwenden!)– Beispiel:

Strukturierung: Verzeichnisstruktur: Pakete

- Spiele spiele package spiele;

- Reversi spiele/reversi package spiele.reversi;

- GoBang spiele/gobang package spiele.gobang;

- Schach spiele/schach package spiele.schach;

Page 7: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 7

Pakete / Nutzung von Paketen

• Schlüsselwort: import• import-Anweisung: import <paket-qualifier>;

• es bestehen vier verschiedene Möglichkeiten, die Dateien/Klassen zu importieren bzw. auf die Elemente der Dateien/Klassen zuzugreifen:

– Import aller Dateien/Klassen des Paketes

– Import des Paketes

– Import einzelner Dateien/Klassen des Paketes

– kein expliziter Import

• Beispiel:

– Paket: java.util

• Datei/Klasse: Date

• Datei/Klasse: HashTable

• Datei/Klasse: Vector

Page 8: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 8

Pakete / Nutzung von Paketen

• Import aller Dateien/Klassen des Paketes:

import java.util.*;

...

Date date = new Date();

Vector vector = new Vector();

• Import des Paketes:

import java.util;

...

util.Date date = new util.Date();

util.Vector vector = new util.Vector();

Page 9: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 9

Pakete / Nutzung von Paketen

• Import einzelner Dateien/Klassen des Paketes:

import java.util.Date;

...

Date date = new Date();

Vector vector = new Vector(); // Fehler!

• kein expliziter Import (Zugriff über vollständigen Namen)

// kein import

...

java.util.Date date = new java.util.Date();

java.util.Vector vector = new java.util.Vector();

Page 10: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 10

Pakete / Nutzung von Paketen

• Namenskonflikte (Beispiel):– package util; class Vector– package misc; class Vector

• eigenes Programm:

import util.*;

import misc.*;

...

Vector v = new Vector(); //Fehler: welcher Vector?

// korrekt (Zugriff über vollständigen Namen):

util.Vector v1 = new util.Vector();

misc.Vector v2 = new misc.Vector();

Page 11: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 11

Pakete / Anmerkungen

• JDK-Paket: java.lang

– Datei/Klasse: System

– Datei/Klasse: Object

– Datei/Klasse: String

– Datei/Klasse: StringBuffer

– ...

import-Anweisung ist nicht notwendig (implizites import)

• Anonyme Pakete:

– Fehlt in Dateien eines Verzeichnisses die package-Anweisung, dann bilden die Dateien ein sogenanntes „anonymes Paket“

– der Zugriff auf die Elemente eines anonymen Paketes ist ausschließlich auf Dateien im selben Verzeichnis (also Dateien/Klassen des anonymen Paketes selbst) beschränkt!

Page 12: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 12

Pakete / CLASSPATH

• CLASSPATH: Variable der Betriebssystem-Shell

• setzen:– csh: setenv CLASSPATH “.:/user/fb10/dibo/java“– bash: export CLASSPATH=.:/user/fb10/dibo/java

• Abfrage: echo $CLASSPATH

• wichtig:– in den CLASSPATH müssen die Verzeichnisse (bzw. zip- oder jar-

Dateien) aufgenommen werden, in denen der Java-Compiler und -Interpreter nach Paketen suchen soll

– Trennung mehrerer Verzeichnisse durch einen Doppelpunkt (:) unter UNIX bzw. durch Semikolon (;) unter Windows

– der Punkt (.) ist wichtig für anonyme Pakete– das Verzeichnis, in welchem sich die JDK-Klassenbibliothek befindet,

muss nicht im CLASSPATH vorhanden sein

Page 13: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 13

Pakete / CLASSPATH

• Beispiel:– im Verzeichnis /user/fb10/dibo/java gibt es ein Paket namens dibo (Unterverzeichnis dibo), welches die Datei/Klasse Terminal enthält

– und ein Paket names dibo.gobang (Unterverzeichnis dibo/gobang), welches u.a. die Dateien/Klassen GoBangSpieler und GoBangSpielzug enthält

– ihr wollt die Pakete zur Implementierung einer Klasse MyGo nutzen:

• export CLASSPATH=.:/user/fb10/dibo/java• Datei: MyGo.java (im Verzeichnis /user/kai/java)

import dibo.*; Zugriff auf Klasse Terminalimport dibo.gobang.*; Zugriff auf GoBangSpieler, ...

public class MyGo { ... }• Compilieren: javac MyGo.java• Ausführen: java MyGo

Page 14: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 14

Pakete / CLASSPATH

• Leicht modifiziertes Beispiel:

– dieselben Voraussetzungen, nur ihr wollt ein eigenes Paket definieren:

• Datei: MyGo.java (im Verzeichnis /user/kai/java/mygobang)

package mygobang;

import dibo.*; Zugriff auf Klasse Terminalimport dibo.gobang.*; Zugriff auf

GoBangSpieler, ...

public class MyGo { main: ... }

• export CLASSPATH=.:/user/fb10/dibo/java:/user/kai/java

• Compilieren: javac MyGo.java• Ausführen: java mygobang.MyGo (von wo aus, ist egal!)

Achtung: alle Verzeichnisse und class-Dateien müssen lesbar sein !

Page 15: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 15

JDK-Klassenbibliothek

• Wird von Version zu Version erweitert (hier Version 1.2)

• die wichtigsten Pakete:

– java.applet: Java-Applets (Applet, ...)

– java.awt: graphische Oberflächen (Fenster, GUI-Komponenten,

Graphik, Layout-Manager, Container, ...)

– java.awt.datatransfer: Datentransfers zwischen Applikationen (Clipboards, ...)

– java.awt.event: Event-Handling (Maus-Events, Tastatur-Events, ...)

– java.awt.image: Bildverarbeitung (Farbe, Filter, ...)

– java.beans: Java-Beans-API (Properties, Introspektion, ...)

– java.io: Ein-/Ausgabe (Streams, Dateien, ...)

– java.lang: Basis-Klassen (System, Object, Runtime, String, ...)

– java.lang.reflect: Java Reflection API (Introspektion, ...)

Page 16: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 16

JDK-Klassenbibliothek

– java.math: Mathematik (Integer-, Floating-Point-Arithmetik, ...)

– java.net: Netzwerke (Sockets, URL, HTTP, ...)

– java.rmi: Client-Server-Programmierung (RMI)

– java.security: Sicherheit

– java.sql: JDBC-Datenbankzugriff

– java.text: Internationale Programme (Texte, Datum, ...)

– java.util: Nützliche Klassen (Speicher (Vector, HashTable, BitSet,

Stack, ...), Datum, Random, Scanner, ...)

– javax.swing: Swing-Klassen (fortgeschrittene GUI-Programmierung)

– org.omg.CORBA: Client-Server-Programmierung (CORBA)

Page 17: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 17

JDK-Klassenbibliothek / java.util.Date

public class Date extends Object

implements Serializable, Cloneable {

public Date(); // aktuelle Zeit

public Date(long date);

public boolean after(Date when); // spaeter?

public boolean equals(Object obj);

public void toString();

public long getTime();

public void setTime(long time);

...

}

Page 18: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 18

JDK-Klassenbibliothek / java.util.Calendar

public class Calendar extends Object

implements Serializable, Cloneable {

public static final int JANUAR;

public static final int YEAR;

public static final int MONTH;

...

public static Calendar getInstance();

public static Calendar getInstance(TimeZone zone);

public void setTime(Date date);

public Date getTime();

public void set(int year, int month, int date);

public int get(int field);

...

}

Page 19: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 19

JDK-Klassenbibliothek / Date + Calendar

import java.util.Date;

import java.util.Calendar;

public class Datum {

public static void main(String args) {

Calendar cal = Calendar.getInstance();

cal.setTime(new Date());

System.out.println(“Jahr: “ + cal.get(Calendar.YEAR));

System.out.println(“Monat: “ + cal.get(Calendar.MONTH));

System.out.println(“Tag: “ +

cal.get(Calendar.DAY_OF_MONTH));

cal.set(2000, Calendar.JANUAR, 1);

if ((new Date()).after(cal.getTime()))

System.out.println(“im 20. Jahrhundert“);

} }

Page 20: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 20

JDK-Klassenbibliothek / java.util.Random

public class Random extends Object

implements Serializable {

public Random(long seed); // Pseudo-Zufall

public Random(); // seed == aktuelle Zeit

public void setSeed(long seed);

public float nextFloat(); // [0..1]

public int nextInt(); // [minint.. maxint]

public double nextGaussian();

....

}

Page 21: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 21

JDK-Klassenbibliothek / java.util.Random

import java.util.Random;

public class Wuerfel {

Random zufall;

public Wuerfel() { this.zufall = new Random(); }

public int wuerfeln() {

int wert = this.zufall.nextInt();

if (wert < 0) wert = -wert;

return (wert%6) + 1;

}

}

Page 22: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 22

JDK-Klassenbibliothek / java.util.Vector

public class Vector extends Object

implements Cloneable, Serializable {

protected Object[] elementData;

protected int elementCount;

public Vector(int init_size);

public void addElement(Object obj);

public final boolean contains(Object obj);

public final Object elementAt(int index);

public final void insertElementAt(Object o,int i);

public final void removeElement(Object obj);

public final int size();

public final String toString();

...

}

Page 23: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 23

JDK-Klassenbibliothek / java.util.Stack

public class Stack extends Vector {

public Stack();

public boolean empty();

public Object peek();

public Object pop();

public Object push(Object obj);

...

}

Page 24: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 24

JDK-Klassenbibliothek / java.util.HashTable

Protokoll:

public class HashTable extends Dictionary

implements Cloneable, Serializable {

public HashTable()

public void put(Object key, Object value);

public Object get(Object key);

public boolean containsKey(Object key);

public Object remove(Object key);

...

}

HashTabellen sind sehr effizient suchbare Speicher!

Page 25: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 25

JDK-Klassenbibliothek / java.util.HashTable

Nutzung:

import java.util.HashTable;

class Mitarbeiter {

String name; int alter; // name + alter eindeutig!

float gehalt;

public Mitarbeiter(String n, int a, float g) {

name = n; alter = a; gehalt = g;

}

}

Page 26: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 26

JDK-Klassenbibliothek / java.util.HashTable

class MitarbeiterKey { String name; int alter; public MitarbeiterKey(String n, int a) { name = n; alter = a; } public int hashCode() { // wird von Object geerbt int hash = 0; for (int i=0; i<name.length(); i++) hash += name.charAt(i); return hash + alter; } public boolean equals(Object obj) { MitarbeiterKey key = (MitarbeiterKey)obj; return name.equals(key.name) && (alter == key.alter);} }

Page 27: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 27

JDK-Klassenbibliothek / java.util.HashTablepublic class Verwaltung { public static void main(String[] args) { Verwaltung v = new Verwaltung(); v.insertAlleMitarbeiter(); ... Mitarbeiter kurt = v.getMitarbeiter(“kurt“, 30); System.out.println(kurt.gehalt); } HashTable elems; public Verwaltung() {elems = new HashTable();} public void insertAlleMitarbeiter() { Mitarbeiter m = new Mitarbeiter(“kurt“,30,4444.0); elems.put(new MitarbeiterKey(m.name,m.alter), m); ... } public Mitarbeiter getMitarbeiter(String n, int a) { return elems.get(new MitarbeiterKey(n, a));} }

Page 28: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 28

JDK-Klassenbibliothek / java.util.HashTableImplementierung:

class Elem { Object key; Object obj; public Elem(Object k, Object o) { key = k; obj = o;} }public class HashTable { Vector[] table; public HashTable() { table = new Vector[1000]; for (int i=0; i<1000; i++) table[i]=new Vector(); } public void put(Object key, Object value) { int index = key.hashCode()%table.length; table[index].addElement(new Elem(key, value)); }

Page 29: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 29

JDK-Klassenbibliothek / java.util.HashTable public Object get(Object key) { int index = key.hashCode()%table.length; Enumeration enum = table[index].elements(); while (enum.hasMoreElements()) { Elem elem = (Elem)(enum.nextElement()); if (elem.key.equals(key)) return elem.obj; } return null; // nicht vorhanden } public Object remove(Object key) { int ind = key.hashCode()%table.length; for (int i=0; i<table[ind].size(); i++) { Elem elem = (Elem)(table[ind].elementAt(i)); if (elem.key.equals(key)) { table[ind].removeElementAt(i); return elem.obj; } } return null;} }

Page 30: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 30

Datenkapselung

• Motivation: – bessere Überschaubarkeit und Wartbarkeit von Programmen

– weniger mögliche Fehlerquellen

• Def.: Datenkapselung

Datenkapselung bezeichnet den Schutz von Daten (Attributen) vor unmittelbarem Zugriff. Die Daten (Attribute) sind nur mittels der

ihnen zugeordneten Operationen (Methoden) zugreifbar.

• Def.: Information Hiding

Bewusstes Verbergen von internen Informationen wie Implementierungsdetails nach außen. Es werden ausschließlich genau definierte Schnittstellen (Protokolle) nach außen sichtbar gemacht.

• Def.: Datenabstraktion

Prinzip, nach dem nur die auf ein Objekt anwendbaren Operationen von außen sichtbar und zugreifbar sind (nicht die Daten und die

Implementierung)

(Datenabstraktion = Datenkapselung + Information Hiding)

Page 31: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 31

Datenkapselung

• Def.: Abstrakter Datentyp (ADT)

Zusammenfassung einer Menge von Daten (Attributen) mit den auf ihnen ausführbaren Operationen (Methoden). Das Konzept des ADT erlaubt die Spezifikation der relevanten Eigenschaften von Datenstrukturen, ohne dass

Realisierungsaspekte sichtbar werden.

• Realisierung:

– Modula-2: Definition- und Implementation-Module

– OO-Sprachen (generell): Klassen, Pakete und Zugriffsrechte

– C++: Header- und Implementation-Dateien (Klassendefinition und Implementierung der Methoden in getrennten Dateien)

– Java:

• leider keine strukturelle Unterstützung (Methoden-Implementierung innerhalb der Klassendefinition)

• sehr feingranulare Unterstützung durch Zugriffsrechte

Page 32: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 32

Zugriffsrechte auf Klassen

• In Java existieren zwei verschiedene Möglichkeiten, Zugriffsrechte auf Klassen zu definieren:– public– <ohne> (Zugriffsschlüsselwort fehlt!)

• public-Klassen sind von überall her zugreifbar/nutzbar

• <ohne>-Klassen sind nur in dem Paket zugreifbar/nutzbar, in dem sie definiert werden

• in einer Datei können mehrere Klassen definiert werden, aber nur eine darf eine public-Klasse sein!

• Richtlinien:

– will man öffentlich zugängliche Klassen definieren, sollte man sie als public deklarieren

– Hilfsklassen sollten immer <ohne> deklariert werden

Page 33: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 33

Zugriffsrechte auf Klassen

• Beispiel (Datei Vector.java):

public class Vector {

Object[] elements;

int size;

public Vector(int size) { ... }

...

public Enumeration elements() {

return new VectorEnumerator(this);

}

}

class VectorEnumerator implements Enumeration {

...

}

Page 34: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 34

Zugriffsrechte auf Attribute und Methoden

• In Java existieren vier verschiedene Möglichkeiten, Zugriffsrechte auf Attribute und Methoden zu definieren (in absteigender Reihenfolge):– public– protected– <ohne> (Zugriffsschlüsselwort fehlt!)– private

• public-Attribute/Methoden sind von überall her zugreifbar

• protected-Attribute/Methoden sind nur zugreifbar in allen Klassen desselben

Paketes sowie in abgeleiteten Klassen (auch anderer Pakete)

• <ohne>-Attribute/Methoden sind zugreifbar in allen Klassen desselben

Paketes

• private-Attribute/Methoden sind nur zugreifbar in derselben Klasse

Page 35: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 35

Zugriffsrechte auf Attribute und Methoden

• Beispiel (Datei Vector.java):

public class Vector { protected Object[] elements; protected int size; public Vector(int size) { ... } ... public Enumeration elements() { return new VectorEnumerator(this); } }

class VectorEnumerator implements Enumeration { private Vector vec; VectorEnumerator(Vector v) {this.vec = v;} ... }

Page 36: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 36

Zugriffsrechte auf Attribute und Methoden

• Richtlinien (Attribute):

– Definieren Sie Attribute möglichst niemals als public ( Datenkapselung)

– Definieren Sie Attribute, die lediglich innerhalb der Klassenimplementierung benötigt werden, als private oder <ohne>

– Definieren Sie Attribute, auf die evtl. jemand zugreifen muss, wenn er eine Klasse von der Klasse ableitet, immer als protected

– Konstanten werden im allgemeinen als public definiert (kann man eh nicht manipulieren)

• Richtlinien / Anmerkungen (Methoden):

– Definieren Sie nur die Methoden als public, die Sie anderen zur Verfügung stellen wollen

– bei in abgeleiteten Klassen überschriebenen Methoden dürfen die Rechte ausschließlich erweitert werden (private <ohne> protected public)

Page 37: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 37

Zugriffsrechte auf Attribute und Methoden

Verzeichnis: miscDatei: X.java

public class X { private int i1; int i2; protected int i3; public int i4;

void zugriffOK(X x2) { this.i1 = 3; this.i2 = 4; this.i3 = 5; this.i4 = x2.i1;} }

• Übung: wo liefert der Compiler Fehlermeldungen?

Verzeichnis: miscDatei: Y.java

public class Y { X x1; void zugriffOK() { x1 = new X(); x1.i1 = 3; x1.i2 = 4; x1.i3 = 5; x1.i4 = 6; x1.zugriffOK(new X());} }

Page 38: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 38

Zugriffsrechte auf Attribute und Methoden

Verzeichnis: miscDatei: X.java

package misc;public class X { private int i1; int i2; protected int i3; public int i4;

void zugriffOK(X x2) { this.i1 = 3; this.i2 = 4; this.i3 = 5; this.i4 = x2.i1;} }

• Übung: wo liefert der Compiler Fehlermeldungen?

Verzeichnis: utilDatei: Y.java

package util;import misc.*;public class Y { X x1; void zugriffOK() { x1 = new X(); x1.i1 = 3; x1.i2 = 4; x1.i3 = 5; x1.i4 = 6; x1.zugriffOK(new X());} }

Page 39: Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 13 Dietrich

Programmierkurs Java Vorlesung 13 Dietrich Boles Seite 39

Zugriffsrechte auf Attribute und Methoden

Verzeichnis: miscDatei: X.java

package misc;public class X { private int i1; int i2; protected int i3; public int i4;

void zugriffOK(X x2) { this.i1 = 3; this.i2 = 4; this.i3 = 5; this.i4 = x2.i1;} }

• Übung: wo liefert der Compiler Fehlermeldungen?

Verzeichnis: utilDatei: Y.java

package util;import misc.*;public class Y extends X {

void zugriffOK(X x2) { this.i1 = 3; this.i2 = 4; this.i3 = 5; this.i4 = x2.i3; } }