âļī¸Abstract āĻā§
âļī¸Abstraction āĻā§
âļī¸Abstract āĻāĻŋāĻāĻžāĻŦā§ TypeScript-āĻ implement āĻāϰāĻž āĻšā§
âļī¸OOP-āϤ⧠āĻāĻŋāĻāĻžāĻŦā§ Abstraction principle achieve āĻāϰāĻž āϝāĻžā§
OOP (Object-Oriented Programming) āĻļā§āĻāĻžāϰ āĻĒāĻĨā§ āĻāĻŽāϰāĻž āĻĒā§āϰāĻžā§āĻ Abstract āĻāϰ Abstraction āĻāĻ āĻĻā§āĻāĻāĻž āĻļāĻŦā§āĻĻ āĻļā§āύāĻŋāĨ¤ āĻ āύā§āĻā§ āϧāϰ⧠āύā§ā§ āĻāĻāĻž āĻāĻāĻ āĻāĻŋāύāĻŋāϏ, āĻāĻŋāύā§āϤ⧠āύāĻž â āĻāϰāĻž āĻāϞāĻžāĻĻāĻž, āϤāĻŦā§ āĻāĻā§ āĻ āĻĒāϰā§āϰ āϏāĻžāĻĨā§ āĻāύāĻŋāώā§āĻ āĻāĻžāĻŦā§ āϏāĻŽā§āĻĒāϰā§āĻāĻŋāϤāĨ¤
đ§ What is Abstraction? (āĻ ā§āϝāĻžāĻŦāϏā§āĻā§āϰāĻžāĻāĻļāύ āĻā§?)
đˇAbstraction āĻšāϞ⧠OOP-āĻāϰ āĻāĻāĻāĻŋ core principle â āϝā§āĻāĻžāύ⧠āĻāĻŽāϰāĻž āĻāĻāĻŋāϞāϤāĻž (complexity) āϞā§āĻāĻŋā§ā§ āĻĢā§āϞāĻŋ āĻāĻŦāĻ āĻā§āĻŦāϞāĻŽāĻžāϤā§āϰ āĻĒā§āϰā§ā§āĻāύā§ā§ āĻŦāĻŋāώā§āĻā§āϞ⧠āĻāĻĒāϏā§āĻĨāĻžāĻĒāύ āĻāϰāĻŋāĨ¤
đ āϏāĻšāĻāĻāĻžāĻŦā§ āĻŦāϞāϞā§:
đļ âUser āĻā§ āĻĻāϰāĻāĻžāϰāĻŋ āĻ āĻāĻļ āĻĻā§āĻāĻžāĻ, āĻāĻŋāϤāϰā§āϰ āĻāĻāĻŋāϞāϤāĻž āϞā§āĻāĻŋā§ā§ āϰāĻžāĻā§āĨ¤â
āĻāĻĻāĻžāĻšāϰāĻŖ:
āĻāĻāĻāĻž āĻāĻžā§āĻŋ āĻāĻžāϞāĻžāϤ⧠āĻšāϞ⧠āĻļā§āϧ⧠brake, steering, accelerator āĻāĻžāύāϞā§āĻ āĻšā§āĨ¤ āĻāĻŋāϤāϰ⧠engine āĻāĻŋāĻāĻžāĻŦā§ āĻāϞā§, gearbox āĻāĻŋāĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰ⧠â āĻāϏāĻŦ āĻāĻžāύāĻžāϰ āĻĻāϰāĻāĻžāϰ āύā§āĻāĨ¤
āĻāĻ āĻāĻŋāύāĻŋāϏāĻāĻžāĻ āĻšāϞ⧠abstraction â hide the unnecessary, show only what matters.
đ What is Abstract? (āĻ ā§āϝāĻžāĻŦāϏā§āĻā§āϰāĻžāĻā§āĻ āĻā§?)
đˇabstract āĻšāϞ⧠āĻāĻāĻāĻž keyword, āϝā§āĻāĻž āĻāĻŽāϰāĻž TypeScript āĻŦāĻž āĻ āύā§āϝ OOP āĻāĻžāώāĻžā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŋ abstraction achieve āĻāϰāĻžāϰ āĻāύā§āϝāĨ¤
đˇabstract class: āĻāĻŽāύ āĻāĻāĻāĻž class āϝāĻž āϏāĻŽā§āĻĒā§āϰā§āĻŖ āύāĻž â āĻāĻāĻž just āĻāĻāĻāĻž blueprintāĨ¤
đˇabstract method: method āĻāĻā§, āĻāĻŋāύā§āϤ⧠āĻāϰ āĻā§āύ⧠body āύā§āĻāĨ¤ Subclass āĻāĻāĻžāĻā§ override āĻāϰ⧠implement āĻāϰāĻŦā§āĨ¤
đ ī¸ TypeScript āĻĻāĻŋā§ā§ Abstract Implement āĻāϰāĻž
āĻāĻŽāϰāĻž āĻāĻāĻāĻž example āĻĻā§āĻāĻŋ āϝā§āĻāĻžāύ⧠abstraction apply āĻāϰāĻž āĻšā§ā§āĻā§ abstract keyword āĻĻāĻŋā§ā§āĨ¤
// Abstract class: acts as a blueprint for all shapes
abstract class Shape {
constructor(private name: string) {}
public printDetails(): void {
console.log(`This is a ${this.name} Shape!`);
}
// Abstract method: must be implemented by subclasses
abstract getArea(): number;
}
// Concrete class: Circle extends Shape
class Circle extends Shape {
constructor(name: string, private radius: number) {
super(name);
}
getArea(): number {
return Math.PI * this.radius ** 2;
}
}
// Concrete class: Square extends Shape
class Square extends Shape {
constructor(name: string, private width: number) {
super(name);
}
getArea(): number {
return this.width ** 2;
}
}
// Test instances
const circle = new Circle("Circle", 5);
circle.printDetails(); // This is a Circle Shape!
console.log(circle.getArea()); // 78.53981633974483
const square = new Square("Square", 10);
square.printDetails(); // This is a Square Shape!
console.log(square.getArea()); // 100
đĄ āĻŦā§āϝāĻžāĻā§āϝāĻž:
Shape class āĻāĻŋ āĻšāϞ⧠abstract class â āĻāϤ⧠getArea() method declare āĻāϰāĻž āĻāĻā§, āĻāĻŋāύā§āϤ⧠define āĻāϰāĻž āύā§āĻāĨ¤
Circle, Square āĻšāϞ⧠subclass āϝā§āĻāĻž getArea() āĻāϰ āĻŦāĻžāϏā§āϤāĻŦ implementation āĻĻāĻŋā§ā§āĻā§āĨ¤
āĻāĻāĻāĻžāĻŦā§ āĻāĻŽāϰāĻž āĻŦāϞāĻāĻŋ âāĻĒā§āϰāϤā§āϝā§āĻ shape-āĻāϰ area āĻĨāĻžāĻāĻŦā§, āĻāĻŋāύā§āϤ⧠āĻāĻŋāĻāĻžāĻŦā§ āϏā§āĻāĻž āĻŦā§āϰ āĻšāĻŦā§ â āϏā§āĻāĻž shape āĻ āύā§āϝāĻžā§ā§ āĻāϞāĻžāĻĻāĻž āĻšāĻŦā§āĨ¤â â āĻāĻ āĻāĻŋāύāĻŋāϏāĻāĻžāĻ āĻšāϞ⧠abstractionāĨ¤
đ¯ How to Achieve Abstraction in OOP?
OOP-āϤ⧠abstraction achieve āĻāϰāĻžāϰ āĻāĻŋāĻā§ common āĻāĻĒāĻžā§:
â Abstract Class > Design define āĻāϰ⧠āĻĻā§ā§, implementation subclass āĻ
â Interface (in TypeScript) > Structure enforce āĻāϰā§, implementation āύāĻž
â Access Modifiers > private, protected keyword āĻĻāĻŋā§ā§ data hide āĻāϰāĻž āϝāĻžā§
â Encapsulation > Internal details āĻāĻāϏāĻžāĻĨā§ āϞā§āĻāĻžāύ⧠āϝāĻžā§ method/class āĻāϰ āĻŽāϧā§āϝā§
đ§Ē Summary:
đ¸ Abstraction is a core OOP principle that hides internal details and exposes only necessary parts.
đ¸ In TypeScript, abstraction is implemented using abstract classes and abstract methods.
đ¸ Subclasses must implement those abstract methods, which enforces a contract between base and child classes.
đ Final Thought:
āĻāĻĒāύāĻŋ āϝāĻāύ abstraction āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§āύ, āϤāĻāύ future-proof code āϞāĻŋāĻāĻŦā§āύ â āϝā§āĻāĻžāύ⧠structure āĻĨāĻžāĻāĻŦā§, āĻāĻŋāύā§āϤ⧠implementation āĻĨāĻžāĻāĻŦā§ flexibleāĨ¤
Abstract â Abstraction, āĻāĻŋāύā§āϤ⧠abstract class/method āĻĻāĻŋā§ā§āĻ abstraction achieve āĻāϰāĻž āĻšā§āĨ¤