User Tools

Site Tools


caching:ex2

Intro Ex1 Ex2 Ex3 Ex4

Caching: Constant cache

Using inter-type declarations

Task: Pass tests.BoundsConstantCache.

Instead of making the (very) conservative approximation of getBounds() from the previous part, write an aspect instead that remembers the return value from the first time getBounds() has been called on a certain Group, and returns that first Rectangle for every subsequent call.

Use an inter-type declaration of a field on the Group class to store the cache value.

A correct implementation should pass the tests of suite tests.BoundsConstantCache.

When done, remove the aspect from your build path before continuing with the next part.

Using several aspect instances

Imagine that a Group is serialized to some storage medium. If we use inter-type declarations to introduce a new field for the Group class, then this field will be included in the serialized data of a Group (so the schema changes). This is undesirable.

To avoid this, write a new version of the above aspect that does not change the fields of the Group class.

Store the field in the aspect itself and use the perthis instantiation strategy to have one aspect aspect instance for each advised Group object.

A correct implementation should also pass the tests of suite tests.BoundsConstantCache.

When done, remove the aspect from your build path before continuing with the next part.

Reusable caching aspect

A reusable caching aspect seems very useful. Create a generic caching aspect from your previous result by extracting at least:

  • The type of the cache value: i.e. Rectangle should not be hardcoded, use a type variable instead
  • The operation being cached: i.e. Group.getBounds() should not be hardcoded, make this pointcut abstract

Then reimplement your solution using this generic caching aspect. The new implementation should still pass the tests of suite tests.BoundsConstantCache.


Keep the last of your caching aspects active and continue with Exercise 3.

caching/ex2.txt · Last modified: 2021/02/05 13:51 (external edit)