T ELEKOOPERATION , FB 20, TU DARMSTADT Dipl.-Ing. Gerhard Austaller Dipl.-Ing. Andreas Hartl EMail: {gerhard,andreas}@tk.informatik.tu-darmstadt.de Fachgebiet Telekooperation Technische Universität Darmstadt Übungsblatt 9 zur Vorlesung Grundzüge der Informatik I im WS 02/03 (8. - 14. Januar 2003) Ihnen nur eine Wahl, welche und warum? Einleitung Bisher wurde als einzige Möglichkeit Objekte in einer Art Container“ zu verwalten das Array vorgestellt. Ein Nach” teil des Arrays ist, dass die Größe bei der Initialisierung bekannt sein muss. Die Klasse Vector bietet ein Array (siehe Ende des Aufgabenzettels), dessen Größe sich dynamisch verändern kann. interface IntegerVector { public boolean add ( I n t e g e r a ) ; public I n t e g e r f i r s t E l e m e n t ( ) ; } Aufgabe 9.3 Aufgabe 9.1 Casting • Schreiben Sie eine Methode in der drei IntegerObjekte und ein String-Objekt in einem Vector abgelegt werden. • Nehmen Sie die Objekte wieder aus dem Vector und weisen sie bei Integer-Objekten den Wert des Objektes einer Variable vom Typ int zu. Die zu verwendende Methode finden Sie im Skript V10 auf Seite 7. Was dürfen Sie auf keinen Fall vergessen? Aufgabe 9.2 Wrapper-Klassen & Casting Dem Vorteil der dynamischen Größenanpassung des Vectors steht der Nachteil des teilweisen Verlusts der Typsi” cherheit“ entgegen. Ein Vector garantiert nur“, dass ein ” Objekt bei den Zugriffsmethoden geliefert wird. Wie Sie beim vorherigen Beispiel gesehen haben, sind Typecasts nötig um die spezieller Sicht auf das Objekt zu bekommen. Schreiben Sie eine Klasse IntegerVectorImpl, die folgendes Interface implementiert. Überlegen Sie sich, ob Sie IntegerVectorImpl von Vector ableiten würden (is-a) oder ob er in IntegerVectorImpl nur benutzt wird (has-a). Die Definition des Interfaces lässt 9. Übung Überladen von Methoden Für komplexe Zahlen ist in Java kein eigener Typ vorgesehen. Komplexe Zahlen bestehen aus zwei Komponen” ten“, dem Realteil und dem Imaginärteil, welche beide reelle Zahlen sind. Sie werden geschrieben als a + bi. Die Summe zweier komplexer Zahlen a + bi und c + di ist definiert als (a + √ c) + (b + d)i, der Betrag einer komplexen Zahl a + bi als a2 + b2 . • Im nachfolgenden Interface sind einige überladene Methoden definiert. Es befindet sich aber zwei nicht zulässige Methodendefinitionen im Interface. Welche sind nicht zulässig und warum? i n t e r f a c e Complex{ public Complex add ( Complex complex ) ; public Complex add ( double r e a l , double imag ) ; public Complex add ( double r e a l ) ; public Complex add ( double imag ) ; public double abs ( ) ; public Complex abs ( ) ; public double r e a l ( ) ; public double imag ( ) ; } • Implementieren Sie die Klasse, nachdem Sie die fehlerhaften Methodendefinitionen entfernt haben. Seite 1 Grundzüge der Informatik I Aufgabe 9.4 WS 02/03 D.h. implementieren sie auch eine Methode public boolean add(Integer obj). Konstruktoren Implementieren Sie verschiedene sinnvolle Konstruktoren für die komplexen Zahlen. Mit this besteht die Möglichkeit Konstruktoren der eigenen Klasse aufzurufen. Machen Sie davon ausgiebig gebraucht. Alle Konstruktoren bis auf einer sollen mittels this implementiert werden! Hausaufgabe 9.1 te Interface Bag - 10 Punk- Implementieren Sie folgende Interface in der Klasse BagImpl. Sie dürfen in der Implementierung keine von Java zur Verfügung gestellte Container-Klassen (auch nicht Vector) benutzen außer ein Array. Sie können eine fixe Kapazität annehmen. Implementieren Sie auch mindestens einen sinnvollen Nicht-Default“ Konstruktor. ” interface public public public public public public } Bag { boolean add ( O b j e c t o b j ) ; boolean c o n t a i n s ( O b j e c t o b j ) ; String toString ( ) ; boolean remove ( O b j e c t o b j ) ; int size ( ) ; boolean isEmpty ( ) ; Hausaufgabe 9.2 - 6 Punkte Interface AdvancedBag Implementieren Sie folgendes Interface. Es kann ebenfalls in BagImpl implementiert werden. In der Dokumentation zu Java finden Sie eine genaue Beschreibung der Eigenschaften einer Enumeration. Implementieren Sie die Enumeration in einer eigenen Klasse! IntegerBag - 8 Punkte eine neue Klasse Überschreiben Sie die add-Methode so, dass nur mehr Integer eingefügt werden können. Überladen Sie weiters auch die Methode mit Integer als Parameter. 9. Übung The Vector class implements a growable array of objects. Like an array, it contains components that can be accessed using an integer index. However, the size of a Vector can grow or shrink as needed to accommodate adding and removing items after the Vector has been created. • public boolean add(Object o) Appends the specified element to the end of this Vector. – Parameters: o - element to be appended to this Vector. – Returns: true (as per the general contract of Collection.add). • public Object elementAt(int index) Returns the component at the specified index. This method is identical in functionality to the get method (which is part of the List interface). – Parameters: index - an index into this vector. – Returns: the component at the specified index. – Throws: ArrayIndexOutOfBoundsException - if the index is negative or not less than the current size of this Vector object given. • public Object firstElement() Returns the first component (the item at index 0) of this vector. – Returns: the first component of this vector. Removes the element at the specified position in this Vector. shifts any subsequent elements to the left (subtracts one from their indices). Returns the element that was removed from the Vector. i n t e r f a c e AdvancedBag extends Bag { public Enumeration elements ( ) ; } Leiten Sie von BagImpl IntegerBagImpl ab. java.util.Vector • public Object remove(int index) import j a v a . u t i l . Enumeration ; Hausaufgabe 9.3 Macht es in diesem Fall Sinn add() zu überladen? Vergessen Sie nicht auf sinnvolle Tests! – Parameters: index - the index of the element to removed. – Returns: element that was removed – Throws: ArrayIndexOutOfBoundsException - index out of range (index < 0 || index ≥ size()). Siehe auch http://java.sun.com/j2se/1.4/ docs/api/index.html. Seite 2