SlideShare a Scribd company logo
Benefits of Encapsulation
Encapsulation
Software University
http://softuni.bg
SoftUni Team
Technical Trainers
1. What is Encapsulation?
 Keyword this
2. Access Modifiers
3. Validation
4. Mutable and Immutable Objects
5. Keyword final
Table of Contents
2
sli.do
#java-advanced
Have a Question?
Hiding Implementation
Encapsulation
Abstraction
Information Hiding
Data Encapsulation
 Process of wrapping code and data together
into a single unit
 Flexibility and extensibility of the code
 Reduces complexity
 Structural changes remain local
 Allows validation and data binding
Encapsulation
5
 Objects fields must be private
 Use getters and setters for data access
Encapsulation
6
class Person {
private int age;
}
class Person {
public int getAge()
public void setAge(int age)
}
Encapsulation – Example
 Fields should be private
 Accessors and Mutators should be public
7
Person
-name: string
-age: int
+Person(String name, int age)
+getName(): String
+setName(String name): void
+getAge(): int
+setAge(int age): void
- == private
+ == public
 this is a reference to the current object
 this can refer to current class instance
 this can invoke current class method
Keyword this (1)
8
public Person(String name) {
this.name = name;
}
public String fullName() {
return this.getFirstName() + " " + this.getLastName();
}
 this can invoke current class constructor
Keyword this (2)
9
public Person(String name) {
this.firstName = name;
}
public Person (String name, Integer age) {
this(name);
this.age = age;
}
Access Modifiers
Visibility of Class Members
 Object hides data from the outside world
 Classes and interfaces cannot be private
 Data can be accessed only within the
declared class itself
Private Access Modifier
11
class Person {
private String name;
Person (String name) {
this.name = name;
}
}
 Grants access to subclasses
 protected modifier cannot be applied to
classes and interfaces
 Prevents a nonrelated class from trying to use it
Protected Access Modifier
12
class Team {
protected String getName () {…}
protected void setName (String name) {…}
}
 Do not explicitly declare an access modifier
 Available to any other class in the same package
Default Access Modifier
13
class Team {
String getName() {…}
void setName(String name) {…}
}
Team real = new Team("Real");
real.setName("Real Madrid");
System.out.println(real.getName());
// Real Madrid
 Grants access to any class belonging to
the Java Universe
 Import a package if you need to use a class
 The main() method of an application
must be public
Public Access Modifier
14
public class Team {
public String getName() {…}
public void setName(String name) {…}
}
 Create a class Person
Problem: Sort by Name and Age
15
Person
-firstName: String
-lastName: String
-age: int
+getFirstName(): String
+getLastName(): String
+getAge(): int
+toString(): String
Check your solution here :https://judge.softuni.bg/Contests/1535/Encapsulation-Lab
Solution: Sort by Name and Age
16
public class Person {
private String firstName;
private String lastName; private int age;
// TODO: Implement Constructor
public String getFirstName() { /* TODO */ }
public String getLastName() { /* TODO */ }
public int getAge() { return age; }
@Override
public String toString() { /* TODO */ }
}
 Implement Salary
 Add:
 getter for salary
 increaseSalary by percentage
 Persons younger than 30 get
only half of the increase
Problem: Salary Increase
17
Person
-firstName: String
-lastName: String
-age: int
-salary: double
+getFirstName(): String
+getLastName() : String
+getAge() : int
+getSalary(): double
+setSalary(double): void
+increaseSalary(double): void
+toString(): String
 Expand Person from previous task
