lec07

CMSC 150
METHODS AND CLASSES
CS 150: Wed 25 Jan 2012
Remember the length “method”?
2
String message = “Hello, Watson”;
System.out.println( message.length() );



// prints 13
Method – useful code packaged with a name
In Java, methods belong to classes
With an object like message, use the object variable to
“call” the method
 works
on information inside the object message refers to
Why write a method?
3




Code can get very long and unwieldy
Methods let us break up code into
logical chunks
Readability – with appropriately
named methods, your code is easier to
read and follow
Reuse – make repeated code into a
method. Write once, use many times.
Why write a method?
4




Code can get very long and unwieldy
Methods let us break up code into
logical chunks
Readability – with appropriately
named methods, your code is easier to
read and follow
Reuse – make repeated code into a
method. Write once, use many times.
Writing methods
5
public static <return-type> method-name ( parameters ) {
statements;
return <expression>;
}
// Details later
Writing methods
6
public static <return-type> method-name ( parameters ) {
statements;
return <expression>;
}
What “kind” of
Method this is –
More on this later.
// Details later
Writing methods
7
public static <return-type> method-name ( parameters ) {
statements;
return <expression>;
// Details later
}
Does this method produce
a value, and if so, what
type?
Writing methods
8
public static <return-type> method-name ( parameters ) {
statements;
return <expression>;
// Details later
}
What name is used to “invoke”
this method?
Writing methods
9
public static <return-type> method-name ( parameters ) {
statements;
return <expression>;
// Details later
}
What information is expected
from the caller in order to
run this method? (Can be empty.)
Writing methods
10
public static <return-type> method-name ( parameters ) {
statements;
return <expression>;
// Details later
}
The first line of a method is called
the “method header” or “method signature”
Writing methods
11
public static <return-type> method-name ( parameters ) {
statements;
return <expression>;
}
What’s inside is called
the “method body”
// Details later
Writing methods
12
public static <return-type> method-name ( parameters ) {
statements;
return <expression>;
}
Statements executed when
this method is called.
// Details later
Writing methods
13
public static <return-type> method-name ( parameters ) {
statements;
return <expression>;
// Details later
}
If the method “returns a value,”
this is how we make that happen.
Example: Back to FunBrain…
14
Example: Back to FunBrain…
15
Hmm… looks suspiciously
like a method…
Example: Back to FunBrain…
16
Check the guess against
the secret number and
generate a message to
the user. Let’s make it
into a method.
Parameter passing
17
Formal parameter list
Parameter passing
18
Actual parameter list
Parameter passing
19
Can be any expression
that evaluates to the
type of the matching
formal parameter.
What happens in memory?
20
… = checkGuess( userGuess,
randomNumber,
userGuess
25
randomNumber
47
guesses );
guesses
2
…
Memory used for
variables in main()
What happens in memory?
21
… = checkGuess( userGuess,
randomNumber,
userGuess
25
randomNumber
47
guesses );
guesses
Memory used for
formal parameters
in checkGuess
public static String
2
…
currentGuess
25
secret
47
numGuesses
2
checkGuess ( int currentGuess,
int secret,
int numGuesses ){
…
What happens in memory?
22
… = checkGuess( userGuess,
randomNumber,
userGuess
25
randomNumber
47
guesses );
guesses
When method call is made,
values stored in the arguments…
…are copied into the
formal parameters
public static String
2
…
currentGuess
25
secret
47
numGuesses
2
checkGuess ( int currentGuess,
int secret,
int numGuesses ){
…
What happens in memory?
23
… = checkGuess( userGuess,
randomNumber,
userGuess
25
randomNumber
47
guesses );
guesses
Arguments & formal parameters
initially have the same values…
but occupy different spaces
in memory
public static String
2
…
currentGuess
25
secret
47
numGuesses
2
checkGuess ( int currentGuess,
int secret,
int numGuesses ){
…
Method facts
24

In Java, parameters are “passed by value”




(AKA “pass by copy”)
Each call to a method executes in its own memory space
Function: a method that creates and “returns” a value
Procedure: a method that only does work and returns no
value (i.e., return type “void”)
Classes in Java
25

Classes contain two things:
 methods
(also called “behavior”)
 data (also called “state”)


Encapsulate related data & methods
A good way of structuring large programs
 e.g,.
the Java libraries
 String
class
 Random class
 Scanner class
Example: String
26

What’s the data for a String object?
 The
sequence of characters it was initialized with
 The length of the sequence

What behavior is available?
 length()
 charAt(int
pos)
 indexOf(char c)
 substring(int begin, int pastEnd)
 … it goes on and on …
Example: String
27

What’s the data for a String object?
 The
sequence of characters it was initialized with
 The length of the sequence

What behavior is available?
 length()
 charAt(int
pos)
 indexOf(char c)
 substring(int begin, int pastEnd)
 … it goes on and on …
Methods with different jobs
28

Some methods let you request information from the class
 “Accessor”



methods
names often start with “get” (but not always)
e.g., charAt method in String class
Some methods cause a change to the state (i.e., data)
held by the class
 “Mutator”


methods
names may start with “set” (but not always)
e.g., setSeed method in Random class
In order to use a class…
29







… need to know what methods it provides
… need to know what parameters they expect
… need to know how the methods behave
… don’t need to know how they were written
Application Programming Interface (API)
Again, need a variable of that class type
Use that variable to call methods in the class
Next lab, who you gonna call?
30
Lab setup
31

What we will give you:
GameBoard Class
 Room Class
 Ghostbusters skeleton
 API documentation for GameBoard and Room


What you will write:
Several methods in Ghostbusters needed by GameBoard to
run the game
 Your methods will use methods from GameBoard and Room

Your methods
32

public void setupGame()


public boolean handleMove( String direction )


Logic to control Ghostbuster firing proton pack @ Slimer
public boolean checkForLoss()


Logic to control Ghostbuster moving from room to room
public void handleFire( String direction )


Sets up the initial game configuration (similar to Wumpus)
Determine if the Ghostbuster encountered Slimer or a portal
public void checkForGhostTrap()

Determine if the Ghostbuster found a desirable ghost trap