home *** CD-ROM | disk | FTP | other *** search
/ ftp.pasteur.org/FAQ/ / ftp-pasteur-org-FAQ.zip / FAQ / object-faq / part2 < prev    next >
Text File  |  1996-04-03  |  52KB  |  1,078 lines

  1. Newsgroups: comp.object,comp.answers,news.answers
  2. Path: senator-bedfellow.mit.edu!bloom-beacon.mit.edu!hookup!news.join.ad.jp!news.imnet.ad.jp!usenet.seri.re.kr!news.cais.net!news.jsums.edu!gatech!newsfeed.internetmci.com!ncar!uchinews!news
  3. From: Bob Hathaway <rjh@geodesic.com>
  4. Subject: Comp.Object FAQ Version 1.0.9 (04-02) Part 2/13
  5. X-Nntp-Posting-Host: ford.uchicago.edu
  6. Message-ID: <Dp9q3s.9tE@midway.uchicago.edu>
  7. Followup-To: comp.object
  8. Summary: Frequently Asked Questions (FAQ) List and Available Systems For Object-Oriented Technology
  9. Sender: news@midway.uchicago.edu (News Administrator)
  10. Organization: Geodesic Systems
  11. References: <Dp9prv.92t@midway.uchicago.edu>
  12. Date: Wed, 3 Apr 1996 04:07:04 GMT
  13. Approved: news-answers-request@MIT.Edu
  14. Lines: 1061
  15. Xref: senator-bedfellow.mit.edu comp.object:46836 comp.answers:17911 news.answers:68443
  16.  
  17. Archive-name: object-faq/part2
  18. Last-Modified: 04/02/96
  19. Version: 1.0.9
  20.  
  21. OOA and OOD stand for Object-Oriented Analysis and Object-Oriented Design,
  22. respectively.  OOA strives to understand and model, in terms of object-oriented
  23. concepts (objects and classes), a particular problem within a problem domain
  24. (from its requirements, domain and environment) from a user-oriented or domain
  25. expert's perspective and with an emphasis on modeling the real-world (the
  26. system and its context/(user-)environment).  The product, or resultant model,
  27. of OOA specifies a complete system and a complete set of requirements and
  28. external interface of the system to be built, often obtained from a domain
  29. model (e.g. FUSION, Jacobson), scenarios (Rumbaugh), or use-cases (Jacobson).
  30.  
  31. [Shlaer 88] is often credited as the first book on OOA, although their method
  32. adds OO techniques to the traditional structured analysis principles of Yourdon
  33. and Constantine. Their complete approach ([Shlaer 88, 92]) consists of
  34. information modeling and recursive design, or OOA/RD and represents a recent
  35. addition to the structured analysis family (as does Martin and Odell).
  36. [Yourdon 92] provides a critique, although may only refer to their earlier
  37. work.  Many other methodologies including Rumbaugh's OMT, Martin and Odell's
  38. OOA/D, and many others, also share common ground with SA and other existing
  39. analysis methodologies with such constructs as associations (E-R), functional
  40. models, and even DFD's.  Booch, Jacobson, and Wirfs-Brock are examples of OO
  41. methodologies representing a greater departure from the conventional
  42. "structured" techniques, with greater emphasis on objects.  OOram [Reenskaug
  43. 91] provides support and emphasis on types and roles as guiding principles,
  44. which is quite powerful.  [Booch 94] presents a methodology which is an
  45. evolutionary step beyond the first edition by incorporating a collection of the
  46. best features from several of the major OO methodologies, as does HP's new
  47. FUSION methodology.
  48.  
  49. A new Unified Modeling Language (previously Unified Method) is now being worked
  50. on by Grady Booch, James Rumbaugh, and Ivar Jacobson at Rational Software which
  51. should be made into a public standard, perhaps to be adopted by the OMG.  The
  52. .8 docs can be found online from the Rational home page, http:/www.rational.com.
  53.  
  54. The usual progression is from OOA to OOD to OOP (implementation) and this
  55. Universal Process Model roughly corresponds to the Waterfall Model [Royce 70].
  56. See [Humphrey 89] and [Yourdon 92] for a few of many discussions on software
  57. life-cycle models and their use.  Humphrey also details Worldy and Atomic
  58. Process Models for finer grained analysis and design in the Defined Process
  59. (see below) and discusses other alternatives to the task oriented models.  He
  60. also provides the following critisisms on the Waterfall Model which had led to
  61. Boehm's seminal work on the Spiral Model:
  62.  
  63.   * It does not adequately address changes
  64.   * It assumes a relatively uniform and orderly sequence of development steps
  65.   * It does not provide for such methods as rapid prototyping or advanced
  66.     languages
  67.  
  68. Modern OO methodologies directly address these points and emphasize the
  69. incremental, iterative, evolutionary, concurrent and situational nature of
  70. software development.  [Boehm 86] presents a seminal spiral life-cycle model
  71. with a risk-driven incremental prototyping approach.  [Booch 91, 6.1]
  72. proposes a "round-trip gestalt" design with analyze-design iterations and
  73. an overall system perspective and [Berard 93] proposes an (incremental)
  74. "parallel-recursive design" with analyze-design-implement-test iterations.
  75. [Coad 91b] presents the following development cycle breakdown:
  76.  
  77.   Waterfall-
  78.     Analysis
  79.     Design
  80.     Programming
  81.  
  82.   Spiral-
  83.     Analysis, prototyping, risk management
  84.     Design, prototyping, risk management
  85.     Programming, prototyping, risk management
  86.     [Boehm, 1988]  
  87.  
  88.   Incremental-
  89.     A little analysis
  90.     A little design
  91.     A little programming
  92.     Repeat
  93.     [Gilb, 1988]
  94.  
  95. [Author's note: The spiral model is often incremental and may waterfall if
  96.  called for.]
  97.  
  98. Since classes and objects are used in all phases of the OO software life-cycle,
  99. the process is often referred to as seamless, meaning there is no conceptual
  100. gap between the phases as is often the case in other software development
  101. methodologies, such as the analysis (DFD's) to design (structure charts) to
  102. programming gaps found in traditional structured analysis and design.
  103. Seamlessness together with naturalness is a big advantage for consistency.
  104.  
  105. A problem domain has many realizations, or differing OOAs.  An OOA has many
  106. realizations, or differing OODs, but a similar notation is often used for
  107. the two.  An OOD also has many realizations, or differing OOPs, but allows a
  108. selection from among various languages for implementation (choosing the best
  109. language to implement the design).  But some, such as Bjarne Stroustrup, don't
  110. like OOA and OOD getting too far from OOP (implementation independent), for
  111. fear that great discrepancies could occur between OOD and OOP by losing sight
  112. of the implementation language, which in some cases is predetermined.  See also
  113. [Stroustrup 91].
  114.  
  115. From a greater perspective, the SEI has developed the Capability Maturity Model
  116. (CMM), a process-based TQM model for assessing the level of an organization's
  117. software development and which is often required of government contractors
  118. in the US [Humphrey 89].  The CMM also serves as a 5 level improvement process
  119. by specifying steps for organizations to progress to the next level, ultimately
  120. leading to statistical (process) control and sustained improvement.  Watts S.
  121. Humphrey is now working on the Personal Software Process (PSP), a scaled down
  122. version of the CMM for individuals [Humphrey 95].  Next should follow a team-
  123. based software process (TSP?).  Other CMM's in the works at the SEI include a
  124. personnel management CMM (PM-CMM).
  125.  
  126.  Level 1: Initial:    Every project is handled differently; ad hoc and chaotic.
  127.  Level 2: Repeatable: Every project is handled similarly.
  128.  Level 3: Defined:    Standard processes are defined and used for all projects.
  129.  Level 4: Managed:    A measurable basis for all improvements to the process.
  130.  Level 5: Optimizing: Emphasis on defect prevention and optimizing/continually
  131.                       improving the process.
  132.  
  133. CMM documentation is available online from: http://ricis.cl.uh.edu/CMM and
  134. ftp.sei.cmu.edu/pub/cmm/
  135.  
  136. See also:
  137. Kitson, D.H. and Masters, S. "An Analysis of SEI Software Process Assessment
  138. Results 1987-1991", CMU/SEI-92-TR-24
  139.  
  140. Humphrey, W., Snyder, T. and Willis, R. "Software Process Improvement at
  141. Hughes Aircraft", IEEE Software, July 1991
  142.  
  143. Dion, R., "Elements of a Process Improvement Program," IEEE Software, July
  144. 1992.
  145.  
  146. "Concepts on Measuring the Benefits of Software Process Improvement,"
  147. CMU/SEI-93-TR-9.
  148.  
  149. See also [Yourdon 92], [Wilkie 93], and [Booch 94] for discussions on this
  150. often cited model.  There is also an ISO 9000 standard [ISO] applicable to
  151. software quality and ami working group in Europe helping to creat the ISO
  152. SPICE [Rout 95] standard (among other work), which is similar in scope to
  153. the CMM.  To join the ami mailing list email to:
  154.   ami-request@aut.alcatel.at 
  155. with the following message: 
  156.   subscribe firstname, lastname, e-mail address.
  157.  
  158. Object-oriented analysis now includes "Enterprise Modeling" [Martin 92], also
  159. found in [Jacobson 92], and along with recent business process "reengineering"
  160. efforts places information systems within an organizational perspective by
  161. modeling entire organizations or a large part of them, with the information
  162. processing system and software products development as integrated components.
  163. [Yourdon 92] even calls for "global modeling"!
  164.  
  165.  
  166. 1.22)  Where Did Object-Orientation Come From?
  167. ----------------------------------------------
  168.  
  169. Simula was the first object-oriented language providing objects, classes,
  170. inheritance, and dynamic typing in 1967 (in addition to its Algol-60 subset).
  171. It was intended as a conveyance of object-oriented design.  Simula 1 was a
  172. simulation language, and the later general-purpose language Simula 67 is now
  173. referred to as simply Simula.  Smalltalk was the next major contributor
  174. including classes, inheritance, a high-powered graphical environment and a
  175. powerful dynamic typing mechanism (although these existed to some extent in
  176. Simula).  Self is somewhat of a Smalltalk-based next generation language, as is
  177. BETA a followup to Simula (by its original designers).
  178.  
  179. [Meyer 88] contains a brief summary and history of Simula and Smalltalk, among
  180. other OO languages.
  181.  
  182.  
  183. 1.23)  What Are The Benefits Of Object-Orientation?
  184. ---------------------------------------------------
  185.  
  186. Reuse, quality, an emphasis on modeling the real world (or a "stronger
  187. equivalence" with the RW than other methodologies), a consistent and seamless
  188. OOA/OOD/OOP package, naturalness (our "object concept"), resistance to change,
  189. encapsulation and abstraction (higher cohesion/lower coupling), and etc.
  190.  
  191. On resistance to change, system objects change infrequently while processes
  192. and procedures (top-down) are frequently changed, providing object-oriented
  193. systems with more resilient system organization.
  194.  
  195. [Harmon 93]:
  196.   Faster development
  197.   Increased Quality
  198.   Easier maintenance
  199.   Enhanced modifiability
  200.  
  201. [Booch 94]:
  202.   Exploit power of OOPs
  203.   Reuse of software and designs, frameworks
  204.   Systems more change resilient, evolvable
  205.   Reduced development risks for complex systems, integration spread out
  206.   Appeals to human cognition, naturalness
  207.  
  208.  
  209. 1.24)  What Other FAQs Are Available?
  210. -------------------------------------
  211.  
  212. FAQ's are cross-posted to news.answers and are archived on anonymous ftp from:
  213.  
  214.   rtfm.mit.edu:/pub/usenet        (also usenet-by-hierarchy, etc.)
  215.  
  216. rtfm archives several FAQs pertinent to OO (alternative/original sites are listed).
  217.  
  218.   comp.lang.ada         ajpo.sei.cmu.edu:public/comp-lang-ada/cla-faq[12]
  219.   comp.lang.beta        ftp.daimi.aau.dk:pub/beta/faq/beta-language-faq.txt
  220.   comp.lang.c++         sun.soe.clarkson.edu:pub/C++/FAQ [128.153.12.3]
  221.   comp.lang.clos
  222.   comp.lang.eiffel      ftp.cm.cf.ac.uk:/pub/eiffel/eiffel-faq
  223.   comp.lang.modula3
  224.   comp.lang.oberon
  225.   comp.lang.objective-c http://www.marble.com/people/dekorte/Objective-C/objc.html
  226.   comp.lang.sather      ftp.ICSI.Berkeley.EDU:pub/sather [not on rtfm]
  227.   comp.lang.scheme      ftp.think.com:/public/think/lisp/scheme-faq.text
  228.   comp.lang.smalltalk   xcf.Berkeley.EDU:misc/smalltalk/FAQ/SmalltalkFAQ.entire
  229.   comp.object           zaphod.uchicago.edu:/pub/CompObj8.faq(.Z) (also www)
  230.   comp.object.logic     ftp.cs.cmu.edu:(2)prg_1.faq,prg_2.faq  [128.2.206.173]
  231.   comp.software-eng
  232.  
  233. Notes:
  234.   1) xcf.Berkeley.EDU is 128.32.138.1
  235.   2) /afs/cs.cmu.edu/project/ai-repository/ai/pubs/faqs/prolog/
  236.   3) BETA FAQ www (most current): http://www.daimi.aau.dk/~beta/FAQ
  237.                                   http://www.daimi.aau.dk/~beta/info
  238.      Email: info@mjolner.dk with body: send BETA beta-faq
  239.   4) Modula-3: ftp.vlsi.polymtl.ca:pub/m3/m3-faq.ps.
  240.                http://froh.vlsi.polymtl.ca/m3/m3-faq.html.
  241.      Archives: gatekeeper.dec.com:pub/DEC/Modula-3/comp.lang.modula3
  242.      Newsgroup relay mailing list; message to m3-request@src.dec.com
  243.   5) comp.lang.eiffel archive: http://www.cm.cf.ac.uk/CLE/archive_index.html
  244.  
  245. See APPENDIX E:60 for a CDROM with Internet FAQs.
  246.  
  247. A new C++ libraries FAQ is posted monthly to comp.lang.c++ and should be on
  248. rtfm soon.  Contact cpplibs@trmphrst.demon.co.uk.  It contains anonymous ftp
  249. sites and commercial libraries and may be merged with this FAQ eventually.
  250.  
  251. Many FAQs are also available from mail-servers, however most can be accessed by
  252. the rtfm mail-server.  Mail to mail-server@rtfm.mit.edu with help and index in
  253. the body with no leading spaces and on separate lines for more information.
  254.  
  255. Example Unix Command (will retrieve this FAQ in about 26 pieces (and growing)):
  256.   mail mail-server@rtfm.mit.edu
  257.   Subject:
  258.   send usenet/comp.object/*
  259.  
  260. There is also a great ftp site for sci.virtual-worlds on:
  261.   stein.u.washington.edu (140.142.56.1)
  262.           - home of sci.virtual-worlds, huge faq w/ great info!
  263.           - if unable to use try ftp.u.washington.edu
  264.           /public/virtual-worlds
  265.  
  266. [While VR may not be directly related to comp.object, it is most interesting!
  267.    - The Author]
  268.  
  269.  
  270. SECTION 2:  TYPING
  271. ==================
  272.  
  273. There are many definitions of type (and class and related concepts).  Many
  274. authors define the terms as applied by their particular approach or language,
  275. however we shall proceed in the face of this diversity.
  276.  
  277.   References
  278.     [Blair 89]          Some Typing Topics.
  279.     [Booch 91]          Small Section on Typing.
  280.     [Cardelli 85]       Discussion on Object-Oriented Typing.
  281.     [Gunter 94]         Theoretical Aspects of Object-Oriented Programming.
  282.     [Kim 89, ch1]       Discussion on Some Research Topics.
  283.  
  284.  
  285. 2.1)  What Is Polymorphism?
  286. ---------------------------
  287.  
  288. Polymorphism is a ubiquitous concept in object-oriented programming and is
  289. defined in many ways, so many definitions are presented from: Websters',
  290. Author, Strachey, Cardelli and Wegner, Booch, Meyer, Stroustrup, and Rumbaugh.
  291. Polymorphism is often considered the most powerful facility of an OOPL.
  292.  
  293. > Webster's New World Dictionary:
  294.  
  295. Polymorphism 1. State or condition of being polymorphous.  2. Cryall.
  296.   crystallization into 2 or more chemically identical but
  297.   crystallographically distinct forms.  3.  Zool., Bot. existence of an
  298.   animal or plant in several forms or color varieties.
  299.  
  300. polymorphous adj. having, assuming, or passing through many or various forms,
  301.   stages, or the like.  Also, polymorphic. [<Gk polymorphous multiform]
  302.  
  303.  
  304. > Author's Definition:
  305.  
  306. Polymorphism is the ability of an object (or reference) to assume (be replaced
  307. by) or become many different forms of object.  Inheritance (or delegation)
  308. specifies slightly different or additional structure or behavior for an object,
  309. and these more specific or additional attributes of an object of a base class
  310. (or type) when assuming or becoming an object of a derived class characterizes
  311. object-oriented polymorphism.  This is a special case of parametric
  312. polymorphism, which allows an object (or reference) to assume or become any
  313. object (possibly satisfying some implicit or explicit type constraints
  314. (parametric type), or a common structure), with this common structure being
  315. provided by base classes or types (subclass and subtype polymorphism,
  316. respectively).
  317.  
  318. "Poly" means "many" and "morph" means "form".  The homograph polymorphism has
  319. many uses in the sciences, all referring to objects that can take on or assume
  320. many different forms.  Computer Science refers to Strachey's original
  321. definitions of polymorphism, as divided into two major forms, parametric and
  322. ad-hoc.  Cardelli and Wegner followup with another classification scheme,
  323. adding inclusion polymorphism for subtyping and inheritance.
  324.  
  325.  
  326. > Strachey's Original Definition [Strachey 67]:
  327.  
  328. "Parametric polymorphism is obtained when a function works uniformly on a range
  329. of types; these types normally exhibit some common structure.  Ad-hoc
  330. polymorphism is obtained when a function works, or appears to work, on several
  331. different types (which may not exhibit a common structure) and may behave in
  332. unrelated ways for each type."  
  333.  
  334. Parametric polymorphism is also referred to as "true" polymorphism, whereas
  335. ad-hoc polymorphism isn't (apparent polymorphism).
  336.  
  337.  
  338. > Cardelli and Wegner's Definition [Cardelli 85]:
  339.  
  340. C+W refine Strachey's definition by adding "inclusion polymorphism" to model
  341. subtypes and subclasses (inheritance).  Strachey's parametric polymorphism is
  342. divided into parametric and inclusion polymorphism, which are closely related,
  343. but separated to draw a clear distinction between the two forms, which are then
  344. joined as specializations of the new "Universal" polymorphism.
  345.  
  346.                                  |-- parametric
  347.                  |-- universal --|
  348.                  |               |-- inclusion
  349.   polymorphism --|
  350.                  |               |-- overloading
  351.                  |-- ad hoc    --|
  352.                                  |-- coercion
  353.  
  354. Polymorphic Languages: some values and variables may have more than one type.
  355.  
  356. Polymorphic Functions: functions whose operands (actual parameters) can
  357.   have more than one type.  [...] If we consider a generic function to be
  358.   a value, it has many functional types and is therefore polymorphic.
  359.  
  360. Polymorphic Types: types whose operations are applicable to operands of more
  361.   than one type.
  362.  
  363. Parametric Polymorphism: a polymorphic function has an implicit or explicit
  364.   type parameter which determines the type of the argument for each
  365.   application of that function.
  366.  
  367. Inclusion Polymorphism: an object can be viewed as belonging to many different
  368.   classes that need not be disjoint; that is, there may be inclusion of
  369.   classes.
  370.  
  371. The two forms of "Universal Polymorphism", parametric and inclusion are closely
  372. related, but are distinct enough in implementation to justify separate
  373. classifications.
  374.  
  375. Parametric polymorphism is referred to as generics.  Generics can be syntactic,
  376. where each instantiation creates a specialized version of the code allowing
  377. fast running execution, but in a "true polymorphic system", only a single
  378. implementation is used.
  379.  
  380. On inheritance is subtype polymorphism:
  381. "Subtyping on record types corresponds to the concept of inheritance
  382. (subclass) in languages, especially if records are allowed to have functional
  383. components."
  384.  
  385. Author's Notes:
  386. Implicit parametric polymorphism can be implemented with type inferencing
  387. schemes [Aho 85].  ML is prototypical in providing this facility.
  388.  
  389. Inclusion polymorphism is common and is found in languages such as Simula,
  390. Ada95, C++, CLOS, Eiffel and etc. (subclass polymorphism).  Smalltalk also
  391. uses inclusion polymorphism; its used in declaring classes, and subclass
  392. polymorphism is used in practice but not enforced.  For inheritance, inclusion
  393. polymorphism specifies an instance of a subclass can appear wherever an
  394. instance of a superclass is required.  For subtyping (subtype polymorphism),
  395. the same applies because all operations required by the supertype are present
  396. in the subtype (subtype is subset of supertype).  Cardelli and Wegner view
  397. classes as sets of objects (resulting in subtype objects are a subset of
  398. supertype objects, or an extensional view), as contrasted with a feature based
  399. (intensional) approach (where subtypes are supersets of (contain) supertypes).
  400. MI provides an interesting example here, as it is set intersection with an
  401. extensional view and set union with an intensional view.  Details are left as
  402. an exercise for the reader.
  403.  
  404. Ada generics and C++ templates provide explicit syntactic generics.  While
  405. Ada may infer some actual generic parameters (operations) and C++ doesn't
  406. require explicit instantiation of its template functions, formal generic
  407. parameters must still be declared and many bodies are generated.
  408.  
  409. Inclusion polymorphism can refer to subtyping, or having at least as much or
  410. more than required.  Since derived classes can inherit structure and behavior
  411. from base classes, such inheritance is an example of inclusion polymorphism
  412. with respect to representation (subclassing).  An example of inclusion
  413. polymorphism with respect to assignment (and initialization, or replacement if
  414. viewed in an almost symbolic way) occurs when object types may be specified and
  415. assignment is based on actual object membership in that type (often of the CLOS
  416. is-a-member-of form in OO).  Emerald provides another example of an object-
  417. oriented language using inclusion polymorphism with respect to replacement;
  418. however, inclusion is with respect to subtyping only with abstract types
  419. ("bounded quantification" by C+W.  C+W's parameters are subtype polymorphic
  420. but lose the inherent type).  Any object possessing all required operations is
  421. acceptable and no inheritance relation is required (subtype polymorphism).
  422. They refer to this as "best-fitting" types [Black 86].  The original Trellis/
  423. Owl also had such a facility but with two separate inheritance hierarchies,
  424. although it was abandoned in favor of a single class-based approach for
  425. simplicity.  See also section 2.7.
  426.  
  427. [As inclusion polymorphism covers both subtype and subclass polymorphism,
  428.  perhaps IP could be further divided in C+W's above classification.]
  429.  
  430.  
  431. > Booch's Definition [Booch 91, p. 517]:
  432.  
  433. polymorphism  A concept in type theory, according to which a name (such as a
  434. variable declaration) may denote objects of many different classes that are
  435. related by some common superclass; thus, any object denoted by this name is
  436. able to respond to some common set of operations in different ways.
  437.  
  438. Booch also has several sections devoted to polymorphism.
  439.  
  440. [The author notes Booch's definition above is clearly in the context of
  441.  conventional, classical OO and subclass polymorphism.]
  442.  
  443.  
  444. > Meyer's Definition [Meyer 88, sect. 10.1.5 Polymorphism]:
  445.  
  446. "Polymorphism" means the ability to take several forms.  In object-oriented
  447. programming, this refers to the ability of an entity to refer at run-time to
  448. instances of various classes.  In a typed environment such as Eiffel, this is
  449. constrained by inheritance: ...
  450.  
  451. [The Author notes Meyer has a following section 10.1.7 on Static Type,
  452.  dynamic type, which is relevant, but claims "... there is no way the type
  453.  of an object can ever change.  Only a reference can be polymorphic: ...".
  454.  Meyer is clear between the concept and the Eiffel realization in his
  455.  polymorphism definition above, but here neglects the "becomes" facility
  456.  as found in several dynamically typed OO languages such as Actors, CLOS,
  457.  Self and Smalltalk, which allows an object (and not just a reference) to
  458.  change its class.]
  459.  
  460.  
  461. > Stroustrup's Definition [Stroustrup 90, p. 209]:
  462.  
  463. The use of derived classes and virtual functions is often called "object-
  464. oriented programming".  Furthermore, the ability to call a variety of
  465. functions using exactly the same interface - as is provided by virtual
  466. functions - is sometimes called "polymorphism".
  467.  
  468. [The Author notes this is a functional view of polymorphism (as provided in
  469. C++).  [Stroustrup 91, p. 136] has an example of polymorphism with void *'s,
  470. but a newer template function is incomparably preferable, as implied in
  471. [Stroustrup 90, ch 14]]
  472.  
  473.  
  474. Rumbaugh's Definition [Rumbaugh 91, p. 2]:
  475.  
  476. "Polymorphism" means that the same operation may behave differently on
  477. different classes.
  478.  
  479.  
  480. 2.2)  What Does Polymorphism Boil Down To In OO Programming Languages?
  481. ----------------------------------------------------------------------
  482.  
  483. In C++, virtual functions provide polymorphism.  This is because a polymorphic
  484. object (pointer or reference (or such parameter)) is assignment compatible with
  485. any object of a derived class.  Is this polymorphism in itself?  Objects
  486. can take on objects of different forms (the derived classes), but of what use
  487. is it?  To make any difference, the differing forms must have some effect.  In
  488. dynamically typed languages, polymorphic objects are passed messages and will
  489. respond in whatever way the object has defined (usually starting from its most
  490. derived class and working its way up).  But for static objects, a virtual
  491. function is invoked.  This is the stored method from the derived class that
  492. overrode the virtual method from its base class, providing specialized behavior
  493. for the polymorphic object; and hence, polymorphism.  This common pure
  494. statically typed example is, of course, an example of inclusion polymorphism,
  495. subclass polymorphism to be more specific (see section 2.1).  Pure statically
  496. typed subtype polymorphism, as provided in Emerald, can be implemented
  497. similarly [Black 86].
  498.  
  499.  
  500. 2.3)  What Is Dynamic Binding?
  501. ------------------------------
  502.  
  503. Dynamic binding has two forms, static and dynamic.  Statically-typed dynamic
  504. binding is found in languages such as C++ (virtual functions) and Eiffel
  505. (redefinition).  It is not known which function will be called for a virtual
  506. function at run-time because a derived class may override the function, in
  507. which case the overriding function must be called.  Statically determining all
  508. possibilities of usage is undecidable.  When the complete program is compiled,
  509. all such functions are resolved (statically) for actual objects. Formal object
  510. usage must have a consistent way of accessing these functions, as achieved thru
  511. vtables of function pointers in the actual objects (C++) or equivalent,
  512. providing statically-typed dynamic binding (this is really just defining simple
  513. function pointers with static typechecking in the base class, and filling them
  514. in in the derived class, along with offsets to reset the receiver).
  515.  
  516. The run-time selection of methods is another case of dynamic binding, meaning
  517. lookup is performed (bound) at run-time (dynamically).  This is often desired
  518. and even required in many applications including databases, distributed
  519. programming and user interaction (e.g. GUIs).  Examples can be found in
  520. [Garfinkel 93, p80] and [Cox 91, pp 64-67].  To extend Garfinkels example with
  521. multiple-polymorphism, a cut operation in an Edit submenu may pass the cut
  522. operation (along with parameters) to any object on the desktop, each of which
  523. handles the message in its own way (OO).  If an (application) object can cut
  524. many kinds of objects such as text and graphical objects, multiple-polymorphism
  525. comes into play, as many overloaded cut methods, one per type of object to be
  526. cut, are available in the receiving object, the particular method being
  527. selected based on the actual type of object being cut (which in the GUI case is
  528. not available until run-time).
  529.  
  530. Again, various optimizations exist for dynamic lookup to increase efficiency
  531. (such as found in [Agrawal 91] and [Chambers 92]).
  532.  
  533. Dynamic binding allows new objects and code to be interfaced with or added to
  534. a system without affecting existing code and eliminates switch statements.
  535. This removes the spread of knowledge of specific classes throughout a system,
  536. as each object knows what operation to support.  It also allows a reduction in
  537. program complexity by replacing a nested construct (switch statement) with a
  538. simple call.  It also allows small packages of behavior, improving coherence
  539. and loose coupling.  Another benefit is that code complexity increases not
  540. linearly but exponentially with lines of code, so that packaging code into
  541. methods reduces program complexity considerably, even further that removing
  542. the nested switch statement!  [Martin 92] covers some of these issues.
  543.  
  544.  
  545. 2.4)  Is There A Difference Between Being A Member Or Instance Of A Class?
  546. --------------------------------------------------------------------------
  547.  
  548. Yes (but be careful of context).  To use C++ terminology, an object (not
  549. a reference) is defined to be an instance of exactly one class (in classical
  550. OO), called its most derived class.  An object not directly contained in any
  551. other is called the complete object [Stroustrup 90].  An object is a member
  552. of several classes, including all of the classes its declared (or most derived)
  553. class inherits from.  With static typing and inclusion polymorphism based on
  554. class, if a polymorphic object (or reference) is made to refer to an object,
  555. that object must be a member of the polymorphic object's class.
  556.  
  557. This also provides a good example of differing definitions among object-
  558. oriented languages, since a member is defined as above in CLOS, but a member of
  559. a class is one of its instance variables in C++.
  560.  
  561.  
  562. 2.5)  What Is The Difference Between Static And Dynamic Typing?
  563. ---------------------------------------------------------------
  564.  
  565. Static typing refers to types declared in a program at compile-time, so no type
  566. information is available on objects at run-time.  Dynamic typing uses the
  567. inherent types of polymorphic objects, keeping track of the types of objects at
  568. run-time.  Statically typed dynamic binding is a compromise (usually
  569. implemented with tables of function pointers and offsets), and is how
  570. statically-typed OO languages provide polymorphism.  Some approaches provide
  571. both static and dynamic typing, sometimes with static typing providing type-
  572. safe programs and dynamic typing providing multiple-polymorphism [Agrawal 91]
  573. [Mugridge 91].  See also section 2.3.
  574.  
  575. Static typing is more efficient and reliable, but loses power.  Typical
  576. restrictions include only allowing a common set of base class functions (or
  577. any common functions for the more general subtyping or parametric polymorphic
  578. cases) to be available on formal objects and a lack of multiple-polymorphism
  579. (see section 1.19), both of which are overcome with dynamic typing.
  580.  
  581. Many languages provide dynamic typing: Smalltalk, Self, Objective-C, and etc.
  582. A limited dynamic typing scheme, called RTTI (Run Time Type Identification),
  583. is even being considered for the C++ standard.  A similar facility to safe
  584. downcasting (historically known as type narrowing), the thrust of RTTI, can
  585. also be found in recent versions of Eiffel.
  586.  
  587. See section 3.4 for a categorization of common OO languages by type system.
  588.  
  589.  
  590. 2.6)  What Is This I Hear About ML And Functional Programming Languages?
  591. ------------------------------------------------------------------------
  592.  
  593. ML, Metalanguage, is a functional programming language with a strongly typed
  594. polymorphic type system [Wikstrom 87].  Russell (see Appendix E) is a more
  595. recent functional language and Haskell [Hudak 92] provides a more modern and
  596. "pure" example.  Section 2.5 discusses why static typing has less power/
  597. flexibility than dynamic typing and the same applies to ML (although see the
  598. appendixes for an experimental dynamic extension to ML, Alcool-90 and [Cardelli
  599. 85] for a proper placement of ML's type system).  ML doesn't use inheritance
  600. for polymorphism; unlike OO languages, but provides the prototypical example of
  601. parametric polymorphism, so no inheritance is required.  This is "true" or
  602. "pure" statically (or strongly) checked parametric polymorphism, by Strachey's
  603. (and Cardelli and Wegner's) definitions.
  604.  
  605. Smalltalk is an example of a dynamically-typed language which does not check
  606. types during assignment (and hence for parameters) and therefore provides
  607. parametric polymorphism without static constraints (by Strachey's definition).
  608. However, Smalltalk's style uses inclusion polymorphism in practise and
  609. inheritance for subclassing (representation).
  610.  
  611.  
  612. 2.7)  What Is A Separation Between Type And Class (Representation)?
  613. -------------------------------------------------------------------
  614.  
  615. For a short answer:
  616.   Subtype Polymorphism, as opposed to Subclass Polymorphism, is the best answer
  617.   in OO.  Parametric polymorphism is a related concept where this is also true,
  618.   but is of a different flavor (and usually requires object attributes by use.
  619.   See also section 2.1).
  620.  
  621. A type can be considered a set of values and a set of operations on those
  622. values.  This can insure type-safe programming.  However, the representation of
  623. types (classes in OO) can be separated from the notion of type allowing many
  624. representations per type while still maintaining reasonable type-safety.
  625.  
  626. In many languages, a type has a single representation insuring all operations
  627. performed on that type are well defined (statically bound) and providing for
  628. efficiency by taking advantage of that representation wherever used.  In many
  629. OO languages, subclassing and dynamic binding provides for greater flexibility 
  630. by providing object specialization.  However, in many OO languages classes are
  631. used for assignment compatibility forcing an assigned object to inherit
  632. (transitively) from any polymorphic object's class (inclusion polymorphism
  633. based on class, or subclass polymorphism).  This insures all operations to be
  634. performed on any polymorphic object are satisfied by any replacing objects.
  635. This also insures all types share a common representation, or at least a
  636. common base interface specification.
  637.  
  638. By separating type from class, or representation (or perhaps separating class
  639. from type, by the aforementioned definition of type), a replacing object must
  640. satisfy the operations or type constraints of a polymorphic object (subtype
  641. polymorphism) but are not required to do to do so by an inheritance relation
  642. (subclass polymorphism), as is typical in most OOPLs.  Dropping this
  643. restriction is somewhat less type-safe, because accidental matches of method
  644. signatures can occur, calling for greater care in use.  [Black 86] discusses
  645. this issue in Emerald.  The same issue arises in parametric polymorphism
  646. (generics/templates), as any method matching a required signature is accepted,
  647. calling for careful matching of actual and formal generic parameters.  The
  648. difference between static and dynamic binding in OO and dynamic binding and
  649. subtyping seems similar.  A possible loss of semantic integrity/similarity is
  650. contrasted with greater power.
  651.  
  652. It is possible to specify desired abstract properties of type specifications
  653. with mechanisms similar to Eiffel's pre-, post-, and invariant conditions.
  654. This helps to insure the semantic integrity of replacing objects and their
  655. behavior.  [Liskov 93] provides a recent exposition.
  656.  
  657. Abstract classes ([Stroustrup 91] and [Meyer 88]) in typing provide a facility
  658. similar to subtype polymorphism; however, ACs require type compatible classes
  659. to inherit from them, providing a subclass polymorphism facility, and ACs can
  660. also specify representation.  Subtyping is therefore most useful to avoid
  661. spreading knowledge of classes throughout a system, which is a high priority
  662. for loosely coupled modules and in distributed programming [Black 87].
  663.  
  664. The formal type system found in [Cardelli 85], Emerald/Jade [Black 86] and
  665. [Raj 89], original trellis/Owl, an experimental C++ extension (See Appendix E,
  666. Signatures), Sather (originally Eiffel-based), and an Eiffel superset
  667. [Jones 92] are all examples of OO systems providing subtype polymorphism.
  668. Functional languages such as ML, Russell, and Haskell provide a separation with
  669. pure parametric polymorphism (as is also commonly found in OO languages in
  670. addition to inclusion polymorphism).
  671.  
  672. See also [Cook 90], "Inheritance Is Not Subtyping", for a formal approach.
  673.  
  674.  
  675. 2.8)  What Are Generics And Templates?
  676. --------------------------------------
  677.  
  678. Short Answer: Parametric Polymorphism (although various implementations
  679.               provide various subsets).
  680.  
  681. Generics (or Templates in C++) refer to the ability to parameterize types
  682. and functions with types.  This is useful for parameterized classes and
  683. polymorphic functions as found in languages such as Ada, C++, Eiffel, and
  684. etc., although these are "syntactic" or restricted forms [Cardelli 85].
  685. Generics are orthogonal to inheritance, since types (and classes)
  686. may be generically parameterized.  Generics provide for reusability in
  687. programming languages.  An example is a Stack with a generically
  688. parameterized base type.  This allows a single Stack class to provide
  689. many instantiations such as a Stack of ints, a Stack of any fundamental
  690. or user defined type, or even a Stack of Stacks of ...  Another example is
  691. a polymorphic sort function taking a base type with a comparison operator.
  692. The function can be called with any type (containing a comparison operator).
  693. See [Booch 87b] for several examples in Ada and [Stroustrup xx] and [Murray
  694. 93] for examples in C++.
  695.  
  696. While generics have many advantages, typical limitations include a static
  697. nature, which is an advantage for strong typechecking but a potential
  698. disadvantage when causing dynamic compilation (leading to a time/space
  699. efficiency tradeoff), and sources can cause inlining and create source code
  700. dependencies and expand code size (unlike a single-body or "true"
  701. parametrically polymorphic implementation.  Generics can also be viewed as a
  702. special case of type variables.
  703.  
  704. Functions are typically generic in statically-typed parametrically-polymorphic
  705. languages.  One such popular functional language is ML, in which all functions
  706. are generic.  Russell and Haskel are more modern variants (references are
  707. forthcoming, however see APPENDIX E).
  708.  
  709.  
  710. SECTION 3:  GENERAL
  711. ===================
  712.  
  713.   References:   (many more are to come)
  714.     [Coplien 92]    Covers C++, symbolic, exemplar (single-hierarchy), etc.
  715.     [Kim 89]        Covers many OO systems.
  716.  
  717.  
  718. 3.1)  What Is The "Classical" Object-Oriented Paradigm?
  719. -------------------------------------------------------
  720.  
  721. This refers to the usual class and object model.  Its any 2+ level system
  722. as described in section 1.4.  See also [Coplien 92].
  723.  
  724.  
  725. 3.2)  What Is The "Delegation/Prototyping" Object-Oriented Paradigm?
  726. --------------------------------------------------------------------
  727.  
  728. See [Kim 89, ch 1,3].
  729.  
  730. This is the 1 Level System as Described under Meta-Classes.  Delegation refers
  731. to the delegating of responsibility and can be applied to inheritance.  When a
  732. derived class does not have a desired attribute, it "delegates" responsibility
  733. to one of its base classes.  In delegation systems, each object has a delegate
  734. list instead of a parent list. Thus, delegation's primary emphasis is 
  735. on message passing where an object could delegate responsibility of a message
  736. it couldn't handle to objects that potentially could (its delegates).  Any
  737. object can be added to the delegate list, giving dynamic inheritance (of a
  738. sort).  Typically, delegation and prototyping languages also have "part
  739. inheritance" in which fields and methods can be added and deleted from objects.
  740. This makes for easy "prototyping", which allows for objects to be constructed
  741. piece by piece at run-time, although the term "prototyping" in the context of
  742. delegation languages usually refers to objects serving as prototypes for
  743. object instantiation, or exemplars.
  744.  
  745. Next's NextStep OS provides delegation using Objective-C, providing an example
  746. of delegation in a class-based language [Garfinkel 93].
  747.  
  748.  
  749. 3.3)  Are There Any Other Object-Oriented Paradigms?
  750. ----------------------------------------------------
  751.  
  752. There are many alternatives in OO.  Emerald/Jade ([Black 86] and [Raj 89])
  753. provides one, where inheritance is replaced with a roughly equivalent form
  754. where reuse occurs at a finer degree of granularity - method and instance
  755. variables - with subtype polymorphism making up the difference.
  756.  
  757. CLOS [Kim 89, ch 4] has a looser coupling of methods to classes and doesn't
  758. distinguish a receiver, but packages can help make up the difference.
  759.  
  760. Object Specialization [Sciore 89] is an example of a hybrid approach between
  761. delegation and classical systems, where parent classes have an extra level
  762. of indirection and inheritance hierarchies are specified on a per object/class
  763. basis.
  764.  
  765.  
  766. 3.4)  What Are The Major Object-Oriented Programming Languages Today?
  767. ---------------------------------------------------------------------
  768.  
  769. Statically-Typed:
  770.   Add 1 To Cobol giving Cobol with Objects.
  771.   C++
  772.   Classic-Ada
  773.   Dragoon
  774.   Emerald/Jade
  775.   Java (comp.lang.java, http://java.sun.com/, Java Report & Conf:
  776.          http://www.sigs.com, See Anon FTP)
  777.   Object Pascal
  778.   Trellis/Owl
  779.  
  780. Dynamically-Typed:
  781.   Actors Languages
  782.   C+@
  783.   Flavors
  784.   Python (new WWW, see http://www.python.org/)
  785.   Self
  786.   Smalltalk
  787.  
  788. Both:
  789.   Actor
  790.   Ada95
  791.   BETA
  792.   C++ (With RTTI)
  793.   Cecil
  794.   CLOS
  795.   Eiffel
  796.   Modula-3
  797.   Objective-C (http://www.marble.com/people/dekorte/Objective-C/objc.html)
  798.   Sather
  799.  
  800.  
  801. 3.5)  What Are Object-Oriented Databases And Persistence?
  802. ---------------------------------------------------------
  803.  
  804. See also Appendices B and E and the comp.database.object newsgroup.
  805. Refs to be included in future FAQs.
  806.  
  807. Object-Oriented Databases are databases that support objects and classes.  They
  808. are different from the more traditional relational databases because they allow
  809. structured subobjects, each object has its own identity, or object-id (as
  810. opposed to a purely value-oriented approach) and because of support for methods
  811. and inheritance.  It is also possible to provide relational operations on an
  812. object-oriented database.  OODBs allow all the benefits of object-orientation,
  813. as well as the ability to have a strong equivalence with object-oriented
  814. programs, an equivalence that would be lost if an alternative were chosen, as
  815. with a purely relational database.
  816.  
  817. Another way of looking at Object-Oriented Databases is as a persistent object
  818. store with a DBMS.
  819.  
  820. Persistence is often defined as objects (and their classes in the case of
  821. OODBs) that outlive the programs that create them.  Object lifetimes can be
  822. viewed as a hierarchy, with locals/automatics having the shortest default
  823. lifetime and objects stored indefinitely in an OODB (which are persistent)
  824. having the longest.  Persistent object stores do not support query or
  825. interactive user interface facilities, as found in a fully supported OODBMS.
  826.  
  827. Appendix B also contains references for object-oriented interfaces to
  828. relational databases and see APPENDIX E, Papers, Persistent Operating Systems.
  829.  
  830. From the net:
  831. From: dbmsfacts@aol.com (DBMSfacts)
  832. Subject: ODMG Gopher and Web Addresses
  833. Date: 24 Oct 1994 13:10:02 -0400
  834.  
  835. The Object Database Management Group (ODMG) has set up Gopher and Web
  836. Servers at the following addresses:
  837.  
  838.   Gopher:  gopher.odmg.org, port 2073
  839.   WWW:  http://www.odmg.org:3083
  840.  
  841. These are still under construction.  What you can find right now are
  842. addresses and contact information for ODBMS vendors, ODMG membership
  843. information, updates to Release 1.1 of The Object Database Standard:
  844. ODMG-93 along with ODL lex and yacc files.  In the future, we will be
  845. adding more links to related sites, bibliographies, and a FAQ for ODBMSs. 
  846.  
  847. If you cannot access these servers, but would like information on the
  848. ODMG, send an email message to info@odmg.org and you will receive an
  849. automated reply.
  850.  
  851. Doug Barry
  852. ODMG Executive Director
  853.  
  854.  
  855. 3.6)  What Are Object-Oriented Operating Systems?
  856. -------------------------------------------------
  857.  
  858. Refs to be included in future FAQs.  See also Appendix E.
  859.  
  860. Object-Oriented Operating Systems provide resources through objects, sometimes
  861. all the way down to to the machine (OO architectures are found at the bottom).
  862. They are almost always distributed systems (DOS or DPOS), allowing objects to
  863. be passed freely between machines.  They are typically capability-based since
  864. objects, and hence system resources, can only be accessed if a capability to
  865. them is available to programs.
  866.  
  867. Here are some abstracts taken from several postings to the net.  This list is
  868. by no means exhaustive.
  869.  
  870. Apertos (Meta-Object-based Mikro-Kernel.  See Appendix E, Papers:28)
  871. Chorus Micro-kernel (written in C++, COOL, See Appendix E, Papers:63)
  872. Choices (research OS, UofI, C++, supports SVR4, See Appendix E, Papers)
  873. GEOS    (GeoWorks', written in Object Assembler, OO superset of 8086) 
  874. Mach    (CMU, supports BSD 4.3, really message-based)
  875. NachOS  (written in C++, OS teaching/learning OS)
  876. Ouverture Project (ESPRIT funded OMG IDL defines inter-module interfaces)
  877. Peace    (OO family-based parallel OS, See Appendix E, General)
  878. SOS
  879. Spring      (Sun, written in C++)
  880. PenPoint OS (Go, written in C++)
  881.  
  882. For the Spring Papers (free), Contact:
  883.   Sun Microsystems Laboratories, Inc.
  884.   M/S 29-01
  885.   2550 Garcia Avenue
  886.   Mountain View, CA USA  94043
  887.  
  888. See also APPENDIX E, PAPERS, Persistent Operating Systems entry.
  889.  
  890. From: whitney@oberon.Meakins.McGill.CA ()
  891.  
  892. Insight ETHOS: On Object-Orientation in Operating Systems
  893. ISBN 3 72811948 2
  894.  
  895. This thesis covers the design of an extensible object-oriented 
  896. operating systems. The language used was Oberon-2. It includes
  897. a generalization of the Rider/Carrier principle, Object Directories
  898. as well as basic OS issues such as memory, file, tasking management. 
  899. It covers extensible objected-oriented programming from hardware up.
  900. It reviews other designs such as Clouds and Choices which where written
  901. It reviews other designs such as Clouds and Choices which where written
  902. on C++. [[ The lack of type-tests in C++ was a problem in other designs.]]
  903. ETHOS was implemented as an operating system for the Ceres computers
  904. at the ETH. 
  905.  
  906.  
  907. 3.7)  What Are The Current Object-Oriented Methodologies?
  908. ---------------------------------------------------------
  909.  
  910. Here is a list of OOSE Methodologies:
  911.  
  912.   Berard                        [Berard 93]
  913.   BON                           [Nerson 92]
  914.   Booch                         [Booch 94]
  915.   Coad/Yourdon                  [Coad 91]
  916.   Colbert                       [Colbert 89]
  917.   de Champeaux                  [de Champeaux 93]
  918.   Embley                        [Embley 92]
  919.   EVB                           [Jurik 92]
  920.   FUSION                        [Coleman 94]
  921.   HOOD                          [HOOD 89]
  922.   IBM                           [IBM 90,91]
  923.   Jacobson                      [Jacobson 92]
  924.   Martin/Odell                  [Martin 92]
  925.   Reenskaug (OOram, was OORASS) [Reenskaug 91]
  926.   ROOM                          [Selic 94]
  927.   Rumbaugh et al.               [Rumbaugh 91]
  928.   Shlaer and Mellor             [Shlaer 88 and 92]
  929.   Wasserman                     [Wasserman 90]
  930.   Winter Partners (OSMOSYS)     [Winter Partners]
  931.   Wirfs-Brock et al.            [Wirfs-Brock 90]
  932.  
  933. Further Ideas And Techniques:
  934.   Meyer                         [Meyer 88]
  935.   Stroustrup                    [Stroustrup 91]
  936.  
  937. See APPENDIX D for CASE systems supporting these methodologies (several from
  938. the originators themselves).
  939.  
  940. See also section 1.21 for a discussion on OOA/OOD and etc.
  941.  
  942. Summaries and comparisons will be provided in future FAQs.  Suggestions for
  943. inclusion of other major or new methodologies should be sent to the FAQ author.
  944.  
  945. Here are some comparison studies posted to the net:
  946.  
  947. Arnold, P., Bodoff, S., Coleman, D., Gilchrist, H., Hayes, F., An Evolution of 
  948. Five Object Oriented Development Methods, Research report, HP Laboratories, 
  949. June 1991
  950.  
  951. de Champeaux, Dennis and Faure, Penelope. A comparative study of object-
  952. oriented analysis methods. Journal of Object Oriented Programming (JOOP), pp
  953. 21-32.  Vol.5, No. 1, 3/4-92
  954.  
  955. Fichman R.G. & Kemerer C.F.  OO and Conventional Analysis and Design
  956. Methodologies.  Computer, Oct 1992, Vol 25, No. 10, p 22-40
  957.  
  958. Fichman, Robert and Kemerer, Chris. Object-Oriented and Conventional Analysis
  959. and Design Methods - Comparison and Critique.  IEEE-Comp, Oct, 1992, pp 22-39.
  960. OOA, OOD, conventional analysis, conventional design, DeMarco SA, Yourdon SA,
  961. Bailin OO requirements specification, Coad-Yourdon OOA, Shlaer-Mellor OOA,
  962. Yourdon-Constantine SD, Martin information engineering design, Wasserman OOSD,
  963. Booch OOD, Wirfs-Brock responsibility-driven design.
  964.  
  965. The following 2 reports are out of print. 
  966.  
  967. [van den Goor et.al., 1992]
  968. G. van den Goor, S. Hong and S. Brinkkemper, 
  969. A Comparison of Six Object-oriented Analysis and Design Methods. Report
  970. Center of Telematics and Information Technology, University of Twente,
  971. the Netherlands, and Computer Information Systems Department, Georgia 
  972. State University, Atlanta, USA, 1992, 163 pages.
  973.  
  974. [Hong et.al. 1992]
  975. S. Hong, G. van den Goor, S. Brinkkemper, A Formal Approach to the 
  976. Comparison of Object Oriented Analysis and Design Methodologies, Hawaii 
  977. International Conference on System Sciences (HICSS) (IEEE Computer Society 
  978. Press, Hawaii) 1993, Vol. IV, pp. 689-698.
  979.  
  980.  [From Shuguang...] readers may download the paper if they want, though they
  981.  may continue to request hard copies.  We are currently extending the paper
  982.  to compare ten OO methods and should be available shortly.
  983.  My URL is: http://cis.gsu.edu/~shong
  984.  
  985.   ===================================================================
  986.   *  Shuguang Hong, Ph.D.                    cisssh@gsusgi2.gsu.edu *
  987.   *  Computer Information Systems Dept.      Tel: (404)651-3887     *
  988.   *  College of Business Administration      Fax: (404)651-3842     *
  989.   *  Georgia State University                                       *
  990.   *  Atlanta, GA 30302-4015         www: http://cis.gsu.edu/~shong/ *
  991.   ===================================================================
  992.  
  993. Monarchi, David and Puhr, Gretchen I. A Research Typology for Object-Oriented
  994. Analysis and Design.  CACM/September 1992/Vol.35, No.9, pp35.
  995.  
  996. [Wilkie 93] summarizes, compares, and provides examples of Booch, Wirfs-Brock,
  997. Hood, Coad and Yourdon, Winter Partners, Shlaer and Mellor, Jacobson,
  998. Wasserman et al, Rumbaugh, Reenskaug et al, and Colbert.
  999.  
  1000. Wirfs-Brock, R.J. and Johnson, R.E., "Surveying Current Research in Object-
  1001. Oriented Design," The Communications of ACM, (33, 9) Sept. 1990, pp. 104-1124.
  1002.  
  1003. Fowler, M.  "Describing and Comparing Object-Oriented Analysis and Design
  1004. Methods," In Object Development Methods, Carmichael, A. ed., SIGS Books,
  1005. (1994), pp.79-109.
  1006. A new version is going to be published soon.  Contact the author
  1007. <100031.3311@compuserve.com> for details on its availability'. 
  1008.  
  1009. Also commercially available:
  1010.  
  1011. An Evaluation of Object-Oriented Analysis and Design Methodologies (9)
  1012. J. Cribbs, C Roe, S. Moon
  1013. SIGS Books
  1014. (212) 274-0640
  1015. $149.
  1016.  
  1017. Object-Oriented Methodology Comparison Study (10 methodologies)
  1018. Berard, Booch, Coad/Yourdon, Colbert, Embley, IBM, Martin/Odell, Rumbaugh,
  1019. Shlaer/Mellor, Wirfs-Brock.  Also contains refs to several previous studies.
  1020. Berard Software Engineering
  1021. 101 Lakeforest Blvd., Suite 360, Gaithersburg, MD 20877
  1022. Contact Person: Jim Youlio
  1023. Phone:        301-417-9884
  1024. Fax:          301-417-0021
  1025. email:        info@bse.com
  1026.  
  1027. [Hong et.al. 1992], [van den Goor et.al., 1992]
  1028. The authors have prepared a revision (See above) that includes the following OO 
  1029. methods:
  1030.  
  1031. Booch, G. - Object-oriented analysis and design with applications, 1994.
  1032. Champeaux, D. de - Object-oriented system development, 1993.
  1033. Coad, P., and Yourdon, E. - Object-oriented analysis (2nd edition), 1991a.
  1034. Coad, P., and Yourdon, E. - Object-oriented design, 1991b.
  1035. Coleman, D. - Object-oriented development, the Fusion method, 1994. 
  1036. Henderson-Sellers, B. and Edwards, J.M. - Methodology for Object-oriented 
  1037. Software 
  1038. Engineering of Systems, draft manuscript, 1994.
  1039. Jacobson, I. - Object-oriented software engineering, 1993.
  1040. Martin, J., Odell, J. - Object-oriented analysis and design, 1992.
  1041. Martin, J., Odell, J. - Principles of object-oriented analysis and design, 
  1042. 1993.
  1043. Rumbaugh, J. et.al. - Object-oriented modeling and design, 1991.
  1044. Shlaer, S., Mellor, S.J. - Object-oriented systems analysis: Modeling the 
  1045. world in states, 1992.
  1046. Wirfs-Brock, R. et.al. - Designing object-oriented software, 1990.
  1047.  
  1048. We are currently approaching publishers for the publication of this report 
  1049. as a book. This book should be out in the spring of 1995.
  1050.  
  1051. If you are interested in obtaining this book you can send an e-mail to 
  1052. Sjaak Brinkkemper (sjbr@cs.utwente.nl), which we will forward to the 
  1053. publisher.
  1054.  
  1055. The authors, regretfully, cannot supply ftp, postscript, TEX, or 
  1056. whatsoever.
  1057.  
  1058.  
  1059. 3.8)  What Is the OMG/OMA/ORB/CORBA?
  1060. ------------------------------------
  1061.  
  1062. Contents:
  1063.   (3.8.1)  Contact Information
  1064.   (3.8.2)  OMG Summary
  1065.   (3.8.3)  Mail Server Access
  1066.   (3.8.4)  OMG Publications
  1067.              - First Class (Bi-Monthly Newsletter)
  1068.              - Object Management Architecture Guide (OMA)
  1069.              - The Common Object Request Broker: Arch. and Spec. (Corba)
  1070.              - Pricing
  1071.   (3.8.5)  Implementations (Brief)
  1072.   (3.8.6)  Implementation Descriptions
  1073.   (3.8.7)  Books, Articles, And Literature
  1074.  
  1075.  
  1076. 3.8.1  Contact Information
  1077. __________________________
  1078.