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 With an object like message, use the object variable to “call” the method works on information inside the object message refers to 2
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. MODULARITY
Writing methods 5 public static method-name ( parameters ) { statements; return ;// Details later }
Writing methods 6 public static method-name ( parameters ) { statements; return ;// Details later } What “kind” of Method this is – More on this later.
Writing methods 7 public static method-name ( parameters ) { statements; return ;// Details later } Does this method produce a value, and if so, what type?
Writing methods 8 public static method-name ( parameters ) { statements; return ;// Details later } What name is used to “invoke” this method?
Writing methods 9 public static method-name ( parameters ) { statements; return ;// Details later } What information is expected from the caller in order to run this method? (Can be empty.)
Writing methods 10 public static method-name ( parameters ) { statements; return ;// Details later } The first line of a method is called the “method header” or “method signature”
Writing methods 11 public static method-name ( parameters ) { statements; return ;// Details later } What’s inside is called the “method body”
Writing methods 12 public static method-name ( parameters ) { statements; return ;// Details later } Statements executed when this method is called.
Writing methods 13 public static method-name ( parameters ) { statements; return ;// 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, guesses ); userGuess randomNumber guesses … Memory used for variables in main() Memory used for variables in main()
What happens in memory? 21 … = checkGuess( userGuess, randomNumber, guesses ); public static String checkGuess ( int currentGuess, int secret, int numGuesses ){ … userGuess randomNumber guesses … currentGuess secret numGuesses Memory used for formal parameters in checkGuess Memory used for formal parameters in checkGuess
What happens in memory? 22 … = checkGuess( userGuess, randomNumber, guesses ); public static String checkGuess ( int currentGuess, int secret, int numGuesses ){ … userGuess randomNumber guesses … currentGuess secret numGuesses When method call is made, values stored in the arguments… …are copied into the formal parameters When method call is made, values stored in the arguments… …are copied into the formal parameters
What happens in memory? 23 … = checkGuess( userGuess, randomNumber, guesses ); public static String checkGuess ( int currentGuess, int secret, int numGuesses ){ … userGuess randomNumber guesses … currentGuess secret numGuesses Arguments & formal parameters initially have the same values… but occupy different spaces in memory Arguments & formal parameters initially have the same values… but occupy different spaces in memory
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) Application Programming Interface 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() 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 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