Predicate Classes

Predicate classes are a new linguistic construct designed to complement normal classes in object-oriented languages. Like a normal class, a predicate class has a set of superclasses, methods, and instance variables. However, unlike a normal class, an object is automatically an instance of a predicate class whenever it satisfies a predicate expression associated with the predicate class. The predicate expression can test the value or state of the object, thus supporting a form of implicit property-based classification that augments the explicit type-based classification provided by normal classes. By associating methods with predicate classes, method lookup can depend not only on the dynamic class of an argument but also on its dynamic value or state. If an object is modified, the property-based classification of an object can change over time, implementing shifts in major behavior modes of the object. A version of predicate classes has been designed and implemented in the context of the Cecil language.

[1]  Craig Chambers,et al.  The design and implementation of the self compiler, an optimizing compiler for object-oriented programming languages , 1992 .

[2]  Phillip M. Yelland Experimental Classification Facilities for Smalltalk , 1992, OOPSLA.

[3]  Yves Caseau,et al.  Attaching Second-Order Types to Methods in an Object-Oriented Language , 1993, ECOOP.

[4]  William R. Cook,et al.  A Proposal for Making Eiffel Type-Safe , 1989, Comput. J..

[5]  李幼升,et al.  Ph , 1989 .

[6]  Simon L. Peyton Jones,et al.  Report on the programming language Haskell: a non-strict, purely functional language version 1.2 , 1992, SIGP.

[7]  David A. McAllester,et al.  Boolean classes , 1986, OOPLSA '86.

[8]  Robert E. Strom,et al.  Typestate: A programming language concept for enhancing software reliability , 1986, IEEE Transactions on Software Engineering.

[9]  Craig Chambers,et al.  An efficient implementation of SELF, a dynamically-typed object-oriented language based on prototypes , 1989, OOPSLA '89.

[10]  WadlerPhilip,et al.  Report on the programming language Haskell , 1992 .

[11]  Robin Milner,et al.  Definition of standard ML , 1990 .

[12]  David S. Touretzky,et al.  The Mathematics of Inheritance Systems , 1984 .

[13]  Craig Chambers,et al.  Object-Oriented Multi-Methods in Cecil , 1992, ECOOP.

[14]  Daniel M. Yellin,et al.  Hermes - a language for distributed computing , 1991, Prentice Hall series in innovative technology.

[15]  John G. Hosking,et al.  Multi-Methods in a Statically-Typed Programming Language , 1991, ECOOP.

[16]  Daniel G. Bobrow,et al.  Common lisp object system specification , 1988, SIGP.

[17]  Yves Caseau Some original features of the LAURE language , 1992, OOPSLA '92.

[18]  L. A. Stein,et al.  A unified methodology for object-oriented programming , 1991 .

[19]  Bertrand Meyer,et al.  Eiffel: The Language , 1991 .

[20]  Craig Chambers,et al.  The cecil language: specification and rationale , 1993 .

[21]  Wilf R. LaLonde,et al.  An exemplar based Smalltalk , 1986, OOPLSA '86.

[22]  V. Rich Personal communication , 1989, Nature.

[23]  Randall B. Smith,et al.  Self: The power of simplicity , 1987, OOPSLA 1987.

[24]  Randall B. Smith,et al.  SELF: The power of simplicity , 1987, OOPSLA '87.

[25]  Philip Wadler,et al.  Views: a way for pattern matching to cohabit with data abstraction , 1987, POPL '87.

[26]  Craig Chambers,et al.  Organizing programs without classes , 1991, LISP Symb. Comput..

[27]  David Robson,et al.  Smalltalk-80: The Language and Its Implementation , 1983 .

[28]  Philip M. Yelland Experimental classification facilities for Smalltalk , 1992, OOPSLA 1992.

[29]  Yves Caseau Some original features of the LAURE language , 1993, OOPS Messenger.

[30]  Craig Chambers,et al.  Making pure object-oriented languages practical , 1991, OOPSLA '91.

[31]  Brad A. Myers,et al.  Declarative programming in a prototype-instance system: object-oriented programming without writing methods , 1992, OOPSLA '92.