Solution: Salary Increase (1)
18
public class Person {
private double salary;
// Edit Constructor
public double getSalary() {
return this.salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
// Next Slide…
// TODO: Edit toString() method
}
Check your solution here :https://judge.softuni.bg/Contests/1535/Encapsulation-Lab
 Expand Person from previous task
Solution: Salary Increase (2)
19
public void increaseSalary(double percentage) {
if (this.getAge() < 30) {
this.setSalary(this.getSalary() +
(this.getSalary() * percentage / 200));
} else {
this.setSalary(this.getSalary() +
(this.getSalary() * percentage / 100));
}
}
Check your solution here :https://judge.softuni.bg/Contests/1535/Encapsulation-Lab
Validation
 Data validation happens in setters
 Printing with System.out couples your class
 Client can handle class exceptions
Validation (1)
21
private void setSalary(double salary) {
if (salary < 460) {
throw new IllegalArgumentException("Message");
}
this.salary = salary;
}
It is better to throw exceptions,
rather than printing to the Console
 Constructors use private setters with validation logic
 Guarantees valid state of object in its creation
 Guarantees valid state for public setters
Validation (2)
22
public Person(String firstName, String lastName,
int age, double salary) {
setFirstName(firstName);
setLastName(lastName);
setAge(age);
setSalary(salary);
}
Validation happens
inside the setter
 Expand Person with
validation for every field
 Names should be
at least 3 symbols
 Age cannot be zero or negative
 Salary cannot be less than 460
Problem: Validation Data
23
Person
-firstName : String
-lastName : String
-age : int
-salary : double
+Person()
+setFirstName(String fName)
+setLastName(String lName)
+setAge(int age)
+setSalary(double salary)
Check your solution here :https://judge.softuni.bg/Contests/1535/Encapsulation-Lab
Solution: Validation Data
24
// TODO: Add validation for firstName
// TODO: Add validation for lastName
public void setAge(int age) {
if (age < 1) {
throw new IllegalArgumentException(
"Age cannot be zero or negative integer");
}
this.age = age;
}
// TODO: Add validation for salary
Check your solution here :https://judge.softuni.bg/Contests/1535/Encapsulation-Lab
Mutable and Immutable Objects
25
Mutable vs Immutable Objects
 Mutable Objects
 The contents of that
instance can be altered
 Immutable Objects
 The contents of the
instance can't be altered
26
old String
old String
Point myPoint = new Point(0, 0);
myPoint.setLocation(1.0, 0.0);
System.out.println(myPoint);
java.awt.Point[1.0, 0.0]
String str = new String("old String");
System.out.println(str);
str.replaceAll("old", "new");
System.out.println(str);
 private mutable fields are not fully encapsulated
 In this case getter is like setter too
Mutable Fields
27
class Team {
private String name;
private List<Person> players;
public List<Person> getPlayers() {
return this.players;
}
}
Mutable Fields - Example
28
Team team = new Team();
Person person = new Person("David", "Adams", 22);
team.getPlayers().add(person);
System.out.println(team.getPlayers().size()); // 1
team.getPlayers().clear();
System.out.println(team.getPlayers().size()); // 0
 For securing our collection we can return
Collections.unmodifiableList()
Imutable Fields
29
class Team {
private List<Person> players;
public void addPlayer(Person person) {
this.players.add(person);
}
public List<Person> getPlayers() {
return Collections.unmodifiableList(players);
}
}
Returns a safe collections
Add new methods for
functionality over list
 Expand your project with class Team
 Team have two squads
first team and reserve team
 Read persons from console and
add them to team
 If they are younger than 40,
they go to first squad
 Print both squad sizes
Problem: First and Reserve Team
30
Team
-name: String
-firstTeam: List<Person>
-reserveTeam: List<Person>
+Team(String name)
+getName()
-setName(String name)
+getFirstTeam()
+getReserveTeam()
+addPlayer(Person person)
Check your solution here :https://judge.softuni.bg/Contests/1535/Encapsulation-Lab
Solution: First and Reserve Team
31
private List<Person> firstTeam;
private List<Person> reserveTeam;
public void addPlayer(Person person) {
if (person.getAge() < 40)
this.firstTeam.add(person);
else
this.reserveTeam.add(person);
}
public List<Person> getFirstTeam() {
return Collections.unmodifiableList(firstTeam);
}
// TODO: add getter for reserve team
Check your solution here :https://judge.softuni.bg/Contests/1535/Encapsulation-Lab
Keyword final
32
final
 final class can't be extended
 final method can't be overridden
Keyword final
33
public class Animal {}
public final class Mammal extends Animal {}
public class Cat extends Mammal {}
public final void move(Point point) {}
public class Mammal extends Animal {
@Override
public void move() {}
}
 final variable value can't be changed once it is set
Keyword final
34
private final String name;
private final List<Person> firstTeam;
public Team (String name) {
this.name = name;
this.firstTeam = new ArrayList<Person> ();
}
public void doSomething(Person person) {
this.name = "";
this.firstTeam = new ArrayList<>();
this.firstTeam.add(person);
}
Compile time error
 …
 …
 …
Summary
35
 Encapsulation:
 Hides implementation
 Reduces complexity
 Ensures that structural changes
remain local
 Mutable and Immutable objects
 Keyword final
 https://softuni.bg/modules/59/java-advanced
SoftUni Diamond Partners
SoftUni Organizational Partners
 Software University – High-Quality Education and
Employment Opportunities
 softuni.bg
 Software University Foundation
 http://softuni.foundation/
 Software University @ Facebook
 facebook.com/SoftwareUniversity
 Software University Forums
 forum.softuni.bg
Trainings @ Software University (SoftUni)
 This course (slides, examples, demos, videos, homework, etc.)
is licensed under the "Creative Commons Attribution-
NonCommercial-ShareAlike 4.0 International" license
License
40

More Related Content

What's hot (20)

PPTX
This keyword in java
Hitesh Kumar
 
PPTX
Method overloading
Lovely Professional University
 
PPS
Wrapper class
kamal kotecha
 
PPTX
Lecture_7-Encapsulation in Java.pptx
ShahinAhmed49
 
PPTX
Java abstract class & abstract methods
Shubham Dwivedi
 
PPTX
Constructor in java
Hitesh Kumar
 
PDF
Files in java
Muthukumaran Subramanian
 
PPTX
Classes, objects in JAVA
Abhilash Nair
 
PDF
Generics
Ravi_Kant_Sahu
 
PPTX
Super keyword in java
Hitesh Kumar
 
PDF
Inheritance In Java
Arnab Bhaumik
 
PPTX
Type casting in java
Farooq Baloch
 
PDF
Java IO
UTSAB NEUPANE
 
PPTX
Strings in Java
Abhilash Nair
 
PPT
Abstract class in java
Lovely Professional University
 
PPTX
Static Data Members and Member Functions
MOHIT AGARWAL
 
PPTX
Database Connectivity in PHP
Taha Malampatti
 
PDF
Java I/o streams
Hamid Ghorbani
 
PPTX
07. Virtual Functions
Haresh Jaiswal
 
This keyword in java
Hitesh Kumar
 
Method overloading
Lovely Professional University
 
Wrapper class
kamal kotecha
 
Lecture_7-Encapsulation in Java.pptx
ShahinAhmed49
 
Java abstract class & abstract methods
Shubham Dwivedi
 
Constructor in java
Hitesh Kumar
 
Classes, objects in JAVA
Abhilash Nair
 
Generics
Ravi_Kant_Sahu
 
Super keyword in java
Hitesh Kumar
 
Inheritance In Java
Arnab Bhaumik
 
Type casting in java
Farooq Baloch
 
Java IO
UTSAB NEUPANE
 
Strings in Java
Abhilash Nair
 
Abstract class in java
Lovely Professional University
 
Static Data Members and Member Functions
MOHIT AGARWAL
 
Database Connectivity in PHP
Taha Malampatti
 
Java I/o streams
Hamid Ghorbani
 
07. Virtual Functions
Haresh Jaiswal
 

Similar to 20.3 Java encapsulation (20)

PPTX
Encapsulation
Githushan Gengaparam
 
PPTX
Module 4 Effect of Reuse on using Encapsulation.pptx
ramlingams
 
PPTX
ENCAPSULATION module for IT or comsci.pptx
MattFlordeliza1
 
PPTX
Effective java-3rd-edition-ch4
Matt
 
PPT
encapsulation and abstraction
ALIZAPARVIN
 
PPTX
Pi j2.3 objects
mcollison
 
PPTX
2 Object-oriented programghgrtrdwwe.pptx
RamaDalabeh
 
PDF
Lecture09a computer applicationsie1_dratifshahzad
Atif Shahzad
 
PPTX
Object oriented concepts
Gousalya Ramachandran
 
PPTX
Programming Primer Encapsulation CS
sunmitraeducation
 
PPTX
Encapsulation
Ducat India
 
PPTX
Object Oriented Programming.pptx
ShuvrojitMajumder
 
PPTX
Programming Primer EncapsulationVB
sunmitraeducation
 
PPTX
Std 12 computer chapter 8 classes and object in java (part 2)
Nuzhat Memon
 
PPTX
Object Oriented Programming ! Batra Computer Centre
jatin batra
 
DOCX
Exercise1[5points]Create the following classe
mecklenburgstrelitzh
 
PPTX
Shuvrojit Majumder . 25900120006 Object Oriented Programming (PCC-CS 503) ...
ShuvrojitMajumder
 
PDF
02-advance-methods-on-class jdpgs code .pdf
sithumMarasighe
 
Encapsulation
Githushan Gengaparam
 
Module 4 Effect of Reuse on using Encapsulation.pptx
ramlingams
 
ENCAPSULATION module for IT or comsci.pptx
MattFlordeliza1
 
Effective java-3rd-edition-ch4
Matt
 
encapsulation and abstraction
ALIZAPARVIN
 
Pi j2.3 objects
mcollison
 
2 Object-oriented programghgrtrdwwe.pptx
RamaDalabeh
 
Lecture09a computer applicationsie1_dratifshahzad
Atif Shahzad
 
Object oriented concepts
Gousalya Ramachandran
 
Programming Primer Encapsulation CS
sunmitraeducation
 
Encapsulation
Ducat India
 
Object Oriented Programming.pptx
ShuvrojitMajumder
 
Programming Primer EncapsulationVB
sunmitraeducation
 
Std 12 computer chapter 8 classes and object in java (part 2)
Nuzhat Memon
 
Object Oriented Programming ! Batra Computer Centre
jatin batra
 
Exercise1[5points]Create the following classe
mecklenburgstrelitzh
 
Shuvrojit Majumder . 25900120006 Object Oriented Programming (PCC-CS 503) ...
ShuvrojitMajumder
 
02-advance-methods-on-class jdpgs code .pdf
sithumMarasighe
 
Ad

More from Intro C# Book (20)

PPTX
17. Java data structures trees representation and traversal
Intro C# Book
 
PPTX
Java Problem solving
Intro C# Book
 
PPTX
21. Java High Quality Programming Code
Intro C# Book
 
PPTX
20.5 Java polymorphism
Intro C# Book
 
PPTX
20.4 Java interfaces and abstraction
Intro C# Book
 
PPTX
20.2 Java inheritance
Intro C# Book
 
PPTX
20.1 Java working with abstraction
Intro C# Book
 
PPTX
19. Java data structures algorithms and complexity
Intro C# Book
 
PPTX
18. Java associative arrays
Intro C# Book
 
PPTX
16. Java stacks and queues
Intro C# Book
 
PPTX
14. Java defining classes
Intro C# Book
 
PPTX
13. Java text processing
Intro C# Book
 
PPTX
12. Java Exceptions and error handling
Intro C# Book
 
PPTX
11. Java Objects and classes
Intro C# Book
 
PPTX
09. Java Methods
Intro C# Book
 
PPTX
05. Java Loops Methods and Classes
Intro C# Book
 
PPTX
07. Java Array, Set and Maps
Intro C# Book
 
PPTX
03 and 04 .Operators, Expressions, working with the console and conditional s...
Intro C# Book
 
PPTX
02. Data Types and variables
Intro C# Book
 
PPTX
01. Introduction to programming with java
Intro C# Book
 
17. Java data structures trees representation and traversal
Intro C# Book
 
Java Problem solving
Intro C# Book
 
21. Java High Quality Programming Code
Intro C# Book
 
20.5 Java polymorphism
Intro C# Book
 
20.4 Java interfaces and abstraction
Intro C# Book
 
20.2 Java inheritance
Intro C# Book
 
20.1 Java working with abstraction
Intro C# Book
 
19. Java data structures algorithms and complexity
Intro C# Book
 
18. Java associative arrays
Intro C# Book
 
16. Java stacks and queues
Intro C# Book
 
14. Java defining classes
Intro C# Book
 
13. Java text processing
Intro C# Book
 
12. Java Exceptions and error handling
Intro C# Book
 
11. Java Objects and classes
Intro C# Book
 
09. Java Methods
Intro C# Book
 
05. Java Loops Methods and Classes
Intro C# Book
 
07. Java Array, Set and Maps
Intro C# Book
 
03 and 04 .Operators, Expressions, working with the console and conditional s...
Intro C# Book
 
02. Data Types and variables
Intro C# Book
 
01. Introduction to programming with java
Intro C# Book
 
Ad

Recently uploaded (20)

PPTX
unit 2_2 copy right fdrgfdgfai and sm.pptx
nepmithibai2024
 
PPTX
INTEGRATION OF ICT IN LEARNING AND INCORPORATIING TECHNOLOGY
kvshardwork1235
 
PPT
introduction to networking with basics coverage
RamananMuthukrishnan
 
PPTX
L1A Season 1 ENGLISH made by A hegy fixed
toszolder91
 
PPTX
L1A Season 1 Guide made by A hegy Eng Grammar fixed
toszolder91
 
PPTX
ONLINE BIRTH CERTIFICATE APPLICATION SYSYTEM PPT.pptx
ShyamasreeDutta
 
PPTX
Orchestrating things in Angular application
Peter Abraham
 
PDF
𝐁𝐔𝐊𝐓𝐈 𝐊𝐄𝐌𝐄𝐍𝐀𝐍𝐆𝐀𝐍 𝐊𝐈𝐏𝐄𝐑𝟒𝐃 𝐇𝐀𝐑𝐈 𝐈𝐍𝐈 𝟐𝟎𝟐𝟓
hokimamad0
 
PPT
Computer Securityyyyyyyy - Chapter 2.ppt
SolomonSB
 
PPTX
PE introd.pptxfrgfgfdgfdgfgrtretrt44t444
nepmithibai2024
 
PPTX
英国假毕业证诺森比亚大学成绩单GPA修改UNN学生卡网上可查学历成绩单
Taqyea
 
PPTX
本科硕士学历佛罗里达大学毕业证(UF毕业证书)24小时在线办理
Taqyea
 
PPTX
Presentation3gsgsgsgsdfgadgsfgfgsfgagsfgsfgzfdgsdgs.pptx
SUB03
 
PPT
Computer Securityyyyyyyy - Chapter 1.ppt
SolomonSB
 
PDF
DevOps Design for different deployment options
henrymails
 
PPTX
sajflsajfljsdfljslfjslfsdfas;fdsfksadfjlsdflkjslgfs;lfjlsajfl;sajfasfd.pptx
theknightme
 
PPTX
internet básico presentacion es una red global
70965857
 
PPT
Agilent Optoelectronic Solutions for Mobile Application
andreashenniger2
 
PPTX
PM200.pptxghjgfhjghjghjghjghjghjghjghjghjghj
breadpaan921
 
PPTX
Optimization_Techniques_ML_Presentation.pptx
farispalayi
 
unit 2_2 copy right fdrgfdgfai and sm.pptx
nepmithibai2024
 
INTEGRATION OF ICT IN LEARNING AND INCORPORATIING TECHNOLOGY
kvshardwork1235
 
introduction to networking with basics coverage
RamananMuthukrishnan
 
L1A Season 1 ENGLISH made by A hegy fixed
toszolder91
 
L1A Season 1 Guide made by A hegy Eng Grammar fixed
toszolder91
 
ONLINE BIRTH CERTIFICATE APPLICATION SYSYTEM PPT.pptx
ShyamasreeDutta
 
Orchestrating things in Angular application
Peter Abraham
 
𝐁𝐔𝐊𝐓𝐈 𝐊𝐄𝐌𝐄𝐍𝐀𝐍𝐆𝐀𝐍 𝐊𝐈𝐏𝐄𝐑𝟒𝐃 𝐇𝐀𝐑𝐈 𝐈𝐍𝐈 𝟐𝟎𝟐𝟓
hokimamad0
 
Computer Securityyyyyyyy - Chapter 2.ppt
SolomonSB
 
PE introd.pptxfrgfgfdgfdgfgrtretrt44t444
nepmithibai2024
 
英国假毕业证诺森比亚大学成绩单GPA修改UNN学生卡网上可查学历成绩单
Taqyea
 
本科硕士学历佛罗里达大学毕业证(UF毕业证书)24小时在线办理
Taqyea
 
Presentation3gsgsgsgsdfgadgsfgfgsfgagsfgsfgzfdgsdgs.pptx
SUB03
 
Computer Securityyyyyyyy - Chapter 1.ppt
SolomonSB
 
DevOps Design for different deployment options
henrymails
 
sajflsajfljsdfljslfjslfsdfas;fdsfksadfjlsdflkjslgfs;lfjlsajfl;sajfasfd.pptx
theknightme
 
internet básico presentacion es una red global
70965857
 
Agilent Optoelectronic Solutions for Mobile Application
andreashenniger2
 
PM200.pptxghjgfhjghjghjghjghjghjghjghjghjghj
breadpaan921
 
Optimization_Techniques_ML_Presentation.pptx
farispalayi
 

20.3 Java encapsulation

