Component Software : Beyond Object-Oriented Programming / Edition 1

Component Software : Beyond Object-Oriented Programming / Edition 1

by Clemens Szyperski
ISBN-10:
0201178885
ISBN-13:
9780201178883
Pub. Date:
06/15/1998
Publisher:
Addison-Wesley

Hardcover

Current price is , Original price is $49.99. You
Select a Purchase Option (Older Edition)
  • purchase options

Overview

Component Software : Beyond Object-Oriented Programming / Edition 1

Component Software: Beyond Object-Oriented Programming explains the technical foundations of this evolving technology and its importance in the software market place. It provides in-depth discussion of both the technical and the business issues to be considered, then moves on to suggest approaches for implementing component-oriented software production and the organizational requirements for success. The author draws on his own experience to offer tried-and-tested solutions to common problems and novel approaches to potential pitfalls.

Anyone responsible for developing software strategy, evaluating new technologies, buying or building software will find Clemens Szyperskiis objective and market-aware perspective of this new area invaluable.

Helpful Features Include:

  • a uniquely objective comparison of the industry front-runnersi products: Sunis Java Beans; Microsoftis DCOM and Active X; the OMGis CORBA and IIOP
  • a description of the emerging industry standards being developed by consortia such as the OMG and the OPEN Group
  • studies of component-oriented tools and languages, using Java and Component Pascal as examples
  • in-depth discussion of the potential and challenges of component software

© Clemens Szyperski 1998



Product Details

ISBN-13: 9780201178883
Publisher: Addison-Wesley
Publication date: 06/15/1998
Edition description: Older Edition
Pages: 432
Product dimensions: 6.38(w) x 9.58(h) x 0.92(d)

Table of Contents

