Download Classes addendum

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
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
Related documents