home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 June / SIMTEL_0692.cdr / msdos / ddjmag / ddj8705.arc / TELLOLST.LST < prev   
File List  |  1987-04-10  |  2KB  |  57 lines

  1.  
  2.  
  3. Listing 1: Composite Objects in SCOOPS
  4.  
  5. ; (C) Copyright 1987 Ernest R. Tello
  6.  
  7. (define-class composite-object
  8.           (classvars class-part-name class-part-num)
  9.           (instvars (part-names (active parts get-parts add-part))
  10.                     (numbers-of-parts (active '#-parts num-parts more-parts)))
  11.           (options
  12.             (gettable-variables class-part-name part-names numbers-of-parts)
  13.             settable-variables
  14.             inittable-variables))
  15.  
  16. (define human-body-parts '() )
  17.   (putprop 'human-body-parts 1 'head)
  18.   (putprop 'human-body-parts 1 'neck)
  19.   (putprop 'human-body-parts 2 'arms)
  20.   (putprop 'human-body-parts 2 'hands)
  21.   (putprop 'human-body-parts 1 'trunk)
  22.   (putprop 'human-body-parts 2 'legs)
  23.   (putprop 'human-body-parts 2 'feet)
  24.  
  25. (define (num-parts p-list)
  26.   (princ p-list))
  27.  
  28. (define part-map (proplist 'human-body-parts))
  29.  
  30. (define-class body
  31.      (classvars (class-part-name 'body-parts)(class-part-num 'human-body-parts))
  32.      (mixins composite-object))
  33.  
  34. (define body-parts '(head neck arms hands trunk legs feet))
  35.  
  36. (define-method (composite-object put-cpart-name) (new-part)
  37.                (set! body-parts
  38.                      (append (eval (get-class-part-name)) (list new-part))))
  39.  
  40. (define (add-part new-part)
  41.   (append!  (get-class-part-name) (list new-part)))
  42.  
  43. (define (get-parts val)
  44.   (princ val))
  45.  
  46.  
  47.  (define my-body
  48.   (make-instance body
  49.                  'part-names body-parts
  50.                  'numbers-of-parts part-map ))
  51.  
  52. (compile-class composite-object)
  53.  
  54. (compile-class body)
  55.  
  56.  
  57.