Object-Oriented Analysis and Design Workshop
WHAT ARE THE BASIC PRINCIPLES OF GOOD OO DESIGN?
This four-day workshop develops intuitive guidelines for designing efficient and maintainable object-oriented programs.
Object-oriented languages allow improved modularity and abstraction in programs. But to achieve these benefits, programs must be developed using object-oriented design concepts. Object-oriented design (OOD) is the heart of object-oriented programming.
This course shows exactly how good object-oriented design achieves its goals of intuitiveness, maintainability, and reuse. Knowledge of the technical features of good design is then used to develop guidelines for the designer. Available design methods are surveyed and three of them are studied in depth. Through comparison, we identify criteria that enable participants to choose a method best suited to their own work. This is done within a series of design exercises. The exercises are independent of programming language; the course is oriented toward C++.
At the end of the workshop, participants will be able to:
- Explain the concepts that define object-oriented programming.
- Determine the expected benefits and prepare a business case for the use of OOD on a small- to medium-scale project.
- Recognize the design characteristics that will achieve the expected benefits.
- Describe the major categories of OOD methods, and work with one method from each.
- State and apply the criteria for choosing or synthesizing the most appropriate OOD method.
- Understand use cases and apply use case-driven analysis and design.
- Use metrics for OOD quality.
Who will benefit?
This workshop is for experienced programmers and software systems designers who want to fully exploit the potential benefits of object-oriented programming.
Call 1.800.756.9450 to schedule this course or request information about other Socrates Group seminars and workshops. The Socrates Group provides comprehensive instruction in all aspects of client/server computing.
Course Outline:
Overview — Modules and Objects
- Complexity, data, and modularity
- The "information module"
- Packaging the module
- Abstract data types
- Objects and simulation
- Program maintenance and variant objects
- Data hiding and extensibility
- Polymorphic functions
- The goals of object-oriented programming
Concepts of OOP
- Encapsulation and data hiding
- Classes as data types
- Strong and weak typing
- Overloading
- Static and dynamic binding
- Inheritance
- Polymorphism
- Genericity
- Dynamic memory management
- Initialization
- Interactive browsing environments
- Persistence
Design case study
- Simulation problems
- A functional design
- A naive "object based" design
- An object-oriented design
- Comparing the designs
- Anticipating change
- Effects of anticipated changes
- Metrics for modularity
- Code complexity
- Distribution of complexity
- Understanding the maintenance situation
- Relationship between maintainability and reuse
- Defensive analysis—planning for change and reuse
Additional design examples
- Collection classes
- Constraint propagation
- User interface frameworks (MVC and Microsoft's MFC)
- Undo problem
Frameworks
- Reuse of code vs reuse of design
- Frameworks as a design goal
Survey of OOD methods
- The creative evolution approach
- Goals and orientation
- Cunningham & Beck—CRC cards
- Wirfs—Brock, Wilkerson, and Wiener
- Grady Booch
- The data modeling approach
- Goals and orientation
- OMT (Rumbaugh, et al)
- Shlaer/Mellor
- The requirements based approach
- Goals and reasoning
- OBA
- OOSE
A responsibility-driven method
- Requirements model
- Actors and use cases
- Use case driven design
- Analysis model
- Robustness analysis
- Design model
- Interaction diagrams
- Implementation model
- Extension for database
- Extension for real-time systems
- Testing object-oriented systems
Major issues in comparing the methods
- Planning vs prototyping
- Object focus vs system focus
- Responsibility vs data driven
- Non-monotonicity of design reasoning
- Traceability vs maintainability
Object internals
- State analysis
- Object lifecycles
- The state/function matrix
- Implementing knowledge of other objects
- Designing the storage management
Designing components and libraries
- Library architecture
- Abstract vs concrete classes
- Framework design
- The inheritance interface
- Value vs object semantics
- Object context
- Context knowledge: design examples
- Layered designs
- Documenting a library
Metrics for design quality
- Why measure?
- Validity vs metric qualities
- Class complexity metric set
- Critique of complexity metrics
- Direct metrics
- Metrics examples
- Heuristics for design quality
Project planning and scheduling
- Metrics for estimation and scheduling
- Partitioning a project by use cases
- RAD and spiral model development cycles
- Scheduling of reviews
OOP in the business
- Making the business case for OO methods
- Planning the transition
- Workgroup organization
- Organizational maturity levels
- Pitfalls of the transition
- Planning the evaluation
© Copyright 1995, The Socrates Group. All Rights Reserved.