Lab1


Lab # 1: Building Muppet Objects


What you're going to do

In this lab, you will use Squeak Smalltalk to create a small hierarchy of objects that are person (or muppet) like in that they have names and can greet you. You will create one abstract class called Muppet, and two concrete classes called FrogMuppet and GrouchMuppet.

By the end of this lab you should:

Lab Grading Policy

You have until before your class period on Thursday to turn in this lab. No late assignments will be accepted!


Step One: Getting Started

The First Time You Run Squeak

Do the following to get set up:
  1. If you haven't already, create a directory in your network home directory (drive H:) to keep your 2390 files in, for instance H:cs2390.
  2. Using NT Explorer or My Computer, open S:AppsSqueak
  3. Copy Squeak1.23.image copy Squeak1.23.changes into the directory you made above. To reduce confusion, you can rename the files to reflect that they are your image and changes file, as opposed to the stock 1.23 image and changes file. BE SURE TO MAKE THE IMAGE AND CHANGES FILE NAMES MATCH!. For instance, you would make the following two copies:

To Run Squeak (Every Time)

Here is the (convoluted) procedure for running Squeak on the NT's:
  1. Copy your image and changes file from your home directory to C:Temp
  2. Open S:AppsSqueak in NT Explorer or My Computer.
  3. Drag your image file from C:Temp on top of the Squeak.exe file in S:AppsSqueak. This should start up Squeak on your image file.
  4. When you are done and have saved and quit Squeak, copy your image and changes file back to your home directory, and delete everything you have put in C:Temp.
WARNING: Do not access another student's image and/or changes file that have been left in a temp directory. Doing so will be considered a violation of the honor code.

If you haven't already, go ahead and start up Squeak on your personal image.

Step One Point Five: Basic Usage: The Mouse

Smalltalk uses all three buttons of the mouse extensively. Within a Smalltalk window, the buttons work as follows: Also, you can left click on the gray background of the Squeak window and get a system-wide menu with options to create new windows and to exit the systems.

NOTE: On NT's with three buttons, the middle and right buttons are swapped!!! I don't know why.

Try it now. Left click on the background, hold the button down, select "open", and select "open transcript". An orange window labeled "Transcript" should appear. Use the left button on the borders to shrink this window down a little, and then move it to the bottom of the screen out of the way. This window is where your output will appear later on.

As a second test, left click on the background, hold the button down, and select "save". The cursor should change for a couple of seconds as Squeak saves a current version of your image; if you get an error message, then you are probably using an image on a network drive, instead of in C:Temp; exit Squeak (without saving changes), and try the above directions again.

Step Two: Creating the Muppet Classes

To create a new class you need to open a System Browser. Click the left button on the gray background area, select "open", and select "open browser". A new window should appear, which has divided into 5 subwindows ("panes"): four panes across the top and one big one at the bottom.

The leftmost pane is a list of categories. Each category contains a bunch of related classes. Create a new categary called MuppetProject by clicking the middle button in that pane, choosing "add item", and typing MuppetProject in the prompter window.

The category MuppetProject will be added to the category list, and a template for defining a new class appears. Now, create the Muppet class:

Leave the Object specificaton alone, so that the superclass of Muppet will be Object.

The result should look something like this:

Object subclass: #Muppet
    instanceVariableNames: 'name greeting'
    classVariableNames: ''
    poolDictionaries: ''
    category: 'MuppetProject'

When you think you have got it, tell Smalltalk to accept the code: click in the text pane with the middle button and choose accept. Assuming you have made no syntax errors, the class should appear in the second pane of the browser. If you have made syntax errors, correct them and try again.

Now create the FrogMuppet and GrouchMuppet classes. What is the superclass of these classes? Do they have any instance or class variables?

Step Three: Adding Muppet Functionality

Now you will define the behavior of the Muppet class, which will be inherited by the FrogMuppet and GrouchMuppet classes.

The third list in the System Browser is for protocols, which are groups of related methods. Create a protocol for the Muppet class by selecting that class, choosing "add item" by center-clicking in the protocol list, and typing in accessing at the prompt.

A method template will appear in the text pane. To add each new method, you will replace the top line with the message name, place a comment in the double quotes, and insert the text at the bottom. After editing the template for the new method, you accept it to tell Smalltalk to compile it.

Create two methods for accessing the name variable, as follows.

First, create a name method by changing the template in the text pane to look like this:

name
  ^name
Now, use middle-button-menu to choose accept.

Click on name in the rightmost pane, deselecting it, so that the method template reappears. Edit the template to create a new method as follows:

name: aName
  name := aName.

Again, accept it. You now have two methods in the accessing protocol, name and name:.

Create a protocol for initializing, and place the following method inside it:

initialize
  greeting := 'I am an abstract muppet'.

Create a protocol for greeting, and place the following method inside it:

greet
  Transcript cr. 
  Transcript show: greeting; cr.
  Transcript show: 'I am ', name; cr.

Open a workspace to test your code in, using the "open" menu from the background menu. Type the following code into the workspace:

| muppet |
muppet := Muppet new initialize.
muppet name: 'Jim Henson'.
muppet greet.

Select the text with the mouse, click the center button, and choose "do it". Do you get what you expect?

Step Four: Adding Subclass Functionality

Frogs and Grouches differ from ordinary Muppets in their greeting. For each class create initialization protocols. Create an initialize method for both classes that changes the greeting. The FrogMuppet greeting should be 'Hi Ho', and the GrouchMuppet greeting should by 'Go Away'.

Test your muppets with the following code:

| frogMuppet grouchMuppet |
frogMuppet := FrogMuppet new initialize.
grouchMuppet := GrouchMuppet new initialize.
frogMuppet name: 'Kermit the Frog'.
grouchMuppet name: 'Oscar the Grouch'.
frogMuppet greet.
grouchMuppet greet.

Step Five: Making the Muppets interact

Now, let's make the muppets interact. Write a method in the Muppet class that:

When you execute the following code:

| frogMuppet grouchMuppet |
frogMuppet := FrogMuppet new initialize.
grouchMuppet := GrouchMuppet new initialize.
frogMuppet name: 'Kermit the Frog'.
grouchMuppet name: 'Oscar the Grouch'.
frogMuppet greetByName: grouchMuppet.
grouchMuppet greetByName: frogMuppet. 

You should see:

Hi Ho, Oscar the Grouch! I am Kermit the Frog!
Go Away, Kermit the Frog! I don't care! I am Oscar the Grouch!

Step Six: Turning in the code

You should turn in a fileOut of the code you wrote.

To make the fileout, make sure the MuppetsLab class category is selected in a System Browser, and then choose "file out" from the middle-button menu in class-category pane (the one on the top left). The system will silently create a text file named MuppetsLab.st. Copy MuppetsLab.st to your 2390 directory (on your H: drive).

Mail the file to your TA any way that is convenient. Here is one way to do so:

  1. Select Run from the Start menu and type in:
    telnet lennon.cc
  2. Login to lennon using your CoC login and password.
  3. Change to your 2390 directory, eg cd ~/cs2390 (or wherever you put your code)
  4. Type:
    /usr/ucb/mail -s "TI,Lab1,My SocialSecurity Number or Student Number" cs2390@prism.gatech.edu < Muppet sLab.st
    (Replace My SocialSecurity Number or Student Number with your student number, e.g., 345544545).


News Page | CS2390 Win'98 Home Page | CS2390 CoWeb | STABLE | BOOST
Questions/comments/concerns to guzdial@cc.gatech.edu
Page last updated 1/13/98; 1:06:03 PM