0% found this document useful (0 votes)
8 views53 pages

Topic1 Implementing Classes

The document outlines the process of implementing classes in Java, focusing on key concepts such as object behavior, instance variables, encapsulation, and constructors. It provides examples, including a Counter class and a BankAccount class, detailing their methods, public interfaces, and the importance of documentation comments. Additionally, it emphasizes the significance of unit testing to ensure that classes function correctly in isolation.

Uploaded by

5s5wc6kdcy
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views53 pages

Topic1 Implementing Classes

The document outlines the process of implementing classes in Java, focusing on key concepts such as object behavior, instance variables, encapsulation, and constructors. It provides examples, including a Counter class and a BankAccount class, detailing their methods, public interfaces, and the importance of documentation comments. Additionally, it emphasizes the significance of unit testing to ensure that classes function correctly in isolation.

Uploaded by

5s5wc6kdcy
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

Implementing Classes

Desired Learning Outcome

• To become familiar with the process of implementing classes

• To be able to implement and test simple methods

• To understand the purpose and use of constructors

• To understand how to access instance variables and local variables

• To be able to write javadoc comments


Objects

In Java, you build programs for objects.


Each object has certain behaviors and states.
• Dogs have state (name, color, breed, hungry) and behavior (barking,
fetching, wagging tail).
• Cars also have state (current gear, current speed) and behavior
(changing gear, accelerating, applying brakes).
Interacting with Objects
Object: an entity in your program that you can manipulate by calling
one or more of its methods.
Method: consists of a sequence of instructions that can access the
data of an object.
You do not know what the instructions are
You do know that the behavior is well
defined

E.g., applying brakes on a car


C las s es

A class describes a set of objects with the same behavior

A class is like a blueprint for making objects.

• There may be thousands of other cars of the same make


and model.
• Each car was built from the same set of blueprints and
therefore contains the same components.
• In object-oriented terms, we say that a car is
an instance of the class of objects known as cars.
• A class is the blueprint from which individual objects are
created.
Instance Variables and Encapsulation

Figure 1 Tally counter


Instance of a class: an
object of the class.
Example: simulating a tally counter
Counter tally = new Counter();
[Link]();
[Link]();
int result = [Link](); // Sets result to 2

Each counter needs to internally store a variable that keeps track


of the number of simulated button clicks.
Instance Variables

Instance variables store the data of an object.


- a storage location present in each object of the class.

The class declaration specifies the instance variables:


public class Counter
{
private int value;
...
}

An object's instance variables store the data required for


executing its methods.
Instance Variables

An instance variable declaration consists of the following parts:


access specifier (private) Who can see/use it?
type of variable (such as int)
name of variable (such as value)

You should declare all instance variables as private.


Syntax 3.1 Instance Variable Declaration
Instance Variables

These clocks have common behavior, but each of them has a


different state. Similarly, objects of a class can have their
instance variables set to different values.
The Methods of the Counter C l a s s

The click method advances the counter value by 1:


public void click()
{
value = value + 1;
}

Affects the value of the instance variable of the object on which the method is
invoked
To way to use it: call [Link]();
Advances the value variable of the concertCounter object
The Methods of the Counter C l a s s

The getValue method returns the current value:


public int getValue()
{
return value;
}

The return statement


Terminates the method call
Returns a result (the return value) to the method's caller

Private instance variables can only be accessed by methods of the


same class.
Encap s ulation

Encapsulation is the process of hiding implementation details


and providing methods for data access.
To encapsulate data:
Declare instance variables as private and
Declare public methods that access the variables

Encapsulation allows a programmer to use a class without


having to know its implementation.
Information hiding makes it simpler for the implementor of a class
to locate errors and change implementations.
Encap s ulation

A thermostat functions as a "black box" whose inner


workings are hidden.

When you assemble classes, like Car and String, into


programs you are like a contractor installing a thermostat.
When you implement your own classes you are like the
manufacturer who puts together a thermostat out of parts.
section_1/[Link]
1 /**
2 This class models a tally counter.
3 */
4 public class Counter
5 {
6 private int value;
7
8 /**
9 Gets the current value of this counter.
10 @return the current value
11 */
12 public int getValue()
13 {
14 return value;
15 }
16
17 /**
18 Advances the value of this counter by 1.
19 */
20 public void click()
21 {
22 value = value + 1;
23 }
24
25 /**
26 Resets the value of this counter to 0.
27 */
28 public void reset()
29 {
30 value = 0;
31 }
32 }
Specifying the Public Interface of a
Class
In order to implement a class, you first need to know which
methods are required.
Essential behavior of a bank account:
deposit money
withdraw money
get balance

We interact with a class through its public interface –


methods
Specifying the Public Interface of a
Class

We want to support method calls such as the following:


[Link](2000);
[Link](500);
[Link]([Link]());

Here are the method headers needed for a BankAccount class:


public void deposit(double amount)

public void withdraw(double amount)

public double getBalance()


