1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements HWs are being renumbered J1, J2,...

53
1 Classes CS 101-E Chapter 4 Aaron Bloomfield

Transcript of 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements HWs are being renumbered J1, J2,...

Page 1: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

1

Classes

CS 101-E

Chapter 4

Aaron Bloomfield

Page 2: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

2

Announcements HWs are being renumbered

J1, J2, etc., for Java programming assignments C1, C2, etc., for CodeLab assignments HW1 = J1, HW2 = C1, HW3 = C2, etc.

HWs J2 and J3 assigned this Wednesday (6 Oct) J2 due next Thursday (14 Oct) J3 due following Thursday (21 Oct)

HW J4 will be assigned 18 Oct, and due 29 Oct Some CodeLab HWs in there as well Second midterm on 27 Oct No labs this Sunday

Can go to another lab with permission Lab quiz grades will be entered by the end of this week

Page 3: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

3

Preparation Scene so far has been background material and experience

Computing systems and problem solving Variables Types Input and output Expressions Assignments Objects Standard classes and methods

Now: Experience what Java is really about Design and implement objects representing information

and physical world objects

Page 4: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

4

Object-oriented programming Basis

Create and manipulate objects with attributes and behaviors that the programmer can specify

Mechanism Classes

Benefits An information type is design and implemented once

Reused as needed No need reanalysis and re-justification of the

representation

Page 5: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

5

First class – ColoredRectangle Purpose

Represent a colored rectangle in a window Introduce the basics of object design and implementation

Page 6: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

6

Background JFrame

Principal Java class for representing a titled, bordered graphical window.

Standard class Part of the swing library

import javax.swing.* ;

Page 7: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

7

Some Java Swing components

Page 8: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

8

Example Consider

JFrame w1 = new JFrame("Bigger");JFrame w2 = new JFrame("Smaller");w1.setSize(200, 125);w2.setSize(150, 100);w1.setVisible(true);w2.setVisible(true);

ConsiderJFrame w1 = new JFrame("Bigger");JFrame w2 = new JFrame("Smaller");w1.setSize(200, 125);w2.setSize(150, 100);w1.setVisible(true);w2.setVisible(true);

ConsiderJFrame w1 = new JFrame("Bigger");JFrame w2 = new JFrame("Smaller");w1.setSize(200, 125);w2.setSize(150, 100);w1.setVisible(true);w2.setVisible(true);

200 pixels 150 pixels

125pixels

100pixels

Page 9: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

// Purpose: Displays two different windows.

import javax.swing.*;

public class TwoWindows {// main(): application entry pointpublic static void main (String[] args) {

JFrame w1 = new JFrame("Bigger");

JFrame w2 = new JFrame("Smaller");

w1.setSize(200, 125);w2.setSize(150, 100);

w1.setVisible(true);w2.setVisible(true);

}}

Page 10: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

10

Class ColoredRectangle – initial version Purpose

Support the display of square window containing a blue filled-in rectangle Window has side length of 200 pixels Rectangle is 40 pixels wide and 20 pixels high Upper left hand corner of rectangle is at (80, 90)

Limitations are temporary Remember BMI.java preceded BMICalculator.java Lots of concepts to introduce

Page 11: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

11

ColoredRectangle in action Consider

ColoredRectangle r1 = new ColoredRectangle();ColoredRectangle r2 = new ColoredRectangle();

System.out.println("Enter when ready");Scanner stdin = new Scanner (System.in);stdin.nextLine();

r1.paint(); // draw the window associated with r1

r2.paint(); // draw the window associated with r2

ConsiderColoredRectangle r1 = new ColoredRectangle();ColoredRectangle r2 = new ColoredRectangle();

System.out.println("Enter when ready");Scanner stdin = new Scanner (System.in);stdin.nextLine();

r1.paint(); // draw the window associated with r1

r2.paint(); // draw the window associated with r2

ConsiderColoredRectangle r1 = new ColoredRectangle();ColoredRectangle r2 = new ColoredRectangle();