  • 1. Benefits of Encapsulation Encapsulation Software University http://softuni.bg SoftUni Team Technical Trainers
  • 2. 1. What is Encapsulation?  Keyword this 2. Access Modifiers 3. Validation 4. Mutable and Immutable Objects 5. Keyword final Table of Contents 2
  • 5.  Process of wrapping code and data together into a single unit  Flexibility and extensibility of the code  Reduces complexity  Structural changes remain local  Allows validation and data binding Encapsulation 5
  • 6.  Objects fields must be private  Use getters and setters for data access Encapsulation 6 class Person { private int age; } class Person { public int getAge() public void setAge(int age) }
  • 7. Encapsulation – Example  Fields should be private  Accessors and Mutators should be public 7 Person -name: string -age: int +Person(String name, int age) +getName(): String +setName(String name): void +getAge(): int +setAge(int age): void - == private + == public
  • 8.  this is a reference to the current object  this can refer to current class instance  this can invoke current class method Keyword this (1) 8 public Person(String name) { this.name = name; } public String fullName() { return this.getFirstName() + " " + this.getLastName(); }
  • 9.  this can invoke current class constructor Keyword this (2) 9 public Person(String name) { this.firstName = name; } public Person (String name, Integer age) { this(name); this.age = age; }
  • 11.  Object hides data from the outside world  Classes and interfaces cannot be private  Data can be accessed only within the declared class itself Private Access Modifier 11 class Person { private String name; Person (String name) { this.name = name; } }
  • 12.  Grants access to subclasses  protected modifier cannot be applied to classes and interfaces  Prevents a nonrelated class from trying to use it Protected Access Modifier 12 class Team { protected String getName () {…} protected void setName (String name) {…} }
  • 13.  Do not explicitly declare an access modifier  Available to any other class in the same package Default Access Modifier 13 class Team { String getName() {…} void setName(String name) {…} } Team real = new Team("Real"); real.setName("Real Madrid"); System.out.println(real.getName()); // Real Madrid
  • 14.  Grants access to any class belonging to the Java Universe  Import a package if you need to use a class  The main() method of an application must be public Public Access Modifier 14 public class Team { public String getName() {…} public void setName(String name) {…} }
  • 15.  Create a class Person Problem: Sort by Name and Age 15 Person -firstName: String -lastName: String -age: int +getFirstName(): String +getLastName(): String +getAge(): int +toString(): String Check your solution here :https://judge.softuni.bg/Contests/1535/Encapsulation-Lab
  • 16. Solution: Sort by Name and Age 16 public class Person { private String firstName; private String lastName; private int age; // TODO: Implement Constructor public String getFirstName() { /* TODO */ } public String getLastName() { /* TODO */ } public int getAge() { return age; } @Override public String toString() { /* TODO */ } }
  • 17.  Implement Salary  Add:  getter for salary  increaseSalary by percentage  Persons younger than 30 get only half of the increase Problem: Salary Increase 17 Person -firstName: String -lastName: String -age: int -salary: double +getFirstName(): String +getLastName() : String +getAge() : int +getSalary(): double +setSalary(double): void +increaseSalary(double): void +toString(): String
  • 18.  Expand Person from previous task Solution: Salary Increase (1) 18 public class Person { private double salary; // Edit Constructor public double getSalary() { return this.salary; } public void setSalary(double salary) { this.salary = salary; } // Next Slide… // TODO: Edit toString() method } Check your solution here :https://judge.softuni.bg/Contests/1535/Encapsulation-Lab
  • 19.  Expand Person from previous task Solution: Salary Increase (2) 19 public void increaseSalary(double percentage) { if (this.getAge() < 30) { this.setSalary(this.getSalary() + (this.getSalary() * percentage / 200)); } else { this.setSalary(this.getSalary() + (this.getSalary() * percentage / 100)); } } Check your solution here :https://judge.softuni.bg/Contests/1535/Encapsulation-Lab
  • 21.  Data validation happens in setters  Printing with System.out couples your class  Client can handle class exceptions Validation (1) 21 private void setSalary(double salary) { if (salary < 460) { throw new IllegalArgumentException("Message"); } this.salary = salary; } It is better to throw exceptions, rather than printing to the Console
  • 22.  Constructors use private setters with validation logic  Guarantees valid state of object in its creation  Guarantees valid state for public setters Validation (2) 22 public Person(String firstName, String lastName, int age, double salary) { setFirstName(firstName); setLastName(lastName); setAge(age); setSalary(salary); } Validation happens inside the setter
  • 23.  Expand Person with validation for every field  Names should be at least 3 symbols  Age cannot be zero or negative  Salary cannot be less than 460 Problem: Validation Data 23 Person -firstName : String -lastName : String -age : int -salary : double +Person() +setFirstName(String fName) +setLastName(String lName) +setAge(int age) +setSalary(double salary) Check your solution here :https://judge.softuni.bg/Contests/1535/Encapsulation-Lab
  • 24. Solution: Validation Data 24 // TODO: Add validation for firstName // TODO: Add validation for lastName public void setAge(int age) { if (age < 1) { throw new IllegalArgumentException( "Age cannot be zero or negative integer"); } this.age = age; } // TODO: Add validation for salary Check your solution here :https://judge.softuni.bg/Contests/1535/Encapsulation-Lab
  • 25. Mutable and Immutable Objects 25
  • 26. Mutable vs Immutable Objects  Mutable Objects  The contents of that instance can be altered  Immutable Objects  The contents of the instance can't be altered 26 old String old String Point myPoint = new Point(0, 0); myPoint.setLocation(1.0, 0.0); System.out.println(myPoint); java.awt.Point[1.0, 0.0] String str = new String("old String"); System.out.println(str); str.replaceAll("old", "new"); System.out.println(str);
  • 27.  private mutable fields are not fully encapsulated  In this case getter is like setter too Mutable Fields 27 class Team { private String name; private List<Person> players; public List<Person> getPlayers() { return this.players; } }
  • 28. Mutable Fields - Example 28 Team team = new Team(); Person person = new Person("David", "Adams", 22); team.getPlayers().add(person); System.out.println(team.getPlayers().size()); // 1 team.getPlayers().clear(); System.out.println(team.getPlayers().size()); // 0
  • 29.  For securing our collection we can return Collections.unmodifiableList() Imutable Fields 29 class Team { private List<Person> players; public void addPlayer(Person person) { this.players.add(person); } public List<Person> getPlayers() { return Collections.unmodifiableList(players); } } Returns a safe collections Add new methods for functionality over list
  • 30.  Expand your project with class Team  Team have two squads first team and reserve team  Read persons from console and add them to team  If they are younger than 40, they go to first squad  Print both squad sizes Problem: First and Reserve Team 30 Team -name: String -firstTeam: List<Person> -reserveTeam: List<Person> +Team(String name) +getName() -setName(String name) +getFirstTeam() +getReserveTeam() +addPlayer(Person person) Check your solution here :https://judge.softuni.bg/Contests/1535/Encapsulation-Lab
  • 31. Solution: First and Reserve Team 31 private List<Person> firstTeam; private List<Person> reserveTeam; public void addPlayer(Person person) { if (person.getAge() < 40) this.firstTeam.add(person); else this.reserveTeam.add(person); } public List<Person> getFirstTeam() { return Collections.unmodifiableList(firstTeam); } // TODO: add getter for reserve team Check your solution here :https://judge.softuni.bg/Contests/1535/Encapsulation-Lab
  • 33.  final class can't be extended  final method can't be overridden Keyword final 33 public class Animal {} public final class Mammal extends Animal {} public class Cat extends Mammal {} public final void move(Point point) {} public class Mammal extends Animal { @Override public void move() {} }
  • 34.  final variable value can't be changed once it is set Keyword final 34 private final String name; private final List<Person> firstTeam; public Team (String name) { this.name = name; this.firstTeam = new ArrayList<Person> (); } public void doSomething(Person person) { this.name = ""; this.firstTeam = new ArrayList<>(); this.firstTeam.add(person); } Compile time error
  • 35.  …  …  … Summary 35  Encapsulation:  Hides implementation  Reduces complexity  Ensures that structural changes remain local  Mutable and Immutable objects  Keyword final
  • 39.  Software University – High-Quality Education and Employment Opportunities  softuni.bg  Software University Foundation  http://softuni.foundation/  Software University @ Facebook  facebook.com/SoftwareUniversity  Software University Forums  forum.softuni.bg Trainings @ Software University (SoftUni)
  • 40.  This course (slides, examples, demos, videos, homework, etc.) is licensed under the "Creative Commons Attribution- NonCommercial-ShareAlike 4.0 International" license License 40

Editor's Notes

  • #6: Encapsulation hides the implementation details Class announces only a few operations (methods) available for its clients – its public interface All data members (fields) of a class should be hidden Accessed via properties (read-only and read-write) No interface members should be hidden Encapsulation == hide (encapsulate) data behind constructors and properties
  • #7: Encapsulation hides the implementation details Class announces only a few operations (methods) available for its clients – its public interface All data members (fields) of a class should be hidden Accessed via properties (read-only and read-write) No interface members should be hidden Encapsulation == hide (encapsulate) data behind constructors and properties
  • #8: Fields are private Constructors and accessors are defined (getters and setters)
  • #9: Constructors are declared public Constructors perform checks to keep the object state valid Interface methods are always public Not explicitly declared with public Non-interface methods are declared private / protected
  • #10: Constructors are declared public Constructors perform checks to keep the object state valid Interface methods are always public Not explicitly declared with public Non-interface methods are declared private / protected
  • #12: Access Level "public" When we use the modifier public in front of some element, we are telling the compiler, that this element can be accessed from every class, no matter from the current project (assembly), from the current package. The access level public defines the miss of restrictions regarding the visibility. This access level is the least restricted access level in Java. Access Level "private" The access level private is the one, which defines the most restrictive level of visibility of the class and its elements. The modifier private is used to indicate, that the element, to which is issued, cannot be accessed from any other class (except the class, in which it is defined), even if this class exists in the same package. Access Level “protected" The access level private is the one, which defines the most restrictive level of visibility of the class and its elements. The modifier private is used to indicate, that the element, to which is issued, cannot be accessed from any other class (except the class, in which it is defined), even if this class exists in the same namespace. Access Level “default" This is the default access level, i.e. it is used when there is no access level modifier in front of the respective element of a class. Members can be accessed only from the same package.
  • #13: Access Level "public" When we use the modifier public in front of some element, we are telling the compiler, that this element can be accessed from every class, no matter from the current project (assembly), from the current package. The access level public defines the miss of restrictions regarding the visibility. This access level is the least restricted access level in Java. Access Level "private" The access level private is the one, which defines the most restrictive level of visibility of the class and its elements. The modifier private is used to indicate, that the element, to which is issued, cannot be accessed from any other class (except the class, in which it is defined), even if this class exists in the same package. Access Level “protected" The access level private is the one, which defines the most restrictive level of visibility of the class and its elements. The modifier private is used to indicate, that the element, to which is issued, cannot be accessed from any other class (except the class, in which it is defined), even if this class exists in the same namespace. Access Level “default" This is the default access level, i.e. it is used when there is no access level modifier in front of the respective element of a class. Members can be accessed only from the same package.
  • #14: Access Level "public" When we use the modifier public in front of some element, we are telling the compiler, that this element can be accessed from every class, no matter from the current project (assembly), from the current package. The access level public defines the miss of restrictions regarding the visibility. This access level is the least restricted access level in Java. Access Level "private" The access level private is the one, which defines the most restrictive level of visibility of the class and its elements. The modifier private is used to indicate, that the element, to which is issued, cannot be accessed from any other class (except the class, in which it is defined), even if this class exists in the same package. Access Level “protected" The access level private is the one, which defines the most restrictive level of visibility of the class and its elements. The modifier private is used to indicate, that the element, to which is issued, cannot be accessed from any other class (except the class, in which it is defined), even if this class exists in the same namespace. Access Level “default" This is the default access level, i.e. it is used when there is no access level modifier in front of the respective element of a class. Members can be accessed only from the same package.
  • #15: Access Level "public" When we use the modifier public in front of some element, we are telling the compiler, that this element can be accessed from every class, no matter from the current project (assembly), from the current package. The access level public defines the miss of restrictions regarding the visibility. This access level is the least restricted access level in Java. Access Level "private" The access level private is the one, which defines the most restrictive level of visibility of the class and its elements. The modifier private is used to indicate, that the element, to which is issued, cannot be accessed from any other class (except the class, in which it is defined), even if this class exists in the same package. Access Level “protected" The access level private is the one, which defines the most restrictive level of visibility of the class and its elements. The modifier private is used to indicate, that the element, to which is issued, cannot be accessed from any other class (except the class, in which it is defined), even if this class exists in the same namespace. Access Level “default" This is the default access level, i.e. it is used when there is no access level modifier in front of the respective element of a class. Members can be accessed only from the same package.
  • #22: Constructors are declared public Constructors perform checks to keep the object state valid Interface methods are always public Not explicitly declared with public Non-interface methods are declared private / protected
  • #23: Constructors are declared public Constructors perform checks to keep the object state valid Interface methods are always public Not explicitly declared with public Non-interface methods are declared private / protected
  • #28: Fields are always declared private Accessed through getters and setters in read-only or read-write mode Setters perform checks to fight invalid data
  • #30: Fields are always declared private Accessed through getters and setters in read-only or read-write mode Setters perform checks to fight invalid data
  • #34: Fields are always declared private Accessed through getters and setters in read-only or read-write mode Setters perform checks to fight invalid data
  • #35: Constructors are declared public Constructors perform checks to keep the object state valid Interface methods are always public Not explicitly declared with public Non-interface methods are declared private / protected