PORK: CLOS-based Support for Modeling
PORK is an object system which brings a conventional object-oriented
language closer to the requirements of frame-based programming. It
only provides a very limited set of features (on top of the base
object system itself), and aims to achieve seamless integration with
conventional programming. The design of PORK draws from experience
with frame systems like CRL and KEE, and from the insight into frame
system design gained during the BEEF project.
PORK is implemented as a portable metalevel extension of the Common
Lisp Object System (CLOS). It extends CLOS by adding the following
concepts:
- Named objects; these simplify debugging (easier instance
reference, easier instance identification) and linked frame model
construction. Collections of named objects (called "namespaces") can
also be used as a low-level implementation vehicle for knowledge
bases.
- References to nonexisting named objects: programs can
manipulate objects that have not yet been created. This greatly
simplifies definition of complex linked frame models with circular
references.
- Slots with multiple values, and a mechanism for defining
an access interface to these.
- Automatic updating of inverse slots (these are similar to
CRL's inverse slots). Otherwise PORK behaves exactly like standard
CLOS, thus allowing PORK and CLOS code to be freely mixed. PORK also
has a metaobject protocol to allow the system to be extended.
Frame systems, in comparison to object-oriented programming systems
(OOPSs), often lack facilities for data hiding and support of
encapsulation. OOPSs typically support encapsulation, allowing object
manipulation through a well-defined function interface. Frame systems
seldom restrict slot access in any way.
As opposed to object-oriented programming systems, frame systems are
usually designed for representing knowledge, with the programming
aspect not necessarily considered very important. Object-oriented
programming systems in general are not adequate for knowledge-based
systems programming (see, for example, [Lassila
90]). Many attempts have been made to bring frame-based
programming closer to mainstream programming by adding object-oriented
programming features. PORK brings some of the features of frame
systems into the realm of mainstream object-oriented programming. PORK
achieves this by adding some useful features from frame systems into a
standard object-oriented programming language.
PORK was originally developed to address the object system needs of DITOPS,
a CLOS-based toolkit and class library for scheduling system development.
Platform Requirements
- Macintosh Common Lisp 2.0 (or newer)
- Lucid Common Lisp 4.1
- Franz Allegro Common Lisp 4.1, 4.2
- any CLtL2 or X3J13-compatible Common Lisp - with possibly some porting effort (typically package configurations are different)
PORK stands for
"Programmable Objects for
Representing Knowledge". PORK was
earlier called "Parsifal". In some sense, PORK is the long-awaited
Well-Done BEEF (go figure...).
Jump to --> ICL Lab home page |
Project home page
Ora Lassila <ora@cs.cmu.edu>