Download Chapter 8: User-Defined Classes and ADTs

Document related concepts
no text concepts found
Transcript
Chapter 8: User-Defined
Classes and ADTs
Java Programming:
Program Design Including Data Structures
Chapter Objectives
 Learn about classes
 Learn about private, public, and static
members of a class
 Explore how classes are implemented
 Learn about the various operations on classes
Java Programming: Program Design Including Data Structures
2
Chapter Objectives (continued)
 Examine constructors and finalizers
 Examine the method toString
 Learn about the abstract data type (ADT)
Java Programming: Program Design Including Data Structures
3
Point objects
Point p1 = new Point(5, -2);
Point p2 = new Point();
// origin, (0, 0)
• Data in each Point object:
Field name
Description
x
the point's x-coordinate
y
the point's y-coordinate
• Methods in each Point object:
Method name
Description
setLocation(x, y)
sets the point's x and y to the given values
transform(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
Point class as blueprint
Point class
state:
int x,
y
behavior:
setLocation(int x, int y)
transform(int dx, int dy)
distance(Point p)
draw(Graphics g)
Point object #1
state:
x = 5,
y = -2
behavior:
setLocation(int x, int y)
transform(int dx, int dy)
distance(Point p)
draw(Graphics g)
Point object #2
state:
x = -245,
y = 1897
behavior:
setLocation(int x, int y)
transform(int dx, int dy)
distance(Point p)
draw(Graphics g)
Point object #3
state:
x = 18,
y = 42
behavior:
setLocation(int x, int y)
transform(int dx, int dy)
distance(Point p)
draw(Graphics g)
– The class (blueprint) will describe how to create objects.
– Each object will contain its own data and methods.
Point class, version 1
public class Point {
int x;
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).
Accessing fields
• Other classes can access/modify an object's fields.
– 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);
p2.y = 13;
// access
// modify
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
PointMain client example
public class PointMain {
public static void main(String[] args) {
// create two Point objects
Point p1 = new Point();
p1.y = 2;
Point p2 = new Point();
p2.x = 4;
}
}
System.out.println(p1.x + ", " + p1.y);
// 0, 2
// move p2 and then print it
p2.x += 2;
p2.y++;
System.out.println(p2.x + ", " + p2.y);
// 6, 1
Classes
 class: A collection of a fixed number of
components
 Components: Members of a class
 Members are accessed by name.
 Class categories/modifiers:
– private
– public
– protected (discussed at chapter 11)
Java Programming: Program Design Including Data Structures
10
Classes (continued)
 Private: members of class are not accessible
outside class
 Public: members of class are accessible outside
class
 Class members: can be methods or variables
 Variable members are declared like any other
variables
Java Programming: Program Design Including Data Structures
11
Syntax
The general syntax for defining a class:
 If a member of a class is a named constant, you declare
it just like any other named constant
 If a member of a class is a variable, you declare it just
like any other variable
Java Programming: Program Design Including Data Structures
12
Syntax (continued)
• If a member of a class is a method, you define it
just like any other method
• If a member of a class is a method, it can
(directly) access any member of the class—data
members and methods
• When you write the definition of a method, you
can directly access any data member of the class
(without passing it as a parameter)
Java Programming: Program Design Including Data Structures
13
Syntax (continued)
class Clock:
Data Members (Instance Variables):
• private int hr; //store hours
• private int min; //store minutes
• private int sec; //store seconds
Methods:
• public void setTime(int hours, int minutes,
int seconds)
• public int getHours()
• public int getMinutes()
• public int getSeconds()
• public void printTime()
• public void incrementSeconds()
• public void incrementMinutes()
• public void incrementHours()
• public boolean equals(Clock otherClock)
• public void makeCopy(Clock otherClock)
• public Clock getCopy()
Java Programming: Program Design Including Data Structures
14
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!");
}
Instance method example
public class Point {
int x;
int y;
// Draws this Point object with the given pen.
public void transform(int dx, int dy) {
...
}
}
– The transform method no longer has a Point p parameter.
– How will the method know which point to transform?
• How will the method access that point's x/y data?
• Implicit parameter, this
Constructors
 constructor: Initializes the state of new objects.
public type(parameters) {
statements;
}
 runs when the client uses the new keyword
 no return type is specified;
