Intro-Objects-Classes-Vars-Methods-Subclasses-Alice-MediaComp3.ppt: uploaded 27 February 2007 at 9:57 am

advertisement
Introduction to Object-Oriented
Programming in Alice and Java
Barb Ericson
Georgia Institute of Technology
Sept 2006
Georgia Institute of Technology
Learning Goals
•
•
•
•
•
•
•
•
•
•
•
Introduce computation as simulation
Introduce Alice
Create objects in Alice
Invoke methods on objects in Alice
Introduce DrJava
Create objects in Java
Introduce variables as object references
Invoke methods on objects in Java
Create a method in Java
Create a method in Alice
Introduce subclasses
Georgia Institute of Technology
Computers as Simulators
• “The computer is the Proteus of machines.
Its essence is its universality, its power to
simulate. Because it can take on a
thousand forms and serve a thousand
functions, it can appeal to a thousand
tastes.” Seymour Papert in Mindstorms
Georgia Institute of Technology
Creating a Simulation
• Computers let us simulate things
– We do this by creating models of the things
we want to simulate
– We need to define what types of objects we
will want in our simulation and what they can
do
• Classes define the types and create objects of that
type
• Objects act in the simulation
Georgia Institute of Technology
Running a Simulation
• How many objects does it take to get a
person fed at a restaurant?
– Pick people to be the customer,
greeter/seater, waiter, chef, and cashier and
have them role play
• What data does each of these people need to do
his or her job?
• What does each type need to know how to do?
• What other objects do you talk about?
• How about simulating going to a dentist?
– Or to the movies?
Georgia Institute of Technology
Introduction to Alice
• Free development environment
– From Carnegie Mellon University
– Available from http://www.alice.org
• Used to create
– 3D movies
– 3D games
Georgia Institute of Technology
Getting Started
• Install Alice
– Copy folder from CD
• Start Alice
– Double Click on Icon
(Alice.exe)
• Wait for Alice to start
– Can take a few
minutes
Georgia Institute of Technology
Turning On Java Syntax
• Click in Edit and then
Preferences
• Change the display
my program: from
Alice Style to Java
Style in Color
• Quit Alice and start it
up again
– It will keep this setting
until you change it
again
Georgia Institute of Technology
Pick a World
• Click on the
Examples tab
– And click on a world to
open it
– You might need to
scroll down to see this
world
Georgia Institute of Technology
Playing the Movie
• To play a saved world
– Click the Play button
• The movie or game
will start to play in a
separate window
– Click on target to play
this movie
• Most example worlds
will just start to play
Georgia Institute of Technology
Create Your Own Movie
• Click on File
– Then New World
• Click on a template
– Background and
ground type
Georgia Institute of Technology
Add Objects To the World
• Click the Add Objects
button
• Select a category from
the Local Gallery
• Select Local Gallery to
get back from a
category
– To the list of categories
• Use the Search Gallery
button to look for a
certain type
Georgia Institute of Technology
Add Objects to the World
• Click on the item to
select it
– Click on the Class
description
• Click Add Instance to
world Button
– Or drag the object
from the class
description and drop it
into position in the
world
Georgia Institute of Technology
Position an Object in the World
• Once the object is in
the world
– You can move it by
• Dragging it with the
mouse
– Or using the mouse
controls
• Click the Undo button
to undo the last action
Georgia Institute of Technology
Mouse Controls
• Use mouse control buttons (from left to
right)
– To move object left, right, forward, back
– Up and down
– Turn left or right
– Turn forward or backwards
– Tumble the object (free rotation)
– Resize object
– Copy the object
Georgia Institute of Technology
Create More Objects
• You can use the copy
object mouse control
• Or add another
instance to the world
– Click on the Class
• Click on the Add
instance to world button
– Or drag another object
from the class
description
Georgia Institute of Technology
Objects and Classes
• You can make many
objects of the same class
– The class creates the
object
• Each object will have a
unique name in the object
window (a reference)
– bunny, bunny2, bunny3
• Class names start with a
capital letter
– Object names start with a
lower case letter
Georgia Institute of Technology
Telling Objects To Do Things
• Click the Done button
to stop adding objects
• Click on a reference
to an object in the
object tree window to
select it
– Click on the Methods
tab to see what it can
do
Georgia Institute of Technology
Messages to Objects
• In object-oriented
programming we
send messages to
objects
• Drag a method from
the left to the middle
window (world - my
first method)
– A green line will show
you were it will go
Georgia Institute of Technology
How to Execute my_first_method
• Click on the Play
button
– This starts the world
• When the World
starts it will execute
the method
– my_first_method
Georgia Institute of Technology
Method Syntax
• Syntax is how
statements need to
be formed in a
programming
language
• The syntax for a
method call on an
object is:
– objRef.method(param
eterList);
• We call this “dot”
notation
Georgia Institute of Technology
Who does the action?
• We had selected
bunny in the object
tree window
– Before we dragged the
method
– So the method is
invoked on bunny
• How do you think we
can get bunny2 to do
the same action?
Georgia Institute of Technology
Moving Several Objects
• To get bunny2 to
move
– Select bunny2 in the
object tree window
• Or just click on it
– Then select the
method tab
– Drag out the same
methods for bunny2
– Click play to see what
happens
Georgia Institute of Technology
Sequential Execution
• By default all Alice
methods are executed
one after the other
• You can specify this
explicitly using a
doInOrder control
structure
– Drag it from here
– And drag the other
statements into it
– What happens when you
play it again?
Georgia Institute of Technology
Parallel Execution
• What if you want two or
more statements to
execute at the same
time?
– Use a doTogether
– Put the things that you
want to happen at the
same time in the
doTogether block
– We added methods to
make each bunny say hello
as it goes up
– What happens if you put a
move up and move down in
a doTogether?
Georgia Institute of Technology
Challenge
• Create a world in Alice with at least 2
objects of the same class
– and at least 3 objects from different classes
• Have each object do some actions
– Some at the same time
– Some sequential
• You can use say to have objects “talk” to
each other
Georgia Institute of Technology
Using Turtles in Java
• We will work with Turtles in a World in
Java
• We have to define what we mean by a
Turtle to the computer
– We do this by writing a Turtle class definition
• Turtle.java
– We compile it to convert it into something the
computer can understand
• Bytes codes for a virtual machine
• Turtle.class
Georgia Institute of Technology
History of Turtles
• Seymour Papert at MIT in the 60s
– By teaching the computer to do something the
kids are thinking about thinking
• Develop problem solving skills
• Learn by constructing and debugging something
– Learn by making mistakes and fixing them
Georgia Institute of Technology
Using Turtles
• The Turtle Class was is part of several
classes created at Georgia Tech
– As part of an undergraduate class
• Add bookClasses to your classpath to use
these classes
Georgia Institute of Technology
Open Preferences in DrJava
Georgia Institute of Technology
Adding Book Classes to Classpath
Add
bookClasses
directory
Click on
Add
Georgia Institute of Technology
Creating Objects
• To create objects we ask
the object that defines the
class to create it
World
Object 1
– Each object is created in
memory with space for the
fields it needs
– Each object keeps a
reference to the class that
created it
• The class is like a cookie
cutter
– It knows how much space
each object needs (shape)
– Many objects can be
created from the class
Georgia Institute of Technology
World
Object 2
World: Class
Class as Object Factory
• A class is like a
factory that creates
objects of that class
• We ask a class to
create an object by
using the keyword:
new ClassName
• We can also ask the
class to initialize the
object
– And pass data to help
initialize it
Georgia Institute of Technology
Creating Objects in Java
• In Java the syntax for creating an object is:
new Class(value, value, …);
• Our Turtle objects live in a World object
– We must create a World object first
– Try typing the following in the interactions
pane:
new World();
Georgia Institute of Technology
Creating Objects
• If you just do
– new World();
• You will create a new World
object and it will display
– But you will not have any way
to refer to it again
– Once you close the window the
object can be garbage
collected
• The memory that the object
was using can be reused
• We need a way to refer to
the new object
– to be able to work with it again
Georgia Institute of Technology
Naming is Important
• If you get a new pet one of the first things you do
is name it
– Gives you a way to refer to the new pet without saying
• Please take that dog we got yesterday for a walk.
• Please take Fifi for a walk.
• In programming we name things we want to
refer to again
– Gives us a way to work with them
– Like the World object
• In programming this is called declaring a
variable
Georgia Institute of Technology
Declaring a Variable
• To be able to refer to an object again we need to
specify what type of thing it is and give it a name
– This is also called declaring a variable
– Type name;
OR
– Type name = new Class(value, value, …);
• The equal sign doesn’t mean equal
– But assign the value of the variable on the left to the
result of the stuff on the right
– The following creates a variable named earth which
refers to a World object created on the right
• World earth = new World();
Georgia Institute of Technology
Declaring Variables
• When you declare a
variable the computer
assigns memory to it
– The amount of memory
depends on the type
• For each variable the
computer stores a map of
the name to the memory
location and the type
• When you use the name
the computer looks up the
memory location
– And uses the value at that
location
address
1
2
3
4
5
6
7
8
9
10
11
12
memory
00000000
00001111
00000000
00111000
00000000
00111100
01111000
00000000
00000000
00000000
00000000
00000001
Georgia Institute of Technology
Object of
type World
earth variable
holds a
reference
To the World
Object above
Limits on Declaring Variables
• You can't declare two variables with the
same name!
> World earth = new World();
> World earth = new World();
Error: Redefinition of 'earth‘
• You can change what an object variable
refers to
> World earth = new World();
> earth = new World();
Georgia Institute of Technology
Cell Phones use Variables
• In your cell phone you
probably have names that
map to phone numbers
– When you pick Home it
looks up the number and
uses it to make the call
•
•
•
•
Barb 555-1235
Home 555-2938
Michael 555-3214
Shannon 555-2921
• You can’t have two
names that are exactly
the same
– The phone wouldn’t know
which number you are
referring to
• You can modify the
phone number for a name
Georgia Institute of Technology
A Variable Associates a Name with Space
• A variable is like a
box with a label on it
– You can put something
in a box
– You can take
something out of a box
– You can even change
what is in the box
– The size of the box
restricts what you can
put in it
• Different types have
different size boxes
Georgia Institute of Technology
Hat Box
Variables Sizes
• What value(s) does the
memory on the right
represent?
– It could be 4 char values
• 2 bytes each (16 bits)
• Unicode
– Or 2 int values
• 4 bytes each (32 bits)
• 2’s compliment
– Or 1 double value
1
2
3
4
5
6
7
8
00001000
00100000
00000100
01000000
00000001
10000000
00111000
11110000
• 8 bytes each (64 bits)
• In IEEE format
– Or an object reference
• The size is up to the
virtual machine
Georgia Institute of Technology
Declaring Variables and Creating Objects
• You can declare a variable and assign it to
refer to a new object in one statement
– World earth1 = new World();
– Turtle tommy = new Turtle(earth1);
Declaration of variables
Creating the objects
Georgia Institute of Technology
Turtle Basics
• The world starts off with a
size of 640 by 480
– With no turtles
World earth1 = new World();
• The turtle starts off facing
north and in the center of
the world by default
– You must pass a World
object when you create the
Turtle object
• Or you will get an error:
java.lang.NoSuchMethodEx
ception: Turtle constructor
Turtle tommy = new
Turtle(earth1);
Georgia Institute of Technology
Java Naming Conventions
• Notice that we capitalize the names of the
classes, but not the variable names
– World earth1 = new World();
– This is different than English
• Capitalize proper nouns (the names of things)
• Not the type of thing
– Earth is a world.
– Tommy is a turtle.
• In Java it is the class names that are the
most important
– Not the variable or method names
Georgia Institute of Technology
Creating Several Objects
• You can create several World
objects
World mars = new World();
• You can create several Turtle
objects
Turtle shar = new Turtle(mars);
Turtle jen = new Turtle(mars);
– One turtle is on top of the other
Georgia Institute of Technology
Moving a Turtle
• Turtles can move
forward
jen.forward();
– The default is to move
by
• 100 steps (pixels)
• You can also tell the
turtle how far to move
shar.forward(50);
Georgia Institute of Technology
Turning a Turtle
• Turtles can turn
– Right
jen.turnRight();
jen.forward();
– Left
shar.turnLeft();
shar.forward(50);
Georgia Institute of Technology
Turning a Turtle
• Turtles can turn by a
specified amount
– A positive number
turns the turtle the
right
jen.turn(90);
jen.forward(100);
– A negative number
turns the turtle to the
left
shar.turn(-90);
shar.forward(70);
Georgia Institute of Technology
The Pen
• Each turtle has a pen
– The default is to have
the pen down to leave
a trail
– You can pick it up:
turtle1.penUp();
turtle1.turn(-90);
turtle1.forward(70);
– You can put it down
again:
turtle1.penDown();
turtle1.forward(100);
Georgia Institute of Technology
Drawing a Letter
• How would you use a turtle to draw a large letter
T?
• Process
– Create a World variable and a World object and a
Turtle variable and object.
– Ask the Turtle object to go forward 100
– Ask the Turtle object to pick up the pen
– Ask the Turtle object to turn left
– Ask the Turtle object to go forward 25
– Ask the Turtle object to turn 180 degrees
– Ask the Turtle object to put down the pen
– Ask the Turtle object to go forward 50
Georgia Institute of Technology
Drawing a T
World world1 = new World();
Turtle turtle1 = new
Turtle(world1);
turtle1.forward(100);
turtle1.penUp();
turtle1.turnLeft();
turtle1.forward(25);
turtle1.turn(180);
turtle1.penDown();
turtle1.forward(50);
Georgia Institute of Technology
Moving to a Location
X
• A turtle can move to a
particular location
turtle1.penUp();
turtle1.moveTo(500,20);
Y
• Coordinates are given as
x and y values
– X starts at 0 on the left and
increases horizontally to
the right
– Y starts at 0 at the top of
the window and increases
to the bottom
– A new turtle starts out at
320,240 by default
479
Georgia Institute of Technology
639
Challenge
• Create a World object
– Don’t forget to declare a
variable to hold a reference to
it
•
Create a turtle object
– Don’t forget to declare a
variable to hold a reference to
it
• Use the turtle to draw a
– Rectangle (but, not a square)
– Diamond
– Hexagon
• Use the up arrow to reuse
previous commands
Georgia Institute of Technology
Setting the Pen Width
• You can change the width of the
trail the pen leaves
World world1 = new World();
Turtle turtle1 = new Turtle(world1);
turtle1.setPenWidth(5);
turtle1.forward(100);
Georgia Institute of Technology
Setting the Pen Color
• Use setPenColor to set the color of the
pen
turtle1.setPenColor(java.awt.Color.RED);
• There are several predefined colors
– In the package java.awt
• A package is a group of related classes
– In the class Color
• To use them you can use the full name
– java.awt.Color.RED
Georgia Institute of Technology
Setting Colors
• You can change the pen color
turtle.setPenColor(java.awt.Color.RED);
• You can change the turtle color
turtle1.setColor(java.awt.Color.BLUE);
• You can change the turtle’s body color
turtle1.setBodyColor(java.awt.Color.CYAN);
• You can change the turtle’s shell color
turtle1.setShellColor(java.awt.Color.RED);
Georgia Institute of Technology
Objects can Refuse
• Turtles won’t move completely out
of the boundaries of the world
World world2 = new World();
Turtle turtle2 = new Turtle(world2);
turtle2.forward(600);
Georgia Institute of Technology
Objects send Messages
• Objects don’t “tell” each other what to do
– They “ask” each other to do things
• Objects can refuse to do what they are
asked
– The object must protect it’s data
• Not let it get into an incorrect state
• A bank account object shouldn’t let you withdraw
more money that you have in the account
Georgia Institute of Technology
Creating a Method
• We can name a block of Java statements and
then execute them again
– By declaring a method in a class
• The syntax for declaring a method is
– visibility returnType name(parameterList)
– Visibility determines access
• Usually public or private
• The return type is the type of thing returned
• If nothing is returned use the keyword void
– Name the method starting with a lowercase word and
uppercasing the first letter of each additional word
Georgia Institute of Technology
Example Method
public void drawSquare()
{
this.turnRight();
this.forward(30);
this.turnRight();
this.forward(30);
this.turnRight();
this.forward(30);
this.turnRight();
this.forward(30);
}
• The visibility is public
• The keyword void means
this method doesn’t
return a value
• The method name is
drawSquare
• There are no parameters
– Notice that the parentheses
are still required
• The keyword this means
the object this method
was invoked on
Georgia Institute of Technology
Adding a Method to a Class
1. Open file
Turtle.java
3. Compile open files
2. Type the
method before the
last } // end
Georgia Institute of Technology
Compile Errors
Case matters in
Java! turnright
isn’t the same as
turnRight
Clicking on the error
takes you to the code
and highlights it.
Georgia Institute of Technology
Try the New Method
• Compiling resets the interactions pane
– Clearing all variables
• But you can still use the up arrow to pull up previous
statements
– You will need to create a world and turtle again
World world1 = new World();
Turtle turtle1 = new Turtle(world1);
turtle1.forward(50);
turtle1.drawSquare();
turtle1.turn(30);
turtle1.drawSquare();
Georgia Institute of Technology
Saving the Interactions History in DrJava
• You can save the interactions history into a
script
– And optionally edit it first before you save it
– Click on Tools then on Save Interactions
History
• And then latter load and execute the
statements in the script
– Click on Tools and Load Interactions History
as Script
• Use the next button to see the next statement and
click on the execute button to execute it
Georgia Institute of Technology
Adding a Main Method
• In Alice there is a way
to specify what
method to execute
when the world starts
• In Java when you
execute a class you
can have a main
method
– This is where
execution will start
Georgia Institute of Technology
Main Method Syntax
• The main method is a class (static)
method that can take an array of strings
– It is a class (static) method since no objects of
the class exist yet
public static void main(String[] args)
{
// statements to execute
}
Georgia Institute of Technology
Better Method to Draw a Square
• A method to draw a square
public void drawSquare()
{
int width = 30;
this.turnRight();
this.forward(width);
this.turnRight();
this.forward(width);
this.turnRight();
this.forward(width);
this.turnRight();
this.forward(width);
}
• We added a local variable for
the width
– Only known inside the method
• This makes it easier to change
the width of the square
• But, we still have to recompile
to draw a different size square
Georgia Institute of Technology
Testing the Better Method
• Test with:
World world1 = new World();
Turtle turtle1 = new Turtle(world1);
turtle1.forward(50);
turtle1.drawSquare();
turtle1.turn(30);
turtle1.drawSquare();
• Or use the saved script if you saved the
last interactions history
Georgia Institute of Technology
Passing a Parameter
public void drawSquare(int width)
{
this.turnRight();
this.forward(width);
this.turnRight();
this.forward(width);
this.turnRight();
this.forward(width);
this.turnRight();
this.forward(width);
}
• Parameter lists
specify the type of
thing passed and a
name to use to refer
to the value in the
method
• The type of this
parameter is int
• The name is width
• Values are passed
by making a copy of
the passed value
Georgia Institute of Technology
Testing with a Parameter
• Test a method with a parameter
World world1 = new World();
Turtle turtle1 = new Turtle(world1);
turtle1.forward(50);
turtle1.drawSquare(30);
turtle1.turn(30);
turtle1.drawSquare(50);
Georgia Institute of Technology
How Does That Work?
• When you ask turtle1 to drawSquare(30)
turtle1.drawSquare(30);
– It will ask the Turtle Class if it has a method
drawSquare that takes an int value
• And start executing that method
• The parameter width will have the value of 30 during the
executing of the method
• The this keyword refers to turtle1
• When you ask turtle1 to drawSquare(50)
turtle1.drawSquare(50);
– The width will have a value of 50
– The this refers to turtle1 (the object the method was
invoked on)
Georgia Institute of Technology
Challenges
• Create a method for drawing a rectangle
– Pass the width and height
• Create a method for drawing an equilateral
triangle
– all sides have the same length
– Pass in the length
• Create a method for drawing a diamond
• Create a method for drawing a house
– Using the other methods
• Create a method for drawing a school
– Using the other methods
Georgia Institute of Technology
Creating a Method in Alice
• You added a method to
the Turtle class to teach
Turtle objects how to do
draw a square
• You can create methods
in Alice as well
– Let’s teach our bunny how
to hop
– Click on bunny in the object
tree window
– Then click on the create
new method button
Georgia Institute of Technology
Naming the Method
• We name Java methods
starting with a lowercase
letter
– So name this method hop
• Now drag in the
commands to make the
bunny hop
– The bunny should go up
and forward and then go
down and forward
• Use doTogether to do two
things at the same time
• Use doInOrder to do
things one after the other
Georgia Institute of Technology
Changing the Amount
• You can change the
amount to go forward
by
– Click on the downward
arrow next to the
current amount
– Pick one of the values
or use other to enter a
number
Georgia Institute of Technology
Try Out the Method
• Click on the world.my
first method tab
– This is the method that
runs when you click on
play
• Drag in the hop
method
• Click play to try it
– And see what it does
Georgia Institute of Technology
Having bunny2 hop
• If you click on bunny2 it
won’t have the hop
method
– It was created before you
added this method to the
Bunny class
– So delete bunny2
• Click right on it in the
object tree and select
delete
– Click on the add objects
button to get the mouse
controls back
• And make a copy of bunny
• And position it with the
mouse controls
• Then click the done button
Georgia Institute of Technology
Adding bunny2 hopping
• Click on bunny2 in the
objects window
• Click the method tab
• See that bunny2 now
has a hop method as
well
• Drag the hop method
to the world.my first
method
– There is an implicit
doInOrder around
these
Georgia Institute of Technology
Adding parameters to Alice Methods
• To add a parameter to a
method in Alice
– Click on the method tab
• Click on the create new
parameter button
• Name the parameter and
pick the type
• Change the code to use
the parameter
– Click down arrow and pick
expressions and then the
parameter
Georgia Institute of Technology
Trying a Method with a Parameter
• Specify the value for
the parameter when
the method is called
• You can’t use this
new method with
bunny2
– Since it was created
before you changed
the method
• So delete bunny2 and
create a new copy of
bunny
Georgia Institute of Technology
Creating Subclasses in Alice
• When you create a new method in Alice or
modify an existing method
– You are in affect creating a new subclass that
has that method or that version of the method
• A subclass inherits the fields and methods from the
parent class but can add new fields and methods
or change inherited ones
– You should name and save this subclass
• So you can reuse it
Georgia Institute of Technology
Saving a Subclass in Alice
• Rename the variable that
refers to the object
– Right click on it in the
Object tree and select
rename
• Save the class
– Right click on the object in
the Object tree and select
save object
• It will save the class
definition which starts with
an upper case letter
Georgia Institute of Technology
Use a Subclass in Alice
• Select File and then
Import
– And select the class
file you created
– This will automatically
add an object of the
new class to your
world
• You may need to
move the new object
to see it
Georgia Institute of Technology
Subclasses in Java
• The Turtle class is a subclass of
SimpleTurtle
– public class Turtle extends SimpleTurtle
• This means it inherits methods and fields
from SimpleTurtle
– See if you can find the forward and turnRight
methods in SimpleTurtle
• Classes can subclass another class in
Java and Alice
Georgia Institute of Technology
Challenge
• Create a subclass from one of the existing
Alice classes
– With at least two new methods in the subclass
– Be sure to use the new methods in the movie
– Have at least two objects of the subclass in
the movie
– Have at least two objects of other classes in
the movie
Georgia Institute of Technology
Summary
• You can create objects from classes in Alice and
Java
• Each object needs a unique way to refer to it
– In Java we call this declaring a variable
• You can create new methods
– visibility returnType name(Type name, Type name, …)
– Let’s you reuse a block of statements
• You can pass parameters to methods
– To make them more flexible and reusable
• You can create subclasses of other classes
– They will inherit fields and methods from the parent
class
Georgia Institute of Technology
Download