Full description [Brief description]:

Programmers all over the world are now building systems with object-oriented languages, such as Java, Eiffel, C++ and Smalltalk. All too often, however, object-oriented programming proceeds with no guiding design principles. The result: instant “legacy code” — code that’s as difficult to understand, extend and maintain as any traditional, non-object-oriented code.

This course teaches the participants how to use the Synthesis Methodology to design an object-oriented business system by transforming requirements-analysis deliverables into object-oriented design deliverables. Participants will practice the demonstrated techniques on the design of a portion of a business application. They will also learn UML for designing and documenting an object-oriented design.

The course will also clarify the fundamental principles of object orientation, set out criteria for robust object-oriented systems design that leads to high-quality, maintainable and reusable code.

The course is suitable both for beginners to object orientation and for experienced object-oriented programmers. For a group comprising mainly beginners, the instructor will place greater emphasis on fundamental principles and less on the more advanced topics.

Detailed contents:

In this course you will learn:
An outline of Synthesis design — The design activities of Synthesis
UML notation for design
  • The goals of UML
  • The class symbol
  • The class diagram
  • Inheritance
  • Aggregate objects and their components
  • Object sequence and collaboration diagrams
  • State-transition diagrams
Candidate classes
  • Discovering classes
  • Organizing classes into hierarchies
  • Uses and abuses of inheritance
Populating classes with features (attributes and operations)
  • Basic sources of features
  • Responsibility-derived features
  • Obligation-derived features
Design of use cases
  • Basic anatomy of use case design
  • The "manager" or "controller" object
  • Initiating the use case: Event recognition
Designing from components of the requirements
  • Designing event recognizers
  • Designing use case managers
  • Designing relationships: association, aggregation
Class internal design
  • State-spaces and behavior of objects
  • Class invariants, preconditions and postconditions
  • Connascence and encumbrance
  • Class cohesion: a class and its methods
  • The domains of classes
  • The source of classes in each domain
Judging the quality and appropriateness of standard patterns
  • Reusability versus efficiency
  • Reusability versus simplicity
  • Designing classes for the application and for the library
Abuses of inheritance in object-oriented design
  • Mistaken aggregates
  • Inverted hierarchy
  • Confusing class and instance
  • Misapplying isa
  • The danger of polymorphism
Class interfaces
  • Mix-in classes
  • Rings of methods
  • Quality of a class interface