it implicitly "returns" the new object being created
 If a class has no constructor, Java gives it a default
constructor with no parameters that sets all fields to 0.
 Two types of constructors:
 With parameters
 Without parameters (default constructor)
Java Programming: Program Design Including Data Structures
17
Constructors (continued)
• Constructors have the following properties:
– The name of a constructor is the same as the name
of the class
– A constructor has no return type
– A class can have more than one constructor
– All constructors of a class have the same name
– If a class has more than one constructor, any two
constructors must have different signatures
Java Programming: Program Design Including Data Structures
18
Constructors (continued)
– Constructors are automatically executed when a
class object is instantiated
– With multiple constructors, which constructor
executes depends on the type of values passed to
the class object when the class object is
instantiated
Java Programming: Program Design Including Data Structures
19
Constructors (continued)
class Clock: Constructors
 Default constructor is public Clock()
Constructor with parameters:
 public Clock(int hours, int
minutes,int seconds)
Java Programming: Program Design Including Data Structures
20
Unified Modeling Language Class
Diagrams
Java Programming: Program Design Including Data Structures
21
Variable Declaration and Object
Instantiation
 General syntax for using the operator new is:
new className()
OR
new className(argument1, argument2, ...,
argumentN)
Clock myClock;
Clock yourClock;
myClock = new Clock();
yourClock = new Clock(9, 35, 15);
Java Programming: Program Design Including Data Structures
22
Variable Declaration and Object
Instantiation (continued)
Java Programming: Program Design Including Data Structures
23
Accessing Class Members
• To access a data member of a class object or method:
referenceVariableName.memberName
Example 8-1
myClock.setTime(5, 2, 30);
myClock.printTime();
yourClock.setTime(x, y, z);
if (myClock.equals(yourClock))
…
Java Programming: Program Design Including Data Structures
24
Assignment Operator: A Precaution
 Consider:
myClock = yourClock;
 Copies the value of the reference variable yourClock
into the reference variable myClock
 After execution, both variables refer to same object
Java Programming: Program Design Including Data Structures
25
Assignment Operator: A Precaution
(continued)
 Shallow copying: two or more reference variables of
the same type point to the same object
 Deep copying: each reference variable refers to its
own object
Java Programming: Program Design Including Data Structures
26
The this keyword
•this : Refers to the implicit parameter
inside your class.
(a variable that stores the object on which a method is called)
– Refer to a field:
this.field
– Call a method:
this.method(parameters);
– One constructor
can call another:
this(parameters);
The Copy Constructor
 Executes when an object is instantiated
 Initialized using an existing object
 Syntax:
public ClassName(ClassName otherObject)
…
Clock theClock = new Clock(myClock);
…
public Clock(Clock otherClock) {
this(otherClock.hr, otherClock.min, otherClock.sec);
} // or
public Clock(Clock otherClock) {
hr = otherClock.hr;
min = otherClock.min;
sec = otherClock.sec;
}
Java Programming: Program Design Including Data Structures
28
Example: class Clock
myClock.makeCopy(yourClock);
…
public void makeCopy(Clock otherClock) {
hr = otherClock.hr;
min = otherClock.min;
sec = otherClock.sec;
}
Java Programming: Program Design Including Data Structures
29
The Method toString




Public value-returning method
Takes no parameters
Returns address of a String object
Output using print, println, printf
methods
 Default definition creates String with name of
object’s class name followed by hash code of
object
System.out.println(myClock);
is:
Clock@11b86e7
Java Programming: Program Design Including Data Structures
30
Example: toString()
System.out.pringln (myClock.toString());
…
public String toString(Clock clockObject) {
String str;
…
return str;
}
Java Programming: Program Design Including Data Structures
31
The Modifier static Keyword
 In the method heading, it specifies that the method can
be invoked by using the name of the class
Arrays.toString(), Arrays.sort(),
Math.sqrt(), Math.min()
 If it isused to declare data member  Data member
invoked by using the class name
Math.PI, Bank.count
 Static data members of a class exist even when no
object of class type instantiated
 Static variables are initialized to their default values
