Lecture 12 Behavioral Subtyping CS 201 j Engineering

Lecture 12: Behavioral Subtyping CS 201 j: Engineering Software University of Virginia 24 September 2002 Computer Science CS 201 J Fall 2002 David Evans http: //www. cs. virginia. edu/~evans

Menu • Subtyping • Inheritance • What is Object-Oriented Programming 24 September 2002 CS 201 J Fall 2002 2

Subtyping Cell Conway. Life. Cell is a subtype of Cell is a supertype of Conway. Life. Cell ≤ Cell Conway. Life. Cell 24 September 2002 CS 201 J Fall 2002 3

Subtype Substitution • If B is a subtype of A, everywhere the code expects an A, a B can be used instead • Examples: Cell c = c 1; c 1 must be a subtype of Cell (note A is a subtype of A) Cell c = new Conway. Life. Cell (); Conway. Life. Cell c = new Cell (); 24 September 2002 CS 201 J Fall 2002 4

Subtype Examples java. util. Vector: public void add. Element (Object obj); public class Species. Set { Vector elements; public void insert (Species s) { elements. add. Element (s); } 24 September 2002 CS 201 J Fall 2002 Why we can use a Species where an Object is expected? 5

Java’s Type Hierarchy Object Cell Species Conway. Life. Cell 24 September 2002 Object is the ultimate supertype of every object type. CS 201 J Fall 2002 6

Node Path. Interpolator Selector Rotation. Path. Interpolator Leaf Scene. Graph. Object Not at all uncommon to have class hierarchies like this! Java Class Hierarchy Diagram 243 D September 2002 CS 201 J Fall 2002 http: //java. sun. com/products/java-media/3 D/collateral/j 3 dclass. html 7

Subtype Examples java. util. Vector: public void add. Element (Object obj); public class Int. Set { Vector elements; Primitive types public void insert (int x) { are not subtypes elements. add. Element (x); of Object. elements. add. Element (new Integer (x)); } 24 September 2002 But Integer is… CS 201 J Fall 2002 8

Inheritance • To implement a subtype, it is often useful to use the implementation of its supertype • This is also called “subclassing” • In Java: class B extends A B is a subtype of A B inherits from A class C implements F C is a subtype of F 24 September 2002 CS 201 J Fall 2002 both subtyping and inheritance just subtyping 9

Inheritance and Subtyping public class Extreme. Life. Cell extends Cell { public Cell. State get. Next. State () // EFFECTS: Returns the next state for this cell. // The next state will be alive if this cell or any of its neighbors // is currently alive. { if (count. Alive. Neighbors () > 0) { return Cell. State. create. Alive (); } else { Extreme. Life. Cell is a subtype of Cell return get. State (); - anywhere a Cell is expected, we can } use an Extreme. Life. Cell } Extreme. Life. Cell inherits from Cell } - the rep of an Extreme. Life. Cell includes the rep of Cell - all public methods and constructors of Cell are also available for Extreme. Life. Cell 24 September 2002 CS 201 J Fall 2002 10

Method Dispatch • B is a subtype of A • If both A and B have a method display which method should be called? A a = new A (); B b = new B (); a. display (); b. display (); a = b; a. display () 24 September 2002 Calls class A’s display method Calls class B’s display method CS 201 J Fall 2002 11

Dynamic Dispatch • Search for the method up the type hierarchy, starting from the actual (dynamic) type of the object apparent type A A a = new A (); B b = new B (); a actual type B b apparent type a. display (); b. display (); actual type 24 September 2002 CS 201 J Fall 2002 12

Dynamic Dispatch • Search for the method up the type hierarchy, starting from the actual (dynamic) type of the object apparent type A A a = new A (); B b = new B (); a actual type B b apparent type Now: apparent type of a is A, actual type of a is B actual type 24 September 2002 a. display (); b. display (); a = b; CS 201 J Fall 2002 13
![public class Grid { /*@non_null@*/ Cell [][] cells; … public void step () // public class Grid { /*@non_null@*/ Cell [][] cells; … public void step () //](http://slidetodoc.com/presentation_image_h/16f7c27ebd360953e4c7694f9753b9ab/image-14.jpg)
public class Grid { /*@non_null@*/ Cell [][] cells; … public void step () // MODIFIES: this // EFFECTS: Executes one step for each cell in the grid. { Cell. State [][] next. States = new Cell. State [rows][columns]; // Since we need to update all cells synchronously, we first calculate the next // state for each cell, and store it in a temporary array. Then, we update all cells. for (int i = 0; i < rows; i++) { for (int j = 0; j < columns; j++) { next. States [i][j] = cells[i][j]. get. Next. State (); } } for (int i = 0; i < rows; i++) { for (int j = 0; j < columns; j++) { cells[i][j]. set. State (next. States[i][j]); } } } 24 September 2002 CS 201 J Fall 2002 apparent type: Cell actual type: any subtype of Cell (could be Conway. Life. Cell) 14

Apparent and Actual Types • Apparent types are associated with declarations: they never change • Actual types are associated with object: they are always a subtype of the apparent type • Compiler does type checking using apparent type • Virtual Machine does method dispatch using actual type 24 September 2002 CS 201 J Fall 2002 15

Downcasting java. util. Vector: public Object element. At (int i); public class String. Set { Vector elements; public String choose () { String s = elements. element. At (0); String s = (String) elements. element. At (0); Casting changes the apparent type. return s; } 24 September 2002 The VM must check that the actual type is a subtype of the cast type. CS 201 J Fall 2002 16

A Type Hierarchy Shape Quadrangle Triangle Equilateral Parallelogram Rhombus Rectangle Equilateral. Triangle What are the supertypes of Square? Square 24 September 2002 What are the subtypes of Parallelogram? CS 201 J Fall 2002 17

A Class Hierarchy Shape Quadrangle Triangle Equilateral Parallelogram Rhombus Rectangle Equilateral. Triangle Square 24 September 2002 CS 201 J Fall 2002 18

Reusing Implementations • Shapes should have a set. Color method • Change Shape, Quadrangle, Parallelogram, Triangle, Equilateral. Triangle, Rhombus, Rectangle, Square, etc. • Change Shape others inherit new attribute and method automatically 24 September 2002 CS 201 J Fall 2002 19

Add is. Equilateral method class Shape { public bool is. Equilateral () { return false; } } class Equilateral { public bool is. Equilateral () { return true; } } 24 September 2002 CS 201 J Fall 2002 20

Is a Rhombus equilateral? is. Equilateral () { return false; } Shape is. Equilateral () { Equilateral return true; } Quadrangle Parallelogram Inheritance can be tricky! Rhombus is. Equilateral? 24 September 2002 CS 201 J Fall 2002 21

Solutions • Java – Allow multiple supertypes using interfaces, but only one implementation – Pro: Safe and Simple, Con: Limits Reuse • C++ – Allow it, let programmers shoot themselves if they want • Eiffel – Explicit renaming or hiding (error if not done) 24 September 2002 CS 201 J Fall 2002 22

Java’s Solution: Interfaces • Define a type with no implementation • Classes can implement many interfaces: class B extends A implements I 1, I 2, I 3 { … } means B is a subtype of A, I 1, I 2, and I 3 B inherits the implementation of A 24 September 2002 CS 201 J Fall 2002 23

Example Interface public interface Comparable { int compare. To (Object o) { // EFFECTS: Compares this object with the specified // object for order. Returns a negative integer, zero, // or a positive integer as this object is less than, // equal to, or greater than the specified object. } 24 September 2002 CS 201 J Fall 2002 24

Object. Oriented Programming 24 September 2002 CS 201 J Fall 2002 25

What is an Object? • Packaging state and procedures – state: the rep • What a thing is – procedures: methods and constructors • What you can do with it 24 September 2002 CS 201 J Fall 2002 26

What is Object-Oriented Programming? 24 September 2002 CS 201 J Fall 2002 27

Bjarne Stroustrup’s Answer “Object-oriented programming is programming with inheritance. Data abstraction is programming user-defined types. With few exceptions, object-oriented programming can and ought to be a superset of data abstraction. These techniques need proper support to be effective. Data abstraction primarily needs support in the form of language features and object-oriented programming needs further support from a programming environment. To be general purpose, a language supporting data abstraction or object-oriented programming must enable effective use of traditional hardware. ” 24 September 2002 CS 201 J Fall 2002 28

“I invented the term Object-Oriented and I can tell you I did not have C++ in mind. ” Alan Kay 24 September 2002 CS 201 J Fall 2002 29

Programming Language History • Before 1954: twidling knobs, machine code, assembly code • FORTRAN (John Backus, UVa dropout, 1954) – Formula Translation • Algol (Peter Naur, Alan Perlis, et. al. , 1958 -1960) – Most influential programming language – Many of the things Algol did first (types, while, blocks) are in Java 24 September 2002 CS 201 J Fall 2002 30

Programming Language History • Simula (Dahl and Nygaard, 1962 -7) – First language with subtyping and inheritance • CLU (Liskov et. al. , 1970 s) – First language with good support for data abstraction (but no subtyping or inheritance) • Smalltalk (Kay et. al. , 1970 s) – First successful language and programming system to support subtyping and inheritance 24 September 2002 CS 201 J Fall 2002 31

Object-Oriented Programming • Object-Oriented Programming is a state of mind where you program by thinking about objects • It is difficult to reach that state of mind if your language doesn’t have: – Mechanisms for packaging state and procedures • Java has class – Subtyping • Java has extends (subtype and subclass) and implements (subtype) • Other things can help: dynamic dispatch, implementation inheritance, automatic memory management, mixins, good Indian food, Krispy Kremes, etc. 24 September 2002 CS 201 J Fall 2002 32

Who was the first object-oriented programmer? 24 September 2002 CS 201 J Fall 2002 33

By the word operation, we mean any process which alters the mutual relation of two or more things, be this relation of what kind it may. This is the most general definition, and would include all subjects in the universe. Again, it might act upon other things besides number, were objects found whose mutual fundamental relations could be expressed by those of the abstract science of operations, and which should be also susceptible of adaptations to the action of the operating notation and mechanism of the engine. . . Supposing, for instance, that the fundamental relations of pitched sounds in the science of harmony and of musical composition were susceptible of such expression and adaptations, the engine might compose elaborate and scientific pieces of music of any degree of complexity or extent. Ada, Countess of Lovelace, around 1830 24 September 2002 CS 201 J Fall 2002 34

Charge • Exam 1: out Thursday 10 Oct, due Tuesday 15 Oct • Bring your questions to Thursday’s class • Week after: – When is it safe to say B is a subtype of A? • Enjoy your reading vacation! 24 September 2002 CS 201 J Fall 2002 35
- Slides: 35