The aim of this course is to give students a detailed understanding of (aspects of) the design and analysis of object oriented programs. A bewildering variety of design and analysis methodologies for object oriented software exist in the literature. (The author personally is aware of over 100 methodologies or design languages.) These are invariably graphically based, and therefore contain design constructs and notations which range from highly informal to mathematically precise.

Although graphical
notations are intended to "sugar the pill", the best OO design
notations
are based on a *rigourous mathematical foundation*.
This mathematical foundation is important for several reasons.
For one thing, it
explains the precise design content of language constructs, and
allows us to compare design methodologies in a scientific way.
On the other hand, a mathematical foundation provides an exact specification
of a design methodology,
so that all software tools can support the methodology in a standard way.
Finally, for the serious computer science student, it is not any
specific design language which matters per se. (History shows that
the languages tend
to be highly ephemeral!) It is the fundamental design concepts which
matter. These tend to change more slowly, and their longevity makes
serious study worthwhile.

We will focus on OO design notations which are both mature in terms
of development, and
have a rigorous mathematical basis, namely
*class and object diagrams*,
*statecharts* and
* message sequence charts * (mscs).
These formalisms combine in a natural way, and powerful analysis and simulation tools
exist for each. They appear (in some form or other) in nearly all
object oriented analysis models, in particular they are components
of the recent * unified modelling language* which has been
proposed. Thus in the last part of the course we will consider
UML as a way to synthesise these techniques into a complete design
methodology.

Since it is quite focussed, it is as well to say what this course
is *not* about. We do not give a survey of all object oriented design and analysis methods
which can be found in the literature at the present time. This information can be
found in other texts.
We do not even attempt to cover every aspect of object oriented design. Many of these
aspects are still the subject of ongoing research. Instead, we choose to give a comprehensive
introduction to three mature design formalisms which have a rigourous mathematical
foundation, and are applicable to object oriented analysis and design.

For Stockholm University students, the prerequisites of this course are contained in the course OOP I.

For students outside Stockholm University, the prerequisites for this course would normally consist of an introductory course in computer programming, preferably including a structured imperative programming language, such as Ada, C, Modula or Pascal, followed by an introductory course in object-oriented programming. (The choice of language is not too critical, although a strongly typed language is preferable.) Previous exposure to an introductory software engineering course is also highly recommended, in order to fully appreciate the type of problems which the techniques we describe attempt to solve. It is highly beneficial if the student has already taken some form of introductory discrete mathematics course. However, we attempt to be self contained on all three themes of this text, abstract data types, statecharts and message sequence charts.

Our three subjects: class diagrams, statecharts and message sequence charts are covered in more or less equal amount. After completing the course, the student should be able to:

understand the fundamental mathematical concepts of class diagrams;

appreciate how these relate to software engineering problems;

design class and object diagrams;

understand the structure and behaviour of statecharts, including hierarchy, concurrency, non-determinism and dynamic event driven behaviour;

design and analyse the dynamic behaviour of objects using statecharts;

understand the structure and behaviour of message sequence charts,

design and analyse the communication behaviour of objects using message sequence charts;

have an understanding of the syntax and application of UML