cs 21b intro to computing ii. object-oriented programming: classes in java

71
CS 21b Intro to Computing II

Upload: oswald-nelson

Post on 17-Jan-2016

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

CS 21b Intro to Computing II

Page 2: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Object-Oriented Programming: Classes in Java

Page 3: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Object

Definition: a thing that has identity, state, and behavior identity: a distinguished instance of a

class state: collection of values for its

variables behavior: capability to execute methods* variables and methods are defined in a

class

Page 4: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Class

Definition: a collection of data (variables) and methods that operate on that data data/methods define the

contents/capabilities of the instances (objects) of the class

object creation occurs with the statement variable = new class(parameters);

classes can be viewed as factories for objects

Page 5: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Class

A class is a template for an object

An object is an instance of a class

Page 6: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Class All data and variables defined within

a class are called instance variables because each instance of that class

(each object of the class) contains a copy of that variable

Methods and variables defined within a class are called members of that class

Page 7: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Two Kinds of Variablesin Java Variables of a primitive type

e.g., int x; char c; Variables of a reference type (class)

e.g., Button b; String s; Conventions

Primitive types are reserved words in Java and are indicated in all-lower-case letters

Class names: first letter usually capitalized

Page 8: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Variables and Values Primitive type variables

int x; …x = 5; 5

X

X

Page 9: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Variables and References Reference type variables

Button x; …x = new Button(“click”);

X

X

“click”

Button Object

Page 10: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

The new Keyword new Button(“click”) creates a

Button object and returns a reference (an address) to that object that a Button variable could hold

“click”

Button Object

1023:

1023 is some address in memory

1023

X

Page 11: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

The Dot (“.”) Operator Allows access to variables

(primitive and reference types) and methods of reference type variables. Ex.

TextField t = new TextField(10);t.setText(“hi”);

*accessing a method using the dot operator

Page 12: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Method Invocation Syntax for method invocation

object.methodName(arguments)

Method may return a value or simply produce an effect on the object

To find out what methods are available for a given class javap package.name.NameOfClass ex. Javap java.awt.Button

Page 13: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Strings Revisited Strings are objects as well String is an existing Java class

s = “Hello” is just a shorthand fors= new String(“Hello”);

String methods int length() String substring(int x,int y); no “manipulating” methods

Page 14: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Variables and Objects

Let Circle be a class with:variable r that indicates its radius method area() that computes its area

Declaration: Circle c; Instantiation: c = new Circle(); Usage: c.r = 5.5;

System.out.println(c.area());

Page 15: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

The complete Circle class

