Principles of Software Construction: Objects, Design, and Concurrency. Objects (continued) toad. Spring J Aldrich and W Scherlis

Similar documents
Principles of Software Construction: Objects, Design and Concurrency. Exceptions, scope, static data and methods, and Generics.

Principles of Software Construction: Objects, Design and Concurrency. Packages and Polymorphism. toad Fall 2012

Outline. Java Models for variables Types and type checking, type safety Interpretation vs. compilation. Reasoning about code. CSCI 2600 Spring

Chapter 13 Exception Handling

CSC System Development with Java. Exception Handling. Department of Statistics and Computer Science. Budditha Hettige

ECE 122. Engineering Problem Solving with Java

Programming Languages and Techniques (CIS120)

Programming Languages and Techniques (CIS120)

Programming Languages and Techniques (CIS120)

CS 3 Introduction to Software Engineering. 3: Exceptions

CSC207H: Software Design. Exceptions. CSC207 Winter 2018

Lecture 19 Programming Exceptions CSE11 Fall 2013

Exceptions. Computer Science and Engineering College of Engineering The Ohio State University. Lecture 15

1B1b Inheritance. Inheritance. Agenda. Subclass and Superclass. Superclass. Generalisation & Specialisation. Shapes and Squares. 1B1b Lecture Slides

EXCEPTION HANDLING. Summer 2018

AP COMPUTER SCIENCE JAVA CONCEPTS IV: RESERVED WORDS

ITI Introduction to Computing II

Exceptions. CSC207 Winter 2017

Exceptions vs. Errors Exceptions vs. RuntimeExceptions try...catch...finally throw and throws

BBM 102 Introduction to Programming II Spring Exceptions

Programming Languages and Techniques (CIS120)

School of Informatics, University of Edinburgh

JAVA BASICS II. Example: FIFO

ITI Introduction to Computing II

Outline. Inheritance. Abstract Classes Interfaces. Class Extension Overriding Methods Inheritance and Constructors Polymorphism.

Principles of Software Construction: Objects, Design, and Concurrency (Part 2: Designing (Sub )Systems)

Exceptions. References. Exceptions. Exceptional Conditions. CSE 413, Autumn 2005 Programming Languages

Lecture 14 Summary 3/9/2009. By the end of this lecture, you will be able to differentiate between errors, exceptions, and runtime exceptions.

COMP1008 Exceptions. Runtime Error

Introduction. Exceptions: An OO Way for Handling Errors. Common Runtime Errors. Error Handling. Without Error Handling Example 1

CS/ENGRD 2110 SPRING Lecture 2: Objects and classes in Java

BBM 102 Introduction to Programming II Spring 2017

CS159. Nathan Sprague

COMP200 EXCEPTIONS. OOP using Java, based on slides by Shayan Javed

More on Exception Handling

ITI Introduction to Computing II

Exceptions. CSE 142, Summer 2002 Computer Programming 1.

Exceptions. Readings and References. Exceptions. Exceptional Conditions. Reading. CSE 142, Summer 2002 Computer Programming 1.

Exception-Handling Overview

Programming Languages and Techniques (CIS120)

Lecture 20. Java Exceptional Event Handling. Dr. Martin O Connor CA166

National University. Faculty of Computer Since and Technology Object Oriented Programming

CS/ENGRD 2110 SPRING Lecture 7: Interfaces and Abstract Classes

Object oriented programming. Instructor: Masoud Asghari Web page: Ch: 7

ITI Introduction to Computing II

Inheritance. SOTE notebook. November 06, n Unidirectional association. Inheritance ("extends") Use relationship

CS61B Lecture #12. Today: Various odds and ends in support of abstraction.

CMSC131. Exceptions and Exception Handling. When things go "wrong" in a program, what should happen.

Programming II (CS300)

Principles of Software Construction: Objects, Design, and Concurrency

JAC444 - Lecture 4. Segment 1 - Exception. Jordan Anastasiade Java Programming Language Course

More on Exception Handling

About This Lecture. Outline. Handling Unusual Situations. Reacting to errors. Exceptions

Chapter 6 Introduction to Defining Classes

