• Keine Ergebnisse gefunden

Aufgabe2ConfinedTypes Aufgabe1MemoryManagement HinweiseundBemerkungenzum8.ÜbungsblattderVorlesung„FortgeschritteneAspekteobjektorientierterProgrammierung(SS2008)“

N/A
N/A
Protected

Academic year: 2022

Aktie "Aufgabe2ConfinedTypes Aufgabe1MemoryManagement HinweiseundBemerkungenzum8.ÜbungsblattderVorlesung„FortgeschritteneAspekteobjektorientierterProgrammierung(SS2008)“"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Prof. Dr. A. Poetzsch-Heffter Dipl.-Inform. Markus Reitz

Technische Universität Kaiserslautern Fachbereich Informatik AG Softwaretechnik

Hinweise und Bemerkungen zum 8. Übungsblatt der Vorlesung

„Fortgeschrittene Aspekte objektorientierter Programmierung (SS 2008)“

Aufgabe 1 Memory Management

a) Das Problem besteht darin, daß der mittelssubstringerzeugteStringintern auf das gleichechar-Array zurück- greift (Aliasing). Somit kann der „große“ String nicht vom Garbage Collector aus dem Speicher entfernt werden;

es kommt nach wenigen Durchläufen zumOutOfMemoryError.

b) Das Problem wird dadurch gelöst, daß mittels geeignetem Konstruktoraufruf ein wirklich neuer String erzeugt wird, sodaß die Referenz auf den ursprünglichen String verschwindet und dieser durch den Garbage Collector aus dem Speicher entfernt werden kann.

c) Siehe Diskussion in der Übungsstunde.

Aufgabe 2 Confined Types

a) Es kommen die Klassen 1. PlainMailer 2. UUMailer

3. MimeMailer.StringDataSource 4. MimeMailer.SimpleAuthenticator

in Betracht, da alle anderen Klassen public sind (Verstoß gegen C1).

b) • PlainMailer:

C1: Erfüllt, da die Klasse nicht public ist.

C2: Die einzige SubklasseUUMailerist nicht confined (s. u.), C2 ist also verletzt.

C3: Wird in EmailTask, l. 458 verletzt, da ein Objekt vom Typ PlainMailer in einer lokalen Variablen vom Typ Mailer gespeichert wird, und Mailer ist nicht confined, da schon C1 verletzt ist. Dies ist die einzige Stelle, an der C3 verletzt wird.

C4: In EmailTask, l. 517 – 532 werden Methoden auf dem in l. 458 erzeugten Objekt aufgerufen. Diese Methoden sind in der öffentlichen Superklasse Mailer definiert. Da es sich bei diesen Methoden ausnahmslos um setter-Methoden handelt, sind sie nicht anonym (Widerspruch zu Regel A1).

In l. 535 wird eine Methode auf diesem Objekt aufgerufen, die in der Klasse PlainMailer implementiert ist. Auch diese Methode ist nicht anonym, da sie den Konstruktor der Klasse MailMessage aufruft, der die übergebenen Referenzen speichert.