System.out.println("Enter when ready");Scanner stdin = new Scanner (System.in);stdin.nextLine();

r1.paint(); // draw the window associated with r1

r2.paint(); // draw the window associated with r2

ConsiderColoredRectangle r1 = new ColoredRectangle();ColoredRectangle r2 = new ColoredRectangle();

System.out.println("Enter when ready");Scanner stdin = new Scanner (System.in);stdin.nextLine();

r1.paint(); // draw the window associated with r1

r2.paint(); // draw the window associated with r2

r1.paint()The messages instruct the objects to display themselves

r2.paint()

ColoredRectangle object referenced by r1 is being sent a message

ColoredRectangle object referenced by r2 is being sent a message

Page 12: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

// Purpose: Create two windows containing colored rectangles.

import java.util.*;

public class BoxFun {

//main(): application entry pointpublic static void main (String[] args) {

ColoredRectangle r1 = new ColoredRectangle();ColoredRectangle r2 = new ColoredRectangle();

System.out.println("Enter when ready");Scanner stdin = new Scanner (System.in);stdin.nextLine();

r1.paint(); // draw the window associated with r1r2.paint(); // draw the window associated with r2

}}

Page 13: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

13

ColoredRectangle.java outlineimport javax.swing.*;import java.awt.*;

public class ColoredRectangle {// instance variables for holding object attributesprivate int width; private int height; private int x;private int y;private JFrame window;private Color color;

// ColoredRectangle(): default constructorpublic ColoredRectangle() { // ...}// paint(): display the rectangle in its windowpublic void paint() { // ...}

}

Page 14: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

14

Instance variables and attributes Data field

Java term for an object attribute

Instance variable Symbolic name for a data field

Usually has private access Assists in information hiding by encapsulating the

object’s attributes

Default initialization Numeric instance variables initialized to 0 Logical instance variables initialized to false Object instance variables initialized to null

Page 15: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

public class ColoredRectangle {

// instance variables for holding object attributesprivate int width; private int x;private int height; private int y;private JFrame window; private Color color;

// ColoredRectangle(): default constructorpublic ColoredRectangle() {

window = new JFrame("Box Fun");window.setSize(200, 200);width = 40; x = 80;height = 20; y = 90;color = Color.BLUE;window.setVisible(true);

}

// paint(): display the rectangle in its windowpublic void paint() {

Graphics g = window.getGraphics();g.setColor(color);g.fillRect(x, y, width, height);

}}

Page 16: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

16

ColoredRectangle default constructor

public class ColoredRectangle {// instance variables to describe object attributes...

// ColoredRectangle(): default constructorpublic ColoredRectangle() {

...

}...

}

A constructor does not list its return type. A constructoralways returns a reference to a new object of its class

The name of a constructor always matches thename of its class

Page 17: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

public class ColoredRectangle {

// instance variables for holding object attributesprivate int width; private int x;private int height; private int y;private JFrame window; private Color color;

// ColoredRectangle(): default constructorpublic ColoredRectangle() {

window = new JFrame("Box Fun");window.setSize(200, 200);width = 40; x = 80;height = 20; y = 90;color = Color.BLUE;window.setVisible(true);

}

// paint(): display the rectangle in its windowpublic void paint() {

Graphics g = window.getGraphics();g.setColor(color);g.fillRect(x, y, width, height);

}}

Page 18: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

18

Color constants Color.BLACK Color.BLUE Color.CYAN Color.DARK_GRAY Color.GRAY Color.GREEN Color.LIGHT_GRAY Color.MAGENTA Color.ORANGE Color.PINK Color.RED Color.WHITE Color.YELLOW

Page 19: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

r

The value of aColoredRectangle

variable is areference to a

ColoredRectangleobject

+ paint() : void

ColorRectangle

- width = 40- height = 20- x = 80- y = 90- window =- color =

Color

- color =- ...

+ brighter() : Color+ ...

String

- text = "Box Fun"- ...

+ length() : int+ ...

