• Keine Ergebnisse gefunden

Exercise2ImmutableClassesintheJDK Exercise1Aliasing PracticeSheet7(HintsandComments) AdvancedAspectsofObject-OrientedProgramming(SS2010)

N/A
N/A
Protected

Academic year: 2022

Aktie "Exercise2ImmutableClassesintheJDK Exercise1Aliasing PracticeSheet7(HintsandComments) AdvancedAspectsofObject-OrientedProgramming(SS2010)"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Prof. Dr. A. Poetzsch-Heffter Dipl.-Inform. Kathrin Geilmann

University of Kaiserslautern Department of Computer Science Software Technology Group

Advanced Aspects of Object-Oriented Programming (SS 2010) Practice Sheet 7 (Hints and Comments)

Exercise 1 Aliasing

An alias is called dynamic, if the involved variables belong to the stack, e.g. local variables or method parameters.

a) Desired dynamic alias: iterate through an array. The loop variable tmp aliases the array elements one after another.

c l a s s C {

O b j e c t [ ] v a l u e s ;

p u b l i c v o i d m ( ) {

f o r ( I n t e g e r tmp : v a l u e s ) { . . .

} } }

Undesired dynamic alias: Store an alias to an object in the local variable tmp; hideAll components and make the aliased one visible again. This breaks the invariant and is therefor an undesired alias.

c l a s s C {

/ / i n v a r i a n t : e i t h e r a l l c o m p o n e n t s a r e v i s i b l e o r a l l a r e h i d d e n . JComponent [ ] v a l u e s ;

p u b l i c v o i d m ( ) {

JComponent tmp = v a l u e s [ 0 ] ; h i d e A l l ( ) ;

tmp . s e t V i s i b l e (t r u e) ; }

p u b l i c v o i d h i d e A l l ( ) {

f o r ( JCompoment c : v a l u e s ) { c . s e t V i s i b l e (f a l s e) ; }

} }

b) Aliasing means, that in a program state more than one reference to an object exists. Capturing occurs if a reference passed as a parameter to a method is stored in a field of the called object. If this is done, the reference remains available even after the method has been finished. I.e. Capturing happens, if a new static alias to a parameter object is established. Leaking means, that a reference to an object is passed outside. This means, that the caller of the leaking method can establish an alias to the leaked object.

c) Instead of returning the reference to the original array, return a copy of the array.

p u b l i c I d e n t i t y [ ] g e t S i g n e r s ( ) {

I d e n t i t y [ ] s i g n e r s = new I d e n t i t y [t h i s. s i g n e r s . l e n g t h ] ; S y s t e m . a r r a y c o p y (t h i s. s i g n e r s , 0 , s i g n e r s , 0 , s i g n e r s . l e n g t h ) ; r e t u r n s i g n e r s ;

}

Exercise 2 Immutable Classes in the JDK

• String: The best know immutable class of the JDK. In fact, it is not immutable with respect to the definition of the lecture, because it depends on the global setting for the current local.

• Number: The final classes implementing the interface Number. An object of Byte (Integer, etc) models exactly one value, which is not mutable. For the non-final ones a subtype could break immutability. Other wrapper classes like Character are good candidates for immutable classes as well.

• Classes of the reflection API: (Class, Package, etc) as long as the security manager is not changed.

• ...

A lot of classes are often used as if they are immutable, where as technically they are not.

(2)

Exercise 3 Confined Types

ConfinedList ProofTreeNode PTNIterator

C1 ok ok ok

C2 ok ok ok

C3 ok not ok, in ProofContainer.19 a ProofTreeNode is

passed to a method that expects an Object; in ProofTreeNode.147 widening to Object

ok

C4 ok ok ok

C5 ok not ok. in line 69 call to a unconfined, non anony- mous constructor.

ok

C6 ok ok ok

C7 ok ok ok

C8 ok ok ok

Confined yes no yes

Exercise 4 Encapsulation on Object Level

a) No, the annotation in not possible due to the implementation of equals. Line 507:co.dataaccesses the data field but the referenced array is part of the representation of the listco. Representation objects are only accessible by the owner and by objects of the same representation domain, but the representation domain of the currentthisis different from the domain of theco.

b) With alias modes it is possible to control the access to objects which belong to other objects. The alias modes work on object level, i.e. an alias mode is always relative to an object. This allows to hide the representation of one object to another one, even if they are created by the same source (i.e. they are of the same class). The confined types only allow to control that all interactions that may happen with object of a confined type are coded inside the package. This guarantees, that all modifications to these objects are under the control of the package developer.

In the Confined Types approach, encapsulation is seen from a static point of view, where as the alias modes (and ownership types in general) have a notion of encapsulation based on dynamic properties.

2

Referenzen

ÄHNLICHE DOKUMENTE

Undesired dynamic alias: Store an alias to an object in the local variable tmp; hideAll components and make the aliased one visible again. Capturing occurs if a reference, which

Undesired dynamic alias: Store an alias to an object in the local variable tmp; hideAll components and make the aliased one visible again. Capturing occurs if a reference passed as

Advanced Aspects of Object-Oriented Programming (SS 2011) Practice Sheet 8 (Hints and Comments).. Exercise

Advanced Aspects of Object-Oriented Programming (SS 2010) Practice Sheet 9 Date of Issue: 10.06.10. Deadline: 17.06.10 (until

Whenever a nugget is produced, the world object sends a message to its registered observers. The simulated robots send out messages to their observer, whenever they hit or

b) Implement a plugin that extends the package explorer with a mail action. When activated, the plugin should ask for a mail address and send an email to it, with the the object

b) The also keyword indicates that the current specification is refining the specification inherited either from the superclass or from the previous declaration of the method in

b) They synchronize on the wrapper object and delegate the execution of the calls to the wrapped object. This guarantees, that if all accesses to the wrapped collection are done via