CS 205 Lecture 27 - University of...

30
Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 1 Lecture 27 Log into Windows/ACENET. Start MS VS and open the PointClassDemo project. Reminder: Project 1 is due on Wednesday. Questions?

Transcript of CS 205 Lecture 27 - University of...

Page 1: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 1

Lecture 27

Log into Windows/ACENET. Start MS VS and open the PointClassDemo project.

Reminder: Project 1 is due on Wednesday. Questions?

Page 2: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 2

Outline

Classes – Chapter 4 Instance methods Static methods Properties

Exceptions and exception handling

Page 3: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 3

Static Methods

The methods we wrote for our console programs used the static modifier. This is used when the method is to be called without a class object. Since it is defined in a class, it is called with the class name. E.g., Math.Sqrt( )

One important static method is Parse( ), which is used when a user is expected to enter values of the class from the keyboard. For example, we have used double.Parse( ) and int.Parse( ) to interpret user input strings into double and int values, respectively.

Page 4: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 4

Parse( ) Method

A Parse( ) method basically ignores any punctuation in the user entered string and converts the rest into attribute values.

For the Point class, we want to parse strings of the form "(x,y)", where x and y are numbers. This involves find the substrings between the punctuation and convert them into the coordinate values and construct a Point object with them.

Page 5: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 5

Parse( ) Method

For example, for (12.5,-3.14)

Two string methods are useful for doing this FindIndexOf( ) receives a character to search for

and returns the index of the first occurrence of the character if it is present, or -1 if it is not.

Substring( ) receives the starting index of a substring and the number of characters in the substring. It returns a (new) substring consisting of the character at the starting index and the next number of characters or to the end of the string, whichever is reached first.

find these substrings and convert to numbers for x and y

Page 6: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 6

Parse( ) Method

For now, we will assume that the user enters a well-formed string, i.e., '(' is the first character, ')' is the last character, and there is a ',' in the middle of the string between two substrings that are valid numbers. Here is the basic algorithm: Find the index of the ',' using FindIndexOf( ) Compute the start index and length of the two

substrings Use Substring( ) to get the substrings Use double.Parse( ) to convert them into numbers Create and return a Point with these coordinates

Page 7: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 7

Parse( ) Method

