1 / 36

COMP 110: Introduction to Programming

COMP 110: Introduction to Programming. Tyler Johnson Apr 13, 2009 MWF 11:00AM-12:15PM Sitterson 014. Announcements. Program 5 Milestone 1 due Wednesday by 5pm. Questions?. Today in COMP 110. Brief Review Finish Inheritance Basic Exception Handling Programming Demo.

nicolasaj
Télécharger la présentation

COMP 110: Introduction to Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. COMP 110:Introduction to Programming Tyler Johnson Apr 13, 2009 MWF 11:00AM-12:15PM Sitterson 014

  2. Announcements • Program 5 Milestone 1 due Wednesday by 5pm

  3. Questions?

  4. Today in COMP 110 • Brief Review • Finish Inheritance • Basic Exception Handling • Programming Demo

  5. Review: Overriding Methods • Person has a jump method, so all subclasses have a jump method Person Athlete HighJumper ExtremeAthlete Skydiver XGamesSkater

  6. Review: Overriding Methods • Each subclass has its own jump functionality public class Person { public void jump() { System.out.println("Whee!"); } } public class Athlete extends Person { public void jump() { System.out.println("I jump really well!"); } }

  7. Review: Type Compatibilities • ExtremeAthlete is an Athlete • XGamesSkater is a Person • Person is not necessarily a Skydiver • Person p = new ExtremeAthlete(); • Legal • Athlete a = new Athlete(); • Legal • XGamesSkater xgs = new Person(); • Illegal

  8. Polymorphism • “many forms” • Enables the substitution of one object for another as long as the objects have the same interface 8

  9. Dynamic Binding public static void jump3Times(Person p) { p.jump(); p.jump(); p.jump(); } public static void main(String[] args) { XGamesSkater xgs = new XGamesSkater(); Athlete ath = new Athlete(); jump3Times(xgs); jump3Times(ath); }

  10. Inheritance • Some final things on inheritance • Implementing the equals method

  11. The Class Object • The Java class Object provides methods that are inherited by every class • For example • equals, toString • These methods should be overridden with methods appropriate for the classes you create

  12. The equals Method • Every class has a default .equals() method • Inherited from the class Object • Returns whether two objects of the class are “equal” in some sense • Does not necessarily do what you want • You decide what it means for two objects of a class you create to be considered equal by overriding the equals method • Perhaps books are equal if the names and page numbers are equal • Perhaps only if the names are equal • Put this logic inside .equals() method

  13. The equals Method • Object has an equals method • Subclasses should override it public boolean equals(Object obj) { return (this == obj); } • What does this method do? • Returns whether this has the same address as obj • This is the default behavior for subclasses

  14. The equals Method • First try: public boolean equals(Student std) { return (this.id == std.id); } • This is overloading, not overriding • We want to be able to test if two Objects are equal

  15. The equals Method • Second try public boolean equals(Object obj) { Student otherStudent = (Student) obj; return (this.id == otherStudent.id); } • What does this method do? • Typecasts the incoming Object to a Student • Returns whether this has the same id as otherStudent

  16. The equals Method public boolean equals(Object obj) { Student otherStudent = (Student) obj; return (this.id == otherStudent.id); } Why do we need to typecast? Object does not have an id, obj.id would not compile What’s the problem with this method? What if the object passed in is not actually a Student? The typecast will fail and we will get a runtime error

  17. The instanceof Operator • We can test whether an object is of a certain class type: if(obj instanceof Student) { System.out.println("obj is an instance of the class Student"); } • Syntax: objectinstanceofClass_Name • Use this operator in the equals method

  18. The equals Method • Third try public boolean equals(Object obj) { if ((obj != null) && (obj instanceof Student)) { Student otherStudent = (Student)obj; return (this.id == otherStudent.id); } return false; } • null is a special constant that can be assigned to a variable of a class type – means that the variable does not refer to anything right now

  19. Basic Exception Handling • Section 9.1 in text

  20. Error Handling • Recall from Program 4 • Parse a string of the form • operand1 operator operand2 • For example • "23.55 + 54.43" • We assumed the input was valid • What if it’s not?

  21. Error Handling • Example of invalid input • "g23.55 + 54.43" • Your programs would happily parse away and attempt to call • Double.parseDouble("g23.55"); • Result? • Your program crashes with a “NumberFormatException”

  22. Exceptions • An exception is an object that signals the occurrence of an unusual (exceptional) event during program execution • Exception handling is a way of detecting and dealing with these unusual cases in principled manner i.e. without a run-time error or program crash

  23. Example • Handling divide by zero exceptions • BasketballScores int score = keyboard.nextInt(); int scoreSum = 0; int numGames = 0; while(score >= 0) { scoreSum += score; numGames++; score = keyboard.nextInt(); } double average = scoreSum/numGames; Possible ArithmeticException: / by zero!

  24. Example • We could do this int score = keyboard.nextInt(); int scoreSum = 0; int numGames = 0; while(score >= 0) { scoreSum += score; numGames++; score = keyboard.nextInt(); } double average = 0; if(numGames > 0) average = scoreSum/numGames;

  25. Example • Using Exception Handling (try/catch blocks) int score = keyboard.nextInt(); int scoreSum = 0; int numGames = 0; while(score >= 0) { scoreSum += score; numGames++; score = keyboard.nextInt(); } double average = 0; try { average = scoreSum/numGames; } catch(ArithmeticException e) { System.out.println(e.getMessage()); System.out.println("Cannot compute average for 0 games"); }

  26. Example • When numGames != 0 int score = keyboard.nextInt(); int scoreSum = 0; int numGames = 0; while(score >= 0) { scoreSum += score; numGames++; score = keyboard.nextInt(); } double average = 0; try { average = scoreSum/numGames; } catch(ArithmeticException e) { System.out.println(e.getMessage()); System.out.println("Cannot compute average for 0 games"); }

  27. Example • When numGames == 0 int score = keyboard.nextInt(); int scoreSum = 0; int numGames = 0; while(score >= 0) { scoreSum += score; numGames++; score = keyboard.nextInt(); } double average = 0; try { average = scoreSum/numGames; } catch(ArithmeticException e) { System.out.println(e.getMessage()); System.out.println("Cannot compute average for 0 games"); }

  28. The try Block • A try block contains the basic algorithm for when everything goes smoothly • Try blocks will possibly throw an exception • Syntax try { Code_To_Try } • Example try { average = scoreSum/numGames; }

  29. The catch Block • The catch block is used to deal with any exceptions that may occur • This is your error handling code • Syntax catch(Exception_Class_Name Catch_Block_Parameter) { Process_Exception_Of_Type_Exception_Class_Name } Possibly_Other_Catch_Blocks • Example catch(ArithmeticException e) { System.out.println(e.getMessage()); System.out.println("Cannot compute average for 0 games"); }

  30. Throwing Exceptions • You can also throw your own exceptions try { int score = keyboard.nextInt(); int scoreSum = 0; int numGames = 0; while(score >= 0) { scoreSum += score; numGames++; score = keyboard.nextInt(); } if(numGames <= 0) throw new Exception("Exception: num games is less than 1"); double average = scoreSum/numGames; } catch(Exception e) { //catches any kind of exception System.out.println(e.getMessage()); }

  31. Throwing Exceptions • Syntax throw newException_Class_Name(Possibly_Some_Arguments); • Example throw new Exception("Exception: num games is less than 1"); • or Exception exceptObject = new Exception("Illegal character."); throw exceptObject;

  32. Exception Objects • An exception is an object • All exceptions inherit the method getMessage() from the class Exception • Example catch(ArithmeticException e) { System.out.println(e.getMessage()); System.out.println("Cannot compute average for 0 games"); }

  33. Java Exception Handling • A try block contains code that may throw an exception • When an exception is thrown, execution of the try block ends immediately • Depending on the type of exception, the appropriate catch block is chosen and executed • If no exception is thrown, all catch blocks are ignored

  34. Programming Demo • Adding Exception Handling to Program 4 • If we call Double.parseDouble() with invalid input such as "g23.55", the method will throw a “NumberFormatException” • Catch this exception and signal to the user there was a problem with the input

  35. Programming Demo • Programming

  36. Wednesday • Basic File I/O

More Related