Lab: Object-Oriented Programming

Exercises

Exercise 0: Preparaton

a. Take the quiz.

Exercise 1: 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 2: 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 3: Making Generic Tallys

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

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

Disclaimer Often, these pages were created "on the fly" with little, if any, proofreading. Any or all of the information on the pages may be incorrect. Please contact me if you notice errors.