Programming Languages and Techniques (CIS120)

Day 8. COMP1006/1406 Summer M. Jason Hinek Carleton University

Programming Languages and Techniques (CIS120)

Weiss Chapter 1 terminology (parenthesized numbers are page numbers)

ITI Introduction to Computing II

To Think About. MyClass.mogrify(new int[] { 1, 2, 4, 6 }));

G Programming Languages - Fall 2012

CS/ENGRD 2110 SPRING Lecture 2: Objects and classes in Java

CSE 331 Software Design & Implementation

Object Oriented Programming Exception Handling

CS 61B Data Structures and Programming Methodology. July 7, 2008 David Sun

Programming Languages and Techniques (CIS120)

Errors and Exceptions

G Programming Languages - Fall 2012

Introduction to Programming Using Java (98-388)

Agenda. Objects and classes Encapsulation and information hiding Documentation Packages

Programming Languages and Techniques (CIS120)

Recreation. MyClass.mogrify(new int[] { 1, 2, 4, 6 }));

CS/ENGRD 2110 FALL Lecture 7: Interfaces and Abstract Classes

Internal Classes and Exceptions

Chapter 8. Exception Handling. CS 180 Sunil Prabhakar Department of Computer Science Purdue University

6.Introducing Classes 9. Exceptions

COURSE 2 DESIGN PATTERNS

Chapter 12 Exception Handling

CS/ENGRD 2110 FALL Lecture 2: Objects and classes in Java

CS S-22 Exceptions 1. Running a web server, don t want one piece of bad data to bring the whole thing down

CS61B Lecture #12. Programming Contest: Coming up Saturday 5 October. See the contest announcement page, here.

Exceptions and Design

Programming II (CS300)

C16b: Exception Handling

Rules and syntax for inheritance. The boring stuff

Exceptions and assertions

Exceptions. Examples of code which shows the syntax and all that

Exceptions. What exceptional things might our programs run in to?

CSE 307: Principles of Programming Languages

Modern Programming Languages. Lecture Java Programming Language. An Introduction

VALLIAMMAI ENGINEERING COLLEGE

Assertions and Exceptions Lecture 11 Fall 2005

CS 11 java track: lecture 3

Selected Java Topics

CS/ENGRD 2110 SPRING 2018

PASCAL - OBJECT ORIENTED

Exceptions. Produced by. Algorithms. Eamonn de Leastar Department of Computing, Maths & Physics Waterford Institute of Technology

Check out FilesAndExceptions from SVN. Exam 2 Review File I/O, Exceptions Vector Graphics Project

Cpt S 122 Data Structures. Course Review Midterm Exam # 2

More on Objects in JAVA TM

Transcription:

Principles of Software Construction: Objects, Design, and Concurrency Objects (continued) toad Spring 2012 Jonathan Aldrich Charlie Garrod School of Computer Science 2012 J Aldrich and W Scherlis

Announcements Homework 0 is out Due Tuesday at 11:59pm Moving between sections If you have a conflict, it s best to change sections officially in the course registration system If all non-conflicting sections are full, you may attend others, but priority goes to those who are registered Others please wait to take a seat until the section begins Waitlists There is room in section A. Room in other sections may open up. If you cannot attend section A, email us. We will give you access to SVN so you can do the first assignment No extra late days for waitlisted students! Show you care about the class by doing the work. toad 3

Key object concepts Inside an object Kinds of members: Fields, Methods, Constructors Visibility from the outside: hiding the members The keyword this Interfaces and the management of expectations Java interfaces Introduction to types Objects and the heap Method dispatch Objects and identity Equals vs. == Class Defining the object template Diagrams can show relationships among classes A class can have its own static fields and methods Objects and mutability Abstract mutability and implementation mutability toad 4

