Kali ini aku akan membahas OOP di TypeScript. OOP adalah singkatan dari Object Oriented Programming atau pemrograman yang berorientasi terhadap object. Sebenarnya tidak semua bahasa pemrograman mendukung OOP, untungnya TypeScript mendukung OOP.
Ciri utama dari OOP adalah penggunaan Class dan Object. Class bisa dibilang sebai blueprint dari object, sedangkan Object adalah implementasi dari Class. Coba kita analogikan kelas sebagai Binatang. Secara umum kita bisa membedakan binatang dengan beberapa kategori misalnya, jumlah kaki, jenis makanan, dan habit. Dari binatang kita bisa membuat Object kuncing yang jumlah kakinya 4, jenis makanannya daging dan habitatnya darat. Nah, kita sebut kategori sebagai attribute kelas.
Misalkan kita menambah attribute posisi pada binatang dimana posisinya menggunakan koordinat x,y. Kita bisa membuat sebuah fungsi misalnya saja pindah ke kanan adalah fungsi memindahkan koordinat dari koordinat awal x,y menjadi kordinat x,y+1. Fungsi-fungsi yang ada di dalam kelas ini kita sebuh dengan method.
Sekarang mari kita coba untuk mengimplementasikan analogi di atas menjadi class dan object pada oop di typescript.
describe("OOP in TypeScript", function () {
class Binatang {
jumlahKaki?: number;
jenisMakanan?: string;
habitat?: string;
posisiX:number = 0;
posisiY:number = 0;
jalanKeKanan(langkah: number) {
this.posisiY += langkah;
}
}
it('should support class and object', () => {
const kucing: Binatang = new Binatang();
kucing.jumlahKaki = 4;
kucing.jenisMakanan = "Daging";
kucing.habitat = "Darat";
kucing.jalanKeKanan(5);
console.info(kucing);
});
});
Perhatikan contoh di atas. Pada contoh tersebut kita punya kelas Binatang dan punya Object Kucing. Attribute pada kelas Binatang adalah jumlahKaki, jenisMakanan, habitat, posisiX dan posisiY. Untuk methodnya, kita hanya punya 1 method, yaitu jalanKeKanan. Berikut ini hasilnya jika kita tampilkan.

Constructor Class pada OOP di TypeScript
Constructor merupakan method yang ada pada kelas. Method ini pertama kali dipanggil ketika kita membuat object. Dengan adanya constructor pada suatu kelas kita dapat menambahkan parameter ketika kita akan membuat object. Berikut ini adalah contoh penggunaan constructor pada kelas.
describe("OOP in TypeScript", function () {
class User {
id: number;
name: string;
constructor(id: number, name: string) {
this.id = id;
this.name = name;
}
}
it('should support constructor in class', () => {
const user: User = new User(1, "Ardhan");
});
});
Pada contoh di atas kita punya kelas dengan nama User. Pada kelas tersebut kita punya method constructor sehingga saat kita membuat object user kita harus memasukkan parameter yang diminta oleh constructor.
Setter Getter
Saat menggunakan OOP, biasanya attribute kelas tidak dapat diakses secara langsung. Kita menggunakan Setter untuk melakukan modifikasi nilai attribute dan menggunakan Getter untuk mendapatkan nilai attribute. Kelebihan menggunakan Setter dan Getter adalah kita bisa memberikan validasi terhadap data yang akan di set atau data yang akan di get. Ada perbedaan penggunaan setter dan getter pada oop di typescript dimana typescript menyediakan kata kunci set dan get. Kalau di bahasa pemrograman seperti java setter maupun getter sebenarnya tidak ada bedanya dengan method lain. Untuk lebih jelasnya perhatikan contoh berikut ini.
describe("OOP in TypeScript", function () {
class Person {
_id: number;
_name: string;
constructor(id: number = 0, name: string = "") {
this._id = id;
this._name = name;
}
set id(id: number) {
if (id > 0) {
this._id = id;
} else {
this._id = 0;
}
}
set name(name: string){
if (name == "") {
this._name = "No Name";
} else {
this._name = name;
}
}
get id(): number{
return this._id;
}
get name(): string {
return this._name;
}
}
it('should support setter and getter', () => {
let person: Person = new Person();
person.id = -1;
person.name = "";
console.info(person.id);
console.info(person.name)
});
});
Jika kita perhatikan contoh di atas, ternyata setter dan getter tidak bersifat seperti method pada umumnya. Kita melakukan set dan get seperti halnya kita melakukan set dan get pada attribute. Karena kesamaan inilah kita harus membuat nama attribute harus berbeda dengan nama setter dan getternya. Misal setter dan getternya adalah name maka attributenya kita namakan dengan _name.
Penutup
Nah, demikianlah sedikit penjelasan tentang OOP di TypeScript. Pada materi selanjutnya aku akan membahas tentang konsep OOP yang lain.





