Classes addendum (chapter 4)

advertisement
Even even more
on being classy
Aaron Bloomfield
CS 101-E
Chapter 4+
1
Consider this sequence of events…
2
What happened?

Java didn’t “repaint” the rectangles when
necessary


Java only painted the rectangle once
You can tell Java to repaint it whenever
necessary

This is beyond the scope of this class, though!
3
Seeing double
import 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();
}
}
4
Seeing double

When paint() was called, the previous
rectangle was not erased


This is a simpler way of implementing this
Perhaps clear and repaint everything
when a rectangle paint() is called
5
Code from last class
// Purpose: Create two windows containing colored rectangles.
import java.util.*;
public class BoxFun {
//main(): application entry point
public 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();
r2.paint();
}
}
// draw the window associated with r1
// draw the window associated with r2
6
public class ColoredRectangle {
// instance variables for holding object attributes
private int width;
private int height;
private JFrame window;
private int x;
private int y;
private Color color;
// ColoredRectangle(): default constructor
public ColoredRectangle() {
color = Color.BLUE;
width = 40;
x = 80;
height = 20;
y = 90;
window = new JFrame("Box Fun");
window.setSize(200, 200);
window.setVisible(true);
}
// paint(): display the rectangle in its window
public void paint() {
Graphics g = window.getGraphics();
g.setColor(color);
g.fillRect(x, y, width, height);
}
}
7
r
public
class
public
void paint(){ {
ColoredRectangle
Graphicsint
g =width;
private
window.getGraphics();
private
int x, y;
g.setColor(color);
private
int height;
g.fillRect
private
int (x,
y; y,
width,JFrame
height);
private
window;
} private Color color;
ColoredRectangle r = new ColoredRectangle();
ColorRectangle
- width = 40
0
- height = 20
0
- x = 80
0
- y = 90
0
- color =
- window =
Color
- color =
- ...
+ brighter() : Color
+ ...
+ paint() : void
public ColoredRectangle() {
color = Color.BLUE;
width = 40;
JFrame
height = 20;
- width = 200
y = 90;
- height = 200
x = 80;
- title =
window = new
- grafix =
JFrame
- ...
("Box Fun");
+ setVisible (boolean status) : void
window.setSize
+ getGraphics () : Graphics
(200, 200);
+ setSize (int w, int h) : void
window.setVisible
+…
(true);
g
}
String
- text = “Box Fun”
- ...
+ length() : int
+ ...
Graphics
-…
+ fillRect() : void
+ setColor(Color) :8void
+ ...
The Vector class

In java.util

Must put “import java.util.*;” in the java file

Probably the most useful class in the
library (in my opinion)

A Vector is a collection of “things” (objects)

It has nothing to do with the geometric vector
9
Vector methods
Constructor: Vector()
 Adding objects: add (Object o);
 Removing objects: remove (int which)
 Number of elements: size()
 Element access: elementAt()
 Removing all elements: clear()

10
Vector code example
Vector v = new Vector();
System.out.println (v.size() + " " + v);
0 []
v.add ("first");
System.out.println (v.size() + " " + v);
1 [first]
v.add ("second");
v.add ("third");
System.out.println (v.size() + " " + v);
3 [first, second, third]
String s = (String) v.elementAt (2);
System.out.println (s);
third
String t = (String) v.elementAt (3);
System.out.println (t);
(Exception)
v.remove (1);
System.out.println (v.size() + " " + v);
2 [first, third]
v.clear();
System.out.println (v.size() + " " + v);
0 []
11
What we wish computers could do
12
The usefulness of Vectors

You can any object to a Vector


Strings, ColoredRectanges, JFrames, etc.
They are not the most efficient for some
tasks

Searching, in particular
13
About that exception…

The exact exception was:
Exception in thread "main"
java.lang.ArrayIndexOutOfBoundsException: 3 >= 3
at java.util.Vector.elementAt(Vector.java:431)
at VectorTest.main(VectorTest.java:15)
Where the problem occured
14
A Vector of ints

Consider the following code:
Vector v = new Vector();
v.add (1);

Causes a compile-time error

Most of the time - see disclaimer later
C:\Documents and Settings\Aaron\My
Documents\JCreator\VectorTest\VectorTest.java:7:
cannot resolve symbol
symbol : method add (int)
location: class java.util.Vector
v.add (1);
15
What happened?

The Vector add() method:

boolean add(Object o)

Primitive types are not objects!

Solution: use wrapper classes!
16
More on wrapper classes

A wrapper class allows a primitive type to act as
an object

Each primitive type has a wrapper class:





Boolean
Character
Byte
Short




Integer
Long
Float
Double
Note that char and int don’t have the exact same
name as their wrapper classes
17
Vector code example
Vector v = new Vector();
System.out.println (v.size() + " " + v);
0 []
v.add (new Integer(1));
System.out.println (v.size() + " " + v);
1 [1]
v.add (new Integer(2));
v.add (new Integer(3));
System.out.println (v.size() + " " + v);
3 [1, 2, 3]
Integer s = (Integer) v.elementAt (2);
System.out.println (s);
3
Integer t = (Integer) v.elementAt (3);
System.out.println (t);
(Exception)
v.remove (1);
System.out.println (v.size() + " " + v);
2 [1, 3]
v.clear();
System.out.println (v.size() + " " + v);
0 []
18
Even more on wrapper classes

They have
variables:
useful
class
(i.e.
static)
Integer.MAX_VALUE
 Double.MIN_VALUE


They have useful methods:
String s = “3.14159”;
 double d = Double.parseDouble (s);

19
A disclaimer

Java 1.5 (which we are not using) has a
new feature called “autoboxing/unboxing”

This will automatically convert primitive
types to their wrapper classes (and back)
20
An optical illusion
21
Design an air conditioner
representation

Context - Consumer



Repair person
Sales person
Consumer

Behaviors

Attributes
22
Design an air conditioner
representation

Context - Consumer

Behaviors






Turn on
Turn off
Get temperature and fan setting
Set temperature and fan setting
Build – construction
Debug

Attributes
23
Design an air conditioner
representation

Context - Consumer

Behaviors






Turn on
Turn off
Get temperature and fan setting
Set temperature and fan setting
Build – construction
Debug – to stringing

Attributes
24
Design an air conditioner
representation

Context - Consumer

Behaviors






Turn on
Turn off
Get temperature and fan setting
Set temperature and fan setting – mutation
Build – construction
Debug – to stringing

Attributes
25
Design an air conditioner
representation

Context - Consumer

Behaviors






Turn on
Turn off
Get temperature and fan setting – accessing
Set temperature and fan setting – mutation
Build – construction
Debug – to stringing

Attributes
26
Design an air conditioner
representation

Context - Consumer

Behaviors






Turn on – mutation
Turn off – mutation
Get temperature and fan setting – accessing
Set temperature and fan setting – mutation
Build – construction
Debug – to stringing

Attributes
27
Design an air conditioner
representation

Context - Consumer

Behaviors






Turn on – mutation
Turn off – mutation
Get temperature and fan setting – accessing
Set temperature and fan setting – mutation
Build – construction
Debug – to stringing

Attributes
28
Design an air conditioner
representation

Context - Consumer

Behaviors







Turn on
Turn off
Get temperature and fan setting
Set temperature and fan setting
Build -- construction
Debug
Attributes



Power setting
Fan setting
Temperature setting
29
Design an air conditioner
representation

Context - Consumer

Behaviors







Turn on
Turn off
Get temperature and fan setting
Set temperature and fan setting
Build -- construction
Debug
Attributes



Power setting
Fan setting
Temperature setting – integer
30
Design an air conditioner
representation

Context - Consumer

Behaviors







Turn on
Turn off
Get temperature and fan setting
Set temperature and fan setting
Build -- construction
Debug
Attributes



Power setting – binary
Fan setting – binary
Temperature setting – integer
31
Ugh…
32
Design an air conditioner
representation
// Represent an air conditioner – from consumer view point
public class AirConditioner {
// instance variables
// constructors
// methods
}

Source AirConditioner.java
33
Static variables and constants
// shared resource for all AirConditioner objects
static public final int OFF = 0;
Static public final int ON = 1;
static public final int LOW = 0;
Static public final int HIGH = 1;
static public final int DEFAULT_TEMP = 72;

Every object in the class has access to the same static variables
and constants

A change to a static variable is visible to all of the objects in the class

Examples StaticDemo.java and DemoStatic.java
34
Instance variables
// individual object attributes
int powerSetting;
int fanSetting;
int temperatureSetting;

Instance variables are always initialized as soon the object comes
into existence

If no value is specified




0 used for numeric variables
false used for logical variables
null used for object variables
Examples InitializeDemo.java
35
Constructors
// AirConditioner(): default constructor
public AirConditioner() {
this.powerSetting = AirConditioner.OFF;
this.fanSetting = AirConditioner.LOW;
this.temperatureSetting = AirConditioner.DEFAULT_TEMP;
}
// AirConditioner(): specific constructor
public AirConditioner(int myPower, int myFan, int myTemp) {
this.powerSetting = myPower;
this.fanSetting = myFan;
this.temperatureSetting = myTemp;
}

Example AirConditionerConstruction.java
36
Simple mutators
// turnOn(): set the power setting to on
public void turnOn() {
this.powerSetting = AirConditioner.ON;
}
// turnOff(): set the power setting to off
public void turnOff() {
this.powerSetting = AirConditioner.OFF;
}

Example TurnDemo.java
37
Simple accessors
// getPowerStatus(): report the power setting
public int getPowerStatus() {
return this.powerSetting;
}
// getFanStatus(): report the fan setting
public int getFanStatus() {
return this.fanSetting;
}
// getTemperatureStatus(): report the temperature setting
public int getTemperatureStatus () {
return this.temperatureSetting;
}

Example AirConditionerAccessors.java
38
Parametric mutators
// setPower(): set the power setting as indicated
public void setPower(int desiredSetting) {
this.powerSetting = desiredSetting;
}
// setFan(): set the fan setting as indicated
public void setFan(int desiredSetting) {
this.fanSetting = desiredSetting;
}
// setTemperature(): set the temperature setting as indicated
public void setTemperature(int desiredSetting) {
this.temperatureSetting = desiredSetting;
}

Example AirConditionerSetMutation.java
39
Facilitator toString()
// toString(): produce a String representation of the object
public String toString() {
String result = "[ power: " + this.powerSetting
+ ", fan: " + this.fanSetting
+ ", temperature: " + this.temperatureSetting
+ " ] ";
return result;
}
40
Sneak peek facilitator toString()
public String toString() {
String result = "[ power: " ;
if ( this.powerSetting == AirConditioner.OFF ) {
result = result + "OFF";
} else {
result = result + "ON " ;
}
result = result + ", fan: ";
if ( this.fanSetting == AirConditioner.LOW ) {
result = result + "LOW ";
} else {
result = result + "HIGH";
}
result = result + ", temperature: " + this.temperatureSetting + " ]";
return result;
}
41
What computers were made for

NASA’s WorldWind

See http://learn.arc.nasa.gov/worldwind/
42
Download