Using Classes - PowerPoint PPT Presentation

1 / 15
About This Presentation
Title:

Using Classes

Description:

To create an instance of Bus, you use the make-instance function as follows: ... (setq bus1 (make-instance Bus)) Reading/Writing slot values (1) ... – PowerPoint PPT presentation

Number of Views:33
Avg rating:3.0/5.0
Slides: 16
Provided by: ckho4
Category:
Tags: classes | using

less

Transcript and Presenter's Notes

Title: Using Classes


1
Using Classes
  • Lisp also supports the Object-Oriented paradigm.
    The process of defining classes in Lisp is
    similar to how you you define structures.
  • The syntax of defining classes are as follows
  • (defclass Class_name (Superclass)
  • (Slot_definition)
  • Class_option
  • )

2
Slot definition
  • Slots are properties belonging to the class.
  • Slots are lists containing
  • Slot name, optionally followed by
  • Slot option keyword and associated value
  • You can provide an initial/default value of a
    slot, or you can set the value of a slot in your
    program during run-time.
  • Lisp allows you the flexibility of specifying how
    you would want to access slot values.

3
A simple class
  • Here is a simple class defined in Lisp.
  • (defclass Bus (Vehicle)
  • ( (Make)
  • (Color)
  • (Year)
  • )
  • (documentation The bus class)
  • )

4
Class Vehicle
  • (defclass Vehicle ()
  • ()
  • )
  • This is the superclass for the Bus class. You
    would have to define this superclass first before
    defining Bus.
  • Vehicle is an empty class. It specifies no
    slots.

5
Creating objects
  • To create an instance of Bus, you use the
    make-instance function as follows
  • (setq bus1 (make-instance Bus))
  • Recall that Bus has 3 slots , namely make, color
    and year. Now lets look at some keywords that
    are used to initialize, read and write the values
    of these slots.

6
Initialize Slot Value
  • To provide an initial value for a slot, use
    initform
  • (defclass Bus (Vehicle)
  • ( (Make initform Ford)
  • (Color initform Blue)
  • (Year initform 1989)
  • )
  • )
  • (setq bus1 (make-instance Bus))

7
Reading/Writing slot values (1)
  • To read slot values, you can use the keyword
    reader, which specifies the name of the function
    that will read the slot, while writer specifies
    the name of the function to write to the slots.
    Continuing with the previous example
  • (defclass Bus (Vehicle)
  • ( (Make reader make writer Set-Make)
  • (Color reader color writer Set-Color)
  • (Year reader year writer Set-Year)
  • )
  • )
  • (setq bus1 (make-instance Bus))

8
Reading/Writing slot values (2)
  • Now lets say that, we want to write values to
    the slots Color, Year and Make, the code below
    will perform this
  • (Set-Color yellow bus1)
  • (Set-Make Ford bus1)
  • (Set-Year 1989 bus1)
  • To read the value of those slots
  • (Color bus1)
  • (Make bus1)
  • (Year bus1)

9
Using accessor (1)
  • For each slot, specifying one function for
    reading its value and another function to write
    its value will be inefficient if there are a lot
    of slots.
  • It is better to just specify ONE function that is
    able to perform both read and write for a slot.
    You can do this using the accessor keyword.
  • Going back to our running example

10
Using accessor (2)
  • (defclass Bus ()
  • ( (Make accessor make)
  • (Color accessor color)
  • (Year accessor year)
  • )
  • )
  • (setq bus1 (make-instance Bus))
  • To set the slot Year to 2000, do this
  • (setf (year bus1) 2000)
  • Notice that setf is used to assign the desired
    value to the slot.

11
Using accessor (3)
  • To read the value of the slot Year, do the
    following
  • (year bus1)
  • Try this for the remaining slots.

12
initarg (1)
  • This is a way to pass in any initialization
    values for the slots during make-instance. The
    value specified using initarg will override the
    value specified using initform
  • (defclass Bus ()
  • ( (Make accessor make)
  • (Color accessor color)
  • (Year accessor year initarg year
  • initform 1989)
  • )
  • )

13
initarg (2)
  • To pass in an initial value of year while
    creating an instance of Cars, do this
  • (setq bus1 (make-instance Bus
  • Year 2000))

14
Shared slot for instances of a class (1)
  • You can use the keyword allocation to specify
    whether a slots value is specific to each
    instance of the class, or the slots value is
    shared among all instances of the class.
  • Now lets create a subclass for our Bus as
    follows
  • (defclass SchoolBus (Bus)
  • ((MaxSpeed accessor MaxSpeed initform
    320
  • allocation class))
  • )

15
Shared slot for instances of a class (2)
  • (setq schoolbus1 (make-instance SchoolBus))
  • (setq schoolbus2 (make-instance SchoolBus))
  • (MaxSpeed schoolbus1)
  • (MaxSpeed schoolbus2)
  • (setf (MaxSpeed schoolbus1) 1000)
  • (MaxSpeed schoolbus1)
  • (MaxSpeed schoolbus2)
Write a Comment
User Comments (0)
About PowerShow.com