Presentation is loading. Please wait.

Presentation is loading. Please wait.

CS1101: Programming Methodology Aaron Tan.

Similar presentations


Presentation on theme: "CS1101: Programming Methodology Aaron Tan."— Presentation transcript:

1 CS1101: Programming Methodology http://www.comp.nus.edu.sg/~cs1101x/ http://www.comp.nus.edu.sg/~cs1101x/ Aaron Tan

2 2 How was your mid-term test?  Which of the following best describes your feeling about the test?

3 3 This is Week 8  Week 7:  Revision on Modular programming  Chapter 6: Object-Oriented Programming  Chapter 7: OOP Additional Details  Survey  This week:  Chapter 7: OOP Additional Details (cont.)  About String  Exercises  Chapter 8: Software Engineering  Chapter 9: Classes with Class Members  Exercises

4 4 Chapter 7 OOP Additional Details  Let’s continue chapter 7 from where we left off last week…

5 5 Writing good programs  Now that we know basic programming, we should not be contended with merely writing correct programs.  We have to write good programs  By following good programing practice and methodology  By writing elegant and efficient programs (this requires more practice and is the subject for follow-up modules, but no harm starting early!)

6 6 Overloaded Constructors  Refer to Fraction.java in the textbook.  We can write more constructors. Examples: public Fraction( ) { this(0, 1); // creates a fraction 0/1 } public Fraction(Fraction frac) { this(frac.numerator, frac.denominator); // copies frac } public Fraction(int n) { this(n, 1); // creates a fraction n/1 } public Fraction(int n, int d) { this.numerator = n; this.denominator = d; this.quotient = (double) this.numerator / this.denominator; } Given New

7 7 String class  After the tracing exercises last week, some students tried question 4 on strings, and found that the result doesn’t match my explanation.  Why? The reason is that String is a very special class.  Example: We do not need the “new” statement to create a String object!

8 8 String is immutable In Java, a String object is immutable  This means once a String object is created, it cannot be changed, such as replacing a character with another character or removing a character  The String methods we have used so far do not change the original string. They create a new string from the original. For example, substring creates a new string from a given string. The String class is defined in this manner for efficiency reason.

9 9 Effect of Immutability We can do this because String objects are immutable.

10 10 String: Examples Example 1: String s = "abc"; s = s + "def";  A new string "abcdef" is created for s in the second statement. Example 2: String s1 = "abc"; String s2 = "abc"; s1 = "xyz";  s2 still refers to "abc". (Imagine the horror if this is not so!) Hence, strings behave differently from what I explained last week, about reference variable of an object or an array.

11 11 Class Activity: Ball class  Last week, we created a Ball class with these members:  Instance variables (data members)  colour (String)  radius (double)  Methods: constructors, accessors and mutators  Overloaded constructors: Ball() and Ball(String, double)  Accessors: getColour() and getRadius()  Mutators: setColour(String) and setRadius(double)  Let’s download the files Ball.java and BallDriver.java and study them

12 12 Ball: Writing equals() method  Run BallDriver and enter the same data for both objects myBall1 and myBall2  What is the truth value of (myBall1 == myBall2) ?  Why is it so?  The equals() method isn’t working because we haven’t written it! Write the equals() method.  Where should it be? In Ball.java or BallDriver.java?  Write the equals() method now.

13 13 Ball: Writing toString() method (1/2)  The following is a possible output of the program: 1st ball: [blue, 2.5] 2nd ball: [orange, 3.1]  Can you replace the output statements in BallDriver.java with the following? System.out.print("1st ball: "); System.out.println(myBall1); System.out.print("2nd ball: "); System.out.println(myBall2);  What’s the output? (Actual output may differ from below.) 1st ball: Ball@471e30 2nd ball: Ball@10ef90c Hashcodes (page 514)

14 14 Ball: Writing toString() method (2/2)  To make it work, you need to write the toString() method.  The toString() method returns a string, which is the string representation of the data in an object.  Note that after the toString() method is written, you may print myBall1 object in any of these two ways: System.out.println( myBall1 ); or System.out.println( myBall1.toString() );  Write the toString() method now.

15 15 Modularisation (1/2)  Observe that there are duplicate codes in the input section of BallDriver.java. The blue statements and red statements are almost the same. If we need to create more Ball objects, the code gets even longer. System.out.print("Enter 1st ball's colour: "); colour = stdIn.next(); System.out.print("Enter 1st ball's radius: "); radius = stdIn.nextDouble(); Ball myBall1 = new Ball(colour, radius); System.out.print("Enter 2nd ball's colour: "); colour = stdIn.next(); System.out.print("Enter 2nd ball's radius: "); radius = stdIn.nextDouble(); Ball myBall2 = new Ball(colour, radius);

16 16 Modularisation (2/2)  Can you ‘modularise’ your BallDriver.java program so that you call a method each time you want to create a Ball object?  You can then replace the code in the previous slide with this: Ball myBall1 = readBall(stdIn, "1st"); Ball myBall2 = readBall(stdIn, "2nd");  You need to write the readBall() method.

17 17 Chapters 8 and 9  We’ll take a break from the Ball class and return to it later.  Let’s go to Chapters 8 and 9 now.

18 18 Point class (1/3)  I want to introduce the Point class to you because…  it appears quite often in past year’s papers  I want to add an instance variable for a Point object inside the Ball class (so that we have an object within an object)  Refer to API: http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Point.html http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Point.html Field Summary int x x The x coordinate. int y y The y coordinate. Constructor Summary PointPoint() Constructs and initializes a point at the origin (0, 0) of the coordinate space. PointPoint(int x, int y) Constructs and initializes a point at the specified ( x, y) location in the coordinate space. PointPoint(Point p) Constructs and initializes a point with the same location as the specified Point object.Point

19 19 Point class (2/3) Method Summary boolean equalsequals(Object obj) Determines whether or not two points are equal.Object Point getLocationgetLocation() Returns the location of this point. double getXgetX() Returns the X coordinate of the point in double precision. double getYgetY() Returns the Y coordinate of the point in double precision. void movemove(int x, int y) Moves this point to the specified location in the ( x, y) coordinate plane. void setLocationsetLocation(double x, double y) Sets the location of this point to the specified double coordinates. void setLocationsetLocation(int x, int y) Changes the point to have the specified location. void setLocationsetLocation(Point p) Sets the location of the point to the specified location.Point String toStringtoString() Returns a string representation of this point and its location in the ( x, y) coordinate space. This is not a complete list. Refer to the API page.

20 20 Point class (3/3)  Let’s do some programs on Point class so that you are familiar with it.  Download PointDriver.java and study it. Note how a Point object is displayed.  Now, let’s do something more complex. Download MyRectangle.java, MyRectangleDriver.java and MyRectangleDriverV2.java and study them.  The computeArea() method in MyRectangle.java is a stub. Complete it.  Should we make area another data member of the MyRectangle class? Think about it. If we do make it a data member, what changes do we need to make in MyRectangle.java? We’ll discuss this next week.

21 21 Other Point related classes  Check out other related classes on the API  Point2D.Double  Point2D.Float

22 22 Ball class: centre (1/2)  Now that we understand the Point class, let’s include a new data member for the Ball class  centre: of type Point, to represent the centre of a Ball object  Centre is supposed to be a 3D point, since balls are 3D objects, but some students are frightened of 3D, so we shall just make centre a 2D point  You need to update/add constructors,add appropriate accessor and mutator methods, and update the toString() method in Ball.java.

23 23 Ball class: centre (2/2)  In your BallDriver.java program, create two Ball objects, and check whether they overlap each other. (Two balls overlap when their centres are too close to each other.)  You need to add an appropriate method to do the above.  What should be the name of the method?  Where should that method be, in Ball.java or BallDriver.java?  What is its return type?  What is/are its parameter(s)?  This is your take-home exercise

24 24 Next week  Next week, I will present BallV2.java and BallV2Driver.java that include all the things we’ve discussed today

25 25 Announcement/Reminder  Lab #3  Deadline: 8 October (Wednesday), 2359hr.  Identical codes  Please do not share codes for your lab assignments!  Mid-term test  Results will be released on the IVLE gradebook. Watch out for the announcement.  Your answer sheets will be returned to you next week in your discussion session.

26 26 This is Week 8  Next week?  Chapter 10 Arrays and ArrayList(sections 10.7 – 10.14)

27 27 End of file


Download ppt "CS1101: Programming Methodology Aaron Tan."

Similar presentations


Ads by Google