In 2006, Deborah J. Armstrong published an article in which she attempts to address the fact that "we do not yet thoroughly
understand the fundamental concepts that define the OO approach."
Her contribution to a resolution of this problem was a meta-study of 239 published sources from 1966 to 2005, out of which "88 asserted that a
specific set of concepts characterize the OO approach." From these 88 sources, she further isolated "39
concepts ... comprising the OO approach." And of those 39 concepts, "eight were
identified by the majority of the sources:
- inheritance
- object
- class
- encapsulation
- method
- message passing
- polymorphism
- abstraction."
Armstrong then proceeds to give an overview of each of these eight core OO concepts. Her entire paper is freely available online, and is worth reading (and rereading) in full. Below is my own executive summary (after a few explanations concerning my own methodology).
For five of Armstrong's eight core concepts I have selected only a brief snippet that, at least to me, conveys the essential meaning. In two of these cases (
Inheritance and
Object), the snippets I have selected are not original to Armstrong, and for these I provide the source that Armstrong cites in her paper. In three other cases (
Method,
Message Passing, and
Polymorphism), the snippet I chose was Armstrong's own summary definition.
In two other cases (
Class and
Abstraction), I decided that, even in this briefest of overviews, a mere snippet wouldn't suffice, and so I quote all (or nearly all) of Armstrong's discussion of the given term.
Finally, in one case (
Encapsulation), I honestly did not find what Armstrong had to say especially enlightening. And so I chose a snippet from another source, Joel Murach's
Java Programming (4th edition).
Armstrong's full online paper is located here:
http://cacm.acm.org/magazines/2006/2/5991-the-quarks-of-object-oriented-development/fulltext. The full citation for Armstrong's paper is:
The quarks of object-oriented development
By Deborah J. Armstrong
Communications of the ACM, Vol. 49 No. 2, Pages 123-128
10.1145/1113034.1113040
The Eight Quarks of Object Orientation (a la Armstrong):
- Inheritance: "a relation between classes that allows for the definition
and implementation of one class to be based on that of other
existing classes [10]."
- Object: "an
object is as an instance of a class [1]."
- Class: " ... a class is a set of objects described by the same
declaration [8, 9] and is the
basic element of OO modeling. Some have conceptualized a class as
an encapsulation of data and procedures, which can be
instantiated in a number of objects [3]. Others
have defined a class as a set of objects that share a common
structure and common behavior [1]. A class does several things: at runtime it provides a
description of how objects behave in response to messages; during
development it provides an interface for the programmer to
interact with the definition of objects; in a running system it
is a source of new objects [8]. Based on these
definitions, a class is: a description of the organization and
actions shared by one or more similar objects."
- Encapsulation: "Encapsulation ... means the class controls which of its fields and methods can be accessed by other classes." Murach, Java Programming (4ed), p. 189
- Method: "a way to access, set
or manipulate an object's information."
- Message passing: "the process by which an
object sends data to another object or asks the other object to
invoke a method."
- Polymorphism: "the ability of different classes
to respond to the same message and each implement the method
appropriately."
- Abstraction: "The earliest application of structural
abstraction to programming languages
was in the 1950s with symbolic assemblers. Data abstraction is
possible in classical development, but it is enforced in the OO
approach [9]. Many authors define abstraction in
a generic sense as a mechanism that allows us to represent a
complex reality in terms of a simplified model so that irrelevant
details can be suppressed in order to enhance understanding
[4, 5, 12].
Others have conceptualized abstraction as the act of removing
certain distinctions between objects so that we can see
commonalities [6]. Based on these definitions,
abstraction is: the act of creating classes to simplify
aspects of reality using distinctions inherent to the
problem."
Finally, here are all of the references that Armstrong provides in her paper:
1. Booch, G.
Object Oriented Analysis and
Design with Applications. Benjamin/Cummings, Redwood City,
CA, 1994.
2. Byard, C. Object-oriented technology a
must for complex systems.
Computer Technology Review
10, 14 (1990), 15–20.
3. Dershem, H.L. and Jipping, M.J.
Programming Languages: Structures and Models. PWS
Publishing Company, Boston, MA, 1995.
4. Henderson-Sellers, B.
A Book of
Object-Oriented Knowledge. Prentice-Hall, Englewood Cliffs,
NJ, 1992.
5. Ledgard, H.
The Little Book of
Object-Oriented Programming. Prentice-Hall, Upper Saddle
River, NJ, 1996.
6. Morris, M.G., Speier, C., and Hoffer, J.A.
An examination of procedural and object-oriented systems analysis
methods: Does prior experience help or hinder performance?"
Decision Sciences 30, 1 (Winter 1999), 107–136.
7. Page-Jones, M. and Weiss, S. Synthesis: An
object-oriented analysis and design method.
American
Programmer 2, 7–8 (1989), 64–67.
8. Robson, D. Object-oriented software
systems.
Byte 6, 8 (Aug. 1981), 74–86.
9. Rosson, M. and Alpert, S.R. The cognitive
consequences of object-oriented design.
Human Computer
Interaction 5, 4 (1990), 345–379.
10. Stefik, M. and Bobrow, D.G.
Object-oriented programming: Themes and variations.
The AI
Magazine 6, 4 (Winter 1986), 40–62.
11. Wirfs-Brock, R.J. and Johnson, R.E.
Surveying current research in object-oriented design.
Commun.
ACM 33, 9 (Sept. 1990), 104–124.
12. Yourdon, E., Whitehead, K., Thomman, J.,
Oppel, K. and Nevermann, P.
Mainstream Objects: An Analysis
and Design Approach for Business. Yourdon Press, Upper Saddle
River, NJ, 1995.