9 Further reading
The treatment of object-oriented analysis and design in this tutorial has been mostly based on a synthesis of the insights of Catalysis and SOMA and the UML standard. These insights, of course, are in themselves derivative of the work of many other methodologists.
D'Souza and Wills (1999) defined Catalysis as a method for object-oriented and component-based development that made sense out of UML for the first time. The notion of rely and guarantee clauses comes from Cliff Jones' (1986) work on VDM.
SOMA (The Semantic Object Modelling Approach) arose out of attempts to combine object-oriented analysis with ideas from business process modelling and knowledge-based systems (Graham, 1991, 1995, 1998).
A good, concise, popular summary of UML is (Fowler, 1997) with (Booch et al., 1999) and (Rumbaugh et al., 1999) being the original definitive references. The most current definitive reference will be found at www.omg.org.
Design patterns were introduced by Gamma et al. (1995). Buschmann et al. (1996) cover these together with architectural patterns. Pree (1995) is another early contribution in this area and introduced the idea of metapatterns. Fowler (1996) discusses analysis patterns, the idea of which was earlier suggested by Coad (1992). The annual proceedings of the PLoP conferences (Coplien and Schmidt, 1995; Vlissides et al., 1996) are full of interesting exegesis and new patterns including the earliest work on organizational patterns (Coplien, 1995). Beck (1997) is an excellent exposition of how to use patterns in the context of Smalltalk, well worth reading by those not interested in that language. Coplien (1992) describes C++ idioms. Mowbray and Malveau (1997) discuss patterns for CORBA implementations. Much current work on patterns has been inspired by the work of Christopher Alexander and his colleagues (1964, 1977, 1979) in the built environment. Richard Gabriel (1996) also provides much insight into the relevance of Alexander's ideas.
Gardner et al. (1998) discuss their idea of cognitive patterns based on the task templates of the Common KADS knowledge engineering method. The idea is that common problem solving strategies, such as diagnosis, planning and product selection, can be classified as patterns that show how each kind of inference proceeds.
Brown et al. (1998) discuss anti-patterns: common solutions to frequently occurring problems that don't work - and provide suggested solutions. The idea has much in common with the 'software ailments' of Capers Jones (1994).
OORAM (Reenskaug et al., 1996) was an influential method, tool and language in which collaborations and their composition were the central design mechanisms.
Cheesman and Daniels (2000) describe a simple process for specifying software components and component-based systems, using UML notations and drawing on ideas from Catalysis.