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