Specifying the Public Interface of a
Class: Method Declaration
A method's body consisting of statements that are executed when
the method is called:
public void deposit(double amount)
{
implementation - f i l l e d i n l a t e r
}

You can fill in the method body so it compiles:


public double getBalance()
{
// TODO: fill in implementation
return 0;
}
Specifying the Public Interface of a
Class
BankAccount methods were declared as public.
public methods can be called by all other methods in the
program (whether within or outside of the same class)
Methods can also be declared private
private methods only be called by other methods in the same class
private methods are not part of the public interface
Specifying Constructors

Initialize objects
Set the initial data for objects
Similar to a method with two differences:
The name of the constructor is always the same as the name of the class
Constructors have no return type
Specifying Constructors: BankAccount

Two constructors
public BankAccount()
public BankAccount(double initialBalance)

Usage
BankAccount harrysChecking = new BankAccount();
BankAccount momsSavings = new BankAccount(5000);
Specifying Constructors: BankAccount

The constructor name is always the same as the class name.


The compiler can tell them apart because they take different
arguments.
A constructor that takes no arguments is called a no-argument
constructor.
BankAccount's no-argument constructor - header and body:
public BankAccount()
{
c o n s t r u c t o r b od y — im p le m e nt a t ion f i l l e d i n l a t e r
}

The statements in the constructor body will set the instance


variables of the object.
BankAccount Public Interface
The constructors and methods of a class go inside the class declaration:
public class BankAccount
{
// p r i v a t e i n s t a n c e v a r i a b l e s - - f i l l e d i n later

// Constructors
public BankAccount()
{
// b o d y - - f i l l e d i n l a t e r
}
public BankAccount(double initialBalance)
{
// b o d y - - f i l l e d i n l a t e r
}

// Methods
public void deposit(double amount)
{
// body--filled in later
}
public void withdraw(double amount)
{
// b o d y - - f i l l e d i n l a t e r
}
public double getBalance()
{
// b o d y - - f i l l e d i n l a t e r
}
}
Specifying the Public Interface of a
Class
public constructors and methods of a class form the public
interface of the class.
These are the operations that any programmer can use
Syntax 3.2 C l a s s Declaration
U s i n g the Public Interface

Example: transfer money


// Transfer from one account to another
double transferAmount = 500;
[Link](transferAmount);
[Link](transferAmount)

Example: add interest


double interestRate = 5; // 5 percent interest
double interestAmount = [Link]() * interestRate / 100;
[Link](interestAmount);

Programmers use objects of the BankAccount class to carry out


meaningful tasks
without knowing how the BankAccount objects store their data
without knowing how the BankAccount methods do their work
Commenting the Public Interface

Use documentation comments to describe the classes and


public methods of your programs.
Java has a standard form for documentation comments.
A program called javadoc can automatically generate a set of
HTML pages.
Documentation comment
placed before the class or method declaration that is being documented
Commenting the Public Interface -
Documenting a method
Start the comment with a /**.
Describe the method’s purpose.
Describe each parameter:
start with @param
name of the parameter that holds the argument a
short explanation of the argument

Describe the return value:


start with @return
describe the return value

Omit @param tag for methods that have no arguments.


Omit the @return tag for methods whose return type is void.
End with */
Commenting the Public Interface -
Documenting a method

Example:
/**
Withdraws money from the bank account.
@param amount the amount to withdraw
*/
public void withdraw(double amount)
{
implementation—filled i n l a t e r
}

Example:
/**
Gets the current balance of the bank account.
@return the current balance
*/
public double getBalance()
{
implementation—filled i n later
}
Commenting the Public Interface -
Documenting a class

Place above the class declaration.


Supply a brief comment explaining the class's purpose.
Example:
/**
A bank account has a balance that can be changed by
deposits and withdrawals.
*/
public class BankAccount
{
. . .
}

Provide documentation comments for:


every class
every method
every parameter variable
every return value
Method Summary

Figure 3 A Method Summary Generated by javadoc


Method Details

Figure 4 Method Detail Generated by javadoc


Providing the C l a s s Implementation

The private implementation of a class consists of:


instance variables
the bodies of constructors
the bodies of methods.
Providing Instance Variables

Determine the data that each bank account object contains.


What does the object need to remember so that it can carry out its
methods?
Each bank account object only needs to store the current balance.
BankAccount instance variable declaration:
public class BankAccount
{
private double balance;
// Methods and constructors below
. . .
}
Providing Instance Variables

Like a wilderness explorer who needs to carry all


items that may be needed, an object needs to
store the data required for its method calls.
Providing Constructors
Constructor's job is to initialize the instance variables of the object.
The no-argument constructor sets the balance to zero.
public BankAccount()
{
balance = 0;
}

The second constructor sets the balance to the value supplied as


the construction argument.
public BankAccount(double initialBalance)
{
balance = initialBalance;
}
Providing Constructors - Tracing the
Statement
Steps carried out when the following statement is executed:

BankAccount harrysChecking = new BankAccount(1000);