Preface xiii
PART ONE Motivation: components and markets 1(26)
1 Introduction
3(11)
1.1 Components are for composition
3(1)
1.2 Components: custom-made versus standard software
4(2)
1.3 Inevitability of components
6(1)
1.4 The nature of software and deployable entities
7(3)
1.5 Components are units of deployment
10(1)
1.6 Lessons learned
11(3)
2 Market versus technology
14(7)
2.1 Creating a market
15(1)
2.2 Fundamental properties of component technology
16(2)
2.3 Market forecasts
18(3)
2.3.1 Gartner Group (1994-95)
18(1)
2.3.2 Strategic Focus (January 1995)
18(1)
2.3.3 Ovum (1995)
19(1)
2.3.4 IDC (May 1996)
19(1)
2.3.5 Forrester Research (October 1996)
20(1)
3 Standards
21(6)
3.1 The utmost importance of (quasi) standards
21(2)
3.2 Wiring standards are not enough
23(1)
3.3 Too many competing standards are not useful
24(1)
3.4 Where is software component technology today?
25(1)
3.5 What's next?
25(2)
PART TWO Foundation 27(142)
4 What a component is and is not
29(11)
4.1 Terms and concepts
29(9)
4.1.1 Components
30(1)
4.1.2 Objects
31(1)
4.1.3 Components and objects
31(1)
4.1.4 Modules
32(1)
4.1.5 Whitebox versus blackbox abstractions and reuse
33(1)
4.1.6 Interfaces
34(1)
4.1.7 Explicit context dependencies
35(1)
4.1.8 Component 'weight'
36(2)
4.2 Standardization and normalization
38(2)
4.2.1 Horizontal versus vertical markets
38(1)
4.2.2 Standard component worlds and normalization
38(2)
5 Components, interfaces, and re-entrance
40(32)
5.1 Components and interfaces
40(5)
5.1.1 Direct and indirect interfaces
41(1)
5.1.2 Versions
42(1)
5.1.3 Interfaces as contracts
43(1)
5.1.4 Contracts and non-functional requirements
44(1)
5.1.5 Undocumented 'features'
44(1)
5.2 What belongs to a contract?
45(2)
5.2.1 Safety and progress
45(1)
5.2.2 Non-functional requirements
46(1)
5.2.3 Specifying time and space requirements
46(1)
5.3 Dresscode: formal or informal?
47(1)
5.4 Callbacks and contracts
48(2)
5.5 Examples of callbacks and contracts
50(7)
5.5.1 A directory service
50(1)
5.5.2 A client of the directory service
51(1)
5.5.3 Same client, next release
52(2)
5.5.4 A broken contract
54(1)
5.5.5 Prevention is better than cure
55(1)
5.5.6 Proofing the directory service
56(1)
5.5.7 Test functions in action
56(1)
5.6 From callbacks to objects
57(6)
5.7 From inter-object consistency to object re-entrance
63(4)
5.8 Self-interference and object re-entrance: a summary
67(1)
5.9 Processes and multithreading
68(1)
5.10 Histories
69(1)
5.11 Statement specifications
70(2)
6 Polymorphism
72(24)
6.1 Substitutability -- using one for another
72(4)
6.2 Types, subtypes, and type checking
76(3)
6.3 More on subtypes
79(2)
6.4 Object languages and types
81(1)
6.5 Types, interfaces, and components
82(2)
6.6 The paradigm of independent extensibility
84(2)
6.7 Safety by construction: viability of components
86(3)
6.7.1 Module safety
87(1)
6.7.2 Module safety and metaprogramming
87(1)
6.7.3 Safety in a multi-language environment
88(1)
6.8 Safety, security, trust
89(1)
6.9 Dimensions of independent extensibility
90(2)
6.9.1 Bottleneck interfaces
91(1)
6.9.2 Singleton configurations
91(1)
6.9.3 Parallel, orthogonal, and recursive extensions
91(1)
6.10 Evolution versus immutability of interfaces and contracts
92(2)
6.10.1 Syntactic versus semantic contract changes
93(1)
6.10.2 Contract expiry
93(1)
6.10.3 Overriding law
94(1)
6.11 Other forms of polymorphism
94(2)
7 Object versus class composition, or how to avoid inheritance
96(27)
7.1 Inheritance -- the soup of the day?
96(1)
7.2 More flavors to the soup
97(5)
7.2.1 Multiple inheritance
98(2)
7.2.2 Mixins
100(2)
7.3 Back to basic ingredients
102(1)
7.4 The fragile base class problem
102(2)
7.4.1 The syntactic fragile base class problem
103(1)
7.4.2 The semantic fragile base class problem
103(1)
7.5 Inheritance: more knots than meet the eye
104(5)
7.6 Approaches to disciplined inheritance
109(8)
7.6.1 The specialization interface
109(1)
7.6.2 Typing the specialization interface
110(1)
7.6.3 Behavioral specification of the specialization interface
111(3)
7.6.4 Reuse contracts
114(3)
7.7 From class to object composition
117(2)
7.8 Forwarding versus delegation (or making object composition as problematic as implementation inheritance)
119(2)
7.9 A brief review of delegation and inheritance
121(2)
8 Aspects of scale and granularity
123(9)
8.1 Units of abstraction
124(1)
8.2 Units of accounting
125(1)
8.3 Units of analysis
125(1)
8.4 Units of compilation
126(1)
8.5 Units of delivery
126(1)
8.6 Units of dispute
127(1)
8.7 Units of extension
128(1)
8.8 Units of fault containment
128(1)
8.9 Units of instantiation
129(1)
8.10 Units of loading
129(1)
8.11 Units of locality
130(1)
8.12 Units of maintenance
131(1)
8.13 Units of system management
131(1)
9 Patterns, frameworks, architectures
132(13)
9.1 Forms of design-level reuse
133(10)
9.1.1 Sharing consistency: programming languages
133(1)
9.1.2 Sharing concrete solution fragments: libraries
134(1)
9.1.3 Sharing individual contracts: interfaces
135(1)
9.1.4 Sharing individual interaction architectures: patterns
135(2)
9.1.5 Sharing architectures: frameworks
137(3)
9.1.6 Sharing overall structure: system architectures
140(2)
9.1.7 Systems of subsystems -- framework hierarchies
142(1)
9.2 Interoperability, legacies and re-engineering
143(2)
10 Programming: shades of gray
145(19)
10.1 Different programming methods for different programmers
145(2)
10.2 Programming to a system
147(1)
10.3 Connection-oriented programming
148(2)
10.4 Connection-oriented programming: advanced concepts
150(5)
10.5 Events and messages
155(2)
10.6 Events versus calls
157(1)
10.7 Ordering of events -- causality, races, and glitches
157(2)
10.8 Very late binding: dispatch interfaces and metaprogramming
159(3)
10.9 Degrees of freedom: sandboxing versus static safety
162(1)
10.10 Recording versus scripting
163(1)
11 What others say
164(5)
11.1 Grady Booch (1987)
164(1)
11.2 Oscar Nierstrasz and Dennis Tsichritzis (1992 and 1995)
164(1)
11.3 Gio Wiederhold, Peter Wegner, and Stefano Ceri (1992)
165(1)
11.4 Ivar Jacobson (1993)
166(1)
11.5 Meta Group (1994)
166(1)
11.6 Jed Harris (1995)
166(1)
11.7 Ovum Report on Distributed Objects (1995)
166(1)
11.8 Robert Orfali, Dan Harkey, and Jeri Edwards (1995, 1996)
167(1)
11.9 Johannes Sametinger (1997)
168(1)
PART THREE State of the art 169(102)
12 Object and component 'wiring' standards
171(7)
12.1 Where it all came from
171(2)
12.2 From procedures to objects
173(1)
12.3 The fine print
173(4)
12.3.1 Specification of interfaces and object references
174(1)
12.3.2 Interface relations and polymorphism
174(1)
12.3.3 Naming and locating of services
174(1)
12.3.4 Compound documents
175(2)
12.4 Which way?
177(1)
13 The OMG way: CORBA and OMA
178(16)
13.1 At the heart: the object request broker
178(3)
13.2 From CORBA to OMA
181(2)
13.3 Common object service specifications (CORBAservices)
183(7)
13.3.1 Services supporting enterprise distributed computing
183(1)
13.3.2 Services supporting architectures using fine-grained object
184(6)
13.4 CORBA 2.0- and CORBAservices-compliant implementations
190(2)
13.4.1 Orbix
190(1)
13.4.2 Visibroker
190(1)
13.4.3 System object model (SOM)
191(1)
13.5 CORBAfacilities
192(1)
13.6 Application objects
193(1)
14 The Microsoft way: DCOM, OLE, and ActiveX
194(24)
14.1 The fundamental wiring model: COM
194(5)
14.2 COM object reuse
199(2)
14.3 Interfaces and polymorphism
201(2)
14.3.1 Categories
202(1)
14.3.2 Interfaces and versioning
203(1)
14.4 COM object creation and the COM library
203(2)
14.5 Initializing objects, persistence, structured storage, monikers
205(2)
14.6 From COM to distributed COM (DCOM)
207(1)
14.7 Meta-information and automation
208(1)
14.8 Other COM services
209(2)
14.8.1 Uniform data transfer
209(1)
14.8.2 Dispatch interfaces (dispinterfaces) and dual interfaces
210(1)
14.8.3 Outgoing interfaces and connectable objects
211(1)
14.9 Compound documents and OLE
211(2)
14.10 OLE containers and servers
213(1)
14.11 Controls: from Visual Basic via OLE to ActiveX
214(2)
14.12 Services
216(2)
14.12.1 Microsoft transaction server
216(1)
14.12.2 COM+
217(1)
15 The Sun way: Java and JavaBeans
218(29)
15.1 Java, the language
219(10)
15.1.1 Interfaces versus classes
222(4)
15.1.2 Exceptions and exception handling
226(1)
15.1.3 Threads and synchronization
227(2)
15.2 Java Beans
229(9)
15.2.1 Events and connections
230(2)
15.2.2 Properties
232(2)
15.2.3 Introspection
234(2)
15.2.4 JAR files -- packaging of beans
236(1)
15.2.5 Java AWT enhancements
237(1)
15.3 Other Java services
238(7)
15.3.1 Reflection
238(3)
15.3.2 Object serialization
241(1)
15.3.3 Java distributed object model
242(2)
15.3.4 Java native interface
244(1)
15.4 Final notes -- the case 'Java interfaces versus Java classes'
245(2)
16 More ways than wanderers?
247(4)
16.1 Texas Instruments Composer
247(1)
16.2 Netscape ONE
248(1)
16.3 IBM Visual Age and ComponentBroker
249(2)
17 Strategic comparison
251(8)
17.1 Shared attributes
251(1)
17.2 Differences
252(2)
17.3 Consequences for infrastructure vendors
254(3)
17.4 Consequences for component vendors
257(2)
18 Efforts on domain standards
259(4)
18.1 OMG Domain Technology Committee
259(1)
18.2 OMG BOMSIG
259(1)
18.3 Java domain standard efforts
260(1)
18.4 OLE for process control
260(1)
18.5 Industry associations
261(2)
18.5.1 Information technology industry groupings
261(1)
18.5.2 Trade associations
262(1)
18.5.3 User associations
262(1)
19 Open problems
263(8)
19.1 Domain standards
263(1)
19.2 Rethinking the foundations of software engineering
264(1)
19.3 But is it object oriented?
264(2)
19.4 Object mobility and mobile agents
266(1)
19.5 Foundations: better contracts for better components
267(4)
PART FOUR The next generation 271(58)
20 Component architecture
273(7)
20.1 The roles of an architecture
273(1)
20.2 Conceptualization -- beyond objects?
274(1)
20.3 Definitions of key terms
275(2)
20.4 A tiered component architecture
277(3)
21 Component frameworks
280(26)
21.1 Contributions of a component framework
280(1)
21.2 OpenDoc
281(5)
21.2.1 Some initial remarks
281(1)
21.2.2 Overview of OpenDoc
282(1)
21.2.3 Programming a new OpenDoc part
283(1)
21.2.4 The OpenDoc compound document model
284(1)
21.2.5 OpenDoc extensions
284(1)
21.2.6 Odd ends
285(1)
21.3 BlackBox Component Framework
286(13)
21.3.1 Carrier-rider-mapper design pattern
287(2)
21.3.2 Directory objects
289(1)
21.3.3 Hierarchical model view separation
290(3)
21.3.4 Container modes
293(2)
21.3.5 Cascaded message multicasting services
295(2)
21.3.6 Advanced applications based on compound documents
297(2)
21.4 BlackBox versus OpenDoc
299(2)
21.5 Portos and Denia -- a hard real-time component framework and its development environment
301(5)
21.5.1 Structure of Portos
301(2)
21.5.2 Real-time scheduler
303(1)
21.5.3 Cross-development environment Denia
304(2)
22 Component development
306(11)
22.1 The methodology -- component-oriented programming
306(8)
22.1.1 Problems of asynchrony
307(1)
22.1.2 Multithreading
307(1)
22.1.3 Learning from circuit design
308(1)
22.1.4 Living without implementation inheritance
308(1)
22.1.5 Nutshell classes
309(1)
22.1.6 Language support
310(1)
22.1.7 Dynamic base objects with forwarding semantics
310(2)
22.1.8 Caller encapsulation
312(2)
22.2 The environment -- selecting target frameworks
314(1)
22.3 The tool -- selecting the programming language
315(2)
23 Component distribution and acquisition
317(2)
24 Component assembly
319(4)
24.1 Visual component assembly
319(1)
24.2 Compound documents to supersede visual assembly
320(1)
24.3 Components beyond graphical user interface environments
320(1)
24.4 Managed and 'self-guided' component assembly
321(1)
24.5 Component evolution
321(2)
25 On the horizon
323(6)
25.1 Advanced object composition
323(2)
25.1.1 Delegation
323(1)
25.1.2 Split objects
324(1)
25.1.3 Environmental acquisition
324(1)
25.1.4 Dynamic inheritance
325(1)
25.2 New forms of object and component abstraction
325(1)
25.2.1 Subject-oriented programming
325(1)
25.2.2 Aspect-oriented programming
326(1)
25.3 Interesting combined approaches
326(3)
25.3.1 Webtops
326(1)
25.3.2 Orbix on ISIS
326(3)
PART FIVE Markets and components 329(16)
26 Future markets
331(4)
26.1 Components
331(1)
26.2 Tools
331(2)
26.2.1 Component design and implementation tools
332(1)
26.2.2 Component testing tools
332(1)
26.2.3 Component assembly tools
332(1)
26.2.4 Component system diagnosis and maintenance
333(1)
26.3 Services
333(2)
26.3.1 Component system and framework architects
333(1)
26.3.2 Component assembly consultants
334(1)
26.3.4 Component configuration management
334(1)
26.3.4 Component warehouses, marketing, and consulting
334(1)
27 New professions
335(4)
27.1 Component system architect
335(1)
27.2 Component framework architect
336(1)
27.3 Component programmer
337(1)
27.4 Component assembler
337(2)
28 A Component marketing paradox
339(6)
28.1 Branding
340(1)
28.2 Pay-per-use
340(2)
28.3 Co-placement of advertisements
342(1)
28.4 Leveraging on newly created markets
342(1)
28.5 Leverage of integrative forces
343(2)
Epilogue 345(1)
Appendix A Component Pascal versus Java 346(4)
Bibliography 350(16)
Glossary 366(17)
Index 383

Customer Reviews

Most Helpful Customer Reviews

See All Customer Reviews