Modularisierung in Java: Pakete Software Entwicklung 1

Ähnliche Dokumente
Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Einstieg in die Informatik mit Java

4. Vererbung Die Klasse Object. Die Klasse Object

Klassen und ihre Beziehungen III: Mehrfache Vererbung, Rollen, Schnittstellen und Pakete

Einführung in die Programmierung

Programmieren in Java -Eingangstest-

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Algorithmen und Datenstrukturen

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

Einstieg in die Informatik mit Java

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank...

3 Objektorientierte Konzepte in Java

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Geschachtelte Klassen

5.6 Vererbung. Vererbung

Repetitorium Informatik (Java)

5 Vererbung. Subklassen, Superklassen, Pakete Zugriffsrechte

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

Grundlagen der Programmierung Prof. H. Mössenböck. 15. Pakete

Einstieg in die Informatik mit Java

Programmieren in Java

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Einstieg in die Informatik mit Java

3 Objektorientierte Konzepte in Java

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Vererbung, Polymorphie

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Algorithmen und Datenstrukturen

Institut für Informatik. Endterm Klausur zu Informatik I 20. Februar 2010

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Einstieg in die Informatik mit Java

Java I Vorlesung Generics und Packages

3. Übungsbesprechung Programmkonstruktion

Institut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

Programmieren in Java

Einstieg in die Informatik mit Java

Objektorientierte Programmierung. Kapitel 16: Pakete, Zugriffsschutz

Deklaration einer Klasse Innere innerhalb Klassen einer in Ja anderen v a Klasse

Programmiermethodik 1. Klausur

Java Einführung Abstrakte Klassen und Interfaces

Kapitel 5: Interfaces

Programmieren in Java

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Abschnitt 12: Strukturierung von Java-Programmen: Packages

Musterlösung Stand: 5. Februar 2009

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Interface. So werden Interfaces gemacht

Ausdrücke in Scala. Funktionale Programmierung. Christoph Knabe FB VI

Objekt-Orientierte Programmierung

Objektorientierte Programmierung Studiengang Medieninformatik

Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen

Arten von Klassen-Beziehungen

4. Vererbung. Idee der Vererbung. Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende Klassen vor:

3. Auflage. O Reillys Taschenbibliothek. C# 5.0 kurz & gut. Joseph Albahari & Ben Albahari O REILLY. Aktualisierung von Lars Schulten

Einstieg in die Informatik mit Java

Java für Bauingenieure

Objektorientierte Programmierung. Kapitel 14: Interfaces

Einstieg in die Informatik mit Java

12. Java Klassen. Klassen - Technisch. Beispiel: Erdbebendaten. Klassen - Konzeptuell

Kapitel 15. Systemarchitektur

1 Klassen anlegen und Objekte erzeugen

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

Vererbung & Schnittstellen in C#

1 Klassen anlegen und Objekte erzeugen

Probeklausur: Programmierung WS04/05

Programmieren I. Kapitel 8. Vererbung

