Don't forget that lab 0 and lab 1 go together as a unit
By the end of this lab you should:
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:
The result should look something like this:
When you think you have got it, tell Smalltalk to accept
the code: click in the text pane with the middle button
and choose
Now create the FrogMuppet and GrouchMuppet classes. What
is the superclass of these classes? Do they have any instance or class variables?
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
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:
Again, accept it. You now have two methods in the accessing
protocol,
Create a protocol for initializing, and place the following method
inside it:
Create a protocol for greeting, and place the following method
inside it:
Open a workspace to test your code in, using the "open"
menu from the background menu.
Type the following code into the workspace:
Select the text with the mouse, click the center button, and choose
"do it".
Do you get what you expect?
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:
Now, let's make the muppets interact. Write a method in the Muppet
class that:
When you execute the following code:
You should see:
You should turn in a fileOut of the code you wrote.
To make the fileout, make sure the
MuppetsProject 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
Mail the file to your TA any way that is convenient. Here is one way to
do so:
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.
Step One: Getting Started
This should've been covered in Lab 0, so we
won't rehash it here.
Step Two: Creating the Muppet Classes
Leave the NameOfClass to Muppet
'name greeting'.
Be sure not to erase the quotes!
''. This means that there
are no class variables.
Object specificaton alone, so that
the superclass of Muppet will be Object.
Object subclass: #Muppet
instanceVariableNames: 'name greeting'
classVariableNames: ''
poolDictionaries: ''
category: 'MuppetProject'
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.Step Three: Adding Muppet Functionality
name method
by changing the template in the text pane to look like this:
Now, use middle-button-menu to choose name
^name
accept.
name: aName
name := aName.
name and name:.
initialize
greeting := 'I am an abstract muppet'.
greet
Transcript cr.
Transcript show: greeting; cr.
Transcript show: 'I am ', name; cr.
| muppet |
muppet := Muppet new initialize.
muppet name: 'Jim Henson'.
muppet greet.
Step Four: Adding Subclass Functionality
| 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
| 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.
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
MuppetsProject.st.
Copy MuppetsProject.st to your 2803 directory (on your
H: drive).
Run from the Start menu and type in:
telnet lennon.cc
cd ~/cs2390 (or wherever you put your code)
/usr/ucb/mail -s "Your Name, Lab1, Your Section"
Your_TA@cc.gatech.edu < MuppetsProject.st