Object-oriented design methods are commonplace in computing systems development, but are often dismissed as little more than ‘boxes and arrows’. If systems developers are to gain the full advantage from such methods, they should be able to achieve designs that are not merely the subject of heated argument, but can be improved by careful, rigorous and machine-supported analysis. Validated Designs for Object-oriented Systems describes an object-oriented design approach that combines the benefits of abstract modelling with the analytic power of formal methods, to give designs that can be rigorously validated and assured with automated support. UML class models are augmented with consistent, complementary functional views in VDM++, with the engineer free to move between them. This allows developers to choose levels of abstraction and rigour appropriate to each given project. Aimed at software architects, designers and developers as well as computer scientists, no prior knowledge of formal methods is assumed. The elements of functional modelling are introduced using numerous examples and exercises, industrial case studies and experience reports. This book complements “Modelling Systems” by John Fitzgerald and Peter Gorm Larsen, now available in its second edition.
SCSK Systems has kindly provided a special version of VDMTools to support our book. VDMTools Lite is available free of charge and can be downloaded from www.vdmtools.jp/en. Versions are available for Windows 2000/XP, Mac (G4, G5 and x86) and Linux. For academic users, site licenses are available, also free of charge, for the full version of the tool. The full version includes automatic code generation for Java and C++, dynamic link library and CORBA support. Please contact VDM.SP@csk.com for any queries related to licensing. The alternative to VDMTools is to use the Overture open source solution built on top of the Eclipse platform. A tutorial introducing Overture in a way similar to chapter 3 of the book can be downloaded from here. Overture stand-alone executables for Windows, Mac and Linux are also freely available.
Validated Designs for Object-oriented Systems. John Fitzgerald, Peter Gorm Larsen, Paul Mukherjee, Nico Plat and Marcel Verhoef. ISBN: 1-85233-881-4. Springer, New York. 2005.
Download the BIB file entry from the publication list
You can purchase the book on-line at the Springer web-site. A Japanese translation is available as ISBN 978-1-85233-881-7 from August 2010, also available from the same publisher.
Slides supporting the book can be found on at teaching materials
Most chapters of the book have major examples used to illustrate the different concepts presented in the chapter. Here it is possible to extract the sources for each of the chapters.
The robot controller was made using sets in chapter 6. For various reasons part of this model was not natural. The solution here demonstrates how it can be made more naturally with the presence of sequences.
The last sentence on the page should be changed from:
Thus, the month can be extracted from a date by selecting field 2:
to:
Thus, the street can be extracted from an address by selecting field 2:
There is a problem with the definition of the Sample
function definition. It makes use of the Sex
function. However, Sex
takes a CPRNo
Digits4 as a parameter whereas in
Sample it is being passed a
CPRNo` in the line:
p in set pop and Sex(p) = sexreqd
One solution is to make use of the GetCode()
operation that is defined on p93.
The line then becomes:
p in set pop and Sex(p.GetCode()) = sexreqd
This change applies to both boxed definitions of Sample
.
The second sentence following the first VDM++ box should have:
(introduced later)
changed to:
(introduced previously)
The body of CarPassingEvent
should say:
NewPassage(distanceBetweenLoops / drivingTime)
instead of:
NewPassage(distanceBetweenLoops * drivingTime)
The definition of ResetLog
and WriteLog
should be changed to:
class OperatorControl
...
public ResetLog:() ==> ()
ResetLog() ==
atomic
( messageLog := [];
locations := [] );
public WriteLog: seq1 of char * CWS`Location ==> ()
WriteLog(message, location) ==
atomic
( messageLog := messageLog ^ [message ^ ConvertNum2String(location)];
locations := locations ^ [location] );
end OperatorControl
This change is necessary in order to ensure that the invariant (requiring the length of the instance variables messageLog
and locations
to be equal) is checked after both instance variables are updated.
The first box should be changed to:
class CongestionSensor
...
instance variables
passageSensors: map CWS`Lane to PassageSensor := {|->};
end CongestionSensor
The names of some of the operations in the VDMUnit framework/standard library have changed since the book was published.
Figure 12.3 should be changed to the following figure:
Exercise 5.1 All three boxed solutions should be modified as described for p90 above.
In the solution to Exercise 6.7 should the answer for the first exercise only one quote with apple.
In the solution to Exercise 7.8 should the answer for the second exercise be changed from [9,3,2,3]
to [true,false,false]
.
In the solution to Exercise 7.12 should the answer for the first exercise be changed from [true,false,4]
to [true,true,4]
.
In the solution to Exercise 7.16 should the answer to the last exercise be changed from {[5]}
to {[5,4,5]}
. In the solution to Exercise 8.2 should the answer to the last exercise be changed from {1 |-> 0.5}
be changed to {|->}
.
In the solution to Exercise 8.6 should the answer to the last exercise be changed from {1 |-> 5, 3 |-> 1, 5 |-> 1}
be changed to {1 |-> 6, 3 |-> 1, 5 |-> 1}
.