static Point Parse (string input){   int commaIndex = input.FindIndexOf(',');   int xStartIndex = 1;   int xLength = commaIndex – 1;   int yStartIndex = commaIndex + 1;   int yLength = input.Length – commaIndex – 2;   string xString =       input.Substring(xStartIndex, xLength);   string yString =       input.Substring(yStartIndex, yLength);   double newX = double.Parse(xString);   double newY = double.Parse(yString);   return new Point(newX, newY);  // create a Point}

Page 8: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 8

Testing Parse( )

To test the Parse( ) methods, we will write handlers for the Enter buttons.

Double-click on the left Enter button to go to the button handler this button. This handler does the following: Use Point.Parse( ) to parse txtPoint1.Text and

assign the result to variable p1 Set the Text property of lblPoint1 to p1.ToString( ) Clear txtPoint1.Text Add an item to lbxResults.Items indicating the result

of the handler (this is already completed)

Page 9: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 9

Testing Parse( )

private void btnEnterP1_Click(object sender,                              EventArgs e){   p1 = Point.Parse(txtPoint1.Text);   lblPoint1.Text = p1.ToString();   txtPoint1.Text = "";   lbxResults.Items.Add      ("Entered p1: " + p1.ToString());}

Page 10: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 10

Testing Parse( )

Build and run your program. You should be able to input a Point in "(x,y)" form in the left textbox, click on the left Enter button, and see the label above the textbox change to the input and the textbox become empty, along with a message in the results area.

Repeat these steps for right Enter button handler. This handler is exactly the same, except that is uses p2, txtPoint2, and lblPoint2.

Page 11: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 11

Magnitude( ) Method

The magnitude of a Point (x,y) is its distance from the origin (0,0) computed using the formula:

The Point class instance method Magnitude( ) returns the magnitude its Point object.

Write the method definition for Magnitude in the file Point.cs.

distance=x2 y2

Page 12: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 12

Testing Magnitude( )

Double-click on the Magnitude button to get a stub for its handler.

Write code to compute the magnitude of Points p1 and p2, and display these results in the results area ListBox.

Page 13: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 13

Getters and Setters

As noted last time, we make the attributes private so that the class can control access to them, preventing applications from creating invalid objects.

However, often an application would like to read or change an attribute. To support such actions a class can provide a getter method that returns the attribute and a setter method that receives and assigns a new value to the attribute.

Page 14: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 14

Getters and Setters

E.g., to allow an application to get and set the x-coordinate of a Point, we could write instance methods:// Getterdouble GetX (){   return x;}

// Settervoid SetX(double newX){   x = newX;}

Page 15: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 15

Getters and Setters

To use these methods, we call them as usual. E.g. for Point object p1:// In btnGetX_ClicklbxResults.Items.Add("p1's x­coordinate is: " +                      p1.GetX().ToString());

// In btnSetX_Click// Get new coordinate from input textbox, if existsif (txtPoint1.Text != ""){   double newX = double.Parse(txtInput.Text);   p1.SetX(newX);   txtPoint1.Text = "";   lblPoint1 = p1.ToString();}

Page 16: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 16

Properties

While getter and setter methods work, they are tedious write and use, especially needing to type the ( )'s everywhere. It would be more convenient for the application programmer if the syntax for this use could be as if the attribute were a public data member.

E.g., for the Point class, we might like to be able to write:lbxResults.Items.Add("p1's x­coordinate is: " + p1.X)

p1.X = newX;

Page 17: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 17

Properties

C# has a special method definition that allows us to define getters and setters that are called using this syntax called a property.

By convention, a property's name is the same as the attribute it accesses only capitalized. (This assumes the convention that the attribute variables start with a lowercase letter.) E.g., Point attribute x is accessed using property X.

Page 18: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 18

Properties

The getter and setter for a property are defined together. Either is optional. (E.g., you might want to allow applications to read an attribute, but not change it.) public double X  // name of property{   get // getter definition   {      return x;   }   set // setter definition   {      x = value;  // value is an implicit argument    }              // from right side of assignment}

Page 19: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 19

Properties

Write a property with getters and setters for the y-coordinate attribute in Point.cs.

Properties are accessed as shown previously. In particular, there are no ( )'s to call them.

Page 20: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 20

Properties

Complete the GetX, GetY, SetX, and SetY button handlers for PointClassDemo.cs. GetX is to display the x-coordinate of Point objects

p1 and p2 in the results area using the X property GetY is to do the same for the y-coordinates of each point.

SetX is to convert the input strings in each textbox (if they are not empty strings) into double values and set the x-coordinate using the X property for each point. SetY is to do the same for the y-coordinates of each point.

Page 21: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 21

Exception Handling

So far we have ignored what happens when a user types in input that is ill-formed. In the absence of any error handling, a program usually will abort with an unhandled exception.

An exception is an object that is thrown by a method when an error occurs. To handle an exception, it is caught by the code that called the method. For GUI programs, the usual action is to inform the user and go back to waiting for input.

Page 22: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 22

Exception Handling

When an exception is thrown, if the calling method does not catch it, the caller is immediately aborted and the exception is rethrown.

For example, most Parse( ) methods will throw a FormatException if the string being parsed is not well-formed. In the Point.Parse( ) method, we call double.Parse( ), but we can ignore any exceptions that it throws and they will be passed on to Point.Parse( )'s caller.

Page 23: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 23

Exception Handling

incorrect input

unhandled exception dialog

name of exceptionunder "Details"; alsoa backtrace of calls

Page 24: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 24

Exception Handling

Sometimes a caller wants to do something when an error occurs, such as inform the user that an error has happened and tell them what to do.

For example, in the handlers for the Enter, SetX, and SetY buttons we would like to inform the user of the error via a MessageBox and then go back to waiting for user input.

Page 25: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 25

Try-Catch Statement

Exceptions are handled by putting calls in a try-catch statement. This statement has the following syntax:try{   // method calls that may throw an exception   // there may be more than one such call}catch (<exception type> ex){   // do something about the error}// more than one catch block can be attached// the first one that matches is executed

Page 26: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 26

Try-Catch Statement

In btnEnterP1_Click, we can catch any FormatExceptions as follows:try{      p1 = Point.Parse(txtPoint1.Text);}catch (FormatException ex){   MessageBox.Show ("Input is invalid.  Must be (#,#).",                    "Point Class Demo");   txtPoint1.Text = "";  // clear textbox   return;               // go back to waiting}// rest of handler goes here

Page 27: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 27

Exception Handling

incorrect input

MessageBox shown whenFormatException is thrown

Page 28: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 28

Throwing Exceptions

Our Point.Parse( ) method now throws a FormatException when the numeric portions of the input are incorrect. But there are other possible input errors: The first character must be '(' and the last character

must be ')'. Currently, any character can be in those places.

There must be a ',' in the middle. If not, the code that computes the two number substrings will be incorrect.

Page 29: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 29

Throwing Exceptions

incorrect input

the second substringhas computed length < 0, which is not allowed

Page 30: CS 205 Lecture 27 - University of Evansvilleuenics.evansville.edu/~hwang/s11-courses/cs205/lecture27-classes2.pdf · Monday, March 21 CS 205 Programming for the Sciences - Lecture

Monday, March 21 CS 205 Programming for the Sciences - Lecture 27 30

Throwing Exceptions

The exception thrown by the Substring method is not meaningful to Point.Parse( ) callers. We want a FormatException thrown instead.

To throw an exception, we use the throw operator with a new exception object as shown:int commaIndex = input.FindIndexOf(',');if ((input[0] != '(') ||     (input[input.Length ­ 1] != ')') ||    (commaIndex == ­1))   throw new FormatException("Invalid Point");

// rest of Parse method code goes here