Review: Points and Rectangles class Point { int x, y; int getx() { return x; // a method; gety() is similar Point(int px, int py) { x = px; y = py; // constructor for creating the object class Rectangle { Point origin; int width, height; Point getorigin() { return origin; int getwidth() { return width; void draw() { drawline(origin.getx(), origin.gety(), // first line origin.getx()+width, origin.gety()); // more lines here Rectangle(Point o, int w, int h) { origin = o; width = w; height = h; toad 5

Example: Points and Rectangles class Point { int x, y; int getx() { return x; // a method; gety() is similar Point(int px, int py) { x = px; y = py; // constructor for creating the object class Rectangle { Point origin; int width, height; Point getorigin() { return origin; int getwidth() { return width; void draw() { drawline(origin.getx(), origin.gety(), // first line Some Client Code // more lines here Rectangle(Point o, int w, int h) { origin.getx()+width, origin.gety()); Point o = new Point(0, 10); // allocates memory, calls ctor Rectangle r = new Rectangle(o, 5, 10); r.draw(); origin = o; width = w; height = h; int rightend = r.getorigin().getx() + r.getwidth(); // 5 toad 6

What s really going on? Method Stack main() o r rightend=5 r : Rectangle origin width = 5 height = 10 o : Point x = 0 y = 10 Some Client Code Point o = new Point(0, 10); // allocates memory, calls ctor Rectangle r = new Rectangle(o, 5, 10); r.draw(); int rightend = r.getorigin().getx() + r.getwidth(); // 5 toad 7

Anatomy of a Method Call r.setx(5) The receiver, an implicit argument, called this inside the method Method arguments, just like function arguments The method name. Identifies which method to use, of all the methods the receiver s class defines toad 8

The keyword this refers to the receiver class Point { int x, y; int getx() { return x; Point(int px, int py) { x = px; y = py; can also be written in this way: class Point { int x, y; int getx() { return this.x; Point(int x, int y) { this.x = x; this.y = y; toad 9

Controlling access by client code class Point { private int x, y; public int getx() { return x; // a method; gety() is similar public Point(int px, int py) { x = px; y = py; // constructor for creating the object class Rectangle { private Point origin; private int width, height; public Point getorigin() { return origin; public int getwidth() { return width; public void draw() { drawline(origin.getx(), origin.gety(), // first line origin.getx()+width, origin.gety()); // more lines here public Rectangle(Point o, int w, int h) { origin = o; width = w; height = h; toad 10

Hiding interior state class Point { private int x, y; public int getx() { return x; // a method; gety() is similar public Point(int px, int py) { x = px; y = py; // constructor for creating the object class Rectangle { private Point origin; private int width, height; public Point getorigin() { return origin; public int getwidth() { return width; public void draw() { Some Client Code Point o = new Point(0, 10); // allocates memory, calls ctor Rectangle r = new Rectangle(o, 5, 10); r.draw(); int rightend = r.getorigin().getx() + r.getwidth(); // 5 Client Code that will not work in this version drawline(origin.getx(), origin.gety(), // more lines here origin.getx()+width, origin.gety()); public Rectangle(Point o, int w, int h) { origin = o; width = w; height = h; // first line Point o = new Point(0, 10); // allocates memory, calls ctor Rectangle r = new Rectangle(o, 5, 10); r.draw(); int rightend = r.origin.x + r.width; // trying to look inside toad 11

Hiding interior state class Point { private int x, y; public int getx() { return x; // a method; gety() is similar public Point(int px, int py) { x = px; y = py; // constructor for creating the object class Rectangle { Discussion: What are the benefits of private fields? Methods can also be private why is this useful? private Point origin; private int width, height; public Point getorigin() { return origin; public int getwidth() { return width; public void draw() { drawline(origin.getx(), origin.gety(), // first line origin.getx()+width, origin.gety()); // more lines here public Rectangle(Point o, int w, int h) { origin = o; width = w; height = h; toad 12

Key object concepts Inside an object Kinds of members: Fields, Methods, Constructors Visibility from the outside: hiding the members The keyword this Interfaces and the management of expectations Java interfaces Introduction to types Objects and the heap Method Dispatch Objects and identity Equals vs. == Class Defining the object template Diagrams can show relationships among classes A class can have its own static fields and methods Objects and mutability Abstract mutability and implementation mutability toad 13

Contracts and Clients Contract of service provider and client Interface specification Functionality and correctness expectations Performance expectations Hiding of respective implementation details Hidden from service client Hidden from service provider Service interface Service implementation Client environment toad 14

Java interfaces and classes Object-orientation 1. Organize program functionality around kinds of abstract objects For each object kind, offer a specific set of operations on the objects Objects are otherwise opaque Details of representation are hidden Messages to the receiving object 2. Distinguish interface from class Interface: expectations Class: delivery on expectations (the implementation) 3. Explicitly represent the taxonomy of object types This is the inheritance hierarchy A square is a shape toad 15

Functional Lists of Integers Some operations we expect to see: create a new list empty, or by adding an integer to an existing list return the size of the list get the i th integer in the list concatenate two lists into a new list Key questions How to implement the lists? Many options Arrays, linked lists, etc How to hide the details of this choice from client code? Why do this? How to state expectations? A variable v can reference a list of integers toad 16

Interfaces, Types, Classes Two ways to put a new empty list into a variable IntList l = new EmptyIntList(); EmptyIntList al = new EmptyIntList(); Class Interface Type IntList Serializable Class EmptyIntList IntListCell toad 17

Interfaces stating expectations The IntList interface public interface IntList { int size(); int get(int n); IntList concatenate(intlist otherlist); String tostring(); The declaration for v ensures that any object referenced by v will have implementations of the methods size, get, concatenate, and tostring Intlist v = int len = v.size(); int third = v.get(2); System.out.println (v.tostring()); toad 18

Implementing lists Two options (among many): Arrays 1 3 7 5 11 13 6 42 Linked lists 1 3 9 4 empty Operations: Array List create a new empty list const const return the size of the list const linear return the i th integer in the list?? create a list by adding to the front?? concatenate two lists into a new list?? toad 19

Implementation of interfaces Classes can implement one or more interfaces. public class IntListCell implements IntList, Cloneable { Semantics Must provide code for all methods in the interface(s) Best practices Define an interface whenever there may be multiple implementations of a concept Variables should have interface type, not class type int addlist(arraylist list) { // no! int addlist(list list) { // yes! toad 20

An inductive definition The size of a list L is 0 1 + size of the tail of L if L is the empty list otherwise toad 21

Implementing Size public class EmptyIntList implements IntList { public int size() { return 0;... Base case public class IntListCell implements IntList { public int size() { return 1 + next.size();... Inductive case toad 22

List Representation (BROKEN!) public class EmptyIntList implements IntList { public int size() { return 0;... Base case public class IntListCell implements IntList { private int value; private IntListCell next; public int size() { return 1 + next.size();... Type is wrong! May be a cell or an empty list! Inductive case toad 23

List Representation (FIXED!) public class EmptyIntList implements IntList { public int size() { return 0;... Base case public class IntListCell implements IntList { private int value; private IntList next; public int size() { return 1 + next.size();... Interface type provides needed flexibility. Inductive case toad 24

List Constructors public class EmptyIntList implements IntList { public EmptyIntList() { // nothing to initialize... Java gives us this default constructor for free if we don t define any constructors. public class IntListCell implements IntList { public IntListCell(int val, IntList next) { this.value = val; this.next = next; Base case private int value; private IntList next;... toad 25

Some Client Code fivelist : IntListCell emptylist : EmptyIntList In main( ) IntList emptylist = new EmptyIntList(); IntList fivelist = new IntListCell(5, emptylist); toad 26

Some Client Code fivelist : IntListCell emptylist : EmptyIntList value = 5 next In main( ) public IntListCell(int value, IntList next) { // value is 5, next is emptylist this.value = value; // this is fivelist this.next = next; IntList emptylist = new EmptyIntList(); IntList fivelist = new IntListCell(5, emptylist); toad 27

Some Client Code fivelist : IntListCell emptylist : EmptyIntList value = 5 next fourlist : IntListCell value = 4 next In main( ) IntList emptylist = new EmptyIntList(); IntList fivelist = new IntListCell(5, emptylist); IntList fourlist = new IntListCell(4, emptylist); IntList fourfive = fourlist.concatenate(fivelist);// what happens? toad 28

Implementing Concatenate public class EmptyIntList implements IntList { public IntList concatenate(intlist other) { return other;... Base case public class IntListCell implements IntList { public IntList concatenate(intlist other) { IntList newnext = next.concatenate(other); return new IntListCell(value, newnext);... Inductive case Two concatenate methods which do we use? toad 29

Some Client Code fivelist : IntListCell emptylist : EmptyIntList value = 5 next fourlist : IntListCell value = 4 next In main( ) IntList emptylist = new EmptyIntList(); IntList fivelist = new IntListCell(5, emptylist); IntList fourlist = new IntListCell(4, emptylist); IntList fourfive = fourlist.concatenate(fivelist);// what happens? toad 30

Key object concepts Inside an object Kinds of members: Fields, Methods, Constructors Visibility from the outside: hiding the members The keyword this Interfaces and the management of expectations Java interfaces Introduction to types Objects and the heap Method dispatch Objects and identity Equals vs. == Class Defining the object template Diagrams can show relationships among classes A class can have its own static fields and methods Objects and mutability Abstract mutability and implementation mutability toad 31

Method dispatch (simplified) Example: IntList fourlist = new IntListCell(4, emptylist); IntList fourfive = fourlist.concatenate(fivelist); Step 1 (compile time): determine what type to look in Look at the static type (IntList) of the receiver (fourlist) Step 2 (compile time): find the method in that type Find the method in the class with the right name Later: there may be more than one such method IntList concatenate(intlist otherlist); Keep the method only if it is accessible e.g. remove private methods Error if there is no such method toad 32

Method dispatch (simplified) Example: List fourlist = new IntListCell(4, emptylist); List fourfive = fourlist.concatenate(fivelist); Step 3 (run time): Determine the run-time type of the receiver Look at the object in the heap and get its class Step 4 (run time): Locate the method implementation to invoke Look in the class for an implementation of the method we found statically (step 2) public IntList concatenate(intlist other) { IntList newnext = next.concatenate(other); return new IntListCell(value, newnext); Invoke the method toad 33

Some Client Code fivelist : IntListCell emptylist : EmptyIntList value = 5 next fourlist : IntListCell value = 4 next class IntListCell { public IntList concatenate(intlist other) { // this is fourlist, other is fivelist IntList newnext = next.concatenate(other); return new IntListCell(value, newnext); In main( ) List emptylist = new EmptyIntList(); List fivelist = new IntListCell(5, emptylist); List fourlist = new IntListCell(4, emptylist); List fourfive = fourlist.concatenate(fivelist); // what happens? toad 34

A Question for You! fivelist : IntListCell emptylist : EmptyIntList value = 5 next fourlist : IntListCell value = 4 next 1. What concatenate method is called next? 2. What does the final heap look like? class IntListCell { public IntList concatenate(intlist other) { // this is fourlist, other is fivelist IntList newnext = next.concatenate(other); return new IntListCell(value, newnext); In main( ) List emptylist = new EmptyIntList(); List fivelist = new IntListCell(5, emptylist); List fourlist = new IntListCell(4, emptylist); List fourfive = fourlist.concatenate(fivelist); // what happens? toad 35

Answers fivelist : IntListCell emptylist : EmptyIntList value = 5 next fourlist : IntListCell value = 4 next fourlist.next points to an object of class EmptyIntList. Therefore EmptyIntList.concatenate() is called fourfive : IntListCell In main( ) List emptylist = new EmptyIntList(); List fivelist = new IntListCell(5, emptylist); List fourlist = new IntListCell(4, emptylist); value = 4 next List fourfive = fourlist.concatenate(fivelist); // what happens? toad 36

Key object concepts Inside an object Kinds of members: Fields, Methods, Constructors Visibility from the outside: hiding the members The keyword this Interfaces and the management of expectations Java interfaces Introduction to types Objects and the heap Method dispatch Objects and identity Equals vs. == Class Defining the object template Diagrams can show relationships among classes A class can have its own static fields and methods Objects and mutability Abstract mutability and implementation mutability toad 37

Object identity vs. equality There are two notions of equality in OO The same object. References are the same. Possibly different objects, but equivalent content From the client perspective!! The actual internals might be different String s1 = new String ( abc ); String s2 = new String ( abc ); There are two string objects, s1 and s2. The strings are are equivalent, but the references are different if (s1 == s2) { same object else { different objects if (s1.equals(s2)) { equivalent content else { not An interesting wrinkle: literals Defined in the class String String s3 = abc ; String s4 = abc ; These are true: s3==s4. s3.equals(s2). s2!= s3. toad 38

Principles of Software Construction: Objects, Design, and Concurrency Exceptions toad Spring 2012 Jonathan Aldrich Charlie Garrod School of Computer Science 2012 J Aldrich and W Scherlis

Help! What do I do now? int readfromfile(string file) { if (exists(file)) return // read the integer else // uh, oh! int getvaluefromlist(int index) { if (index < 0) // uh, oh! else void transferfunds(int amount, Account to) { if (toopoor()) // uh, oh! else toad 40

Exceptions Exceptions notify the caller of an operation of failure Benefits of exceptions Provide high-level summary of error and stack trace compare: core dumped in C toad 41

Throwing Exceptions Programmatically throwing exceptions throw new ScaryException( reason we are scared ); For example: Java library code throws exceptions when I/O fails Exceptions thrown by the Java runtime e.g. failed cast, null pointer dereference, array out of bounds, out of memory Semantics Exception propagates from callee to caller Until main() is reached, or the exception is caught toad 42

Exceptions Exceptions notify the caller of an operation of failure Benefits of exceptions Provide high-level summary of error and stack trace compare: core dumped in C Can t forget to handle common failure modes compare: using a flag or special return value Can optionally recover from failure compare: calling System.exit() toad 43

Catching Exceptions try { dangerousoperation(); catch (MildException e) { recover(); catch (DeadlyException e) { revive(); toad 44

Exceptions Exceptions notify the caller of an operation of failure Benefits of exceptions Provide high-level summary of error and stack trace compare: core dumped in C Can t forget to handle common failure modes compare: using a flag or special return value Can optionally recover from failure compare: calling System.exit() Can clean up on the way out toad 45

Finally try { dangerousoperation(); catch (MildException e) { recover(); catch (DeadlyException e) { revive(); finally { // called on normal completion, any catch block, cleanup(); // or uncaught exception toad 46

Exceptions Exceptions notify the caller of an operation of failure Benefits of exceptions Provide high-level summary of error and stack trace compare: core dumped in C Can t forget to handle common failure modes compare: using a flag or special return value Can optionally recover from failure compare: calling System.exit() Can clean up on the way out Improve code structure Separates failure code from common-case code Allows handling multiple failure type, and multiple failure locations, with one failure handler toad 47

The Exception Hierarchy Object Exception... RuntimeException IOException ClassNotFoundException NullPointerException EOFException FileNotFoundException IndexOutOfBoundsException toad 48

Checked and Unchecked Exceptions Unchecked exception subclass of RuntimeException indicates an error which is highly unlikely and/or typically unrecoverable Examples: failed cast, null pointer dereference, array out of bounds, out of memory Checked exception Subclass of Exception but not RuntimeException Indicates an error that every caller should be aware of and explicitly decide to handle or pass on Must declare in your method signature if your method might throw one! whether directly or because you call anther method that does void dangerousoperation() throws DeadlyException { toad 49

Guidelines for Exception Use Catch and handle all checked exceptions Unless there is no good way to do so, in which case you should pass them on to your caller or throw a RuntimeException Use runtime exceptions for programming errors If you receive bad input, throw a subclass of RuntimeException Other good practices Do not swallow an exception without doing anything. At least print a stack trace! Better yet, try to recover. When you throw an exception, provide an informative string to the constructor explaining the error toad 50

Toad s Take-Home Messages OOP code is organized code around kinds of things Objects correspond to things/concepts of interest Objects embody: State held in fields, which hold or reference data Actions represented by methods, which describe operations on state Constructors how objects are created A class is a family of similar objects An interface states expectations for classes and their objects Objects reside in the heap They are accessed by reference, which gives the objects identity Dispatch is used to choose a method implementation based on the class of the receiver Equivalence (equals) does not mean the same object (==) Exceptions are a structured way to manage failure toad 51