Java Programming: Program Design Including Data Structures
32
The Modifier static
(continued)
Example 8-3
public class Illustrate
{
private int x;
private static int y;
public static int count;
public Illustrate()
{
x = 0;
}
public Illustrate(int a)
{
x = a;
}
Java Programming: Program Design Including Data Structures
33
The Modifier static
(continued)
void setX(int a)
{
x = a;
}
public String
{
return("x
+ ",
}
public static
{
y++;
}
toString()
= " + x + ", y = " + y
count = " + count);
void incrementY()
}
Illustrate illusObject = new Illustrate();
Illustrate.incrementY();
Illustrate.count++;
Java Programming: Program Design Including Data Structures
34
The Modifier static
(continued)
Illustrate illusObject1 = new Illustrate(3);
Illustrate illusObject2 = new Illustrate(5);
Java Programming: Program Design Including Data Structures
35
The Modifier static
(continued)
Illustrate.incrementY();
Illustrate.count++;
Java Programming: Program Design Including Data Structures
36
Finalizers
 Automatically execute when class object goes out
of scope
 Have no parameters
 Only one finalizer per class
 Name of finalizer: finalize
Java Programming: Program Design Including Data Structures
37
Accessor and Mutator Methods
 Accessor method: A method of a class that only
accesses (that is, does not modify) the value(s) of
the data member(s)
 Mutator method: modifies the value(s) of the data
member(s)
Java Programming: Program Design Including Data Structures
38
Creating Packages
You can create packages using a reserved word package
 Define the class to be public. (If class is not
public, it can only be used within package.)
 Choose name for package
 Organize package (create subdirectories)
Java Programming: Program Design Including Data Structures
39
Creating Package for class Clock
package jpfpatpd.ch08.clockPackage;
public class Clock
{
//put instance variables and methods,
//as before, here
}
import jpfpatpd.ch08.clockPackage.Clock;
Java Programming: Program Design Including Data Structures
40
The Reference this
 Refers to instance variables and methods of a
class
 Used to implement cascaded method calls
Java Programming: Program Design Including Data Structures
41
Inner Classes
 Defined within other classes
 Can be either a complete class definition or an
anonymous inner class definition
 Used to handle events
Java Programming: Program Design Including Data Structures
42
Abstract Data Type
A data type that specifies the logical properties
without the implementation details
Java Programming: Program Design Including Data Structures
43
Programming Example:
Candy Machine (Problem
Statement)
A new candy machine is bought for the gym, but it is
not working properly. The machine sells candies,
chips, gum, and cookies. In this programming
example, we will write a program to create a Java
application program for this candy machine so that it
can be put into operation. We will divide this
program in two parts. In the first part, we will design
a non-GUI application program. In the second part,
we will design an application program that will
create a GUI, as described in the second part.
Java Programming: Program Design Including Data Structures
44
Programming Example:
Candy Machine (Problem
Statement continued)
• The non-GUI application program should do the
following:
1.
2.
3.
4.
5.
Show the customer the different products sold
Let the customer make the selection
Show the customer the cost of the item selected
Accept money from the customer
Release the item
Java Programming: Program Design Including Data Structures
45
Programming Example:
Candy Machine (Input and
Output)
 Input: The item selection and the cost of the item
 Output: The selected item
Java Programming: Program Design Including Data Structures
46
Programming Example:
Candy Machine
Components:
 Cash register
 Dispenser
 Machine
Java Programming: Program Design Including Data Structures
47
Programming Example:
Candy Machine (continued)
Java Programming: Program Design Including Data Structures
48
Programming Example:
Candy Machine (continued)
Java Programming: Program Design Including Data Structures
49
Programming Example:
Candy Machine (continued)
Java Programming: Program Design Including Data Structures
50
Programming Example:
Candy Machine (continued)
Java Programming: Program Design Including Data Structures
51
Programming Example:
Candy Machine (continued)
Java Programming: Program Design Including Data Structures
52
Programming Example:
Candy Machine (continued)
Java Programming: Program Design Including Data Structures
53
Chapter Summary
 Creating classes
 Members of a class:




private
protected
public
static
 Implementing classes
 Various operations on classes
Java Programming: Program Design Including Data Structures
54
Chapter Summary (continued)
 Constructors
 Finalizers
 Method toString
 Abstract data types
Java Programming: Program Design Including Data Structures
55