+ setVisible( boolean status) : void+ ...

JFrame

- width = 200- height = 200- title =- ...

ColoredRectangle r = new ColoredRectangle();

Page 20: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

20

Another possible Constructor

public class ColoredRectangle {

// instance variables for holding object attributesprivate int width = 40; private int x = 80;private int height = 80; private int y = 90;private JFrame window; private Color color = Color.BLUE;

// ColoredRectangle(): default constructorpublic ColoredRectangle() {

window = new JFrame("Box Fun");window.setSize(200, 200);window.setVisible(true);

}

Page 21: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

public class ColoredRectangle {

// instance variables for holding object attributesprivate int width; private int x;private int height; private int y;private JFrame window; private Color color;

// ColoredRectangle(): default constructorpublic ColoredRectangle() {

window = new JFrame("Box Fun");window.setSize(200, 200);width = 40; x = 80;height = 20; y = 90;color = Color.BLUE;window.setVisible(true);

}

// paint(): display the rectangle in its windowpublic void paint() {

Graphics g = window.getGraphics();g.setColor(color);g.fillRect(x, y, width, height);

}}

Page 22: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

22

Graphical context Graphics

Defined in java.awt.Graphics Represents the information for a rendering request

Color Component Font …

Provides methods Text drawing

Line drawing Shape drawing

Rectangles Ovals Polygons

Page 23: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

23

Java coordinate system

Coordinate (80, 90)

Coordinate (0.0)X-Axis

Y-A

xis

Coordinate (120, 110)

Page 24: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

24

Method invocation Consider

r1.paint(); // display window associated with r1

r2.paint(); // display window associated with r2

Observe When an instance method is being executed, the

attributes of the object associated with the invocation are accessed and manipulated

Important that you understand what object is being manipulated

Page 25: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

25

Method invocation

public class ColoredRectangle {// instance variables to describe object attributes

...

// paint(): display the rectangle in its windowpublic void paint() {

window.setVisible(true);Graphics g = window.getGraphics();g.setColor(color);

g.fillRect(x, y, width, height);}...

}

Instance variable window referencesthe JFrame attribute of the object that caused the invocation.

The values of these instancevariables are also from the

ColoredRectangle object

Typo in book: p. 149 claims paint() is static; it’s not

Page 26: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

26

Medicine Physics Public Health

Chemistry Engineering Literature Psychology

Economics Peace

Biology

The Ig Nobel Prizes

"The Effect of Country Music on Suicide.“For explaining the dynamics of hula-hoopingInvestigating the scientific validity of the

Five-Second RuleThe Coca-Cola Company of Great BritainFor the patent of the comboverThe American Nudist Research LibraryIt’s easy to overlook things – even a man in a

gorilla suit.The Vatican, for outsourcing prayers to IndiaThe invention of karaoke, thereby providing

an entirely new way for people to learn to tolerate each other

For showing that herrings apparently communicate by farting

Page 27: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

27

Computing grades so far HW J2 assigned today, due next Wednesday Lab this week! Must be done by Sunday at 8:30 Sunday labs are cancelled due to fall break

If you want, send me an e-mail and you can show up to another lab session

No office hours Friday Grades so far: use formula

HISTORICALLY, the grade range has been: A: 90+, B: 80-89, C: 60-79, D/F: <60

Wednesday, 6 October, 2004

57.19

10*33.3*42.0*82.2*3* midterm1labquiz1hw3hw2hw1grade

Page 28: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

28

Improving ColoredRectangle Analysis

A ColoredRectangle object should Be able to have any color Be positionable anywhere within its window Have no restrictions on its width and height Accessible attributes Updateable attributes

Page 29: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

29

Improving ColoredRectangle Additional constructions and behaviors

Specific construction Construct a rectangle representation using supplied

values for its attributes

Accessors Supply the values of the attributes Individual methods for providing the width, height, x-

coordinate position, y-coordinate position, color, or window of the associated rectangle

Mutators Manage requests for changing attributes Ensure objects always have sensible values Individual methods for setting the width, height, x-

