I Designing Object-Oriented Systems
1 Introduction
1.1 Themes and variations
1.1.1 Object terminology
1.1.2 Object computation
1.l.3 Design by Contract
1.2 Paradigms of programming
1.2.1 Procedural programming
1.2.2 Data abstraction
1.2.3 Object-oriented programming
1.3 The object-oriented software life-cycle
1.3.1 Analysis
1.3.2 Design
1.3.3 Implementation
1.4 Beyond object-orientation?
2 Idioms and patterns
2.l Polymorphism
2.l.l Inheritance and delegation in Java
2.l.2 Polymorphism in C++
2.l.3 Assertions in C++
2.l.4 Canonical class idioms
2.2 Idioms in hush
2.2.l The handle/body idiom
2.2_2 Virtual eelf-reference
2.2.3 Dynamic role-switching
2.2.4 The art of hush progamming
2.3 A catalogue of design patterns
2.3. l Creational patterns
2.3.2 Structural patterns
2.3.3 Behavioral patterns
2.4 Event-driven computation
2.4.l The Reactor pattern
2.4.2 Abstract event systems
3 Software engineering perspectives
3.1 Development methods
3.1.l Perspectives of modeling
3.1.2 Requirements engineering -Fusion
3.l.3 Methods for analysis and design - a comparative study
3.2 Identifying objects
3.2. l Modeling heuristics
3.2.2 Assigning responsibilities
3.2.3 Object roles and interaction
3.3 Contracts
3.3.1 Specifying contractnal obligations
3.3.2 Refining contracts
3.3.3 Runtime consistency checking
3.4 Towards a formal approach
4 Applicatiion development
4.l The drawtool application
4.2 Guidelines for design
4.2.l Individual class design
4.2.2 Inheritance and invaxiance
4.2.3 An objective sense of style
4.3 From specification to implementation
4.3.l Structural versus behavioral encapsulation
4.3.2 Model-based specification
4.3.3 Abstract systems and events
II Object-Oriented Languages and Systems
5 Object-oriented programming langnages
5.l The object paradigm
5.1.l A classification of object-oriented languages
5.l.2 Alternative object models
5.1.3 Object extensions of Lisp, C and Prolog
5.l.4 Script languages - integation with Java
5.2 Comparing Smalltalk, Eiffel, C++ and Java
5.2.l Criteria for comparison
5.2.2 Language characteristics
5.3 Design dimensions of object-oriented languages
5.3.1 Object-based versus object-oriented
5.3.2 Towards an orthogonal approach-type extensions
5.3.3 Multi-paradigm languages-logic
5.3.4 Active objects-synchronous Java/C++
5.4 Prototypes-delegation versus inheritance
5.4.l Alternative forms of sharing
5.4.2 Implementation techniques-Self
5.5 Meta-level architectures
8 Component technology
6.1 Objects versus components
6.l.l Definitions
6.l.2 The technoloy matrix
6.l.3 Component myths
6.2 Standards for interoperability
6.2.l Object linking and embedding-COM
6.2.2 Object Request Brokers - CORBA
6.2.3 Persistent objects -ODMG
6.3 The Java platform -technology innovation
6.4 An Internet-based workgroup application
6.5 Crush-extending hush with CORBA
7 Sotftware architecture
7. 1 Elements of architecture
7.2 Case study - multimedia feature detection
7.3 Crossing boundaries
7.3.l Embedded logic - crossing the paradigm boundary
7.3.2 Native objects - crossing the language boundary
7.3.3 Combining Java and C++
7.4 Architectural patterns and styles
7.4. l From technology to style
7.4.2 Case study - perspectives in visualization
7.5 Cross-platform development
III Foundations of Object-Oriented Modeling
8 Abstract data types
8.l Abstraction and types
8.l.l Abstraction in programming languages
8.1.2 A foundational perspective-types as constraints
8.1.3 Objectives of typed OOP
8.2 Algebraic specification
8.2.l Signatures - generators and observers
8.2.2 Equations - specifying constraints
8.2.3 Initial algebra semantics
8.2.4 Objects as algebras
8.3 Decomposition - modules versus objects
8.3.1 Abstract interfaces
8.3.2 Representation and implementation
8.3.3 Adding new generators
8.3.4 Adding new observers
8.4 Types versus classes
9 Polymorphism
9.1 Abstract inheritance
9.2 The subtype relation
9.2.l Types as sets
9.2.2 The subtype refinement relation
9.2.3 Objects as records
9.3 Flavors of polymorphism
9.4 Type abstraction
9.4.1 A simple type calculus
9.4.2 Intersection types
9.4.3 Bounded polymorphism
9.5 Existential types - hiding
9.6 Self-reference
10 Behavioral refinement
10.1 Types as behavior
10.2 Verifying behavioral properties
10.2.l State transformers
10.2.2 Assertion logic
10.3 On the notion of behavior
10.4 Objects as behavioral types
10.4.1 Abstraction and representation
10.4.2 The correspondence relation
10.5 Specifying behavioral compositions
IV Object-Oriented Application Frameworks
11 Business process redesign
11.1 Business objects - SanFrancisco framework
11.2 Business process modeling
11.2.l Logistics-based modeling
11.2.2 Business process simulation
ll.2.3 Example-requests for loans
ll.3 Object-oriented simulation
11.4 Visualization support
11.4.l So many users, so many perspectives
11.4.2 DIVA - distributed visualization architecture
11.5 Migrating from legacy applications
12 Web applications
12.l Objects and the Web
12.l.l Trends and technologies
12.l.2 The Object Web - CORBA/Java versus Microsoft
12.2 Programming the Web -a search for APls
12.2.l Models of computation
12.2.2 Intelligent agents
12.3 The DejaVU experience -jamming (on) the Web
12.4 Software architectures revisited
Appendices
A The language Smallkalk
B The language Eiffel
C The language C++
D The language Java
E The language DLP
F Unified Modeling Language
G Interface Definition Language - IDL
H Hello (CORBA) Universe
I Software development projects
J Answers to questions
References
Index