# Lab: Object-Oriented Programming

## Exercises

Start DrScheme.

### Exercise 1: Testing Switches

Test the switches created by the `make-switch` procedure from the reading. Here are a few possible instructions.

```> (define lamp-switch (make-switch))
> (define vacuum-cleaner-switch (make-switch))
> (lamp-switch ':show-position)
> (vacuum-cleaner-switch ':show-position)
> (lamp-switch ':toggle!)
> (lamp-switch ':show-position)
> (vacuum-cleaner-switch ':show-position)
> (lamp-switch ':toggle!)
> (vacuum-cleaner-switch ':toggle!)
> (lamp-switch ':show-position)
> (vacuum-cleaner-switch ':show-position)
```

### Exercise 2: A Single Tally Object

Define a one-field object, `tally`, that responds to exactly four messages:

• `':show-contents`,
• `':set-contents-to-zero!`,
• `':increment!`, which has the effect of increasing the number stored in the `contents` field by 1.
• `':decrement!`, which has the effect of decreasing the number stored in the `contents` field by 1.

The initial value of the field should be 0.

### Exercise 3: Making Generic Tallys

a. Define a `make-tally` procedure that constructs and returns objects similar to the `tally` object you defined in exercise 2.

b. Create two tally objects and demonstrate that they can be incremented and reset independently.

### Exercise 4: Tallys with Initial Values

Write a new `make-tally` procedure that allows the client to create new tallys with a specied initial value. For example, I might say that a starting grade is 90 with

```> (define grade (make-tally 90))
```

I would then increment and decrement it as students do good or bad work.

### Exercise 5: Monitored Tallys

a. Define a constructor procedure, `make-monitored-tally`, for objects similar to the `tally` objects from exercise 2 above, except that each such object keeps track of the total number of messages that it has received.

Hint: For this exercise, you will want to make a two-element vector. Element 0 of that vector will be the value of the tally. Element 1 of that vector will be the count of operations.

## History

Wednesday, 6 December 2001 [Samuel A. Rebelsky]

Tuesday, 1 May 2001 [Samuel A. Rebelsky]

Wednesday, 4 December 2002 [Samuel A. Rebelsky]

Disclaimer: I usually create these pages on the fly, which means that I rarely proofread them and they may contain bad grammar and incorrect details. It also means that I tend to update them regularly (see the history for more details). Feel free to contact me with any suggestions for changes.

This document was generated by Siteweaver on Wed Dec 4 13:20:00 2002.
The source to the document was last modified on Wed Dec 4 13:19:45 2002.
This document may be found at `http://www.cs.grinnell.edu/~rebelsky/Courses/CS151/2002F/Labs/oop.html`.

You may wish to validate this document's HTML ; ; Check with Bobby

Samuel A. Rebelsky, rebelsky@grinnell.edu