SlideShare a Scribd company logo
Object – Oriented Programming
Week 9 – Public Vs Private Vs Protected, Encapsulation
Ferdin Joe John Joseph, PhD
Faculty of Information Technology
Thai-Nichi Institute of Technology
Writing classes
Intermediate Java Programming
2
Writing Classes
• We've been using predefined classes.
Now we will learn to write our own classes
to define objects
3
Outline
Anatomy of a Class
Anatomy of a Method
Encapsulation
4
Writing Classes
• The programs we’ve written in previous examples have used
classes defined in the Java standard class library
• Now we will begin to design programs that rely on classes that we
write ourselves
• The class that contains the main method is just the starting point
of a program
• True object-oriented programming is based on defining classes
that represent objects with well-defined characteristics and
functionality
5
Classes and Objects
• Recall from our overview of objects in Chapter 1 that an object has
state and behavior
• Consider a six-sided die (singular of dice)
– It’s state can be defined as which face is showing
– It’s primary behavior is that it can be rolled
• We can represent a die in software by designing a class called Die
that models this state and behavior
– The class serves as the blueprint for a die object
• We can then instantiate as many die objects as we need for any
particular program
6
Classes
• A class can contain data declarations and
method declarations
int size, weight;
char category;
Data declarations
Method declarations
7
Classes
• The values of the data define the state of an object created from the
class
• The functionality of the methods define the behaviors of the object
• For our Die class, we might declare an integer that represents the
current value showing on the face
• One of the methods would “roll” the die by setting that value to a
random number between one and six
8
Classes
• We’ll want to design the Die class with
other data and methods to make it a
versatile and reusable resource
• Any given program will not necessarily use
all aspects of a given class
9
Data Scope
• The scope of data is the area in a program in which that data can be
referenced (used)
• Data declared at the class level can be referenced by all methods in
that class
• Data declared within a method can be used only in that method
• Data declared within a method is called local data
10
Instance Data
• The faceValue variable in the Die class is called instance data
because each instance (object) that is created has its own
version of it
• A class declares the type of the data, but it does not reserve any
memory space for it
• Every time a Die object is created, a new faceValue variable is
created as well
• The objects of a class share the method definitions, but each
object has its own data space
• That's the only way two objects can have different states
11
Instance Data
• We can depict the two Die objects from
the RollingDice program as follows:
die1 5faceValue
die2 2faceValue
Each object maintains its own faceValue
variable, and thus its own state
12
Method Header
• A method declaration begins with a
method header
char calc (int num1, int num2, String message)
method
name
return
type
parameter list
The parameter list specifies the type
and name of each parameter
The name of a parameter in the method
declaration is called a formal parameter
13
Method Body
• The method header is followed by the
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 consistent with
the return type
sum and result
are local data
They are created
each time the
method is called, and
are destroyed when
it finishes executing
14
The return Statement
• The return type of a method indicates the
type of value that the method sends back
to the calling location
• A method that does not return a value has
a void return type
• A return statement specifies the value that
will be returned
return expression; 15
Parameters
• When a method is called, the actual
parameters in the invocation are copied
into the formal parameters in the method
header
char calc (int num1, int num2, String message)
{
int sum = num1 + num2;
char result = message.charAt (sum);
return result;
}
ch = obj.calc (25, count, "Hello");
16
Local Data
• As we’ve seen, local variables can be declared inside a method
• The formal parameters of a method create automatic local variables
when the method is invoked
• When the method finishes, all local variables are destroyed
(including the formal parameters)
• Keep in mind that instance variables, declared at the class level,
exists as long as the object exists
17
Constructors
• a constructor is a special method that is used to set up an object
when it is initially created
• A constructor has the same name as the class
• The Die constructor is used to set the initial face value of each new
die object to one
18
Constructors
• Note that a constructor has no return type
specified in the method header, not even
void
• A common error is to put a return type on
a constructor, which makes it a “regular”
method that happens to have the same
name as the class
• The programmer does not have to define a
constructor for a class
19
Outline
Anatomy of a Class
Anatomy of a Method
Encapsulation
20
Method Declarations
• Let’s now examine method declarations in more detail
• A method declaration specifies the code that will be executed when
the method is invoked (called)
• When a method is invoked, the flow of control jumps to the method
and executes its code
• When complete, the flow returns to the place where the method was
called and continues
• The invocation may or may not return a value, depending on how
the method is defined
21
myMethod();
myMethodcompute
Method Control Flow
• If the called method is in the same class,
only the method name is needed
22
doIt helpMe
helpMe();obj.doIt();
main
Method Control Flow
• The called method is often part of
another class or object
23
Outline
Anatomy of a Class
Anatomy of a Method
Encapsulation
24
Encapsulation
• We can take one of two views of an object:
– internal - the details of the variables and
methods of the class that defines it
– external - the services that an object
provides and how the object interacts with the
rest of the system
• From the external view, an object is an
encapsulated entity, providing a set of
specific services 25
Encapsulation
• One object (called the client) may use
another object for the services it provides
• The client of an object may request its
services (call its methods), but it should
not have to be aware of how those
services are accomplished
• Any changes to the object's state (its
variables) should be made by that object's
methods
26
Encapsulation
• An encapsulated object can be thought
of as a black box -- its inner workings are
hidden from the client
• The client invokes the interface methods
of the object, which manages the
instance data Methods
Data
Client
27
Visibility Modifiers
• In Java, we accomplish encapsulation through the appropriate use
of visibility modifiers
• A modifier is a Java reserved word that specifies particular
characteristics of a method or data
• We've used the final modifier to define constants
• Java has three visibility modifiers: public, protected, and
private
• The protected modifier involves inheritance, which we will discuss
later
28
Visibility Modifiers
• Members of a class that are declared with public visibility can be
referenced anywhere
• Members of a class that are declared with private visibility can be
referenced only within that class
• Members declared without a visibility modifier have default visibility
and can be referenced by any class in the same package
29
Visibility Modifiers
• Public variables violate encapsulation because they allow the client
to “reach in” and modify the values directly
• Therefore instance variables should not be declared with public
visibility
• It is acceptable to give a constant public visibility, which allows it to
be used outside of the class
• Public constants do not violate encapsulation because, although the
client can access it, its value cannot be changed
30
Visibility Modifiers
• Methods that provide the object's services are declared with public
visibility so that they can be invoked by clients
• Public methods are also called service methods
• A method created simply to assist a service method is called a
support method
• Since a support method is not intended to be called by a client, it
should not be declared with public visibility
31
Visibility Modifiers
public private
Variables
Methods
Provide services
to clients
Support other
methods in the
class
Enforce
encapsulation
Violate
encapsulation
32
Accessors and Mutators
• Because instance data is private, a class usually provides services
to access and modify data values
• An accessor method returns the current value of a variable
• A mutator method changes the value of a variable
• The names of accessor and mutator methods take the form getX
and setX, respectively, where X is the name of the value
• They are sometimes called “getters” and “setters”
33
Mutator Restrictions
• The use of mutators gives the class
designer the ability to restrict a client’s
options to modify an object’s state
• A mutator is often designed so that the
values of variables can be set only within
particular limits
• For example, the setFaceValue mutator
of the Die class should have restricted the
value to the valid range (1 to MAX) 34
Die.java
public class Die {
private final int MAX = 6; // maximum face value
private int faceValue; // current value showing on the die
/**
* Constructor: Sets the initial face value.
*/
public Die( ) {
faceValue = 1;
}
/**
* Rolls the die and returns the result.
*/
public int roll() {
faceValue = (int)(Math.random() * MAX) + 1;
return faceValue;
}
35
Die.java
/**
* Face value mutator.
*/
public void setFaceValue (int value) {
faceValue = value;
}
/**
* Face value accessor.
*/
public int getFaceValue() {
return faceValue;
}
/**
* Returns a string representation of this die.
*/
public String toString() {
String result = Integer.toString(faceValue);
return result;
}
} 36
RollingDice.java
public class RollingDice {
public static void main (String[] args) {
Die die1, die2;
int sum;
die1 = new Die();
die2 = new Die();
die1.roll();
die2.roll();
System.out.println ("Die One: " + die1 + ", Die Two: " + die2);
die1.roll();
die2.setFaceValue(4);
System.out.println ("Die One: " + die1 + ", Die Two: " + die2);
Create two objects of
class Die
Call method roll in
class Die
Call the mutator (set
method)
37
RollingDice.java
sum = die1.getFaceValue() + die2.getFaceValue();
System.out.println ("Sum: " + sum);
sum = die1.roll() + die2.roll();
System.out.println ("Die One: " + die1 + ", Die Two: " + die2);
System.out.println ("New sum: " + sum);
}
}
Call the accessor (get
method)
4-38
The Die Class
• The Die class contains two data values
– a constant MAX that represents the maximum face value
– an integer faceValue that represents the current face value
• The roll method uses the random method of the Math class to
determine a new face value
• There are also methods to explicitly set and retrieve the current face
value at any time
39
The toString Method
• All classes that represent objects should
define a toString method
• The toString method returns a
character string that represents the object
in some way
• It is called automatically when an object is
concatenated to a string or when it is
passed to the println method
40
Bank Account Example
• Let’s look at another example that demonstrates the implementation
details of classes and methods
• We’ll represent a bank account by a class named Account
• It’s state can include the account number, the current balance, and
the name of the owner
• An account’s behaviors (or services) include deposits and
withdrawals, and adding interest
41
Driver Programs
• A driver program drives the use of other,
more interesting parts of a program
• Driver programs are often used to test
other parts of the software
• The Transactions class contains a
main method that drives the use of the
Account class, exercising its services
42
Account.java
import java.text.NumberFormat;
public class Account {
private final double RATE = 0.035; // interest rate of 3.5%
private long acctNumber;
private double balance;
private String name;
public Account (String owner, long account, double initial) {
name = owner;
acctNumber = account;
balance = initial;
}
public double deposit (double amount) {
balance = balance + amount;
return balance;
}
43
Account.java
public double withdraw (double amount, double fee) {
balance = balance - amount - fee;
return balance;
}
public double addInterest () {
balance += (balance * RATE);
return balance;
}
public double getBalance () {
return balance;
}
public String toString () {
NumberFormat fmt = NumberFormat.getCurrencyInstance();
return (acctNumber + "t" + name + "t" + fmt.format(balance));
}
}
44
Transactions.java
public class Transactions {
public static void main (String[] args) {
Account acct1 = new Account ("Ted Murphy", 72354, 102.56);
Account acct2 = new Account ("Jane Smith", 69713, 40.00);
Account acct3 = new Account ("Edward Demsey", 93757, 759.32);
acct1.deposit (25.85);
double smithBalance = acct2.deposit (500.00);
System.out.println ("Smith balance after deposit: " + smithBalance);
System.out.println ("Smith balance after withdrawal: " + acct2.withdraw
(430.75, 1.50));
45
Transactions.java
acct1.addInterest();
acct2.addInterest();
acct3.addInterest();
System.out.println ();
System.out.println (acct1);
System.out.println (acct2);
System.out.println (acct3);
}
}
4-46
Bank Account Example
acct1 72354acctNumber
102.56balance
name “Ted Murphy”
acct2 69713acctNumber
40.00balance
name “Jane Smith”
47
Bank Account Example
• There are some improvements that can be
made to the Account class
• Formal getters and setters could have
been defined for all data
• The design of some methods could also
be more robust, such as verifying that the
amount parameter to the withdraw
method is positive
48

