By Richard Pawson and Robert Matthews
Enriching object behaviours
Collections within the Naked Objects framework are for storing a
number of naked objects in a unique unsorted set. Some of the
collections are also typed so that they will only accept a specific
org.nakedobjects.object.NakedObject - i.e. a
specific type of business object. There are three types of collections
used within the framework (declared in the
org.nakedobjects.object.collection package). All are based
on the same abstract collection but differ in what type of object they
store and the reason they are used. In order of frequency of use they
InternalCollection, a collection of associations,
which is a composite part of a business object. The objects it
contains are of a type specified when the collection was created. This
was described in the section on one-to-many
ArbitraryCollection, a general untyped collection
of objects that the user creates for his own ad hoc use. This
type of collection is created when any existing collection is
InstanceCollection, a collection of instances of a
specific type, generated directly by the persistence mechanism. For
example, in the user view the pop-up menu on a class offers the
option of listing all instances of that class, or finding instances that
match given criteria. If matches are found they will be returned as
The abstract superclass
methods to add and remove elements from a collection.
You access the collection's elements through an
Enumeration, which gives access to all the objects in the
collection so that you can iterate through it.
also some utility methods to check the size and content of a
public void add(NakedObject element) adds a new
element to the collection, first calling the collection's abstract
canAdd method to check whether the object can
be added. The
InternalCollection implements the
canAdd so that only objects of the specifed type,
and which are not already in the collection, can be added. The same
method in the
ArbitraryCollection class checks only
for the existence of the object.
on the other hand, vetoes any addition by the programmer.
public void remove(NakedObject element) removes a
specific existing element. In the same way as for the add method,
remove calls the
to check if the object is currently held and to determine whether the
element can be removed. This is implemented generally so that all
elements can be removed, except in the
InstanceCollection where this is never allowed.
public Enumeration elements() generates an
Enumeration that can be used to iterate through the
collection, as below:
Enumeration e = employees.elements();
emp = (Employee)e.nextElement();
public boolean contains(NakedObject element) checks
to see if a specific element is held by the collection, returning
true if it is.
public boolean isEmpty() determines if the
collection is empty and returns
true if it is.
public int size() determines how many elements the
Copyright (c) 2002
nakedobjects.org You may print this document for your own personal
use, or you may copy it in electronic form for access within your
organisation, provided this notice is preserved.