Encapsulation āĻāĻŋ?
Encapsulation āĻšāϞ⧠Object-Oriented Programming (OOP)-āĻāϰ āĻāĻāĻāĻŋ āĻŽā§āϞāĻŋāĻ āĻāύāϏā§āĻĒā§āĻ āϝā§āĻāĻžāύ⧠āĻĄā§āĻāĻž (properties) āĻāĻŦāĻ āϏā§āĻ āĻĄā§āĻāĻž āύāĻŋā§ā§ āĻāĻžāĻ āĻāϰāĻžāϰ āĻŽā§āĻĨāĻĄāĻā§āϞ⧠(functions) āĻāĻāϏāĻžāĻĨā§ āĻāĻāĻāĻŋ āĻāĻāύāĻŋāĻā§ (āĻā§āϞāĻžāϏā§) āĻŦāύā§āĻĻā§ āĻāϰ⧠āϰāĻžāĻāĻž āĻšā§āĨ¤ āĻāϰ āĻŽā§āϞ āĻāĻĻā§āĻĻā§āĻļā§āϝ āĻšāϞ⧠āĻĄā§āĻāĻžāĻā§ āĻŦāĻžāĻāϰā§āϰ āĻ āĻŦāĻžāĻā§āĻāĻŋāϤ āĻāĻā§āϏā§āϏ āĻĨā§āĻā§ āϏā§āϰāĻā§āώāĻŋāϤ āϰāĻžāĻāĻž āĻāĻŦāĻ āĻāύā§āĻā§āϰā§āϞā§āĻĄ āĻāĻĒāĻžā§ā§ āĻĄā§āĻāĻž āĻŽāĻĄāĻŋāĻĢāĻžāĻ āĻāϰāĻžāĨ¤
āĻāĻā§ āĻŦāĻžāĻāϞāĻžā§ âāĻĄā§āĻāĻž āĻā§āĻĒāύā§āĻāϰāĻŖâ āĻŦāĻž **âāĻā§āϝāĻžāĻĒāϏā§āϞāĻžāĻāĻā§āĻļāύâ**āĻ āĻŦāϞāĻž āϝāĻžā§āĨ¤ āϝā§āĻŽāύ, āĻāĻāĻāĻŋ āĻā§āϝāĻžāĻĒāϏā§āϞā§āϰ āĻāĻŋāϤāϰ⧠āĻāώā§āϧ āĻĨāĻžāĻā§, āĻāĻŋāύā§āϤ⧠āĻŦāĻžāĻāϰ⧠āĻĨā§āĻā§ āϏāϰāĻžāϏāϰāĻŋ āϏā§āĻāĻž āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻž āϝāĻžā§ āύāĻž â āĻāĻāĻāĻāĻžāĻŦā§ Encapsulation-āĻ āĻĄā§āĻāĻžāĻā§ āĻĒā§āϰāĻžāĻāĻā§āĻ āϰāĻžāĻāĻž āĻšā§ āĻāĻŦāĻ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻŽā§āĻĨāĻĄā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāĻā§āϏā§āϏ āĻĻā§āĻā§āĻž āĻšā§āĨ¤
TypeScript-āĻ Encapsulation āĻāĻŋāĻāĻžāĻŦā§ āĻ āϰā§āĻāύ āĻāϰāĻŦ?
TypeScript-āĻ Encapsulation āĻ āϰā§āĻāύ āĻāϰāϤ⧠āĻāĻŽāϰāĻž āύāĻŋāĻā§āϰ āĻā§āĻāύāĻŋāĻāĻā§āϞ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŋ:
Access Modifiers (āĻĒā§āϰāĻŦā§āĻļ āύāĻŋā§āύā§āϤā§āϰāĻ)
Getters & Setters (āĻĄā§āĻāĻž āĻāĻā§āϏā§āϏā§āϰ āύāĻŋā§āύā§āϤā§āϰāĻŋāϤ āĻĒāĻĻā§āϧāϤāĻŋ)
1. Access Modifiers: public, private, protected
TypeScript-āĻ āϤāĻŋāύ āϧāϰāĻŖā§āϰ Access Modifier āĻāĻā§:
public â āĻĄāĻŋāĻĢāϞā§āĻāĻāĻžāĻŦā§ āϏāĻŦ āĻāĻžā§āĻāĻž āĻĨā§āĻā§ āĻāĻā§āϏā§āϏ āĻāϰāĻž āϝāĻžā§
private â āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻā§āϞāĻžāϏā§āϰ āĻāĻŋāϤāϰ⧠āĻāĻā§āϏā§āϏ āĻāϰāĻž āϝāĻžā§
protected â āĻā§āϞāĻžāϏ āĻāĻŦāĻ āĻāϰ āĻāĻžāĻāϞā§āĻĄ āĻā§āϞāĻžāϏ⧠āĻāĻā§āϏā§āϏ āĻāϰāĻž āϝāĻžā§
āĻāĻĻāĻžāĻšāϰāĻŖ:
class BankAccount {
public readonly accountId: number; // āĻļā§āϧ⧠āϰāĻŋāĻĄ āĻāϰāĻž āϝāĻžāĻŦā§, āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āύā§
public owner: string; // āϏāĻŦ āĻāĻžā§āĻāĻž āĻĨā§āĻā§ āĻāĻā§āϏā§āϏ āĻāϰāĻž āϝāĻžāĻŦā§
private _balance: number; // āĻļā§āϧ⧠āĻāĻ āĻā§āϞāĻžāϏā§āϰ āĻāĻŋāϤāϰ⧠āĻāĻā§āϏā§āϏ āĻāϰāĻž āϝāĻžāĻŦā§
protected interestRate: number; // āĻāĻ āĻā§āϞāĻžāϏ āĻ āĻāϰ āϏāĻžāĻŦāĻā§āϞāĻžāϏ⧠āĻāĻā§āϏā§āϏ āĻāϰāĻž āϝāĻžāĻŦā§
constructor(id: number, owner: string, balance: number) {
this.accountId = id;
this.owner = owner;
this._balance = balance;
this.interestRate = 0.05;
}
deposit(amount: number): void {
if (amount <= 0) throw new Error("āĻāĻžāĻāĻž āĻ
āĻŦāĻļā§āϝāĻ āĻĒāĻāĻŋāĻāĻŋāĻ āĻšāϤ⧠āĻšāĻŦā§!");
this._balance += amount;
}
getBalance(): number {
return this._balance;
}
}
const myAccount = new BankAccount(123, "āϰāĻžāĻšā§āϞ", 5000);
myAccount.deposit(1000);
console.log(myAccount.getBalance()); // 6000
// myAccount._balance = 100000; // Error! āĻāĻžāϰāĻŖ _balance āĻĒā§āϰāĻžāĻāĻā§āĻ
2. Getters & Setters: āĻĄā§āĻāĻž āĻāύā§āĻā§āϰā§āϞ āĻāϰāĻžāϰ āϏā§āĻŽāĻžāϰā§āĻ āĻāĻĒāĻžā§
āϝāĻĻāĻŋ āĻā§āύ⧠āĻĒā§āϰāĻžāĻāĻā§āĻ āĻĒā§āϰā§āĻĒāĻžāϰā§āĻāĻŋāĻā§ āĻŦāĻžāĻāϰ⧠āĻĨā§āĻā§ āϰāĻŋāĻĄ āĻŦāĻž āĻŽāĻĄāĻŋāĻĢāĻžāĻ āĻāϰāϤ⧠āĻāĻžāĻ, āϤāĻžāĻšāϞ⧠getter (āĻĄā§āĻāĻž āĻĒā§āĻžāϰ āĻŽā§āĻĨāĻĄ) āĻāĻŦāĻ setter (āĻĄā§āĻāĻž āϏā§āĻ āĻāϰāĻžāϰ āĻŽā§āĻĨāĻĄ) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§āĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖ:
class Person {
private _age: number;
constructor(age: number) {
this._age = age;
}
// Getter
get age(): number {
return this._age;
}
// Setter (āĻā§āϝāĻžāϞāĻŋāĻĄā§āĻļāύ āϏāĻš)
set age(newAge: number) {
if (newAge < 0 || newAge > 120) {
throw new Error("āĻŦā§āϏ ā§Ļ āĻĨā§āĻ⧠⧧⧍ā§Ļ āĻāϰ āĻŽāϧā§āϝ⧠āĻšāϤ⧠āĻšāĻŦā§!");
}
this._age = newAge;
}
}
const person = new Person(25);
console.log(person.age); // 25 (getter āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§)
person.age = 30; // setter āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§
// person.age = 150; // Error! āĻāĻžāϰāĻŖ āĻŦā§āϏ ⧧⧍ā§Ļ āĻāϰ āĻŦā§āĻļāĻŋ āĻšāϤ⧠āĻĒāĻžāϰāĻŦā§ āύāĻž
Encapsulation-āĻāϰ āϏā§āĻŦāĻŋāϧāĻž
â āĻĄā§āĻāĻž āϏā§āϰāĻā§āώāĻž: āĻĒā§āϰāĻžāĻāĻā§āĻ āĻĄā§āĻāĻž āĻŦāĻžāĻāϰ⧠āĻĨā§āĻā§ āϏāϰāĻžāϏāϰāĻŋ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻž āϝāĻžā§ āύāĻžāĨ¤
â āĻā§āϝāĻžāϞāĻŋāĻĄā§āĻļāύ: āϏā§āĻāĻžāϰ āĻŽā§āĻĨāĻĄā§ āĻļāϰā§āϤ āϝā§āĻā§āϤ āĻāϰ⧠āĻĄā§āĻāĻž āϝāĻžāĻāĻžāĻ āĻāϰāĻž āϝāĻžā§āĨ¤
â āĻŽā§āĻāύā§āĻā§āύā§āϝāĻžāύā§āϏ āϏāĻšāĻ: āĻāύā§āĻāĻžāϰā§āύāĻžāϞ āϞāĻāĻŋāĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāϞ⧠āĻŦāĻžāĻāϰā§āϰ āĻā§āĻĄā§ āĻĒā§āϰāĻāĻžāĻŦ āĻĒā§ā§ āύāĻžāĨ¤
â āĻā§āĻĄā§āϰ āϰāĻŋāĻāĻāĻā§āĻŦāĻŋāϞāĻŋāĻāĻŋ: āĻā§āϞāĻžāϏāĻā§āϞā§āĻā§ āϏāĻšāĻā§ āĻ āύā§āϝ āĻĒā§āϰā§āĻā§āĻā§āĻā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝāĻžā§āĨ¤
āϏāĻžāϰāϏāĻāĻā§āώā§āĻĒ
TypeScript-āĻ Encapsulation āĻšāϞ⧠āĻĄā§āĻāĻž āĻ āĻŽā§āĻĨāĻĄāĻā§ āĻāĻāĻāĻŋ āĻā§āϞāĻžāϏā§āϰ āĻŽāϧā§āϝ⧠āϞā§āĻāĻŋā§ā§ āϰāĻžāĻāĻžāϰ āĻĒāĻĻā§āϧāϤāĻŋ, āϝāĻžāϤ⧠āĻŦāĻžāĻāϰ⧠āĻĨā§āĻā§ āϏāϰāĻžāϏāϰāĻŋ āĻāĻā§āϏā§āϏ āύāĻž āĻāϰ⧠āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āύāĻŋā§āĻŽā§ āĻĄā§āĻāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝāĻžā§āĨ¤ āĻāĻāĻŋ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύā§āϰ āϏāĻŋāĻāĻŋāĻāϰāĻŋāĻāĻŋ āĻ āϰāĻŋāϞāĻžā§āĻžāĻŦāĻŋāϞāĻŋāĻāĻŋ āĻŦāĻžā§āĻžā§āĨ¤
class SecureData {
private _secret: string = "āĻā§āĻĒāύ āϤāĻĨā§āϝ";
get secret(): string {
return this._secret.replace("āĻā§āĻĒāύ", "****");
}
}
const data = new SecureData();
console.log(data.secret); // "**** āϤāĻĨā§āϝ" (āĻāϏāϞ āĻĄā§āĻāĻž āϏā§āϰāĻā§āώāĻŋāϤ!)```