03 - Encapsulation
03 - Encapsulation
Table of Contents
• What is Encapsulation?
• Keyword this
• Access Modifiers
• State Validation
• Mutable and Immutable Objects
2
Encapsulation
Hiding Implementation
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
4
Encapsulation – Example
Fields should be private
Person
-name: string
- == private
-age: int
+Person(string name, int age)
+Name: string + == public
+Age: int
6
Visibility of Class Members
Access Modifiers
Private Access Modifier
It's the main way to perform encapsulation and hide
data from the outside world
private string name;
Person (string name) {
this.name = name;
}
10
Problem: Sort Persons by Name and Age
Create a class Person
Person
+FirstName():string
+Age():int
+toString():string
11
Solution: Sort Persons by Name and Age
13
Solution: Sort Persons by Name and Age (3)
Console.WriteLine(string.Join(
Environment.NewLine, sorted));
14
Problem: Salary Increase
Expand Person with salary
Add getter for salary Person
Add a method, which updates +FirstName: string
15
Solution: Salary Increase
16
Validation
Validation
Setters are a good place for simple data validation
public decimal Salary {
get { return this.salary }
set {
if (value < 460) Throw exceptions
throw new ArgumentException("...");
this.salary = value; }
}
21
Mutable vs Immutable Objects
Mutable Objects Immutable Objects
Mutable == Immutable ==
changeable unchangeable
Use the same memory Create new memory
location every time they're
StringBuilder modified
string
22
Mutable Fields
Private mutable fields are still not encapsulated
class Team
{
private List<Person> players;
public List<Person> Players {
get { return this.players; } }
}
25
Solution: Team
27
Summary
Encapsulation:
…
…Hides implementation
…Reduces complexity
Ensures that structural changes
remain local
Mutable and Immutable objects
28
Exercises
• Time to practices