More Related Content

PPTX
Exception Handling
PDF
2019 DSA 105 Introduction to Data Science Week 1
PPTX
PDF
DSA 103 Object Oriented Programming :: Week 3
PPTX
Inheritance in Java
PDF
DSA 103 Object Oriented Programming :: Week 1
PPTX
Invoke-Obfuscation DerbyCon 2016
DOCX
Autoboxing and unboxing
Exception Handling
2019 DSA 105 Introduction to Data Science Week 1
DSA 103 Object Oriented Programming :: Week 3
Inheritance in Java
DSA 103 Object Oriented Programming :: Week 1
Invoke-Obfuscation DerbyCon 2016
Autoboxing and unboxing

What's hot (20)

PPTX
Exception handling in java
PPTX
Autoboxing And Unboxing In Java
PPTX
PDF
Go Concurrency
PDF
Fileless Malware Infections
PDF
How to Setup A Pen test Lab and How to Play CTF
PPT
JUnit 4
PPT
Java Threads and Concurrency
PPT
Java And Multithreading
PDF
JAVA PROGRAMMING- Exception handling - Multithreading
PDF
Chap 6 : classes et interfaces
PDF
Java Thread Synchronization
PDF
Chapitre 6 traitement des exceptions
PPT
Collections Framework
PPTX
Joker - Improve your tests with mutation testing
PPTX
Overlapped IO와 IOCP 조사 발표
PDF
Java Serialization
PDF
Modern Kernel Pool Exploitation: Attacks and Techniques
PPTX
Java Swing
Exception handling in java
Autoboxing And Unboxing In Java
Go Concurrency
Fileless Malware Infections
How to Setup A Pen test Lab and How to Play CTF
JUnit 4
Java Threads and Concurrency
Java And Multithreading
JAVA PROGRAMMING- Exception handling - Multithreading
Chap 6 : classes et interfaces
Java Thread Synchronization
Chapitre 6 traitement des exceptions
Collections Framework
Joker - Improve your tests with mutation testing
Overlapped IO와 IOCP 조사 발표
Java Serialization
Modern Kernel Pool Exploitation: Attacks and Techniques
Java Swing
Ad

