The object-oriented paradigm has influenced software development for decades now and has found its place in the mainstream of CS curricula. Its facility for improving program organization is well known and today's programmers are expected to readily employ its features when they apply. Few programmers, and even fewer CS curricula, however, are cognizant of some of OOP's more powerful aspects. Polymorphism, for example, does not only apply to one class hierarchy, hence <i>multimethods</i> are part of the OOP repertoire. Software designers should also understand how method pre-and-post conditions interact with inheritance, since class interfaces constitute a <i>contract</i> with client programs. Finally, it is important to understand that the features of object-oriented programming do not explicitly require statically defined classes. In this paper we explore multimethods, contract programming, and implementing objects without an explicit class type, with examples in popular, modern programming languages.
%0 Journal Article
%1 Allison:2011:ORS:2038836.2038846
%A Allison, Chuck
%A Liddle, Nathan
%C USA
%D 2011
%I Consortium for Computing Sciences in Colleges
%J J. Comput. Sci. Coll.
%K common.lisp oo programming
%P 77--84
%T OOP: the rest of the story
%U http://dl.acm.org/citation.cfm?id=2038836.2038846
%V 27
%X The object-oriented paradigm has influenced software development for decades now and has found its place in the mainstream of CS curricula. Its facility for improving program organization is well known and today's programmers are expected to readily employ its features when they apply. Few programmers, and even fewer CS curricula, however, are cognizant of some of OOP's more powerful aspects. Polymorphism, for example, does not only apply to one class hierarchy, hence <i>multimethods</i> are part of the OOP repertoire. Software designers should also understand how method pre-and-post conditions interact with inheritance, since class interfaces constitute a <i>contract</i> with client programs. Finally, it is important to understand that the features of object-oriented programming do not explicitly require statically defined classes. In this paper we explore multimethods, contract programming, and implementing objects without an explicit class type, with examples in popular, modern programming languages.
@article{Allison:2011:ORS:2038836.2038846,
abstract = {The object-oriented paradigm has influenced software development for decades now and has found its place in the mainstream of CS curricula. Its facility for improving program organization is well known and today's programmers are expected to readily employ its features when they apply. Few programmers, and even fewer CS curricula, however, are cognizant of some of OOP's more powerful aspects. Polymorphism, for example, does not only apply to one class hierarchy, hence <i>multimethods</i> are part of the OOP repertoire. Software designers should also understand how method pre-and-post conditions interact with inheritance, since class interfaces constitute a <i>contract</i> with client programs. Finally, it is important to understand that the features of object-oriented programming do not explicitly require statically defined classes. In this paper we explore multimethods, contract programming, and implementing objects without an explicit class type, with examples in popular, modern programming languages.},
acmid = {2038846},
added-at = {2012-01-11T12:18:18.000+0100},
address = {USA},
author = {Allison, Chuck and Liddle, Nathan},
biburl = {https://www.bibsonomy.org/bibtex/26b2600fcc71a1aebb2aa88c77ea5b355/ji},
description = {OOP},
interhash = {c2d13546cc9960da19cc1600d05de46e},
intrahash = {6b2600fcc71a1aebb2aa88c77ea5b355},
issn = {1937-4771},
issue = {2},
issue_date = {December 2011},
journal = {J. Comput. Sci. Coll.},
keywords = {common.lisp oo programming},
month = dec,
numpages = {8},
pages = {77--84},
publisher = {Consortium for Computing Sciences in Colleges},
timestamp = {2012-01-11T12:18:18.000+0100},
title = {OOP: the rest of the story},
url = {http://dl.acm.org/citation.cfm?id=2038836.2038846},
volume = 27,
year = 2011
}