public class Circle { public double x,y; // center coordinates public double r; // radius // the methods public double circumference() { return 2*3.14*r; } public double area() { return 3.14*r*r; }}

Page 16: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Using the Circle class

public class TestCircle { public static void main(String args[]) { Circle c; c = new Circle(); c.x = 2.0; c.y = 2.0; c.r = 5.5; System.out.println(c.area()); }}

Page 17: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

The this keyword this refers to the current object In the Circle class, the following

definitions for area() are equivalent:public double area() { return 3.14 * r * r; }public double area() { return 3.14 * this.r *

this.r; }

Using the keyword clarifies that you are referring to a variable inside an object

Page 18: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Constructors A constructor is a special type of

method has the same name as the class

It is called when an object is created new Circle(); // “calls” the Circle()

method If no constructor is defined, a default

constructor that does nothing is implemented

Page 19: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

A constructor for the Circle class

public class Circle { public double x,y; // center coordinates public double r; // radius public Circle() { // sets default values for x, y, and r this.x = 0.0; this.y = 0.0; this.r = 1.0; } ...}

Page 20: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

A constructor with parameters

public class Circle { … public Circle(double x, double y, double z)

{ this.x = x; this.y = y; this.r = z; // using this is now a necessity } ...}

Page 21: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Using the different constructors

Circle c, d;c = new Circle();// radius of circle has been set to 1.0System.out.println(c.area());d = new Circle(1.0,1.0,5.0);// radius of circle has been set to 5.0System.out.println(d.area());

Page 22: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Method Overloading In Java, it is possible to have several

method definitions under the same name but the signatures should be different

Signature: the name of the method the number of parameters the types of the parameters

Page 23: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Fill in the blanks... Constructor without a parameter

public classname() {*body of the constructor

}

Page 24: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Fill in the blanks... Overloading constructorspublic classname(type variable-

name) {*body of constructor

}public classname(

type variable-name, type variable-name) {*body of constructor

}

Page 25: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Encapsulation A key OO concept: “Information

Hiding” Key points

The user of an object should have access only to those methods (or data) that are essential

Unnecessary implementation details should be hidden from the user

In Java, use public and private

Page 26: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Access Modifiers public

a public variable/method is available for use outside the class it is defined in

private a private variable/method may be

used only within the class it is defined in

Page 27: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

The Circle class Revisited

public class Circle { private double x,y; // center coordinates private double r; // radius // ...}// when using the Circle class ...Circle c;c.r = 1.0; // this statement is not allowed

Page 28: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Outside accessto private data No direct access Define (public) set and get methods

instead or initialize the data through constructors

Why? If you change your mind about the

names and even the types of these private data, the code using the class need not be changed

Page 29: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Set and Get Methods Variables/attributes in a class are

often not declared public Instead:

define use a (public) set method to assign a value to a variable

define a get method to retrieve that value

Consistent with encapsulation

Page 30: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Set and Get Methods for Radiuspublic class Circle { // ... private double r; // radius // … public void setRadius(double r) { this.r =

r; } public double getRadius() { return this.r; } // ...}

Page 31: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Inheritance

Page 32: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Subclasses and Inheritance Inheritance:

programming language feature that allows for the implicit definition of variables/methods for a class through an existing class

In Java, use the extends keywordpublic class B extends A { … } objects of subclass B now have access*

to variables and methods defined in A

Page 33: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

The EnhancedCircle classpublic class EnhancedCircle extends Circle { // as if area(), circumference(), setRadius() and getRadius()

// automatically defined; x,y,r are also present (but are private // to the the Circle class)

private int color; public void setColor(int c) { color = c; } public void draw() { … } public int diameter() { return getRadius()*2;}}

Page 34: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Using a Subclass

EnhancedCircle c;c = new EnhancedCircle(); // Circle() constructor

// implicitly invoked

c.setColor(5);c.setRadius(6.6);System.out.println(c.area());System.out.println(c.diameter());c.draw();

Page 35: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Applets and Inheritance Java Applets that we write extend

the Applet class (defined in package java.applet)

Methods such as add() (for adding visual components) are actually methods available in the Applet class

init(), action(), and paint() are also available but can be overridden

Page 36: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Class Hierarchy Subclass relationship forms a hierarchy Example: TextField class

TextField extends TextComponent which extends Component which extends Object

Object is the topmost class in Java Exercise (use javap):

determine where the methods setText(), getText(), hide(), and show() are defined

Page 37: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Method Overriding A method (with a given signature)

may be overridden in a subclass Suppose class B extends A

let void operate() be a method defined in A

void operate() may be defined in B objects of class A use A’s operate() objects of class B use B’s operate()

Page 38: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Dynamic Binding Let A be a superclass of subclasses

B and C A variable of class A may refer to

instances of A, B, and C Java facilitates the calling of the

appropriate method at run time Example

A v; … v.operate();

Page 39: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Constructors and Superclasses Suppose B extends A

new B() calls B’s constructor how about A’s constructor ?

Rule the constructor of a superclass is

always invoked before the statements in the subclass’ constructor are executed

Page 40: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

super() Used to call a superclass’ constructor Implicitly included when not indicated

If B extends A, the following are equivalent:

public B() { public B() {

// body of constructor super();

} // body of constructor

}

Page 41: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Calling a particular Constructor Use super with parameters if a

particular constructor should be called Example:

public class BlueButton extends Button {

public BlueButton(String s) {

super(s); // without this, super() is called (label-less)

setBackground(Color.blue);

} …

}

Page 42: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Default Constructors When no constructors are defined

a default constructor with no parameters is implicitly included

If at least one constructor is defined, with or without parameters a default constructor will not apply

Page 43: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Fill in the blanks... Extends and Super

public class subclass extends superclass {

public subclassconstructor(...) {super(...); *body of constructor

}...

}

Page 44: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Abstract Classes and Interfaces

Page 45: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

“Incomplete” Classes Objects vs “concepts” Example: Circle and Shape

circles are shapes (Circle extends Shape)

shapes (such as circle) have area and circumference

how are area() and circumference() defined at the level of Shape?

Shape has incomplete definitions

Page 46: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

The Shape class One option

make area() and circumference() methods that do nothing (perhaps return 0.0)

Circle could extend shape and then override these methods

problems ? Another option available in Java

abstract class

Page 47: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Abstract Class Same as class

but it is possible to omit method bodies syntax:

abstract before class (and method headers) semicolon at the end of the method headers

Rules may declare variables of abstract classes instantiation not possible (new will not work) subclasses must override incomplete

methods

Page 48: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

The Shape class

public abstract class Shape { private int color; public void setColor(int c) { color = c; } public abstract double circumference(); public abstract double area();}

Page 49: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

The Circle classpublic class Circle extends Shape { private double r; … // the compiler will complain if the ff methods are not

defined

public double circumference() { return 2*3.14*r; } public double area() { return 3.14*r*r; }}

Page 50: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Using Shape and Circle

Circle c;Shape s;

c = new Circle(); // ok

s = new Shape(); // not allowed -- Shape is abstract

s = new Circle(); // ok because Circle is a

// subclass of Shape

Page 51: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Another Example:Function Plotter Define an abstract class FunctionPlotter

that plots a mathematical function f() a method plot() plots a function f() by

evaluating f() on some x values make f() an abstract method, i.e.,

public abstract double f(double x); Next, define classes that extend

FunctionPlotter and complete the definition of f()

Page 52: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Function Plotter, continued LinePlotter defines f() as follows:

public double f(double x) { return x; } SquarePlotter defines f() as follows:

public double f(double x) { return x*x; }

Note: LinePlotter, SquarePlotter (and Circle, in the previous example) are called concrete classes

Page 53: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Why Use Abstract Classes? More robust code

no need to use “new” on anything it shouldn’t be used on

Enforces discipline Abstract classes cannot be instantiated;

they are meant to be extended Anyone who extends an abstract class is

now forced to define the incomplete parts

Page 54: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Interface None of the methods have bodies Instance variables not allowed Syntax

interface not class no need to put abstract before

method headers implements not extends on the

complete (concrete) class

Page 55: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Rules on Interfaces May declare variables whose type

is an interface objects that are instances of classes

that implement the interface may be referred to by such variables

Instantiation not possible Implementing class must define all

methods

Page 56: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Examplepublic interface Switch { public void turnOn(); public void turnOff(); public boolean isOn();}public class Computer implements Switch { // must define turnOn(), turnOff(), and isOn() in this class

...}

Page 57: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Notes on Interfaces Interface variables can be declared

e.g., Switch s; Interfaces cannot be instantiated Interface variables may refer to objects

of classes that implement the interface e.g., s = new Computer();

A class may implement several interfaces

Page 58: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Multiple Inheritance Other OO languages such as C++ allow

several superclasses for a given class not possible in Java

Implementation problems common members in superclasses

In Java use interfaces it is possible to implement several

interfaces with no “conflicts”

Page 59: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Anonymous Classes Feature available in JDK 1.1 or

higher versions of Java Useful when

Only one object of the concrete class needs to be created

It is not too important to have a name for the concrete class

Page 60: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Back to FunctionPlotter Example Without anonymous classes, the

LinePlotter class would look like thispublic class LinePlotter extends FunctionPlotter

{ public double f(double x) { return x; }}

And then, in some main program …LinePlotter lp = new LinePlotter();lp.plot();

Page 61: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Using Anonymous Classes

FunctionPlotter lp = new FunctionPlotter() { public double f(double x) { return x; }}lp.plot();

// no need to explicitly define a LinePlotter class

Page 62: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Fill in the blanks... Anonymous classes

abstractclassorinterface var =

new abstractclassorinterface() {// complete the definitions of

abstract // methods here }

Page 63: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

The Java Event Models

Page 64: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Event-Driven Programming in Java Specifying actions for events

performed on the GUI most common example: clicking on a

button The Java Event Models

JDK 1.0.2 (deprecated) JDK 1.1 and the new event model

Page 65: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Sample Applet: HideAndShow Visual objects

text field with some text two buttons

Actions performed hide button causes text field to

disappear show button makes text field

reappear

Page 66: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

JDK 1.0.2 What needs to be done

init() method: create visual components and add them to the applet

action(): determine which button was clicked and indicate associated action

Problems nested if-statement in action() inefficient code associated with visual object far

from its definition

Page 67: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Listeners and JDK 1.1 Listener

responsible for processing UI events specifies actions that corresponds to an

event JDK 1.1

code for listeners made explicit need to associate a listener for every visual

object that the user interacts with listener should implement method(s) that

specify corresponding actions

Page 68: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

The Applet as the Listener Follows JDK 1.0.2 event model What needs to be done

init() method: as before but associate applet as listener for both buttons (addActionListener(this))

applet implements ActionListener interface define actionPerformed() instead of action() use e.getSource() instead of e.target to

distinguish between buttons pressed

Problems not addressed

Page 69: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

“Third party” Listener Different listener for each button

Listeners are separate objects Two different definitions of

actionPerformed() No need to distinguish between buttons

What needs to be done create listener objects add the objects as listeners for the buttons use anonymous classes

Page 70: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

The Button as the Listener Create a new class (ActiveButton)

class extends Button and implements ActionListener (contains actionPerformed())

actionPerformed() contains call to onClick() addActionListener(this) in constructor of

class Applet instantiates ActiveButton

onClick() or actionPerformed() is overridden as appropriate

Page 71: CS 21b Intro to Computing II. Object-Oriented Programming: Classes in Java

Who should be the Listener? The applet

no advantage except that old jdk1.0.2 code translates easily to this technique

Third party clearly indicates the role of the listeners

ActiveButton encapsulates listener-related activity applet code easier to read