(define Basic-Shapes (unit (import) (export Shape Rectangle Circle Translated) (define Shape (interface () draw)) (define Rectangle (class* object% (Shape) (width height) (public [draw (lambda (dc x y) (send dc draw-rectangle x y width height))]) (sequence (super-init)))) (define Circle (class* object% (Shape) (radius) (public [draw (lambda (dc x y) (send dc draw-ellipse (- x radius) (- y radius) (* 2 radius) (* 2 radius)))]) (sequence (super-init)))) (define Translated (class* object% (Shape) (orig-shape dx dy) (public [draw (lambda (dc x y) (send orig-shape draw dc (+ x dx) (+ y dy)))]) (sequence (super-init)))))) (define Union-Shape (unit (import Shape) (export Union) (define Union (class* object% (Shape) (left right) (public [draw (lambda (dc x y) (send left draw dc x y) (send right draw dc x y))]) (sequence (super-init)))))) (define Basic+Union-Shapes (compound-unit (import) (link [S (Basic-Shapes)] [US (Union-Shape (S Shape))]) (export (S Shape) (S Rectangle) (S Circle) (S Translated) (US Union))))
in context | contents |