coordinate position, y-coordinate position, color, or window of the associated rectangle to a given value

Page 30: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

30

A mutator method Definition

// setWidth(): width mutatorpublic void setWidth(int w) {

width = w;}

Usage

ColoredRectangle s = new ColoredRectangle();s.setWidth(80);

public void setWidth (int w) {...

}

Initial value of the formal parametercomes from the actual parameter

Changes to the formal parameterdo not affect the actual parameter

Object to be manipulatedis the one referenced by s

Page 31: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

31

Mutator setWidth() evaluation

ColoredRectangle s = new ColoredRectangle();s.setWidth(80);

public class ColoredRectangle {.../ / setWidth(): width mutator

public void setWidth (int w) {width = w;

}

...}

The invocation sends a message to the ColoredRectanglereferenced by s to modify its width attribute. To do so,there is a temporary transfer of flow of control tosetWidth(). The value of the actual parameter is 80

Method setWidth() sets the instance variable width of itsColoredRectangle. For this invocation, width is set to 80and the ColoredRectangle is the one referenced by s

For this invocation of methodsetWidth(), w is initialized to80. The object being referencedwithin the method body is theobject referenced by s

Method setWidth() is completed. Control is transferred back tothe statement that invoked setWidth()

Page 32: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

32

A bit of humor…

Page 33: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

33

Java parameter passing The value is copied to the method

Any changes to the parameter are forgotten when the method returns

Page 34: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

34

Java parameter passing Consider the following code:

static void foobar (int y) {y = 7;

}

public static void main (String[] args) {int x = 5;foobar (x);System.out.println(x);

}

What gets printed?

formal parameter

actual parameter

Page 35: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

35

Java parameter passing Consider the following code:

static void foobar (String y) {y = “7”;

}

public static void main (String[] args) {String x = “5”;foobar (x);System.out.println(x);

}

What gets printed?

formal parameter

actual parameter

Page 36: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

36

Java parameter passing Consider the following code:

static void foobar (ColoredRectangle y) {y.setWidth (10);

}

public static void main (String[] args) {ColoredRectangle x = new ColoredRectangle();foobar (x);System.out.println(y.getWidth());

}

What gets printed?

formal parameter

actual parameter

Page 37: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

37

Java parameter passing Consider the following code:

static void foobar (ColoredRectangle y) {y = new ColoredRectangle();y.setWidth (10);

}

public static void main (String[] args) {ColoredRectangle x = new ColoredRectangle();foobar (x);System.out.println(y.getWidth());

}

What gets printed?

formal parameter

actual parameter

Page 38: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

38

Java parameter passing The value of the actual parameter gets copied to the formal

parameter This is called pass-by-value C/C++ is also pass-by-value Other languages have other parameter passing types

Any changes to the formal parameter are forgotten when the method returns

However, if the parameter is a reference to an object, that object can be modified Similar to how the object a final reference points to can be

modified

Page 39: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

39

Subtleties Consider

ColoredRectangle r = new ColoredRectangle();r.paint(); r.setWidth(80); r.paint();

What is the width is the rectangle on the screen after the mutator executes?

Page 40: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

40

Other mutatorspublic void setHeight(int h) {

height = h;}

public void setX(int ulx) {x = ulx;

}

public void setY(int uly) {y = uly;

}

public void setWindow(JFrame f) {window = f;

}

public void setColor(Color c) {color = c;

}

Page 41: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

41

Page 42: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

42

Mutator usage

ColoredRectangle u = new ColoredRectangle();ColoredRectangle v = new ColoredRectangle();u.setHeight(100);u.setColor(Color.PINK);v.setX(25);v.setY(50);JFrame display =new JFrame("Fun");v.setWindow(display);

Sends a message to v's Colored-Rectangle to modify its windowattribute to display's JFrame

Sends a message tou's ColoredRectangleto modify its heightattribute to 100

Sends a message to u's Colored-Rectangle to modify its colorattribute to pink

