home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 16 Announce / 16-Announce.zip / doguide.zip / DOGUIDE.TXT
Text File  |  1995-09-21  |  122KB  |  2,395 lines

  1. This file contains a text only excerpt from "The Essential Distributed
  2. Objects Survival Guide" by Robert Orfali, Dan Harkey, and Jeri Edwards
  3. (Wiley, September 1995).  This excerpt was reproduced with permission
  4. of the publisher.  All rights reserved.
  5.  
  6. This file contains the following sections:
  7.  
  8.      - Title
  9.      - Back Cover Text
  10.      - Executive Overview
  11.      - Worldwide Ordering Information
  12.      - Copyright Page
  13.      - Foreword
  14.      - Preface
  15.      - Acknowledgements
  16.      - Notices
  17.      - Contents at Glance
  18.      - Contents
  19.      - List of Boxes
  20.      - Chapter 2. From Distributed Objects To Smart Components
  21.      - Trademarks
  22.  
  23.  
  24.  
  25. ----------------------------- Title ------------------------------------
  26.  
  27.  
  28.                          The Essential
  29.  
  30.                       Distributed Objects
  31.  
  32.                          Survival Guide
  33.  
  34.          Robert Orfali  -  Dan Harkey  -  Jeri Edwards
  35.  
  36.  
  37. ----------------------- Back Cover Text --------------------------------
  38.  
  39. Client/Server / Networking                                    $29.95 USA
  40.                                                               $39.50 CAN
  41.  
  42.  
  43.           Distributed Objects Are Closer Than You Think
  44.  
  45. Distributed Objects and components are a revolution in the making.
  46. They will change the way we develop, build, assemble, sell, and
  47. distribute software.  Their effects will be felt by everyone in the
  48. software business--developers, integrators, IS shops, power users,
  49. and distributors.
  50.  
  51.   * How do you get ready for the the distributed objects revolution?
  52.  
  53.   * Should you choose CORBA, OLE, or OpenDoc?
  54.  
  55.   * Are you having trouble juggling all the new acronyms, products,
  56.     and standards?
  57.  
  58.   * What do components have to do with client/server?
  59.  
  60.  
  61.                      You need a guide!
  62.  
  63. Award-winning authors Orfali, Harkey, and Edwards combine detailed
  64. technical explanations with their unique brand of offbeat humor--using
  65. clever cartoons, controversial soapboxes, and witty quotes.  Here are
  66. some of the exclusives you'll find in this information-packed
  67. Survival Guide:
  68.  
  69.   * Covers CORBA, OLE, and OpenDoc in depth, and compares them.
  70.  
  71.   * Explains how distributed objects, components, and client/server
  72.     come together.
  73.  
  74.   * Covers components suites, business objects, compound documents,
  75.     frameworks, and more.
  76.  
  77.   * Covers key products, such as SOM, Orbix, ObjectBroker, Taligent,
  78.     NeXT, Newi, and DOE.
  79.  
  80. You'll get all the practical information you need to make informed
  81. decisions about distributed objects, component technologies, and their
  82. standards.  Don't make a move without this book!
  83.  
  84. Robert Orfali, Dan Harkey and Jeri Edwards make
  85. their living designing, building, and evaluating distributed objects
  86. and client/server products.  Their Essential Client/Server
  87. Survival Guide won the Software Development/Jolt Award for Best
  88. Book of 1994.  Robert and Dan are distributed object consultants at
  89. IBM, while Jeri is Director of Transaction Processing and Client/Server
  90. Development at Tandem Computers.  She also manages a large development
  91. effort for creating mission-critical server objects.
  92.  
  93.  
  94. John Wiley & Sons
  95. Professional, Reference, and Trade Group
  96. 605 Third Avenue, New York, NY 10158-0012
  97. New York - Chichester - Bisbane - Toronto - Singapore
  98.  
  99.  
  100.  
  101. ----------------------- Executive Overview ----------------------------
  102.  
  103.  
  104. Title: The Essential Distributed Objects Survival Guide (Wiley, Sept 1995)
  105.        by Orfali, Harkey, and Edwards
  106.        604 pages, 260 illustrations, IBM Puborder: SR28-5898
  107.        ISBN 0-471-12993-3, $29.95
  108.  
  109. This new book by award winning client/server authors Bob Orfali and
  110. Dan Harkey of IBM, and Jeri Edwards, director of OLTP and object
  111. development at Tandem Computers, provides a gentle introduction to
  112. distributed objects for mere mortals.  The 600-page book follows the
  113. same friendly style as the authors' "Essential Client/Server Survival
  114. Guide," (Wiley 1994; ISBN 0-471-13119-9; Puborder SR28-5572)--winner
  115. of the Software Development Jolt Award for Best Computer Book of 1994.
  116.  
  117. The new Survival Guide provides comprehensive coverage of the big three
  118. object/component technologies--CORBA, OLE, and OpenDoc.  It also provides
  119. an overview of Taligent's CommonPoint, Newi, and OpenStep.  The book
  120. explains concepts such as components, frameworks, and business objects.
  121. If you don't have much time, you can take the 200-page scenic tour; it
  122. provides an overview without getting into the technical details.  The
  123. book includes in-depth comparisons of CORBA/OpenDoc versus COM/OLE and
  124. lots of cartoons.  Here's a snapshot of the Table of Contents:
  125.  
  126. Part 1: Client/Server with Distributed Objects   (42 pages)
  127.  
  128.   Introduces distributed objects and components and what objects do
  129.   for client/server systems.
  130.  
  131. Part 2: CORBA: The Distributed Object Bus  (171 pages)
  132.  
  133.   Introduces CORBA 2.0, IDL, and Interface Repository.  Covers
  134.   all 16 CORBA object services.  Provides an overview of the key
  135.   commercial ORBs--including SOM, Orbix, ObjectBroker, DOE,
  136.   ORB Plus, and Expersoft's PowerBroker.
  137.  
  138. Part 3: Frameworks for Business Objects and Components  (120 pages)
  139.  
  140.   Defines frameworks, business objects, and compound documents.
  141.   Covers CORBA's Common Facilities, OpenDoc, OLE, OpenStep, NeXT,
  142.   CommonView, and Newi.
  143.  
  144. Part 4: OpenDoc Under the Hood (100 pages)
  145.  
  146.   Covers the OpenDoc Object Model, Bento, and OSA Scripting.
  147.  
  148. Part 5: OLE/COM Under the Hood (110 pages)
  149.  
  150.   Covers the COM object model, OLE, OCXs, and OLE automation.
  151.   Opinionated comparisons of OLE with CORBA/OpenDoc abound (but
  152.   are carefully contained in Soapboxes).
  153.  
  154. Part 6: Component Nirvana: Client/Server with Parts (30 pages)
  155.  
  156.   Covers COM/OLE-CORBA/OpenDoc interoperability and provides comparison
  157.   tables of the two models.  The book concludes with a discussion of
  158.   component suites and the business infrastructure required for a
  159.   component industry to succeed.
  160.  
  161.  
  162. All Survival Guides are available in local bookstores, IBM puborder,
  163. by calling Wiley at (800) CALL WILEY, by sending an e-mail inquiry to
  164. compbks@jwiley.com, or by calling the IBM Education and Training
  165. Bookstore at (800) 426-8322. Corporate and bulk orders can be placed
  166. by calling 1-(800) 850-6789.
  167.  
  168.  
  169.  
  170. ---------------- Worldwide Ordering Information --------------------------
  171.  
  172.  
  173. Ordering Information
  174.  
  175. This book is available in bookstores or it can be ordered by calling
  176. John Wiley & Sons at 1-(800) CALL WILEY or by sending an e-mail inquiry
  177. to compbks@jwiley.com; from IBM Mechanicsburg (IBM Publication number
  178. SR28-5898); or by calling the IBM Education and Training Bookstore at
  179. (800) 568-6294.  Corporate and bulk orders can be placed by calling
  180. 1-(800) 850-6789.
  181.  
  182. Complete and up to date ordering information can be found on
  183. the John Wiley & Sons World Wide Web Home page at http:\\www.wiley.com.
  184.  
  185. International Orders can be placed at the following addresses:
  186.  
  187.  
  188. Asia
  189.  
  190. Asian Distribution Centre For:
  191. Bangladesh, Brunei, Cambodia, Hong Kong, India, Indonesia, Laos,
  192. Malaysia, Mauritius, Myanmar, Nepal, Pakistan, People's Republic of China,
  193. Philippines, Singapore, South Korea, Sri Lanka, Taiwan, Thailand, Vietnam
  194.  
  195. John Wiley & Sons (ASIA) Pty. Ltd.
  196. 2 Clementi Loop
  197. Jin Zing Distriparl
  198. Singapore 0512
  199. Telephone: 65 258 1147
  200. Fax: 65 258 0697
  201.  
  202.  
  203. Canada
  204.  
  205. John Wiley & Sons Canada, Ltd.
  206. Trade Sales, Marketing and Editorial Division
  207. 5353 Dundas Street West, 4th Floor
  208. Etobicoke, ON
  209. M9B 6H8
  210. Phone (416)236-4433
  211. Fax (416)236-4448
  212.  
  213.  
  214. Europe
  215.  
  216. John Wiley & Sons, Ltd.
  217. Customer Service
  218. Distribution Centre
  219. 1 Oldlands Way
  220. Shripney
  221. Bognor Regis
  222. PO22 9SA, UK
  223. Telephone: (+44) (0) 1243 829121
  224. Fax: (+44) (0) 1243 820250
  225.  
  226.  
  227. Australia
  228.  
  229. Jacaranda Wiley Ltd.
  230. 33 Park Road (P.O. Box 1226)
  231. Milton, Queensland 4064
  232. Telephone: (07) 369-9755
  233. Toll free: 008 777-474
  234. Fax: (07) 369-9155
  235.  
  236.  
  237.  
  238. ---------------------- Copyright Page ---------------------------------
  239.  
  240.  
  241. Publisher:  Katherine Schowalter
  242. Editor:  Theresa Hudson
  243. Managing Editor: Frank Grazioli
  244. Text Design & Composition: Robert Orfali, Dan Harkey, and Jeri Edwards
  245.  
  246. Designations used by companies to distinguish their products are often
  247. claimed as trademarks.  In all instances where John Wiley & Sons, Inc.
  248. is aware of a claim, the product names appear in initial capital or all
  249. capital letters.  Readers, however, should contact the appropriate
  250. companies for more complete information regarding trademarks and
  251. registration.
  252.  
  253. This text is printed on acid-free paper.
  254.  
  255. Copyright (c) 1994 by John Wiley & Sons, Inc.
  256.  
  257. All rights reserved.  Published simultaneously in Canada.
  258.  
  259. This publication is designed to provide accurate and authoritative
  260. information in regard to the subject matter covered.  It is sold with the
  261. understanding that the publisher is not engaged in rendering legal,
  262. accounting, or other professional service.  If legal advice or other
  263. expert assistance is required, the services of a competent professional
  264. person should be sought.
  265.  
  266. Reproduction or translation of any part of this work beyond that
  267. permitted by section 107 or 108 of the 1976 United States Copyright Act
  268. without the permission of the copyright owner is unlawful.  Requests for
  269. permission or further information should be addressed to the Permissions
  270. Department, John Wiley & Sons, Inc.
  271.  
  272. Library of Congress Cataloging-in-Publication Data:
  273.  
  274. Orfali, Robert.
  275.    The essential distributed objects survival guide  /
  276.                  Robert Orfali, Dan Harkey, Jeri Edwards
  277.         p.     cm.
  278.    Includes index.
  279.    ISBN 0-471-12993-3
  280.  
  281.    Additional CIP Data available upon request.
  282.  
  283. Printed in the United States of America
  284. 10 9 8 7 6 5 4 3 2 1
  285.  
  286.  
  287.  
  288. ---------------------- Foreword ---------------------------------------
  289.  
  290.  
  291. Greetings, Earthlings!  I'm Zog, the captain of the Martian team.
  292. My team and I first visited earth over a year ago to understand what
  293. client/server is all about.  During that visit, we discovered the
  294. Essential Client/Server Survival Guide and found it to be absolutely
  295. vital in our mission to explore this new technology.  So we were
  296. very excited to hear about The Essential Distributed Objects
  297. Survival Guide by the same authors.  We returned to earth to explore
  298. this new technology and pick up a copy of the book.  It was just
  299. what we were looking for.
  300.  
  301. So what did I like about this book?  It felt like it was talking
  302. directly to me and to my crew in a friendly voice.  That's very
  303. important when you're from a foreign planet.  We like books that are
  304. painless, fun to read, and contain good Martian humor.  We were
  305. apprehensive at first about objects.  Here at Mars, we're still
  306. trying to figure out how to use client/server, and then here comes
  307. this new technology called distributed objects.  As it turns out,
  308. the timing was perfect.  We now believe that objects are the only
  309. way to build our intergalactic client/server webs.  Yes, we will be
  310. connected to the Internet.  Hopefully, our CORBA-compliant
  311. components will be able to talk to yours.
  312.  
  313. We really like this component stuff--we want our objects to be smart
  314. from the very start and play in suites.  We were disappointed to
  315. find out that you earthlings are still at war with each other over
  316. component technologies.  Can't you have a single infrastructure?
  317. All this CORBA/OpenDoc versus COM/OLE stuff can really be confusing.
  318. Which component standard should we build on?  This Survival Guide
  319. provides a very complete, in-depth coverage of CORBA, OpenDoc, and
  320. COM/OLE.  We haven't seen anything like it in your earthling
  321. bookstores.  We appreciated its coverage of other object
  322. technologies--including OpenStep, Taligent, and Newi.  We like to
  323. fully understand our options.
  324.  
  325. This latest Survival Guide is another masterpiece from the authors.
  326. The Soapboxes really helped us understand the issues and what the
  327. latest earthling debates are all about.  We like to hear strong
  328. opinions instead of just sterilized information.  The artwork and
  329. cartoons are absolutely wonderful.  I like to see pictures of myself
  330. in books (and especially on the cover).  The ubiquitous scenarios
  331. show how objects really interact with each other.  It's not that
  332. inert boring stuff you read in the textbooks.  It makes objects come
  333. to life.
  334.  
  335. In summary, this Survival Guide gave us a comprehensive tour of
  336. distributed object technology and components.  We now have a better
  337. idea of how to use this technology in practical Martian situations.
  338. The personal touch was great; it felt like we had our own private
  339. tour.  I cannot recommend this book enough to my fellow Martians.
  340. Through this foreword, I highly recommend this book to you
  341. Earthlings.  If I can understand components, so can you.
  342.  
  343.  
  344.                          Zog
  345.  
  346.  
  347.  
  348. ---------------------- Preface ----------------------------------------
  349.  
  350.  
  351. Objects: A Revolution Within the Revolution
  352.  
  353. Client/server computing has created a deep paradigmatic shift in our
  354. industry.  It's replacing monolithic mainframe applications with
  355. applications split across client and server lines.  The client--
  356. typically a PC--provides the graphical interface, while the server
  357. provides access to shared resources--typically a database.
  358. Distributed objects are a paradigm shift within a paradigm shift--
  359. they're a new client/server revolution within the client/server
  360. revolution.  Objects break-up the client and server sides of an
  361. application into smart components that can play together and roam
  362. across networks.
  363.  
  364.  
  365. Why Another Revolution?
  366.  
  367. So why is there another client/server revolution when the first one
  368. is still in full swing?  The answer--as usual--is newer and better
  369. hardware and the demand for applications that match the new hardware.
  370. The first client/server revolution was driven by new hardware--PCs
  371. and Ethernet LANs forever changed the way we interact with our
  372. applications.  Gone are the green-screen uglies associated with
  373. terminal-attached mainframes.  Instead, we have GUIs.  There's no
  374. way to turn back the clock.
  375.  
  376. The second client/server revolution is also being fueled by advances
  377. in hardware.  This time, Wide Area Networks (WANs) are breaking the
  378. proximity barriers associated with Ethernet LANs.  Millions of us
  379. are getting a firsthand taste--thanks to the Internet, CompuServe,
  380. and America Online--of the joys of intergalactic networking.  We will
  381. soon want a lot more.  We won't be satisfied with just navigating
  382. through information and chatting;  we will want to conduct our
  383. business on these networks.  Money will start changing hands.  People
  384. will either transact directly or through their electronic agents.
  385. In the age of intergalactic transactions, there's no going back to
  386. single-server, departmental client/server LANs.  Mosaic has changed
  387. that forever.
  388.  
  389. So, the second era of client/server is being driven by very high
  390. speed, low-cost, wide-area bandwidth.  The telephone companies and
  391. WAN providers are getting ready to unleash almost unlimited
  392. bandwidth--they're wiring the entire planet for fiber optic speeds.
  393. In addition, network-ready PCs running commodity multi-threaded
  394. operating systems--such as OS/2 Warp Connect and Windows 95--are now
  395. capable of running as both clients and servers.
  396.  
  397. This means that we may soon have millions of servers interconnected
  398. across the planet at ten times LAN speeds.  This is the good news.
  399. The bad news is that our existing client/server infrastructure is
  400. geared for single-server departmental LANs; it cannot cope with the
  401. new intergalactic demands--millions of servers and applications that
  402. can spawn trillions of distributed transactions.  Distributed
  403. objects are our only hope for dealing with the new client/server
  404. infrastructure requirements.
  405.  
  406.  
  407. Why Distributed Objects?
  408.  
  409. A distributed object is essentially a component.  This means it's a
  410. blob of self-contained intelligence that can interoperate across
  411. operating systems, networks, languages, applications, tools, and
  412. multivendor hardware.  Without stealing the punchline from this
  413. Survival Guide, we can say that distributed objects--when packaged
  414. as components--provide the only middleware that can make
  415. client/server computing really work at an intergalactic level.
  416.  
  417. This Survival Guide is not an academic exercise on the wonders of
  418. objects.  For the first time in the 22-year history of objects, we
  419. have true intergalactic standards for building object components
  420. that are interoperable, transactional, secure, and self-managing.
  421. We also have standards that allow these components to play in
  422. suites--on the desktop or across the enterprise.  The industry even
  423. has two "standards" to choose from: COM/OLE from Microsoft and CORBA
  424. from the OMG (augmented by OpenDoc from CI Labs).  And we are
  425. starting to see applications and products that build on these
  426. standards.
  427.  
  428.  
  429. Building Applications With Components
  430.  
  431. Distributed objects and components will change the way we architect,
  432. develop, package, distribute, license, and maintain our software.
  433. The component is a unit of packaging, distribution, and maintenance.
  434. It's also a unit of deployment on the intergalactic network.  A
  435. component does not operate in a vacuum.  It lives on a distributed
  436. object bus--for example, CORBA or COM.  The component derives its
  437. system smarts from the bus.  It is architected to work with other
  438. components from the very start.  In fact, the object buses are now
  439. adding new services that -components can inherit at build time or
  440. even at run time to achieve higher levels of collaboration with other
  441. independent components.
  442.  
  443. This intelligent infrastructure makes it easier to develop and
  444. assemble independent components.  It lowers the barriers to entry
  445. and changes the economics of software.  Components bring the fun
  446. back to software development.  Smaller ISVs will find it easier to
  447. create components for the functions they do best without having to
  448. reinvent the entire infrastructure.  The object bus provides a
  449. unified systems architecture that can be of tremendous help to IS
  450. shops and system integrators.  Finally, components will help lower
  451. the costs of software development and maintenance for regular
  452. software houses.  Consumers also win because they can control when
  453. to upgrade their software with add-on components to get more
  454. customized systems.
  455.  
  456. The beauty of all this is that a single object bus can support
  457. components that run in the same process as well as components that
  458. run across an intergalactic network.  It's one bus that really
  459. scales.  You can use it for both standalone applications and
  460. intergalactic ones.  In addition, the applications we can create are
  461. unlike any we've seen before.   Component agents will watch for
  462. network events and act on their own to submit transactions or gather
  463. data.  Components will come together in real time to create a
  464. one-time application tailored for a particular customer.  New
  465. applications--some yet to be imagined--will generate millions of new
  466. transactions daily.  These include electronic travel agencies,
  467. health-care portfolio managers, financial agents, shopping mavens,
  468. and career managers.  These applications can transact for you in all
  469. kinds of intergalactic electronic bazaars that specialize in every
  470. known form of trading.
  471.  
  472.  
  473. What This Survival Guide Covers
  474.  
  475. This book explains distributed objects and components in depth.  It
  476. consists of six parts--each one can almost be read independently.
  477. We'll give you a short description of what the parts cover.  If you
  478. find the terminology too foreign, then by all means read the book
  479. to find out what it all means.
  480.  
  481.  
  482.  
  483. -  Part 1 starts with an overview of what objects can do for
  484.    client/server.  We compare distributed objects with competing
  485.    client/server application environments--including SQL databases,
  486.    TP Monitors, and Groupware.  If you come from a client/server
  487.    background, this discussion will help you understand what the
  488.    distributed object fuss is all about.  In this part, we also
  489.    explain what objects are and when an object is a component.  We
  490.    provide a very comprehensive description of the benefits of
  491.    components and their attributes.  Components do more than just
  492.    client/server--they change the nature of computing, especially on
  493.    the desktop.
  494.  
  495. -  Part 2 covers the CORBA object bus and system-level object services
  496.    in great detail.  If you're not interested in all the low-level
  497.    details, the first chapter provides a birds-eye view of CORBA.
  498.  
  499. -  Part 3 covers business objects and application-level frameworks--
  500.    including CORBA frameworks, OpenDoc, OLE, Taligent, OpenStep, and
  501.    Newi.  Of course, the most important of these frameworks are
  502.    currently OLE and OpenDoc.  But the rest of the frameworks also
  503.    have important features that you should know about.   Many of
  504.    these features may eventually be merged with either OLE or OpenDoc.
  505.  
  506. -  Part 4 covers OpenDoc in depth.  We go over all the features of
  507.    its compound document application-level framework.
  508.  
  509. -  Part 5 covers COM/OLE in depth.  We cover both OLE's object bus--
  510.    called COM--and its compound document application-level framework.
  511.  
  512. -  Part 6 helps you narrow down your options.  We try and bring it
  513.    all together and speculate on where it's all going.
  514.  
  515.  
  516. This book contains a detailed overview of CORBA, OpenDoc, and
  517. COM/OLE.  If this is not enough, we include a bibliography and
  518. pointers on where to go for more information.
  519.  
  520.  
  521. How to Read This Book
  522.  
  523. As we recommend in all our books, the best way to approach this
  524. Survival Guide is to ask your boss for a one-week, paid sabbatical
  525. to go sit on a beach and read it.  Tell him or her that it's the
  526. cheapest way to revitalize yourself technically and find out all
  527. there is to know about distributed objects, components, OpenDoc,
  528. CORBA, OLE, Taligent, and OpenStep.  Once you sink into that
  529. comfortable chair overlooking the ocean, we think you'll find the
  530. book a lot of fun--maybe even downright relaxing.  You won't get
  531. bored; but if you do, simply jump to the next part until you find
  532. something you like.  You can jump to any part of the book and start
  533. reading it.  We recommend, however, that you carefully go over the
  534. cartoons so that you have something to tell the boss back at the
  535. office.
  536.  
  537.  
  538. What Are the Boxes For?
  539.  
  540. We use shaded boxes as a way to introduce concurrent threads in the
  541. presentation material.  It's the book version of multitasking.  The
  542. Soapboxes introduce strong opinions or biases on some of the more
  543. controversial topics of distributed object computing (see the next
  544. Soapbox).  Because the discipline is so new and fuzzy, there's lots
  545. of room for interpretation and debate--so you'll get lots of Soapboxes
  546. that are just another opinion (ours).  The Briefing boxes give you
  547. background or tutorial type information.  You can safely skip over
  548. them if you're already familiar with a topic.  The  Detail boxes
  549. cover some esoteric area of technology that may not be of interest
  550. to the general readership.  Typically, the same readers that skip
  551. over the briefings will find the details interesting (so you'll still
  552. get your money's worth).  Lastly, we use Warning boxes to let you
  553. know where danger lies--this is, after all, a Survival Guide.
  554.  
  555.  
  556. Who Is This Book For?
  557.  
  558. This book is for anybody who's associated with the computer industry
  559. and needs to understand where it's heading.  Within three years we
  560. will all be involved with objects and components in some form or
  561. another--as users, assemblers, integrators, system developers, and
  562. component developers.  All new software will be built using
  563. components.
  564.  
  565. If you have very little time to spare (or little interest in the
  566. technical details), we suggest that you take the scenic route.  It
  567. includes all of Part 1, the first chapter of Part 2, and all of Parts
  568. 3 and 6.  Look for the scenic route signs at the beginning of these
  569. chapters and in the Table of Contents.  This will let you postpone
  570. reading the more technical chapters, but you will still have a solid
  571. overview of distributed objects and components, their standards, and
  572. the key products.
  573.  
  574.  
  575. How Does This Survival Guide Compare With Our Previous Book?
  576.  
  577. Our previous book, the Essential Client/Server Survival Guide
  578. (Wiley, 1994) provides an overview of the entire field of
  579. client/server computing--including NOSs, SQL databases, TP Monitors,
  580. groupware, system management, tools, and distributed objects.  This
  581. Survival Guide starts out where the other one leaves off.  It focuses
  582. entirely on distributed objects and components.  We felt there was
  583. a lot more to say about distributed objects than we could cover in
  584. the previous Survival Guide.  If you read our previous book, you'll
  585. notice that we borrowed about 50 pages from it to make this one stand
  586. on its own.  If you did not read the previous Survival Guide, Chapter 1
  587. reviews the main ideas we developed there.
  588.  
  589. Some of the ideas in this Survival Guide appeared in articles we
  590. published over the last 10 months in major trade publications--
  591. including BYTE, Datamation, Object Magazine, Dr. Dobb's Journal, and
  592. others.  We're grateful to the senior editors of these magazines for
  593. providing us a forum to develop our ideas.  However, we felt we could
  594. not tell the distributed components story--including CORBA, OpenDoc,
  595. and OLE--in articles that average 10 pages or less.  These component
  596. technologies are like a giant tidal wave that's heading our way to
  597. reshape our industry.  They deserve a bit more scrutiny than what
  598. you read in a fast-paced magazine article.  So we finally decided
  599. we had to write this Survival Guide to get this story off our chests.
  600. We wrote it.  Now it's in your hands--totally unabridged.
  601.  
  602. We hope you enjoy the reading, the cartoons, and the Soapboxes.  Drop
  603. us a line if you have something you want to "flame" about.   We'll
  604. take compliments too.  We're relying on word-of-mouth to let people
  605. know about the book, so if you enjoy it, please spread the word.
  606. Finally, we want to thank you, as well as our Martian friends, for
  607. trusting us to be your guides.
  608.  
  609.  
  610.  
  611.      ======== Soapbox: Putting Our Biases on the Table ========
  612.  
  613. The world will always be divided into two groups.  You're never
  614. going to have just a total solution.  The world will never be
  615. totally OLE, and probably never totally CORBA.
  616.  
  617.                      -- Colin Newman, Marketing Director
  618.                         Iona
  619.                         (March, 1995)
  620.  
  621. Welcome to your first Soapbox!  We decided to confess right from
  622. the start that we have strong biases on how we view this object
  623. business (you can still get a refund after reading this).  Unless
  624. you spent the last year hiding on some deserted island, you
  625. probably know that there's a full-fledged object war going on.
  626. This war is being fought in the press, on the Internet, in industry
  627. conferences, and with white papers.  What's at stake is the future
  628. of the software industry and client/server.  On one side is
  629. Microsoft, with its COM/OLE component infrastructure and object
  630. bus--it's the de facto object standard.  On the other side is the
  631. rest of the industry, with its support of OMG's CORBA as the
  632. object bus--it's the de jure object standard.  In addition, there's
  633. the OpenDoc consortium that provides an "open" compound document
  634. infrastructure based on CORBA.
  635.  
  636. In this Beta versus VHS war for component standards, you may have
  637. to take sides--unless you have enough resources to support both
  638. standards.  For us, just writing a Survival Guide that fully
  639. covers both standards was a huge effort.  And it takes a lot more
  640. effort to develop and support code that runs on two standards.
  641. Our industry can at most support two standards.  But, we briefly
  642. cover Taligent, Newi, and OpenStep just to give you an idea of
  643. what else is happening in distributed objects.  We also show how
  644. these highly creative "alternate standards" are starting to merge
  645. with the big two.  However, the emphasis in this
  646. book is on the "big two":  CORBA/OpenDoc and COM/OLE.  Both of
  647. these standards are here to stay.  Neither will disappear soon.
  648. And we may have to live with both for a very long time; but it
  649. won't be easy.
  650.  
  651. We believe that CORBA is much better than COM/OLE, at least
  652. technically.  We also feel more comfortable with a de jure
  653. standard that's not controlled by a single company.  Microsoft--
  654. like the old IBM--is trying to single-handedly control standards.
  655. It believes it can define a homogeneous world where all the
  656. important standards will be theirs.  But we believe that this
  657. single-system view of the world just doesn't work in the case of
  658. components, which--by definition--must be heterogeneous,
  659. multiplatform, open, interoperable, and supported by multiple
  660. vendors.  It's best to do this with de jure and open standards.
  661. OLE may become "Microsoft's SAA."
  662.  
  663. You may hear from naysayers that CORBA--with its 500+ members--is
  664. "designed by committee" and that it may be best to have a single
  665. vendor do the whole design.  This is not the case.  Some standard
  666. bodies have rightfully acquired a bad name.  However, CORBA is
  667. almost a labor of love by some of the best object technologists
  668. in the business.  The CORBA standards move fast and are very
  669. creative.  As you'll see in this Survival Guide, CORBA compromises
  670. typically give us the best of two technologies.  Let's face it:
  671. Objects are still an art form.  It takes a lot of collective brain
  672. power to figure out how to build an infrastructure for
  673. heterogeneous distributed components.
  674.  
  675. We challenge the naysayers to say that OLE is better technically
  676. than CORBA.  On the contrary, CORBA is at least two years ahead
  677. of OLE/COM in creating a heterogeneous, distributed, component
  678. infrastructure.  And OpenDoc is better than OLE as a compound
  679. document framework.  Microsoft has just too many legacy APIs to
  680. bring forward.  You'll be able to judge these things for yourself
  681. when you read this book.
  682.  
  683. Despite our CORBA bias, this Survival Guide contains one of the
  684. most complete technical descriptions of COM/OLE anywhere.  We
  685. tried very hard to keep our opinions in Soapboxes (like this one).
  686. Also, we believe that OLE is here to stay because of its close
  687. integration with Windows.  So you might as well learn it.  This
  688. Survival Guide contains over 160 pages on COM/OLE--including many
  689. comparisons with CORBA and OpenDoc.
  690.  
  691. In addition to our own opinions, we also include lots of quotes
  692. from industry people on this object war.  It seems everybody has
  693. something to say about this important issue.  So we wanted you
  694. to hear from them, too.  The bad news is that we have fewer quotes
  695. this time from non-industry people such as Bob Dylan and Lao Tzu.
  696. So now that we got our biases out on the table, let's move forward
  697. with this Survival Guide.
  698.  
  699.      ==================== end box =============================
  700.  
  701.  
  702.  
  703. ---------------------- Acknowledgements -------------------------------
  704.  
  705.  
  706. It's impossible to thank all the hundreds of people that helped us
  707. with this book.  But, we'll give it a try:
  708.  
  709. To Cynthia McFall and Cliff Reeves for giving Bob and Dan a home
  710. with the object group in Austin, even though we work from the San
  711. Francisco Bay Area.  Cynthia was there when we needed her.  We
  712. also thank Dave Brandt and Dell Rieth for their ongoing support.
  713.  
  714. -  To the technical people in different companies who helped us make
  715.    some sense out of this difficult topic--including Mike Blevins,
  716.    Kathy Bohrer, Grady Booch, Kraig Brockschmidt, Frank Campagnoni,
  717.    Guylaine Cantin, Rick Cattell, Dan Chang, Phil Chang, Ed Cobb,
  718.    Mike Conner, Bill Culman, Richard Finkelstein, Ira Forman, Jim
  719.    Gray, Jed Harris, Pete Homan, Ivar Jacobson, Ralph Johnson,
  720.    Johannes Klein, Charly Kleissner, Wilfried Kruse, Christina Lau,
  721.    Kevin Leong, Geoff Lewis, Mary Loomis, Hari Madduri, Tom Mowbray,
  722.    Annrai O'Toole, Mark Phillips, Kurt Piersol, Mike Potel, Tony
  723.    Rego, John Rymer, Harold Sammer, Roger Sessions, Oliver Sims,
  724.    Richard Soley, Chris Stone, Bruce Tate, David Taylor, Lou
  725.    Thomason, John Tibbetts, Robert Tycast,  Robert Vasaly, Don Vines,
  726.    John Vlissides, Sara Williams, Tony Williams, and Dave Wilson.
  727.  
  728. -  To the senior editors in the major trade publications who gave us
  729.    a chance to develop an early version of this story--including Dick
  730.    Conklin, Marie Lenzi, Kevin Strehlo, Jon Udell, Ray Valdes, and
  731.    Alan Zeichick.  Some of these editors wrote their own distributed
  732.    object story.
  733.  
  734. -  To the marketing directors and product managers who fed us with
  735.    up-to-the-minute information on their latest and greatest
  736.    products--including Michael Barton, Lydia Bennett, Anthony Brown,
  737.    Dianne Copenhaver, Scott Hebner, Chris Hyrne, Larry Perlstein,
  738.    and Keith Wescourt.
  739.  
  740. -  To Dave Pacheco for creating the wonderful technical illustrations
  741.    in this book (the cartoons are still by Jeri).
  742.  
  743. -  To our tireless copy editor, Larry Mackin.
  744.  
  745. -  To the people at Wiley that had to deal with our pickiness--including
  746.    Terry Canela, Frank Grazioli, Terri Hudson, Bob Ipsen, Ellen
  747.    Reavis, and Katherine Schowalter.  We also thank our previous
  748.    editor Diane Littwin.
  749.  
  750. -  To the more than 100,000 readers who read our previous books.
  751.    Without your continued support we couldn't write these books.
  752.  
  753.  
  754.  
  755. --------------------------- Notices -----------------------------------
  756.  
  757.  
  758. The authors and publishers of this book have used their best efforts
  759. in preparing this book.  The authors and publisher make no warranty of
  760. any kind, expressed or implied, with regard to the documentation
  761. contained in this book.  The authors and publishers shall not be liable
  762. in any event for incidental or consequential damages in connection with,
  763. or arising out of the use of the information in this book.
  764.  
  765. The product descriptions are based on the best information available
  766. at the time of publication.  Product prices are subject to change
  767. without notice.  Contact the product suppliers for the latest pricing
  768. and product information.
  769.  
  770. Some illustrations incorporate clip art from Corel Systems
  771. Corporation's Corel Draw 4.0 clip art library.
  772.  
  773. All the views expressed in this book are solely the Authors' and
  774. should not be attributed to IBM or Tandem Computers, or any other IBM
  775. or Tandem employee.  The three authors contributed equally to the
  776. production of this book and are amazed to find themselves still alive
  777. to see it published.
  778.  
  779.  
  780.  
  781. ---------------------- Contents at a Glance ---------------------------
  782.  
  783.  
  784. Part 1. Client/Server With Distributed Objects                        1
  785. Part 2. CORBA: The Distributed Object Bus                            43
  786. Part 3. Frameworks for Business Objects and Components              217
  787. Part 4. OpenDoc Under the Hood                                      339
  788. Part 5. OLE/COM Under the Hood                                      425
  789. Part 6. Component Nirvana: Client/Server With Parts                 533
  790.  
  791.  
  792.  
  793. ---------------------------- Contents --------------------------------------
  794.  
  795.  
  796. Foreword                                                                  ix
  797. Preface                                                                   xi
  798.  
  799.  
  800. Part 1. Client/Server With Distributed Objects                             1
  801. ____________________________________________________________________________
  802.  
  803. Scenic Concept
  804. Chapter 1. Objects: The Next Client/Server Revolution                      3
  805.    Intergalactic Client/Server Computing                                   4
  806.       What Client/Server Software Is Needed?                               5
  807.    Who Will Lead the Next Client/Server Revolution?                        6
  808.       Client/Server With SQL Databases                                     7
  809.       Client/Server With TP Monitors                                       9
  810.       Client/Server With Groupware                                        12
  811.       Client/Server With Distributed Objects                              15
  812.  
  813. Scenic Concepts
  814. Chapter 2. From Distributed Objects To Smart Components                   21
  815.    Objects and Distributed Objects                                        22
  816.       Distributed Objects                                                 23
  817.       Object Magic                                                        23
  818.       Encapsulation                                                       24
  819.    Components: The Grand Prize of Objects                                 28
  820.       The Driving Force Behind Components                                 29
  821.       Components to the Rescue                                            30
  822.       When Can We Expect These Components?                                32
  823.       So, What Exactly Is a Component?                                    34
  824.       So, What Is a Supercomponent?                                       36
  825.       Business Objects: The Ultimate Components                           38
  826.       Your Guide to the Symbols Used in This Survival Guide               39
  827.       The Component Road Map                                              42
  828.  
  829.  
  830. Part 2. The Distributed Object Bus                                        43
  831. ____________________________________________________________________________
  832.  
  833. Scenic Concept
  834. Chapter 3. CORBA: A Bird's Eye View                                       47
  835.    Distributed Objects, CORBA Style                                       49
  836.       What Is a CORBA Distributed Object?                                 49
  837.       Everything Is in IDL                                                50
  838.       CORBA Components: From System Objects To Business Objects           52
  839.    OMG's Object Management Architecture                                   53
  840.       The Object Request Broker (ORB)                                     54
  841.       Object Services                                                     57
  842.       Object Services: Build-to-Order Middleware                          59
  843.       Object Services: The Roll-Out Road Map                              60
  844.       Common Facilities                                                   61
  845.       Application/Business Objects                                        62
  846.  
  847. Concepts
  848. Chapter 4. CORBA 2.0: The Intergalactic Object Bus                        67
  849.    What Exactly Is a CORBA 2.0 ORB?                                       68
  850.       The Anatomy of a CORBA 2.0 ORB                                      69
  851.       CORBA Method Invocations: Static Versus Dynamic                     72
  852.       CORBA Static Method Invocations: From IDL to Interface Stubs        74
  853.       CORBA Dynamic Method Invocations: A Step-By-Step Guide              76
  854.       The Server Side of CORBA                                            78
  855.       What's an Object Adapter?                                           78
  856.       BOA and Other Object Adapters                                       80
  857.       BOA Shared Server                                                   81
  858.       BOA Unshared Server                                                 81
  859.       BOA Server-per-Method                                               82
  860.       BOA Persistent Server                                               83
  861.       CORBA 2.0 Initialization--Or How Does a Component Find Its ORB?     83
  862.    CORBA 2.0: The Intergalactic ORB                                       85
  863.       CORBA 2.0: The Inter-ORB Architecture                               85
  864.       CORBA 2.0: ORB-to-ORB Bridging                                      87
  865.       Federated ORBs                                                      88
  866.  
  867. Concepts
  868. Chapter 5. CORBA Metadata: IDL and Interface Repository                   91
  869.    The CORBA IDL: A Closer Look                                           93
  870.       What Does an IDL Contract Cover?                                    93
  871.       The Structure of the CORBA IDL                                      94
  872.       An IDL Example                                                      96
  873.       Type Codes: CORBA's Self-Describing Data                            97
  874.    The CORBA 2.0 Interface Repository                                     98
  875.       What's an Interface Repository?                                     98
  876.       Why Is an Interface Repository Needed Anyway?                       99
  877.       Interface Repository Classes: The Containment Hierarchy             99
  878.       The Interface Repository Class Hierarchy                           100
  879.       Federated Interface Repositories                                   104
  880.       What Does a Global Repository ID Look Like?                        105
  881.       Conclusion                                                         107
  882.  
  883. Concepts
  884. Chapter 6. CORBA Services: Naming, Events, and Life Cycle                109
  885.    The CORBA Object Naming Service                                       110
  886.       What's in a CORBA Object Name?                                     111
  887.       How Does It Work?                                                  112
  888.    The CORBA Object Trader Service                                       113
  889.    The CORBA Object Life Cycle Service                                   114
  890.       A Compound Life Cycle Example                                      115
  891.       The Life Cycle Interfaces                                          115
  892.       The Compound Life Cycle Interfaces                                 117
  893.    The CORBA Event Service                                               119
  894.       Suppliers and Consumers of Events                                  119
  895.       The Event Channel                                                  121
  896.       Conclusion                                                         121
  897.  
  898. Concepts
  899. Chapter 7. CORBA Services: Transactions and Concurrency                  123
  900.    The CORBA Object Transaction Service                                  124
  901.       What Is a Transaction?                                             124
  902.       Object Transaction Service: Features                               127
  903.       The Elements of the Object Transaction Service                     128
  904.       The OTS Interfaces                                                 129
  905.       An Object Transaction Scenario                                     132
  906.    The CORBA Concurrency Control Service                                 134
  907.       The Concurrency Control Service and Transactions                   134
  908.       Locks                                                              135
  909.       Locksets                                                           135
  910.       Nested Transactions and Locking                                    135
  911.       The Concurrency Control Interfaces                                 136
  912.       Conclusion                                                         137
  913.  
  914. Concepts
  915. Chapter 8. CORBA Services: Persistence and Object Databases              139
  916.    The CORBA Persistent Object Service (POS)                             140
  917.       What Is POS?                                                       140
  918.       Single-Level Stores Versus Two-Level Stores                        142
  919.       POS: The Client's View                                             142
  920.       POS: The Persistent Object's View                                  143
  921.       The Elements of POS                                                144
  922.       POS Protocols: The Object-PDS Conspiracy                           146
  923.       The POS Interfaces                                                 149
  924.       The POS CLI Interfaces                                             150
  925.    Object Database Management Systems                                    151
  926.       What's an ODBMS?                                                   152
  927.       What's an ODBMS Good For?                                          154
  928.       ODBMS Client/Server Implementations                                157
  929.       ODMG-93: The Lingua Franca for ODBMS                               159
  930.  
  931. Concepts
  932. Chapter 9. CORBA Services: Query and Relationships                       165
  933.    The CORBA Query Service                                               165
  934.       Federated Queries                                                  166
  935.       Collections for Manipulating Query Results                         167
  936.       Query Service: The Collection Interfaces                           167
  937.       Query Service: The Query Interfaces                                168
  938.       A Simple Query Scenario                                            169
  939.       A More Complex Query Scenario                                      171
  940.    The CORBA Collection Service                                          172
  941.    The CORBA Relationship Service                                        173
  942.       Why a Relationship Service?                                        173
  943.       What Exactly Is a Relationship?                                    174
  944.       Levels of Relationship Service                                     176
  945.       Relationship Service: The Base Interfaces                          176
  946.       Relationship Service: Graphs of Related Objects                    178
  947.       Relationship Service: The Containment and Reference Relationships  179
  948.       Conclusion                                                         181
  949.  
  950. Concepts
  951. Chapter 10. CORBA Services: System Management and Security               183
  952.    The CORBA Externalization Service                                     184
  953.       Stream Power                                                       184
  954.       Externalization Service: The Base Interfaces                       185
  955.       A Stream Scenario                                                  186
  956.    The CORBA Object Licensing Service                                    188
  957.       What Does the Licensing Service Do?                                189
  958.       Licensing Service Interfaces                                       189
  959.       A Licensing Scenario                                               191
  960.    The CORBA Object Property Service                                     192
  961.       Property Service Interfaces                                        192
  962.    The CORBA Object Time Service                                         194
  963.    The CORBA Object Security Service                                     195
  964.       What Is ORB-Based Security?                                        198
  965.       Authentication: Are You Who You Claim to Be?                       198
  966.       Authorization: Are You Allowed to Use This Resource?               199
  967.       Audit Trails: Where Have You Been?                                 200
  968.       Non-Repudiation: Was This Message Tampered With?                   200
  969.       Other Security Issues                                              200
  970.    The CORBA Object Change Management Service                            201
  971.       Conclusion                                                         202
  972.  
  973. Product
  974. Chapter 11. CORBA Commercial ORBs                                        203
  975.    Iona's Orbix                                                          204
  976.       Orbix Architecture                                                 205
  977.       Orbix 2.0's Current CORBA Support                                  205
  978.       Orbix's CORBA Support in Early 1996                                205
  979.       Orbix's CORBA Extensions                                           206
  980.    Digital's ObjectBroker                                                206
  981.       ObjectBroker Architecture                                          207
  982.       ObjectBroker 2.5's Current CORBA Support                           207
  983.       ObjectBroker's CORBA Support in 1996                               207
  984.    IBM's SOM                                                             208
  985.       SOM Architecture                                                   208
  986.       SOM's Object Model Extensions and Other Features                   209
  987.       SOM 2.1's Current CORBA Support                                    209
  988.       SOM's CORBA Support in 1996                                        210
  989.    Expersoft's XShell                                                    210
  990.       XShell 3.5's Current CORBA Support                                 211
  991.       XShell (or PowerBroker): CORBA Support in 1996                     211
  992.    Sun's Distributed Objects Everywhere (DOE)                            211
  993.       Sun's Current CORBA Support                                        212
  994.       Sun's CORBA Support in 1996                                        212
  995.    HP's ORB Plus                                                         212
  996.       HP's CORBA Support in 1996                                         212
  997.    Who Did We Leave Out?                                                 213
  998.    Conclusion and Some Parting Comments                                  213
  999.  
  1000.  
  1001. Part 3. Frameworks for Business Objects and Components                   217
  1002. ____________________________________________________________________________
  1003.  
  1004. Scenic Concept
  1005. Chapter 12. Object Frameworks: An Overview                               221
  1006.    Frameworks Overview                                                   222
  1007.       What Are Object Frameworks?                                        223
  1008.       How Frameworks Work                                                224
  1009.       Key Benefits of Object Frameworks                                  226
  1010.       Frameworks, APIs, or Class Libraries?                              227
  1011.       Procedural Frameworks: Look Ma, No Objects                         229
  1012.    Frameworks for Business Objects and Components                        231
  1013.       Meet the Players                                                   231
  1014.       Types of Frameworks                                                231
  1015.       Frameworks and Design Patterns                                     233
  1016.       Quiz: Framework or White Box Component?                            235
  1017.       Class Libraries, Frameworks, and Components                        236
  1018.       Conclusion                                                         237
  1019.  
  1020. Scenic Concept
  1021. Chapter 13. CORBA's Frameworks and Business Objects                      239
  1022.    Business Objects                                                      240
  1023.       So What Is a Business Object Anyway?                               240
  1024.       Cooperating Business Objects                                       242
  1025.       The Anatomy of a Business Object                                   243
  1026.       The Anatomy of a Client/Server Business Object                     245
  1027.    CORBA's Common Facilities                                             246
  1028.       What Are CORBA Common Facilities?                                  247
  1029.       The CORBA User Interface Common Facility                           248
  1030.       The CORBA Information Management Common Facility                   249
  1031.       The CORBA System Management Common Facility                        250
  1032.       The CORBA Task Management Common Facility                          255
  1033.       The CORBA Vertical Market Common Facilities                        258
  1034.       When Can You Expect These Common Facilities?                       259
  1035.       Conclusion                                                         260
  1036.  
  1037. Scenic Concept
  1038. Chapter 14. Compound Documents: The Desktop Framework                    261
  1039.    Compound Documents: Why All the Fuss?                                 262
  1040.       The Borderless Desktop                                             262
  1041.       Documents Come in All Shapes                                       262
  1042.       A Home for All Data Types                                          263
  1043.       In-Place Editing                                                   264
  1044.       Shippable Documents                                                264
  1045.    The Compound Document Framework                                       266
  1046.       Document Layout                                                    267
  1047.       Structured Storage                                                 267
  1048.       Scripting and Automation                                           268
  1049.       Uniform Data Transfer                                              269
  1050.       Conclusion                                                         269
  1051.  
  1052. Scenic Product
  1053. Chapter 15. The OpenDoc Component Model                                  271
  1054.    Parts: Components, OpenDoc Style                                      272
  1055.       OpenDoc Meets CORBA                                                272
  1056.    OpenDoc's Constituent Technologies                                    272
  1057.       SOM                                                                273
  1058.       Bento                                                              274
  1059.       Uniform Data Transfer                                              274
  1060.       Compound Document Management                                       275
  1061.       Open Scripting Architecture                                        275
  1062.    OpenDoc: Who Ships What?                                              277
  1063.    ComponentGlue: OpenDoc Becomes OLE and Vice Versa                     278
  1064.    What OpenDoc Does for Client/Server Systems                           279
  1065.       Client/Server, OpenDoc Style                                       279
  1066.       How OpenDoc Enhances CORBA                                         280
  1067.       Conclusion                                                         281
  1068.  
  1069. Scenic Product
  1070. Chapter 16. OLE/COM: The Other Component Standard                        283
  1071.    OLE for the Enterprise                                                284
  1072.    What Is OLE?                                                          284
  1073.       OLE: A Short History                                               285
  1074.       OLE Is OLE                                                         285
  1075.       The Vision: The Framework Is Windows                               286
  1076.       OLE: Interfaces Everywhere                                         286
  1077.       So, What Is an OLE Component?                                      287
  1078.    OLE's Constituent Technologies                                        288
  1079.       The Component Object Model (COM)                                   289
  1080.       OLE's Automation and Scripting Services                            290
  1081.       OLE's Uniform Data Transfer                                        291
  1082.       OLE's Structured Storage and Persistence Services                  291
  1083.       OLE's Compound Document Service                                    292
  1084.    OLE Tools and Foundation Classes                                      293
  1085.       Microsoft Foundation Classes (MFC)                                 293
  1086.       Microsoft Visual C++                                               294
  1087.       Conclusion                                                         294
  1088.  
  1089. Scenic Product
  1090. Chapter 17. Taligent's CommonPoint: Frameworks Everywhere                297
  1091.    Integrated Frameworks                                                 298
  1092.       So What's an Application System Anyway?                            299
  1093.       Frameworks Everywhere                                              300
  1094.    People, Places, and Things                                            302
  1095.       How the New Metaphor Works                                         302
  1096.       Places                                                             303
  1097.       People                                                             305
  1098.       Things                                                             306
  1099.    Compound Documents, CommonPoint Style                                 307
  1100.       Shared Documents                                                   307
  1101.       The Taligent Compound Document Model                               308
  1102.       Taligent/OpenDoc Interoperability                                  308
  1103.       Conclusion                                                         312
  1104.  
  1105. Scenic Product
  1106. Chapter 18. NeXT's OpenStep and Portable Distributed Objects             313
  1107.    Who Is Doing What With OpenStep?                                      314
  1108.       OpenStep in the Unix World                                         314
  1109.       OpenStep in the Windows World                                      314
  1110.    What Is OpenStep?                                                     315
  1111.       PDO and Objective C                                                315
  1112.       The Application Framework                                          319
  1113.       Display PostScript                                                 319
  1114.       Application Development Tools                                      319
  1115.       The Enterprise Objects Framework                                   320
  1116.  
  1117. Scenic Product
  1118. Chapter 19. Newi: Cooperative Business Objects                           325
  1119.    Newi's Business Objects                                               326
  1120.       What Is a CBO?                                                     327
  1121.       CBOs Versus Compound Document Components                           327
  1122.    The Newi ORB and Business Object Framework                            329
  1123.       The Newi ORB: Message-Time Binding                                 329
  1124.       Newi's Dynamic Object Hierarchies                                  331
  1125.       Newi's Model/View Separation                                       332
  1126.       View Layout Files                                                  334
  1127.       Other Newi Frameworks and Tools                                    335
  1128.       Newi, OpenDoc, and SOM/CORBA                                       335
  1129.       Conclusion                                                         337
  1130.  
  1131.  
  1132. Part 4. OpenDoc Under the Hood                                           339
  1133. ____________________________________________________________________________
  1134.  
  1135. Product
  1136. Chapter 20. OpenDoc and SOM: The Object Model                            343
  1137.    What SOM Brings to the Party                                          344
  1138.       OpenDoc and SOM                                                    344
  1139.       SOM: A Technology for Packaging Parts                              345
  1140.    The OpenDoc Programming Model                                         346
  1141.       ODPart: The Part Editor Class                                      346
  1142.       The OpenDoc Class Hierarchy                                        347
  1143.       How Part Editors Find OpenDoc Objects                              350
  1144.       How Intrusive Is the OpenDoc Programming Model?                    351
  1145.       OpenDoc Frameworks and Tools                                       352
  1146.  
  1147. Product
  1148. Chapter 21. OpenDoc: The Compound Document Model                         357
  1149.    Binding: Creating the OpenDoc Environment                             358
  1150.       The Document Shell: OpenDoc's Run-Time Manager                     359
  1151.       Factories and Reference-Counted Objects                            359
  1152.       Binding: How Part Data Finds Part Editor                           360
  1153.    Layout and Geometry Management                                        361
  1154.       OpenDoc Container Parts                                            361
  1155.       Frames, Facets, and Canvases                                       362
  1156.       Drawing, OpenDoc Style                                             365
  1157.       Views: A Part Is a Part                                            366
  1158.       Part Windows                                                       366
  1159.       Controls                                                           367
  1160.    Event Distribution and Arbitration                                    368
  1161.       Arbitration With Focus Sets                                        368
  1162.       Inside-Out Part Activation                                         369
  1163.       Sharing Menus                                                      370
  1164.  
  1165. Product
  1166. Chapter 22. OpenDoc: Bento and Storage Units                             373
  1167.    The Bento Storage System                                              375
  1168.       The Storage Containment Hierarchy                                  376
  1169.    OpenDoc Storage Units                                                 377
  1170.       Properties With Multiple Values                                    377
  1171.       Just What Is a Storage Unit Anyway?                                377
  1172.       Navigating Through Storage Units                                   378
  1173.       Persistent References and Cloning                                  380
  1174.       The Persistent Elements                                            382
  1175.       Standard Properties                                                382
  1176.       A Day in the Life of a Storage Unit                                383
  1177.    Conclusion                                                            385
  1178.  
  1179. Product
  1180. Chapter 23. OpenDoc: Uniform Data Transfer                               387
  1181.    Drag-and-Drop Transfers                                               389
  1182.    Clipboard Transfers                                                   391
  1183.    Linked Data Transfers                                                 394
  1184.       OpenDoc's Link-Related Objects                                     394
  1185.       Advertising a Link                                                 396
  1186.       Scenario: Data Interchange Via Links                               396
  1187.    Conclusion                                                            398
  1188.  
  1189. Product
  1190. Chapter 24. OpenDoc: Automation and Semantic Events                      399
  1191.    The Brave New World of OpenDoc Scripting                              401
  1192.       New Age Scripting                                                  401
  1193.       Roaming Agents                                                     402
  1194.       Disposable Applications                                            405
  1195.       Client/Server Component Suites                                     406
  1196.    The OpenDoc Extension Mechanism                                       407
  1197.       Why Are Extensions Needed?                                         407
  1198.       How Extensions Work                                                408
  1199.    Semantic Events                                                       410
  1200.       What's a Semantic Event?                                           410
  1201.       An Example                                                         411
  1202.       Object Specifiers Unleashed                                        411
  1203.       How Semantic Events Work                                           412
  1204.       Setting Up the Environment                                         415
  1205.       Scenario: A Semantic Message At Work                               416
  1206.       A Quick Review                                                     418
  1207.    Scripting and Automation                                              418
  1208.       Beyond Just Scriptability                                          420
  1209.       Scriptability                                                      420
  1210.       Tinkerability                                                      421
  1211.       Recordability                                                      421
  1212.       Scripting Systems                                                  423
  1213.    Conclusion                                                            424
  1214.  
  1215.  
  1216. Part 5. OLE/COM Under the Hood                                           425
  1217. ____________________________________________________________________________
  1218.  
  1219. Product
  1220. Chapter 25. COM: OLE's Object Bus                                        429
  1221.    COM: The Object Bus                                                   431
  1222.       Looking at COM Through CORBA Eyes                                  431
  1223.       COM Style Interfaces                                               432
  1224.       So, What's a COM Object?                                           433
  1225.       What's a COM Server?                                               436
  1226.       Server Flavors: In-Process and Out-Of-Process                      437
  1227.       Creating Custom Interfaces                                         439
  1228.    COM Object Services                                                   441
  1229.       The Ubiquitous IUnknown Interface                                  442
  1230.       Interface Negotiations Using QueryInterface                        442
  1231.       Life Cycle Management With Reference Counts                        444
  1232.       IClassFactory2: Object Creation and Licensing                      445
  1233.       A COM Object Creation Scenario                                     446
  1234.       Connectable Objects: COM's Event Service                           448
  1235.       COM Style Inheritance: Aggregation and Containment                 449
  1236.  
  1237. Product
  1238. Chapter 26. OLE: Automation, Scripting, and Type Libraries               453
  1239.    Automation, OLE Style                                                 454
  1240.       How the Pieces Work Together                                       455
  1241.       What's an OLE Automation Server?                                   455
  1242.       OLE Guidelines for Automation Objects                              456
  1243.       The Structure of an OLE Automation Server                          457
  1244.       Collection Objects                                                 458
  1245.       Automation Controllers: Visual Basic and DispTest                  460
  1246.    Building OLE Automation Servers                                       461
  1247.       What's a Dispinterface?                                            461
  1248.       The IDispatch Interface                                            462
  1249.       What Does an IDispatch Client Do?                                  463
  1250.    How OLE Creates and Manages Type Information                          464
  1251.       The Object Description Language                                    465
  1252.       Building Type Libraries: The Hard Way                              467
  1253.       Building Type Libraries: The Easy Way                              468
  1254.       Registering a Type Library                                         469
  1255.       Finding and Loading a Type Library                                 470
  1256.       So, How Do I Get Information Out of a Type Library?                470
  1257.       A Type Library Navigation Scenario                                 471
  1258.       Getting Information From IProvideClassInfo                         472
  1259.       Conclusion                                                         473
  1260.  
  1261. Product
  1262. Chapter 27. OLE: Uniform Data Transfer                                   475
  1263.    OLE's Data Transfer Model                                             476
  1264.       Data Transfer: Formats and Structures                              477
  1265.       The IDataObject Interface                                          477
  1266.    Clipboard Transfers, OLE Style                                        479
  1267.       Delayed Transfers                                                  479
  1268.       A Clipboard Data Transfer Scenario                                 479
  1269.    Drag-and-Drop Transfers                                               481
  1270.       Drag-and-Drop: Who Does What?                                      481
  1271.       A Drag-and-Drop Data Transfer Scenario                             482
  1272.    Linked Data Transfers                                                 484
  1273.       What's an Advise Sink?                                             485
  1274.       A Parting Scenario                                                 486
  1275.    Conclusion                                                            487
  1276.  
  1277. Product
  1278. Chapter 28. OLE: Structured Storage and Monikers                         489
  1279.    OLE's Structured Storage: Compound Files                              490
  1280.       The Structure of a Compound File                                   491
  1281.       The IStorage Interface                                             492
  1282.       Transactional Storage                                              493
  1283.       The IStream Interface                                              494
  1284.       A Storage Access Scenario                                          495
  1285.    Persistent Objects                                                    497
  1286.       How Persistent Is Your Object?                                     497
  1287.       The IPersist Interfaces                                            498
  1288.       A Persistent Object Scenario                                       499
  1289.    Monikers: Persistent, Intelligent Names                               501
  1290.       So, What Exactly Is a Moniker?                                     501
  1291.       Monikers As Persistent Objects                                     502
  1292.       The IMoniker Interface                                             502
  1293.       Types of Monikers                                                  503
  1294.  
  1295. Product
  1296. Chapter 29. OLE: Compound Documents and OCXs                             507
  1297.    The OLE Compound Document Model                                       508
  1298.       Will the Real Container/Server Please Stand Up?                    509
  1299.       Linking versus Embedding                                           509
  1300.    The Minimalist Container/Server                                       511
  1301.       The Minimalist Container                                           512
  1302.       The Minimalist Server                                              513
  1303.       A Container/Server Scenario                                        515
  1304.    The Maximalist Container/Server                                       516
  1305.       Linking and Embedding Interfaces                                   518
  1306.       So, How Does Linking Work?                                         520
  1307.       In-Place Editing                                                   520
  1308.       Miscellaneous Interfaces                                           521
  1309.    OLE Custom Controls (OCXs)                                            523
  1310.       So What's an OCX?                                                  524
  1311.       Container Meets OCX                                                524
  1312.       How OCXs and Containers Use Automation                             527
  1313.       OCX-Generated Events                                               527
  1314.       Connectable Objects: COM's Event Service                           528
  1315.       An OCX Connectable Object Scenario                                 530
  1316.       Conclusion                                                         532
  1317.  
  1318.  
  1319. Part 6. Component Nirvana: Client/Server With Parts                      533
  1320. ____________________________________________________________________________
  1321.  
  1322. Scenic Concept
  1323. Chapter 30. Which Component Model?                                       535
  1324.    Should You Bet on COM/OLE or CORBA/OpenDoc?                           536
  1325.       OLE/COM Versus CORBA/OpenDoc: The Object Models                    536
  1326.       OLE/COM Versus CORBA/OpenDoc: The Object Buses                     538
  1327.       OLE/COM Versus CORBA/OpenDoc: Higher-Level Language Bindings       539
  1328.       OLE/COM Versus CORBA/OpenDoc: The System Services                  540
  1329.       OLE/COM Versus CORBA/OpenDoc: Compound Document Frameworks         541
  1330.       So, the Winner Is...                                               543
  1331.    COM/OLE and CORBA/OpenDoc: Can We Interoperate?                       543
  1332.       Gateways Come in All Shapes                                        543
  1333.       ComponentGlue: The Deep Gateway Approach                           544
  1334.       The COM/CORBA Interworking RFP: The Generic Gateway Approach       546
  1335.       Conclusion                                                         549
  1336.  
  1337. Scenic Concept
  1338. Chapter 31. Client/Server With Component Suites                          551
  1339.    Client/Server With Component Suites                                   552
  1340.       Suites: The Sum Is More Than the Total of the Parts                552
  1341.       Suites of Pluggable Places                                         552
  1342.       Suites of Client/Server Parts                                      553
  1343.       Cafeteria-Style Suites                                             553
  1344.    The Component Market Infrastructure                                   554
  1345.       The Open Component Market Vision                                   554
  1346.       Getting Ready for Client/Server With Components                    559
  1347.       It's Time to Say Farewell                                          561
  1348.  
  1349.  
  1350. Where to Go for More Information                                         563
  1351. Trademarks                                                               573
  1352. Index                                                                    575
  1353.  
  1354.  
  1355.  
  1356. -------------------------- List of Boxes ------------------------------
  1357.  
  1358.  
  1359. Briefing:       The World's Shortest Tutorial on Objects                  24
  1360. Briefing:       ORB Versus RPC                                            56
  1361. Soapbox:        Is 1996 "The Year of the ORB"?                            62
  1362. Briefing:       CORBA 2.0 Global Repository IDs                           70
  1363. Details:        What's an Object Reference?                               73
  1364. Briefing:       GIOP: Interoperable Object References                     87
  1365. Soapbox:        Is It CORBA Versus DCE?                                   89
  1366. Details:        The Interface Repository: A Closer Look                  102
  1367. Details:        Pragmas That Help You Create Repository IDs              106
  1368. Briefing:       What's a Nested Transaction?                             126
  1369. Soapbox:        How Standards Are Really Created                         143
  1370. Briefing:       The Direct Attribute "Conspiracy"                        147
  1371. Soapbox:        The Future of Database: Object or Relational?            163
  1372. Briefing:       Are Distributed Objects Less Secure?                     196
  1373. Soapbox:        Disposable Components                                    232
  1374. Briefing:       The Business Process Object Is the News                  245
  1375. Soapbox:        System Management: Why Objects Are the Answer            253
  1376. Briefing:       Objects and Everyday Things                              265
  1377. Soapbox:        OpenDoc: Looks Are Everything                            276
  1378. Soapbox:        Questions to Ask Your OpenDoc Providers                  282
  1379. Soapbox:        Would You Bet on Taligent?                               310
  1380. Soapbox:        Dear Steve, Please Drop the Plumbing                     323
  1381. Soapbox:        Are We Ready for a New World Infrastructure?             336
  1382. Briefing:       When CORBA Meets OpenDoc                                 345
  1383. Briefing:       To IDL or Not To IDL                                     347
  1384. Details:        Inside ODPart                                            349
  1385. Soapbox:        What to Look for in an OpenDoc Tool                      353
  1386. Details:        How OpenDoc Reconstructs a Document                      364
  1387. Soapbox:        Why OpenDoc?                                             371
  1388. Details:        Storage Units: An Inside Look                            379
  1389. Soapbox:        Can OpenDoc Perform General Magic-like Magic?            403
  1390. Details:        How Object Specifiers Are Resolved                       414
  1391. Details:        The OSA Script-System Encapsulator                       423
  1392. Details:        COM Interfaces and C++ Vtables                           434
  1393. Briefing:       What?  An Object With No ID?                             435
  1394. Briefing:       COM IDL Versus COM ODL                                   439
  1395. Soapbox:        Is This Really Version Control?                          443
  1396. Soapbox:        The Multiple Inheritance Thing                           451
  1397. Details:        So, What Makes a Collection Object?                      459
  1398. Warning:        Check Your OLE Technical Reference First                 467
  1399. Details:        What Are LockBytes?                                      492
  1400. Warning:        Architecture Does Not Mean Product                       495
  1401. Soapbox:        Monikers and the Rest of Us                              505
  1402. Soapbox:        How Much Diversity Can Components Tolerate?              510
  1403. Soapbox:        In-Place Editing: OLE Versus OpenDoc                     522
  1404. Soapbox:        The OLE Camp: So What?                                   542
  1405. Soapbox:        How to Achieve This Component Vision                     555
  1406.  
  1407.  
  1408.  
  1409. -------------------------- Chapter 2 ---------------------------------------
  1410.  
  1411.  
  1412. Chapter 2. From Distributed Objects To Smart Components
  1413.  
  1414. General industry consensus is that the ultimate goal is to have
  1415. component-based systems capable of operating in distributed
  1416. heterogeneous computing environments.  Loosely bound and highly
  1417. configurable components will be able to accommodate continuous
  1418. changes such as the rapid creation and destruction of virtual
  1419. enterprises.
  1420.  
  1421.                          -- Richard Barnwell, Architect
  1422.                             Software 2000, Inc.
  1423.                             (June, 1995)
  1424.  
  1425. A "classical" object--of the C++ or Smalltalk variety--is a blob of
  1426. intelligence that encapsulates code and data.  Classical objects
  1427. provide wonderful code reuse facilities via inheritance and
  1428. encapsulation.  However, these classical objects only live within a
  1429. single program.  Only the language compiler that creates the objects
  1430. knows of their existence.  The outside world doesn't know about these
  1431. objects and has no way to access them.  They're literally buried in
  1432. the bowels of a program.
  1433.  
  1434. In contrast, a distributed object is a blob of intelligence that can
  1435. live anywhere on a network.  Distributed objects are packaged as
  1436. independent pieces of code that can be accessed by remote clients
  1437. via method invocations.  The language and compiler used to create
  1438. distributed server objects are totally transparent to their clients.
  1439. Clients don't need to know where the distributed object resides or
  1440. what operating system it executes on; it can be on the same machine
  1441. or on a machine that sits across an intergalactic network.
  1442. Distributed objects are smart pieces of software that can message
  1443. each other transparently anywhere in the world.  Distributed objects
  1444. can interrogate each other--"tell me what you do."  Distributed
  1445. objects are very dynamic--they come and go and move around.
  1446.  
  1447. When we talk about distributed objects, we're really talking about
  1448. independent software components.  These are smart pieces of software
  1449. that can play in different networks, operating systems, and tool
  1450. palettes.  A component is an object that's not bound to a particular
  1451. program, computer language, or implementation.  Objects built as
  1452. components provide the right "shapes" for distributed applications.
  1453. They are the optimal building blocks for creating the next generation
  1454. of distributed systems.  In this chapter, we first explain what an
  1455. object is.  Then we go over the attributes that make components out
  1456. of ordinary objects.
  1457.  
  1458.  
  1459. Objects and Distributed Objects
  1460.  
  1461. Everybody can resonate with objects--managers, 3-year olds, and
  1462. superprogrammers.  Object-oriented technology appeals to all
  1463. these different camps...
  1464.  
  1465.                          -- Jim Gray
  1466.                             (February, 1995)
  1467.  
  1468. Objects has to be one of the most bastardized, hackneyed, and
  1469. confusing terms in the computer industry.  Everyone claims to
  1470. have them.
  1471.  
  1472.                          -- Kraig Brockschmidt, Author
  1473.                             Inside OLE 2, Second Edition
  1474.                             (Microsoft Press, 1995)
  1475.  
  1476. By now, anybody associated with computers knows that objects are
  1477. wonderful--we simply can't live without them.  Smalltalk can be used
  1478. to create GUI front-ends, C++ is the only way to write code, and the
  1479. literature is full of articles on the wonders of encapsulation,
  1480. multiple inheritance, and polymorphism.  Objects for the last 20
  1481. years have been promising us code reuse and higher levels of software
  1482. productivity.  Software methodologists tell us objects can cure
  1483. almost any software ill--as long as we faithfully follow "the
  1484. methodology du jour."  Note that traditional methodologies treat
  1485. functions and data as separate; object methodologies, on the other
  1486. hand, view them as an integrated whole.  An object describes both
  1487. the behavior and information associated with an entity.
  1488.  
  1489. More recently, objects have become the darling of the Business
  1490. Process Reengineering (BPR) crowd.  These folks discovered that
  1491. objects map very well to the way businesses are organized.  They use
  1492. objects to simulate, describe, and analyze the business process.
  1493. Finally, these folks also discovered that business objects can
  1494. naturally emulate their real-world counterparts in different
  1495. domains.
  1496.  
  1497. As a result of all this interest, objects are starting to boom.
  1498. Datapro estimates the general object marketplace to be growing at
  1499. 67% annually; it expects it to become a $4 billion market by 1997.
  1500. But there's still more to this story.
  1501.  
  1502.  
  1503. Distributed Objects
  1504.  
  1505. The potential of distributed objects is what causes your authors to
  1506. "resonate," as Jim Gray would put it.  We are particularly interested
  1507. in how object technology can be extended to deal with the complex
  1508. issues that are inherent in creating robust, single-image,
  1509. client/server systems.  The key word is systems--or how objects work
  1510. together across machine and network boundaries to create
  1511. client/server solutions.  We're not going to rehash the marvels of
  1512. Object-Oriented Programming (OOP) methodologies, Smalltalk, and C++
  1513. because we assume you've heard about them all before.  We're moving
  1514. on to the next step: objects in client/server systems.  This is the
  1515. area where objects will realize their greatest potential and growth;
  1516. in the process, they will become the new "mainstream computing
  1517. model."  Distributed objects are in the fortunate position of being
  1518. able to build on the strong language and methodological foundations
  1519. of classical objects.  But distributed objects introduce a whole new
  1520. ball game.  They have the potential of creating a $50 billion
  1521. software industry by the turn of this century (especially when
  1522. components are factored in).
  1523.  
  1524.  
  1525. Object Magic
  1526.  
  1527. Most people involved in the computer industry believe objects to be
  1528. a "good thing."  An object is an encapsulated chunk of code that has
  1529. a name and an interface that describes what it can do.  Other
  1530. programs can invoke the functions the interface describes or simply
  1531. reuse the function itself.  Objects should let you write programs
  1532. faster by incorporating large chunks of code from existing objects--
  1533. this is called inheritance.  In addition, an object typically manages
  1534. a resource or its own data.  You can only access an object's resource
  1535. using the interface the object publishes.  This means objects
  1536. encapsulate the resource and contain all the information they need
  1537. to operate on it.
  1538.  
  1539. Objects let you package software capabilities into more manageable
  1540. (and useful) chunks.  You can scale objects by composing them from
  1541. other objects.  Eventually, you can create objects that model
  1542. real-world entities--called business objects.  The basic concepts of
  1543. object technology are the same, regardless of the level of
  1544. abstraction an object provides.  System objects and business objects
  1545. all provide three magical properties: encapsulation, inheritance,
  1546. and polymorphism.  These are the properties that provide the behavior
  1547. and benefits you typically associate with an object.  You must
  1548. understand these three magical properties in order for objects (and
  1549. their component extensions) to make sense.  The next Briefing box provides
  1550. the world's shortest tutorial on objects.
  1551.  
  1552.  
  1553.  
  1554.      ====== Briefing: The World's Shortest Tutorial on objects =====
  1555.  
  1556. If you want to shrink something, you must first allow it to
  1557. expand.  If you want to take something, you must first allow
  1558. it to be given.  This is called the subtle perception of the
  1559. way things are.
  1560.  
  1561.                          -- Lao Tzu
  1562.  
  1563. An object is a piece of code that owns things called attributes
  1564. and provides services through methods (also called operations or
  1565. functions).  Typically, the methods operate on private data--also
  1566. called instance data or object state--that the object owns.  A
  1567. collection of like objects make up a class (sometimes called a
  1568. type).  A class acts as a template that describes the behavior
  1569. of sets of like objects.  Technically speaking, objects are
  1570. run-time instances of a class.  An object is identified by a
  1571. unique ID (also known as a reference).
  1572.  
  1573. This all sounds pretty straightforward, so why all the fuss about
  1574. objects?  First, they provide a better programming model for
  1575. representing the world.  We can create intelligent software
  1576. objects that mirror the things around us.  Second, objects have
  1577. three magical properties that make them incredibly useful:
  1578. encapsulation, inheritance, and polymorphism.  In our previous
  1579. books, we call them "the three pillars of object-oriented
  1580. programming."  They allow us to create reusable objects.  They
  1581. form the essence what Lao Tzu calls "the subtle perception of the
  1582. way things are."
  1583.  
  1584.  
  1585. Encapsulation
  1586.  
  1587. One of the fundamental principles of object technology is that
  1588. the internals of an object are private to that object and may not
  1589. be accessed or even examined from outside the object.
  1590.  
  1591.                          -- David Taylor, Author
  1592.                             Business Engineering with Object Technology
  1593.                             (Wiley, 1995)
  1594.  
  1595. Encapsulation means "don't tell me how you do it; just do it."
  1596. The object does this by managing its own resources and limiting
  1597. the visibility of what others should know.  In this sense, objects
  1598. are self-contained atoms.  An object publishes a public interface
  1599. that defines how other objects or applications can interact with
  1600. it (see Figure 2-1).  An object also has a private component that
  1601. implements the methods.  The object's implementation is
  1602. encapsulated--that is, hidden from the public view.  Instance data
  1603. can be declared private--usually, the default--or public.  Private
  1604. instance data can only be accessed by methods of the class.
  1605. Public instance data, on the other hand, is part of the published
  1606. external interface.  The public methods and instance data are the
  1607. permanent interface between the object and the outside world.
  1608. Old methods must continue to be supported when an object changes.
  1609. The public interface is a binding contract between the class
  1610. providers and their clients.
  1611.  
  1612. Figure 2-1.  The First Pillar of OO Wisdom: Class Encapsulation.
  1613.  
  1614.  
  1615. Polymorphism
  1616.  
  1617. A true living object can be replaced.
  1618.  
  1619.                          -- Christine Comaford,
  1620.                             Columnist
  1621.                             PC Week
  1622.  
  1623. Polymorphism is a high-brow way of saying that the same method
  1624. can do different things, depending on the class that implements
  1625. it.  Looking at Figure 2-2, you can see polymorphism in action
  1626. (hit the accelerator on a Corvette and on a Volvo, and then
  1627. compare notes).  Objects in different classes receive the same
  1628. message yet react in different ways.  The sender does not know
  1629. the difference; the receiver interprets the message and provides
  1630. the appropriate behavior.  Polymorphism lets you view two similar
  1631. objects through a common interface; it eliminates the need to
  1632. differentiate between the two objects.  Polymorphism is the
  1633. underlying principle behind the object-style user interfaces.
  1634. You can click on any visual object or drag-and-drop it.
  1635. Polymorphism is also the mechanism that allows subclasses (see
  1636. next paragraph) to override an inherited method--and "do their own
  1637. thing"--without affecting the ancestor's methods.
  1638.  
  1639. Figure 2-2.  The Second Pillar of OO Wisdom: Polymorphism.
  1640.  
  1641. Overloading is a variant of polymorphism that lets you define
  1642. different versions of a method, each with different parameter
  1643. types.
  1644.  
  1645.  
  1646. Inheritance
  1647.  
  1648. Children classes can enhance the behavior of their parents.
  1649. And if parental behavior is enhanced, it is to the benefit of
  1650. the children.
  1651.  
  1652.                          -- Steve Jobs, CEO
  1653.                             NeXT
  1654.                             (February, 1995)
  1655.  
  1656. Inheritance is the mechanism that allows you to create new child
  1657. classes--known as subclasses or derived classes--from existing
  1658. parent classes.  Child classes inherit their parent's methods and
  1659. data structures.  You can add new methods to a child's class or
  1660. override--that is, modify--inherited methods to define new class
  1661. behaviors.  The parent's method is not affected by this
  1662. modification.  You use inheritance to extend objects; it means
  1663. "everything in that object plus...."
  1664.  
  1665. Some object models support single inheritance--a class has exactly
  1666. one parent class.  Others support multiple inheritance--a class
  1667. can have more than one direct parent.  Abstract classes are
  1668. classes whose main purpose is to be inherited by others.  Mixins
  1669. are classes whose main purpose is to be multiply inherited by
  1670. others.  They're typically partial classes that cannot stand
  1671. alone.  Mixins must be combined with other classes in order to
  1672. function.  If you do it carefully, multiple inheritance can help
  1673. you reuse code very effectively.  Together, abstract classes and
  1674. mixins are sometimes known as base classes--this means other
  1675. classes inherit from them.  As in real-life family inheritances,
  1676. class inheritances are controlled by the parents.  This means
  1677. that providers of base classes can establish the rules about what
  1678. aspects of their classes they will let their children inherit.
  1679.  
  1680. Figure 2-3 shows a typical class hierarchy tree--start with a
  1681. generic "car" class and derive from it Volvos or Corvettes.  Note
  1682. that the arrows in the class hierarchy
  1683.  
  1684. point upward from a class to its parent class--the idea is that
  1685. classes  must know their parent class, but not vice versa.  A
  1686. class hierarchy can introduce many levels of hierarchy.  If the
  1687. hierarchy becomes too deep, you may have to restructure it (object
  1688. people call it refactoring the hierarchy).  To eliminate code
  1689. redundancy, you should move common functions to the top of the
  1690. class hierarchy.  You do this by simply moving common code from
  1691. the derived classes into a common ancestor class.
  1692.  
  1693. Figure 2-3.  The Third Pillar of OO Wisdom: Inheritance and Subclassing.
  1694.  
  1695.  
  1696. Frameworks and Class Libraries
  1697.  
  1698. The three pillars of OO provide the foundation for creating,
  1699. assembling, and reusing objects.  The first generation of OO
  1700. relied on class libraries to package objects for reusability.  A
  1701. more promising approach is to use object frameworks.  These are
  1702. preassembled class libraries that are packaged to provide
  1703. specific functions.  Frameworks will make it easier to assemble
  1704. objects; they raise the level of abstraction.  We cover frameworks
  1705. in more detail in Part 3.
  1706.  
  1707.  
  1708. Object Binding
  1709.  
  1710. Binding refers to the linking of the software interface between
  1711. two objects.  If the binding is static both client and server
  1712. have an interface that is determined at compile or build time.
  1713. Dynamic binding--also known as late binding--occurs when a message
  1714. is sent.  It requires objects to have an agreed-upon way of
  1715. determining the shape of the interface at send time.  Late binding
  1716. lets you create very flexible systems with code you can select
  1717. at run time.  This lets you
  1718. replace code dynamically and introduce new functions without
  1719. recompiling existing software.
  1720.  
  1721.  
  1722. Object Relationships
  1723.  
  1724. According to David Taylor, objects relate to each other in one
  1725. of three basic ways: 1) specialization, in which classes are
  1726. defined as special cases of each other; 2) collaboration, in which
  1727. objects send messages to each other to request services; and 3)
  1728. composition, in which objects are constructed out of other
  1729. objects.  Taylor's list provides a good start.  We will also be
  1730. seeing other patterns of collaboration throughout this book.  Note
  1731. that an object that contains other objects is called a composite
  1732. object.  A composite object holds references to the objects it
  1733. contains instead of containing the object itself.  An object can
  1734. be contained in multiple composite objects.
  1735.  
  1736.      ================== End Box ===================================
  1737.  
  1738.  
  1739. Components: The Grand Prize of Objects
  1740.  
  1741. Object technology failed to deliver on the promise of
  1742. reuse...What role will object-oriented programming play in the
  1743. component-software revolution that's now finally under way?
  1744.  
  1745.                          -- Jon Udell, Senior Technical Editor
  1746.                             BYTE Magazine
  1747.                             (May, 1994)
  1748.  
  1749. Components are standalone objects that can plug-and-play across
  1750. networks, applications, languages, tools, and operating systems.
  1751. Distributed objects are, by definition, components because of the
  1752. way they are packaged.  In distributed object systems, the unit of
  1753. work and distribution is a component.  The distributed object
  1754. infrastructure must make it easier for components to be more
  1755. autonomous, self-managing, and collaborative.  However, note that
  1756. not all components are objects.  Nor are they all distributed.  For
  1757. example, an OLE custom control (or OCX) is a component that is
  1758. neither an object nor distributed.
  1759.  
  1760. Component technology--in all its forms--promises to radically alter
  1761. the way software systems are developed.  For example, distributed
  1762. objects allow us to put together complex client/server information
  1763. systems by simply assembling and extending components.  The goal of
  1764. object components is to provide software users and developers the
  1765. same levels of plug-and-play application interoperabilty that are
  1766. available to consumers and manufacturers of electronic parts or
  1767. custom integrated circuits.
  1768.  
  1769.  
  1770. The Driving Force Behind Components
  1771.  
  1772. It's really getting harder and harder for us to keep up with the
  1773. amount of resources needed to develop applications today.  Up
  1774. to 80% of application resources go into capabilities that are
  1775. ancillary to what really makes our product stand out.
  1776.  
  1777.                          -- Randell Flint, President
  1778.                             Sundial Systems
  1779.                             (January, 1995)
  1780.  
  1781. The component revolution is being driven from the desktop, where
  1782. vendors are realizing that to be profitable, they must quickly
  1783. rearchitect their existing applications and suites into components.
  1784. Today's desktop applications are monolithic and over-bloated.  They
  1785. contain every possible feature you might use--whether or not you
  1786. really want them.  Most of us use less than 10% of an application's
  1787. features--the rest of the features simply add complexity and bulk.
  1788. We must wait--it seems forever--to get the new features we really need
  1789. in the form of new upgrades or replacements.  This is because vendors
  1790. must bring forward all the hundreds of product features with every
  1791. new release, leading to long and costly development cycles.  Vendors
  1792. take the "shotgun" approach because they don't know which features
  1793. you need, and they try to be all things to all people.
  1794.  
  1795. These feature-heavy, bloated, monolithic applications are very
  1796. costly for vendors to upgrade and maintain.  Each change challenges
  1797. the fragile integrity of the monolith and requires long regression
  1798. cycles (and resources).  Maintaining these applications is no picnic
  1799. either.  The smaller Independent Software Vendors (ISVs) face these
  1800. same problems but even more acutely.  They have much more limited
  1801. resources to throw at them.
  1802.  
  1803. To give you an idea of the magnitude of the problem, consider that
  1804. it took WordPerfect just under 14 developer years to upgrade their
  1805. product from version 3 to version 4.  However, it took 250 developer
  1806. years to move the same product from version 5 to version 6.  If
  1807. things continue at this rate, it could cost them as many as 4,464
  1808. developer years to move the product to version 8.  WordPerfect
  1809. realized that the monolithic approach to application development is
  1810. simply no longer feasible; it is now rearchitecting the product using
  1811. OLE and OpenDoc components.  Microsoft is experiencing the same
  1812. phenomenon.  For example, the size of Excel went from 4 MBytes in
  1813. 1990, to over 16 MBytes today.  Microsoft is looking at OLE
  1814. components to improve the situation.  Lotus has a similar story.  It
  1815. shipped 1-2-3 shipped on one floppy in 1982; today 1-2-3, requires
  1816. 11 MBytes of disk space to install.  Lotus is looking at both OLE
  1817. and OpenDoc to fix the problem.
  1818.  
  1819.  
  1820. Components to the Rescue
  1821.  
  1822. Objects have been freed from the shackles of a particular
  1823. language or platform.  Programmers have been liberated from the
  1824. confines of one compiler or family of class libraries.  Objects
  1825. can be everywhere, working together and delivering a new world
  1826. of opportunity to the next generation of systems architectures.
  1827.  
  1828.                          -- Martin Anderson, Chairman
  1829.                             Integrated Objects
  1830.                             (June, 1995)
  1831.  
  1832. Object-oriented programming has long been advanced as a solution to
  1833. the problems we just described.  However, objects by themselves do
  1834. not provide an infrastructure through which software created by
  1835. different vendors can interact with one another within the same
  1836. address space--much less across address spaces, networks, and
  1837. operating systems.  The solution is to augment classical objects
  1838. with a standard component infrastructure.
  1839.  
  1840. OpenDoc and OLE are currently the leading component standards for
  1841. the desktop; CORBA provides a component standard for the enterprise.
  1842. CORBA and OpenDoc complement each other--OpenDoc uses CORBA as its
  1843. object bus.  These new component standards will change the economics
  1844. of software development.  Monolithic applications--both on the
  1845. desktop and in the enterprise--will be replaced with component
  1846. suites.  Here's how this new technology will affect you:
  1847.  
  1848. -  Power users will find it second nature to assemble their own
  1849.    personalized applications using off-the-shelf components.  They
  1850.    will use scripts to tie the parts together and customize their
  1851.    behavior.
  1852.  
  1853. -  Small developers and ISVs will find that components reduce expenses
  1854.    and lower the barriers to entry in the software market.  They can
  1855.    create individual components with the knowledge that they will
  1856.    integrate smoothly with existing software created by larger
  1857.    development shops--they do not have to reinvent all the functions
  1858.    around them.  They can get fine-grained integration instead of
  1859.    today's "band-aid" integration.  In addition, they get faster
  1860.    time to market because the bulk of an application is already there.
  1861.  
  1862. -  Large developers, IS shops, and system integrators will use
  1863.    component suites to create (or assemble) enterprise-wide
  1864.    client/server applications in record time.  Typically, about 80%
  1865.    of the function they need will be available as off-the-shelf
  1866.    components.  The remaining 20% is the value-added they provide.
  1867.    The client/server systems may be less complex to test because of
  1868.    the high reliability of the pretested components.  The fact that
  1869.    many components are black boxes reduces the overall complexity
  1870.    of the development process. Components--especially of the CORBA
  1871.    variety--will be architected to work together in intergalactic
  1872.    client/server networks (Parts 2 and 3 provide more details).
  1873.  
  1874. -  Desktop vendors will use components to assemble applications that
  1875.    target specific markets (for example, "WordPerfect for Legal
  1876.    Firms").  Instead of selling monster suites--packed with everything
  1877.    but the kitchen sink--at rock-bottom prices, they will be able to
  1878.    provide their consumers with what they really need.  Increased
  1879.    customization and more malleable products will create new market
  1880.    segments.  Consumers will not be at the mercy of the long product
  1881.    release cycles to get new functions.  They can buy add-on
  1882.    functions--in the form of components--when they need it.
  1883.  
  1884. Figure: Testimony Cartoon
  1885.  
  1886.  
  1887. In summary, components reduce application complexity, development
  1888. cost, and time to market.  They also improve software reusability,
  1889. maintainability, platform independence, and client/server
  1890. distribution.  Finally, components provide more freedom of choice
  1891. and flexibility.
  1892.  
  1893.  
  1894. When Can We Expect These Components?
  1895.  
  1896. The transition to component-based software will change the way
  1897. we buy and build systems and what it means to be a software
  1898. engineer.
  1899.  
  1900.                          -- Dave Thomas, President
  1901.                             Object Technology International
  1902.                             (March, 1995)
  1903.  
  1904. By 1997, most new software will be developed (or assembled) using
  1905. components.  According to Strategic Focus, 25% of developers are
  1906. already building component software today.  This number climbs
  1907. abruptly to include 66% of all developers by the end of 1996.  This
  1908. means that in less than two years, two out of three developers will
  1909. have adopted the component approach (see Figure 2-4).
  1910.  
  1911. Figure 2-4.  When Developers Plan to Start Developing With Components
  1912.              (Source: Strategic Focus, January 1995).
  1913.  
  1914. If this forecast is correct, then the software industry is now at
  1915. the same point where the hardware industry was about 23 years ago.
  1916. At that time, the first integrated circuits (ICs) were developed to
  1917. package discrete functions into hardware.  ICs were wired together
  1918. on boards to provide more complex functions.  These boards were
  1919. eventually miniaturized into ICs.  These new and more powerful ICs
  1920. were wired together on new boards, and so on.  We should experience
  1921. the same spiral with software.  A component is what Brad Cox calls
  1922. a software IC.  Frameworks are the boards we plug these components
  1923. into.  The object bus provides the backplane.  Families of software
  1924. ICs that play together are called suites.  You should be able to
  1925. purchase your software ICs--or components--through standard part
  1926. catalogs.  According to Gartner Group, components will foster the
  1927. emergence of three new markets: 1) the component market itself, 2)
  1928. a market for component assembly tools, and 3) a market for custom
  1929. applications developed using components.
  1930.  
  1931. So, the million-dollar question is: Why didn't this happen any
  1932. sooner?  Why did we have to wait 23 years to follow the footsteps
  1933. of our cousins, the hardware engineers?  Yes, it's true that for
  1934. almost 20 years the software industry has been talking about reuse,
  1935. objects, and methodologies that would get us out of the crises of
  1936. the day.  The difference this time is that we have two standards to
  1937. choose from: OpenDoc/CORBA and OLE/COM.  Without standards, you
  1938. cannot have components.  So, it didn't happen sooner because our
  1939. industry did not have the right component infrastructure or
  1940. standards.  We now have both.
  1941.  
  1942.  
  1943. So, What Exactly Is a Component?
  1944.  
  1945. A component is a piece of software small enough to create and
  1946. maintain, big enough to deploy and support, and with standard
  1947. interfaces for interoperability.
  1948.  
  1949.                          -- Jed Harris, President
  1950.                             CI Labs
  1951.                             (January, 1995)
  1952.  
  1953. Components interoperate using language-neutral client/server
  1954. interaction models.  Unlike traditional objects, components can
  1955. interoperate across languages, tools, operating systems, and
  1956. networks.  But components are also object-like in the sense that
  1957. they support inheritance, polymorphism, and encapsulation.  Note
  1958. that some components--Ivar Jacobson calls them black box components--
  1959. cannot be extended through inheritance.  OLE components fall into
  1960. the black box category.  However, both CORBA and OpenDoc components
  1961. support inheritance.  As a result, they let you build either white
  1962. box or black box components.  A white box component is a component
  1963. that behaves like a classical object.
  1964.  
  1965. Because components mean different things to different people, we
  1966. will define the functions a minimal component must provide.  In the
  1967. next section, we expand our definition to include features that
  1968. supercomponents must provide.  Our definition of a component is a
  1969. composite of what CORBA, OpenDoc, and OLE provide.  Most of the
  1970. earlier definitions of components were based on wish lists.  Now
  1971. that we have standards, we can use them to derive a definition.  So,
  1972. a minimalist component has the following properties:
  1973.  
  1974. -  It is a marketable entity.  A component is a self-contained,
  1975.    shrink-wrapped, binary piece of software that you can typically
  1976.    purchase in the open market.
  1977.  
  1978. -  It is not a complete application.  A component can be combined
  1979.    with other components to form a complete application.  It is
  1980.    designed to perform a limited set of tasks within an application
  1981.    domain.  Components can be fine-grained objects--for example, a
  1982.    C++ size object; medium-grained objects--for example, a GUI
  1983.    control; or coarse-grained objects--for example, an applet.
  1984.  
  1985. -  It can be used in unpredictable combinations.  Like real-world
  1986.    objects, a component can be used in ways that were totally
  1987.    unanticipated by the original developer.  Typically, components
  1988.    can be combined with other components of the same family--called
  1989.    suites--using plug-and-play.
  1990.  
  1991. -  It has a well-specified interface.  Like a classical object, a
  1992.    component can only be manipulated through its interface.  This
  1993.    is how the component exposes its function to the outside world.
  1994.    A CORBA/OpenDoc component also provides an Interface Definition
  1995.    Language that you can use to invoke the component or inherit and
  1996.    override its functions.  Note that the component's object-like
  1997.    interface is separate from its implementation.  A component can
  1998.    be implemented using objects, procedural code, or by encapsulating
  1999.    existing code.
  2000.  
  2001. -  It is an interoperable object.  A component can be invoked as an
  2002.    object across address spaces, networks, languages, operating
  2003.    systems, and tools.  It is a system-independent software entity.
  2004.  
  2005. -  It is an extended object.  Components are bona fide objects in the
  2006.    sense that they support encapsulation, inheritance, and
  2007.    polymorphism.  However, components must also provide all the
  2008.    features associated with a shrink-wrapped standalone object.
  2009.    These features will be discussed in the next section.
  2010.  
  2011. In summary, a component is a reusable, self-contained piece of
  2012. software that is independent of any application.
  2013.  
  2014.  
  2015. So, What Is a Supercomponent?
  2016.  
  2017. If the components come with a bad reputation, no one will use
  2018. them. Therefore components must be of an extraordinary quality.
  2019. They need to be well tested, efficient, and well
  2020. documented...The component should invite reuse.
  2021.  
  2022.                          -- Ivar Jacobson, Author
  2023.                             Object-Oriented Software Engineering
  2024.                             (Addison-Wesley, 1993)
  2025.  
  2026. Supercomponents are components with added smarts.  The smarts are
  2027. needed for creating autonomous, loosely-coupled, shrink-wrapped
  2028. objects that can roam across machines and live on networks.
  2029. Consequently, components need to provide the type of facilities that
  2030. you associate with independent networked entities--including:
  2031.  
  2032. -  Security--a component must protect itself and its resources from
  2033.    outside threats.  It must authenticate itself to its clients, and
  2034.    vice versa.  It must provide access controls.  And it must keep
  2035.    audit trails of its use.
  2036.  
  2037. -  Licensing--a component must be able to enforce licensing policies
  2038.    including per-usage licensing and metering.  It is important to
  2039.    reward component vendors for the use of their components.
  2040.  
  2041. -  Versioning--a component must provide some form of version control;
  2042.    it must make sure its clients are using the right version.
  2043.  
  2044. -  Life cycle management--a component must manage its creation,
  2045.    destruction, and archival.  It must also be able to clone itself,
  2046.    externalize its contents, and move from one location to the next.
  2047.  
  2048. -  Support for open tool palettes--a component must allow itself to
  2049.    be imported within a standard tool palette.  An example is a tool
  2050.    palette that supports OLE OCXs or OpenDoc parts.  A component
  2051.    that abides by an open palette's rules can be assembled with other
  2052.    components using drag-and-drop and other visual assembly
  2053.    techniques.
  2054.  
  2055. -  Event notification--a component must be able to notify interested
  2056.    parties when something of interest happens to it.
  2057.  
  2058. -  Configuration and property management--a component must provide an
  2059.    interface to let you configure its properties and scripts.
  2060.  
  2061. -  Scripting--a component must permit its interface to be controlled
  2062.    via scripting languages.  This means the interface must be
  2063.    self-describing and support late binding.
  2064.  
  2065. -  Metadata and introspection--a component must provide, on request,
  2066.    information about itself.  This includes a description of its
  2067.    interfaces, attributes, and the suites it supports.
  2068.  
  2069. -  Transaction control and locking--a component must transactionally
  2070.    protect its resources and cooperate with other components to
  2071.    provide all or nothing integrity.  In addition, it must provide
  2072.    locks to serialize access to shared resources.
  2073.  
  2074. -  Persistence--a component must be able to save its state in a
  2075.    persistent store and later restore it.
  2076.  
  2077. -  Relationships--a component must be able to form dynamic or permanent
  2078.    associations with other components.  For example, a component can
  2079.    contain other components.
  2080.  
  2081. -  Ease of use--a component must provide a limited number of operations
  2082.    to encourage use and reuse.  In other words, the level of
  2083.    abstraction must be as high as possible to make the component
  2084.    inviting to use.
  2085.  
  2086. -  Self-testing--a component must be self-testing.  You should be able
  2087.    to run component-provided diagnostics to do problem
  2088.    determination.
  2089.  
  2090. -  Semantic messaging--a component must be able to understand the
  2091.    vocabulary of the particular suites and domain-specific
  2092.    extensions it supports.
  2093.  
  2094. -  Self-installing--a component must be able to install itself and
  2095.    automatically register its factory with the operating system or
  2096.    component registry.  The component must also be able to remove
  2097.    itself from disk when asked to do so.
  2098.  
  2099.  
  2100. This list should give you a pretty good idea of the level of quality
  2101. and functionality we expect from our components.  The good news is
  2102. that both OpenDoc/CORBA and OLE/COM already provide quite a few of
  2103. these functions.  Typical OpenDoc/CORBA implementations let you add
  2104. this behavior to ordinary components via mixins at build time.  Some
  2105. CORBA implementations--for example, SOM--even let you insert this
  2106. system behavior into binary components at run time.  OLE lets you
  2107. add the behavior at build time by composing components that consist
  2108. of multiple interfaces; an outer component can then call the
  2109. appropriate interfaces via a reuse technique called aggregation.
  2110.  
  2111.  
  2112. Business Objects: The Ultimate Components
  2113.  
  2114. Components will help users focus on tasks, not tools, just as
  2115. a well-stocked kitchen lets you focus on preparing and enjoying
  2116. great food and not on the brand of your ingredients.
  2117.  
  2118.                          -- Dave LeFevre, Novell/WordPerfect
  2119.                             (January, 1995)
  2120.  
  2121. Distributed objects are by definition components.  The distributed
  2122. object infrastructure is really a component infrastructure.
  2123. Programmers can easily get things to collaborate by writing code for
  2124. the two sides of the collaboration.  The trick, however, is to get
  2125. components that have no previous knowledge of each other to do the
  2126. same.  To get to this point, you need standards that set the rules
  2127. of engagement for different component interaction boundaries.
  2128. Together, these different interaction boundaries define a
  2129. distributed component infrastructure.
  2130.  
  2131. At the most basic level, a component infrastructure provides an
  2132. object bus--the Object Request Broker (ORB)--that lets components
  2133. interoperate across address spaces, languages, operating systems,
  2134. and networks.  The bus also provides mechanisms that let components
  2135. exchange metadata and discover each other.  At the next level, the
  2136. infrastructure augments the bus with add-on system-level services
  2137. that help you create supersmart components.  Examples of these
  2138. services include licensing, security, version control, persistence,
  2139. suite negotiation, semantic messaging, scripting, transactions, and
  2140. many others.
  2141.  
  2142. The ultimate goal is to let you create components that behave like
  2143. business objects.  These are components that model their real-world
  2144. counterparts in some application-level domain.  They typically
  2145. perform specific business functions--for example, a customer, car,
  2146. or hotel.  These business objects can be grouped into visual suites
  2147. that sit on a desktop but have underlying client/server webs.
  2148.  
  2149. So the ultimate Nirvana in the client/server components business are
  2150. supersmart business object components that do more than just
  2151. interoperate--they collaborate at the semantic level to get a job
  2152. done.  For example, roaming agents on a global network must be able
  2153. to collaborate to conduct negotiations with their fellow agents.
  2154. Agents are examples of business objects.  The infrastructure
  2155. provides application-level collaboration standards in the form of
  2156. application frameworks.  These frameworks enforce the rules of
  2157. engagement between independent components and allows them to
  2158. collaborate in suites.
  2159.  
  2160. Figure 2-5 shows the evolution of components from interoperability
  2161. to collaboration.  This evolution corresponds to the service
  2162. boundaries of the component infrastructure.  The component bus gives
  2163. you simple interoperability; the system services give you supersmart
  2164. components; and the application frameworks provide the
  2165. application-level semantics for components to collaborate in suites.
  2166.  
  2167. Figure 2-5.  Component Evolution and Infrastructure Boundaries.
  2168.  
  2169.  
  2170. Your Guide to the Symbols Used in This Survival Guide
  2171.  
  2172. This section gives you a quick guide to the notation we use in this
  2173. book.  We're not trying to invent a new OO notation--Booch diagrams
  2174. are just fine with us.  However, we did take a few artistic liberties
  2175. to make the notation more fun and intuitive for people that are
  2176. looking at objects for the first time.  So here's your quick guide
  2177. to the symbols we use.
  2178.  
  2179.  
  2180. Objects and OLE Interfaces
  2181.  
  2182. Figure 2-6 shows the three symbols we use to denote objects and OLE
  2183. interfaces.  The ball-like icon denotes an object usually in some
  2184. type of relationship--for example, an object on a bus.  The second
  2185. symbol shows an object and its methods; sometimes we group methods
  2186. in categories.  The third symbol denotes an OLE object consisting
  2187. of multiple interfaces.  The symbol for an interface is a plug-in
  2188. jack; it is really a grouping for a collection of methods.
  2189.  
  2190. Figure 6.  Objects and OLE Objects.
  2191.  
  2192.  
  2193. A Class Hierarchy
  2194.  
  2195. Figure 2-7 shows a two-level class hierarchy.  In this case, the
  2196. object inherits its methods from two parent classes and adds a few
  2197. of its own.  We show the inheritance relationship as a thin arrow
  2198. pointing from an object to its parent.
  2199.  
  2200. Figure 7.  A Class Hierarchy and Inheritance.
  2201.  
  2202.  
  2203. Icons for Components, Frameworks, and ORBs
  2204.  
  2205. Figure 2-8 shows a miscellaneous set of icons we use for components,
  2206. frameworks, and object buses.  You'll see these icons everywhere.
  2207. The component icon is the component person.  Component people--they
  2208. come in different genders, ages, and roles--are very social and they
  2209. make great cartoon characters.  The icon for a framework looks like
  2210. a hardware board with a puzzle piece.  The board is the framework;
  2211. the puzzle piece is the extension you add to the framework.  The
  2212. object bus looks like a hardware bus; we use it to show an ORB or
  2213. any medium that objects use to interoperate.  The little balls are
  2214. objects that hang off the bus.
  2215.  
  2216. Figure 8.  Miscellaneous Icons: Component, Framework, and Object Bus.
  2217.  
  2218.  
  2219. Object Interaction Diagrams
  2220.  
  2221. An object-oriented program's run-time structure often bears
  2222. little resemblance to its code structure.  The code is frozen at
  2223. compile-time; it consists of classes of fixed inheritance
  2224. relationships.  A program's run-time structure consists of rapidly
  2225. changing networks of communicating objects.  Trying to understand
  2226. one from the other is like trying to understand the dynamism of
  2227. living ecosystems from the static taxonomy of plants and animals,
  2228. and vice versa.
  2229.  
  2230.                          -- Erich Gamma et al., Authors
  2231.                             Design Patterns
  2232.                             (Addison Wesley, 1994)
  2233.  
  2234. We use object interaction diagrams to trace the execution of a
  2235. scenario that shows a run-time collaboration between objects (see
  2236. Figure 2-9).  An object is represented by its icon and a vertical
  2237. line that drops down from it.  The thick horizontal arrows denote
  2238. method invocations between objects.  We use thin arrows to denote
  2239. other types of interactions; for example, creating an object.  The
  2240. numbers denote the sequence of events; you will usually find an
  2241. explanation in the text that goes along with a number (if it's very
  2242. obvious, we skip the explanation).  Note that time elapses from the
  2243. top moving down.
  2244.  
  2245. Figure 9.  An Object Interaction Diagram for Object Scenarios.
  2246.  
  2247.  
  2248. The Component Road Map
  2249.  
  2250. The clearer the view of our dreams, the greater our cohesion.
  2251.  
  2252.                          -- Carlos Castaneda
  2253.                             The Art of Dreaming
  2254.  
  2255. Now that we've developed a common vocabulary around objects and
  2256. components, let's revisit the plan for this book.  Our road map
  2257. follows the component evolution path shown in Figure 2-5.  Part 2
  2258. covers the CORBA object bus and system-level object services in great
  2259. detail.  Part 3 covers application-level frameworks--including CORBA
  2260. frameworks and business objects, OpenDoc, OLE, Taligent, OpenStep,
  2261. and Newi.  Part 4 covers OpenDoc in depth.  We go over all the
  2262. features of its compound document application-level framework.  Part
  2263. 5 covers OLE/COM in depth.  This part covers both OLE's object bus--
  2264. called COM--and its compound document application-level framework.
  2265. Part 6 helps you narrow down some of your options.  We compare the
  2266. component infrastructures, look at how they interoperate, and
  2267. speculate on where it's all going.
  2268.  
  2269.  
  2270.  
  2271. ---------------------- Trademarks --------------------------------------
  2272.  
  2273.  
  2274. Apple Computer, Inc.--Apple; AppleScript; AppleTalk;
  2275. Bedrock; Bento; MacApp; Macintosh; MacOS; ODF; Open Scripting
  2276. Architecture (OSA); OpenDoc; System 7
  2277.  
  2278. American Telephone and Telegraph--AT&T
  2279.  
  2280. Black and White Software--UIX/MX
  2281.  
  2282. Borland International, Inc.--Application FrameWorks;
  2283. dBase; Delphi; FoxPro; OWL; Paradox
  2284.  
  2285. Cahners Publishing--Datamation
  2286.  
  2287. Candle Corp.--Candle
  2288.  
  2289. Canopus Research--Canopus Research
  2290.  
  2291. Club Med Sales, Inc.--Club Med
  2292.  
  2293. Component Integration Laboratories--CI Labs
  2294.  
  2295. CompuServe, Inc.--CompuServe
  2296.  
  2297. Digital Equipment Corp.--Common Object Model (COM); DECnet
  2298.  
  2299. Digital--ObjectBroker
  2300.  
  2301. General Magic--General Magic; Telescript
  2302.  
  2303. Groupe Bull--Groupe Bull
  2304.  
  2305. Expersoft--XShell
  2306.  
  2307. Hewlett-Packard Corp.--Hewlett-Packard; HP; HP-UX;
  2308. ORB Plus (ORB+); HyperDesk; DOMS
  2309.  
  2310. Informix, Inc.--Informix; INFORMIX; ILOG; BROKER
  2311.  
  2312. Integrated Objects--Newi
  2313.  
  2314. Intel--Pentium
  2315.  
  2316. Iona--Orbix
  2317.  
  2318. IBM Corp.--AIX; AS/400; CICS; CPI-C; CSet++; CUA'91; IBM;
  2319. ICLUI; MVS; NetBIOS; OS/2; OS/2 Warp; OS/400; Presentation Manager; SOM;
  2320. SOMobjects; VisualAge; VisualAge C++; Win-OS/2; Workplace Shell; cc:Mail;
  2321. DataLens; dBASE; Lotus; Lotus Link; Lotus 1-2-3; Lotus Notes; Lotus VIP
  2322.  
  2323. MaGraw-Hill--BYTE Magazine
  2324.  
  2325. Massachusetts Institute of Technology--Kerberos; X Window
  2326.  
  2327. MetaWare--MetaWare
  2328.  
  2329. Microsoft Corp.--AppWizard; Component Object Model (COM);
  2330. ClassWizard; MS DOS; Microsoft; Object Linking and Embedding; MFC; OCX;
  2331. ODBC; OLE; OLE DB; OLE for the Enterprise; OLE Team Development;
  2332. OLE Transactions; Visual Basic; Visual C++; Windows 95; Windows;
  2333. Windows for Workgroups; Windows NT; Windows NT Advanced; Win32; XENIX
  2334.  
  2335. Miller-Freeman Publishing--Dr. Dobb's Journal
  2336.  
  2337. NEC--NEC-ORB; NetLinks, Inc.; ORBitize
  2338.  
  2339. Novell, Inc.--NetWare; NetWare Management System;
  2340. NetWare for UNIX; Novell; UnixWare; WordPerfect
  2341.  
  2342. Object Design, Inc.--Object Design; ObjectStore
  2343.  
  2344. Object Management Group--CORBA; Object Management Architecture
  2345.  
  2346. Open Software Foundation, Inc.--DCE; Motif; OSF; OSF/1;
  2347. Oracle, Inc.
  2348.  
  2349. ORACLE--Oracle8
  2350.  
  2351. PostModern Computing--ORBeline
  2352.  
  2353. Santa Cruz Operations, Inc.--SCO UNIX
  2354.  
  2355. Silicon Graphics, Inc.--IRIX
  2356.  
  2357. Sun Microsystems Inc.--DOE; ONC-RPC; RPC; SUN; SPARC
  2358.  
  2359. Sunsoft, Inc.--Distributed Object Mangement; Network File System;
  2360. Network Information System; OpenLook; Open Network Computing; Solaris
  2361.  
  2362. Sybase, Inc.--Sybase; Sybase SQL Server; Transact-SQL
  2363.  
  2364. Symantec--Symantec
  2365.  
  2366. Taligent, Inc.--CommonPoint; People, Places, and Things;
  2367. Taligent
  2368.  
  2369. Tandem Computers--NonStop SQL; NonStop Guardian; Pathway;
  2370. Serverware
  2371.  
  2372. Time-Warner, Inc.--Time Magazine
  2373.  
  2374. Tivoli Systems Inc.--Tivoli Management Environment
  2375.  
  2376. Transarc Corp--Transarc
  2377.  
  2378. University of California at Berkeley--Berkeley Software
  2379. Distribution; BSD; UNIX International, Inc.; UI; UI-Atlas
  2380.  
  2381. UNIX Systems Laboratories, Inc.--OpenLook; Tuxedo; UNIX
  2382.  
  2383. Visual Edge--Visual Edge
  2384.  
  2385. Watcom--Watcom
  2386.  
  2387. Xerox Corp.--ethernet
  2388.  
  2389. XVT Software, Inc.--XVT
  2390.  
  2391. X/Open Corp.--X/Open
  2392.  
  2393.  
  2394. ---------------------- END OF EXCERPT --------------------------------------
  2395.