CS1101: Programming Methodology http://www.comp.nus.edu.sg/~cs1101x/ Aaron Tan Welcome back! How was your recess? How are you feeling after the recess? 2 This is Week 7 Week 6: Chapter 10: Arrays only sections 10.1 to 10.6 Modular programming Writing separate methods This week: Revision on Modular programming Chapter 6: Object-Oriented Programming Chapter 7: OOP Additional Details Survey 3 Modular Programming Revisit The following topics are not restricted to OOP: Local variables Local variable persistence return statement void return type Empty return statement Argument passing The above are applicable with or without OOP. I will go through them again with you using the examples we discussed in our previous lecture. 4 NRIC Check Code Download these programs: CheckNRIC.java, NewCheckNRIC.java and NewV2CheckNRIC.java Compare NewCheckNRIC.java with NewV2CheckNRIC.java. What changes did we make in the latter? Can you redo findCode() using a String? A character array? I will use the debugger in DrJava Illustrate “step into” and “step out”. Set up watches for local variables i, step2 , number and num. Set up watches for digits * as well. And see how cool it is! * To trace an array in watches, you need the latest DrJava version (currently, it is drjava-stable-20080904-r4668.jar) which is available on http://drjava.sourceforge.net/ 5 Local variable persistence From the debugger session, you observe that The variable i is only persistent (usable) within the for loop that it is declared. The value of number in main() method is copied into the parameter num in generateCheckCode() method (this is called passed by value). Subsequent changes to num does not affect number, because they are two separate ‘boxes’. The parameter num appears in two methods (generateCheckCode() and findCode()), and both num are distinct. They are only persistent in the method that they are declared. 6 Cohesion: Writing cohesive methods Suppose we change the findCode() method to the following. What’s wrong with this? public static char findCode(int num) { char code; if (num < 10) code = (char) ('A' + num - 1); else if (num == 10) code = 'Z'; else // if (num == 11) code = 'J'; System.out.println("The code is " + code); return code; }// end findCode Good programming practice: Do not mix computation with input/output in a method! 7 return statement (1/3) A method may return some value, or it may not return anything. If it returns a value, it must have a return type, and there must be a return statement in the method to return a value of that type. return type public static char findCode(int num) { if (num < 10) return (char) ('A' + num - 1); else if (num == 10) return 'Z'; else return 'J'; }// end findCode value returned must be of the same type as return type 8 return statement (2/3) If it does not return any value, then its return type is void. The return statement is optional. public static void displayInstructions() { System.out.println("This is a game."); System.out.println("To play the game, ..."); return; }// end displayInstructions optional 9 return statement (3/3) In some programming languages, for example Pascal, they are called function (that returns some value) and procedure (that does not return any value). Can a method return more than one value? No, a method can only return one “thing”... But the “thing” can be a reference, and a reference can be an object reference that contains many data, or an array reference that contains many elements. So... 10 Tracing codes Hand trace the programs in the given handout and write out the outputs. 11 OOP (1/2) How do we see the world? As a world of “things”. These things have properties and behaviours. In OOP, the program models these things as objects. Objects come from classes. 12 OOP (2/2) So far, the classes we have written do not make use of OOP features. Why? Because we don’t create objects out of these classes. But we have seen and used classes where we need to create objects out of them. Examples: String, Scanner, Random, DecimalFormat (the last 2 are not even covered in the textbook) Now, we will learn how to write such classes where we can create objects out of them, and manipulate the objects. (Hooray!) Let’s go on to Chapter 6! 13 Class Activity: Ball class Create a Ball class What questions must you first ask? What are its properties? What are its behaviours? For the identified properties, we implement them as instance variable. For the identified behaviours, we implement them as methods. Write a driver program BallDriver to test it. Keep your Ball class for future reference. We are going to enhance it as we go along. 14 Constructor We discussed the accessor method and mutator method in Chapter 6. There is another type of method, called the constructor, which is covered in Chapter 7. However, I will introduce it to you now, using our Ball class as an example. 15 Chapter 7 OOP Additional Details I will now carry on to Chapter 7 to cover some additional details we have put off in Chapter 6. Some of these I might have covered informally before. 16 Announcement/Reminder Lab #3 Release: 30 September (Tuesday), 2359hr. Deadline: 8 October (Wednesday), 2359hr. Identical codes Please do not share codes for your lab assignments! Mid-term test 4 October, Saturday, 12noon, LT15 (for CS1101X students) Refer to course website for more info: http://www.comp.nus.edu.sg/~cs1101x/3_ca/termtests.html 17 This is Week 7 Next week? Chapter 7 OOP – Additional Details (if we cannot complete it today) Chapter 8 Software Engineering Chapter 9 Classes with Class Members (if time permits) 18 End of file 19