int x = 3; int y = 11; public A () { this.x = z; y *= z;

II.4.5 Generische Datentypen - 1 -

Java Einführung Methoden in Klassen

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Einstieg in die Informatik mit Java

Vererbung. Martin Wirsing. Ziele. Vererbung

Objektorientierte Programmierung Studiengang Medieninformatik

Teilprüfung Software- und Internettechnologie Programmierkurs 1 Wintersemester 2005/2006

Objektorientierte Programmierung

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue

Objekt-Orientierte Programmierung

Objektorientierte Programmierung und Klassen

Programmieren in Java

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Repetitorium Informatik (Java)

Java Einführung Methoden. Kapitel 6

Transkript:

Modularisierung in Java: Pakete Software Entwicklung 1 Annette Bieniusa, Mathias Weber, Peter Zeller Um zusammengehörende Klassen, Interfaces, etc. gemeinsam zu verwalten, Sichtbarkeiten einzugrenzen und Namenskonflikte zu vermeiden, kann man in Java verwandte Typen in Pakete organisieren. Wie wir bereits in zahlreichen Beispielen gesehen haben, kann man diese Typen dann durch einen Import an benötigter Stelle verfügbar machen. In diesem Kapitel werden wir sehen, wie Pakte in Java erstellt und verwaltet werden können. Lernziele dieses Kapitels: Die Rolle von Modularisierung bei der Programmierung zu erläutern. Pakete in Java zu deklarieren und zu organisieren. Sichtbarkeitsregeln für Pakete geeignet anzuwenden. 1 Organisation von Klassen- und Interface-Deklaration Java-Programme bestehen aus Typdeklarationen, d.h. Klassen- und Interface-Deklarationen. Es gibt drei Sprachkonstrukte zur Strukturierung der Typdeklarationen: Schachtelung von Klassen (vgl. Kapitel 17) Gruppierung von Klassen zu Übersetzungseinheiten; diese entsprechen einer Datei und können mehrere Typdeklarationen zusammenfassen, wobei maximal eine öffentlich sein darf. Gruppierung von Übersetzungseinheiten zu Paketen Java-Programme sind Ansammlungen von übersetzten Typdeklarationen. Die Gruppierung in Übersetzungseinheiten und die Schachtelung von Klassendeklarationen existiert auf der Ebene nicht mehr. Große Programme bestehen aus hunderten und tausenden von Typendeklarationen, die von unterschiedlichen EntwicklerInnen und Institutionen realisiert und verwaltet werden. Es ist von großer Bedeutung, diese Klassen geeignet zu gruppieren und einzuteilen. Wichtige Aspekte dabei sind: Auffinden der Deklarationen und Verstehen des Zusammenhangs Übersetzungs-, Installationsorganisation Zugriffsrechte, Namensräume Pflege und Wartung Für diese Aufgabenbereiche gibt es Modulkonzepte. Module sind abgeschlossene funktionale Einheiten, die getrennt voneinander übersetzt und gewartet werden können. Einzelne Module können zu einem größeren Ganzen zusammengesetzt werden und interagieren dabei über Schnittstellen. 1

1.1 Pakete in Java Javas Pakete bieten ein relativ einfaches Modulkonzept. Ein Paket hat einen Namen p. Der Name besteht ggf. aus mehreren Teilen, die durch einen Punkt voneinander getrennt sind. Paketnamen werden typischerweise klein geschrieben. Ein Paket p ist üblicherweise in einem Dateiverzeichnis mit Namen p abgelegt. Beispiel: Das Paket java.lang ist abgelegt in einem Verzeichnis.../java/lang Ein Paket ist eine endliche Menge von Übersetzungseinheiten (Dateien); der Paketname erscheint am Anfang der Übersetzungseinheiten. Syntax: package Paketname; Pakete bilden Namensräume: Ist p ein Paket, dann können alle Klassen K in p mittels p.k angesprochen werden (vollständiger Name); analog für Interfaces. Innerhalb eines Pakets darf ein Klassenname (bzw. Interface-Name) nur einmal vorkommen. Es gibt keine Paket-Hierarchie/Unterpakete (insbesondere ist z.b. java.awt.event kein Unterpaket von java.awt). Die Schnittstelle eines Java-Pakets besteht aus den öffentlich sichtbaren Elemente, die in dem Paket definiert sind (Modifikator public). Beispiel In der Regel wird die Paketstruktur in die Verzeichnisstruktur des Quellcodes umgesetzt. Angenommen, wir wollen Pakete se1.list und se1.tree erstellen. Die Listen umfassen dabei die Klassen LinkedList, Node, ListIterator, die Bäume umfassen die Klassen SearchTree, Node. Wir legen folgenden Dateien an: /home/karlheinz/uni/se1/list/linkedlist.java /home/karlheinz/uni/se1/list/listiterator.java /home/karlheinz/uni/se1/list/node.java /home/karlheinz/uni/se1/tree/searchtree.java /home/karlheinz/uni/se1/tree/node.java Die Java-Typen der Schnittstelle sind folgendermaßen definiert: package se1. list ; public class LinkedList {... bzw. package se1. tree ; public class SearchTree {... Die Klasse Node ist nur innerhalb des Pakets sichtbar, daher ist sie nicht als public deklariert (kein Modifikator): package se1. list ; class Node {... Ein Programm, das den hier definierten Typ LinkedList verwenden will, muss diesen Typen importieren, wenn es nicht Teil des Pakets se1.list ist: import se1. list. LinkedList ; class LinkedListTest { public static void main ( String [] args ) { LinkedList ll = new LinkedList ();... Die Anweisung import se1.list.* importiert alle Typen aus dem Paket se1.list. Alternativ kann der Typ auch durch den vollständigen Namen adressiert werden: 2

// keine Import - Anweisung class LinkedListTest { public static void main ( String [] args ) { se1. list. LinkedList ll = new se1. list. LinkedList ();... Dies ist notwendig, wenn ein weiterer Typ mit gleichem Namen im Programm verwendet werden soll: class LinkedListTest { public static void main ( String [] args ) { se1. list. LinkedList ll = new se1. list. LinkedList (); java. util. LinkedList < String > ls = new java. util. LinkedList < String >() ;... Deklaration ohne Zugriffmodifikator Pakete stellen auch einen Zugriffsbereich dar: Alle Programmelemente ohne Zugriffsmodifikator sind paketweit zugreifbar. Frage 1: Folgende Tabelle listet die verschiedenen Zugriffsmodifkatoren und die Zugreifbarkeit auf. Vervollständigen Sie die Tabelle mit Hilfe der unten stehenden Klassendeklarationen A - E! Hat Zugriff auf: public private protected ohne Klasse selbst (nicht Sub-)Klasse, gleiches Paket Subklasse, gleiches Paket Subklasse, anderes Paket (nicht Sub-)Klasse, anderes Paket package packetx ; public class A { public int a; int b; protected int c; private int d; System. out. println ( this.a); System. out. println ( this.b); System. out. println ( this.c); System. out. println ( this.d); 3

package packetx ; // gleiches Paket ; keine Subklasse von A public class B { System. out. println ( obj.b); System. out. println ( obj.c); package packetx ; // gleiches Paket ; Subklasse von A public class C extends A { // verwendet Klasse A in Vererbungsbeziehung System. out. println ( this.a); System. out. println ( this.b); System. out. println ( this.c); // nicht erlaubt : System. out. println ( this.d); // verwendet Klasse A in Anwendungsbeziehung System. out. println ( obj.b); System. out. println ( obj.c); package packety ; import packetx.a; // anderes Packet, Subklasse von A public class D extends A { // verwendet Klasse A in Vererbungsbeziehung System. out. println ( this.a); // nicht erlaubt : System. out. println ( this.b); // error : b is not public in A; cannot be accessed from outside package package packety ; import packetx.a; // anderes Packet, keine Subklasse von A public class E { // nicht erlaubt : System. out. println ( obj.b); // error : b is not public in A; cannot be accessed from outside package System. out. println ( this.c); // nicht erlaubt : System. out. println ( this.d); // verwendet Klasse A in Anwendungsbeziehung // nicht erlaubt : System. out. println ( obj.c); // error : c has protected access in A // nicht erlaubt : System. out. println ( obj.b); // error : b is not public in A; cannot be accessed from outside package // nicht erlaubt : System. out. println ( obj.c); // error : c has protected access in A 4

Frage 2: Gegeben ist folgende (korrekte) Implementierung einer equals- Methode für Klasse C. 1 public class C { 2 private int a; 3... 4 public boolean equals ( Object o) { 5 if (o == null ) { 6 return false ; 7 8 if ( o instanceof C) { 9 C other = ( C) o; 10 return other. a == this. a; 11 else { 12 return false ; 13 14 15 Erklären Sie, warum der Zugriff auf other.a in Zeile 10 erlaubt ist! 5

Hinweise zu den Fragen Hinweise zu Frage 1: Hat Zugriff auf: public private protected ohne Klasse selbst J J J J Klasse aus gleichem Paket J N J J Subklasse, gleiches Paket J N J J Subklasse, anderes Paket J N J/N N (nicht Sub-)Klasse, anderes Paket J N N N Eine Subklasse aus einem anderen Paket hat nur Zugriff auf die Attribute und Methoden, die mit public oder protected versehen sind. Wird in dieser Klasse ein Objekt der Superklasse erzeugt (d.h. die Klasse wird nicht in der Vererbungsbeziehung, sondern der Anwendungsbeziehung genutzt), so darf auf die protected Programmelemente nicht zugegriffen werden. Hinweise zu Frage 2: Der Zugriff auf Attribute der gleichen Klasse ist auch erlaubt, wenn die Attribute den Modifikator private haben. Dabei ist nicht ausschlaggebend, auf welchem Objekt der Zugriff erfolgt. Somit ist der Zugriff auf other.a erlaubt, da other den Typ C hat und die equals-methode in C definiert ist. 6