C5: Die Klasse PlainMailer implementiert keinen Konstruktor, ihre Superklassen ebenfalls nicht, und der Konstruktor von java.lang.Object ist leer (http://www.docjar.com/html/api/java/lang/Object.java.html). Diese Regel ist also erfüllt.

C6: Diese Regel ist erfüllt, da PlainMailer keine Subklasse der genannten Klassen ist.

C7: Es gibt keine Attribute vom Typ PlainMailer in irgendeiner Klasse des Pakets. Diese Regel ist also erfüllt.

C8: Der Typ PlainMailer wird nicht als Rückgabetyp irgendeiner Methode im Paket verwendet. Diese Regel ist also erfüllt.

Zusammenfassend verletzt die Klasse die Regeln C2, C3 und C4.

• UUMailer:

C1: Erfüllt, da die Klasse nicht public ist.

C2: Es gibt keine Subklassen, also ist C2 erfüllt.

(2)

C3: Wird in EmailTask, l. 458 verletzt, da ein Objekt vom Typ PlainMailer in einer lokalen Variablen vom Typ Mailer gespeichert wird, und Mailer ist nicht confined, da schon C1 verletzt ist. Dies ist die einzige Stelle, an der C3 verletzt wird.

C4: In EmailTask, l. 517 – 532 werden Methoden auf dem in l. 458 erzeugten Objekt aufgerufen. Diese Methoden sind in der öffentlichen Superklasse Mailer definiert. Da es sich bei diesen Methoden ausnahmslos um setter-Methoden handelt, sind sie nicht anonym (Widerspruch zu Regel A1).

In l. 535 wird eine Methode auf diesem Objekt aufgerufen, die in der Klasse PlainMailer implementiert ist. Auch diese Methode ist nicht anonym, da sie den Konstruktor der Klasse MailMessage aufruft, der die übergebenen Referenzen speichert.

C5: Die Klasse UUMailer implementiert keinen Konstruktor, ihre Superklassen ebenfalls nicht, und der Kon- struktor von java.lang.Object ist leer (http://www.docjar.com/html/api/java/lang/Object.java.html). Diese Re- gel ist also erfüllt.

C6: Diese Regel ist erfüllt, da UUMailer keine Subklasse der genannten Klassen ist.

C7: Es gibt keine Attribute vom Typ UUMailer in irgendeiner Klasse des Pakets. Diese Regel ist also erfüllt.

C8: Der Typ PlainMailer wird nicht als Rückgabetyp irgendeiner Methode im Paket verwendet. Diese Regel ist also erfüllt.

Zusammenfassend verletzt die Klasse die Regeln C3 und C4.

• MimeMailer.StringDataSource:

C1: Erfüllt, da die Klasse nicht public ist.

C2: Erfüllt, da es keine Subklassen gibt.

C3: Diese Regel wird in MimeMailer l. 215 verletzt, da der Konstruktor von DataHandler ein Objekt vom statischen Typ DataSource erwartet.

C4: Diese Regel ist erf¸llt. Auf Objekten des Typs StringDataSource werden nur die Methoden setContent- Type (l. 198) und setCharset (l. 199) aufgerufen, die beide in StringDataSource definiert sind.

C5: Diese Regel ist erfüllt, da die Klasse StringDataSource keinen Konstruktor besitzt, und der Konstruktor ihrer Superklasse java.lang.Object ist leer (http://www.docjar.com/html/api/java/lang/Object.java.html).

C6: Diese Regel ist erfüllt, da die Klasse kein Subtyp der angegebenen Klassen ist.

C7: Diese Regel ist erfüllt, da es keine Attribute des angegebenen Typs gibt.

C8: Diese Regel ist erfüllt, da es keine Methode mit dem angegebenen Rückgabetyp gibt.

Zusammenfassend verletzt die Klasse die Regel C3 an einer Stelle.

• MimeMailer.SimpleAuthenticator:

C1: Erfüllt, da die Klasse nicht public ist.

C2: Erfüllt, da es keine Subklassen gibt.

C3: Diese Regel wird in MimeMailer l. 158 verletzt, da ein SimpleAuthenticator Objekt an eine lokale Variable vom Supertyp Authenticator zugewiesen wird. Sie wird ebenfalls in MimeMailer l. 159 verletzt, da dasselbe Objekt an die Methode Session.getInstance übergeben wird, die ein Authenticator-Objekt erwartet.

C4: Diese Regel ist erfüllt, da auf dem Objekt keine Methoden aufgerufen werden.

C5: Diese Regel ist erfüllt, da der Konstruktor von SimpleAuthenticator keine weiteren Konstruktoren außer dem Superkonstruktor aufruft. Die Superklasse Authenticator implementiert keinen Konstruktor, und der Konstruktor von java.lang.Object ist leer (http://www.docjar.com/html/api/java/lang/Object.java.html).

C6: Diese Regel ist erfüllt, da die Klasse kein Subtyp der angegebenen Klassen ist.

C7: Diese Regel ist erfüllt, da es keine Attribute des angegebenen Typs gibt.

C8: Diese Regel ist erfüllt, da es keine Methode mit dem angegebenen Rückgabetyp gibt.

Zusammenfassend verletzt die Klasse die Regel C3 an zwei Stellen.

2

Referenzen

ÄHNLICHE DOKUMENTE

For a given collection of elements of an arbitrary type T, the Permutator class provides an iterator over all permutations of the elements contained in the collection.

} idiom used within the next() method in the source code of class Permutations. Which value is returned by the following code fragment?.. b) Because of the type erasure

add ( new MemoryProblem ( ). the memory error does not occur and the list whose reference is stored in the variable result is populated with the fragments according to the given

Check the following source code fragments with respect to violation or fulfillment of the Behavioural Subtype property as introduced in the lecture. What is the complete

ET++ was developed during the late 80s and early 90s of the last century as a framework providing a rich set of building blocks for the construction of „typical“ desktop

Der oben angegebene try-catch Block „fängt“ alle Exceptions vom Typ Exception, sowie von Exception abgeleitete Typen wie beispielsweise IOException. Angenommen, innerhalb des

Technische Universität Kaiserslautern Fachbereich Informatik AG Softwaretechnik. Hinweise und Bemerkungen

Technische Universität Kaiserslautern Fachbereich Informatik AG Softwaretechnik. Hinweise und Bemerkungen