Similar to Constructors and Method Overloading (20)

PPT
Core Java unit no. 1 object and class ppt
PPT
Core Java unit no. 1 object and class ppt
PPTX
class as the basis.pptx
PPT
Ap Power Point Chpt4
PPTX
2 Object-oriented programghgrtrdwwe.pptx
PPTX
PPTX
Java As an OOP Language,Exception Handling & Applets
PPT
123 JAVA CLASSES, OBJECTS AND METHODS.ppt
PDF
JAVA Class Presentation.pdf Vsjsjsnheheh
PDF
Object-oriented Analysis, Design & Programming
PPTX
C# classes objects
PPTX
Lec-21-Classes and Object Orientation.pptx
PDF
Week 7 Java Programming Methods For I.T students.pdf
PPTX
Lecture 5.pptx
PPTX
Java 102 intro to object-oriented programming in java
PPTX
6 Object Oriented Programming
PPTX
Ifi7184 lesson5
PPT
Java lec class, objects and constructors
PPT
Object oriented analysis_and_design_v2.0
Core Java unit no. 1 object and class ppt
Core Java unit no. 1 object and class ppt
class as the basis.pptx
Ap Power Point Chpt4
2 Object-oriented programghgrtrdwwe.pptx
Java As an OOP Language,Exception Handling & Applets
123 JAVA CLASSES, OBJECTS AND METHODS.ppt
JAVA Class Presentation.pdf Vsjsjsnheheh
Object-oriented Analysis, Design & Programming
C# classes objects
Lec-21-Classes and Object Orientation.pptx
Week 7 Java Programming Methods For I.T students.pdf
Lecture 5.pptx
Java 102 intro to object-oriented programming in java
6 Object Oriented Programming
Ifi7184 lesson5
Java lec class, objects and constructors
Object oriented analysis_and_design_v2.0
Ad

