topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · classes...
TRANSCRIPT
![Page 1: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/1.jpg)
Topic 27
classes and objects,
state and behavior
Copyright Pearson Education, 2010
Based on slides by Marty Stepp and Stuart Reges
from http://www.buildingjavaprograms.com/
“A class … provides a blueprint for the construction of
similar objects … you can invent brand new types of
your own. Each OO [object-oriented] application
gradually becomes a unique programming language…
Whether this … ultimately brings you pleasure or gives
you pain is a matter of design.”
Sandi Metz, software engineer & author
In Practical Object-Oriented Design in Ruby
htt
ps:/
/ww
w.s
andim
etz
.com
/
![Page 2: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/2.jpg)
int i = 3;
What is int?
What is i?
What is 3?
![Page 3: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/3.jpg)
int i = 3;
What is int? The data type.
What is i? The variable.
What is 3? The value.
int
i
3
The type of thing
the box is allowed
to contain
The name of the box
The thing in the box
![Page 4: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/4.jpg)
Declaring an int variable named i:
int i;
Initializing an int variable named i to 3:
int i = 3;
int
i
3
The type of thing
the box is allowed
to contain
The name of the box
The thing in the box
int i(empty)
![Page 5: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/5.jpg)
How about Strings?
Declaring a String variable named str:
String str;
Instantiating a String named str to “ABC”:
String str = “ABC”;
String
str
“ABC”The type of thing
the box is allowed
to contain
The name of the box
The thing in the box
String strnull (empty)
![Page 6: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/6.jpg)
Why are these different?
int i(empty)
String strnull (empty)
int i; String str;
![Page 7: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/7.jpg)
In the computer’s memory
A primitive data type is stored directly in a “house”
(memory location):
char c = ‘y’;
‘y’
int d = 7;
7
boolean e
= true;
true
Whereas a String is an “object” that is stored as a
reference:
String str = “ABC”;
0x2387248dea38f
‘A’ ‘B’ ‘C’ ‘\0’
0x2387248dea38f
![Page 8: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/8.jpg)
You can make your own
“object” data types!
See the next few slides….
![Page 9: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/9.jpg)
Nouns & verbs in real life
Classroom
- Array of Students
- Array of Instructors
Student
- String utEid
- doHomework(int assignmentNumber)
- askQuestion(String question)
![Page 10: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/10.jpg)
Object-oriented programming
== nouns & verbs in Java
class Student {
public String utEid;
public String major;
public Student(String utEid) {
this.utEid = utEid;
}
public void askQuestion(String question) {
System.out.println(question);
}
};
Nouns
Verb
![Page 11: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/11.jpg)
Object-oriented programmingpublic class Cs312 {
public static void main(String[] args) {
Student[] students = new Students[90];
student[0] = new Student(“joker1234”);
student[1] = new Student(“reader5678”);
System.out.println(“First student ID is ” +
student[0].utEid);
System.out.println(getMajor(student[0]));
}
public static String getMajor(Student student) {
if (student.major == null) {
return “Undeclared”;
}
return student.major;
}
};
Array of null objects
Instantiating student[0]
![Page 12: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/12.jpg)
You can make your own
“object” data types!
Student is a data type (class).
student[0] and student[1] are instances of
the Student data type (class).
student[0] and student[1] are objects.
![Page 13: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/13.jpg)
Clicker Question
What kind of assignment handout do you
prefer?
A. A long assignment handout
B. A short assignment handout
Why?
![Page 14: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/14.jpg)
A programming problem Given a file of cities' (x, y) coordinates,
which begins with the number of cities:
6
50 20
90 60
10 72
74 98
5 136
150 91
Write a program to draw the cities on a DrawingPanel, then a terrible event (zombie apocalypse, nuclear meltdown) that turns all cities red that are within a given radius:
Ground zero x: 100
Ground zero y: 100
Area of effect: 75
![Page 15: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/15.jpg)
A solutionScanner input
= new Scanner(new File("cities.txt"));
int cityCount = input.nextInt();
int[] xCoords = new int[cityCount];
int[] yCoords = new int[cityCount];
for (int i = 0; i < cityCount; i++) {
xCoords[i] = input.nextInt();
yCoords[i] = input.nextInt();
}
...
– parallel arrays: 2+ arrays with related data at same indexes.
• Considered poor style. (Relationship exists in the
programmer’s mind, but not explicit in the program.)
![Page 16: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/16.jpg)
ObservationsThe data in this problem is a set of points.
An alternative is to store them as Point
objects.
– A Point would store a city's x/y data.
– We could compare distances between Points
to see whether the terrible event affects
a given city.
– Each Point would know how to draw itself.
– The driver program would be shorter
and cleaner.
![Page 17: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/17.jpg)
Clients of objects
client program: A program that uses
objects.
– Example: Zombies is a client of DrawingPanel
and Graphics.
Zombie.java (client program)
public class Zombie {
main(String[] args) {
new DrawingPanel(...)
new DrawingPanel(...)
...
}
}
DrawingPanel.java (class)
public class DrawingPanel {
...
}
![Page 18: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/18.jpg)
Classes and objects
class: A program entity that represents either:
1. A program / module, or
2. A template for a new type of objects.
–The DrawingPanel class is a template for
creating DrawingPanel objects.
– Other classes: String, Random, Scanner, File, …
object: An entity that combines state and behavior.
– object-oriented programming (OOP): Programs that
perform their behavior as interactions between objects.
![Page 19: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/19.jpg)
Blueprint analogy
iPod blueprint
state:current songvolumebattery life
behavior:power on/offchange station/songchange volumechoose random song
iPod #1
state:song = "1,000,000 Miles"volume = 17battery life = 2.5 hrs
behavior:power on/offchange station/songchange volumechoose random song
iPod #2
state:song = "Letting You"volume = 9battery life = 3.41 hrs
behavior:power on/offchange station/songchange volumechoose random song
iPod #3
state:song = "Discipline"volume = 24battery life = 1.8 hrs
behavior:power on/offchange station/songchange volumechoose random song
creates
![Page 20: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/20.jpg)
Abstractionabstraction: A distancing between ideas and details.
– We can use objects without knowing how they work.
abstraction in an iPhone:
– You understand its external behavior (buttons, screen).
– You may not understand its inner details,
and you don't need to if you just want to use it.
![Page 21: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/21.jpg)
Our task
In the following slides, we will implement a Point class as a way of learning about
defining classes.
– We will define a type of objects named Point.
– Each Point object will contain x/y data called fields.
– Each Point object will contain behavior called methods.
– Client programs will use the Point objects.
![Page 22: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/22.jpg)
Point objects (desired)
Point p1 = new Point(5, -2);
Point p2 = new Point(); // origin, (0, 0)
Data in each Point object:
Methods in each Point object:
Method name Description
setLocation(x, y) sets the point's x and y to the given values
translate(dx, dy) adjusts the point's x and y by the given amounts
distance(p) how far away the point is from point p
draw(g) displays the point on a drawing panel
Field name Description
x the point's x-coordinate
y the point's y-coordinate
![Page 23: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/23.jpg)
Point class as blueprint
– The class (blueprint) will describe how to create objects.
– Each object will contain its own data and methods.
Point class
state:int x, y
behavior:setLocation(int x, int y)
translate(int dx, int dy)
distance(Point p)
draw(Graphics g)
Point object #1
state:x = 5, y = -2
behavior:setLocation(int x, int y)translate(int dx, int dy)distance(Point p)draw(Graphics g)
Point object #2
state:x = -245, y = 1897
behavior:setLocation(int x, int y)translate(int dx, int dy)distance(Point p)draw(Graphics g)
Point object #3
state:x = 18, y = 42
behavior:setLocation(int x, int y)translate(int dx, int dy)distance(Point p)draw(Graphics g)
![Page 24: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/24.jpg)
What is output by the following code?
Point p1 = new Point();
Point p2 = new Point();
boolean b1 = (p1 == p2);
System.out.print(b1);
A. Syntax error
B. Runtime error
C. false
D. true
E. no output
![Page 25: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/25.jpg)
25
Object state:
Fields
![Page 26: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/26.jpg)
Point class, version 1public class Point {
private int x;
private int y;
}
– Save this code into a file named Point.java.
The above code creates a new type named Point.
– Each Point object contains two pieces of data:
• an int named x, and
• an int named y.
– Point objects do not contain any behavior (yet).
![Page 27: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/27.jpg)
Fields
field: A variable inside an object that is part of its state.
– Each object has its own copy of each field.
Declaration syntax:
access_modifier type name;
– Example:
public class Student {
// each Student object has a name and
// gpa field (instance variable)
private String name;
private double gpa;
}
![Page 28: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/28.jpg)
Accessing fields
Other classes can access/modify an object's fields.
– depending on the access modifier
– access: variable.field
– modify: variable.field = value;
Example:Point p1 = new Point();
Point p2 = new Point();
System.out.println("the x-coord is " + p1.x); // access
p2.y = 13; // modify
![Page 29: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/29.jpg)
A class and its client
Point.java is not, by itself, a runnable
program.
– A class can be used by client programs.
PointMain.java (client program)
public class PointMain {
main(String args) {
Point p1 = new Point();
p1.x = 7;
p1.y = 2;
Point p2 = new Point();
p2.x = 4;
p2.y = 3;
...
}
}
Point.java (class of objects)
public class Point {
int x;
int y;
}
x 7 y 2
x 4 y 3
![Page 30: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/30.jpg)
30
Object behavior:
Methods
![Page 31: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/31.jpg)
Client code redundancy
Suppose our client program wants to draw
Point objects:
// draw each city
Point p1 = new Point();
p1.x = 15;
p1.y = 37;
g.fillOval(p1.x, p1.y, 3, 3);
g.drawString("(" + p1.x + ", " + p1.y + ")", p1.x, p1.y);
To draw other points, the same code must be repeated.
– We can remove this redundancy using a method.
![Page 32: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/32.jpg)
Eliminating redundancy, v1
We can eliminate the redundancy with a static method:// Draws the given point on the DrawingPanel.
public static void draw(Point p, Graphics g) {
g.fillOval(p.x, p.y, 3, 3);
g.drawString("(" + p.x + ", " + p.y + ")", p.x, p.y);
}
main would call the method as follows:
draw(p1, g);
![Page 33: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/33.jpg)
Problems with static solution
We are missing a major benefit of objects: code reuse.
– Every program that draws Points would need a draw
method.
The syntax doesn't match how we're used to using
objects.
draw(p1, g); // static (bad)
The point of classes is to combine state and behavior.
– The draw behavior is closely related to a Point's data.
– The method belongs inside each Point object.
p1.draw(g); // inside the object (better)
![Page 34: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/34.jpg)
Instance methods
instance method (or object method): Exists inside
each object of a class and gives behavior to each
object.
public type name(parameters) {
statements;
}
– same syntax as static methods, but without static keyword
Example:
public void shout() {
System.out.println("HELLO THERE!");
}
![Page 35: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/35.jpg)
Instance method examplepublic class Point {
private int x;
private int y;
// Draws this Point object with the given pen.
public void draw(Graphics g) {
...
}
}
The draw method no longer has a Point p
parameter.
How will the method know which point to draw?
– How will the method access that point's x/y data?
![Page 36: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/36.jpg)
Each Point object has its own copy of the draw method, which
operates on that object's state:
Point p1 = new Point(7, 2);
Point p2 = new Point(4, 3);
p1.draw(g);
p2.draw(g);public void draw(Graphics g) {
// this code can see p1's x and y
}
Point objects w/ method
x 7 y 2
x 4 y 3
public void draw(Graphics g) {
// this code can see p2's x and y
}
p2
p1
![Page 37: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/37.jpg)
The implicit parameter
implicit parameter:
The object on which an instance method is called.
– During the call p1.draw(g);
the object referred to by p1 is the implicit parameter.
– During the call p2.draw(g);
the object referred to by p2 is the implicit parameter.
– The instance method can refer to that object's fields.
• We say that it executes in the context of a particular object.
• draw can refer to the x and y of the object it was called on.
![Page 38: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/38.jpg)
Point class, version 2
public class Point {
int x;
int y;
// Changes the location of this Point object.
public void draw(Graphics g) {
g.fillOval(x, y, 3, 3);
g.drawString("(" + x + ", " + y + ")", x, y);
}
}
– Each Point object contains a draw method that
draws that point at its current x/y position.
![Page 39: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/39.jpg)
method questions
Write a method translate that changes a
Point's location by a given dx, dy amount.
Write a method distanceFromOrigin that
returns the distance between a Point and
the origin, (0, 0).
Use the formula:
– Modify the Point and client code to use these
methods.
( ) ( )212
2
12 yyxx −+−
![Page 40: Topic 27 classes and objects, state and behaviorchand/cs312/topic27_classes_objects_1… · Classes and objects class: A program entity that represents either: 1. A program / module,](https://reader030.vdocuments.site/reader030/viewer/2022040411/5ed4ba440b1c4b116053bb82/html5/thumbnails/40.jpg)
Class method answerspublic class Point {
int x;
int y;
public void translate(int dx, int dy) {
x = x + dx;
y = y + dy;
}
public double distanceFromOrigin() {
return Math.sqrt(x * x + y * y);
}
}