home *** CD-ROM | disk | FTP | other *** search
-
-
-
-
-
-
-
-
-
-
-
- XLISP 2.0 OBJECTS PRIMER
-
-
- by
-
- Tim I Mikkelsen
-
-
- February 3, 1990
-
-
-
-
-
-
-
-
- Copyright (c) 1990 by Tim I. Mikkelsen. All Rights Reserved.
- No part of this document may be copied, reproduced or translated
- for commercial use without prior written consent of the author.
- Permission is granted for non-commercial use as long as this
- notice is left intact.
-
-
- ________________________________________________________________
-
-
- One of the features in the design of XLISP is object-oriented
- programming. This primer is intended to serve as a very brief
- introduction to the object facilities of the XLISP 2.0 dialect
- of LISP. Note that the object features of XLISP are not based
- on other existing object definitions in other LISP dialects. If
- you find problems in the primer, I'd appreciate hearing.
-
-
- Tim Mikkelsen
- 4316 Picadilly Drive
- Fort Collins, Colorado 80526
-
-
-
- PROGRAMMING STYLES
- ______________________________________________________________________________
-
-
- There are many programming paradigms (models). Some of the paradigms
- are procedural, functional, rule-based, declarative and object-oriented.
- A language can have aspects of one or many of these programming models.
-
-
- Procedure-Oriented
-
- The programming paradigm most people are familiar with is the procedural
- style. The primitives in procedural programming are: subroutines and
- data structures. Through these primitives, programmers have some
- limited abilities to share programs and program fragments. C and Pascal
- are examples of procedural languages. Some procedural languages (such
- as Modula and ADA) have extensions that provide for better sharing of
- code.
-
-
- Object-Oriented Programming
-
- Object-oriented programming is based on the primitives of objects,
- classes and messages. Objects are defined in terms of classes. Actions
- occur by sending a message to an object. An object's definition can be
- inherited from more general classes. Objective-C and C++ both are
- object-oriented dialects of the C language. Many dialects of LISP have
- some object oriented extension (Flavors, Common LOOPS, CLOS and others).
- There currently is standards work proceeding to add object-oriented
- programming to Common LISP.
-
-
- Object Oriented Programming
-
- So, the object-oriented programming model is based around the concepts
- of objects, classes and messages. An object is essentially a black box
- that contains internal state information. You send an object a message
- which causes the object to perform some operation. Objects are defined
- and described through classes.
-
- One aspect of an object is that you do not have to know what is inside -
- or how it works - to be able to use it. From a programming point of
- view, this is very handy. You can develop a series of objects for
- someone to use. If you need to change what goes on inside, the users of
- the objects should be unaware.
-
- Another aspect of objects is that of inheritance. You can build up new
- classes from existing classes by inheriting the existing class's
- functionality and then extending the new definition. For example, you
- can define a tool class (with various attributes) and then go about
- creating object instances tool-1, tool-2, and so on. You can also
- create new sub-classes of the tool class like power-tool. This is also
- very handy because you don't have to re-implement something if you can
- build it up from existing code.
-
-
-
-
- XLISP OBJECT-ORIENTED PROGRAMMING
- ______________________________________________________________________________
-
-
-
- XLISP OBJECT TERMINOLOGY
-
- There are, as previously mentioned, many different languages with
- object-oriented extensions and facilities. The terminology, operations
- and styles of these are very different. Some of the main definitions
- for XLISP's object-oriented extensions are:
-
- Object data type The OBJECT DATA TYPE is a built-in data
- type of XLISP. Members of the object
- data type are object instances and
- classes.
-
- Object instances An OBJECT INSTANCE is a composite
- structure that contains internal state
- information, methods (the code which
- respond to messages), a pointer to the
- object instance's defining class and a
- pointer to the object's super-class.
- XLISP contains no built-in object
- instances.
-
- Class objects A CLASS OBJECT is, essentially, the
- template for defining the derived object
- instances. A class object, although
- used differently from a simple object
- instance, is structurally a member of
- the object data type. It is also
- contains the linking mechanism that
- allows you to build class hierarchies
- (sub-classes and super-classes). XLISP
- contains two built-in class objects:
- OBJECT and CLASS.
-
- Message selector The MESSAGE SELECTOR is the symbol that
- is used to select a particular action
- (Method) from the object.
-
- Message The MESSAGE is the combination of the
- message selector and the data (if any)
- to be sent to the object.
-
- Method The METHOD is the actual code that gets
- executed when the object receives the
- Message.
-
-
-
- SENDING MESSAGES
-
- The mechanism for sending messages to XLISP objects is via the SEND
- function. It takes an object, a message selector and various optional
- arguments (depending on the message selector).
-
- The way that a user creates a new object is to send a :NEW message to a
- previously defined class. The result of this SEND will return an
- object, so this is normally preceded by a SETQ. The values shown in the
- examples that follow may not match what you see if you try this on your
- version of XLISP - this is not an error. The screens that are used in
- the various examples are similar to what you should see on your computer
- screen. The ">" is the normal XLISP prompt (the characters that follow
- the prompt is what you should type in to try these examples).
-
-
- ________________________________________________________________
- |
- | > (setq my-object (send object :new))
- | #<Object: #2e100>
- |________________________________________________________________
-
-
- The object created here is of limited value. Most often, you create a
- class object and then you create instances of that class. So in the
- following example, a class called MY-CLASS is created that inherits its
- definition from the a built-in CLASS definition. Then two instances are
- created of the new class.
-
- ________________________________________________________________
- |
- | > (setq my-class (send class :new '()))
- | #<Object: #27756>
- |
- | > (setq my-instance (send my-class :new))
- | #<Object: #27652>
- |
- | > (setq another-instance (send my-class :new))
- |#<Object: #275da>
- |________________________________________________________________
-
-
-
- CLASSES
-
- Previously, a :NEW message was used to create an object. The message
- used to see what is in an object is the :SHOW message.
-
- ________________________________________________________________
- |
- | > (send my-class :show)
- | Object is #<Object: #27756>, Class is #<Object: #23fe2>
- | MESSAGES = NIL
- | IVARS = NIL
- | CVARS = NIL
- | CVALS = NIL
- | SUPERCLASS = #<Object: #23fd8>
- | IVARCNT = 0
- | IVARTOTAL = 0
- | #<Object: #27756>
- |________________________________________________________________
-
-
-