More from Ferdin Joe John Joseph PhD (20)

PDF
Invited Talk DGTiCon 2022
PDF
Week 12: Cloud AI- DSA 441 Cloud Computing
PDF
Week 11: Cloud Native- DSA 441 Cloud Computing
PDF
Week 10: Cloud Security- DSA 441 Cloud Computing
PDF
Week 9: Relational Database Service Alibaba Cloud- DSA 441 Cloud Computing
PDF
Week 7: Object Storage Service Alibaba Cloud- DSA 441 Cloud Computing
PDF
Week 6: Server Load Balancer and Auto Scaling Alibaba Cloud- DSA 441 Cloud Co...
PDF
Week 5: Elastic Compute Service (ECS) with Alibaba Cloud- DSA 441 Cloud Compu...
PDF
Week 4: Big Data and Hadoop in Alibaba Cloud - DSA 441 Cloud Computing
PDF
Week 3: Virtual Private Cloud, On Premise, IaaS, PaaS, SaaS - DSA 441 Cloud C...
PDF
Week 2: Virtualization and VM Ware - DSA 441 Cloud Computing
PDF
Week 1: Introduction to Cloud Computing - DSA 441 Cloud Computing
PDF
Sept 6 2021 BTech Artificial Intelligence and Data Science curriculum
PDF
Hadoop in Alibaba Cloud
PDF
Cloud Computing Essentials in Alibaba Cloud
PDF
Transforming deep into transformers – a computer vision approach
PDF
Week 11: Programming for Data Analysis
PDF
Week 10: Programming for Data Analysis
PDF
Week 9: Programming for Data Analysis
PDF
Week 8: Programming for Data Analysis
Invited Talk DGTiCon 2022
Week 12: Cloud AI- DSA 441 Cloud Computing
Week 11: Cloud Native- DSA 441 Cloud Computing
Week 10: Cloud Security- DSA 441 Cloud Computing
Week 9: Relational Database Service Alibaba Cloud- DSA 441 Cloud Computing
Week 7: Object Storage Service Alibaba Cloud- DSA 441 Cloud Computing
Week 6: Server Load Balancer and Auto Scaling Alibaba Cloud- DSA 441 Cloud Co...
Week 5: Elastic Compute Service (ECS) with Alibaba Cloud- DSA 441 Cloud Compu...
Week 4: Big Data and Hadoop in Alibaba Cloud - DSA 441 Cloud Computing
Week 3: Virtual Private Cloud, On Premise, IaaS, PaaS, SaaS - DSA 441 Cloud C...
Week 2: Virtualization and VM Ware - DSA 441 Cloud Computing
Week 1: Introduction to Cloud Computing - DSA 441 Cloud Computing
Sept 6 2021 BTech Artificial Intelligence and Data Science curriculum
Hadoop in Alibaba Cloud
Cloud Computing Essentials in Alibaba Cloud
Transforming deep into transformers – a computer vision approach
Week 11: Programming for Data Analysis
Week 10: Programming for Data Analysis
Week 9: Programming for Data Analysis
Week 8: Programming for Data Analysis

