Apstraktne metode u OOP u TypeScript

Dešava se da klase-naslednici moraju imati zajednički metod, međutim, implementacija tog metoda zavisi od konkretnog naslednika. U tom slučaju ovaj metod se može deklarisati u apstraktnoj klasi roditelja, bez pisanja njegove implementacije. I tada će naslednici biti obavezni da implementiraju ove metode. Takvi metodi se nazivaju apstraktnim metodama i takođe se deklarišu uz pomoć ključne reči abstract.

Uzmimo za primer našu apstraktnu klasu User. Neka naslednici ove klase obavezno moraju imati metod show, koji prikazuje podatke objekta.

Implementacija ovog metoda, međutim, će zavisiti od naslednika. Hajde da u klasi User deklarišemo ovaj metod kao apstraktni:

typescriptabstract class User {
  public name: string;
  
  constructor(name: string) {
    this.name = name;
  }
  
  public abstract show(): string;
}

Implementirajmo ovaj metod u klasi-nasledniku Student:

typescriptclass Student extends User {
  public course: number;

  constructor(name: string, course: number) {
    super(name);
    this.course = course;
  }
  
  show() {
    return this.name + ' ' + this.course;
  }
}

Implementirajmo ovaj metod u klasi-nasledniku Employee:

typescriptclass Employee extends User {
  public salary: number;

  constructor(name: string, salary: number) {
    super(name);
    this.salary = salary;
  }
  
  show() {
    return this.name + ' ' + this.salary;
  }
}
Задание 1

U apstraktnoj klasi Figure napravite apstraktne metode za dobijanje površine i obima.

Задание 2

U klasama-naslednicima Square i Rectangle napišite implementaciju ovih metoda.