cmsc 150 methods and classes

48
CMSC 150 METHODS AND CLASSES CS 150: Wed 25 Jan 2012

Upload: huslu

Post on 23-Feb-2016

35 views

Category:

Documents


0 download

DESCRIPTION

CMSC 150 Methods and Classes. CS 150: Wed 25 Jan 2012. Remember the length “method”?. String message = “Hello, Watson”; System.out.println ( message.length () ); // prints 13 Method – useful code packaged with a name In Java, methods belong to classes - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: CMSC 150 Methods and Classes

CMSC 150METHODS AND

CLASSES

CS 150: Wed 25 Jan 2012

Page 2: CMSC 150 Methods and Classes

Remember the length “method”?

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

2

Page 3: CMSC 150 Methods and Classes

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.

Page 4: CMSC 150 Methods and Classes

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.

MODULARITY

Page 5: CMSC 150 Methods and Classes

Writing methods5

public static <return-type> method-name ( parameters ) { statements;

return <expression>; // Details later}

Page 6: CMSC 150 Methods and Classes

Writing methods6

public static <return-type> method-name ( parameters ) { statements;

return <expression>; // Details later}

What “kind” of Method this is – More on this later.

Page 7: CMSC 150 Methods and Classes

Writing methods7

public static <return-type> method-name ( parameters ) { statements;

return <expression>; // Details later}

Does this method producea value, and if so, what type?

Page 8: CMSC 150 Methods and Classes

Writing methods8

public static <return-type> method-name ( parameters ) { statements;

return <expression>; // Details later}

What name is used to “invoke”this method?

Page 9: CMSC 150 Methods and Classes

Writing methods9

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.)

Page 10: CMSC 150 Methods and Classes

Writing methods10

public static <return-type> method-name ( parameters ) { statements;

return <expression>; // Details later}

The first line of a method is calledthe “method header” or “method signature”

Page 11: CMSC 150 Methods and Classes

Writing methods11

public static <return-type> method-name ( parameters ) { statements;

return <expression>; // Details later}

What’s inside is called the “method body”

Page 12: CMSC 150 Methods and Classes

Writing methods12

public static <return-type> method-name ( parameters ) { statements;

return <expression>; // Details later}

Statements executed when this method is called.

Page 13: CMSC 150 Methods and Classes

Writing methods13

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.

Page 14: CMSC 150 Methods and Classes

Example: Back to FunBrain…

14

Page 15: CMSC 150 Methods and Classes

Example: Back to FunBrain…

15

Hmm… looks suspiciouslylike a method…

Page 16: CMSC 150 Methods and Classes

Example: Back to FunBrain…

16

Check the guess againstthe secret number and generate a message tothe user. Let’s make itinto a method.

Page 17: CMSC 150 Methods and Classes

Compare The Two Implementations

17

Page 18: CMSC 150 Methods and Classes

Parameter passing18

Formal parameter list

Page 19: CMSC 150 Methods and Classes

Parameter passing19

Actual parameter list

Page 20: CMSC 150 Methods and Classes

Parameter passing20

Can be any expressionthat evaluates to thetype of the matchingformal parameter.

Page 21: CMSC 150 Methods and Classes

What happens in memory?21

… = checkGuess( userGuess, randomNumber, guesses );

userGuess

randomNumber

guesses

25

47

2

Memory used forvariables in

main()

Page 22: CMSC 150 Methods and Classes

What happens in memory?22

… = checkGuess( userGuess, randomNumber, guesses );

public static String checkGuess ( int currentGuess, int secret, int numGuesses ){ …

userGuess

randomNumber

guesses

25

47

2

currentGuess

secret

numGuesses

25

47

2

Memory used for formal

parametersin checkGuess

Page 23: CMSC 150 Methods and Classes

What happens in memory?23

… = checkGuess( userGuess, randomNumber, guesses );

public static String checkGuess ( int currentGuess, int secret, int numGuesses ){ …

userGuess

randomNumber

guesses

25

47

2

currentGuess

secret

numGuesses

25

47

2

When method call is made,values stored in the

arguments…

…are copied into the formal parameters

Page 24: CMSC 150 Methods and Classes

What happens in memory?24

… = checkGuess( userGuess, randomNumber, guesses );

public static String checkGuess ( int currentGuess, int secret, int numGuesses ){ …

userGuess

randomNumber

guesses

25

47

2

currentGuess

secret

numGuesses

25

47

2

Arguments & formal parameters

initially have the same values…

but occupy different spacesin memory

Page 25: CMSC 150 Methods and Classes

Method facts25

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”)

Page 26: CMSC 150 Methods and Classes

Classes in Java26

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

Page 27: CMSC 150 Methods and Classes

Example: String27

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 …

Page 28: CMSC 150 Methods and Classes

Methods with different jobs28

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

Page 29: CMSC 150 Methods and Classes

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

Page 30: CMSC 150 Methods and Classes

In lab, who you gonna call?30

Page 31: CMSC 150 Methods and Classes

Lab setup31

What you are given: 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

Page 32: CMSC 150 Methods and Classes

Your methods32

public void setupGame() Sets up the initial game configuration (similar to Wumpus)

public boolean handleMove( String direction ) Logic to control Ghostbuster moving from room to room

public void handleFire( String direction ) Logic to control Ghostbuster firing proton pack @ Slimer

public boolean checkForLoss() Determine if the Ghostbuster encountered Slimer or a portal

public void checkForGhostTrap() Determine if the Ghostbuster found a desirable ghost trap

Page 33: CMSC 150 Methods and Classes

Ghostbusters: Two Classes Provided

33

public class GameBoard{ …

int playerRow; int playerCol; int score; Room[][] gridOfRooms;

public GameBoard getGame()

public void setPlayerRow(int row) public void setPlayerCow(int col) public int getPlayerRow() public int getPlayerCol()

public int getScore() public void updateScore(int score)

public void updateMessage(String m)

public Room getRoom(int row, int col)

}

public class Room { …

public boolean containsSlimer() public boolean containsPortal() public boolean containsGhostTrap()

public void showPlayerEnters() public void showPlayerExits()

public void addSlimer() public void showSlimer()

public void addPortal() public void showPortal()

public void addGhostTrap() public void removeGhostTrap() public void showGhostTrap()

public void showPlayerSlimed() public void showSlimerCaptured() …

}

Page 34: CMSC 150 Methods and Classes

public class GameBoard{ …

int playerRow; int playerCol; int score; Room[][] gridOfRooms;

public GameBoard getGame()

public void setPlayerRow(int row) public void setPlayerCol(int col) public int getPlayerRow() public int getPlayerCol()

public int getScore() public void updateScore(int score)

public void updateMessage(String m)

public Room getRoom(int row,int col)

}

34

GameBoard

Page 35: CMSC 150 Methods and Classes

public class GameBoard{ …

int playerRow; int playerCol; int score; Room[][] gridOfRooms;

public GameBoard getGame()

public void setPlayerRow(int row) public void setPlayerCol(int col) public int getPlayerRow() public int getPlayerCol()

public int getScore() public void updateScore(int score)

public void updateMessage(String m)

public Room getRoom(int row,int col)

}

35

GameBoard

Keeps track of certain data related to the

game, but you cannot assign these values

directly.

You must use methods provided by the class.

Page 36: CMSC 150 Methods and Classes

public class GameBoard{ …

int playerRow; int playerCol; int score; Room[][] gridOfRooms;

public GameBoard getGame()

public void setPlayerRow(int row) public void setPlayerCol(int col) public int getPlayerRow() public int getPlayerCol()

public int getScore() public void updateScore(int score)

public void updateMessage(String m)

public Room getRoom(int row,int col)

}

36

GameBoard

Keeps track of certain data related to the

game, but you cannot assign these values

directly.

You must use methods provided by the class.

Page 37: CMSC 150 Methods and Classes

public class GameBoard{ …

int playerRow; int playerCol; int score; Room[][] gridOfRooms;

public GameBoard getGame()

public void setPlayerRow(int row) public void setPlayerCol(int col) public int getPlayerRow() public int getPlayerCol()

public int getScore() public void updateScore(int score)

public void updateMessage(String m)

public Room getRoom(int row,int col)

}

37

GameBoard

Keeps track of certain data related to the

game, but you cannot assign these values

directly.

You must use methods provided by the class.

Page 38: CMSC 150 Methods and Classes

public class GameBoard{ …

int playerRow; int playerCol; int score; Room[][] gridOfRooms;

public GameBoard getGame()

public void setPlayerRow(int row) public void setPlayerCol(int col) public int getPlayerRow() public int getPlayerCol()

public int getScore() public void updateScore(int score)

public void updateMessage(String m)

public Room getRoom(int row,int col)

}

38

GameBoardTo change anything with respect to the

GameBoard,your program must have a variable of type

GameBoard:

GameBoard game = GameBoard.getGame();

Page 39: CMSC 150 Methods and Classes

public class GameBoard{ …

int playerRow; int playerCol; int score; Room[][] gridOfRooms;

public GameBoard getGame()

public void setPlayerRow(int row) public void setPlayerCol(int col) public int getPlayerRow() public int getPlayerCol()

public int getScore() public void updateScore(int score)

public void updateMessage(String m)

public Room getRoom(int row,int col)

}

39

GameBoardThen you can use that variable to call methods within the GameBoard class:

game.setPlayerRow( randomRow );game.setPlayerCol( randomCol );int theScore = game.getScore();

Page 40: CMSC 150 Methods and Classes

public class Room { …

public boolean containsSlimer() public boolean containsPortal() public boolean containsGhostTrap()

public void showPlayerEnters() public void showPlayerExits()

public void addSlimer() public void showSlimer()

public void addPortal() public void showPortal()

public void addGhostTrap() public void removeGhostTrap() public void showGhostTrap()

public void showPlayerSlimed() public void showSlimerCaptured() …

}

40

Room

Page 41: CMSC 150 Methods and Classes

public class Room { …

public boolean containsSlimer() public boolean containsPortal() public boolean containsGhostTrap()

public void showPlayerEnters() public void showPlayerExits()

public void addSlimer() public void showSlimer()

public void addPortal() public void showPortal()

public void addGhostTrap() public void removeGhostTrap() public void showGhostTrap()

public void showPlayerSlimed() public void showSlimerCaptured() …

}

41

Room

Page 42: CMSC 150 Methods and Classes

public class Room { …

public boolean containsSlimer() public boolean containsPortal() public boolean containsGhostTrap()

public void showPlayerEnters() public void showPlayerExits()

public void addSlimer() public void showSlimer()

public void addPortal() public void showPortal()

public void addGhostTrap() public void removeGhostTrap() public void showGhostTrap()

public void showPlayerSlimed() public void showSlimerCaptured() …

}

42

Room

To change anything with respect to a particular room, you must have a variable

of the Room type.

You get at a particular room via the GameBoard.

GameBoard game = GameBoard.getGame();Room firstRoom = game.getRoom(0,0);

Page 43: CMSC 150 Methods and Classes

public class Room { …

public boolean containsSlimer() public boolean containsPortal() public boolean containsGhostTrap()

public void showPlayerEnters() public void showPlayerExits()

public void addSlimer() public void showSlimer()

public void addPortal() public void showPortal()

public void addGhostTrap() public void removeGhostTrap() public void showGhostTrap()

public void showPlayerSlimed() public void showSlimerCaptured() …

}

43

Room

Then you can use that Room variable to call methods within the

Room class:

firstRoom.addPortal(); firstRoom.showPortal();

if (firstRoom.containsPortal()) …

Page 44: CMSC 150 Methods and Classes

public class GameBoard{ …

int playerRow; int playerCol; int score; Room[][] gridOfRooms;

public GameBoard getGame()

public void setPlayerRow(int row) public void setPlayerRow(int col) public int getPlayerRow() public int getPlayerCol()

public int getScore() public void updateScore(int score)

public void updateMessage(String m)

public Room getRoom()

}

public class Ghostbusters { …

public void setupGame()

public boolean handleMove(String dir) public void handleFire(String dir)

public boolean checkForLoss() public void checkForGhostTrap() …

}

44

Ghostbusters

Your setupGame() method is called by the GameBoard class when the

game is first started.

Page 45: CMSC 150 Methods and Classes

public class GameBoard{ …

int playerRow; int playerCol; int score; Room[][] gridOfRooms;

public GameBoard getGame()

public void setPlayerRow(int row) public void setPlayerRow(int col) public int getPlayerRow() public int getPlayerCol()

public int getScore() public void updateScore(int score)

public void updateMessage(String m)

public Room getRoom()

}

public class Ghostbusters { …

public void setupGame()

public boolean handleMove(String dir) public void handleFire(String dir)

public boolean checkForLoss() public void checkForGhostTrap() …

}

45

Ghostbusters

And your method is responsible for putting things onto the game board

appropriately…

Page 46: CMSC 150 Methods and Classes

public class GameBoard{ …

int playerRow; int playerCol; int score; Room[][] gridOfRooms;

public GameBoard getGame()

public void setPlayerRow(int row) public void setPlayerRow(int col) public int getPlayerRow() public int getPlayerCol()

public int getScore() public void updateScore(int score)

public void updateMessage(String m)

public Room getRoom()

}

public class Ghostbusters { …

public void setupGame()

public boolean handleMove(String dir) public void handleFire(String dir)

public boolean checkForLoss() public void checkForGhostTrap() …

}

46

Ghostbusters

Your handleMove(…) method is called by the GameBoard class whenever the user clicks an arrow button to

move

Page 47: CMSC 150 Methods and Classes

public class GameBoard{ …

int playerRow; int playerCol; int score; Room[][] gridOfRooms;

public GameBoard getGame()

public void setPlayerRow(int row) public void setPlayerRow(int col) public int getPlayerRow() public int getPlayerCol()

public int getScore() public void updateScore(int score)

public void updateMessage(String m)

public Room getRoom()

}

public class Ghostbusters { …

public void setupGame()

public boolean handleMove(String dir) public void handleFire(String dir)

public boolean checkForLoss() public void checkForGhostTrap() …

}

47

Ghostbusters

Your handleFire(…) method is called by the GameBoard class whenever

the user clicks a red arrow button to fire

Page 48: CMSC 150 Methods and Classes

public class Ghostbusters { …

public void setupGame()

public boolean handleMove(String dir) public void handleFire(String dir)

public boolean checkForLoss() public void checkForGhostTrap() …

}

48

Ghostbusters

Your checkForLoss() and checkForGhostTrap() methods are

called by your own handleMove(…) method