Recently uploaded (20)

PPTX
Purple and Violet Modern Marketing Presentation (1).pptx
PDF
AI Lect 2 Identifying AI systems, branches of AI, etc.pdf
PPTX
lec_5(probability).pptxzzjsjsjsjsjsjjsjjssj
PPT
Chapter 2 METAL FORMINGhhhhhhhjjjjmmmmmmmmm
PPTX
Moving the Public Sector (Government) to a Digital Adoption
PPTX
Extract Transformation Load (3) (1).pptx
PPTX
Trading Procedures (1).pptxcffcdddxxddsss
PDF
Report The-State-of-AIOps 20232032 3.pdf
PPTX
Measurement of Afordability for Water Supply and Sanitation in Bangladesh .pptx
PPTX
Business Acumen Training GuidePresentation.pptx
PDF
Taxes Foundatisdcsdcsdon Certificate.pdf
PPTX
CL11_CH20_-LOCOMOTION-AND-MOVEMENT-Autosaved.pptx
PDF
A Systems Thinking Approach to Algorithmic Fairness.pdf
PPT
Chapter 3 METAL JOINING.pptnnnnnnnnnnnnn
PPTX
Logistic Regression ml machine learning.pptx
PDF
Foundation of Data Science unit number two notes
PPTX
Machine Learning Solution for Power Grid Cybersecurity with GraphWavelets
PDF
Chad Readey - An Independent Thinker
PPTX
Bharatiya Antariksh Hackathon 2025 Idea Submission PPT.pptx
PPTX
batch data Retailer Data management Project.pptx
Purple and Violet Modern Marketing Presentation (1).pptx
AI Lect 2 Identifying AI systems, branches of AI, etc.pdf
lec_5(probability).pptxzzjsjsjsjsjsjjsjjssj
Chapter 2 METAL FORMINGhhhhhhhjjjjmmmmmmmmm
Moving the Public Sector (Government) to a Digital Adoption
Extract Transformation Load (3) (1).pptx
Trading Procedures (1).pptxcffcdddxxddsss
Report The-State-of-AIOps 20232032 3.pdf
Measurement of Afordability for Water Supply and Sanitation in Bangladesh .pptx
Business Acumen Training GuidePresentation.pptx
Taxes Foundatisdcsdcsdon Certificate.pdf
CL11_CH20_-LOCOMOTION-AND-MOVEMENT-Autosaved.pptx
A Systems Thinking Approach to Algorithmic Fairness.pdf
Chapter 3 METAL JOINING.pptnnnnnnnnnnnnn
Logistic Regression ml machine learning.pptx
Foundation of Data Science unit number two notes
Machine Learning Solution for Power Grid Cybersecurity with GraphWavelets
Chad Readey - An Independent Thinker
Bharatiya Antariksh Hackathon 2025 Idea Submission PPT.pptx
batch data Retailer Data management Project.pptx

