Chapter 4: Writing Classes Chapter 4: Writing Classes
Presentation slides for Presentation slides for
Java Software Solutions Java Software Solutions
Foundations of Program Design Foundations of Program Design
Second Edition Second Edition
by John Lewis and William Loftus by John Lewis and William Loftus
Java Software Solutions is published by Addison-Wesley Java Software Solutions is published by Addison-Wesley
Presentation slides are copyright 2000 by John Lewis and William Loftus. All rights reserved.
Presentation slides are copyright 2000 by John Lewis and William Loftus. All rights reserved.
Instructors using the textbook may use and modify these slides for pedagogical purposes.
Instructors using the textbook may use and modify these slides for pedagogical purposes.
Writing Classes Writing Classes
We've been using predefined classes. Now we will learn to We've been using predefined classes. Now we will learn to write our own classes to define new objects
write our own classes to define new objects
Chapter 4 focuses on: Chapter 4 focuses on:
• class declarations class declarations
• method declarations method declarations
• instance variables instance variables
• encapsulation encapsulation
• method overloading method overloading
• graphics-based objects graphics-based objects
Objects Objects
An object has: An object has:
• state - descriptive characteristics state - descriptive characteristics
• behaviors - what it can do (or be done to it) behaviors - what it can do (or be done to it)
For example, consider a coin that can be flipped so that it's For example, consider a coin that can be flipped so that it's face shows either "heads" or "tails"
face shows either "heads" or "tails"
The state of the coin is its current face (heads or tails) The state of the coin is its current face (heads or tails)
The behavior of the coin is that it can be flipped The behavior of the coin is that it can be flipped
Note that the behavior of the coin might change its state Note that the behavior of the coin might change its state
Classes Classes
A A class class is a blueprint of an object is a blueprint of an object
It is the model or pattern from which objects are created It is the model or pattern from which objects are created
For example, the For example, the String String class is used to define class is used to define String String objects
objects
Each Each String String object contains specific characters (its state) object contains specific characters (its state)
Each Each String String object can perform services (behaviors) such object can perform services (behaviors) such
as as toUpperCase toUpperCase
Classes Classes
The The String class was provided for us by the Java String class was provided for us by the Java standard class library
standard class library
But we can also write our own classes that define specific But we can also write our own classes that define specific objects that we need
objects that we need
For example, suppose we wanted to write a program that For example, suppose we wanted to write a program that simulates the flipping of a coin
simulates the flipping of a coin
We could write a We could write a Coin Coin class to represent a coin object class to represent a coin object
Classes Classes
A class contains data declarations and method declarations A class contains data declarations and method declarations
int x, y;
char ch; Data declarations Data declarations
Method declarations
Method declarations
Data Scope Data Scope
The The scope scope of data is the area in a program in which that of data is the area in a program in which that data can be used (referenced)
data can be used (referenced)
Data declared at the class level can be used by all methods Data declared at the class level can be used by all methods in that class
in that class
Data declared within a method can only be used in that Data declared within a method can only be used in that method
method
Data declared within a method is called Data declared within a method is called local data local data
Writing Methods Writing Methods
A A method declaration method declaration specifies the code that will be specifies the code that will be executed when the method is invoked (or called) executed when the method is invoked (or called)
When a method is invoked, the flow of control jumps to the When a method is invoked, the flow of control jumps to the method and executes its code
method and executes its code
When complete, the flow returns to the place where the When complete, the flow returns to the place where the method was called and continues
method was called and continues
The invocation may or may not return a value, depending The invocation may or may not return a value, depending on how the method was defined
on how the method was defined
myMethod();
myMethod compute
Method Control Flow Method Control Flow
The called method could be within the same class, in which The called method could be within the same class, in which case only the method name is needed
case only the method name is needed
doIt helpMe
helpMe();
obj.doIt();
main
Method Control Flow Method Control Flow
The called method could be part of another class or object The called method could be part of another class or object
The Coin Class The Coin Class
In our In our Coin Coin class we could define the following data: class we could define the following data:
• face face , an integer that represents the current face , an integer that represents the current face
• HEADS HEADS and and TAILS TAILS , integer constants that represent the two , integer constants that represent the two possible states
possible states
We might also define the following methods: We might also define the following methods:
• a a Coin constructor, to set up the object Coin constructor, to set up the object
• a a flip flip method, to flip the coin method, to flip the coin
• a a getFace getFace method, to return the current face method, to return the current face
• a a toString method, to return a string description for printing toString method, to return a string description for printing
The Coin Class The Coin Class
See See CountFlips CountFlips .java .java (page 179) (page 179)
See See Coin.java Coin.java (page 180) (page 180)
Once the Once the Coin Coin class has been defined, we can use it again class has been defined, we can use it again in other programs as needed
in other programs as needed
Note that the Note that the CountFlips CountFlips program did not use the program did not use the toString
toString method method
A program will not necessarily use every service provided A program will not necessarily use every service provided by an object
by an object
Instance Data Instance Data
The The face face variable in the variable in the Coin Coin class is called class is called instance data instance data because each instance (object) of the
because each instance (object) of the Coin Coin class has its own class has its own
A class declares the type of the data, but it does not reserve A class declares the type of the data, but it does not reserve any memory space for it
any memory space for it
Every time a Every time a Coin Coin object is created, a new object is created, a new face face variable is variable is created as well
created as well
The objects of a class share the method definitions, but they The objects of a class share the method definitions, but they have unique data space
have unique data space
That's the only way two objects can have different states That's the only way two objects can have different states
Instance Data Instance Data
See FlipRace.java (page 182) See FlipRace.java (page 182)
face 0
coin1
int face;
class Coin
face 1
coin2
Encapsulation Encapsulation
You can take one of two views of an object: You can take one of two views of an object:
• internal - the structure of its data, the algorithms used by its methods internal - the structure of its data, the algorithms used by its methods
• external - the interaction of the object with other objects in the external - the interaction of the object with other objects in the program
program
From the external view, an object is an From the external view, an object is an encapsulated encapsulated entity, entity, providing a set of specific services
providing a set of specific services
These services define the These services define the interface interface to the object to the object
Recall from Chapter 2 that an object is an Recall from Chapter 2 that an object is an abstraction abstraction , hiding , hiding details from the rest of the system
details from the rest of the system
Encapsulation Encapsulation
An object should be An object should be self-governing self-governing
Any changes to the object's state (its variables) should be Any changes to the object's state (its variables) should be accomplished by that object's methods
accomplished by that object's methods
We should make it difficult, if not impossible, for one We should make it difficult, if not impossible, for one object to "reach in" and alter another object's state object to "reach in" and alter another object's state
The user, or The user, or client client , of an object can request its services, but , of an object can request its services, but it should not have to be aware of how those services are
it should not have to be aware of how those services are accomplished
accomplished
Encapsulation Encapsulation
An encapsulated object can be thought of as a An encapsulated object can be thought of as a black box black box
Its inner workings are hidden to the client, which only Its inner workings are hidden to the client, which only invokes the interface methods
invokes the interface methods
Client
Client Methods
Data
Visibility Modifiers Visibility Modifiers
In Java, we accomplish encapsulation through the In Java, we accomplish encapsulation through the appropriate use of
appropriate use of visibility modifiers visibility modifiers
A A modifier modifier is a Java reserved word that specifies particular is a Java reserved word that specifies particular characteristics of a method or data value
characteristics of a method or data value
We've used the modifier We've used the modifier final to define a constant final to define a constant
Java has three visibility modifiers: Java has three visibility modifiers: public public , , private private , ,
and and protected protected
Visibility Modifiers Visibility Modifiers
Members of a class that are declared with Members of a class that are declared with public visibility public visibility can be accessed from anywhere
can be accessed from anywhere
Members of a class that are declared with Members of a class that are declared with private visibility private visibility can only be accessed from inside the class
can only be accessed from inside the class
Members declared without a visibility modifier have Members declared without a visibility modifier have default default visibility
visibility and can be accessed by any class in the same and can be accessed by any class in the same package
package
Java modifiers are discussed in detail in Appendix F Java modifiers are discussed in detail in Appendix F
Visibility Modifiers Visibility Modifiers
As a general rule, no object's data should be declared with As a general rule, no object's data should be declared with public visibility
public visibility
Methods that provide the object's services are usually Methods that provide the object's services are usually
declared with public visibility so that they can be invoked declared with public visibility so that they can be invoked
by clients by clients
Public methods are also called Public methods are also called service methods service methods
A method created simply to assist a service method is called A method created simply to assist a service method is called a a support method support method
Since a support method is not intended to be called by a Since a support method is not intended to be called by a
Method Declarations Revisited Method Declarations Revisited
A method declaration begins with a A method declaration begins with a method header method header
char calc (int num1, int num2, String message)
method method
name name return
return type type
parameter list parameter list
The parameter list specifies the type The parameter list specifies the type
and name of each parameter and name of each parameter
The name of a parameter in the method The name of a parameter in the method
declaration is called a
declaration is called a formal argument formal argument
Method Declarations Method Declarations
The method header is followed by the The method header is followed by the method body method body
char calc (int num1, int num2, String message) {
int sum = num1 + num2;
char result = message.charAt (sum);
return result;
}
The return expression must be The return expression must be consistent with the return type consistent with the return type
sum sum and and result result are local data are local data
They are created each
They are created each
time the method is called,
time the method is called,
The return Statement The return Statement
The The return type return type of a method indicates the type of value that of a method indicates the type of value that the method sends back to the calling location
the method sends back to the calling location
A method that does not return a value has a A method that does not return a value has a void void return return type type
The The return statement return statement specifies the value that will be specifies the value that will be returned
returned
Its expression must conform to the return type Its expression must conform to the return type
Parameters Parameters