Sends a message to v's Colored-Rectangle to modify its y-axisposition to 50

Sends a message to v's Colored-Rectangle to modify its x-axisposition to 25

Page 43: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

43

Accessors Properties

Do not require parameters Each accessor execution produces a return value

Return value is the value of the invocation

public int getWidth() {return width;

}

The method return type precedes the name of the method in themethod definition

For method getWidth(), the return value is the value of the widthattribute for the ColoredRectangle associated with the invocation.In invocation t.getWidth(), the return value is the value of theinstance variable width for the ColoredRectangle referenced by t

Page 44: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

44

Accessor usage

ColoredRectangle t = new ColoredRectangle();int w = t.getWidth();

public class ColoredRectangle {.../ / getWidth(): accessor

public int getWidth () {return width ;

}

...}

Invocation sends a message to the ColoredRectanglereferenced by t to return the value of its width. To do so,there is a temporary transfer of flow of control to getWidth()

The return expression evaluates to 40 (the widthattribute of the ColoredRectangle object referenced by t )

Method getWidth() starts executing.For this invocation, the object beingreferenced is the object referenced by t

Method completes by supplying its return value (40) to the invokingstatement. Also, invoking statement regains the flow of control. Fromthere variable w is initialized with the return value of the invocatio

Page 45: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

45

Specific constructionpublic ColoredRectangle(int w, int h, int ulx, int uly,

JFrame f, Color c) {setWidth(w);setHeight(h);setX(ulx);setY(uly);setWindow(f);setColor(c);

}

Requires values for each of the attributesJFrame display = new JFrame("Even more fun");display.setSize(400, 400);ColoredRectangle w = new ColoredRectangle(60, 80,

20, 20, display, Color.YELLOW);

Page 46: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

46

Specific construction

public ColoredRectangle(int w, int h, int ulx, int uly, JFrame f, Color c) {

setWidth(w);setHeight(h);setX(ulx);setY(uly);setWindow(f);setColor(c);

}

Advantages to using mutators Readability Less error prone Facilitates enhancements through localization

Page 47: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

47

Seeing doubleimport java.awt.*;

public class SeeingDouble {

public static void main(String[] args) {

ColoredRectangle r = new ColoredRectangle();

System.out.println("Enter when ready");Scanner stdin = new Scanner (System.in);stdin.nextLine();

r.paint();

r.setY(50);r.setColor(Color.RED);r.paint();

}}

Page 48: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

48

Seeing double

Page 49: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

49

An optical illusion

Page 50: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

50

Casting We’ve seen casting before:

double d = (double) 3; int x = (int) d;

Aside: duplicating an object String s = “foo”; String t = s.clone();

Causes an error: “inconvertible types” (Causes another error, but we will ignore that one)

What caused this?

Page 51: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

51

Casting, take 2 .clone() returns an object of class Object (sic)

More confusion: You can also have an object of class Class Thus, you can have an Object class and a Class object Got it?

We know it’s a String (as it cloned a String) Thus, we need to tell Java it’s a String via casting

Revised code: String s = “foo”; String t = (String) s.clone();

Still causes that “other” error, but we are still willfully ignoring it…

Page 52: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

52

Casting, take 3 That “other” error is because String does not have a .clone()

method Not all classes do! We just haven’t seen any classes that do have .clone() yet

Check in the documentation if the object you want to copy has a .clone() method

A class that does: java.util.Vector Vector s = new Vector(); Vector t = s.clone(); Vector u = (Vector) s.clone();

Causes the “inconvertible types” error

Page 53: 1 Classes CS 101-E Chapter 4 Aaron Bloomfield. 2 Announcements  HWs are being renumbered J1, J2, etc., for Java programming assignments C1, C2, etc.,

53

Casting, take 4 What happens with the following code?

Vector v = new Vector(); String s = (String) v;

Java will encounter a compile-time error “inconvertible types”

What happens with the following code? Vector v = new Vector(); String s = (String) v.clone();

Java will encounter a RUN-time error ClassCastException