Tanggal :28 Oktober 2020
Typescript-OOP-Polymorphism.png

TypeScript OOP – Polymorphism

Artikel ini bagian ke 4 dari 5 seri dalam artikel berseri "TypeScript OOP"

Assalamualaikum Warahmatullahi Wabarakatuh.

Hai hai haiii… Kita ketemu lagiiii… Pada artikel kali ini kita akan membahas tentang polymorphism. Bagi kalian yang belum membaca artkel sebelum dapat membuka artike ini, TypeScript OOP – Abstract Class.

Pada artikel kali ini kita akan membahas apa itu polymorphism dan bagaimana contoh penerapannya. Tentu saja seperti biasa kita akan melanjutkan program yang telah kita buat sebelumnya. Yuk yuk langsung masuk ke pembahasan yuk.

Mengenal OOP

Seperti pada artikel – artikel sebelumnya, pada bagian ini kita akan membahas istilah pada TypeScript OOP.

Polymorphism merupakan sebuah metode agar beberapa objek dapat memilikik beberapa bentuk. Polymorphism merupakan satu nama tunggal dengan menyatakan objek dari kelas – kelas yang berbeda yang terhubung pada satu superclass.

Pembuatan Program

Pada pembuatan program kali ini kita akan menambahkan beberapa fitur dari program yang telah kita buat sebelumnya. Bagi kalian yang ingin mengecek bentuk terakhir program yang telah dibuat, kalian dapat mengaksesnya di Github.

Seperti yang telah kita bahas pada artikel pertama, kita akan membuat sebuah kompetisi untuk mobil – mobil balap ini. Kompetisi tersebut memiliki panjang jalur untuk lomba balap mobil tersebut dan juga kita dapat mengecek mobil – mobil yang terdaftar dalam kompetisi tersebut.

Kita akan mulai dengan membuat class untuk kompetisi. Kita juga akan memberikan attribute dan method sesuai dengan studi kasus.

import { Car } from './car';

export class Competition {
    private cars: Car[];
    private distance: number;

    constructor() {
        this.cars = [];
        this.distance = 0;
    }

    setCars(cars: Car[]): void {
        this.cars = cars;
    }

    getCars(): void {
        console.log(`Mobil yang terdaftar: `);
        for (let i in this.cars) {
            console.log(`${ Number(i) + 1 }. ${ this.cars[i].getName() }: ${ this.cars[i].getSpeed() } MPH`);
        }
    }

    setDistance(distance: number): void {
        this.distance = distance;
    }

    getDistance(): number {
        return this.distance;
    }

    race(): void {
        
    }

    winner(car: Car): string {
        return;
    }
}

Pertama – tama kita menyiapkan attribute-nya terlebih dahulu, yaitu mobil – mobil yang mendaftar dan jarak lomba. Lalu kita menyiapkan constructor serta setter dan getter untuk kedua attribute tersebut.

Setelah ini kita akan menambahkan attribute baru yang nantinya untuk mengcek siapa juara satu hingga empat. Kita juga akan mengisi method race() dan winner(). Begini hasil akhirnya.

import { Car } from './car';

export class Competition {
    private cars: Car[];
    private distance: number;
    private ranks: any;

    constructor(cars: Car[], distance: number) {
        this.cars = cars;
        this.distance = distance;
        this.ranks = this.cars;
    }

    setCars(cars: Car[]): void {
        this.cars = cars;
    }

    getCars(): void {
        console.log(`Mobil yang terdaftar: `);
        for (let i in this.cars) {
            console.log(`${ Number(i) + 1 }. ${ this.cars[i].getName() }: ${ this.cars[i].getSpeed() } MPH`);
        }
    }

    setDistance(distance: number): void {
        this.distance = distance;
    }

    getDistance(): number {
        return this.distance;
    }

    race(): void {
        console.log('Lomba balap mobil dimulai!!');
        
        for (let car of this.cars) {
            car.move()
        }

        this.setRaceTime();

        this.ranks.sort((obj1, obj2) => {
            if(obj1.times < obj2.times) {
                return 1;
            } else if(obj1.times > obj2.times) {
                return -1;
            } else {
                return 0;
            }
        });

        console.log('Lomba balap mobil telah berakhir');
    }

    setRaceTime(): void {
        for (let car of this.ranks) {
            car.times = this.distance / car.getSpeed();
        }
    }

    winner(): string {
        return `\nPemenang untuk lomba balap kali ini ialah ${ this.ranks[0].getName() } dengan waktu ${ this.ranks[0].times } jam`;
    }
}

Pada race() kita akan mencoba mengisi nilai pada variabel ranks dengan mencari pemenang dari lomba balap tersebut. Variabel ranks berisi mobil – mobil yang mengikuti lomba yang nantinya akan diurutkan setelah mengetahui siapa mobil pemenang lomba.

Pemenang dapat dicari dengan mencari waktu mobil mencapai garis finish. Kita dapat mencari waktu dengan memanggil method setRaceTime(). setRaceTime() akan menghitung waktu tiap mobil mencapai garis finish dan memasukkanya kedalam ranks. Setelah itu ranks akan diurutkan berdasarkan waktu terkecil dan kita telah mendapatkan mobil juara.

Sekarang kita akan melihat bagaimana kita menginstansi class Competition. dan menerapkan kode yang kita buat sebelumnya.

import { Car } from './classes/car';
import { Competition } from './classes/competition';

let cars: Car[] = [venom, agera, chiron, speedtail]

const competition = new Competition(cars, 1200);
competition.getCars();
competition.race();
console.log(competition.winner());

Dapat kita lihat bahwa walaupun mobil – mobil yang telah kita buat berbeda class tapi kita masih dapat memasukannya ke dalam satu array. Ini karena sifat dari polymorphism yang telah kita pelajari, yaitu objectobject tersebut terhubung pada satu superclass, yaitu class Car.

Mungkin cukup sampai sini ya kita berkenalan dengan polymorphism ya teman – teman. Untuk program, seperti biasa dapat diakses di Github.

Jika terdapat kesalahan maupun kekurangan dalam penulisan artikel ini, penulis memohon maaf yang sebesar – besarnya. Semoga ilmu yang didapatkan dapat bermaanfaat bagi siapa pun kedepannya. Terima kasiiihhh!!

Wassalamualaikum Warahmatullahi Wabarakatuh.

One Ping

  1. Pingback: Belajar TypeScript : TypeScript OOP - Interface - Kawan Koding

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *