Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
oop-concordance.rtf
Скачиваний:
6
Добавлен:
10.02.2016
Размер:
2.04 Mб
Скачать

2191 - True messaging for workflow management and edi

2195 - Different levels of messaging service for positive

mit

9 An object-oriented program may thus be viewed as a collection of interacting objects, as opposed to the conventional model, in which a program is seen as a list of tasks (subroutines) to perform. In OOP, each object is capable of receiving messages, processing data, and sending messages to other objects. Each object can be viewed as an independent "machine" with a distinct role or responsibility. The actions (or "methods") on these objects. The terms "objects" and "oriented" in something like the modern sense of object- oriented programming seem to make their first appearance at MIT in the late 1950s and early 1960s. In the environment of the artificial intelligence group, as early as 1960, "object" could refer to identified items (LISP atoms) with properties (attributes); Alan Kay was later to cite a detailed understanding of LISP internals as a strong influence on his thinking in 1966.[3] Another early MIT example was Sketchpad created by Ivan Sutherland in 1960-61; in the glossary of the 1963 technical report based on his dissertation about Sketchpad, Sutherland defined notions of "object" and "instance" (with the class concept covered by "master" or "definition"), albeit specialized to graphical interaction. Also, an MIT ALGOL version, AED-0, linked data structures ("plexes", in that dialect) directly with procedures, prefiguring what were later termed "messages", "methods" and "member functions".

76 Alexander Stepanov suggested that OOP provides a mathematically-limited viewpoint and called it "almost as much of a hoax as Artificial Intelligence. I have yet to see an interesting piece of code that comes from these OO people. In a sense, I am unfair to AI: I learned a lot of stuff from the MIT AI Lab crowd, they have done some really fundamental work....".

1503 and coincidentally, MIT '82, SM '85, PhD '89 (EECS)

mpr

2562 through townsend@mprgate.mpr.ca.

2564 Overview. Techical Report TR92-0656, MPR Teltech Ltd., October

2640 Report TR92-0655, MPR Teltech Ltd., September 1992.

2688 MicroTech Pacific Research (mpr.ca) has a C++ class testing tool called

2691 contact Paul Townsend, townsend@mprgate.mpr.ca.

native

1990 IRIX 4.0.5H Native NOW

1991 IRIX 5.x Native NOW

1992 HP-UX Native NOW

1999 SCO Native 4th Qtr

2134 would have been provided by the application's native operating

notes

973 Author's Notes:

1020 [The author notes Booch's definition above is clearly in the context of

1027 [The Author notes Meyer has a following section 10.1.7 on Static Type,

1040 [The Author notes this is a functional view of polymorphism (as provided in

2332 eds.), Springer Verlag Lecture Notes in Computer Science #637.

notion

10 Objects as a formal concept in programming were introduced in the 1960s in Simula 67, a major revision of Simula I, a programming language designed for discrete event simulation, created by Ole-Johan Dahl and Kristen Nygaard of the Norwegian Computing Center in Oslo. Simula 67 was influenced by SIMSCRIPT and Hoare's proposed "record classes". Simula introduced the notion of classes and instances or objects (as well as subclasses, virtual methods, coroutines, and discrete event simulation) as part of an explicit programming paradigm. The language also used automatic garbage collection that had been invented earlier for the functional programming language Lisp. Simula was used for physical modeling, such as models to study and improve the movement of ships and their content through cargo ports. The ideas of Simula 67 influenced many later languages, including Smalltalk, derivatives of LISP (CLOS), Object Pascal, and C++.

99 concept applies", and "A concept is an idea or notion we share that applies

143 in 1989 through the notion of assignment attempt, also known as type narrowing.

565 modern notion of relocatable, persistent and distributed objects that can

1159 types (classes in OO) can be separated from the notion of type allowing many

ny

1716 implementation" developed at Cornell, Ithaca NY.)

1850 Company: Isis Distributed Systems, Inc., Ithaca NY, USA.

2496 Science Conference, ACM, Inc., New York, NY, 1990, pp. 161-165.

2500 New York, NY, 1991, pp. 165-177.

2545 Love, Tom. Object Lessons. SIGS Books, 588 Broadway #604, New York, NY

object-orientation

50 Languages with abstract data type support, but not all features of object-orientation, sometimes called object-based languages. Examples: Modula-2 (with excellent encapsulation and information hiding), Pliant, CLU.

877 1.22) Where Did Object-Orientation Come From? (Object-Oriented Technology)

888 1.23) What Are The Benefits Of Object-Orientation? (Object-Oriented Technology)

1320 object-oriented database. OODBs allow all the benefits of object-orientation,

1384 Insight ETHOS: On Object-Orientation in Operating Systems

obtained

751 external interface of the system to be built, often obtained from a domain

930 "Parametric polymorphism is obtained when a function works uniformly on a range

932 polymorphism is obtained when a function works, or appears to work, on several

2541 Copies of the postscript file can be obtained by sending email

2561 and Applications ACM. Copies of this paper can be obtained

october

1964 Object World in London, England last October. Orbix for Microsoft Windows

2519 Conference, October 1993, Toronto. Email addresses for authors

2524 Maintenance, pp. 100-105. IEEE Computer Society, October 1989.

2532 Portland, Oregon, October 21, 1993. Abstract:

2564 Overview. Techical Report TR92-0656, MPR Teltech Ltd., October

omg's

1592 First Class is OMG's non-commercial bi-monthly 28-page

1614 The CORBA, as defined by the OMG's Object Request Broker (ORB),

1676 First full and complete implementation of OMG's CORBA.

1919 ORBeline is a complete implementation of OMG's Common Object Request

1939 of the Object Management Group's (OMG's) Common Object Request Broker

organizations

77 Paul Graham has suggested that the purpose of OOP is to act as a "herding mechanism" that keeps mediocre programmers in mediocre organizations from "doing too much damage". This is at the expense of slowing down productive programmers who know how to use more powerful and more compact techniques.

833 by specifying steps for organizations to progress to the next level, ultimately

874 modeling entire organizations or a large part of them, with the information

1544 Unlike other organizations, the OMG itself does not and will not

2144 Software System makes it possible for organizations to build large

pascal

10 Objects as a formal concept in programming were introduced in the 1960s in Simula 67, a major revision of Simula I, a programming language designed for discrete event simulation, created by Ole-Johan Dahl and Kristen Nygaard of the Norwegian Computing Center in Oslo. Simula 67 was influenced by SIMSCRIPT and Hoare's proposed "record classes". Simula introduced the notion of classes and instances or objects (as well as subclasses, virtual methods, coroutines, and discrete event simulation) as part of an explicit programming paradigm. The language also used automatic garbage collection that had been invented earlier for the functional programming language Lisp. Simula was used for physical modeling, such as models to study and improve the movement of ships and their content through cargo ports. The ideas of Simula 67 influenced many later languages, including Smalltalk, derivatives of LISP (CLOS), Object Pascal, and C++.

15 Object-oriented features have been added to many existing languages during that time, including Ada, BASIC, Fortran, Pas cal, and others. Adding these features to languages that were not initially designed for them often led to problems with compatibility and maintainability of code.

237 Object Pascal provide no protection for objects, meaning instance variables

387 (Ada95, Modula-3, Object Pascal, etc.) OO languages do, but with multiple-

1284 Object Pascal

performed

41 Attempts to find a consensus definition or theory behind objects have not proven very successful (however, see Abadi & Cardelli, A Theory of Objects[18] for formal definitions of many OOP concepts and constructs), and often diverge widely. For example, some definitions focus on mental activities, and some on program structuring. One of the simpler definitions is that OOP is the act of using "map" data structures or arrays that can contain functions and pointers to other maps, all with some syntactic and scoping sugar on top. Inheritance can be performed by cloning the maps (sometimes called "prototyping"). OBJECT:=>> Objects are the run time entities in an object-oriented system. They may represent a person, a place, a bank account, a table of data or any item that the program has to handle.

1077 lookup is performed (bound) at run-time (dynamically). This is often desired

1162 performed on that type are well defined (statically bound) and providing for

1169 performed on any polymorphic object are satisfied by any replacing objects.

2658 Cantata allows testing to be performed in an intuitive way

persistence

578 Persistence

1312 3.5) What Are Object-Oriented Databases And Persistence?

1326 Persistence is often defined as objects (and their classes in the case of

2060 - Persistence - the same object stream model for

2062 support object persistence. Persistent objects can be

piece

4 Objects are used in software development to implement abstract data structures, by bringing together the data components with the procedures that manipulate them. Objects in object- oriented programming are key in the concept of inheritance; thereby improving program reliability[attribution needed], simplification of software maintenance[attribution needed], the management of libraries, and the division of work in programmer teams. Object-oriented programming languages are generally designed to exploit and enforce these potential advantages of the object model. Objects can also make it possible to handle very disparate objects by the same piece of code, as long as they all have the proper method. Simple, non-OOP programs may be one "long" list of statements (or commands). More complex programs will often group smaller sections of these statements into functions or subroutines each of which might perform a particular task. With designs of this sort, it is common for some of the program's data to be 'global', i.e. accessible from any part of the program. As programs grow in size, allowing any function to modify any piece of data means that bugs can have wide-reaching effects.

76 Alexander Stepanov suggested that OOP provides a mathematically-limited viewpoint and called it "almost as much of a hoax as Artificial Intelligence. I have yet to see an interesting piece of code that comes from these OO people. In a sense, I am unfair to AI: I learned a lot of stuff from the MIT AI Lab crowd, they have done some really fundamental work....".

1253 piece by piece at run-time, although the term "prototyping" in the context of

planned

1663 API only), NetWare (planned, Novell owns part of HyperDesk).

1785 This is part of the companies' planned approach toward a standards-based,

1831 interoperability is planned so objects written in different languages can be

2038 toolkits (others are planned for future release) --

2097 ORBs and CORBA 2.0 ORBs is planned

primary

45 Simula (1967) is generally accepted as the first language to have the primary features of an object-oriented language. It was created for making simulation programs, in which what came to be called objects were the most important information representation. Smalltalk (1972 to 1980) is arguably the canonical example, and the one with which much of the theory of object-oriented programming was developed. Concerning the degree of object orientation, following distinction can be made:

430 sequences of before, after, and around methods or even several primary methods

615 Multi-methods involve two primary concepts, multiple-polymorphism and lack of

1246 list instead of a parent list. Thus, delegation's primary emphasis is

1505 consortium with two primary aims:

private

245 mechanism with public, private and protected members. Public members (member

247 Pop methods will be public. Private members are only accessible from within

249 private. Protected members are accessible from within a class and also from

256 from outside of their class (they are not only private, but invisible).

258 private specifier indicates methods should not be used from outside of the

procedures

4 Objects are used in software development to implement abstract data structures, by bringing together the data components with the procedures that manipulate them. Objects in object- oriented programming are key in the concept of inheritance; thereby improving program reliability[attribution needed], simplification of software maintenance[attribution needed], the management of libraries, and the division of work in programmer teams. Object-oriented programming languages are generally designed to exploit and enforce these potential advantages of the object model. Objects can also make it possible to handle very disparate objects by the same piece of code, as long as they all have the proper method. Simple, non-OOP programs may be one "long" list of statements (or commands). More complex programs will often group smaller sections of these statements into functions or subroutines each of which might perform a particular task. With designs of this sort, it is common for some of the program's data to be 'global', i.e. accessible from any part of the program. As programs grow in size, allowing any function to modify any piece of data means that bugs can have wide-reaching effects.

9 An object-oriented program may thus be viewed as a collection of interacting objects, as opposed to the conventional model, in which a program is seen as a list of tasks (subroutines) to perform. In OOP, each object is capable of receiving messages, processing data, and sending messages to other objects. Each object can be viewed as an independent "machine" with a distinct role or responsibility. The actions (or "methods") on these objects. The terms "objects" and "oriented" in something like the modern sense of object- oriented programming seem to make their first appearance at MIT in the late 1950s and early 1960s. In the environment of the artificial intelligence group, as early as 1960, "object" could refer to identified items (LISP atoms) with properties (attributes); Alan Kay was later to cite a detailed understanding of LISP internals as a strong influence on his thinking in 1966.[3] Another early MIT example was Sketchpad created by Ivan Sutherland in 1960-61; in the glossary of the 1963 technical report based on his dissertation about Sketchpad, Sutherland defined notions of "object" and "instance" (with the class concept covered by "master" or "definition"), albeit specialized to graphical interaction. Also, an MIT ALGOL version, AED-0, linked data structures ("plexes", in that dialect) directly with procedures, prefiguring what were later termed "messages", "methods" and "member functions".

239 outside of a class, providing functions and procedures. While both CLOS

897 and procedures (top-down) are frequently changed, providing object-oriented

2430 objects was something more intuitive and natural than coding procedures.

processing

9 An object-oriented program may thus be viewed as a collection of interacting objects, as opposed to the conventional model, in which a program is seen as a list of tasks (subroutines) to perform. In OOP, each object is capable of receiving messages, processing data, and sending messages to other objects. Each object can be viewed as an independent "machine" with a distinct role or responsibility. The actions (or "methods") on these objects. The terms "objects" and "oriented" in something like the modern sense of object- oriented programming seem to make their first appearance at MIT in the late 1950s and early 1960s. In the environment of the artificial intelligence group, as early as 1960, "object" could refer to identified items (LISP atoms) with properties (attributes); Alan Kay was later to cite a detailed understanding of LISP internals as a strong influence on his thinking in 1966.[3] Another early MIT example was Sketchpad created by Ivan Sutherland in 1960-61; in the glossary of the 1963 technical report based on his dissertation about Sketchpad, Sutherland defined notions of "object" and "instance" (with the class concept covered by "master" or "definition"), albeit specialized to graphical interaction. Also, an MIT ALGOL version, AED-0, linked data structures ("plexes", in that dialect) directly with procedures, prefiguring what were later termed "messages", "methods" and "member functions".

875 processing system and software products development as integrated components.

1510 processing) using object-oriented methodology.

1555 4) Parallel Processing;

1969 In addition Orbix-TP, integration with Tuxedo for transaction processing, has

public

245 mechanism with public, private and protected members. Public members (member

247 Pop methods will be public. Private members are only accessible from within

257 Smalltalk's methods are all public (can be invoked from anywhere), but a

774 should be made into a public standard, perhaps to be adopted by the OMG. The

python

16 More recently, a number of languages have emerged that are primarily object-oriented yet compatible with procedural methodology, such as Python and Ruby. Probably the most commercially important recent object-oriented languages are Visual Basic.NET (VB.NET) and C#, both designed for Microsoft's .NET platform, and Java, developed by Sun Microsystems. Both frameworks show the benefit of using OOP by creating an abstraction from implementation in their own way. VB.NET and C# support cross-language inheritance, allowing classes defined in one language to subclass classes defined in the other language. Developers usually compile Java to bytecode, allowing Java to run on any operating system for which a Java virtual machine is available. VB.NET and C# make use of the Strategy pattern to accomplish cross-language inheritance, whereas Java makes use of the Adapter pattern[citation needed].

47 Languages designed mainly for OO programming, but with some procedural elements. Examples: C++, C#, VB.NET, Java, Python.

52 In recent years, object-oriented programming has become especially popular in dynamic programming languages. Python, Ruby and Groovy are dynamic languages built on OOP principles, while Perl and PHP have been adding object oriented features since Perl 5 and PHP 4, and ColdFusion since version 5.

1291 Python (new WWW, see http:

1292 www.python.org

qtr

1996 IBM AIX C Set++ 4th Qtr

1998 1 DEC C++ 4th Qtr

1999 SCO Native 4th Qtr

2000 UnixWare Computer Innovations 4th Qtr

2001 Ultrix DEC C++ 4th Qtr

rdbmss

63 Both object-oriented programming and relational database management systems (RDBMSs) are extremely common in software today. Since relational databases don't store objects directly (though some RDBMSs have object-oriented features to approximate this), there is a general need to bridge the two worlds. The problem of bridging object-oriented programming accesses and data patterns with relational databases is known as Object-Relational impedance mismatch. There are a number of approaches to cope with this problem, but no general solution without downsides.[20] One of the most common approaches is object-relational mapping, as found in libraries like Java Data Objects and Ruby on Rails' ActiveRecord.

64 There are also object databases that can be used to replace RDBMSs, but these have not been as technically and commercially successful as RDBMSs.

1900 RDBMSs, OODMS, or a combination of these.

reliable

43 This section does not cite any references or sources. Please help improve this section by adding citations to reliable sources. Unsourced material may be challenged and removed. (August 2009)

1123 Static typing is more efficient and reliable, but loses power. Typical

1849 Product: Isis Reliable Distributed Object Manager(tm) (RDOM)

1851 Isis RDOM(tm) is a fault tolerant distributed ORB platform for reliable

2422 are generally more reliable and easier to develop, maintain, and reuse than

resources

1356 Object-Oriented Operating Systems provide resources through objects, sometimes

1360 objects, and hence system resources, can only be accessed if a capability to

1749 integrated, desktop access to enterprise-wide information and resources in

1891 be built and tested on a single machine using local resources.

2442 This is a summary of resources on the Testing of Object-Oriented

respect

997 with respect to representation (subclassing). An example of inclusion

998 polymorphism with respect to assignment (and initialization, or replacement if

1002 oriented language using inclusion polymorphism with respect to replacement;

1003 however, inclusion is with respect to subtyping only with abstract types

2275 [Covers CORBA standards with respect to OODBs]

responsibility

9 An object-oriented program may thus be viewed as a collection of interacting objects, as opposed to the conventional model, in which a program is seen as a list of tasks (subroutines) to perform. In OOP, each object is capable of receiving messages, processing data, and sending messages to other objects. Each object can be viewed as an independent "machine" with a distinct role or responsibility. The actions (or "methods") on these objects. The terms "objects" and "oriented" in something like the modern sense of object- oriented programming seem to make their first appearance at MIT in the late 1950s and early 1960s. In the environment of the artificial intelligence group, as early as 1960, "object" could refer to identified items (LISP atoms) with properties (attributes); Alan Kay was later to cite a detailed understanding of LISP internals as a strong influence on his thinking in 1966.[3] Another early MIT example was Sketchpad created by Ivan Sutherland in 1960-61; in the glossary of the 1963 technical report based on his dissertation about Sketchpad, Sutherland defined notions of "object" and "instance" (with the class concept covered by "master" or "definition"), albeit specialized to graphical interaction. Also, an MIT ALGOL version, AED-0, linked data structures ("plexes", in that dialect) directly with procedures, prefiguring what were later termed "messages", "methods" and "member functions".

71 Responsibility-driven design defines classes in terms of a contract, that is, a class should be defined around a responsibility and the information that it shares. This is contrasted by Wirfs-Brock and Wilkerson with data-driven design, where classes are defined around the data-structures that must be held. The authors hold that responsibility-driven design is preferable.

1243 to the delegating of responsibility and can be applied to inheritance. When a

1244 derived class does not have a desired attribute, it "delegates" responsibility

1247 on message passing where an object could delegate responsibility of a message

roughly

133 The implementation of objects could roughly be categorized into descriptor-

162 roughly equivalent to a loosely coupled variant record, with derived classes

166 be set or respecified by a derived class. This is roughly equivalent to a

778 Universal Process Model roughly corresponds to the Waterfall Model [Royce 70].

1261 provides one, where inheritance is replaced with a roughly equivalent form

runs

1661 Runs on SPARC, HP

1833 available mid- 1994; prices will be announced then. HP ORB Plus runs on the

1856 Objective-C, and C++, and runs on most Unix workstations. RDOM is currently

2215 DOME runs on the major UNIX platforms as well as in other interactive

2681 *Graphical test coverage to highlight any code not executed during test runs

runtime

1678 (1) C++ ORB toolkit consisting of over 300 C++ classes and runtime libraries

1895 can be configured and constructed to best suit the runtime

1944 at runtime through its Object Loader function. This enables developers to more

1950 populated with all objects or services available at runtime keeping programmers

2040 runtime libraries

san

1960 exhibition in San Francisco, Calif., June 1993. Since then it has rolled

2274 published by Morgan Kaufmann Publishers, San Mateo, California

2458 San Mateo, CA 94403

2692 Software Research Inc. (625 Third St, San Francisco, CA 94107-1997,

2696 San Jose, CA 95128, voice: 1-408-298-3824 ) has a coverage tool for

schemes

391 schemes exist, for example C++ finds the closest match within a scope but

975 schemes [Aho 85]. ML is prototypical in providing this facility.

2390 4. Differing Memory Management Schemes Hinder Reuse

2393 management schemes. For example, there are common container libraries using

2394 each of the following schemes:

sections

4 Objects are used in software development to implement abstract data structures, by bringing together the data components with the procedures that manipulate them. Objects in object- oriented programming are key in the concept of inheritance; thereby improving program reliability[attribution needed], simplification of software maintenance[attribution needed], the management of libraries, and the division of work in programmer teams. Object-oriented programming languages are generally designed to exploit and enforce these potential advantages of the object model. Objects can also make it possible to handle very disparate objects by the same piece of code, as long as they all have the proper method. Simple, non-OOP programs may be one "long" list of statements (or commands). More complex programs will often group smaller sections of these statements into functions or subroutines each of which might perform a particular task. With designs of this sort, it is common for some of the program's data to be 'global', i.e. accessible from any part of the program. As programs grow in size, allowing any function to modify any piece of data means that bugs can have wide-reaching effects.

149 programming (see sections 2.3, 4.3, and [Coplien 92]).

400 specify required attributes of a matching object (see sections 2.1, 2.7 and

1019 Booch also has several sections devoted to polymorphism.

2444 or other means. Sections include Written Material, Courses, and

specialization

361 specialization to provide new frameworks.

527 1.14) What Is Specialization

530 To create a subclass is specialization, to factor out common parts of

1165 by providing object specialization. However, in many OO languages classes are

1266 Object Specialization [Sciore 89] is an example of a hybrid approach between

specifically

8 Object-oriented programming has roots that can be traced to the 1960s. As hardware and software became increasingly complex, manageability often became a concern. Researchers studied ways to maintain software quality and developed object-oriented programming in part to address common problems by strongly emphasizing discrete, reusable units of programming logic[citation needed]. The technology focuses on data rather than processes, with programs composed of self-sufficient modules ("classes"), each instance of which ("objects") contains all the information needed to manipulate its own data structure ("members"). This is in contrast to the existing modular programming that had been dominant for many years that focused on the function of a module, rather than specifically the data, but equally provided for code reuse, and self-sufficient reusable units of programming logic, enabling collaboration through the use of linked modules (subroutines). This more conventional approach, which still persists, tends to consider data and behavior separately.

46 Languages called "pure" OO languages, because everything in them is treated consistently as an object, from primitives such as characters and punctuation, all the way up to whole classes, prototypes, blocks, modules, etc. They were designed specifically to facilitate, even enforce, OO methods. Examples: Scala, Smalltalk, Eiffel, JADE, Emerald.

457 More specifically, dynamic inheritance refers to the ability to add, delete,

2491 not specifically about testing of OOP, it is mentioned so often

2665 specifically designed to operate in both host and target

specifications

109 things, Roles, Incidents, Interactions, and Specifications." [Booch 91, 4.3]

1187 It is possible to specify desired abstract properties of type specifications

1536 Adopted specifications are available on a fee-free basis to members and

1612 and the adoption of specifications.

1624 [Here's why you don't see the specifications posted to the net or available via

specifies

217 also typically specifies non-shared state when used for representation.

241 methodology clearly specifies class-like encapsulation (Adts).

750 of OOA specifies a complete system and a complete set of requirements and

914 specifies slightly different or additional structure or behavior for an object,

980 polymorphism specifies an instance of a subclass can appear wherever an

statements

4 Objects are used in software development to implement abstract data structures, by bringing together the data components with the procedures that manipulate them. Objects in object- oriented programming are key in the concept of inheritance; thereby improving program reliability[attribution needed], simplification of software maintenance[attribution needed], the management of libraries, and the division of work in programmer teams. Object-oriented programming languages are generally designed to exploit and enforce these potential advantages of the object model. Objects can also make it possible to handle very disparate objects by the same piece of code, as long as they all have the proper method. Simple, non-OOP programs may be one "long" list of statements (or commands). More complex programs will often group smaller sections of these statements into functions or subroutines each of which might perform a particular task. With designs of this sort, it is common for some of the program's data to be 'global', i.e. accessible from any part of the program. As programs grow in size, allowing any function to modify any piece of data means that bugs can have wide-reaching effects.

639 coding logic (switch statements) and because small methods further reduce

656 lead to the use of switch statements based on type or complex coding in many

1092 a system without affecting existing code and eliminates switch statements.

strong

9 An object-oriented program may thus be viewed as a collection of interacting objects, as opposed to the conventional model, in which a program is seen as a list of tasks (subroutines) to perform. In OOP, each object is capable of receiving messages, processing data, and sending messages to other objects. Each object can be viewed as an independent "machine" with a distinct role or responsibility. The actions (or "methods") on these objects. The terms "objects" and "oriented" in something like the modern sense of object- oriented programming seem to make their first appearance at MIT in the late 1950s and early 1960s. In the environment of the artificial intelligence group, as early as 1960, "object" could refer to identified items (LISP atoms) with properties (attributes); Alan Kay was later to cite a detailed understanding of LISP internals as a strong influence on his thinking in 1966.[3] Another early MIT example was Sketchpad created by Ivan Sutherland in 1960-61; in the glossary of the 1963 technical report based on his dissertation about Sketchpad, Sutherland defined notions of "object" and "instance" (with the class concept covered by "master" or "definition"), albeit specialized to graphical interaction. Also, an MIT ALGOL version, AED-0, linked data structures ("plexes", in that dialect) directly with procedures, prefiguring what were later termed "messages", "methods" and "member functions".

18 A survey by Deborah J. Armstrong of nearly 40 years of computing literature identified a number of "quarks", or fundamental concepts, found in the strong majority of definitions of OOP.

670 Polymorphic languages can be statically typed to provide strong type checking,

1225 nature, which is an advantage for strong typechecking but a potential

1321 as well as the ability to have a strong equivalence with object-oriented

style

20 Benjamin C. Pierce and some other researchers view as futile any attempt to distill OOP to a minimal set of features. He nonetheless identifies fundamental features that support the OOP programming style in most object-oriented languages:

148 in more conventional languages to fully emulate this style of dynamically typed

427 Mixin's is a style of MI (from flavors) where a class is created to provide

560 as: "... storing type identification in each object, brings us to a style of

1149 However, Smalltalk's style uses inclusion polymorphism in practise and

subroutines

2 In the domain of object-oriented programming an object is usually taken to mean an ephemeral compilation of attributes (object elements) and behaviors (methods or subroutines) encapsulating an entity. In this way, while primitive or simple data types are still just single pieces of information, object-oriented objects are complex types that have multiple pieces of information and specific properties (or attributes). Instead of merely being assigned a value, (like int =10), objects have to be "constructed". In the real world, if a Ford Focus is an "object" - an instance of the car class, its physical properties and its function to drive would have been individually specified. Once the properties of the Ford Focus "object" had been specified into the form of the car class, it can be endlessly copied to create identical objects that look and function in just the same way. As an alternative example, animal is a superclass of primate and primate is a superclass of human. Individuals such as Joe Bloggs or John Doe would be particular examples or 'objects' of the human class, and consequently possess all the characteristics of the human class (and of the primate and animal superclasses as well).

4 Objects are used in software development to implement abstract data structures, by bringing together the data components with the procedures that manipulate them. Objects in object- oriented programming are key in the concept of inheritance; thereby improving program reliability[attribution needed], simplification of software maintenance[attribution needed], the management of libraries, and the division of work in programmer teams. Object-oriented programming languages are generally designed to exploit and enforce these potential advantages of the object model. Objects can also make it possible to handle very disparate objects by the same piece of code, as long as they all have the proper method. Simple, non-OOP programs may be one "long" list of statements (or commands). More complex programs will often group smaller sections of these statements into functions or subroutines each of which might perform a particular task. With designs of this sort, it is common for some of the program's data to be 'global', i.e. accessible from any part of the program. As programs grow in size, allowing any function to modify any piece of data means that bugs can have wide-reaching effects.

5 In contrast, the object-oriented approach encourages the programmer to place data where it is not directly accessible by the rest of the program. Instead, the data is accessed by calling specially written functions, commonly called methods, which are either bundled in with the data or inherited from "class objects." These act as the intermediaries for retrieving or modifying the data they control. The programming construct that combines data with a set of methods for accessing and managing those data is called an object. The practice of using subroutines to examine or modify certain kinds of data, however, was also quite commonly used in non-OOP modular programming, well before the widespread use of object-oriented programming.

8 Object-oriented programming has roots that can be traced to the 1960s. As hardware and software became increasingly complex, manageability often became a concern. Researchers studied ways to maintain software quality and developed object-oriented programming in part to address common problems by strongly emphasizing discrete, reusable units of programming logic[citation needed]. The technology focuses on data rather than processes, with programs composed of self-sufficient modules ("classes"), each instance of which ("objects") contains all the information needed to manipulate its own data structure ("members"). This is in contrast to the existing modular programming that had been dominant for many years that focused on the function of a module, rather than specifically the data, but equally provided for code reuse, and self-sufficient reusable units of programming logic, enabling collaboration through the use of linked modules (subroutines). This more conventional approach, which still persists, tends to consider data and behavior separately.

9 An object-oriented program may thus be viewed as a collection of interacting objects, as opposed to the conventional model, in which a program is seen as a list of tasks (subroutines) to perform. In OOP, each object is capable of receiving messages, processing data, and sending messages to other objects. Each object can be viewed as an independent "machine" with a distinct role or responsibility. The actions (or "methods") on these objects. The terms "objects" and "oriented" in something like the modern sense of object- oriented programming seem to make their first appearance at MIT in the late 1950s and early 1960s. In the environment of the artificial intelligence group, as early as 1960, "object" could refer to identified items (LISP atoms) with properties (attributes); Alan Kay was later to cite a detailed understanding of LISP internals as a strong influence on his thinking in 1966.[3] Another early MIT example was Sketchpad created by Ivan Sutherland in 1960-61; in the glossary of the 1963 technical report based on his dissertation about Sketchpad, Sutherland defined notions of "object" and "instance" (with the class concept covered by "master" or "definition"), albeit specialized to graphical interaction. Also, an MIT ALGOL version, AED-0, linked data structures ("plexes", in that dialect) directly with procedures, prefiguring what were later termed "messages", "methods" and "member functions".

sunsoft

1778 developed with SunSoft. By following a common specification, HP and SunSoft

1959 IONA released Orbix for SunSoft Solaris and SunOS at the Object World

1965 3.1 is now in beta. In January 1994, IONA and SunSoft Inc. signed an

2710 As much of this work is being done by SunSoft, my guess is that the

supported

526 supported by dynamic multiple inheritance (DMI) in many situations.

1332 interactive user interface facilities, as found in a fully supported OODBMS.

2083 environments supported include CFRONT and C++ Workbench from

2095 Cooperative Framework implementations on supported platforms

2415 commercially supported garbage collector that can transparently and

syntactic

3 "Objects" are the foundation of object-oriented programming, and are fundamental data types in object-oriented programming languages. These languages provide extensive syntactic and semantic support for object handling, including a hierarchical type system, special notation for declaring and calling methods, and facilities for hiding selected fields from client programmers. However, objects and object-oriented programming can be implemented in any language.

41 Attempts to find a consensus definition or theory behind objects have not proven very successful (however, see Abadi & Cardelli, A Theory of Objects[18] for formal definitions of many OOP concepts and constructs), and often diverge widely. For example, some definitions focus on mental activities, and some on program structuring. One of the simpler definitions is that OOP is the act of using "map" data structures or arrays that can contain functions and pointers to other maps, all with some syntactic and scoping sugar on top. Inheritance can be performed by cloning the maps (sometimes called "prototyping"). OBJECT:=>> Objects are the run time entities in an object-oriented system. They may represent a person, a place, a bank account, a table of data or any item that the program has to handle.

965 Parametric polymorphism is referred to as generics. Generics can be syntactic,

990 Ada generics and C++ templates provide explicit syntactic generics. While

1213 etc., although these are "syntactic" or restricted forms [Cardelli 85].

taking

159 function taking an object of the record type, called the receiver, as the

717 "Design. The practise of taking a specification of externally available

1163 efficiency by taking advantage of that representation wherever used. In many

1220 a polymorphic sort function taking a base type with a comparison operator.

2359 taking a container as an argument need to know of or make assumptions

traditional

754 adds OO techniques to the traditional structured analysis principles of Yourdon

818 programming gaps found in traditional structured analysis and design.

1316 are different from the more traditional relational databases because they allow

1946 traditional flat file databases, relational databases or object oriented

2599 programs. Testing of OOP is compared with traditional software

turner

2509 Graham, J.A., Drakeford, A.C.T., Turner, C.D. 1993. The Verification,

2593 Turner, C. D. and D. J. Robson, "The Testing of Object-Oriented Programs",

2605 Turner, C. D. and D. J. Robson, "A Suite of Tools for the State-Based

2617 Turner, C. D. and D. J. Robson, "Guidance for the Testing of Object-

2628 Turner, C. D. and D. J. Robson, "State-Based Testing and Inheritance",

universal

778 Universal Process Model roughly corresponds to the Waterfall Model [Royce 70].

942 joined as specializations of the new "Universal" polymorphism.

944 |-- universal --|

962 The two forms of "Universal Polymorphism", parametric and inclusion are closely

2391 Because no memory management scheme is universal enough for all applications,

usa

1381 Mountain View, CA USA 94043

1452 State University, Atlanta, USA, 1992, 163 pages.

1658 Cupertino, CA 95014-9974 (USA)

1850 Company: Isis Distributed Systems, Inc., Ithaca NY, USA.

2504 of 11th. TOOLS USA Conference, Santa Barbara, Aug 1993, pp 407-426.

usage

209 usage is atypical] See [Booch 94, pp 154-155] for a brief discussion of

674 parameters but limiting base class usage (as in Eiffel). If these restrictions

1069 possibilities of usage is undecidable. When the complete program is compiled,

1071 usage must have a consistent way of accessing these functions, as achieved thru

2388 exceptions, also make static analysis of memory usage at compile-time

variable

1 Object-oriented programming (OOP) is a programming paradigm using "objects" – data structures consisting of data fields and methods together with their interactions – to design applications and computer programs. Programming techniques may include features such as data abstraction, encapsulation, messaging, modularity, polymorphism, and inheritance. Many modern programming languages now support OOP, at least as an option. In computer science, an object is any entity that can be manipulated by the commands of a programming language, such as a value, variable, function, or data structure. (With the later introduction of object-oriented programming the same word, "object", refers to a particular instance of a class)

25 Open recursion – a special variable (syntactically it may be a keyword), usually called this or self, that allows a method body to invoke another method body of the same object. This variable is late-bound; it allows a method defined in one class to invoke another method that is defined later, in some subclass thereof.

178 member function, instance variable

1016 variable declaration) may denote objects of many different classes that are

vega

2578 available by anonymous ftp from vega.dur.ac.uk as

2601 This paper is available by anonymous ftp from vega.dur.ac.uk in

2613 This paper is available by anonymous ftp from vega.dur.ac.uk in

2624 This paper is available by anonymous ftp from vega.dur.ac.uk in

2635 This paper is available by anonymous ftp from vega.dur.ac.uk in

window

73 Luca Cardelli wrote a paper titled "Bad Engineering Properties of Object-Oriented Languages" Richard Stallman wrote in 1995, "Adding OOP to Emacs is not clearly an improvement; I used OOP when working on the Lisp Machine window systems, and I disagree with the usual view that it is a superior way to program."

212 by changing its parent. A good example is a window becoming an icon, as

213 window and icon objects display different behavior (although cognitive

455 window changing into an icon and then back again, which involves changing a

456 base class between a window and icon class.

working

73 Luca Cardelli wrote a paper titled "Bad Engineering Properties of Object-Oriented Languages" Richard Stallman wrote in 1995, "Adding OOP to Emacs is not clearly an improvement; I used OOP when working on the Lisp Machine window systems, and I disagree with the usual view that it is a superior way to program."

835 Humphrey is now working on the Personal Software Process (PSP), a scaled down

865 software quality and ami working group in Europe helping to creat the ISO

1055 derived class and working its way up). But for static objects, a virtual

1781 In addition, HP is working with IBM to integrate HP's DOMF with IBM's

years

8 Object-oriented programming has roots that can be traced to the 1960s. As hardware and software became increasingly complex, manageability often became a concern. Researchers studied ways to maintain software quality and developed object-oriented programming in part to address common problems by strongly emphasizing discrete, reusable units of programming logic[citation needed]. The technology focuses on data rather than processes, with programs composed of self-sufficient modules ("classes"), each instance of which ("objects") contains all the information needed to manipulate its own data structure ("members"). This is in contrast to the existing modular programming that had been dominant for many years that focused on the function of a module, rather than specifically the data, but equally provided for code reuse, and self-sufficient reusable units of programming logic, enabling collaboration through the use of linked modules (subroutines). This more conventional approach, which still persists, tends to consider data and behavior separately.

18 A survey by Deborah J. Armstrong of nearly 40 years of computing literature identified a number of "quarks", or fundamental concepts, found in the strong majority of definitions of OOP.

52 In recent years, object-oriented programming has become especially popular in dynamic programming languages. Python, Ruby and Groovy are dynamic languages built on OOP principles, while Perl and PHP have been adding object oriented features since Perl 5 and PHP 4, and ColdFusion since version 5.

79 Richard Mansfield, author and former editor of COMPUTE! magazine, states that "like countless other intellectual fads over the years ("relevance", communism, "modernism", and so on—history is littered with them), OOP will be with us until eventually reality asserts itself. But considering how OOP currently pervades both universities and workplaces, OOP may well prove to be a durable delusion. Entire generations of indoctrinated programmers continue to march out of the academy, committed to OOP and nothing but OOP for the rest of their lives."[38] He also is quoted as saying "OOP is to writing a program, what going through airport security is to flying".

2475 was choosing a basis for the next five years of work, wouldn't you feel

abstractions

110 covers "Identifying Key Abstractions" for objects and classes based on an

549 - It supports objects that are data abstractions with an interface of named

553 object-oriented = data abstractions + object types + type inheritance

708 abstractions and mechanisms that provide the behavior that this model

addresses

1337 Subject: ODMG Gopher and Web Addresses

1340 Servers at the following addresses:

1345 addresses and contact information for ODBMS vendors, ODMG membership

2519 Conference, October 1993, Toronto. Email addresses for authors

answer

1152 For a short answer:

1153 Subtype Polymorphism, as opposed to Subclass Polymorphism, is the best answer

1208 Short Answer: Parametric Polymorphism (although various implementations

1498 In answer to your general question about the OMG, here's a brief overview.

applies

99 concept applies", and "A concept is an idea or notion we share that applies

982 the same applies because all operations required by the supertype are present

1139 flexibility than dynamic typing and the same applies to ML (although see the

attempts

12 In the 1970s, Kay's Smalltalk work had influenced the Lisp community to incorporate object- based techniques that were introduced to developers via the Lisp machine. Experimentation with various extensions to Lisp (like LOOPS and Flavors introducing multiple inheritance and mixins), eventually led to the Common Lisp Object System (CLOS, a part of the first standardized object-oriented programming language, ANSI Common Lisp), which integrates functional programming and object-oriented programming and allows extension via a Meta- object protocol. In the 1980s, there were a few attempts to design processor architectures that included hardware support for objects in memory but these were not successful. Examples include the Intel iAPX 432 and the Linn Smart Rekursiv.

34 There have been several attempts at formalizing the concepts used in object-oriented programming. The following concepts and constructs have been used as interpretations of OOP concepts:

41 Attempts to find a consensus definition or theory behind objects have not proven very successful (however, see Abadi & Cardelli, A Theory of Objects[18] for formal definitions of many OOP concepts and constructs), and often diverge widely. For example, some definitions focus on mental activities, and some on program structuring. One of the simpler definitions is that OOP is the act of using "map" data structures or arrays that can contain functions and pointers to other maps, all with some syntactic and scoping sugar on top. Inheritance can be performed by cloning the maps (sometimes called "prototyping"). OBJECT:=>> Objects are the run time entities in an object-oriented system. They may represent a person, a place, a bank account, a table of data or any item that the program has to handle.

2362 Attempts to encapsulate memory management with reference counting, the "poor

automated

1351 automated reply.

2639 Wong, P. Automated Class Exerciser (ACE) User's Guide. Technical

2689 ACE (Automated Class Exerciser) which is available under non-disclosure

2699 A group of volunteers is building a C++ test harness for the automated

benefits

860 "Concepts on Measuring the Benefits of Software Process Improvement,"

888 1.23) What Are The Benefits Of Object-Orientation? (Object-Oriented Technology)

1320 object-oriented database. OODBs allow all the benefits of object-orientation,

2190 benefits.

brings

465 Multiple Inheritance brings up the possibility for a class to appear as a

517 Others complain multiple inheritance is too complicated because it brings up

560 as: "... storing type identification in each object, brings us to a style of

2113 NCR, AT&T's computer business, brings computing and

capability

351 terminology, an introspective protocol provides a read only capability (e.g.

353 intercessory protocol provides a write capability which allows system

829 From a greater perspective, the SEI has developed the Capability Maturity Model

1360 objects, and hence system resources, can only be accessed if a capability to

champeaux

1405 de Champeaux [de Champeaux 93]

1434 de Champeaux, Dennis and Faure, Penelope. A comparative study of object-

1471 Champeaux, D. de - Object-oriented system development, 1993.

changing

212 by changing its parent. A good example is a window becoming an icon, as

453 classes provide properties and attributes for objects, changing base classes

455 window changing into an icon and then back again, which involves changing a

checking

670 Polymorphic languages can be statically typed to provide strong type checking,

690 and run-time selection (or checking) as unavoidable in the general case [a

2697 C and C++ called MetaC. It also dones some syntax checking and memory

2698 allocation checking.

clear

941 but separated to draw a clear distinction between the two forms, which are then

1030 Meyer is clear between the concept and the Eiffel realization in his

2387 clear order of execution. Other dynam ic control structures, such as

2398 b) Switches indicating deletion. Many applications must clear the switch to

cmu

849 ftp.sei.cmu.edu

854 Results 1987-1991", CMU

861 CMU

1368 Mach (CMU, supports BSD 4.3, really message-based)

coding

70 OOP was developed to increase the reusability and maintainability of source code. Transparent representation of the control flow had no priority and was meant to be handled by a compiler. With the increasing relevance of parallel hardware and multithreaded coding, developer transparent control flow becomes more important, something hard to achieve with OOP.

639 coding logic (switch statements) and because small methods further reduce

656 lead to the use of switch statements based on type or complex coding in many

2430 objects was something more intuitive and natural than coding procedures.

commercial

1531 Proposals, requesting detailed technical and commercial availability

1547 developed and offered by commercial companies.

1886 suitable for use in large scale commercial systems and embedded

2522 example is worked out in C++ which tests a commercial class.

commercially

16 More recently, a number of languages have emerged that are primarily object-oriented yet compatible with procedural methodology, such as Python and Ruby. Probably the most commercially important recent object-oriented languages are Visual Basic.NET (VB.NET) and C#, both designed for Microsoft's .NET platform, and Java, developed by Sun Microsystems. Both frameworks show the benefit of using OOP by creating an abstraction from implementation in their own way. VB.NET and C# support cross-language inheritance, allowing classes defined in one language to subclass classes defined in the other language. Developers usually compile Java to bytecode, allowing Java to run on any operating system for which a Java virtual machine is available. VB.NET and C# make use of the Strategy pattern to accomplish cross-language inheritance, whereas Java makes use of the Adapter pattern[citation needed].

64 There are also object databases that can be used to replace RDBMSs, but these have not been as technically and commercially successful as RDBMSs.

1594 Technology developments, both technically and commercially. First

2415 commercially supported garbage collector that can transparently and

communication

558 + Communication with messages

1921 specification to provide a SMART communication framework allowing

1924 proven communication framework that links thousands of nodes.

2061 communication between internal ORB functions is used to

communications

1469 Oriented Design," The Communications of ACM, (33, 9) Sept. 1990, pp. 104-1124.

1519 1) the Object Request Broker, or key communications element, for

2114 communications solutions together to provide people easy

2206 communications layer

companies

1547 developed and offered by commercial companies.

1750 distributed heterogeneous systems environments. Of all computer companies,

1966 agreement to align their implementations of CORBA. The two companies

2150 applications and data into a single system. With DOME, companies can

compile-time

689 general undecidability of dynamic types at compile-time renders dynamic typing

1114 Static typing refers to types declared in a program at compile-time, so no type

2382 execution to make a compile-time determination of the last user of an

2388 exceptions, also make static analysis of memory usage at compile-time

concern

8 Object-oriented programming has roots that can be traced to the 1960s. As hardware and software became increasingly complex, manageability often became a concern. Researchers studied ways to maintain software quality and developed object-oriented programming in part to address common problems by strongly emphasizing discrete, reusable units of programming logic[citation needed]. The technology focuses on data rather than processes, with programs composed of self-sufficient modules ("classes"), each instance of which ("objects") contains all the information needed to manipulate its own data structure ("members"). This is in contrast to the existing modular programming that had been dominant for many years that focused on the function of a module, rather than specifically the data, but equally provided for code reuse, and self-sufficient reusable units of programming logic, enabling collaboration through the use of linked modules (subroutines). This more conventional approach, which still persists, tends to consider data and behavior separately.

647 If all of the above types are Numbers, code can be written without concern for

682 There is some concern about the efficiency of run-time method selection as

2200 - Concern registration and event notification

considered

608 considered part of the selector in Smalltalk (and hence Objective-C).

903 Polymorphism is often considered the most powerful facility of an OOPL.

1130 is even being considered for the C++ standard. A similar facility to safe

1157 A type can be considered a set of values and a set of operations on those

construction

65 OOP can be used to associate real-world objects and processes with digital counterparts. However, not everyone agrees that OOP facilitates direct real-world mapping (see Negative Criticism section) or that real-world mapping is even a worthy goal; Bertrand Meyer argues in Object-Oriented Software Construction that a program is not a model of the world but a model of some part of the world; "Reality is a cousin twice removed". At the same time, some principal limitations of OOP had been noted. For example, the Circle-ellipse problem is difficult to handle using OOP's concept of inheritance.

1344 These are still under construction. What you can find right now are

1609 that the object-oriented approach to software construction best

2327 [1] "Object-Oriented Software Construction" by Meyer puts the argument

constructs

34 There have been several attempts at formalizing the concepts used in object-oriented programming. The following concepts and constructs have been used as interpretations of OOP concepts:

41 Attempts to find a consensus definition or theory behind objects have not proven very successful (however, see Abadi & Cardelli, A Theory of Objects[18] for formal definitions of many OOP concepts and constructs), and often diverge widely. For example, some definitions focus on mental activities, and some on program structuring. One of the simpler definitions is that OOP is the act of using "map" data structures or arrays that can contain functions and pointers to other maps, all with some syntactic and scoping sugar on top. Inheritance can be performed by cloning the maps (sometimes called "prototyping"). OBJECT:=>> Objects are the run time entities in an object-oriented system. They may represent a person, a place, a bank account, a table of data or any item that the program has to handle.

172 and program complexity (fewer nested programming constructs) and allowing

763 analysis methodologies with such constructs as associations (E-R), functional

coplien

87 defined in [Coplien 92, p280], where "classes play a central role in the

149 programming (see sections 2.3, 4.3, and [Coplien 92]).

462 See also [Kim 89, chs 1, 3] for a discussion and [Coplien 92] for some

1238 as described in section 1.4. See also [Coplien 92].

count

2314 scheme each object keeps a count of references to it. When this count

2318 circular data structures. Two systems that use a reference count GC

2320 link count).

cycle

796 [Coad 91b] presents the following development cycle breakdown:

1530 The OMG adoption cycle includes Requests for Information and

1826 for properties, life cycle, associations, event notification and naming.

1829 cycle. The initial version will work with the C++ programming language.

dec

1639 > DEC ObjectBroker Version 2.5 (Version 2.1 was ACA)

1648 comas@nyo.dec.com (212) 856-2507

1998 1 DEC C++ 4th Qtr

2001 Ultrix DEC C++ 4th Qtr

define

19 Not all of these concepts are to be found in all object-oriented programming languages. For example, object-oriented programming that uses classes is sometimes called class-based programming, while prototype-based programming does not typically use classes. As a result, a significantly different yet analogous terminology is used to define the concepts of object and instance.

100 to certain objects in our awareness". [Rumbaugh 91] defines: "We define an

357 only define new frameworks but to specialize existing system frameworks

637 define methods for each specific case desired. In addition to better coupling

differential

356 perform differential changes, intercessory protocols allow users to not

379 for differential programming. Inheritance can also double for assignment

420 Differential programming is the use of inheritance to reuse existing classes

492 With differential programming, a class does not have to be modified if it is

distributed-computing

1738 SUBJECT: HP INTRODUCES DISTRIBUTED-COMPUTING SOLUTION FOR BUILDING

1742 today introduced a distributed-computing solution for building scalable,

1748 overall distributed-computing strategy, which is designed to give customers

1752 distributed computing. HP provides a wide variety of distributed-computing

documents

53 The Document Object Model of HTML, XHTML, and XML documents on the Internet have bindings to the popular JavaScript

1634 Contact documents@omg.org or omg_documents@omg.org for more of the same..

2004 Documents Available from IONA

edition

559 Stroustrup's first edition of [Stroustrup 91, '86 p. 37] defines object based

769 evolutionary step beyond the first edition by incorporating a collection of the

1472 Coad, P., and Yourdon, E. - Object-oriented analysis (2nd edition), 1991a.

2489 Bezier, Boris, "Software Testing Techniques", 2nd edition, Van Nostrand

e-mail

870 subscribe firstname, lastname, e-mail address.

1488 If you are interested in obtaining this book you can send an e-mail to

1574 address <e-mail address) (use this address instead of sender)

2254 telephone, FAX, and e-mail to help customers maximize the use of the

enhanced

13 Object-oriented programming developed as the dominant programming methodology in the early and mid 1990s when programming languages supporting the techniques became widely available. These included Visual FoxPro 3.0, C++[citation needed], and Delphi[citation needed]. Its dominance was further enhanced by the rising popularity of graphical user interfaces, which rely heavily upon object-oriented programming techniques. An example of a closely related dynamic GUI library and OOP language can be found in the Cocoa frameworks on Mac OS X, written in Objective-C, an object-oriented, dynamic messaging extension to C based on Smalltalk. OOP toolkits also enhanced the popularity of event-driven programming (although this concept is not limited to OOP). Some[who?] feel that association with GUIs (real or perceived) was what propelled OOP into the programming mainstream.

1746 introduced an enhanced version of HP Distributed Smalltalk.

1909 - enhanced security;

entries

703 classified bibliography in [Booch 94] also contains entries on OOA(B), OOD(F)

2075 directory entries required for cross domain operation

2277 There are two entries on garbage collection, the first is an excellent entry

2431 Other entries or suggestions are welcome, please send to the author of the FAQ.

entry

1382 See also APPENDIX E, PAPERS, Persistent Operating Systems entry.

1668 > ILU (free, see APPENDIX E entry 59)

2277 There are two entries on garbage collection, the first is an excellent entry

2433 [This entry was donated by Doug Shaker and is certainly a FAQ]

error

392 causes an ambiguity error iff more than one parent has match, CLOS creates

443 the earlier flavors. C++ declares an error iff a conflict arises, but a

2054 - Logging - provides local and server based error

2591 Theilen, David. "No Bugs. Delivering error free code in C and C++.",

etet

2700 testing of C++, C and Perl programs. The system is called ETET (Extended

2702 etet_support@uel.co.uk

2706 etet

2707 etet1.10.1.tar.Z". They are looking for

extended

48 Languages that are historically procedural languages, but have been extended with some OO features. Examples: Visual Basic (derived from BASIC), Fortran 2003, Perl, COBOL 2002, PHP, ABAP.

1953 In version 1.2 IONA has also extended the whole approach to filtering of

1956 built using Orbix. IONA has also extensively extended the number, and scope, of

2700 testing of C++, C and Perl programs. The system is called ETET (Extended

f

40 records are basis for understanding objects if function literals can be stored in fields (like in functional programming languages), but the actual calculi need be considerably more complex to incorporate essential features of OOP. Several extensions of System F<: that deal with mutable objects have been studied;[18] these allow both subtype polymorphism and parametric polymorphism (generics)

703 classified bibliography in [Booch 94] also contains entries on OOA(B), OOD(F)

1431 Arnold, P., Bodoff, S., Coleman, D., Gilchrist, H., Hayes, F., An Evolution of

1438 Fichman R.G. & Kemerer C.F. OO and Conventional Analysis and Design

flexible

175 Virtual members in dynamically typed languages are more flexible because

189 flexible kind of object which can play the role of classes in classical OO

225 1 level systems therefore provide the most flexible and powerful capabilities.

1923 scalable, flexible and maintainable. ORBeline incorporates PostModern's

focus

2 In the domain of object-oriented programming an object is usually taken to mean an ephemeral compilation of attributes (object elements) and behaviors (methods or subroutines) encapsulating an entity. In this way, while primitive or simple data types are still just single pieces of information, object-oriented objects are complex types that have multiple pieces of information and specific properties (or attributes). Instead of merely being assigned a value, (like int =10), objects have to be "constructed". In the real world, if a Ford Focus is an "object" - an instance of the car class, its physical properties and its function to drive would have been individually specified. Once the properties of the Ford Focus "object" had been specified into the form of the car class, it can be endlessly copied to create identical objects that look and function in just the same way. As an alternative example, animal is a superclass of primate and primate is a superclass of human. Individuals such as Joe Bloggs or John Doe would be particular examples or 'objects' of the human class, and consequently possess all the characteristics of the human class (and of the primate and animal superclasses as well).

41 Attempts to find a consensus definition or theory behind objects have not proven very successful (however, see Abadi & Cardelli, A Theory of Objects[18] for formal definitions of many OOP concepts and constructs), and often diverge widely. For example, some definitions focus on mental activities, and some on program structuring. One of the simpler definitions is that OOP is the act of using "map" data structures or arrays that can contain functions and pointers to other maps, all with some syntactic and scoping sugar on top. Inheritance can be performed by cloning the maps (sometimes called "prototyping"). OBJECT:=>> Objects are the run time entities in an object-oriented system. They may represent a person, a place, a bank account, a table of data or any item that the program has to handle.

2533 The focus of this paper is on ensuring quality by

fusion

752 model (e.g. FUSION, Jacobson), scenarios (Rumbaugh), or use-cases (Jacobson).

771 FUSION methodology.

1408 FUSION [Coleman 94]

1474 Coleman, D. - Object-oriented development, the Fusion method, 1994.

generally

4 Objects are used in software development to implement abstract data structures, by bringing together the data components with the procedures that manipulate them. Objects in object- oriented programming are key in the concept of inheritance; thereby improving program reliability[attribution needed], simplification of software maintenance[attribution needed], the management of libraries, and the division of work in programmer teams. Object-oriented programming languages are generally designed to exploit and enforce these potential advantages of the object model. Objects can also make it possible to handle very disparate objects by the same piece of code, as long as they all have the proper method. Simple, non-OOP programs may be one "long" list of statements (or commands). More complex programs will often group smaller sections of these statements into functions or subroutines each of which might perform a particular task. With designs of this sort, it is common for some of the program's data to be 'global', i.e. accessible from any part of the program. As programs grow in size, allowing any function to modify any piece of data means that bugs can have wide-reaching effects.

45 Simula (1967) is generally accepted as the first language to have the primary features of an object-oriented language. It was created for making simulation programs, in which what came to be called objects were the most important information representation. Smalltalk (1972 to 1980) is arguably the canonical example, and the one with which much of the theory of object-oriented programming was developed. Concerning the degree of object orientation, following distinction can be made:

1830 For the generally available Developer's Kit, C++, C and Smalltalk

2422 are generally more reliable and easier to develop, maintain, and reuse than

geodesic

2346 [4] Geodesic Systems provides GC for C and C++. See http:

2347 www.geodesic.com

2351 Geodesic Systems

2352 mps@geodesic.com

gopher

1337 Subject: ODMG Gopher and Web Addresses

1339 The Object Database Management Group (ODMG) has set up Gopher and Web

1341 Gopher: gopher.odmg.org, port 2073

hierarchical

3 "Objects" are the foundation of object-oriented programming, and are fundamental data types in object-oriented programming languages. These languages provide extensive syntactic and semantic support for object handling, including a hierarchical type system, special notation for declaring and calling methods, and facilities for hiding selected fields from client programmers. However, objects and object-oriented programming can be implemented in any language.

507 Some people complain that inheritance is hierarchical (which is what most

2198 - Hierarchical namespace with true domains for complete

2536 hierarchical testing. The importance of good physical

hierarchies

56 It is intuitive to assume that inheritance creates a semantic "is a" relationship, and thus to infer that objects instantiated from subclasses can always be safely used instead of those instantiated from the superclass. This intuition is unfortunately false in most OOP languages, in particular in all those that allow mutable objects. Subtype polymorphism as enforced by the type checker in OOP languages (with mutable objects) cannot guarantee behavioral subtyping in any context. Behavioral subtyping is undecidable in general, so it cannot be implemented by a program (compiler). Class or object hierarchies need to be carefully designed considering possible incorrect uses that cannot be detected syntactically. This issue is known as the Liskov substitution principle.

416 Class hierarchies are subjective [Booch 91, 4.2; Lakoff 87] and usually drawn

1008 Owl also had such a facility but with two separate inheritance hierarchies,

1268 of indirection and inheritance hierarchies are specified on a per object

hp-ux

1642 IBM AIX, IBM MVS(port in progress), HP-UX, Macintosh, MS-Windows 3.1, NT,

1878 SunOs, Solaris, HP-UX, SGI Unix, Stratus FTX,

1992 HP-UX Native NOW

2078 including HP-UX, Sun Solaris, NCR 3000 UNIX and NCR

html

53 The Document Object Model of HTML, XHTML, and XML documents on the Internet have bindings to the popular JavaScript

1310 objc.html)

1674 ilu.html

2345 gc.html

human

2 In the domain of object-oriented programming an object is usually taken to mean an ephemeral compilation of attributes (object elements) and behaviors (methods or subroutines) encapsulating an entity. In this way, while primitive or simple data types are still just single pieces of information, object-oriented objects are complex types that have multiple pieces of information and specific properties (or attributes). Instead of merely being assigned a value, (like int =10), objects have to be "constructed". In the real world, if a Ford Focus is an "object" - an instance of the car class, its physical properties and its function to drive would have been individually specified. Once the properties of the Ford Focus "object" had been specified into the form of the car class, it can be endlessly copied to create identical objects that look and function in just the same way. As an alternative example, animal is a superclass of primate and primate is a superclass of human. Individuals such as Joe Bloggs or John Doe would be particular examples or 'objects' of the human class, and consequently possess all the characteristics of the human class (and of the primate and animal superclasses as well).

719 including human interaction, task management, and data management details."

icon

212 by changing its parent. A good example is a window becoming an icon, as

213 window and icon objects display different behavior (although cognitive

455 window changing into an icon and then back again, which involves changing a

456 base class between a window and icon class.

ideas

10 Objects as a formal concept in programming were introduced in the 1960s in Simula 67, a major revision of Simula I, a programming language designed for discrete event simulation, created by Ole-Johan Dahl and Kristen Nygaard of the Norwegian Computing Center in Oslo. Simula 67 was influenced by SIMSCRIPT and Hoare's proposed "record classes". Simula introduced the notion of classes and instances or objects (as well as subclasses, virtual methods, coroutines, and discrete event simulation) as part of an explicit programming paradigm. The language also used automatic garbage collection that had been invented earlier for the functional programming language Lisp. Simula was used for physical modeling, such as models to study and improve the movement of ships and their content through cargo ports. The ideas of Simula 67 influenced many later languages, including Smalltalk, derivatives of LISP (CLOS), Object Pascal, and C++.

11 The Smalltalk language, which was developed at Xerox PARC (by Alan Kay and others) in the 1970s, introduced the term object-oriented programming to represent the pervasive use of objects and messages as the basis for computation. Smalltalk creators were influenced by the ideas introduced in Simula 67, but Smalltalk was designed to be a fully dynamic system in which classes could be created and modified dynamically rather than statically as in Simula 67.[9] Smalltalk and with it OOP were introduced to a wider audience by the August 1981 issue of Byte Magazine.

66 However, Niklaus Wirth (who popularized the adage now known as Wirth's law: "Software is getting slower more rapidly than hardware becomes faster") said of OOP in his paper, "Good Ideas through the Looking Glass", "This paradigm closely reflects the structure of systems 'in the real world', and it is therefore well suited to model complex systems with complex behaviours" (contrast KISS principle).

1421 Further Ideas And Techniques:

ifi

1698 > CS Dept. University of Zurich, Switzerland. maffeis@ifi.unizh.ch

1706 CS Dept. University of Zurich, Switzerland. maffeis@ifi.unizh.ch

1710 From: Silvano Maffeis <maffeis@ifi.unizh.ch>

1718 ftp.ifi.unizh.ch: pub

implement

4 Objects are used in software development to implement abstract data structures, by bringing together the data components with the procedures that manipulate them. Objects in object- oriented programming are key in the concept of inheritance; thereby improving program reliability[attribution needed], simplification of software maintenance[attribution needed], the management of libraries, and the division of work in programmer teams. Object-oriented programming languages are generally designed to exploit and enforce these potential advantages of the object model. Objects can also make it possible to handle very disparate objects by the same piece of code, as long as they all have the proper method. Simple, non-OOP programs may be one "long" list of statements (or commands). More complex programs will often group smaller sections of these statements into functions or subroutines each of which might perform a particular task. With designs of this sort, it is common for some of the program's data to be 'global', i.e. accessible from any part of the program. As programs grow in size, allowing any function to modify any piece of data means that bugs can have wide-reaching effects.

7 Objects can be thought of as wrapping their data within a set of functions designed to ensure that the data are used appropriately, and to assist in that use. The object's methods will typically include checks and safeguards that are specific to the types of data the object contains. An object can also offer simple-to-use, standardized methods for performing particular operations on its data, while concealing the specifics of how those tasks are accomplished. In this way alterations can be made to the internal structure or methods of an object without requiring that the rest of the program be modified. This approach can also be used to offer standardized methods across different types of objects. As an example, several different types of objects might offer print methods. Each type of object might implement that print method in a different way, reflecting the different kinds of data each contains, but all the different print methods might be called in the same standardized manner from elsewhere in the program. These features become especially useful when more than one programmer is contributing code to a project or when the goal is to reuse code between projects.

824 language to implement the design). But some, such as Bjarne Stroustrup, don't

2374 often use "copy on write" to efficiently implement pass-by-value semantics.

implements

593 A method implements behavior, which is defined by [Booch 91, p80]:

1688 Implements ORB spec, DOS

2028 - defines and implements a comprehensive enterprise

2071 - Event Service (Release 3.1) - Implements an OMG

implicit

78 Joe Armstrong, the principal inventor of Erlang, is quoted as saying "The problem with object-oriented languages is they've got all this implicit environment that they carry around with them. You wanted a banana but what you got was a gorilla holding the banana and the entire jungle."

919 object (possibly satisfying some implicit or explicit type constraints

956 Parametric Polymorphism: a polymorphic function has an implicit or explicit

974 Implicit parametric polymorphism can be implemented with type inferencing

improving

4 Objects are used in software development to implement abstract data structures, by bringing together the data components with the procedures that manipulate them. Objects in object- oriented programming are key in the concept of inheritance; thereby improving program reliability[attribution needed], simplification of software maintenance[attribution needed], the management of libraries, and the division of work in programmer teams. Object-oriented programming languages are generally designed to exploit and enforce these potential advantages of the object model. Objects can also make it possible to handle very disparate objects by the same piece of code, as long as they all have the proper method. Simple, non-OOP programs may be one "long" list of statements (or commands). More complex programs will often group smaller sections of these statements into functions or subroutines each of which might perform a particular task. With designs of this sort, it is common for some of the program's data to be 'global', i.e. accessible from any part of the program. As programs grow in size, allowing any function to modify any piece of data means that bugs can have wide-reaching effects.

845 improving the process.

1096 simple call. It also allows small packages of behavior, improving coherence

2325 [Further, GC can perform compaction improving locality of reference.]

independent

9 An object-oriented program may thus be viewed as a collection of interacting objects, as opposed to the conventional model, in which a program is seen as a list of tasks (subroutines) to perform. In OOP, each object is capable of receiving messages, processing data, and sending messages to other objects. Each object can be viewed as an independent "machine" with a distinct role or responsibility. The actions (or "methods") on these objects. The terms "objects" and "oriented" in something like the modern sense of object- oriented programming seem to make their first appearance at MIT in the late 1950s and early 1960s. In the environment of the artificial intelligence group, as early as 1960, "object" could refer to identified items (LISP atoms) with properties (attributes); Alan Kay was later to cite a detailed understanding of LISP internals as a strong influence on his thinking in 1966.[3] Another early MIT example was Sketchpad created by Ivan Sutherland in 1960-61; in the glossary of the 1963 technical report based on his dissertation about Sketchpad, Sutherland defined notions of "object" and "instance" (with the class concept covered by "master" or "definition"), albeit specialized to graphical interaction. Also, an MIT ALGOL version, AED-0, linked data structures ("plexes", in that dialect) directly with procedures, prefiguring what were later termed "messages", "methods" and "member functions".

825 like OOA and OOD getting too far from OOP (implementation independent), for

2210 - Platform independent time services and exception handling

2299 between supposedly independent modules.

index

1571 index (return a list of all available files)

1572 get <file> (get files returned by index)

1575 list <directory> [match] (index a directory, pattern 'match' files)

1587 index

industry

1504 The Object Management Group (OMG) is an international software industry

1597 commentaries from software industry leaders, informative user

1838 and support. The company's products and services are used in industry,

2187 its products to industry standards as they are adopted.

influenced

10 Objects as a formal concept in programming were introduced in the 1960s in Simula 67, a major revision of Simula I, a programming language designed for discrete event simulation, created by Ole-Johan Dahl and Kristen Nygaard of the Norwegian Computing Center in Oslo. Simula 67 was influenced by SIMSCRIPT and Hoare's proposed "record classes". Simula introduced the notion of classes and instances or objects (as well as subclasses, virtual methods, coroutines, and discrete event simulation) as part of an explicit programming paradigm. The language also used automatic garbage collection that had been invented earlier for the functional programming language Lisp. Simula was used for physical modeling, such as models to study and improve the movement of ships and their content through cargo ports. The ideas of Simula 67 influenced many later languages, including Smalltalk, derivatives of LISP (CLOS), Object Pascal, and C++.

11 The Smalltalk language, which was developed at Xerox PARC (by Alan Kay and others) in the 1970s, introduced the term object-oriented programming to represent the pervasive use of objects and messages as the basis for computation. Smalltalk creators were influenced by the ideas introduced in Simula 67, but Smalltalk was designed to be a fully dynamic system in which classes could be created and modified dynamically rather than statically as in Simula 67.[9] Smalltalk and with it OOP were introduced to a wider audience by the August 1981 issue of Byte Magazine.

12 In the 1970s, Kay's Smalltalk work had influenced the Lisp community to incorporate object- based techniques that were introduced to developers via the Lisp machine. Experimentation with various extensions to Lisp (like LOOPS and Flavors introducing multiple inheritance and mixins), eventually led to the Common Lisp Object System (CLOS, a part of the first standardized object-oriented programming language, ANSI Common Lisp), which integrates functional programming and object-oriented programming and allows extension via a Meta- object protocol. In the 1980s, there were a few attempts to design processor architectures that included hardware support for objects in memory but these were not successful. Examples include the Intel iAPX 432 and the Linn Smart Rekursiv.

inherited

5 In contrast, the object-oriented approach encourages the programmer to place data where it is not directly accessible by the rest of the program. Instead, the data is accessed by calling specially written functions, commonly called methods, which are either bundled in with the data or inherited from "class objects." These act as the intermediaries for retrieving or modifying the data they control. The programming construct that combines data with a set of methods for accessing and managing those data is called an object. The practice of using subroutines to examine or modify certain kinds of data, however, was also quite commonly used in non-OOP modular programming, well before the widespread use of object-oriented programming.

206 classification where any object can be inherited from or cloned to serve as a

384 Inherited parents can specify various flavors of state. Delegation languages

429 inherited by any class requiring them. Method combination, or calling

initial

839 Level 1: Initial: Every project is handled differently; ad hoc and chaotic.

1829 cycle. The initial version will work with the C++ programming language.

2466 testable during initial evaluation by the client programmer. They must

2549 during the first release of their initial class library.

intended

151 It is primarily intended to introduce new terms. See [Cardelli 85] for

428 additional attributes or properties to other classes. They are intended to be

880 It was intended as a conveyance of object-oriented design. Simula 1 was a

2428 Smalltalk (in its original 1972 version) was initially intended to make

interesting

76 Alexander Stepanov suggested that OOP provides a mathematically-limited viewpoint and called it "almost as much of a hoax as Artificial Intelligence. I have yet to see an interesting piece of code that comes from these OO people. In a sense, I am unfair to AI: I learned a lot of stuff from the MIT AI Lab crowd, they have done some really fundamental work....".

218 Chambers has proposed an interesting variation called "Predicate Classes"

987 MI provides an interesting example here, as it is set intersection with an

2122 Variety may make life more interesting, but it only complicates the

internal

7 Objects can be thought of as wrapping their data within a set of functions designed to ensure that the data are used appropriately, and to assist in that use. The object's methods will typically include checks and safeguards that are specific to the types of data the object contains. An object can also offer simple-to-use, standardized methods for performing particular operations on its data, while concealing the specifics of how those tasks are accomplished. In this way alterations can be made to the internal structure or methods of an object without requiring that the rest of the program be modified. This approach can also be used to offer standardized methods across different types of objects. As an example, several different types of objects might offer print methods. Each type of object might implement that print method in a different way, reflecting the different kinds of data each contains, but all the different print methods might be called in the same standardized manner from elsewhere in the program. These features become especially useful when more than one programmer is contributing code to a project or when the goal is to reuse code between projects.

390 Inheritance also provides for member lookup, or internal environment. Various

597 can access the internal state of an object of that class to perform some

2061 communication between internal ORB functions is used to

intuitive

56 It is intuitive to assume that inheritance creates a semantic "is a" relationship, and thus to infer that objects instantiated from subclasses can always be safely used instead of those instantiated from the superclass. This intuition is unfortunately false in most OOP languages, in particular in all those that allow mutable objects. Subtype polymorphism as enforced by the type checker in OOP languages (with mutable objects) cannot guarantee behavioral subtyping in any context. Behavioral subtyping is undecidable in general, so it cannot be implemented by a program (compiler). Class or object hierarchies need to be carefully designed considering possible incorrect uses that cannot be detected syntactically. This issue is known as the Liskov substitution principle.

2430 objects was something more intuitive and natural than coding procedures.

2658 Cantata allows testing to be performed in an intuitive way

2682 *Intuitive GUI for easy test analysis

invocation

602 notations for invoking a method, and this invocation can be called a message

609 If done statically, this can be referred to as invocation, and message passing

1820 language compiler, static and dynamic invocation interface and interface

1911 - dynamic invocation, which is seen as detrimental to performance

invoke

25 Open recursion – a special variable (syntactically it may be a keyword), usually called this or self, that allows a method body to invoke another method body of the same object. This variable is late-bound; it allows a method defined in one class to invoke another method that is defined later, in some subclass thereof.

651 The addition expression above will invoke the correct "+" function based on the

2179 the message interface to an object, and dynamically invoke an object.

invoked

21 Dynamic dispatch – when a method is invoked on an object, the object itself determines what code gets executed by looking up the method at run time in a table associated with the object. This feature distinguishes an object from an abstract data type (or module), which has a fixed (static) implementation of the operations for all instances. It is a programming methodology that gives modular component development while at the same time being very efficient.

257 Smalltalk's methods are all public (can be invoked from anywhere), but a

536 a method is invoked on an object of the base class, the derived class method

1056 function is invoked. This is the stored method from the derived class that

is-a

378 [LaLonde 90]) and can be used as an is-a-kind-of (or is-a) relationship or

404 An example of the is-a-kind-of relationship is shown below. Is-a is often

405 used synonymously, but can be used to show the "object is-a class"

407 between classes only. In one-level systems, is-a (object instantiation) and

is-a-kind-of

378 [LaLonde 90]) and can be used as an is-a-kind-of (or is-a) relationship or

404 An example of the is-a-kind-of relationship is shown below. Is-a is often

408 is-a-kind-of (inheritance) are merged into one [Ungar 87, Madsen 93, Sciore

487 of reuse takes advantage of the is-a-kind-of relationship. Class libraries

iso

864 often cited model. There is also an ISO 9000 standard [ISO] applicable to

865 software quality and ami working group in Europe helping to creat the ISO

2173 - ISO

johnson

57 Design Patterns: Elements of Reusable Object-Oriented Software is an influential book published in 1995 by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, sometimes casually called the "Gang of Four". Along with exploring the capabilities and pitfalls of object-oriented programming, it describes 23 common programming problems and patterns for solving them. As of April 2007, the book was in its 36th printing.

1468 Wirfs-Brock, R.J. and Johnson, R.E., "Surveying Current Research in Object-

2278 written for the FAQ by Paul Johnson and the second is from the FAQ author's

2281 From: Paul Johnson (paj@gec-mrc.co.uk)

journal

1435 oriented analysis methods. Journal of Object Oriented Programming (JOOP), pp

2502 Journal, April, 1989, pp. 69-74.

2567 Programming", Journal of Object-Oriented Programming,

2571 object-oriented programming", Journal of Object-Oriented

july

857 Hughes Aircraft", IEEE Software, July 1991

858 Dion, R., "Elements of a Process Improvement Program," IEEE Software, July

2270 "Distributed Object Computing With CORBA", C++ Report, July

2544 Object-Oriented Programs", IEEE Software, July 1991, pp. 72-80.

leads

2298 modules must co-operate closely. This leads to a tight binding

2307 resort to statically allocated arrays. This in turn leads to

2380 3. Message Passing Leads to Dynamic Execution Paths

2539 leads to errors in large designs. Compile-coupling

led

12 In the 1970s, Kay's Smalltalk work had influenced the Lisp community to incorporate object- based techniques that were introduced to developers via the Lisp machine. Experimentation with various extensions to Lisp (like LOOPS and Flavors introducing multiple inheritance and mixins), eventually led to the Common Lisp Object System (CLOS, a part of the first standardized object-oriented programming language, ANSI Common Lisp), which integrates functional programming and object-oriented programming and allows extension via a Meta- object protocol. In the 1980s, there were a few attempts to design processor architectures that included hardware support for objects in memory but these were not successful. Examples include the Intel iAPX 432 and the Linn Smart Rekursiv.

15 Object-oriented features have been added to many existing languages during that time, including Ada, BASIC, Fortran, Pas cal, and others. Adding these features to languages that were not initially designed for them often led to problems with compatibility and maintainability of code.

17 Just as procedural programming led to refinements of techniques such as structured programming, modern object-oriented software design methods include refinements[citation needed] such as the use of design patterns, design by contract, and modeling languages (such as UML).

783 also provides the following critisisms on the Waterfall Model which had led to

local

550 operations and a hidden local state.

1891 be built and tested on a single machine using local resources.

2054 - Logging - provides local and server based error

2233 its entirety on the local machine. This is possible because DDM maps

location

1728 storage, a Kerberos-based authentication service, a location service, a

1908 - location broking,

2064 - Dynamic Service Location - provides a mechanism for

2230 to know the physical location of data, the server of access, or the

logical

1526 the logical modeling and physical storage of objects; and

2201 - Logical name translation for true aliasing

2232 perspective, the enterprise is a single logical database located in

2234 the application's logical view of the environment into the

lookup

273 classes, visibility and member lookup resolution. This is a feature-based or

390 Inheritance also provides for member lookup, or internal environment. Various

1077 lookup is performed (bound) at run-time (dynamically). This is often desired

1089 Again, various optimizations exist for dynamic lookup to increase efficiency

maffeis

1698 > CS Dept. University of Zurich, Switzerland. maffeis@ifi.unizh.ch

1706 CS Dept. University of Zurich, Switzerland. maffeis@ifi.unizh.ch

1710 From: Silvano Maffeis <maffeis@ifi.unizh.ch>

magazine

11 The Smalltalk language, which was developed at Xerox PARC (by Alan Kay and others) in the 1970s, introduced the term object-oriented programming to represent the pervasive use of objects and messages as the basis for computation. Smalltalk creators were influenced by the ideas introduced in Simula 67, but Smalltalk was designed to be a fully dynamic system in which classes could be created and modified dynamically rather than statically as in Simula 67.[9] Smalltalk and with it OOP were introduced to a wider audience by the August 1981 issue of Byte Magazine.

79 Richard Mansfield, author and former editor of COMPUTE! magazine, states that "like countless other intellectual fads over the years ("relevance", communism, "modernism", and so on—history is littered with them), OOP will be with us until eventually reality asserts itself. But considering how OOP currently pervades both universities and workplaces, OOP may well prove to be a durable delusion. Entire generations of indoctrinated programmers continue to march out of the academy, committed to OOP and nothing but OOP for the rest of their lives."[38] He also is quoted as saying "OOP is to writing a program, what going through airport security is to flying".

128 * There was a Software Frameworks Assoc. and magazine until last year, but

2588 Magazine, Vol. 2, No. 2, July-August 1992, pp17-18. SIGs

maintenance

4 Objects are used in software development to implement abstract data structures, by bringing together the data components with the procedures that manipulate them. Objects in object- oriented programming are key in the concept of inheritance; thereby improving program reliability[attribution needed], simplification of software maintenance[attribution needed], the management of libraries, and the division of work in programmer teams. Object-oriented programming languages are generally designed to exploit and enforce these potential advantages of the object model. Objects can also make it possible to handle very disparate objects by the same piece of code, as long as they all have the proper method. Simple, non-OOP programs may be one "long" list of statements (or commands). More complex programs will often group smaller sections of these statements into functions or subroutines each of which might perform a particular task. With designs of this sort, it is common for some of the program's data to be 'global', i.e. accessible from any part of the program. As programs grow in size, allowing any function to modify any piece of data means that bugs can have wide-reaching effects.

1608 range maintenance of that code. As an organization, OMG believes

2524 Maintenance, pp. 100-105. IEEE Computer Society, October 1989.

2585 Conference on Software Maintenance 1990, IEEE Computer Society

match

391 schemes exist, for example C++ finds the closest match within a scope but

392 causes an ambiguity error iff more than one parent has match, CLOS creates

437 and by accessing the first signature match (or ambiguity) encountered for

1575 list <directory> [match] (index a directory, pattern 'match' files)

material

43 This section does not cite any references or sources. Please help improve this section by adding citations to reliable sources. Unsourced material may be challenged and removed. (August 2009)

2440 Written Material section.

2444 or other means. Sections include Written Material, Courses, and

2478 3.11) What Is Available On Object-Oriented Testing? Written Material

mechanisms

623 number of new mechanisms added to COMMON LISP" [Kim ch 4, p70 (D. Moon)].

708 abstractions and mechanisms that provide the behavior that this model

1188 with mechanisms similar to Eiffel's pre-, post-, and invariant conditions.

1615 provides the mechanisms by which objects transparently make

membership

1000 assignment is based on actual object membership in that type (often of the CLOS

1345 addresses and contact information for ODBMS vendors, ODMG membership

1548 In order to serve OMG membership interested in other object-oriented systems

1704 The OMG also has a (Corporate) Membership list and "known CORBA supporters"

modification

304 modification). [Booch 91, p 119] provides another example in Smalltalk with

354 modification (e.g. add the following method or instance to this class,

1761 without modification -- on any other system that supports DCE. HP ORB Plus

1805 modification on HP, Sun and IBM UNIX(R) system-based workstations. They

modified

7 Objects can be thought of as wrapping their data within a set of functions designed to ensure that the data are used appropriately, and to assist in that use. The object's methods will typically include checks and safeguards that are specific to the types of data the object contains. An object can also offer simple-to-use, standardized methods for performing particular operations on its data, while concealing the specifics of how those tasks are accomplished. In this way alterations can be made to the internal structure or methods of an object without requiring that the rest of the program be modified. This approach can also be used to offer standardized methods across different types of objects. As an example, several different types of objects might offer print methods. Each type of object might implement that print method in a different way, reflecting the different kinds of data each contains, but all the different print methods might be called in the same standardized manner from elsewhere in the program. These features become especially useful when more than one programmer is contributing code to a project or when the goal is to reuse code between projects.

11 The Smalltalk language, which was developed at Xerox PARC (by Alan Kay and others) in the 1970s, introduced the term object-oriented programming to represent the pervasive use of objects and messages as the basis for computation. Smalltalk creators were influenced by the ideas introduced in Simula 67, but Smalltalk was designed to be a fully dynamic system in which classes could be created and modified dynamically rather than statically as in Simula 67.[9] Smalltalk and with it OOP were introduced to a wider audience by the August 1981 issue of Byte Magazine.

492 With differential programming, a class does not have to be modified if it is

494 This avoids code redundancy, since code would have to be copied and modified

module

8 Object-oriented programming has roots that can be traced to the 1960s. As hardware and software became increasingly complex, manageability often became a concern. Researchers studied ways to maintain software quality and developed object-oriented programming in part to address common problems by strongly emphasizing discrete, reusable units of programming logic[citation needed]. The technology focuses on data rather than processes, with programs composed of self-sufficient modules ("classes"), each instance of which ("objects") contains all the information needed to manipulate its own data structure ("members"). This is in contrast to the existing modular programming that had been dominant for many years that focused on the function of a module, rather than specifically the data, but equally provided for code reuse, and self-sufficient reusable units of programming logic, enabling collaboration through the use of linked modules (subroutines). This more conventional approach, which still persists, tends to consider data and behavior separately.

21 Dynamic dispatch – when a method is invoked on an object, the object itself determines what code gets executed by looking up the method at run time in a table associated with the object. This feature distinguishes an object from an abstract data type (or module), which has a fixed (static) implementation of the operations for all instances. It is a programming methodology that gives modular component development while at the same time being very efficient.

233 to each module is defined in such a way as to reveal as little as possible

2523 Hoffman, D. M. A CASE Study in Module Testing. In Proc. Conf. Software

named

301 the work of being a class. This can be declared in a class named "Meta-Class".

549 - It supports objects that are data abstractions with an interface of named

607 although keywords (or formal parameter names, like named parameters) are

1540 from a joint proposal (named "CORBA") of Hewlett-Packard, NCR Corp.,

names

445 same names for instance variables of subclasses illegal.

607 although keywords (or formal parameter names, like named parameters) are

2067 characteristics -- rather than names

2245 trademarks of SUITESOFTWARE. All other products and product names are

notation

3 "Objects" are the foundation of object-oriented programming, and are fundamental data types in object-oriented programming languages. These languages provide extensive syntactic and semantic support for object handling, including a hierarchical type system, special notation for declaring and calling methods, and facilities for hiding selected fields from client programmers. However, objects and object-oriented programming can be implemented in any language.

613 message based (receiver based) notation.

620 imply a functional prefix notation, although the CLOS designers (who coined the

821 realizations, or differing OODs, but a similar notation is often used for

object-relational

62 Main articles: Object-Relational impedance mismatch, Object-relational mapping, and Object database

63 Both object-oriented programming and relational database management systems (RDBMSs) are extremely common in software today. Since relational databases don't store objects directly (though some RDBMSs have object-oriented features to approximate this), there is a general need to bridge the two worlds. The problem of bridging object-oriented programming accesses and data patterns with relational databases is known as Object-Relational impedance mismatch. There are a number of approaches to cope with this problem, but no general solution without downsides.[20] One of the most common approaches is object-relational mapping, as found in libraries like Java Data Objects and Ruby on Rails' ActiveRecord.

occur

683 can occur with multiple-polymorphism (or even dynamic message passing).

726 operations, objects, and structures that commonly occur in software systems

826 fear that great discrepancies could occur between OOD and OOP by losing sight

1178 signatures can occur, calling for greater care in use. [Black 86] discusses

odell

758 addition to the structured analysis family (as does Martin and Odell).

1413 Odell [Martin 92]

1479 Martin, J., Odell, J. - Object-oriented analysis and design, 1992.

1480 Martin, J., Odell, J. - Principles of object-oriented analysis and design,

offer

7 Objects can be thought of as wrapping their data within a set of functions designed to ensure that the data are used appropriately, and to assist in that use. The object's methods will typically include checks and safeguards that are specific to the types of data the object contains. An object can also offer simple-to-use, standardized methods for performing particular operations on its data, while concealing the specifics of how those tasks are accomplished. In this way alterations can be made to the internal structure or methods of an object without requiring that the rest of the program be modified. This approach can also be used to offer standardized methods across different types of objects. As an example, several different types of objects might offer print methods. Each type of object might implement that print method in a different way, reflecting the different kinds of data each contains, but all the different print methods might be called in the same standardized manner from elsewhere in the program. These features become especially useful when more than one programmer is contributing code to a project or when the goal is to reuse code between projects.

1546 software interfaces; products which offer these interfaces continue to be

offers

6 An object-oriented program will usually contain different types of objects, each type corresponding to a particular kind of complex data to be managed or perhaps to a real-world object or concept such as a bank account, a hockey player, or a bulldozer. A program might well contain multiple copies of each type of object, one for each of the real-world objects the program is dealing with. For instance, there could be one bank account object for each real-world account at a particular bank. Each copy of the bank account object would be alike in the methods it offers for manipulating or reading its data, but the data inside each object would differ reflecting the different history of each account.

1595 Class offers an open editorial forum on numerous Object

1754 business benefit, and offers worldwide support and training programs,

2154 The DOME system can accomplish this complex task because it offers:

opinion

342 In the authors opinion, a myth. The story goes an object is an instance of a

514 but in the author's opinion many of their complaints are easily answered. In

653 type of "one" would be used with double dispatch! In the author's opinion,

657 real-world programming situations, unnecessarily. In the author's opinion,

orbs

1885 ORBs and servers. It is a multi-threaded high performance ORB

1894 DOME is constructed as a C++ class library, from which ORBs

2097 ORBs and CORBA 2.0 ORBs is planned

osf

1643 OSF

1682 SunOS 4.x, Solaris 2.3, and OSF

1876 2, OSF

1997 OSF

overview

1498 In answer to your general question about the OMG, here's a brief overview.

1717 An overview paper to electra is available from:

2121 Overview

2564 Overview. Techical Report TR92-0656, MPR Teltech Ltd., October

packages

240 and Ada have packages for encapsulation, CLOS's are optional while Ada's

619 packages can be used to restrict access, as in CLOS). Multi-methods can also

1096 simple call. It also allows small packages of behavior, improving coherence

1265 distinguish a receiver, but packages can help make up the difference.

parts

163 as variant parts and with multiple-inheritance concatenating several records

171 switch statement on variant parts with a single call, reducing code size

530 To create a subclass is specialization, to factor out common parts of

1533 particular parts of the reference model architecture. After passage

perl

48 Languages that are historically procedural languages, but have been extended with some OO features. Examples: Visual Basic (derived from BASIC), Fortran 2003, Perl, COBOL 2002, PHP, ABAP.

52 In recent years, object-oriented programming has become especially popular in dynamic programming languages. Python, Ruby and Groovy are dynamic languages built on OOP principles, while Perl and PHP have been adding object oriented features since Perl 5 and PHP 4, and ColdFusion since version 5.

2700 testing of C++, C and Perl programs. The system is called ETET (Extended

principle

56 It is intuitive to assume that inheritance creates a semantic "is a" relationship, and thus to infer that objects instantiated from subclasses can always be safely used instead of those instantiated from the superclass. This intuition is unfortunately false in most OOP languages, in particular in all those that allow mutable objects. Subtype polymorphism as enforced by the type checker in OOP languages (with mutable objects) cannot guarantee behavioral subtyping in any context. Behavioral subtyping is undecidable in general, so it cannot be implemented by a program (compiler). Class or object hierarchies need to be carefully designed considering possible incorrect uses that cannot be detected syntactically. This issue is known as the Liskov substitution principle.

66 However, Niklaus Wirth (who popularized the adage now known as Wirth's law: "Software is getting slower more rapidly than hardware becomes faster") said of OOP in his paper, "Good Ideas through the Looking Glass", "This paradigm closely reflects the structure of systems 'in the real world', and it is therefore well suited to model complex systems with complex behaviours" (contrast KISS principle).

230 [Coad 91, 1.1.2] defines: "Encapsulation (Information Hiding). A principle,

1389 Carrier principle, Object Directories

principles

52 In recent years, object-oriented programming has become especially popular in dynamic programming languages. Python, Ruby and Groovy are dynamic languages built on OOP principles, while Perl and PHP have been adding object oriented features since Perl 5 and PHP 4, and ColdFusion since version 5.

754 adds OO techniques to the traditional structured analysis principles of Yourdon

767 91] provides support and emphasis on types and roles as guiding principles,

1480 Martin, J., Odell, J. - Principles of object-oriented analysis and design,

print

7 Objects can be thought of as wrapping their data within a set of functions designed to ensure that the data are used appropriately, and to assist in that use. The object's methods will typically include checks and safeguards that are specific to the types of data the object contains. An object can also offer simple-to-use, standardized methods for performing particular operations on its data, while concealing the specifics of how those tasks are accomplished. In this way alterations can be made to the internal structure or methods of an object without requiring that the rest of the program be modified. This approach can also be used to offer standardized methods across different types of objects. As an example, several different types of objects might offer print methods. Each type of object might implement that print method in a different way, reflecting the different kinds of data each contains, but all the different print methods might be called in the same standardized manner from elsewhere in the program. These features become especially useful when more than one programmer is contributing code to a project or when the goal is to reuse code between projects.

1446 The following 2 reports are out of print.

procedure

596 A method is a function or procedure which is defined in a class and typically

598 operation. It can be thought of as a procedure with the first parameter as

1694 (RDA), Remote Procedure Calls (RPC), Message-Oriented Middleware (MOM),

2159 - and support for Remote Data Access (RDA), Remote Procedure

processes

8 Object-oriented programming has roots that can be traced to the 1960s. As hardware and software became increasingly complex, manageability often became a concern. Researchers studied ways to maintain software quality and developed object-oriented programming in part to address common problems by strongly emphasizing discrete, reusable units of programming logic[citation needed]. The technology focuses on data rather than processes, with programs composed of self-sufficient modules ("classes"), each instance of which ("objects") contains all the information needed to manipulate its own data structure ("members"). This is in contrast to the existing modular programming that had been dominant for many years that focused on the function of a module, rather than specifically the data, but equally provided for code reuse, and self-sufficient reusable units of programming logic, enabling collaboration through the use of linked modules (subroutines). This more conventional approach, which still persists, tends to consider data and behavior separately.

65 OOP can be used to associate real-world objects and processes with digital counterparts. However, not everyone agrees that OOP facilitates direct real-world mapping (see Negative Criticism section) or that real-world mapping is even a worthy goal; Bertrand Meyer argues in Object-Oriented Software Construction that a program is not a model of the world but a model of some part of the world; "Reality is a cousin twice removed". At the same time, some principal limitations of OOP had been noted. For example, the Circle-ellipse problem is difficult to handle using OOP's concept of inheritance.

841 Level 3: Defined: Standard processes are defined and used for all projects.

896 On resistance to change, system objects change infrequently while processes

production

1605 a methodology that supports modular production of software;

1815 -- run-time version, for full production deployment; and

1884 DOME is an ORB toolkit for the production of user-configured

2208 or production

proposes

289 [Booch 94, 4.2] proposes 3 views of classification as useful in OO analysis and

569 [Booch 94, 2.2] proposes 7 "Elements of the Object Model"; 4 major and 3 minor:

793 proposes a "round-trip gestalt" design with analyze-design iterations and

794 an overall system perspective and [Berard 93] proposes an (incremental)

protocol

12 In the 1970s, Kay's Smalltalk work had influenced the Lisp community to incorporate object- based techniques that were introduced to developers via the Lisp machine. Experimentation with various extensions to Lisp (like LOOPS and Flavors introducing multiple inheritance and mixins), eventually led to the Common Lisp Object System (CLOS, a part of the first standardized object-oriented programming language, ANSI Common Lisp), which integrates functional programming and object-oriented programming and allows extension via a Meta- object protocol. In the 1980s, there were a few attempts to design processor architectures that included hardware support for objects in memory but these were not successful. Examples include the Intel iAPX 432 and the Linn Smart Rekursiv.

349 MOP is an acronym for Meta-Object Protocol. This is a system with

351 terminology, an introspective protocol provides a read only capability (e.g.

353 intercessory protocol provides a write capability which allows system

published

57 Design Patterns: Elements of Reusable Object-Oriented Software is an influential book published in 1995 by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, sometimes casually called the "Gang of Four". Along with exploring the capabilities and pitfalls of object-oriented programming, it describes 23 common programming problems and patterns for solving them. As of April 2007, the book was in its 36th printing.

1511 In late 1990 the OMG published its Object Management Architecture

1620 Specification described in this published document is a self-

2274 published by Morgan Kaufmann Publishers, San Mateo, California

randy

2009 From: Randy Volters <randy.volters@columbiasc.ncr.com>

2108 Randy Volters, Sr. Product Manager

2110 Email: Randy.Volters@ColumbiaSC.NCR.COM

reality

65 OOP can be used to associate real-world objects and processes with digital counterparts. However, not everyone agrees that OOP facilitates direct real-world mapping (see Negative Criticism section) or that real-world mapping is even a worthy goal; Bertrand Meyer argues in Object-Oriented Software Construction that a program is not a model of the world but a model of some part of the world; "Reality is a cousin twice removed". At the same time, some principal limitations of OOP had been noted. For example, the Circle-ellipse problem is difficult to handle using OOP's concept of inheritance.

79 Richard Mansfield, author and former editor of COMPUTE! magazine, states that "like countless other intellectual fads over the years ("relevance", communism, "modernism", and so on—history is littered with them), OOP will be with us until eventually reality asserts itself. But considering how OOP currently pervades both universities and workplaces, OOP may well prove to be a durable delusion. Entire generations of indoctrinated programmers continue to march out of the academy, committed to OOP and nothing but OOP for the rest of their lives."[38] He also is quoted as saying "OOP is to writing a program, what going through airport security is to flying".

92 reality" [Booch 91, p77]. Other definitions referenced by Booch include

2140 middleware achieves this, it makes enterprise computing a reality.

receive

469 with the same name will be shared (receive a single slot) with the greatest

1350 ODMG, send an email message to info@odmg.org and you will receive an

1616 requests and receive responses. The ORB provides interoperability

1771 make requests and receive responses across a distributed network.

reenskaug

766 "structured" techniques, with greater emphasis on objects. OOram [Reenskaug

1414 Reenskaug (OOram, was OORASS) [Reenskaug 91]

1467 Wasserman et al, Rumbaugh, Reenskaug et al, and Colbert.

released

1808 VisualWorks 2.0 is released (expected within two months.)

1914 DOME was first released in August 1993; version 2 in May 1994.

1959 IONA released Orbix for SunSoft Solaris and SunOS at the Object World

2016 NCR Cooperative Frameworks(TM) were first released for sale

reliability

4 Objects are used in software development to implement abstract data structures, by bringing together the data components with the procedures that manipulate them. Objects in object- oriented programming are key in the concept of inheritance; thereby improving program reliability[attribution needed], simplification of software maintenance[attribution needed], the management of libraries, and the division of work in programmer teams. Object-oriented programming languages are generally designed to exploit and enforce these potential advantages of the object model. Objects can also make it possible to handle very disparate objects by the same piece of code, as long as they all have the proper method. Simple, non-OOP programs may be one "long" list of statements (or commands). More complex programs will often group smaller sections of these statements into functions or subroutines each of which might perform a particular task. With designs of this sort, it is common for some of the program's data to be 'global', i.e. accessible from any part of the program. As programs grow in size, allowing any function to modify any piece of data means that bugs can have wide-reaching effects.

491 testing providing even greater reliability.

716 operational characteristics (e.g. reliability, availability, performance)".

1955 security systems providing for improved reliability of distributed systems

replacing

1095 program complexity by replacing a nested construct (switch statement) with a

1169 performed on any polymorphic object are satisfied by any replacing objects.

1173 from type, by the aforementioned definition of type), a replacing object must

1189 This helps to insure the semantic integrity of replacing objects and their

repository

1821 repository. In addition to these OMG-specific features, most developers

1936 for the first time, as well as an upgraded Interface Repository, a new

1948 The improved Interface Repository is an integral part of IONA's CORBA

1949 implementation. The Interface Repository operates as a dynamic browser which is

resolution

273 classes, visibility and member lookup resolution. This is a feature-based or

476 resolution but requires more work for parents with many features.

518 the issues of shared bases and member conflict resolution. But most modern

519 systems support Multiple Inheritance by employing semantic resolution

responses

1534 by Technical and Business committees to review these responses, the

1616 requests and receive responses. The ORB provides interoperability

1771 make requests and receive responses across a distributed network.

2252 staff of fully trained professionals ensures "real world" responses

rest

5 In contrast, the object-oriented approach encourages the programmer to place data where it is not directly accessible by the rest of the program. Instead, the data is accessed by calling specially written functions, commonly called methods, which are either bundled in with the data or inherited from "class objects." These act as the intermediaries for retrieving or modifying the data they control. The programming construct that combines data with a set of methods for accessing and managing those data is called an object. The practice of using subroutines to examine or modify certain kinds of data, however, was also quite commonly used in non-OOP modular programming, well before the widespread use of object-oriented programming.

7 Objects can be thought of as wrapping their data within a set of functions designed to ensure that the data are used appropriately, and to assist in that use. The object's methods will typically include checks and safeguards that are specific to the types of data the object contains. An object can also offer simple-to-use, standardized methods for performing particular operations on its data, while concealing the specifics of how those tasks are accomplished. In this way alterations can be made to the internal structure or methods of an object without requiring that the rest of the program be modified. This approach can also be used to offer standardized methods across different types of objects. As an example, several different types of objects might offer print methods. Each type of object might implement that print method in a different way, reflecting the different kinds of data each contains, but all the different print methods might be called in the same standardized manner from elsewhere in the program. These features become especially useful when more than one programmer is contributing code to a project or when the goal is to reuse code between projects.

79 Richard Mansfield, author and former editor of COMPUTE! magazine, states that "like countless other intellectual fads over the years ("relevance", communism, "modernism", and so on—history is littered with them), OOP will be with us until eventually reality asserts itself. But considering how OOP currently pervades both universities and workplaces, OOP may well prove to be a durable delusion. Entire generations of indoctrinated programmers continue to march out of the academy, committed to OOP and nothing but OOP for the rest of their lives."[38] He also is quoted as saying "OOP is to writing a program, what going through airport security is to flying".

2360 about the rest of the program to determine ownership of the objects in the

restrictions

671 efficiency, and to support a static programming idiom, but require restrictions

674 parameters but limiting base class usage (as in Eiffel). If these restrictions

1124 restrictions include only allowing a common set of base class functions (or

2308 arbitrary restrictions on input data which can cause failure when

results

293 upon unsatisfactory results, and finally the latter if the first two approaches

330 "Meta-Class class" and this results in a 5 Level System:

675 are dropped, multiple-polymorphism results. Thus a single overridable function

854 Results 1987-1991", CMU

reusability

49 Languages with most of the features of objects (classes, methods, inheritance, reusability), but in a distinctly original form. Examples: Oberon (Oberon-1 or Oberon-2) and Common Lisp.

70 OOP was developed to increase the reusability and maintainability of source code. Transparent representation of the control flow had no priority and was meant to be handled by a compiler. With the increasing relevance of parallel hardware and multithreaded coding, developer transparent control flow becomes more important, something hard to achieve with OOP.

734 stresses the reusability of analysis and design, not code. - Jim Neighbors

1215 may be generically parameterized. Generics provide for reusability in

review

129 a review of their last conference is available by email thanks to Adam

303 returning a set of all methods, instances or parents for review (or even

1534 by Technical and Business committees to review these responses, the

1667 a detailed review.

roles

109 things, Roles, Incidents, Interactions, and Specifications." [Booch 91, 4.3]

522 Some prefer association to MI, claiming "roles" (as defined in [Rumbaugh 91])

525 use of inheritance for typical classification. Representation "roles" can be

767 91] provides support and emphasis on types and roles as guiding principles,

rtti

141 languages such as C++, although the new RTTI facility will supply simple

1129 A limited dynamic typing scheme, called RTTI (Run Time Type Identification),

1131 downcasting (historically known as type narrowing), the thrust of RTTI, can

1300 C++ (With RTTI)

running

967 fast running execution, but in a "true polymorphic system", only a single

1801 running distributed applications. These applications can use object

1806 also will run on Apple Macintosh computers and on any PC running the Windows

1967 demonstrated interoperability between IONA's Orbix running on Microsoft

scalable

1739 SCALABLE, OBJECT-ORIENTED APPLICATIONS

1742 today introduced a distributed-computing solution for building scalable,

1744 With HP ORB Plus, programmers can develop scalable, object-based

1923 scalable, flexible and maintainable. ORBeline incorporates PostModern's

secs

2596 Engineering and Computer Sciences (SECS), University of Durham,

2609 Computer Science (SECS), University of Durham, Durham,

2620 Division, School of Engineering and Computer Science (SECS),

2631 Engineering and Computer Science (SECS), University of Durham,

sei

829 From a greater perspective, the SEI has developed the Capability Maturity Model

837 based software process (TSP?). Other CMM's in the works at the SEI include a

849 ftp.sei.cmu.edu

853 Kitson, D.H. and Masters, S. "An Analysis of SEI Software Process Assessment

sending

9 An object-oriented program may thus be viewed as a collection of interacting objects, as opposed to the conventional model, in which a program is seen as a list of tasks (subroutines) to perform. In OOP, each object is capable of receiving messages, processing data, and sending messages to other objects. Each object can be viewed as an independent "machine" with a distinct role or responsibility. The actions (or "methods") on these objects. The terms "objects" and "oriented" in something like the modern sense of object- oriented programming seem to make their first appearance at MIT in the late 1950s and early 1960s. In the environment of the artificial intelligence group, as early as 1960, "object" could refer to identified items (LISP atoms) with properties (attributes); Alan Kay was later to cite a detailed understanding of LISP internals as a strong influence on his thinking in 1966.[3] Another early MIT example was Sketchpad created by Ivan Sutherland in 1960-61; in the glossary of the 1963 technical report based on his dissertation about Sketchpad, Sutherland defined notions of "object" and "instance" (with the class concept covered by "master" or "definition"), albeit specialized to graphical interaction. Also, an MIT ALGOL version, AED-0, linked data structures ("plexes", in that dialect) directly with procedures, prefiguring what were later termed "messages", "methods" and "member functions".

1813 sending and receiving of remote messages, and reusable

2384 oriented paradigm of objects sending messages to each other (possibly from

2541 Copies of the postscript file can be obtained by sending email

servers

1340 Servers at the following addresses:

1349 If you cannot access these servers, but would like information on the

1835 servers.

1885 ORBs and servers. It is a multi-threaded high performance ORB

simulation

10 Objects as a formal concept in programming were introduced in the 1960s in Simula 67, a major revision of Simula I, a programming language designed for discrete event simulation, created by Ole-Johan Dahl and Kristen Nygaard of the Norwegian Computing Center in Oslo. Simula 67 was influenced by SIMSCRIPT and Hoare's proposed "record classes". Simula introduced the notion of classes and instances or objects (as well as subclasses, virtual methods, coroutines, and discrete event simulation) as part of an explicit programming paradigm. The language also used automatic garbage collection that had been invented earlier for the functional programming language Lisp. Simula was used for physical modeling, such as models to study and improve the movement of ships and their content through cargo ports. The ideas of Simula 67 influenced many later languages, including Smalltalk, derivatives of LISP (CLOS), Object Pascal, and C++.

45 Simula (1967) is generally accepted as the first language to have the primary features of an object-oriented language. It was created for making simulation programs, in which what came to be called objects were the most important information representation. Smalltalk (1972 to 1980) is arguably the canonical example, and the one with which much of the theory of object-oriented programming was developed. Concerning the degree of object orientation, following distinction can be made:

881 simulation language, and the later general-purpose language Simula 67 is now

single-hierarchy

191 only objects, they are referred to as single-hierarchy, or 1 Level systems.

311 describe themselves. Also called "single-hierarchy" systems.

563 A more modern definition of "object-oriented" includes single-hierarchy

585 meta-class). In 1 Level (single-hierarchy) systems, all classes are objects.

sites

1348 adding more links to related sites, bibliographies, and a FAQ for ODBMSs.

1859 RDOM has been at beta test sites since January. General release of

2226 DDM provides autonomy for distributed data sites, but it also

2708 other FTP sites - sned email to the above address if you can provide

smart

12 In the 1970s, Kay's Smalltalk work had influenced the Lisp community to incorporate object- based techniques that were introduced to developers via the Lisp machine. Experimentation with various extensions to Lisp (like LOOPS and Flavors introducing multiple inheritance and mixins), eventually led to the Common Lisp Object System (CLOS, a part of the first standardized object-oriented programming language, ANSI Common Lisp), which integrates functional programming and object-oriented programming and allows extension via a Meta- object protocol. In the 1980s, there were a few attempts to design processor architectures that included hardware support for objects in memory but these were not successful. Examples include the Intel iAPX 432 and the Linn Smart Rekursiv.

1680 > ORBELINE - The SMART Object Request Broker - PostModern Computing

1918 CORBA Implementation Descriptions: ORBELINE - The SMART Object Request Broker

1921 specification to provide a SMART communication framework allowing

sparcompiler

1983 SunOS 4.1 SPARCompiler 2.1 NOW

1984 SunOS 4.1 SPARCompiler 3.0.2 NOW

1987 Solaris 2.x SPARCompiler 3.0.2 NOW

1988 Solaris 2.x SPARCompiler 4.0 NOW

spec

1582 91-12-1.ps CORBA spec [although it looks a little old]

1613 > The Common Object Request Broker: Arch. and Spec. (Corba)

1669 Object RPC compatible with OMG CORBA 1.2 spec (will compile OMG IDL and

1688 Implements ORB spec, DOS

standardized

7 Objects can be thought of as wrapping their data within a set of functions designed to ensure that the data are used appropriately, and to assist in that use. The object's methods will typically include checks and safeguards that are specific to the types of data the object contains. An object can also offer simple-to-use, standardized methods for performing particular operations on its data, while concealing the specifics of how those tasks are accomplished. In this way alterations can be made to the internal structure or methods of an object without requiring that the rest of the program be modified. This approach can also be used to offer standardized methods across different types of objects. As an example, several different types of objects might offer print methods. Each type of object might implement that print method in a different way, reflecting the different kinds of data each contains, but all the different print methods might be called in the same standardized manner from elsewhere in the program. These features become especially useful when more than one programmer is contributing code to a project or when the goal is to reuse code between projects.

12 In the 1970s, Kay's Smalltalk work had influenced the Lisp community to incorporate object- based techniques that were introduced to developers via the Lisp machine. Experimentation with various extensions to Lisp (like LOOPS and Flavors introducing multiple inheritance and mixins), eventually led to the Common Lisp Object System (CLOS, a part of the first standardized object-oriented programming language, ANSI Common Lisp), which integrates functional programming and object-oriented programming and allows extension via a Meta- object protocol. In the 1980s, there were a few attempts to design processor architectures that included hardware support for objects in memory but these were not successful. Examples include the Intel iAPX 432 and the Linn Smart Rekursiv.

state-based

2600 testing. A state-based approach is described.

2605 Turner, C. D. and D. J. Robson, "A Suite of Tools for the State-Based

2612 state-based testing approach.

2628 Turner, C. D. and D. J. Robson, "State-Based Testing and Inheritance",

statement

171 switch statement on variant parts with a single call, reducing code size

715 statement of what is needed; a coverage of both functional and quantified

1095 program complexity by replacing a nested construct (switch statement) with a

1100 the nested switch statement! [Martin 92] covers some of these issues.

stored

40 records are basis for understanding objects if function literals can be stored in fields (like in functional programming languages), but the actual calculi need be considerably more complex to incorporate essential features of OOP. Several extensions of System F<: that deal with mutable objects have been studied;[18] these allow both subtype polymorphism and parametric polymorphism (generics)

1056 function is invoked. This is the stored method from the derived class that

1330 lifetime and objects stored indefinitely in an OODB (which are persistent)

1765 stored.

strongly

8 Object-oriented programming has roots that can be traced to the 1960s. As hardware and software became increasingly complex, manageability often became a concern. Researchers studied ways to maintain software quality and developed object-oriented programming in part to address common problems by strongly emphasizing discrete, reusable units of programming logic[citation needed]. The technology focuses on data rather than processes, with programs composed of self-sufficient modules ("classes"), each instance of which ("objects") contains all the information needed to manipulate its own data structure ("members"). This is in contrast to the existing modular programming that had been dominant for many years that focused on the function of a module, rather than specifically the data, but equally provided for code reuse, and self-sufficient reusable units of programming logic, enabling collaboration through the use of linked modules (subroutines). This more conventional approach, which still persists, tends to consider data and behavior separately.

692 strongly typed

1135 ML, Metalanguage, is a functional programming language with a strongly typed

1144 "pure" statically (or strongly) checked parametric polymorphism, by Strachey's

subclassing

498 (typing based on subclassing, or subclass polymorphism), since only an object

997 with respect to representation (subclassing). An example of inclusion

1150 inheritance for subclassing (representation).

1164 OO languages, subclassing and dynamic binding provides for greater flexibility

suite

2026 Cooperative Frameworks consists of an integrated suite of

2485 Lane, Suite 203, Gaithersburg, Maryland 20878. $225.

2605 Turner, C. D. and D. J. Robson, "A Suite of Tools for the State-Based

2695 Quality Assured Software Engineering (938 Willowleaf Dr., Suite 2806,

superset

54 ECMAScript language. JavaScript is perhaps the best known prototype- based programming language, which employs cloning from prototypes rather than inheriting from a class. Another scripting language that takes this approach is Lua. Earlier versions of ActionScript (a partial superset of the ECMA-262 R3, otherwise known as ECMAScript) also used a prototype-based object model. Later versions of ActionScript incorporate a combination of classification and prototype-based object models based largely on the currently incomplete ECMA-262 R4 specification, which has its roots in an early JavaScript 2 Proposal. Microsoft's JScript.NET also includes a mash-up of object models based on the same proposal, and is also a superset of the ECMA-262 R3 specification.

1201 Signatures), Sather (originally Eiffel-based), and an Eiffel superset

1367 GEOS (GeoWorks', written in Object Assembler, OO superset of 8086)

template

61 Behavioral patterns : Chain-of-responsibility pattern, Command pattern, Interpreter pattern, Iterator pattern, Mediator pattern, Memento pattern, Observer pattern, State pattern, Strategy pattern, Template method pattern, Visitor pattern.

200 fields, methods and parents and any object can be used as a template

992 require explicit instantiation of its template functions, formal generic

1042 but a newer template function is incomparably preferable, as implied in

templates

990 Ada generics and C++ templates provide explicit syntactic generics. While

1181 templates), as any method matching a required signature is accepted,

1207 2.8) What Are Generics And Templates? (Typing - Object-Oriented Technology)

1210 Generics (or Templates in C++) refer to the ability to parameterize types

today

63 Both object-oriented programming and relational database management systems (RDBMSs) are extremely common in software today. Since relational databases don't store objects directly (though some RDBMSs have object-oriented features to approximate this), there is a general need to bridge the two worlds. The problem of bridging object-oriented programming accesses and data patterns with relational databases is known as Object-Relational impedance mismatch. There are a number of approaches to cope with this problem, but no general solution without downsides.[20] One of the most common approaches is object-relational mapping, as found in libraries like Java Data Objects and Ruby on Rails' ActiveRecord.

1271 3.4) What Are The Major Object-Oriented Programming Languages Today?

1742 today introduced a distributed-computing solution for building scalable,

2165 between new and legacy applications. DOME provides a solution today

tr-

2594 Technical Report TR-13

2607 TR-14

2618 Oriented Programs", Technical Report TR-2

2629 Technical Report TR-1

transparent

70 OOP was developed to increase the reusability and maintainability of source code. Transparent representation of the control flow had no priority and was meant to be handled by a compiler. With the increasing relevance of parallel hardware and multithreaded coding, developer transparent control flow becomes more important, something hard to achieve with OOP.

139 in Distributed Smalltalk which allows transparent, distributed, and migrating

2229 distributed data management transparent, so that the user never needs

understanding

9 An object-oriented program may thus be viewed as a collection of interacting objects, as opposed to the conventional model, in which a program is seen as a list of tasks (subroutines) to perform. In OOP, each object is capable of receiving messages, processing data, and sending messages to other objects. Each object can be viewed as an independent "machine" with a distinct role or responsibility. The actions (or "methods") on these objects. The terms "objects" and "oriented" in something like the modern sense of object- oriented programming seem to make their first appearance at MIT in the late 1950s and early 1960s. In the environment of the artificial intelligence group, as early as 1960, "object" could refer to identified items (LISP atoms) with properties (attributes); Alan Kay was later to cite a detailed understanding of LISP internals as a strong influence on his thinking in 1966.[3] Another early MIT example was Sketchpad created by Ivan Sutherland in 1960-61; in the glossary of the 1963 technical report based on his dissertation about Sketchpad, Sutherland defined notions of "object" and "instance" (with the class concept covered by "master" or "definition"), albeit specialized to graphical interaction. Also, an MIT ALGOL version, AED-0, linked data structures ("plexes", in that dialect) directly with procedures, prefiguring what were later termed "messages", "methods" and "member functions".

40 records are basis for understanding objects if function literals can be stored in fields (like in functional programming languages), but the actual calculi need be considerably more complex to incorporate essential features of OOP. Several extensions of System F<: that deal with mutable objects have been studied;[18] these allow both subtype polymorphism and parametric polymorphism (generics)

111 understanding of the problem domain and [Jacobson 92] provides a novel approach

711 "OOA is the challenge of understanding the problem domain, and then the

unizh

1698 > CS Dept. University of Zurich, Switzerland. maffeis@ifi.unizh.ch

1706 CS Dept. University of Zurich, Switzerland. maffeis@ifi.unizh.ch

1710 From: Silvano Maffeis <maffeis@ifi.unizh.ch>

1718 ftp.ifi.unizh.ch: pub

use-cases

112 to identifying objects through use-cases (scenarios), leading to a use-case

116 Use-Cases and Actors - Actors <--> Use-Cases <--> Object Model Objects

752 model (e.g. FUSION, Jacobson), scenarios (Rumbaugh), or use-cases (Jacobson).

van

1447 [van den Goor et.al., 1992]

1448 G. van den Goor, S. Hong and S. Brinkkemper,

1454 S. Hong, G. van den Goor, S. Brinkkemper, A Formal Approach to the

2489 Bezier, Boris, "Software Testing Techniques", 2nd edition, Van Nostrand

vb

16 More recently, a number of languages have emerged that are primarily object-oriented yet compatible with procedural methodology, such as Python and Ruby. Probably the most commercially important recent object-oriented languages are Visual Basic.NET (VB.NET) and C#, both designed for Microsoft's .NET platform, and Java, developed by Sun Microsystems. Both frameworks show the benefit of using OOP by creating an abstraction from implementation in their own way. VB.NET and C# support cross-language inheritance, allowing classes defined in one language to subclass classes defined in the other language. Developers usually compile Java to bytecode, allowing Java to run on any operating system for which a Java virtual machine is available. VB.NET and C# make use of the Strategy pattern to accomplish cross-language inheritance, whereas Java makes use of the Adapter pattern[citation needed].

47 Languages designed mainly for OO programming, but with some procedural elements. Examples: C++, C#, VB.NET, Java, Python.

volters

2009 From: Randy Volters <randy.volters@columbiasc.ncr.com>

2108 Randy Volters, Sr. Product Manager

2110 Email: Randy.Volters@ColumbiaSC.NCR.COM

wasserman

1418 Wasserman [Wasserman 90]

1444 Yourdon-Constantine SD, Martin information engineering design, Wasserman OOSD,

1467 Wasserman et al, Rumbaugh, Reenskaug et al, and Colbert.

wegner

554 These definitions are also found in [Booch 91, Ch2 and Wegner 87].

902 Author, Strachey, Cardelli and Wegner, Booch, Meyer, Stroustrup, and Rumbaugh.

927 ad-hoc. Cardelli and Wegner followup with another classification scheme,

983 in the subtype (subtype is subset of supertype). Cardelli and Wegner view

w's

562 from C+W's.

666 typically isn't recommended as a general OO practice (see section 1.15, C+W's

1004 ("bounded quantification" by C+W. C+W's parameters are subtype polymorphic

1012 perhaps IP could be further divided in C+W's above classification.]

adapter

16 More recently, a number of languages have emerged that are primarily object-oriented yet compatible with procedural methodology, such as Python and Ruby. Probably the most commercially important recent object-oriented languages are Visual Basic.NET (VB.NET) and C#, both designed for Microsoft's .NET platform, and Java, developed by Sun Microsystems. Both frameworks show the benefit of using OOP by creating an abstraction from implementation in their own way. VB.NET and C# support cross-language inheritance, allowing classes defined in one language to subclass classes defined in the other language. Developers usually compile Java to bytecode, allowing Java to run on any operating system for which a Java virtual machine is available. VB.NET and C# make use of the Strategy pattern to accomplish cross-language inheritance, whereas Java makes use of the Adapter pattern[citation needed].

33 Decoupling refers to careful controls that separate code modules from particular use cases, which increases code re-usability. A common use of decoupling in OOP is to polymorphically decouple the encapsulation (see Bridge pattern and Adapter pattern) - for example, using a method interface which an encapsulated object must satisfy, as opposed to using the object's class.

60 Structural patterns : Adapter pattern, Bridge pattern, Composite pattern, Decorator pattern, Facade pattern, Flyweight pattern, Proxy pattern

ad-hoc

927 ad-hoc. Cardelli and Wegner followup with another classification scheme,

931 of types; these types normally exhibit some common structure. Ad-hoc

936 ad-hoc polymorphism isn't (apparent polymorphism).

adoption

1530 The OMG adoption cycle includes Requests for Information and

1535 OMG Board of Directors makes a final determination for technology adoption.

1612 and the adoption of specifications.

advanced

787 * It does not provide for such methods as rapid prototyping or advanced

2412 advanced as rapidly as most computer-related technologies and is now a robust,

2518 To be Presented at the IBM Center for Advanced Studies Fall

agrawal

686 [See Agrawal 91, Chambers 92, Mugridge 91, and etc.].

1090 (such as found in [Agrawal 91] and [Chambers 92]).

1121 safe programs and dynamic typing providing multiple-polymorphism [Agrawal 91]

ai

76 Alexander Stepanov suggested that OOP provides a mathematically-limited viewpoint and called it "almost as much of a hoax as Artificial Intelligence. I have yet to see an interesting piece of code that comes from these OO people. In a sense, I am unfair to AI: I learned a lot of stuff from the MIT AI Lab crowd, they have done some really fundamental work....".

480 common in the AI domain, where semantic nets use inheritance to understand

aix

1642 IBM AIX, IBM MVS(port in progress), HP-UX, Macintosh, MS-Windows 3.1, NT,

1665 Available on AIX and OS

1996 IBM AIX C Set++ 4th Qtr

applied

90 "The term object was first formally applied in the Simula language, and

224 this view applied during OOA.

1243 to the delegating of responsibility and can be applied to inheritance. When a

architectures

12 In the 1970s, Kay's Smalltalk work had influenced the Lisp community to incorporate object- based techniques that were introduced to developers via the Lisp machine. Experimentation with various extensions to Lisp (like LOOPS and Flavors introducing multiple inheritance and mixins), eventually led to the Common Lisp Object System (CLOS, a part of the first standardized object-oriented programming language, ANSI Common Lisp), which integrates functional programming and object-oriented programming and allows extension via a Meta- object protocol. In the 1980s, there were a few attempts to design processor architectures that included hardware support for objects in memory but these were not successful. Examples include the Intel iAPX 432 and the Linn Smart Rekursiv.

1357 all the way down to to the machine (OO architectures are found at the bottom).

2087 architectures as a set of DLL and shared libraries

arrays

41 Attempts to find a consensus definition or theory behind objects have not proven very successful (however, see Abadi & Cardelli, A Theory of Objects[18] for formal definitions of many OOP concepts and constructs), and often diverge widely. For example, some definitions focus on mental activities, and some on program structuring. One of the simpler definitions is that OOP is the act of using "map" data structures or arrays that can contain functions and pointers to other maps, all with some syntactic and scoping sugar on top. Inheritance can be performed by cloning the maps (sometimes called "prototyping"). OBJECT:=>> Objects are the run time entities in an object-oriented system. They may represent a person, a place, a bank account, a table of data or any item that the program has to handle.

2307 resort to statically allocated arrays. This in turn leads to

2367 arrays and multiple inheritance). Intensive research [1] in garbage

articles

62 Main articles: Object-Relational impedance mismatch, Object-relational mapping, and Object database

2265 3.8.7) Books, Articles, And Literature (OMG

2439 to the Software section. Also a couple of articles added to the

associate

65 OOP can be used to associate real-world objects and processes with digital counterparts. However, not everyone agrees that OOP facilitates direct real-world mapping (see Negative Criticism section) or that real-world mapping is even a worthy goal; Bertrand Meyer argues in Object-Oriented Software Construction that a program is not a model of the world but a model of some part of the world; "Reality is a cousin twice removed". At the same time, some principal limitations of OOP had been noted. For example, the Circle-ellipse problem is difficult to handle using OOP's concept of inheritance.

193 classical object-oriented languages associate method, field and parent

194 definitions with classes (and only associate state and class with objects,

associations

523 should be associations and inheritance should be reserved for a single

763 analysis methodologies with such constructs as associations (E-R), functional

1826 for properties, life cycle, associations, event notification and naming.

assumptions

2309 the assumptions behind the chosen limits no longer apply. For

2359 taking a container as an argument need to know of or make assumptions

2381 Manual memory management must make assumptions about a program's order of

attribute

215 search for an attribute to a delegate, and is therefore more of a pure

281 "a group, set, or kind marked by common attributes or a common attribute; a

1244 derived class does not have a desired attribute, it "delegates" responsibility

automatic

10 Objects as a formal concept in programming were introduced in the 1960s in Simula 67, a major revision of Simula I, a programming language designed for discrete event simulation, created by Ole-Johan Dahl and Kristen Nygaard of the Norwegian Computing Center in Oslo. Simula 67 was influenced by SIMSCRIPT and Hoare's proposed "record classes". Simula introduced the notion of classes and instances or objects (as well as subclasses, virtual methods, coroutines, and discrete event simulation) as part of an explicit programming paradigm. The language also used automatic garbage collection that had been invented earlier for the functional programming language Lisp. Simula was used for physical modeling, such as models to study and improve the movement of ships and their content through cargo ports. The ideas of Simula 67 influenced many later languages, including Smalltalk, derivatives of LISP (CLOS), Object Pascal, and C++.

2679 *Automatic run-time error-checking on executables to enhance quality

2680 *Automatic memory leak detection on executables to optimize memory use

avoid

396 definition, or both) can avoid confusion about which inheritance scheme is

1194 also specify representation. Subtyping is therefore most useful to avoid

2302 5: In order to avoid problems 3 and 4, programmers may end up copying

behavioral

56 It is intuitive to assume that inheritance creates a semantic "is a" relationship, and thus to infer that objects instantiated from subclasses can always be safely used instead of those instantiated from the superclass. This intuition is unfortunately false in most OOP languages, in particular in all those that allow mutable objects. Subtype polymorphism as enforced by the type checker in OOP languages (with mutable objects) cannot guarantee behavioral subtyping in any context. Behavioral subtyping is undecidable in general, so it cannot be implemented by a program (compiler). Class or object hierarchies need to be carefully designed considering possible incorrect uses that cannot be detected syntactically. This issue is known as the Liskov substitution principle.

61 Behavioral patterns : Chain-of-responsibility pattern, Command pattern, Interpreter pattern, Iterator pattern, Mediator pattern, Memento pattern, Observer pattern, State pattern, Strategy pattern, Template method pattern, Visitor pattern.

benefit

16 More recently, a number of languages have emerged that are primarily object-oriented yet compatible with procedural methodology, such as Python and Ruby. Probably the most commercially important recent object-oriented languages are Visual Basic.NET (VB.NET) and C#, both designed for Microsoft's .NET platform, and Java, developed by Sun Microsystems. Both frameworks show the benefit of using OOP by creating an abstraction from implementation in their own way. VB.NET and C# support cross-language inheritance, allowing classes defined in one language to subclass classes defined in the other language. Developers usually compile Java to bytecode, allowing Java to run on any operating system for which a Java virtual machine is available. VB.NET and C# make use of the Strategy pattern to accomplish cross-language inheritance, whereas Java makes use of the Adapter pattern[citation needed].

1097 and loose coupling. Another benefit is that code complexity increases not

1754 business benefit, and offers worldwide support and training programs,

body

25 Open recursion – a special variable (syntactically it may be a keyword), usually called this or self, that allows a method body to invoke another method body of the same object. This variable is late-bound; it allows a method defined in one class to invoke another method that is defined later, in some subclass thereof.

1561 end-user or vendor, can become a member of this body. Administrative

boehm

791 software development. [Boehm 86] presents a seminal spiral life-cycle model

805 [Boehm, 1988]

2338 [3] "Garbage Collection in an Uncooperative Environment" by Boehm and

booch's

284 [Booch's definition in the context of OOD]

1014 > Booch's Definition [Booch 91, p. 517]:

1020 [The author notes Booch's definition above is clearly in the context of

bound

497 CLOS, Eiffel, etc.) based on inheritance when type and class are bound together

1077 lookup is performed (bound) at run-time (dynamically). This is often desired

1162 performed on that type are well defined (statically bound) and providing for

bridge

33 Decoupling refers to careful controls that separate code modules from particular use cases, which increases code re-usability. A common use of decoupling in OOP is to polymorphically decouple the encapsulation (see Bridge pattern and Adapter pattern) - for example, using a method interface which an encapsulated object must satisfy, as opposed to using the object's class.

60 Structural patterns : Adapter pattern, Bridge pattern, Composite pattern, Decorator pattern, Facade pattern, Flyweight pattern, Proxy pattern

63 Both object-oriented programming and relational database management systems (RDBMSs) are extremely common in software today. Since relational databases don't store objects directly (though some RDBMSs have object-oriented features to approximate this), there is a general need to bridge the two worlds. The problem of bridging object-oriented programming accesses and data patterns with relational databases is known as Object-Relational impedance mismatch. There are a number of approaches to cope with this problem, but no general solution without downsides.[20] One of the most common approaches is object-relational mapping, as found in libraries like Java Data Objects and Ruby on Rails' ActiveRecord.

brinkkemper

1448 G. van den Goor, S. Hong and S. Brinkkemper,

1454 S. Hong, G. van den Goor, S. Brinkkemper, A Formal Approach to the

1489 Sjaak Brinkkemper (sjbr@cs.utwente.nl), which we will forward to the

bugs

4 Objects are used in software development to implement abstract data structures, by bringing together the data components with the procedures that manipulate them. Objects in object- oriented programming are key in the concept of inheritance; thereby improving program reliability[attribution needed], simplification of software maintenance[attribution needed], the management of libraries, and the division of work in programmer teams. Object-oriented programming languages are generally designed to exploit and enforce these potential advantages of the object model. Objects can also make it possible to handle very disparate objects by the same piece of code, as long as they all have the proper method. Simple, non-OOP programs may be one "long" list of statements (or commands). More complex programs will often group smaller sections of these statements into functions or subroutines each of which might perform a particular task. With designs of this sort, it is common for some of the program's data to be 'global', i.e. accessible from any part of the program. As programs grow in size, allowing any function to modify any piece of data means that bugs can have wide-reaching effects.

2290 1: Bugs due to errors in storage deallocation are very hard to find,

2591 Theilen, David. "No Bugs. Delivering error free code in C and C++.",

capabilities

57 Design Patterns: Elements of Reusable Object-Oriented Software is an influential book published in 1995 by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, sometimes casually called the "Gang of Four". Along with exploring the capabilities and pitfalls of object-oriented programming, it describes 23 common programming problems and patterns for solving them. As of April 2007, the book was in its 36th printing.

225 1 level systems therefore provide the most flexible and powerful capabilities.

2194 - Full recovery capabilities

capability-based

134 based, capability-based, and simple static-based approaches. Descriptor-

136 do the capability-based approaches which are typically found in object-

1359 be passed freely between machines. They are typically capability-based since

careful

33 Decoupling refers to careful controls that separate code modules from particular use cases, which increases code re-usability. A common use of decoupling in OOP is to polymorphically decouple the encapsulation (see Bridge pattern and Adapter pattern) - for example, using a method interface which an encapsulated object must satisfy, as opposed to using the object's class.

1102 Yes (but be careful of context). To use C++ terminology, an object (not

1182 calling for careful matching of actual and formal generic parameters. The

categorization

290 design: classical categorization (common properties), conceptual clustering

481 the world by using classes and concepts for generalization and categorization,

1133 See section 3.4 for a categorization of common OO languages by type system.

cecil

219 [Chambers 93] as a part of his Cecil language. These classes will only be

624 [Chambers 93] discusses multi-methods in his new OO language, Cecil.

1301 Cecil

center

10 Objects as a formal concept in programming were introduced in the 1960s in Simula 67, a major revision of Simula I, a programming language designed for discrete event simulation, created by Ole-Johan Dahl and Kristen Nygaard of the Norwegian Computing Center in Oslo. Simula 67 was influenced by SIMSCRIPT and Hoare's proposed "record classes". Simula introduced the notion of classes and instances or objects (as well as subclasses, virtual methods, coroutines, and discrete event simulation) as part of an explicit programming paradigm. The language also used automatic garbage collection that had been invented earlier for the functional programming language Lisp. Simula was used for physical modeling, such as models to study and improve the movement of ships and their content through cargo ports. The ideas of Simula 67 influenced many later languages, including Smalltalk, derivatives of LISP (CLOS), Object Pascal, and C++.

1450 Center of Telematics and Information Technology, University of Twente,

2518 To be Presented at the IBM Center for Advanced Studies Fall

chapter

2487 includes one chapter on testing OO software and one chapter

2548 oriented code and has a chapter on how it was done at Stepstone

checked

142 dynamic typing (checked downcasting) similar to those introduced by Eiffel

611 (e.g. C++ and Eiffel) is really in between (checked function pointers).

1144 "pure" statically (or strongly) checked parametric polymorphism, by Strachey's

choices

1366 Choices (research OS, UofI, C++, supports SVR4, See Appendix E, Papers)

1392 It reviews other designs such as Clouds and Choices which where written

1393 It reviews other designs such as Clouds and Choices which where written

choose

440 which to choose becomes an issue. Eiffel forces derived classes to rename

2151 develop applications on any platform they choose and then easily

2419 sometimes choose treadmill collectors [4] over hand-management because of its

chosen

622 (messages) equivalent. Functional syntax was chosen "in order to minimize the

1322 programs, an equivalence that would be lost if an alternative were chosen, as

2309 the assumptions behind the chosen limits no longer apply. For

class-based

19 Not all of these concepts are to be found in all object-oriented programming languages. For example, object-oriented programming that uses classes is sometimes called class-based programming, while prototype-based programming does not typically use classes. As a result, a significantly different yet analogous terminology is used to define the concepts of object and instance.

1009 although it was abandoned in favor of a single class-based approach for

1257 of delegation in a class-based language [Garfinkel 93].

cloning

41 Attempts to find a consensus definition or theory behind objects have not proven very successful (however, see Abadi & Cardelli, A Theory of Objects[18] for formal definitions of many OOP concepts and constructs), and often diverge widely. For example, some definitions focus on mental activities, and some on program structuring. One of the simpler definitions is that OOP is the act of using "map" data structures or arrays that can contain functions and pointers to other maps, all with some syntactic and scoping sugar on top. Inheritance can be performed by cloning the maps (sometimes called "prototyping"). OBJECT:=>> Objects are the run time entities in an object-oriented system. They may represent a person, a place, a bank account, a table of data or any item that the program has to handle.

54 ECMAScript language. JavaScript is perhaps the best known prototype- based programming language, which employs cloning from prototypes rather than inheriting from a class. Another scripting language that takes this approach is Lua. Earlier versions of ActionScript (a partial superset of the ECMA-262 R3, otherwise known as ECMAScript) also used a prototype-based object model. Later versions of ActionScript incorporate a combination of classification and prototype-based object models based largely on the currently incomplete ECMA-262 R4 specification, which has its roots in an early JavaScript 2 Proposal. Microsoft's JScript.NET also includes a mash-up of object models based on the same proposal, and is also a superset of the ECMA-262 R3 specification.

385 don't specify new state by default (to do so requires cloning), C-based (C++,

cobol

48 Languages that are historically procedural languages, but have been extended with some OO features. Examples: Visual Basic (derived from BASIC), Fortran 2003, Perl, COBOL 2002, PHP, ABAP.

1273 Add 1 To Cobol giving Cobol with Objects.

colbert

1404 Colbert [Colbert 89]

1467 Wasserman et al, Rumbaugh, Reenskaug et al, and Colbert.

coleman

1408 FUSION [Coleman 94]

1431 Arnold, P., Bodoff, S., Coleman, D., Gilchrist, H., Hayes, F., An Evolution of

1474 Coleman, D. - Object-oriented development, the Fusion method, 1994.

collections

222 as collections of objects view, which is the same as the types as sets of

1853 paradigm for constructing complex applications out of collections of

2646 collections, or numbers. It is not suitable for testing user interface

collector

2295 programmer has to write an application-specific garbage collector.

2363 man's garbage collector", are usually misguided. Reference counting has worse

2415 commercially supported garbage collector that can transparently and

commands

1 Object-oriented programming (OOP) is a programming paradigm using "objects" – data structures consisting of data fields and methods together with their interactions – to design applications and computer programs. Programming techniques may include features such as data abstraction, encapsulation, messaging, modularity, polymorphism, and inheritance. Many modern programming languages now support OOP, at least as an option. In computer science, an object is any entity that can be manipulated by the commands of a programming language, such as a value, variable, function, or data structure. (With the later introduction of object-oriented programming the same word, "object", refers to a particular instance of a class)

4 Objects are used in software development to implement abstract data structures, by bringing together the data components with the procedures that manipulate them. Objects in object- oriented programming are key in the concept of inheritance; thereby improving program reliability[attribution needed], simplification of software maintenance[attribution needed], the management of libraries, and the division of work in programmer teams. Object-oriented programming languages are generally designed to exploit and enforce these potential advantages of the object model. Objects can also make it possible to handle very disparate objects by the same piece of code, as long as they all have the proper method. Simple, non-OOP programs may be one "long" list of statements (or commands). More complex programs will often group smaller sections of these statements into functions or subroutines each of which might perform a particular task. With designs of this sort, it is common for some of the program's data to be 'global', i.e. accessible from any part of the program. As programs grow in size, allowing any function to modify any piece of data means that bugs can have wide-reaching effects.

1568 Send the following commands in a letter to the mail server.

compatibility

15 Object-oriented features have been added to many existing languages during that time, including Ada, BASIC, Fortran, Pas cal, and others. Adding these features to languages that were not initially designed for them often led to problems with compatibility and maintainability of code.

380 compatibility (see section 2.7).

1166 used for assignment compatibility forcing an assigned object to inherit

compile

16 More recently, a number of languages have emerged that are primarily object-oriented yet compatible with procedural methodology, such as Python and Ruby. Probably the most commercially important recent object-oriented languages are Visual Basic.NET (VB.NET) and C#, both designed for Microsoft's .NET platform, and Java, developed by Sun Microsystems. Both frameworks show the benefit of using OOP by creating an abstraction from implementation in their own way. VB.NET and C# support cross-language inheritance, allowing classes defined in one language to subclass classes defined in the other language. Developers usually compile Java to bytecode, allowing Java to run on any operating system for which a Java virtual machine is available. VB.NET and C# make use of the Strategy pattern to accomplish cross-language inheritance, whereas Java makes use of the Adapter pattern[citation needed].

1669 Object RPC compatible with OMG CORBA 1.2 spec (will compile OMG IDL and

2709 one. This is a beta release and _should_ compile on any POSIX.1 system.

compilers

298 must have a class (in classical OO anyway). Compilers provide an easy way to

365 quality compilers), providing a direct program interface to the system.

2310 instance many C compilers limit expression nesting, identifier

compliance

1692 - an open system, standards compliance, object-oriented architecture,

1857 not CORBA compliant, but will be brought to compliance during 3Q93.

2156 - standards compliance

comprehensive

2028 - defines and implements a comprehensive enterprise

2148 The DOME Software System is comprehensive middleware that provides

2662 Cantata provides comprehensive facilities for all forms of

conceptual

290 design: classical categorization (common properties), conceptual clustering

291 (conceptual descriptions), and prototype theory (resemblance to an exemplar).

815 the process is often referred to as seamless, meaning there is no conceptual

configuration

2074 - Network Configuration Tools - simplifies creation of

2261 Configuration Requirements

2264 determine configuration requirements for particular computer systems.

conflict

441 parent members that conflict. Self prioritizes parents. CLOS merges member

443 the earlier flavors. C++ declares an error iff a conflict arises, but a

518 the issues of shared bases and member conflict resolution. But most modern

considerably

40 records are basis for understanding objects if function literals can be stored in fields (like in functional programming languages), but the actual calculi need be considerably more complex to incorporate essential features of OOP. Several extensions of System F<: that deal with mutable objects have been studied;[18] these allow both subtype polymorphism and parametric polymorphism (generics)

1099 methods reduces program complexity considerably, even further that removing

2269 This section is expected to grow considerably in the future.

consisting

1 Object-oriented programming (OOP) is a programming paradigm using "objects" – data structures consisting of data fields and methods together with their interactions – to design applications and computer programs. Programming techniques may include features such as data abstraction, encapsulation, messaging, modularity, polymorphism, and inheritance. Many modern programming languages now support OOP, at least as an option. In computer science, an object is any entity that can be manipulated by the commands of a programming language, such as a value, variable, function, or data structure. (With the later introduction of object-oriented programming the same word, "object", refers to a particular instance of a class)

1678 (1) C++ ORB toolkit consisting of over 300 C++ classes and runtime libraries

2039 (1) C++ ORB toolkit consisting of over 300 C++ classes and

consists

755 and Constantine. Their complete approach ([Shlaer 88, 92]) consists of

1773 HP ORB Plus consists of several components: the Distributed Object

2026 Cooperative Frameworks consists of an integrated suite of

constraints

919 object (possibly satisfying some implicit or explicit type constraints

1148 parametric polymorphism without static constraints (by Strachey's definition).

1174 satisfy the operations or type constraints of a polymorphic object (subtype

construct

5 In contrast, the object-oriented approach encourages the programmer to place data where it is not directly accessible by the rest of the program. Instead, the data is accessed by calling specially written functions, commonly called methods, which are either bundled in with the data or inherited from "class objects." These act as the intermediaries for retrieving or modifying the data they control. The programming construct that combines data with a set of methods for accessing and managing those data is called an object. The practice of using subroutines to examine or modify certain kinds of data, however, was also quite commonly used in non-OOP modular programming, well before the widespread use of object-oriented programming.

190 languages. Since there is no separate class construct in these languages, and

1095 program complexity by replacing a nested construct (switch statement) with a

container

2359 taking a container as an argument need to know of or make assumptions

2361 container.

2393 management schemes. For example, there are common container libraries using

continue

79 Richard Mansfield, author and former editor of COMPUTE! magazine, states that "like countless other intellectual fads over the years ("relevance", communism, "modernism", and so on—history is littered with them), OOP will be with us until eventually reality asserts itself. But considering how OOP currently pervades both universities and workplaces, OOP may well prove to be a durable delusion. Entire generations of indoctrinated programmers continue to march out of the academy, committed to OOP and nothing but OOP for the rest of their lives."[38] He also is quoted as saying "OOP is to writing a program, what going through airport security is to flying".

1459 may continue to request hard copies. We are currently extending the paper

1546 software interfaces; products which offer these interfaces continue to be

contrast

5 In contrast, the object-oriented approach encourages the programmer to place data where it is not directly accessible by the rest of the program. Instead, the data is accessed by calling specially written functions, commonly called methods, which are either bundled in with the data or inherited from "class objects." These act as the intermediaries for retrieving or modifying the data they control. The programming construct that combines data with a set of methods for accessing and managing those data is called an object. The practice of using subroutines to examine or modify certain kinds of data, however, was also quite commonly used in non-OOP modular programming, well before the widespread use of object-oriented programming.

8 Object-oriented programming has roots that can be traced to the 1960s. As hardware and software became increasingly complex, manageability often became a concern. Researchers studied ways to maintain software quality and developed object-oriented programming in part to address common problems by strongly emphasizing discrete, reusable units of programming logic[citation needed]. The technology focuses on data rather than processes, with programs composed of self-sufficient modules ("classes"), each instance of which ("objects") contains all the information needed to manipulate its own data structure ("members"). This is in contrast to the existing modular programming that had been dominant for many years that focused on the function of a module, rather than specifically the data, but equally provided for code reuse, and self-sufficient reusable units of programming logic, enabling collaboration through the use of linked modules (subroutines). This more conventional approach, which still persists, tends to consider data and behavior separately.

66 However, Niklaus Wirth (who popularized the adage now known as Wirth's law: "Software is getting slower more rapidly than hardware becomes faster") said of OOP in his paper, "Good Ideas through the Looking Glass", "This paradigm closely reflects the structure of systems 'in the real world', and it is therefore well suited to model complex systems with complex behaviours" (contrast KISS principle).

contrasted

71 Responsibility-driven design defines classes in terms of a contract, that is, a class should be defined around a responsibility and the information that it shares. This is contrasted by Wirfs-Brock and Wilkerson with data-driven design, where classes are defined around the data-structures that must be held. The authors hold that responsibility-driven design is preferable.

985 supertype objects, or an extensional view), as contrasted with a feature based

1186 contrasted with greater power.

'cooperative

1677 > NCR 'Cooperative Frameworks' -- a Distributed Object Foundation

2008 CORBA Implementation Descriptions: NCR 'Cooperative Frameworks' -- a Distributed Object Foundation

2013 OF 'Cooperative Frameworks' --

copied

2 In the domain of object-oriented programming an object is usually taken to mean an ephemeral compilation of attributes (object elements) and behaviors (methods or subroutines) encapsulating an entity. In this way, while primitive or simple data types are still just single pieces of information, object-oriented objects are complex types that have multiple pieces of information and specific properties (or attributes). Instead of merely being assigned a value, (like int =10), objects have to be "constructed". In the real world, if a Ford Focus is an "object" - an instance of the car class, its physical properties and its function to drive would have been individually specified. Once the properties of the Ford Focus "object" had been specified into the form of the car class, it can be endlessly copied to create identical objects that look and function in just the same way. As an alternative example, animal is a superclass of primate and primate is a superclass of human. Individuals such as Joe Bloggs or John Doe would be particular examples or 'objects' of the human class, and consequently possess all the characteristics of the human class (and of the primate and animal superclasses as well).

494 This avoids code redundancy, since code would have to be copied and modified

2403 copied by value.

correct

651 The addition expression above will invoke the correct "+" function based on the

2465 confidence, they must be blatantly correct. The classes must be easily

2469 constructed in a way which is recognized as correct and the modules

cost

731 be built so that the cost of the domain analysis can be amortized over the

732 cost of all the systems.

2260 nominal additional cost.

coupled

162 roughly equivalent to a loosely coupled variant record, with derived classes

635 single, highly cohesive and loosely coupled functions to be defined. This is

1196 for loosely coupled modules and in distributed programming [Black 87].

creates

56 It is intuitive to assume that inheritance creates a semantic "is a" relationship, and thus to infer that objects instantiated from subclasses can always be safely used instead of those instantiated from the superclass. This intuition is unfortunately false in most OOP languages, in particular in all those that allow mutable objects. Subtype polymorphism as enforced by the type checker in OOP languages (with mutable objects) cannot guarantee behavioral subtyping in any context. Behavioral subtyping is undecidable in general, so it cannot be implemented by a program (compiler). Class or object hierarchies need to be carefully designed considering possible incorrect uses that cannot be detected syntactically. This issue is known as the Liskov substitution principle.

392 causes an ambiguity error iff more than one parent has match, CLOS creates

966 where each instantiation creates a specialized version of the code allowing

current

1397 3.7) What Are The Current Object-Oriented Methodologies?

1468 Wirfs-Brock, R.J. and Johnson, R.E., "Surveying Current Research in Object-

1593 newsletter. First Class provides current information on Object

david

1461 Monarchi, David and Puhr, Gretchen I. A Research Typology for Object-Oriented

2587 Taylor, David. "A quality-first program for object technology", Object

2591 Theilen, David. "No Bugs. Delivering error free code in C and C++.",

dbms

126 Impl. Hiding - Distr. Arch., specific DBMS, OS

1325 store with a DBMS.

2223 The DOME Data Manager is a complete relational DBMS engine that

deallocation

2290 1: Bugs due to errors in storage deallocation are very hard to find,

2300 4: Libraries with different deallocation strategies are often

2323 storage deallocation is probably as high as GC. GC algorithms are

debugging

174 injection rates during maintanance and debugging).

2570 Purchase, Jan A. and Russel L. Winder, "Debugging tools for

2677 code. Also does some memory debugging (similar to Purify) and regression

defect

173 variants to be added without modifying client code (which causes higher defect

489 increases in productivity and reductions in defect rates (program errors),

843 Level 5: Optimizing: Emphasis on defect prevention and optimizing

degree

45 Simula (1967) is generally accepted as the first language to have the primary features of an object-oriented language. It was created for making simulation programs, in which what came to be called objects were the most important information representation. Smalltalk (1972 to 1980) is arguably the canonical example, and the one with which much of the theory of object-oriented programming was developed. Concerning the degree of object orientation, following distinction can be made:

282 group division, distinction, or rating based on quality, degree of

1262 where reuse occurs at a finer degree of granularity - method and instance

delegates

192 Objects contain fields, methods and delegates (pseudo parents), whereas

1244 derived class does not have a desired attribute, it "delegates" responsibility

1248 it couldn't handle to objects that potentially could (its delegates). Any

demonstrated

1963 UX. IONA demonstrated a version of Orbix for Microsoft Windows 3.1 at

1967 demonstrated interoperability between IONA's Orbix running on Microsoft

2080 Frameworks has been demonstrated on Novell NetWare v3.11,

den

1447 [van den Goor et.al., 1992]

1448 G. van den Goor, S. Hong and S. Brinkkemper,

1454 S. Hong, G. van den Goor, S. Brinkkemper, A Formal Approach to the

deployment

1755 ranging from analysis and design to deployment.

1810 -- easier deployment, with the ability to run multiple HP

1815 -- run-time version, for full production deployment; and

designers

620 imply a functional prefix notation, although the CLOS designers (who coined the

741 objects, and kits [frameworks]. OORA analysts and OOD designers will

886 BETA a followup to Simula (by its original designers).

detailed

9 An object-oriented program may thus be viewed as a collection of interacting objects, as opposed to the conventional model, in which a program is seen as a list of tasks (subroutines) to perform. In OOP, each object is capable of receiving messages, processing data, and sending messages to other objects. Each object can be viewed as an independent "machine" with a distinct role or responsibility. The actions (or "methods") on these objects. The terms "objects" and "oriented" in something like the modern sense of object- oriented programming seem to make their first appearance at MIT in the late 1950s and early 1960s. In the environment of the artificial intelligence group, as early as 1960, "object" could refer to identified items (LISP atoms) with properties (attributes); Alan Kay was later to cite a detailed understanding of LISP internals as a strong influence on his thinking in 1966.[3] Another early MIT example was Sketchpad created by Ivan Sutherland in 1960-61; in the glossary of the 1963 technical report based on his dissertation about Sketchpad, Sutherland defined notions of "object" and "instance" (with the class concept covered by "master" or "definition"), albeit specialized to graphical interaction. Also, an MIT ALGOL version, AED-0, linked data structures ("plexes", in that dialect) directly with procedures, prefiguring what were later termed "messages", "methods" and "member functions".

1531 Proposals, requesting detailed technical and commercial availability

1667 a detailed review.

developing

231 used when developing an overall program structure, that each component of a

1603 The members of the OMG have a shared goal of developing and using

1762 reduces the complexity of developing distributed applications so programmers

difficult

65 OOP can be used to associate real-world objects and processes with digital counterparts. However, not everyone agrees that OOP facilitates direct real-world mapping (see Negative Criticism section) or that real-world mapping is even a worthy goal; Bertrand Meyer argues in Object-Oriented Software Construction that a program is not a model of the world but a model of some part of the world; "Reality is a cousin twice removed". At the same time, some principal limitations of OOP had been noted. For example, the Circle-ellipse problem is difficult to handle using OOP's concept of inheritance.

75 Christopher J. Date stated that critical comparison of OOP to other technologies, relational in particular, is difficult because of lack of an agreed-upon and rigorous definition of OOP. Date and Darwen propose a theoretical foundation on OOP that uses OOP as a kind of customizable type system to support RDBMS.

2406 management strategies are difficult to use with each other.

direct

65 OOP can be used to associate real-world objects and processes with digital counterparts. However, not everyone agrees that OOP facilitates direct real-world mapping (see Negative Criticism section) or that real-world mapping is even a worthy goal; Bertrand Meyer argues in Object-Oriented Software Construction that a program is not a model of the world but a model of some part of the world; "Reality is a cousin twice removed". At the same time, some principal limitations of OOP had been noted. For example, the Circle-ellipse problem is difficult to handle using OOP's concept of inheritance.

365 quality compilers), providing a direct program interface to the system.

2484 direct from Berard Software Engineering, Ltd., 902 Wind River

director

1353 ODMG Executive Director

1497 Contact Person: Richard Soley (technical director) soley@omg.com

1501 Vice President & Technical Director

discrete

8 Object-oriented programming has roots that can be traced to the 1960s. As hardware and software became increasingly complex, manageability often became a concern. Researchers studied ways to maintain software quality and developed object-oriented programming in part to address common problems by strongly emphasizing discrete, reusable units of programming logic[citation needed]. The technology focuses on data rather than processes, with programs composed of self-sufficient modules ("classes"), each instance of which ("objects") contains all the information needed to manipulate its own data structure ("members"). This is in contrast to the existing modular programming that had been dominant for many years that focused on the function of a module, rather than specifically the data, but equally provided for code reuse, and self-sufficient reusable units of programming logic, enabling collaboration through the use of linked modules (subroutines). This more conventional approach, which still persists, tends to consider data and behavior separately.

10 Objects as a formal concept in programming were introduced in the 1960s in Simula 67, a major revision of Simula I, a programming language designed for discrete event simulation, created by Ole-Johan Dahl and Kristen Nygaard of the Norwegian Computing Center in Oslo. Simula 67 was influenced by SIMSCRIPT and Hoare's proposed "record classes". Simula introduced the notion of classes and instances or objects (as well as subclasses, virtual methods, coroutines, and discrete event simulation) as part of an explicit programming paradigm. The language also used automatic garbage collection that had been invented earlier for the functional programming language Lisp. Simula was used for physical modeling, such as models to study and improve the movement of ships and their content through cargo ports. The ideas of Simula 67 influenced many later languages, including Smalltalk, derivatives of LISP (CLOS), Object Pascal, and C++.

discussions

401 [Cardelli 85]). It would be more judicious to have discussions on how

779 See [Humphrey 89] and [Yourdon 92] for a few of many discussions on software

863 See also [Yourdon 92], [Wilkie 93], and [Booch 94] for discussions on this

distinction

45 Simula (1967) is generally accepted as the first language to have the primary features of an object-oriented language. It was created for making simulation programs, in which what came to be called objects were the most important information representation. Smalltalk (1972 to 1980) is arguably the canonical example, and the one with which much of the theory of object-oriented programming was developed. Concerning the degree of object orientation, following distinction can be made:

282 group division, distinction, or rating based on quality, degree of

941 but separated to draw a clear distinction between the two forms, which are then

distribute

1795 retailers can distribute to end users throughout headquarters, all chain

2138 and file systems; access and distribute data; guarantee system

2152 distribute them across heterogeneous environments throughout the

divided

926 definitions of polymorphism, as divided into two major forms, parametric and

940 divided into parametric and inclusion polymorphism, which are closely related,

1012 perhaps IP could be further divided in C+W's above classification.]

documentation

846 CMM documentation is available online from: http:

2258 execute DOME plus PostScriptTM versions of DOME documentation.

2259 Hardcopy versions of all DOME documentation are available for a

doe

2 In the domain of object-oriented programming an object is usually taken to mean an ephemeral compilation of attributes (object elements) and behaviors (methods or subroutines) encapsulating an entity. In this way, while primitive or simple data types are still just single pieces of information, object-oriented objects are complex types that have multiple pieces of information and specific properties (or attributes). Instead of merely being assigned a value, (like int =10), objects have to be "constructed". In the real world, if a Ford Focus is an "object" - an instance of the car class, its physical properties and its function to drive would have been individually specified. Once the properties of the Ford Focus "object" had been specified into the form of the car class, it can be endlessly copied to create identical objects that look and function in just the same way. As an alternative example, animal is a superclass of primate and primate is a superclass of human. Individuals such as Joe Bloggs or John Doe would be particular examples or 'objects' of the human class, and consequently possess all the characteristics of the human class (and of the primate and animal superclasses as well).

1696 > Sun DOE

1968 Windows 3.1 and SunSoft's Distributed Objects Everywhere (DOE) on Solaris.

doug

1352 Doug Barry

2433 [This entry was donated by Doug Shaker and is certainly a FAQ]

2450 - Doug Shaker

dublin

1675 > IONA Technologies, Dublin Orbix, info@iona.ie

1933 Dublin 4

1975 Dublin 4

ecma-

54 ECMAScript language. JavaScript is perhaps the best known prototype- based programming language, which employs cloning from prototypes rather than inheriting from a class. Another scripting language that takes this approach is Lua. Earlier versions of ActionScript (a partial superset of the ECMA-262 R3, otherwise known as ECMAScript) also used a prototype-based object model. Later versions of ActionScript incorporate a combination of classification and prototype-based object models based largely on the currently incomplete ECMA-262 R4 specification, which has its roots in an early JavaScript 2 Proposal. Microsoft's JScript.NET also includes a mash-up of object models based on the same proposal, and is also a superset of the ECMA-262 R3 specification.

edward

2479 Berard, Edward. Essays on Object-Oriented Software Engineering.

2483 Berard, Edward. Project Management Handbook. Must be purchased

2527 Klimas, Edward "Quality Assurance Issues for Smalltalk Based Applications",

efficient

21 Dynamic dispatch – when a method is invoked on an object, the object itself determines what code gets executed by looking up the method at run time in a table associated with the object. This feature distinguishes an object from an abstract data type (or module), which has a fixed (static) implementation of the operations for all instances. It is a programming methodology that gives modular component development while at the same time being very efficient.

662 Why do multi-methods allow open access to parameters? It allows efficient

1123 Static typing is more efficient and reliable, but loses power. Typical

embedded

147 pointer (such as void* in C++) and an embedded dynamic typing scheme are used

660 dominate and double dispatch can be suffered, or an embedded dynamic typing

1886 suitable for use in large scale commercial systems and embedded

encapsulate

232 program should encapsulate or hide a single design decision... The interface

2362 Attempts to encapsulate memory management with reference counting, the "poor

2377 counting to encapsulate copy-on-write memory management. However, this only

equivalence

890 equivalence" with the RW than other methodologies), a consistent and seamless

1321 as well as the ability to have a strong equivalence with object-oriented

1322 programs, an equivalence that would be lost if an alternative were chosen, as

errors

489 increases in productivity and reductions in defect rates (program errors),

2290 1: Bugs due to errors in storage deallocation are very hard to find,

2539 leads to errors in large designs. Compile-coupling

essential

40 records are basis for understanding objects if function literals can be stored in fields (like in functional programming languages), but the actual calculi need be considerably more complex to incorporate essential features of OOP. Several extensions of System F<: that deal with mutable objects have been studied;[18] these allow both subtype polymorphism and parametric polymorphism (generics)

229 details of an object that do not contribute to its essential characteristics."

2149 all of the essential services necessary to unify distributed

excellent

50 Languages with abstract data type support, but not all features of object-orientation, sometimes called object-based languages. Examples: Modula-2 (with excellent encapsulation and information hiding), Pliant, CLU.

2277 There are two entries on garbage collection, the first is an excellent entry

2333 This is an excellent summary of the state of the art in GC algorithms. This

exception

195 although vtables of function pointers for dynamic binding are an exception).

600 the method operates on. An exception exists with C++'s static member functions

2210 - Platform independent time services and exception handling

executed

21 Dynamic dispatch – when a method is invoked on an object, the object itself determines what code gets executed by looking up the method at run time in a table associated with the object. This feature distinguishes an object from an abstract data type (or module), which has a fixed (static) implementation of the operations for all instances. It is a programming methodology that gives modular component development while at the same time being very efficient.

537 is executed overriding the base class method, if any. Overriding in Simula

2681 *Graphical test coverage to highlight any code not executed during test runs

expected

1808 VisualWorks 2.0 is released (expected within two months.)

1860 the Smalltalk and Objective-C language interfaces is expected in June.

2269 This section is expected to grow considerably in the future.

extensional

277 extensional view, which may begin the analysis process).

985 supertype objects, or an extensional view), as contrasted with a feature based

988 extensional view and set union with an intensional view. Details are left as

extensions

12 In the 1970s, Kay's Smalltalk work had influenced the Lisp community to incorporate object- based techniques that were introduced to developers via the Lisp machine. Experimentation with various extensions to Lisp (like LOOPS and Flavors introducing multiple inheritance and mixins), eventually led to the Common Lisp Object System (CLOS, a part of the first standardized object-oriented programming language, ANSI Common Lisp), which integrates functional programming and object-oriented programming and allows extension via a Meta- object protocol. In the 1980s, there were a few attempts to design processor architectures that included hardware support for objects in memory but these were not successful. Examples include the Intel iAPX 432 and the Linn Smart Rekursiv.

40 records are basis for understanding objects if function literals can be stored in fields (like in functional programming languages), but the actual calculi need be considerably more complex to incorporate essential features of OOP. Several extensions of System F<: that deal with mutable objects have been studied;[18] these allow both subtype polymorphism and parametric polymorphism (generics)

1782 System Object Model with extensions for distribution. This integration will

failure

1713 Its a toolkit for building failure resilient, distributed applications

2308 arbitrary restrictions on input data which can cause failure when

2365 include failure to reclaim cycles, inability to handle stack and static

faqs

1314 Refs to be included in future FAQs.

1355 Refs to be included in future FAQs. See also Appendix E.

1428 Summaries and comparisons will be provided in future FAQs. Suggestions for

feature

21 Dynamic dispatch – when a method is invoked on an object, the object itself determines what code gets executed by looking up the method at run time in a table associated with the object. This feature distinguishes an object from an abstract data type (or module), which has a fixed (static) implementation of the operations for all instances. It is a programming methodology that gives modular component development while at the same time being very efficient.

510 The former is a kind of language dependent feature commonly found in object-

985 supertype objects, or an extensional view), as contrasted with a feature based

finer

475 default. This allows a finer granularity of control and consistent name

781 Process Models for finer grained analysis and design in the Defined Process

1262 where reuse occurs at a finer degree of granularity - method and instance

flexibility

1139 flexibility than dynamic typing and the same applies to ML (although see the

1164 OO languages, subclassing and dynamic binding provides for greater flexibility

1896 environment. This provides great flexibility since new classes

focuses

8 Object-oriented programming has roots that can be traced to the 1960s. As hardware and software became increasingly complex, manageability often became a concern. Researchers studied ways to maintain software quality and developed object-oriented programming in part to address common problems by strongly emphasizing discrete, reusable units of programming logic[citation needed]. The technology focuses on data rather than processes, with programs composed of self-sufficient modules ("classes"), each instance of which ("objects") contains all the information needed to manipulate its own data structure ("members"). This is in contrast to the existing modular programming that had been dominant for many years that focused on the function of a module, rather than specifically the data, but equally provided for code reuse, and self-sufficient reusable units of programming logic, enabling collaboration through the use of linked modules (subroutines). This more conventional approach, which still persists, tends to consider data and behavior separately.

721 "Whereas OOA typically focuses upon one specific problem at a time, domain

2486 The book focuses on the management of OOP projects. It

frameworks'

1677 > NCR 'Cooperative Frameworks' -- a Distributed Object Foundation

2008 CORBA Implementation Descriptions: NCR 'Cooperative Frameworks' -- a Distributed Object Foundation

2013 OF 'Cooperative Frameworks' --

frequently

897 and procedures (top-down) are frequently changed, providing object-oriented

2356 Program components frequently need knowledge of an entire program to

2386 of an object. For example, event driven GUI programs frequently have no

functionality

1525 realising basic object functionality using the Object Request Broker -

2182 functionality than specified by the X.500 standard. Because DOME goes

2193 store-and-forward, broadcasting, and subscribing functionality

goal

7 Objects can be thought of as wrapping their data within a set of functions designed to ensure that the data are used appropriately, and to assist in that use. The object's methods will typically include checks and safeguards that are specific to the types of data the object contains. An object can also offer simple-to-use, standardized methods for performing particular operations on its data, while concealing the specifics of how those tasks are accomplished. In this way alterations can be made to the internal structure or methods of an object without requiring that the rest of the program be modified. This approach can also be used to offer standardized methods across different types of objects. As an example, several different types of objects might offer print methods. Each type of object might implement that print method in a different way, reflecting the different kinds of data each contains, but all the different print methods might be called in the same standardized manner from elsewhere in the program. These features become especially useful when more than one programmer is contributing code to a project or when the goal is to reuse code between projects.

65 OOP can be used to associate real-world objects and processes with digital counterparts. However, not everyone agrees that OOP facilitates direct real-world mapping (see Negative Criticism section) or that real-world mapping is even a worthy goal; Bertrand Meyer argues in Object-Oriented Software Construction that a program is not a model of the world but a model of some part of the world; "Reality is a cousin twice removed". At the same time, some principal limitations of OOP had been noted. For example, the Circle-ellipse problem is difficult to handle using OOP's concept of inheritance.

1603 The members of the OMG have a shared goal of developing and using

goor

1447 [van den Goor et.al., 1992]

1448 G. van den Goor, S. Hong and S. Brinkkemper,

1454 S. Hong, G. van den Goor, S. Brinkkemper, A Formal Approach to the

graph

466 parent more than once in a class graph (repeated inheritance), and there is

468 then appear in the graph (as is always the case in CLOS, because all *members*

512 (although they don't need to be. For example, delegation languages allow graph

groups

1550 Interest Groups for discussion of possible standards in other areas. These

1551 groups at present are:

2186 SUITESOFTWARE is a member of various standards groups and conforms

guis

13 Object-oriented programming developed as the dominant programming methodology in the early and mid 1990s when programming languages supporting the techniques became widely available. These included Visual FoxPro 3.0, C++[citation needed], and Delphi[citation needed]. Its dominance was further enhanced by the rising popularity of graphical user interfaces, which rely heavily upon object-oriented programming techniques. An example of a closely related dynamic GUI library and OOP language can be found in the Cocoa frameworks on Mac OS X, written in Objective-C, an object-oriented, dynamic messaging extension to C based on Smalltalk. OOP toolkits also enhanced the popularity of event-driven programming (although this concept is not limited to OOP). Some[who?] feel that association with GUIs (real or perceived) was what propelled OOP into the programming mainstream.

1079 programming and user interaction (e.g. GUIs). Examples can be found in

2240 with any number of third-party GUI and CASE tools. Among the GUIs are

h

853 Kitson, D.H. and Masters, S. "An Analysis of SEI Software Process Assessment

1431 Arnold, P., Bodoff, S., Coleman, D., Gilchrist, H., Hayes, F., An Evolution of

1990 IRIX 4.0.5H Native NOW

handled

70 OOP was developed to increase the reusability and maintainability of source code. Transparent representation of the control flow had no priority and was meant to be handled by a compiler. With the increasing relevance of parallel hardware and multithreaded coding, developer transparent control flow becomes more important, something hard to achieve with OOP.

839 Level 1: Initial: Every project is handled differently; ad hoc and chaotic.

840 Level 2: Repeatable: Every project is handled similarly.

handles

135 based approaches (e.g. Smalltalk handles) allow powerful dynamic typing, as

138 approach with an added layer of indirection to Smalltalk's handles is found

1083 handles the message in its own way (OO). If an (application) object can cut

highly

520 strategies or renaming, and most consider MI to be highly desirable. See the

635 single, highly cohesive and loosely coupled functions to be defined. This is

1521 a highly interoperable manner;

hoffman

2517 Hoffman, Daniel and Paul Strooper. A Case Study in Class Testing.

2523 Hoffman, D. M. A CASE Study in Module Testing. In Proc. Conf. Software

2525 Hoffman, D.M. and P.A. Strooper. Graph-Based Class Testing. In

hong

1448 G. van den Goor, S. Hong and S. Brinkkemper,

1453 [Hong et.al. 1992]

1454 S. Hong, G. van den Goor, S. Brinkkemper, A Formal Approach to the

hood

1409 HOOD [HOOD 89]

1466 Hood, Coad and Yourdon, Winter Partners, Shlaer and Mellor, Jacobson,

identical

2 In the domain of object-oriented programming an object is usually taken to mean an ephemeral compilation of attributes (object elements) and behaviors (methods or subroutines) encapsulating an entity. In this way, while primitive or simple data types are still just single pieces of information, object-oriented objects are complex types that have multiple pieces of information and specific properties (or attributes). Instead of merely being assigned a value, (like int =10), objects have to be "constructed". In the real world, if a Ford Focus is an "object" - an instance of the car class, its physical properties and its function to drive would have been individually specified. Once the properties of the Ford Focus "object" had been specified into the form of the car class, it can be endlessly copied to create identical objects that look and function in just the same way. As an alternative example, animal is a superclass of primate and primate is a superclass of human. Individuals such as Joe Bloggs or John Doe would be particular examples or 'objects' of the human class, and consequently possess all the characteristics of the human class (and of the primate and animal superclasses as well).

672 in many cases, such as requiring overriding methods to have identical

906 crystallization into 2 or more chemically identical but

identified

9 An object-oriented program may thus be viewed as a collection of interacting objects, as opposed to the conventional model, in which a program is seen as a list of tasks (subroutines) to perform. In OOP, each object is capable of receiving messages, processing data, and sending messages to other objects. Each object can be viewed as an independent "machine" with a distinct role or responsibility. The actions (or "methods") on these objects. The terms "objects" and "oriented" in something like the modern sense of object- oriented programming seem to make their first appearance at MIT in the late 1950s and early 1960s. In the environment of the artificial intelligence group, as early as 1960, "object" could refer to identified items (LISP atoms) with properties (attributes); Alan Kay was later to cite a detailed understanding of LISP internals as a strong influence on his thinking in 1966.[3] Another early MIT example was Sketchpad created by Ivan Sutherland in 1960-61; in the glossary of the 1963 technical report based on his dissertation about Sketchpad, Sutherland defined notions of "object" and "instance" (with the class concept covered by "master" or "definition"), albeit specialized to graphical interaction. Also, an MIT ALGOL version, AED-0, linked data structures ("plexes", in that dialect) directly with procedures, prefiguring what were later termed "messages", "methods" and "member functions".

18 A survey by Deborah J. Armstrong of nearly 40 years of computing literature identified a number of "quarks", or fundamental concepts, found in the strong majority of definitions of OOP.

1518 standardization have been identified:

identify

722 analysis seeks to identify the classes and objects that are common to all

725 "An investigation of a specific application area that seeks to identify the

739 Object-oriented domain analysis (OODA) seeks to identify reusable items

id's

137 oriented databases and operating systems (object id's). A "proxy" based

564 languages and perhaps object id's for unique objects. Object id's support the

ilu

1668 > ILU (free, see APPENDIX E entry 59)

1673 ilu

1674 ilu.html

implications

55 Challenges of object-oriented design are addressed by several methodologies. Most common is known as the design patterns codified by Gamma et al.. More broadly, the term "design patterns" can be used to refer to any general, repeatable solution to a commonly occurring problem in software design. Some of these commonly occurring problems have implications and solutions particular to object-oriented development.

2622 methods of making class declarations and the implications of

2633 Discusses the implications of inheritance for testing,

impossible

2358 of the component nearly impossible. For example, methods and functions

2385 different threads) makes it impossible to statically determine the last user

2389 impossible.

improved

1948 The improved Interface Repository is an integral part of IONA's CORBA

1955 security systems providing for improved reliability of distributed systems

2043 applications for improved availability

incompatible

2126 updating a collection of incompatible hardware platforms, operating

2301 incompatible, hindering reuse.

2392 manually managed components and libraries often use incompatible memory

incorporate

12 In the 1970s, Kay's Smalltalk work had influenced the Lisp community to incorporate object- based techniques that were introduced to developers via the Lisp machine. Experimentation with various extensions to Lisp (like LOOPS and Flavors introducing multiple inheritance and mixins), eventually led to the Common Lisp Object System (CLOS, a part of the first standardized object-oriented programming language, ANSI Common Lisp), which integrates functional programming and object-oriented programming and allows extension via a Meta- object protocol. In the 1980s, there were a few attempts to design processor architectures that included hardware support for objects in memory but these were not successful. Examples include the Intel iAPX 432 and the Linn Smart Rekursiv.

40 records are basis for understanding objects if function literals can be stored in fields (like in functional programming languages), but the actual calculi need be considerably more complex to incorporate essential features of OOP. Several extensions of System F<: that deal with mutable objects have been studied;[18] these allow both subtype polymorphism and parametric polymorphism (generics)

54 ECMAScript language. JavaScript is perhaps the best known prototype- based programming language, which employs cloning from prototypes rather than inheriting from a class. Another scripting language that takes this approach is Lua. Earlier versions of ActionScript (a partial superset of the ECMA-262 R3, otherwise known as ECMAScript) also used a prototype-based object model. Later versions of ActionScript incorporate a combination of classification and prototype-based object models based largely on the currently incomplete ECMA-262 R4 specification, which has its roots in an early JavaScript 2 Proposal. Microsoft's JScript.NET also includes a mash-up of object models based on the same proposal, and is also a superset of the ECMA-262 R3 specification.

increases

33 Decoupling refers to careful controls that separate code modules from particular use cases, which increases code re-usability. A common use of decoupling in OOP is to polymorphically decouple the encapsulation (see Bridge pattern and Adapter pattern) - for example, using a method interface which an encapsulated object must satisfy, as opposed to using the object's class.

489 increases in productivity and reductions in defect rates (program errors),

1097 and loose coupling. Another benefit is that code complexity increases not

indicating

418 in [Rumbaugh 91]) allow any topology, with the head of an arrow indicating the

419 base class and the tail indicating the derived class.

2398 b) Switches indicating deletion. Many applications must clear the switch to

inherits

424 Multiple Inheritance occurs when a class inherits from more than one parent.

499 which is a member of (inherits from) a class is polymorphically assignment

1107 class inherits from. With static typing and inclusion polymorphism based on

integrate

1781 In addition, HP is working with IBM to integrate HP's DOMF with IBM's

1945 easily integrate Orbix applications with existing data stores be they

1954 requests, and has made it easier for users to integrate Orbix with their

intensional

274 intensional definition, emphasizing a class as a descriptor

986 (intensional) approach (where subtypes are supersets of (contain) supertypes).

988 extensional view and set union with an intensional view. Details are left as

interaction

9 An object-oriented program may thus be viewed as a collection of interacting objects, as opposed to the conventional model, in which a program is seen as a list of tasks (subroutines) to perform. In OOP, each object is capable of receiving messages, processing data, and sending messages to other objects. Each object can be viewed as an independent "machine" with a distinct role or responsibility. The actions (or "methods") on these objects. The terms "objects" and "oriented" in something like the modern sense of object- oriented programming seem to make their first appearance at MIT in the late 1950s and early 1960s. In the environment of the artificial intelligence group, as early as 1960, "object" could refer to identified items (LISP atoms) with properties (attributes); Alan Kay was later to cite a detailed understanding of LISP internals as a strong influence on his thinking in 1966.[3] Another early MIT example was Sketchpad created by Ivan Sutherland in 1960-61; in the glossary of the 1963 technical report based on his dissertation about Sketchpad, Sutherland defined notions of "object" and "instance" (with the class concept covered by "master" or "definition"), albeit specialized to graphical interaction. Also, an MIT ALGOL version, AED-0, linked data structures ("plexes", in that dialect) directly with procedures, prefiguring what were later termed "messages", "methods" and "member functions".

719 including human interaction, task management, and data management details."

1079 programming and user interaction (e.g. GUIs). Examples can be found in

interested

1488 If you are interested in obtaining this book you can send an e-mail to

1548 In order to serve OMG membership interested in other object-oriented systems

2690 agreement. It is not currently for sale. If you are interested,

invoking

431 [Kim 89, ch 4], make good use of mixins by invoking their methods without

602 notations for invoking a method, and this invocation can be called a message

2066 system and invoking targeted services based on service

ip

1012 perhaps IP could be further divided in C+W's above classification.]

1880 IP, NetBIOS, XTI

2035 IP, NetBIOS, Lan Manager NetBEUI and

ipl

2655 IPL Ltd. (in the UK) has a testing tool called Cantata which allows for

2668 For more information contact IPL:

2669 IPL Ltd.

irix

1961 out versions of Orbix for Microsoft Windows NT, Silicon Graphics IRIX and

1990 IRIX 4.0.5H Native NOW

1991 IRIX 5.x Native NOW

isbn

1385 ISBN 3 72811948 2

2490 Reinhold, 1990, 503pp, $43, ISBN 0-442-20672-0. While this is

2592 Addison-Wesley, 1992, ISBN:0-201-60890-1.

item

41 Attempts to find a consensus definition or theory behind objects have not proven very successful (however, see Abadi & Cardelli, A Theory of Objects[18] for formal definitions of many OOP concepts and constructs), and often diverge widely. For example, some definitions focus on mental activities, and some on program structuring. One of the simpler definitions is that OOP is the act of using "map" data structures or arrays that can contain functions and pointers to other maps, all with some syntactic and scoping sugar on top. Inheritance can be performed by cloning the maps (sometimes called "prototyping"). OBJECT:=>> Objects are the run time entities in an object-oriented system. They may represent a person, a place, a bank account, a table of data or any item that the program has to handle.

93 Smith and Tockey: "an object represents an individual, identifiable item,

426 may be an editable_item and a kind of literature.

javascript

53 The Document Object Model of HTML, XHTML, and XML documents on the Internet have bindings to the popular JavaScript

54 ECMAScript language. JavaScript is perhaps the best known prototype- based programming language, which employs cloning from prototypes rather than inheriting from a class. Another scripting language that takes this approach is Lua. Earlier versions of ActionScript (a partial superset of the ECMA-262 R3, otherwise known as ECMAScript) also used a prototype-based object model. Later versions of ActionScript incorporate a combination of classification and prototype-based object models based largely on the currently incomplete ECMA-262 R4 specification, which has its roots in an early JavaScript 2 Proposal. Microsoft's JScript.NET also includes a mash-up of object models based on the same proposal, and is also a superset of the ECMA-262 R3 specification.

keeping

1116 inherent types of polymorphic objects, keeping track of the types of objects at

1950 populated with all objects or services available at runtime keeping programmers

2306 6: Because keeping track of storage is extra work, programmers often

lang

1279 Java (comp.lang.java, http:

2436 Posted to comp.object, comp.lang.c++, comp.lang.smalltalk and

legacy

1893 integration for legacy systems.

2042 - wrapping existing databases and legacy

2165 between new and legacy applications. DOME provides a solution today

levels

306 to the following listing, which is based on the number of levels of distinct

643 switching on a single argument per call (but for 2 levels), consistently

2195 - Different levels of messaging service for positive

life-cycle

780 life-cycle models and their use. Humphrey also details Worldy and Atomic

791 software development. [Boehm 86] presents a seminal spiral life-cycle model

814 Since classes and objects are used in all phases of the OO software life-cycle,

limited

13 Object-oriented programming developed as the dominant programming methodology in the early and mid 1990s when programming languages supporting the techniques became widely available. These included Visual FoxPro 3.0, C++[citation needed], and Delphi[citation needed]. Its dominance was further enhanced by the rising popularity of graphical user interfaces, which rely heavily upon object-oriented programming techniques. An example of a closely related dynamic GUI library and OOP language can be found in the Cocoa frameworks on Mac OS X, written in Objective-C, an object-oriented, dynamic messaging extension to C based on Smalltalk. OOP toolkits also enhanced the popularity of event-driven programming (although this concept is not limited to OOP). Some[who?] feel that association with GUIs (real or perceived) was what propelled OOP into the programming mainstream.

1129 A limited dynamic typing scheme, called RTTI (Run Time Type Identification),

1827 HP's limited release of HP ORB Plus to key developers is designed so that

lines

640 complexity, as code complexity doesn't grow linearly with lines of code per

1098 linearly but exponentially with lines of code, so that packaging code into

1606 encourages reuse of code; allows useful integration across lines

logic

8 Object-oriented programming has roots that can be traced to the 1960s. As hardware and software became increasingly complex, manageability often became a concern. Researchers studied ways to maintain software quality and developed object-oriented programming in part to address common problems by strongly emphasizing discrete, reusable units of programming logic[citation needed]. The technology focuses on data rather than processes, with programs composed of self-sufficient modules ("classes"), each instance of which ("objects") contains all the information needed to manipulate its own data structure ("members"). This is in contrast to the existing modular programming that had been dominant for many years that focused on the function of a module, rather than specifically the data, but equally provided for code reuse, and self-sufficient reusable units of programming logic, enabling collaboration through the use of linked modules (subroutines). This more conventional approach, which still persists, tends to consider data and behavior separately.

639 coding logic (switch statements) and because small methods further reduce

longer

2283 language which will automatically reclaim objects which are no longer used.

2288 it is no longer needed (in C this is done by a call to free(3)).

2309 the assumptions behind the chosen limits no longer apply. For

loosely

162 roughly equivalent to a loosely coupled variant record, with derived classes

635 single, highly cohesive and loosely coupled functions to be defined. This is

1196 for loosely coupled modules and in distributed programming [Black 87].

loses

524 hierarchy "creation" mechanism, however this loses polymorphism and loses the

1123 Static typing is more efficient and reliable, but loses power. Typical

loss

501 class. Such assignment can result in the loss of an object's dynamic type in

502 favor of a static type (or even loss of an object's representation to that of

1184 subtyping seems similar. A possible loss of semantic integrity

machines

566 even migrate across machines. Distributed Smalltalk's proxy objects [Kim 89,

1359 be passed freely between machines. They are typically capability-based since

1617 between applications on different machines in heterogeneous

maintainability

15 Object-oriented features have been added to many existing languages during that time, including Ada, BASIC, Fortran, Pas cal, and others. Adding these features to languages that were not initially designed for them often led to problems with compatibility and maintainability of code.

70 OOP was developed to increase the reusability and maintainability of source code. Transparent representation of the control flow had no priority and was meant to be handled by a compiler. With the increasing relevance of parallel hardware and multithreaded coding, developer transparent control flow becomes more important, something hard to achieve with OOP.

2044 and maintainability on systems of heterogeneous

maintaining

503 the static class, as in C++ slicing). Maintaining the dynamic type of objects

1160 representations per type while still maintaining reasonable type-safety.

2125 struggle to provide easy access to data while maintaining and

managing

5 In contrast, the object-oriented approach encourages the programmer to place data where it is not directly accessible by the rest of the program. Instead, the data is accessed by calling specially written functions, commonly called methods, which are either bundled in with the data or inherited from "class objects." These act as the intermediaries for retrieving or modifying the data they control. The programming construct that combines data with a set of methods for accessing and managing those data is called an object. The practice of using subroutines to examine or modify certain kinds of data, however, was also quite commonly used in non-OOP modular programming, well before the widespread use of object-oriented programming.

113 driven design. Jacobson also calls for managing complexity with specialized

1788 heterogeneous support for building, managing and using distributed object-

manipulate

4 Objects are used in software development to implement abstract data structures, by bringing together the data components with the procedures that manipulate them. Objects in object- oriented programming are key in the concept of inheritance; thereby improving program reliability[attribution needed], simplification of software maintenance[attribution needed], the management of libraries, and the division of work in programmer teams. Object-oriented programming languages are generally designed to exploit and enforce these potential advantages of the object model. Objects can also make it possible to handle very disparate objects by the same piece of code, as long as they all have the proper method. Simple, non-OOP programs may be one "long" list of statements (or commands). More complex programs will often group smaller sections of these statements into functions or subroutines each of which might perform a particular task. With designs of this sort, it is common for some of the program's data to be 'global', i.e. accessible from any part of the program. As programs grow in size, allowing any function to modify any piece of data means that bugs can have wide-reaching effects.

8 Object-oriented programming has roots that can be traced to the 1960s. As hardware and software became increasingly complex, manageability often became a concern. Researchers studied ways to maintain software quality and developed object-oriented programming in part to address common problems by strongly emphasizing discrete, reusable units of programming logic[citation needed]. The technology focuses on data rather than processes, with programs composed of self-sufficient modules ("classes"), each instance of which ("objects") contains all the information needed to manipulate its own data structure ("members"). This is in contrast to the existing modular programming that had been dominant for many years that focused on the function of a module, rather than specifically the data, but equally provided for code reuse, and self-sufficient reusable units of programming logic, enabling collaboration through the use of linked modules (subroutines). This more conventional approach, which still persists, tends to consider data and behavior separately.

2237 DDM can manipulate data across a large number of databases and data

manually

2392 manually managed components and libraries often use incompatible memory

2418 their manually managed brethren. [3] In fact, multi-media programmers

2423 manually managed programs. Finally, garbage collection can be mixed with

maps

41 Attempts to find a consensus definition or theory behind objects have not proven very successful (however, see Abadi & Cardelli, A Theory of Objects[18] for formal definitions of many OOP concepts and constructs), and often diverge widely. For example, some definitions focus on mental activities, and some on program structuring. One of the simpler definitions is that OOP is the act of using "map" data structures or arrays that can contain functions and pointers to other maps, all with some syntactic and scoping sugar on top. Inheritance can be performed by cloning the maps (sometimes called "prototyping"). OBJECT:=>> Objects are the run time entities in an object-oriented system. They may represent a person, a place, a bank account, a table of data or any item that the program has to handle.

2233 its entirety on the local machine. This is possible because DDM maps

march

79 Richard Mansfield, author and former editor of COMPUTE! magazine, states that "like countless other intellectual fads over the years ("relevance", communism, "modernism", and so on—history is littered with them), OOP will be with us until eventually reality asserts itself. But considering how OOP currently pervades both universities and workplaces, OOP may well prove to be a durable delusion. Entire generations of indoctrinated programmers continue to march out of the academy, committed to OOP and nothing but OOP for the rest of their lives."[38] He also is quoted as saying "OOP is to writing a program, what going through airport security is to flying".

82 Carnegie-Mellon University Professor Robert Harper in March 2011 wrote: "This semester Dan Licata and I are co-teaching a new course on functional programming for first-year prospective CS majors... Object-oriented programming is eliminated entirely from the introductory curriculum, because it is both anti-modular and anti-parallel by its very nature, and hence unsuitable for a modern CS curriculum. A proposed new course on object- oriented design methodology will be offered at the sophomore level for those students who wish to study this topic."

1666 2. See Distributed Computing Monitor, March 93 for

matching

400 specify required attributes of a matching object (see sections 2.1, 2.7 and

1181 templates), as any method matching a required signature is accepted,

1182 calling for careful matching of actual and formal generic parameters. The

mellor

1417 Shlaer and Mellor [Shlaer 88 and 92]

1466 Hood, Coad and Yourdon, Winter Partners, Shlaer and Mellor, Jacobson,

1483 Shlaer, S., Mellor, S.J. - Object-oriented systems analysis: Modeling the

microsystems

16 More recently, a number of languages have emerged that are primarily object-oriented yet compatible with procedural methodology, such as Python and Ruby. Probably the most commercially important recent object-oriented languages are Visual Basic.NET (VB.NET) and C#, both designed for Microsoft's .NET platform, and Java, developed by Sun Microsystems. Both frameworks show the benefit of using OOP by creating an abstraction from implementation in their own way. VB.NET and C# support cross-language inheritance, allowing classes defined in one language to subclass classes defined in the other language. Developers usually compile Java to bytecode, allowing Java to run on any operating system for which a Java virtual machine is available. VB.NET and C# make use of the Strategy pattern to accomplish cross-language inheritance, whereas Java makes use of the Adapter pattern[citation needed].

1377 Sun Microsystems Laboratories, Inc.

1541 HyperDesk Corp., Digital Equipment Corp., Sun Microsystems and Object

mutable

40 records are basis for understanding objects if function literals can be stored in fields (like in functional programming languages), but the actual calculi need be considerably more complex to incorporate essential features of OOP. Several extensions of System F<: that deal with mutable objects have been studied;[18] these allow both subtype polymorphism and parametric polymorphism (generics)

56 It is intuitive to assume that inheritance creates a semantic "is a" relationship, and thus to infer that objects instantiated from subclasses can always be safely used instead of those instantiated from the superclass. This intuition is unfortunately false in most OOP languages, in particular in all those that allow mutable objects. Subtype polymorphism as enforced by the type checker in OOP languages (with mutable objects) cannot guarantee behavioral subtyping in any context. Behavioral subtyping is undecidable in general, so it cannot be implemented by a program (compiler). Class or object hierarchies need to be carefully designed considering possible incorrect uses that cannot be detected syntactically. This issue is known as the Liskov substitution principle.

naming

1826 for properties, life cycle, associations, event notification and naming.

2052 - Naming - network implementation of X.500 directory

2053 provides object naming service

nature

82 Carnegie-Mellon University Professor Robert Harper in March 2011 wrote: "This semester Dan Licata and I are co-teaching a new course on functional programming for first-year prospective CS majors... Object-oriented programming is eliminated entirely from the introductory curriculum, because it is both anti-modular and anti-parallel by its very nature, and hence unsuitable for a modern CS curriculum. A proposed new course on object- oriented design methodology will be offered at the sophomore level for those students who wish to study this topic."

790 incremental, iterative, evolutionary, concurrent and situational nature of

1225 nature, which is an advantage for strong typechecking but a potential

nested

172 and program complexity (fewer nested programming constructs) and allowing

1095 program complexity by replacing a nested construct (switch statement) with a

1100 the nested switch statement! [Martin 92] covers some of these issues.

netware

1663 API only), NetWare (planned, Novell owns part of HyperDesk).

1732 now, and a NetWare version is in the works. Submitted a C++ language

2080 Frameworks has been demonstrated on Novell NetWare v3.11,

oberon

14 At ETH Z?rich, Niklaus Wirth and his colleagues had also been investigating such topics as data abstraction and modular programming (although this had been in common use in the 1960s or earlier). Modula-2 (1978) included both, and their succeeding design, Oberon, included a distinctive approach to object orientation, classes, and such. The approach is unlike Smalltalk, and very unlike C++.

49 Languages with most of the features of objects (classes, methods, inheritance, reusability), but in a distinctly original form. Examples: Oberon (Oberon-1 or Oberon-2) and Common Lisp.

1383 From: whitney@oberon.Meakins.McGill.CA ()

oberon-

49 Languages with most of the features of objects (classes, methods, inheritance, reusability), but in a distinctly original form. Examples: Oberon (Oberon-1 or Oberon-2) and Common Lisp.

1387 operating systems. The language used was Oberon-2. It includes

objectbroker

1639 > DEC ObjectBroker Version 2.5 (Version 2.1 was ACA)

1640 Full implementation of OMG CORBA 1.1. Digital's ObjectBroker is a 100 %

1650 ObjectBroker

occurs

424 Multiple Inheritance occurs when a class inherits from more than one parent.

999 viewed in an almost symbolic way) occurs when object types may be specified and

1262 where reuse occurs at a finer degree of granularity - method and instance

oct

1338 Date: 24 Oct 1994 13:10:02 -0400

1439 Methodologies. Computer, Oct 1992, Vol 25, No. 10, p 22-40

1441 and Design Methods - Comparison and Critique. IEEE-Comp, Oct, 1992, pp 22-39.

oodbs

1320 object-oriented database. OODBs allow all the benefits of object-orientation,

1327 OODBs) that outlive the programs that create them. Object lifetimes can be

2275 [Covers CORBA standards with respect to OODBs]

optimizations

684 However, static analysis optimizations are commonly available in the

1089 Again, various optimizations exist for dynamic lookup to increase efficiency

2468 optimizations, etc. This means that testing modules must be

owl

1008 Owl also had such a facility but with two separate inheritance hierarchies,

1200 Owl, an experimental C++ extension (See Appendix E,

1286 Owl

pacific

2506 Object-Oriented Programs", Proceedings of the 8th Pacific

2531 at the 10th Annual Pacific Northwest Software Quality Conference,

2688 MicroTech Pacific Research (mpr.ca) has a C++ class testing tool called

parallel

70 OOP was developed to increase the reusability and maintainability of source code. Transparent representation of the control flow had no priority and was meant to be handled by a compiler. With the increasing relevance of parallel hardware and multithreaded coding, developer transparent control flow becomes more important, something hard to achieve with OOP.

1372 Peace (OO family-based parallel OS, See Appendix E, General)

1555 4) Parallel Processing;

parameterized

1211 and functions with types. This is useful for parameterized classes and

1215 may be generically parameterized. Generics provide for reusability in

1217 parameterized base type. This allows a single Stack class to provide

parcplace

1799 Smalltalk. This toolset works with VisualWorks from ParcPlace Systems to

1855 Toolkit(tm). RDOM provides interfaces from Smalltalk (Parcplace),

2649 used to validate the Tree classes. For ParcPlace Smalltalk (ObjectWorks

partners

1419 Winter Partners (OSMOSYS) [Winter Partners]

1466 Hood, Coad and Yourdon, Winter Partners, Shlaer and Mellor, Jacobson,

person

41 Attempts to find a consensus definition or theory behind objects have not proven very successful (however, see Abadi & Cardelli, A Theory of Objects[18] for formal definitions of many OOP concepts and constructs), and often diverge widely. For example, some definitions focus on mental activities, and some on program structuring. One of the simpler definitions is that OOP is the act of using "map" data structures or arrays that can contain functions and pointers to other maps, all with some syntactic and scoping sugar on top. Inheritance can be performed by cloning the maps (sometimes called "prototyping"). OBJECT:=>> Objects are the run time entities in an object-oriented system. They may represent a person, a place, a bank account, a table of data or any item that the program has to handle.

425 For example, a person is a mammal and an intellectual_entity, and a document

1497 Contact Person: Richard Soley (technical director) soley@omg.com

personal

412 Mainframe Mini Personal

486 in Personal computers are also available to all of its subclasses. This kind

835 Humphrey is now working on the Personal Software Process (PSP), a scaled down

php

48 Languages that are historically procedural languages, but have been extended with some OO features. Examples: Visual Basic (derived from BASIC), Fortran 2003, Perl, COBOL 2002, PHP, ABAP.

52 In recent years, object-oriented programming has become especially popular in dynamic programming languages. Python, Ruby and Groovy are dynamic languages built on OOP principles, while Perl and PHP have been adding object oriented features since Perl 5 and PHP 4, and ColdFusion since version 5.

polymorphous

905 Polymorphism 1. State or condition of being polymorphous. 2. Cryall.

909 polymorphous adj. having, assuming, or passing through many or various forms,

910 stages, or the like. Also, polymorphic. [<Gk polymorphous multiform]

popular

52 In recent years, object-oriented programming has become especially popular in dynamic programming languages. Python, Ruby and Groovy are dynamic languages built on OOP principles, while Perl and PHP have been adding object oriented features since Perl 5 and PHP 4, and ColdFusion since version 5.

53 The Document Object Model of HTML, XHTML, and XML documents on the Internet have bindings to the popular JavaScript

1233 languages. One such popular functional language is ML, in which all functions

posted

1430 Here are some comparison studies posted to the net:

1624 [Here's why you don't see the specifications posted to the net or available via

2436 Posted to comp.object, comp.lang.c++, comp.lang.smalltalk and

postscript

1491 The authors, regretfully, cannot supply ftp, postscript, TEX, or

2334 and other papers about garbage collection are available in PostScript via

2541 Copies of the postscript file can be obtained by sending email

potential

4 Objects are used in software development to implement abstract data structures, by bringing together the data components with the procedures that manipulate them. Objects in object- oriented programming are key in the concept of inheritance; thereby improving program reliability[attribution needed], simplification of software maintenance[attribution needed], the management of libraries, and the division of work in programmer teams. Object-oriented programming languages are generally designed to exploit and enforce these potential advantages of the object model. Objects can also make it possible to handle very disparate objects by the same piece of code, as long as they all have the proper method. Simple, non-OOP programs may be one "long" list of statements (or commands). More complex programs will often group smaller sections of these statements into functions or subroutines each of which might perform a particular task. With designs of this sort, it is common for some of the program's data to be 'global', i.e. accessible from any part of the program. As programs grow in size, allowing any function to modify any piece of data means that bugs can have wide-reaching effects.

467 then a potential to share that class. Only one instance of the class will

1225 nature, which is an advantage for strong typechecking but a potential

potentially

488 also allow reuse between applications, potentially allowing order-of-magnitude

685 literature, potentially providing a single static selection in many cases

1248 it couldn't handle to objects that potentially could (its delegates). Any

power

1123 Static typing is more efficient and reliable, but loses power. Typical

1138 "pure" example. Section 2.5 discusses why static typing has less power

1186 contrasted with greater power.

practice

5 In contrast, the object-oriented approach encourages the programmer to place data where it is not directly accessible by the rest of the program. Instead, the data is accessed by calling specially written functions, commonly called methods, which are either bundled in with the data or inherited from "class objects." These act as the intermediaries for retrieving or modifying the data they control. The programming construct that combines data with a set of methods for accessing and managing those data is called an object. The practice of using subroutines to examine or modify certain kinds of data, however, was also quite commonly used in non-OOP modular programming, well before the widespread use of object-oriented programming.

666 typically isn't recommended as a general OO practice (see section 1.15, C+W's

979 polymorphism is used in practice but not enforced. For inheritance, inclusion

practise

717 "Design. The practise of taking a specification of externally available

1149 However, Smalltalk's style uses inclusion polymorphism in practise and

2339 Weiser. Software --- Practise and Experience vol 18(9), pp 807-820.

preferable

71 Responsibility-driven design defines classes in terms of a contract, that is, a class should be defined around a responsibility and the information that it shares. This is contrasted by Wirfs-Brock and Wilkerson with data-driven design, where classes are defined around the data-structures that must be held. The authors hold that responsibility-driven design is preferable.

184 may be preferable to the sub

1042 but a newer template function is incomparably preferable, as implied in

present

648 the actual classes of objects present:

982 the same applies because all operations required by the supertype are present

1551 groups at present are:

presented

901 defined in many ways, so many definitions are presented from: Websters',

2518 To be Presented at the IBM Center for Advanced Studies Fall

2530 Lakos, John S. "Designing-In Quality in Large C++ Projects" Presented

presents

768 which is quite powerful. [Booch 94] presents a methodology which is an

791 software development. [Boehm 86] presents a seminal spiral life-cycle model

796 [Coad 91b] presents the following development cycle breakdown:

primate

2 In the domain of object-oriented programming an object is usually taken to mean an ephemeral compilation of attributes (object elements) and behaviors (methods or subroutines) encapsulating an entity. In this way, while primitive or simple data types are still just single pieces of information, object-oriented objects are complex types that have multiple pieces of information and specific properties (or attributes). Instead of merely being assigned a value, (like int =10), objects have to be "constructed". In the real world, if a Ford Focus is an "object" - an instance of the car class, its physical properties and its function to drive would have been individually specified. Once the properties of the Ford Focus "object" had been specified into the form of the car class, it can be endlessly copied to create identical objects that look and function in just the same way. As an alternative example, animal is a superclass of primate and primate is a superclass of human. Individuals such as Joe Bloggs or John Doe would be particular examples or 'objects' of the human class, and consequently possess all the characteristics of the human class (and of the primate and animal superclasses as well).

productivity

74 A study by Potok has shown no significant difference in productivity between OOP and procedural approaches.

489 increases in productivity and reductions in defect rates (program errors),

2687 *Integration with leading programming tools for maximum productivity gains

proposal

54 ECMAScript language. JavaScript is perhaps the best known prototype- based programming language, which employs cloning from prototypes rather than inheriting from a class. Another scripting language that takes this approach is Lua. Earlier versions of ActionScript (a partial superset of the ECMA-262 R3, otherwise known as ECMAScript) also used a prototype-based object model. Later versions of ActionScript incorporate a combination of classification and prototype-based object models based largely on the currently incomplete ECMA-262 R4 specification, which has its roots in an early JavaScript 2 Proposal. Microsoft's JScript.NET also includes a mash-up of object models based on the same proposal, and is also a superset of the ECMA-262 R3 specification.

1540 from a joint proposal (named "CORBA") of Hewlett-Packard, NCR Corp.,

proposals

1531 Proposals, requesting detailed technical and commercial availability

1611 groundwork for technology response to Request for Proposals (RFP)

1621 contained response to the Request for Proposals (RFP) issued by

proposed

10 Objects as a formal concept in programming were introduced in the 1960s in Simula 67, a major revision of Simula I, a programming language designed for discrete event simulation, created by Ole-Johan Dahl and Kristen Nygaard of the Norwegian Computing Center in Oslo. Simula 67 was influenced by SIMSCRIPT and Hoare's proposed "record classes". Simula introduced the notion of classes and instances or objects (as well as subclasses, virtual methods, coroutines, and discrete event simulation) as part of an explicit programming paradigm. The language also used automatic garbage collection that had been invented earlier for the functional programming language Lisp. Simula was used for physical modeling, such as models to study and improve the movement of ships and their content through cargo ports. The ideas of Simula 67 influenced many later languages, including Smalltalk, derivatives of LISP (CLOS), Object Pascal, and C++.

82 Carnegie-Mellon University Professor Robert Harper in March 2011 wrote: "This semester Dan Licata and I are co-teaching a new course on functional programming for first-year prospective CS majors... Object-oriented programming is eliminated entirely from the introductory curriculum, because it is both anti-modular and anti-parallel by its very nature, and hence unsuitable for a modern CS curriculum. A proposed new course on object- oriented design methodology will be offered at the sophomore level for those students who wish to study this topic."

218 Chambers has proposed an interesting variation called "Predicate Classes"

protected

245 mechanism with public, private and protected members. Public members (member

249 private. Protected members are accessible from within a class and also from

251 could be declared protected allowing subclass access. C++ also allows a

prototype-based

19 Not all of these concepts are to be found in all object-oriented programming languages. For example, object-oriented programming that uses classes is sometimes called class-based programming, while prototype-based programming does not typically use classes. As a result, a significantly different yet analogous terminology is used to define the concepts of object and instance.

54 ECMAScript language. JavaScript is perhaps the best known prototype- based programming language, which employs cloning from prototypes rather than inheriting from a class. Another scripting language that takes this approach is Lua. Earlier versions of ActionScript (a partial superset of the ECMA-262 R3, otherwise known as ECMAScript) also used a prototype-based object model. Later versions of ActionScript incorporate a combination of classification and prototype-based object models based largely on the currently incomplete ECMA-262 R4 specification, which has its roots in an early JavaScript 2 Proposal. Microsoft's JScript.NET also includes a mash-up of object models based on the same proposal, and is also a superset of the ECMA-262 R3 specification.

prototypes

46 Languages called "pure" OO languages, because everything in them is treated consistently as an object, from primitives such as characters and punctuation, all the way up to whole classes, prototypes, blocks, modules, etc. They were designed specifically to facilitate, even enforce, OO methods. Examples: Scala, Smalltalk, Eiffel, JADE, Emerald.

54 ECMAScript language. JavaScript is perhaps the best known prototype- based programming language, which employs cloning from prototypes rather than inheriting from a class. Another scripting language that takes this approach is Lua. Earlier versions of ActionScript (a partial superset of the ECMA-262 R3, otherwise known as ECMAScript) also used a prototype-based object model. Later versions of ActionScript incorporate a combination of classification and prototype-based object models based largely on the currently incomplete ECMA-262 R4 specification, which has its roots in an early JavaScript 2 Proposal. Microsoft's JScript.NET also includes a mash-up of object models based on the same proposal, and is also a superset of the ECMA-262 R3 specification.

1254 delegation languages usually refers to objects serving as prototypes for

proxy

60 Structural patterns : Adapter pattern, Bridge pattern, Composite pattern, Decorator pattern, Facade pattern, Flyweight pattern, Proxy pattern

137 oriented databases and operating systems (object id's). A "proxy" based

566 even migrate across machines. Distributed Smalltalk's proxy objects [Kim 89,

publication

1486 We are currently approaching publishers for the publication of this report

1596 Technology topics and issues. This publication features

1610 supports their goals. The OMA publication outlines the

q

1857 not CORBA compliant, but will be brought to compliance during 3Q93.

2092 Release 3.1 will be available to early developers 1Q 1994

2093 with general availability set for 2Q 1994

qualix

2448 I work for a Unix software house, Qualix Group, in the US. Here is

2455 email: dshaker@qualix.com

2456 mail: Qualix Group

raj

495 otherwise. See [Raj 89] for an alternative approach as found in Jade.

1199 [Raj 89], original trellis

1260 Jade ([Black 86] and [Raj 89])

range

729 while domain analysis states what can be done in a range of problems in a

930 "Parametric polymorphism is obtained when a function works uniformly on a range

1608 range maintenance of that code. As an organization, OMG believes

rapid

208 languages providing high quality support for rapid prototyping, although this

787 * It does not provide for such methods as rapid prototyping or advanced

1800 provide programmers with a rapid development environment for creating and

rational

773 on by Grady Booch, James Rumbaugh, and Ivar Jacobson at Rational Software which

775 .8 docs can be found online from the Rational home page, http:

776 www.rational.com.

reached

2508 One author can be reached at pfrankl@polyof.poly.edu.

2553 and which is reused. The author can be reached at

2557 via email. The author can be reached at info@testing.com.

realizations

820 A problem domain has many realizations, or differing OOAs. An OOA has many

821 realizations, or differing OODs, but a similar notation is often used for

822 the two. An OOD also has many realizations, or differing OOPs, but allows a

real-time

1887 real-time systems.

2324 also available with good real-time behaviour.

2420 superior real-time performance as manual management usually has difficulty

receiving

9 An object-oriented program may thus be viewed as a collection of interacting objects, as opposed to the conventional model, in which a program is seen as a list of tasks (subroutines) to perform. In OOP, each object is capable of receiving messages, processing data, and sending messages to other objects. Each object can be viewed as an independent "machine" with a distinct role or responsibility. The actions (or "methods") on these objects. The terms "objects" and "oriented" in something like the modern sense of object- oriented programming seem to make their first appearance at MIT in the late 1950s and early 1960s. In the environment of the artificial intelligence group, as early as 1960, "object" could refer to identified items (LISP atoms) with properties (attributes); Alan Kay was later to cite a detailed understanding of LISP internals as a strong influence on his thinking in 1966.[3] Another early MIT example was Sketchpad created by Ivan Sutherland in 1960-61; in the glossary of the 1963 technical report based on his dissertation about Sketchpad, Sutherland defined notions of "object" and "instance" (with the class concept covered by "master" or "definition"), albeit specialized to graphical interaction. Also, an MIT ALGOL version, AED-0, linked data structures ("plexes", in that dialect) directly with procedures, prefiguring what were later termed "messages", "methods" and "member functions".

1086 cut, are available in the receiving object, the particular method being

1813 sending and receiving of remote messages, and reusable

reclaim

2283 language which will automatically reclaim objects which are no longer used.

2317 decrements, three increments and six comparisons) and cannot reclaim

2365 include failure to reclaim cycles, inability to handle stack and static

records

40 records are basis for understanding objects if function literals can be stored in fields (like in functional programming languages), but the actual calculi need be considerably more complex to incorporate essential features of OOP. Several extensions of System F<: that deal with mutable objects have been studied;[18] these allow both subtype polymorphism and parametric polymorphism (generics)

163 as variant parts and with multiple-inheritance concatenating several records

971 (subclass) in languages, especially if records are allowed to have functional

recursive

37 recursive types

271 (parents, or recursive structure and behavior) for objects. As pointed out

756 information modeling and recursive design, or OOA

reduces

638 and cohesion, multiple-polymorphism reduces program complexity by avoiding

1099 methods reduces program complexity considerably, even further that removing

1762 reduces the complexity of developing distributed applications so programmers

relevant

127 Unrelated to Ivar Jacobson but relevant to the topic:

736 relevant information in a domain based on the study of existing systems and

1028 dynamic type, which is relevant, but claims "... there is no way the type

repeated

464 1.11) What Is Shared (Repeated) Inheritance? (Object-Oriented Technology)

466 parent more than once in a class graph (repeated inheritance), and there is

473 "features" in Eiffel (C++ members) of a repeated parent that are not to be

replacement

505 sliced replacement in a statically typed environment (see section 2.1).

998 polymorphism with respect to assignment (and initialization, or replacement if

1002 oriented language using inclusion polymorphism with respect to replacement;

requiring

7 Objects can be thought of as wrapping their data within a set of functions designed to ensure that the data are used appropriately, and to assist in that use. The object's methods will typically include checks and safeguards that are specific to the types of data the object contains. An object can also offer simple-to-use, standardized methods for performing particular operations on its data, while concealing the specifics of how those tasks are accomplished. In this way alterations can be made to the internal structure or methods of an object without requiring that the rest of the program be modified. This approach can also be used to offer standardized methods across different types of objects. As an example, several different types of objects might offer print methods. Each type of object might implement that print method in a different way, reflecting the different kinds of data each contains, but all the different print methods might be called in the same standardized manner from elsewhere in the program. These features become especially useful when more than one programmer is contributing code to a project or when the goal is to reuse code between projects.

429 inherited by any class requiring them. Method combination, or calling

672 in many cases, such as requiring overriding methods to have identical

researchers

8 Object-oriented programming has roots that can be traced to the 1960s. As hardware and software became increasingly complex, manageability often became a concern. Researchers studied ways to maintain software quality and developed object-oriented programming in part to address common problems by strongly emphasizing discrete, reusable units of programming logic[citation needed]. The technology focuses on data rather than processes, with programs composed of self-sufficient modules ("classes"), each instance of which ("objects") contains all the information needed to manipulate its own data structure ("members"). This is in contrast to the existing modular programming that had been dominant for many years that focused on the function of a module, rather than specifically the data, but equally provided for code reuse, and self-sufficient reusable units of programming logic, enabling collaboration through the use of linked modules (subroutines). This more conventional approach, which still persists, tends to consider data and behavior separately.

20 Benjamin C. Pierce and some other researchers view as futile any attempt to distill OOP to a minimal set of features. He nonetheless identifies fundamental features that support the OOP programming style in most object-oriented languages:

72 A number of well-known researchers and programmers have analysed the utility of OOP. Here is an incomplete list:

respond

382 refer to other objects to respond to messages (environment) and do not

1018 able to respond to some common set of operations in different ways.

1054 respond in whatever way the object has defined (usually starting from its most

responsibility-driven

71 Responsibility-driven design defines classes in terms of a contract, that is, a class should be defined around a responsibility and the information that it shares. This is contrasted by Wirfs-Brock and Wilkerson with data-driven design, where classes are defined around the data-structures that must be held. The authors hold that responsibility-driven design is preferable.

1445 Booch OOD, Wirfs-Brock responsibility-driven design.

resulting

984 classes as sets of objects (resulting in subtype objects are a subset of

1897 can be derived from existing ones and the resulting configurations

2685 *No recompilation needed, resulting in quick turnaround

reused

360 of object-oriented reuse, since the compiler itself is reused thru

2464 Why is this important? If classes are really to be reused in

2553 and which is reused. The author can be reached at

revision

10 Objects as a formal concept in programming were introduced in the 1960s in Simula 67, a major revision of Simula I, a programming language designed for discrete event simulation, created by Ole-Johan Dahl and Kristen Nygaard of the Norwegian Computing Center in Oslo. Simula 67 was influenced by SIMSCRIPT and Hoare's proposed "record classes". Simula introduced the notion of classes and instances or objects (as well as subclasses, virtual methods, coroutines, and discrete event simulation) as part of an explicit programming paradigm. The language also used automatic garbage collection that had been invented earlier for the functional programming language Lisp. Simula was used for physical modeling, such as models to study and improve the movement of ships and their content through cargo ports. The ideas of Simula 67 influenced many later languages, including Smalltalk, derivatives of LISP (CLOS), Object Pascal, and C++.

1730 Revision 1.0 has been shipping since beginning of '92. Revision 1.1

rich

14 At ETH Z?rich, Niklaus Wirth and his colleagues had also been investigating such topics as data abstraction and modular programming (although this had been in common use in the 1960s or earlier). Modula-2 (1978) included both, and their succeeding design, Oberon, included a distinctive approach to object orientation, classes, and such. The approach is unlike Smalltalk, and very unlike C++.

81 Rich Hickey, creator of Clojure, described object systems as over simplistic models of the real world. He emphasized the inability of OOP to model time properly, which is getting increasingly problematic as software systems become more concurrent.

1660 > HyperDesk (Westborough MA) HD-DOMS, rich_fraser@hyperdesk.com

risk

802 Analysis, prototyping, risk management

803 Design, prototyping, risk management

804 Programming, prototyping, risk management

robert

82 Carnegie-Mellon University Professor Robert Harper in March 2011 wrote: "This semester Dan Licata and I are co-teaching a new course on functional programming for first-year prospective CS majors... Object-oriented programming is eliminated entirely from the introductory curriculum, because it is both anti-modular and anti-parallel by its very nature, and hence unsuitable for a modern CS curriculum. A proposed new course on object- oriented design methodology will be offered at the sophomore level for those students who wish to study this topic."

1440 Fichman, Robert and Kemerer, Chris. Object-Oriented and Conventional Analysis

1846 From: rcbc@cs.cornell.edu (Robert Cooper)

rpc

1669 Object RPC compatible with OMG CORBA 1.2 spec (will compile OMG IDL and

1694 (RDA), Remote Procedure Calls (RPC), Message-Oriented Middleware (MOM),

2160 Calls (RPC), Message-Oriented Middleware (MOM), and Object Request

ruby

16 More recently, a number of languages have emerged that are primarily object-oriented yet compatible with procedural methodology, such as Python and Ruby. Probably the most commercially important recent object-oriented languages are Visual Basic.NET (VB.NET) and C#, both designed for Microsoft's .NET platform, and Java, developed by Sun Microsystems. Both frameworks show the benefit of using OOP by creating an abstraction from implementation in their own way. VB.NET and C# support cross-language inheritance, allowing classes defined in one language to subclass classes defined in the other language. Developers usually compile Java to bytecode, allowing Java to run on any operating system for which a Java virtual machine is available. VB.NET and C# make use of the Strategy pattern to accomplish cross-language inheritance, whereas Java makes use of the Adapter pattern[citation needed].

52 In recent years, object-oriented programming has become especially popular in dynamic programming languages. Python, Ruby and Groovy are dynamic languages built on OOP principles, while Perl and PHP have been adding object oriented features since Perl 5 and PHP 4, and ColdFusion since version 5.

63 Both object-oriented programming and relational database management systems (RDBMSs) are extremely common in software today. Since relational databases don't store objects directly (though some RDBMSs have object-oriented features to approximate this), there is a general need to bridge the two worlds. The problem of bridging object-oriented programming accesses and data patterns with relational databases is known as Object-Relational impedance mismatch. There are a number of approaches to cope with this problem, but no general solution without downsides.[20] One of the most common approaches is object-relational mapping, as found in libraries like Java Data Objects and Ruby on Rails' ActiveRecord.

russell

1136 polymorphic type system [Wikstrom 87]. Russell (see Appendix E) is a more

1203 Functional languages such as ML, Russell, and Haskell provide a separation with

1234 are generic. Russell and Haskel are more modern variants (references are

sa

762 D, and many others, also share common ground with SA and other existing

1442 OOA, OOD, conventional analysis, conventional design, DeMarco SA, Yourdon SA,

scale

1886 suitable for use in large scale commercial systems and embedded

2139 security; and scale up to accommodate even the largest systems. When

2145 scale, heterogeneous, distributed systems that can run virtually any

sciences

924 many uses in the sciences, all referring to objects that can take on or assume

1456 International Conference on System Sciences (HICSS) (IEEE Computer Society

2596 Engineering and Computer Sciences (SECS), University of Durham,

sciore

188 prototyping languages [Kim 89, ch3; Ungar 87, Sciore 89] have a more

408 is-a-kind-of (inheritance) are merged into one [Ungar 87, Madsen 93, Sciore

1266 Object Specialization [Sciore 89] is an example of a hybrid approach between

scope

391 schemes exist, for example C++ finds the closest match within a scope but

866 SPICE [Rout 95] standard (among other work), which is similar in scope to

1956 built using Orbix. IONA has also extensively extended the number, and scope, of

seeks

722 analysis seeks to identify the classes and objects that are common to all

725 "An investigation of a specific application area that seeks to identify the

739 Object-oriented domain analysis (OODA) seeks to identify reusable items

selected

3 "Objects" are the foundation of object-oriented programming, and are fundamental data types in object-oriented programming languages. These languages provide extensive syntactic and semantic support for object handling, including a hierarchical type system, special notation for declaring and calling methods, and facilities for hiding selected fields from client programmers. However, objects and object-oriented programming can be implemented in any language.

1087 selected based on the actual type of object being cut (which in the GUI case is

2096 is available now; interoperability with selected CORBA 1.1

selector

606 Selector would be another good choice for message_name in the above examples,

608 considered part of the selector in Smalltalk (and hence Objective-C).

687 But coupling the two cases of selector variables (as found in CLOS,

separated

941 but separated to draw a clear distinction between the two forms, which are then

1159 types (classes in OO) can be separated from the notion of type allowing many

1889 is separated from the means of distribution and the problem of

sept

1469 Oriented Design," The Communications of ACM, (33, 9) Sept. 1990, pp. 104-1124.

2331 Management, Sept. 1992, St. Malo, France, Yves Bekkers and Jacques Cohen,

2340 Sept 1988. This describes GC in C and C++.

september

1463 September 1992

1740 DATE: September 27, 1993

2640 Report TR92-0655, MPR Teltech Ltd., September 1992.

series

1834 HP Apollo 9000 Series 700 workstations and HP 9000 Series 800 business

2610 England. Describes a series of tools for the generation and

serve

164 to serve as a base.

206 classification where any object can be inherited from or cloned to serve as a

1548 In order to serve OMG membership interested in other object-oriented systems

sets

153 a view of types as sets of values.

222 as collections of objects view, which is the same as the types as sets of

984 classes as sets of objects (resulting in subtype objects are a subset of

short

1152 For a short answer:

1208 Short Answer: Parametric Polymorphism (although various implementations

1872 Short Description:

signatures

673 signatures with the methods they substitute (as in C++) or allowing covariant

1178 signatures can occur, calling for greater care in use. [Black 86] discusses

1201 Signatures), Sather (originally Eiffel-based), and an Eiffel superset

significant

74 A study by Potok has shown no significant difference in productivity between OOP and procedural approaches.

214 differences are significant too:-) Delegation refers to delegating the

2189 Because DOME's architecture is object-oriented, there are significant

sigs

1283 www.sigs.com, See Anon FTP)

2545 Love, Tom. Object Lessons. SIGS Books, 588 Broadway #604, New York, NY

2588 Magazine, Vol. 2, No. 2, July-August 1992, pp17-18. SIGs

smith

93 Smith and Tockey: "an object represents an individual, identifiable item,

2573 Smith, M. D. and D. J. Robson, " A Framework for Testing Object-Oriented

2583 Smith, M. D. and D. J. Robson, "Object-Oriented Programming - the

society

1456 International Conference on System Sciences (HICSS) (IEEE Computer Society

2524 Maintenance, pp. 100-105. IEEE Computer Society, October 1989.

2585 Conference on Software Maintenance 1990, IEEE Computer Society

soley

1497 Contact Person: Richard Soley (technical director) soley@omg.com

1500 -- Richard Soley

solutions

55 Challenges of object-oriented design are addressed by several methodologies. Most common is known as the design patterns codified by Gamma et al.. More broadly, the term "design patterns" can be used to refer to any general, repeatable solution to a commonly occurring problem in software design. Some of these commonly occurring problems have implications and solutions particular to object-oriented development.

69 verbs).] This problem may cause OOP to suffer more convoluted solutions than procedural programming.

2114 communications solutions together to provide people easy

sort

4 Objects are used in software development to implement abstract data structures, by bringing together the data components with the procedures that manipulate them. Objects in object- oriented programming are key in the concept of inheritance; thereby improving program reliability[attribution needed], simplification of software maintenance[attribution needed], the management of libraries, and the division of work in programmer teams. Object-oriented programming languages are generally designed to exploit and enforce these potential advantages of the object model. Objects can also make it possible to handle very disparate objects by the same piece of code, as long as they all have the proper method. Simple, non-OOP programs may be one "long" list of statements (or commands). More complex programs will often group smaller sections of these statements into functions or subroutines each of which might perform a particular task. With designs of this sort, it is common for some of the program's data to be 'global', i.e. accessible from any part of the program. As programs grow in size, allowing any function to modify any piece of data means that bugs can have wide-reaching effects.

1220 a polymorphic sort function taking a base type with a comparison operator.

1250 sort). Typically, delegation and prototyping languages also have "part

sources

43 This section does not cite any references or sources. Please help improve this section by adding citations to reliable sources. Unsourced material may be challenged and removed. (August 2009)

1228 efficiency tradeoff), and sources can cause inlining and create source code

spiral

784 Boehm's seminal work on the Spiral Model:

791 software development. [Boehm 86] presents a seminal spiral life-cycle model

812 [Author's note: The spiral model is often incremental and may waterfall if

spring

1374 Spring (Sun, written in C++)

1376 For the Spring Papers (free), Contact:

1487 as a book. This book should be out in the spring of 1995.

stack's

246 data and member functions) may be accessed from anywhere. A Stack's Push and

248 a class. A Stack's representation, such as a list or array, will usually be

250 within subclasses (also called derived classes). A Stack's representation

store

63 Both object-oriented programming and relational database management systems (RDBMSs) are extremely common in software today. Since relational databases don't store objects directly (though some RDBMSs have object-oriented features to approximate this), there is a general need to bridge the two worlds. The problem of bridging object-oriented programming accesses and data patterns with relational databases is known as Object-Relational impedance mismatch. There are a number of approaches to cope with this problem, but no general solution without downsides.[20] One of the most common approaches is object-relational mapping, as found in libraries like Java Data Objects and Ruby on Rails' ActiveRecord.

1325 store with a DBMS.

2401 c) Value semantics store objects rather than references, inhibiting data

stores

1331 having the longest. Persistent object stores do not support query or

1796 stores, and warehousing and distribution operations."

1945 easily integrate Orbix applications with existing data stores be they

strategies

520 strategies or renaming, and most consider MI to be highly desirable. See the

2300 4: Libraries with different deallocation strategies are often

2406 management strategies are difficult to use with each other.

strategy

16 More recently, a number of languages have emerged that are primarily object-oriented yet compatible with procedural methodology, such as Python and Ruby. Probably the most commercially important recent object-oriented languages are Visual Basic.NET (VB.NET) and C#, both designed for Microsoft's .NET platform, and Java, developed by Sun Microsystems. Both frameworks show the benefit of using OOP by creating an abstraction from implementation in their own way. VB.NET and C# support cross-language inheritance, allowing classes defined in one language to subclass classes defined in the other language. Developers usually compile Java to bytecode, allowing Java to run on any operating system for which a Java virtual machine is available. VB.NET and C# make use of the Strategy pattern to accomplish cross-language inheritance, whereas Java makes use of the Adapter pattern[citation needed].

61 Behavioral patterns : Chain-of-responsibility pattern, Command pattern, Interpreter pattern, Iterator pattern, Mediator pattern, Memento pattern, Observer pattern, State pattern, Strategy pattern, Template method pattern, Visitor pattern.

1748 overall distributed-computing strategy, which is designed to give customers

structural

60 Structural patterns : Adapter pattern, Bridge pattern, Composite pattern, Decorator pattern, Facade pattern, Flyweight pattern, Proxy pattern

483 Inheritance also provides for code and structural reuse. In the above Computer

2663 dynamic testing, including: functional testing, structural

studies

1430 Here are some comparison studies posted to the net:

2497 Doong, Roong-Ko and Phyllis G. Frankl, "Case Studies on Testing

2518 To be Presented at the IBM Center for Advanced Studies Fall

subset

879 inheritance, and dynamic typing in 1967 (in addition to its Algol-60 subset).

983 in the subtype (subtype is subset of supertype). Cardelli and Wegner view

984 classes as sets of objects (resulting in subtype objects are a subset of

successful

12 In the 1970s, Kay's Smalltalk work had influenced the Lisp community to incorporate object- based techniques that were introduced to developers via the Lisp machine. Experimentation with various extensions to Lisp (like LOOPS and Flavors introducing multiple inheritance and mixins), eventually led to the Common Lisp Object System (CLOS, a part of the first standardized object-oriented programming language, ANSI Common Lisp), which integrates functional programming and object-oriented programming and allows extension via a Meta- object protocol. In the 1980s, there were a few attempts to design processor architectures that included hardware support for objects in memory but these were not successful. Examples include the Intel iAPX 432 and the Linn Smart Rekursiv.

41 Attempts to find a consensus definition or theory behind objects have not proven very successful (however, see Abadi & Cardelli, A Theory of Objects[18] for formal definitions of many OOP concepts and constructs), and often diverge widely. For example, some definitions focus on mental activities, and some on program structuring. One of the simpler definitions is that OOP is the act of using "map" data structures or arrays that can contain functions and pointers to other maps, all with some syntactic and scoping sugar on top. Inheritance can be performed by cloning the maps (sometimes called "prototyping"). OBJECT:=>> Objects are the run time entities in an object-oriented system. They may represent a person, a place, a bank account, a table of data or any item that the program has to handle.

64 There are also object databases that can be used to replace RDBMSs, but these have not been as technically and commercially successful as RDBMSs.

suitable

1886 suitable for use in large scale commercial systems and embedded

2646 collections, or numbers. It is not suitable for testing user interface

2660 operation. Cantata is suitable for testing software written in

summary

2333 This is an excellent summary of the state of the art in GC algorithms. This

2435 Resource Summary

2442 This is a summary of resources on the Testing of Object-Oriented

supertype

982 the same applies because all operations required by the supertype are present

983 in the subtype (subtype is subset of supertype). Cardelli and Wegner view

985 supertype objects, or an extensional view), as contrasted with a feature based

syntax

622 (messages) equivalent. Functional syntax was chosen "in order to minimize the

2364 performance than GC, awkward syntax, and poor semantics, which typically

2697 C and C++ called MetaC. It also dones some syntax checking and memory

teltech

2559 Object Oriented Systems, M.P.R Teltech Ltd. A poster at the

2564 Overview. Techical Report TR92-0656, MPR Teltech Ltd., October

2640 Report TR92-0655, MPR Teltech Ltd., September 1992.

tester

2643 which includes a simple Tester class written by Bruce Samuelson

2648 includes Tree classes, Tester itself, and subclasses of Tester that are

townsend

2562 through townsend@mprgate.mpr.ca.

2691 contact Paul Townsend, townsend@mprgate.mpr.ca.

track

1116 inherent types of polymorphic objects, keeping track of the types of objects at

2306 6: Because keeping track of storage is extra work, programmers often

2399 support long-lived data and keep track of ownership of data shared by

trademarks

2245 trademarks of SUITESOFTWARE. All other products and product names are

2246 copyrighted by, trademarks of, or registered trademarks of their

trellis

1007 They refer to this as "best-fitting" types [Black 86]. The original Trellis

1199 [Raj 89], original trellis

1285 Trellis

typechecking

176 static typechecking requirements are dropped. See section 2.5.

1074 function pointers with static typechecking in the base class, and filling them

1225 nature, which is an advantage for strong typechecking but a potential

type-safe

315 programs (no Meta-Class except for in the compiler and perhaps for type-safe

1158 values. This can insure type-safe programming. However, the representation of

1177 restriction is somewhat less type-safe, because accidental matches of method

ungar

188 prototyping languages [Kim 89, ch3; Ungar 87, Sciore 89] have a more

408 is-a-kind-of (inheritance) are merged into one [Ungar 87, Madsen 93, Sciore

461 [Ungar 87].

unit

94 unit, or entity, either real or abstract, with a well-defined role in the

2501 Fiedler, Steven P., "Object-Oriented Unit Testing", Hewlett-Packard

2664 testing, unit testing and integration testing. Cantata has been

utility

72 A number of well-known researchers and programmers have analysed the utility of OOP. Here is an incomplete list:

124 Component Objects - Utility and Implementation hiding objects

125 Utility - Set, Array, ...

variant

162 roughly equivalent to a loosely coupled variant record, with derived classes

163 as variant parts and with multiple-inheritance concatenating several records

171 switch statement on variant parts with a single call, reducing code size

variety

1037 oriented programming". Furthermore, the ability to call a variety of

1752 distributed computing. HP provides a wide variety of distributed-computing

2122 Variety may make life more interesting, but it only complicates the

vendor

1561 end-user or vendor, can become a member of this body. Administrative

2231 underlying vendor in order to process requests. From the user's

2471 As soon as one major class library vendor starts to ship real test code

verification

2499 Testing, Analysis, and Verification (TAV4), 1991, ACM, Inc.,

2509 Graham, J.A., Drakeford, A.C.T., Turner, C.D. 1993. The Verification,

2543 Leavens, G. T., "Modular Specification and Verification of

visualworks

1799 Smalltalk. This toolset works with VisualWorks from ParcPlace Systems to

1808 VisualWorks 2.0 is released (expected within two months.)

2650 4.1 and VisualWorks 1.0). To get it ftp the file

voice

2451 voice: 415

2693 voice: 1-415-957-1441, email: info@soft.com) has a coverage tool for C++

2696 San Jose, CA 95128, voice: 1-408-298-3824 ) has a coverage tool for

w

856 Humphrey, W., Snyder, T. and Willis, R. "Software Process Improvement at

938 C+W refine Strachey's definition by adding "inclusion polymorphism" to model

1004 ("bounded quantification" by C+W. C+W's parameters are subtype polymorphic

waterfall

778 Universal Process Model roughly corresponds to the Waterfall Model [Royce 70].

783 also provides the following critisisms on the Waterfall Model which had led to

812 [Author's note: The spiral model is often incremental and may waterfall if

winter

1419 Winter Partners (OSMOSYS) [Winter Partners]

1466 Hood, Coad and Yourdon, Winter Partners, Shlaer and Mellor, Jacobson,

wong

2558 Murphy, G.C., Wong, P. 1992, Towards a Testing Methodology for

2563 Murphy, G. and P. Wong. Object-Oriented Systems Testing Methodology: An

2639 Wong, P. Automated Class Exerciser (ACE) User's Guide. Technical

workstations

1805 modification on HP, Sun and IBM UNIX(R) system-based workstations. They

1834 HP Apollo 9000 Series 700 workstations and HP 9000 Series 800 business

1856 Objective-C, and C++, and runs on most Unix workstations. RDOM is currently

xerox

11 The Smalltalk language, which was developed at Xerox PARC (by Alan Kay and others) in the 1970s, introduced the term object-oriented programming to represent the pervasive use of objects and messages as the basis for computation. Smalltalk creators were influenced by the ideas introduced in Simula 67, but Smalltalk was designed to be a fully dynamic system in which classes could be created and modified dynamically rather than statically as in Simula 67.[9] Smalltalk and with it OOP were introduced to a wider audience by the August 1981 issue of Byte Magazine.

1671 parcftp.parc.xerox.com:

2342 parcftp.xerox.com

york

2496 Science Conference, ACM, Inc., New York, NY, 1990, pp. 161-165.

2500 New York, NY, 1991, pp. 165-177.

2545 Love, Tom. Object Lessons. SIGS Books, 588 Broadway #604, New York, NY

accepted

45 Simula (1967) is generally accepted as the first language to have the primary features of an object-oriented language. It was created for making simulation programs, in which what came to be called objects were the most important information representation. Smalltalk (1972 to 1980) is arguably the canonical example, and the one with which much of the theory of object-oriented programming was developed. Concerning the degree of object orientation, following distinction can be made:

1181 templates), as any method matching a required signature is accepted,

accomplish

16 More recently, a number of languages have emerged that are primarily object-oriented yet compatible with procedural methodology, such as Python and Ruby. Probably the most commercially important recent object-oriented languages are Visual Basic.NET (VB.NET) and C#, both designed for Microsoft's .NET platform, and Java, developed by Sun Microsystems. Both frameworks show the benefit of using OOP by creating an abstraction from implementation in their own way. VB.NET and C# support cross-language inheritance, allowing classes defined in one language to subclass classes defined in the other language. Developers usually compile Java to bytecode, allowing Java to run on any operating system for which a Java virtual machine is available. VB.NET and C# make use of the Strategy pattern to accomplish cross-language inheritance, whereas Java makes use of the Adapter pattern[citation needed].

2154 The DOME system can accomplish this complex task because it offers:

ace

2639 Wong, P. Automated Class Exerciser (ACE) User's Guide. Technical

2689 ACE (Automated Class Exerciser) which is available under non-disclosure

achieved

345 Meta-Meta-Class, ... Closure can be achieved with an instance-of loop, as with

1071 usage must have a consistent way of accessing these functions, as achieved thru

acs

1192 similar to subtype polymorphism; however, ACs require type compatible classes

1193 to inherit from them, providing a subclass polymorphism facility, and ACs can

actions

9 An object-oriented program may thus be viewed as a collection of interacting objects, as opposed to the conventional model, in which a program is seen as a list of tasks (subroutines) to perform. In OOP, each object is capable of receiving messages, processing data, and sending messages to other objects. Each object can be viewed as an independent "machine" with a distinct role or responsibility. The actions (or "methods") on these objects. The terms "objects" and "oriented" in something like the modern sense of object- oriented programming seem to make their first appearance at MIT in the late 1950s and early 1960s. In the environment of the artificial intelligence group, as early as 1960, "object" could refer to identified items (LISP atoms) with properties (attributes); Alan Kay was later to cite a detailed understanding of LISP internals as a strong influence on his thinking in 1966.[3] Another early MIT example was Sketchpad created by Ivan Sutherland in 1960-61; in the glossary of the 1963 technical report based on his dissertation about Sketchpad, Sutherland defined notions of "object" and "instance" (with the class concept covered by "master" or "definition"), albeit specialized to graphical interaction. Also, an MIT ALGOL version, AED-0, linked data structures ("plexes", in that dialect) directly with procedures, prefiguring what were later termed "messages", "methods" and "member functions".

68 nouns) before actions (methods

actionscript

54 ECMAScript language. JavaScript is perhaps the best known prototype- based programming language, which employs cloning from prototypes rather than inheriting from a class. Another scripting language that takes this approach is Lua. Earlier versions of ActionScript (a partial superset of the ECMA-262 R3, otherwise known as ECMAScript) also used a prototype-based object model. Later versions of ActionScript incorporate a combination of classification and prototype-based object models based largely on the currently incomplete ECMA-262 R4 specification, which has its roots in an early JavaScript 2 Proposal. Microsoft's JScript.NET also includes a mash-up of object models based on the same proposal, and is also a superset of the ECMA-262 R3 specification.

activation

2068 - Dynamic Service Activation - provides a mechanism for

2069 object activation when method invocations are required,

activities

41 Attempts to find a consensus definition or theory behind objects have not proven very successful (however, see Abadi & Cardelli, A Theory of Objects[18] for formal definitions of many OOP concepts and constructs), and often diverge widely. For example, some definitions focus on mental activities, and some on program structuring. One of the simpler definitions is that OOP is the act of using "map" data structures or arrays that can contain functions and pointers to other maps, all with some syntactic and scoping sugar on top. Inheritance can be performed by cloning the maps (sometimes called "prototyping"). OBJECT:=>> Objects are the run time entities in an object-oriented system. They may represent a person, a place, a bank account, a table of data or any item that the program has to handle.

1599 oriented product announcements. All OMG activities and the

ad

839 Level 1: Initial: Every project is handled differently; ad hoc and chaotic.

948 |-- ad hoc --|

additions

1903 additions:

2438 Last revised on 93.10.27. The most notable change is in the additions

administrative

1561 end-user or vendor, can become a member of this body. Administrative

1774 Management Facility (DOMF), object services, developers' and administrative

adts

241 methodology clearly specifies class-like encapsulation (Adts).

544 These languages support abstract data types (Adts) and not classes, which

advantages

4 Objects are used in software development to implement abstract data structures, by bringing together the data components with the procedures that manipulate them. Objects in object- oriented programming are key in the concept of inheritance; thereby improving program reliability[attribution needed], simplification of software maintenance[attribution needed], the management of libraries, and the division of work in programmer teams. Object-oriented programming languages are generally designed to exploit and enforce these potential advantages of the object model. Objects can also make it possible to handle very disparate objects by the same piece of code, as long as they all have the proper method. Simple, non-OOP programs may be one "long" list of statements (or commands). More complex programs will often group smaller sections of these statements into functions or subroutines each of which might perform a particular task. With designs of this sort, it is common for some of the program's data to be 'global', i.e. accessible from any part of the program. As programs grow in size, allowing any function to modify any piece of data means that bugs can have wide-reaching effects.

1224 While generics have many advantages, typical limitations include a static

affecting

358 differentially without affecting them and their extant objects. Thus, many

1092 a system without affecting existing code and eliminates switch statements.

agreement

1966 agreement to align their implementations of CORBA. The two companies

2690 agreement. It is not currently for sale. If you are interested,

alan

9 An object-oriented program may thus be viewed as a collection of interacting objects, as opposed to the conventional model, in which a program is seen as a list of tasks (subroutines) to perform. In OOP, each object is capable of receiving messages, processing data, and sending messages to other objects. Each object can be viewed as an independent "machine" with a distinct role or responsibility. The actions (or "methods") on these objects. The terms "objects" and "oriented" in something like the modern sense of object- oriented programming seem to make their first appearance at MIT in the late 1950s and early 1960s. In the environment of the artificial intelligence group, as early as 1960, "object" could refer to identified items (LISP atoms) with properties (attributes); Alan Kay was later to cite a detailed understanding of LISP internals as a strong influence on his thinking in 1966.[3] Another early MIT example was Sketchpad created by Ivan Sutherland in 1960-61; in the glossary of the 1963 technical report based on his dissertation about Sketchpad, Sutherland defined notions of "object" and "instance" (with the class concept covered by "master" or "definition"), albeit specialized to graphical interaction. Also, an MIT ALGOL version, AED-0, linked data structures ("plexes", in that dialect) directly with procedures, prefiguring what were later termed "messages", "methods" and "member functions".

11 The Smalltalk language, which was developed at Xerox PARC (by Alan Kay and others) in the 1970s, introduced the term object-oriented programming to represent the pervasive use of objects and messages as the basis for computation. Smalltalk creators were influenced by the ideas introduced in Simula 67, but Smalltalk was designed to be a fully dynamic system in which classes could be created and modified dynamically rather than statically as in Simula 67.[9] Smalltalk and with it OOP were introduced to a wider audience by the August 1981 issue of Byte Magazine.

algorithms

2323 storage deallocation is probably as high as GC. GC algorithms are

2333 This is an excellent summary of the state of the art in GC algorithms. This

alternatives

782 (see below) and discusses other alternatives to the task oriented models. He

1259 There are many alternatives in OO. Emerald

ambiguity

392 causes an ambiguity error iff more than one parent has match, CLOS creates

437 and by accessing the first signature match (or ambiguity) encountered for

ami

865 software quality and ami working group in Europe helping to creat the ISO

867 the CMM. To join the ami mailing list email to:

annual

2495 Software Systems", Proceedings of the 18th ACM Annual Computer

2531 at the 10th Annual Pacific Northwest Software Quality Conference,

anon

1283 www.sigs.com, See Anon FTP)

1925 See Appendix E:65 for a complete description and anon FTP info.

api

1663 API only), NetWare (planned, Novell owns part of HyperDesk).

1726 CORBA-compliant DOMS. Includes a GUI API driver for prototyping and

appears

97 definition appears on pg 54). Booch goes on to describe these definitions

932 polymorphism is obtained when a function works, or appears to work, on several

applicable

864 often cited model. There is also an ISO 9000 standard [ISO] applicable to

954 Polymorphic Types: types whose operations are applicable to operands of more

application's

2134 would have been provided by the application's native operating

2234 the application's logical view of the environment into the

april

57 Design Patterns: Elements of Reusable Object-Oriented Software is an influential book published in 1995 by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, sometimes casually called the "Gang of Four". Along with exploring the capabilities and pitfalls of object-oriented programming, it describes 23 common programming problems and patterns for solving them. As of April 2007, the book was in its 36th printing.

2502 Journal, April, 1989, pp. 69-74.

arbitrary

235 Some languages permit arbitrary access to objects and allow methods to be

2308 arbitrary restrictions on input data which can cause failure when

arch

126 Impl. Hiding - Distr. Arch., specific DBMS, OS

1613 > The Common Object Request Broker: Arch. and Spec. (Corba)

area

725 "An investigation of a specific application area that seeks to identify the

727 within this area. - Dan McNicholl

areas

1517 techniques. To fill out this reference model, four areas of

1550 Interest Groups for discussion of possible standards in other areas. These

arises

443 the earlier flavors. C++ declares an error iff a conflict arises, but a

1179 this issue in Emerald. The same issue arises in parametric polymorphism

armstrong

18 A survey by Deborah J. Armstrong of nearly 40 years of computing literature identified a number of "quarks", or fundamental concepts, found in the strong majority of definitions of OOP.

78 Joe Armstrong, the principal inventor of Erlang, is quoted as saying "The problem with object-oriented languages is they've got all this implicit environment that they carry around with them. You wanted a banana but what you got was a gorilla holding the banana and the entire jungle."

artificial

9 An object-oriented program may thus be viewed as a collection of interacting objects, as opposed to the conventional model, in which a program is seen as a list of tasks (subroutines) to perform. In OOP, each object is capable of receiving messages, processing data, and sending messages to other objects. Each object can be viewed as an independent "machine" with a distinct role or responsibility. The actions (or "methods") on these objects. The terms "objects" and "oriented" in something like the modern sense of object- oriented programming seem to make their first appearance at MIT in the late 1950s and early 1960s. In the environment of the artificial intelligence group, as early as 1960, "object" could refer to identified items (LISP atoms) with properties (attributes); Alan Kay was later to cite a detailed understanding of LISP internals as a strong influence on his thinking in 1966.[3] Another early MIT example was Sketchpad created by Ivan Sutherland in 1960-61; in the glossary of the 1963 technical report based on his dissertation about Sketchpad, Sutherland defined notions of "object" and "instance" (with the class concept covered by "master" or "definition"), albeit specialized to graphical interaction. Also, an MIT ALGOL version, AED-0, linked data structures ("plexes", in that dialect) directly with procedures, prefiguring what were later termed "messages", "methods" and "member functions".

76 Alexander Stepanov suggested that OOP provides a mathematically-limited viewpoint and called it "almost as much of a hoax as Artificial Intelligence. I have yet to see an interesting piece of code that comes from these OO people. In a sense, I am unfair to AI: I learned a lot of stuff from the MIT AI Lab crowd, they have done some really fundamental work....".

assigned

2 In the domain of object-oriented programming an object is usually taken to mean an ephemeral compilation of attributes (object elements) and behaviors (methods or subroutines) encapsulating an entity. In this way, while primitive or simple data types are still just single pieces of information, object-oriented objects are complex types that have multiple pieces of information and specific properties (or attributes). Instead of merely being assigned a value, (like int =10), objects have to be "constructed". In the real world, if a Ford Focus is an "object" - an instance of the car class, its physical properties and its function to drive would have been individually specified. Once the properties of the Ford Focus "object" had been specified into the form of the car class, it can be endlessly copied to create identical objects that look and function in just the same way. As an alternative example, animal is a superclass of primate and primate is a superclass of human. Individuals such as Joe Bloggs or John Doe would be particular examples or 'objects' of the human class, and consequently possess all the characteristics of the human class (and of the primate and animal superclasses as well).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]