Create a new object of type BankAccount.


Call the second constructor
because an argument is supplied in the constructor call

Set the parameter variable initialBalance to 1000.


Set the balance instance variable of the newly created object to
initialBalance.
Return an object reference, that is, the memory location of the
object.
Store that object reference in the harrysChecking variable.
Providing Constructors - Tracing the
Statement

Figure 5 How a Constructor Works


Providing Methods

Is the method an accessor or a mutator


Mutator method
Update the instance variables in some way

Accessor method
Retrieves or computes a result

deposit method - a mutator method


Updates the balance
public void deposit(double amount)
{
balance = balance + amount;
}
Providing Methods - continued

withdraw method - another mutator


public void withdraw(double amount)
{
balance = balance - amount;
}

getBalance method - an accessor method


Returns a value

public double getBalance()


{
return balance;
}
Unit Testing

[Link] can not be executed:


It has no main method
Most classes do not have a main method

Before using [Link] in a larger program:


You should test in isolation

Unit test: verifies that a class works correctly in isolation, outside a


complete program.
Unit Testing

To test a class, either


use an environment for interactive testing, or
write a tester class to execute test instructions.

Tester class: a class with a main method that contains statements


to test another class.
Typically carries out the following steps:
1. Construct one or more objects of the class that is being tested
2. Invoke one or more methods
3. Print out one or more results
4. Print the expected results
section_4/[Link]

1 /**
2 A class to test the BankAccount class.
3 */
4 public class BankAccountTester
5 {
6 /**
7 Tests the methods of the BankAccount class.
8 @param args not used
9 */
10 public static void main(String[] args)
11 {
12 BankAccount harrysChecking = new BankAccount();
13 [Link](2000);
14 [Link](500);
15 [Link]([Link]());
16 [Link]("Expected: 1500");
17 }
18 }

Program Run:

1500
Expected: 1500
Unit Testing - Building a program

To produce a program: combine both BankAccount and


BankAccountTester classes.
Details for building the program vary.
In most environments, you need to carry out these steps:
1. Make a new subfolder for your program
2. Make two files, one for each class
3. Compile both files
4. Run the test program

BankAccount and BankAccountTest have entirely different


purposes:
BankAccount class describes objects that compute bank balances
BankAccountTester class runs tests that put a BankAccount object
through its paces
Local Variables

Local variables are declared in the body of a method:


public double giveChange()
{
double change = payment - purchase;
purchase = 0;
payment = 0;
return change;
}

When a method exits, its local variables are removed.


Parameter variables are declared in the header of a method:
public void enterPayment(double amount)
Local Variables

Local and parameter variables belong to methods:


When a method runs, its local and parameter variables come to life
When the method exits, they are removed immediately

Instance variables belong to objects, not methods:


When an object is constructed, its instance variables are created
The instance variables stay alive until no method uses the object any longer

Instance variables are initialized to a default value:


Numbers are initialized to 0
Object references are set to a special value called null
A null object reference refers to no object at all

You must initialize local variables:


The compiler complains if you do not
The t h i s Reference

Two types of inputs are passed when a method is called:


The object on which you invoke the method
The method arguments

In the call [Link](500) the method needs to


know:
The account object (momsSavings)
The amount being deposited (500)

The implicit parameter of a method is the object on which the


method is invoked.
All other parameter variables are called explicit parameters.
The t h i s Reference

Look at this method:


public void deposit(double amount)
{
balance = balance + amount;
}

amount is the explicit parameter


The implicit parameter(momSavings) is not seen
balance means [Link]

When you refer to an instance variable inside a method, it means


the instance variable of the implicit parameter.
The t h i s Reference

The this reference denotes the implicit parameter


balance = balance + amount;

actually means
[Link] = [Link] + amount;

When you refer to an instance variable in a method, the


compiler automatically applies it to the this reference.
The t h i s Reference

Some programmers feel that inserting the this reference


before every instance variable reference makes the code
clearer:

public BankAccount(double initialBalance)


{
[Link] = initialBalance;
}
The t h i s Reference

Figure 7 The Implicit Parameter of a Method Call


The t h i s Reference
The this reference can be used to distinguish between
instance variables and local or parameter variables:
public BankAccount(double balance)
{
[Link] = balance;
}

A local variable shadows an instance variable with the same


name.
You can access the instance variable name through the this reference.

In Java, local and parameter variables are considered first when


looking up variable names.
Statement
[Link] = balance;

means: "Set the instance variable balance to the parameter


variable balance".
The t h i s Reference
A method call without an implicit parameter is applied to the same
object.
Example:
public class BankAccount
{
. . .
public void monthlyFee()
{
withdraw(10); // Withdraw $10 from this account
}
}

The implicit parameter of the withdraw method is the (invisible)


implicit parameter of the monthlyFee method
You can use the this reference to make the method easier to
read:
public class BankAccount
{
. . .
public void monthlyFee()
{
[Link](10); // Withdraw $10 from this account
}
}

You might also like