Constructors and Method Overloading

  • 1. Object – Oriented Programming Week 9 – Public Vs Private Vs Protected, Encapsulation Ferdin Joe John Joseph, PhD Faculty of Information Technology Thai-Nichi Institute of Technology
  • 3. Writing Classes • We've been using predefined classes. Now we will learn to write our own classes to define objects 3
  • 4. Outline Anatomy of a Class Anatomy of a Method Encapsulation 4
  • 5. Writing Classes • The programs we’ve written in previous examples have used classes defined in the Java standard class library • Now we will begin to design programs that rely on classes that we write ourselves • The class that contains the main method is just the starting point of a program • True object-oriented programming is based on defining classes that represent objects with well-defined characteristics and functionality 5
  • 6. Classes and Objects • Recall from our overview of objects in Chapter 1 that an object has state and behavior • Consider a six-sided die (singular of dice) – It’s state can be defined as which face is showing – It’s primary behavior is that it can be rolled • We can represent a die in software by designing a class called Die that models this state and behavior – The class serves as the blueprint for a die object • We can then instantiate as many die objects as we need for any particular program 6
  • 7. Classes • A class can contain data declarations and method declarations int size, weight; char category; Data declarations Method declarations 7
  • 8. Classes • The values of the data define the state of an object created from the class • The functionality of the methods define the behaviors of the object • For our Die class, we might declare an integer that represents the current value showing on the face • One of the methods would “roll” the die by setting that value to a random number between one and six 8
  • 9. Classes • We’ll want to design the Die class with other data and methods to make it a versatile and reusable resource • Any given program will not necessarily use all aspects of a given class 9
  • 10. Data Scope • The scope of data is the area in a program in which that data can be referenced (used) • Data declared at the class level can be referenced by all methods in that class • Data declared within a method can be used only in that method • Data declared within a method is called local data 10
  • 11. Instance Data • The faceValue variable in the Die class is called instance data because each instance (object) that is created has its own version of it • A class declares the type of the data, but it does not reserve any memory space for it • Every time a Die object is created, a new faceValue variable is created as well • The objects of a class share the method definitions, but each object has its own data space • That's the only way two objects can have different states 11
  • 12. Instance Data • We can depict the two Die objects from the RollingDice program as follows: die1 5faceValue die2 2faceValue Each object maintains its own faceValue variable, and thus its own state 12
  • 13. Method Header • A method declaration begins with a method header char calc (int num1, int num2, String message) method name return type parameter list The parameter list specifies the type and name of each parameter The name of a parameter in the method declaration is called a formal parameter 13
  • 14. Method Body • The method header is followed by the 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 consistent with the return type sum and result are local data They are created each time the method is called, and are destroyed when it finishes executing 14
  • 15. The return Statement • The return type of a method indicates the type of value that the method sends back to the calling location • A method that does not return a value has a void return type • A return statement specifies the value that will be returned return expression; 15
  • 16. Parameters • When a method is called, the actual parameters in the invocation are copied into the formal parameters in the method header char calc (int num1, int num2, String message) { int sum = num1 + num2; char result = message.charAt (sum); return result; } ch = obj.calc (25, count, "Hello"); 16
  • 17. Local Data • As we’ve seen, local variables can be declared inside a method • The formal parameters of a method create automatic local variables when the method is invoked • When the method finishes, all local variables are destroyed (including the formal parameters) • Keep in mind that instance variables, declared at the class level, exists as long as the object exists 17
  • 18. Constructors • a constructor is a special method that is used to set up an object when it is initially created • A constructor has the same name as the class • The Die constructor is used to set the initial face value of each new die object to one 18
  • 19. Constructors • Note that a constructor has no return type specified in the method header, not even void • A common error is to put a return type on a constructor, which makes it a “regular” method that happens to have the same name as the class • The programmer does not have to define a constructor for a class 19
  • 20. Outline Anatomy of a Class Anatomy of a Method Encapsulation 20
  • 21. Method Declarations • Let’s now examine method declarations in more detail • A method declaration specifies the code that will be executed when the method is invoked (called) • When a method is invoked, the flow of control jumps to the method and executes its code • When complete, the flow returns to the place where the method was called and continues • The invocation may or may not return a value, depending on how the method is defined 21
  • 22. myMethod(); myMethodcompute Method Control Flow • If the called method is in the same class, only the method name is needed 22
  • 23. doIt helpMe helpMe();obj.doIt(); main Method Control Flow • The called method is often part of another class or object 23
  • 24. Outline Anatomy of a Class Anatomy of a Method Encapsulation 24
  • 25. Encapsulation • We can take one of two views of an object: – internal - the details of the variables and methods of the class that defines it – external - the services that an object provides and how the object interacts with the rest of the system • From the external view, an object is an encapsulated entity, providing a set of specific services 25
  • 26. Encapsulation • One object (called the client) may use another object for the services it provides • The client of an object may request its services (call its methods), but it should not have to be aware of how those services are accomplished • Any changes to the object's state (its variables) should be made by that object's methods 26
  • 27. Encapsulation • An encapsulated object can be thought of as a black box -- its inner workings are hidden from the client • The client invokes the interface methods of the object, which manages the instance data Methods Data Client 27
  • 28. Visibility Modifiers • In Java, we accomplish encapsulation through the appropriate use of visibility modifiers • A modifier is a Java reserved word that specifies particular characteristics of a method or data • We've used the final modifier to define constants • Java has three visibility modifiers: public, protected, and private • The protected modifier involves inheritance, which we will discuss later 28
  • 29. Visibility Modifiers • Members of a class that are declared with public visibility can be referenced anywhere • Members of a class that are declared with private visibility can be referenced only within that class • Members declared without a visibility modifier have default visibility and can be referenced by any class in the same package 29
  • 30. Visibility Modifiers • Public variables violate encapsulation because they allow the client to “reach in” and modify the values directly • Therefore instance variables should not be declared with public visibility • It is acceptable to give a constant public visibility, which allows it to be used outside of the class • Public constants do not violate encapsulation because, although the client can access it, its value cannot be changed 30
  • 31. Visibility Modifiers • Methods that provide the object's services are declared with public visibility so that they can be invoked by clients • Public methods are also called service methods • A method created simply to assist a service method is called a support method • Since a support method is not intended to be called by a client, it should not be declared with public visibility 31
  • 32. Visibility Modifiers public private Variables Methods Provide services to clients Support other methods in the class Enforce encapsulation Violate encapsulation 32
  • 33. Accessors and Mutators • Because instance data is private, a class usually provides services to access and modify data values • An accessor method returns the current value of a variable • A mutator method changes the value of a variable • The names of accessor and mutator methods take the form getX and setX, respectively, where X is the name of the value • They are sometimes called “getters” and “setters” 33
  • 34. Mutator Restrictions • The use of mutators gives the class designer the ability to restrict a client’s options to modify an object’s state • A mutator is often designed so that the values of variables can be set only within particular limits • For example, the setFaceValue mutator of the Die class should have restricted the value to the valid range (1 to MAX) 34
  • 35. Die.java public class Die { private final int MAX = 6; // maximum face value private int faceValue; // current value showing on the die /** * Constructor: Sets the initial face value. */ public Die( ) { faceValue = 1; } /** * Rolls the die and returns the result. */ public int roll() { faceValue = (int)(Math.random() * MAX) + 1; return faceValue; } 35
  • 36. Die.java /** * Face value mutator. */ public void setFaceValue (int value) { faceValue = value; } /** * Face value accessor. */ public int getFaceValue() { return faceValue; } /** * Returns a string representation of this die. */ public String toString() { String result = Integer.toString(faceValue); return result; } } 36
  • 37. RollingDice.java public class RollingDice { public static void main (String[] args) { Die die1, die2; int sum; die1 = new Die(); die2 = new Die(); die1.roll(); die2.roll(); System.out.println ("Die One: " + die1 + ", Die Two: " + die2); die1.roll(); die2.setFaceValue(4); System.out.println ("Die One: " + die1 + ", Die Two: " + die2); Create two objects of class Die Call method roll in class Die Call the mutator (set method) 37
  • 38. RollingDice.java sum = die1.getFaceValue() + die2.getFaceValue(); System.out.println ("Sum: " + sum); sum = die1.roll() + die2.roll(); System.out.println ("Die One: " + die1 + ", Die Two: " + die2); System.out.println ("New sum: " + sum); } } Call the accessor (get method) 4-38
  • 39. The Die Class • The Die class contains two data values – a constant MAX that represents the maximum face value – an integer faceValue that represents the current face value • The roll method uses the random method of the Math class to determine a new face value • There are also methods to explicitly set and retrieve the current face value at any time 39
  • 40. The toString Method • All classes that represent objects should define a toString method • The toString method returns a character string that represents the object in some way • It is called automatically when an object is concatenated to a string or when it is passed to the println method 40
  • 41. Bank Account Example • Let’s look at another example that demonstrates the implementation details of classes and methods • We’ll represent a bank account by a class named Account • It’s state can include the account number, the current balance, and the name of the owner • An account’s behaviors (or services) include deposits and withdrawals, and adding interest 41
  • 42. Driver Programs • A driver program drives the use of other, more interesting parts of a program • Driver programs are often used to test other parts of the software • The Transactions class contains a main method that drives the use of the Account class, exercising its services 42
  • 43. Account.java import java.text.NumberFormat; public class Account { private final double RATE = 0.035; // interest rate of 3.5% private long acctNumber; private double balance; private String name; public Account (String owner, long account, double initial) { name = owner; acctNumber = account; balance = initial; } public double deposit (double amount) { balance = balance + amount; return balance; } 43
  • 44. Account.java public double withdraw (double amount, double fee) { balance = balance - amount - fee; return balance; } public double addInterest () { balance += (balance * RATE); return balance; } public double getBalance () { return balance; } public String toString () { NumberFormat fmt = NumberFormat.getCurrencyInstance(); return (acctNumber + "t" + name + "t" + fmt.format(balance)); } } 44
  • 45. Transactions.java public class Transactions { public static void main (String[] args) { Account acct1 = new Account ("Ted Murphy", 72354, 102.56); Account acct2 = new Account ("Jane Smith", 69713, 40.00); Account acct3 = new Account ("Edward Demsey", 93757, 759.32); acct1.deposit (25.85); double smithBalance = acct2.deposit (500.00); System.out.println ("Smith balance after deposit: " + smithBalance); System.out.println ("Smith balance after withdrawal: " + acct2.withdraw (430.75, 1.50)); 45
  • 47. Bank Account Example acct1 72354acctNumber 102.56balance name “Ted Murphy” acct2 69713acctNumber 40.00balance name “Jane Smith” 47
  • 48. Bank Account Example • There are some improvements that can be made to the Account class • Formal getters and setters could have been defined for all data • The design of some methods could also be more robust, such as verifying that the amount parameter to the withdraw method is positive 48