Rabu, 17 Juni 2009

Tugas OOP

Khayalan Tingkat Tinggi OOP (Object Oriented Programming)

Jika anda membaca ini dan terlintas dalam pikiran anda, bahwa setelah selesai membaca ini maka anda akan mengerti konsep Object Oriented Programming (OOP)., maka dengan maksud baik untuk tidak membuang waktu anda, saya katakan "stop" dan lakukan hal lain yang berguna. Karena saya bukan ahlinya, saya juga bukan seorang programmer dan alasan saya menulis ini karena karena saya baru belajar OOP dengan bahasa JAVA selama 3 hari dan diharuskan untuk membuat suatu tulisan tentang OOP, secara kebetulan saya memang suka menulis.


Jadi setelah menimbang-nimbang apakah membaca tulisan ini hanya akan membuang waktu anda atau tidak, dan alhamdulillah anda memutuskan untuk melanjutkannya, maka selamat. Karena untuk beberapa menit kedepan, saya akan membawa anda berkhayal yang tidak-tidak.


Tetapi sebelum kita berbaring dan memejamkan mata (hal yang biasa kita lakukan kalau mengkhayal), maka saya akan mengajukan beberapa syarat tentang tulisan ini untuk siapa.

1. Anda sedikitnya tahu sedikit tentang sedikit pengetahuan anda yang sedikit dari sedikit topik yang sedikit ini tentang OOP.

2. Anda boleh tahu tidak bisa mampu coding di JAVA

3. Hanya ada 10 tipe orang di dunia, orang yang mengerti biner dan tidak.


Jika anda mengerti kategori pertama atau paham kategori kedua dan tertawa di kategori ketiga. Maka mari kita berkhayal.


Start. (Apakah anda bingung di windows kalau harus shutdown kita harus start dulu)



Apakah anda suka “konsep” tapi tidak suka bagaimana caranya disampaikan, sehingga bagi kita-kita yang baru belajar sesuatu yang baru yang menganggap konsep sebagai sesuatu yang penting menjadi kecewa, karena pada akhir penyampaian kita menjadi bingung, menerawang jauh dan terdengar band kuburan bernyanyi “Lupa.......Lupa Lupa Lupa, Lupa lagi konsepnya”.

Bagus. Karena saya suka konsep, saya suka “the big picture first, before we jump to details”. Jadi dengan tulisan ini saya berharap bisa menceritakannya agak lain dari yang biasa. So, without further a do, let's start mengkhayal.


This brain is intentionally left blank. :)


Tiba-tiba muncul “Mandra”.


Mandra adalah seorang project manager baru di sebuah perusahaan Dirgantara besar. Begitu dia diterima, maka segala fasilitas diberikan perusahaan seperti mobil bentley keluaran terbaru plus supir dan tukang cucinya. Rumah mewah 3 kamar mandi, 10 kamar tidur dan 2 kolam renang ( didesain khusus untuk yang bisa berenang dan yang tidak bisa berenang), fully furnished lengkap dengan pembantu, tukang kebun, satpam, Pak RT, dan Pak RW khusus buat urusan perpanjang KTP. Tidak hanya itu, dalam kontrak kerjanya Mandra akan digaji 10.000 dinar kuwait/bulan (dikurs ke rupiah 1 dinar sekitar Rp.32.000), asuransi jiwa dan kesehatan, bonus uang dan perjalanan ke LN, jam kerja flexsibel, tunjangan-tunjangan, kompensasi, insentif, kepemilikan saham, dan kantor 3000 m2 di lantai 90 di gedung perusahaan. (saya pernah bekerja di perusahaan seperti itu, sayang sekarang bangkrut).


Kalau ada diantara pembaca yang bertanya bagaimana Mandra bisa menjadi Project Manager, maka saya akan ceritakan awalnya. Mandra membaca sebuah iklan lowongan di salah satu surat kabar terkemuka yang mengatakan bahwa mereka membutuhkan seseorang yang bisa menterjemahkan Business Rule dan Strategic Vision perusahaan kepada sekelompok ahli bahasa Java. Maka setelah membaca iklan ini, Mandra mengirimkan sebuah surat lamaran yang berisikan bahwa dia bisa 3 bahasa (bahasa nasional, betawi dan jawa) dan hanya menggunakan bahasa jawa seperlunya saja, dan setengah bercanda dia juga turut mencantumkan bahwa jika memang diperlukan untuk bekerja dengan komputer, "dia bisa melakukannya dengan 11 Gigi "(Literally).


Top level management, setelah membaca surat lamaran ini mengambil keputusan bahwa dia orang yang paling tepat untuk pekerjaan ini. Pernyataannya tentang bahasa nasional dianggap sebagai bahasa C/C++, dan hanya menggunakan bahasa jawa seperlunya dianggap kerendahan hati, juga bahasa betawi mungkin adalah bahasa pemrograman baru yang sedang dia kembangkan. Karena tidak ada ahli IT yang pernah mendengarnya dan itu dikonfirm oleh mas google. Dan candaan tentang mengetik dengan 11 jari menyatakan bahwa dia tipe orang yang menyenangkan, bisa bergaul dan bekerja sama.


Jadi inilah hari pertama Mandra.


Setelah rapat bersama dengan para top management, Mandra dihadapkan dengan tugas yang sulit. Top management menghendaki mandra untuk membuat sebuah program di bahasa java tentang Pesawat karena program ini akan diharapkan meningkatkan efisiensi dan efektivitas perusahaan yang menentukan kelangsungan hidup perusahaan dan 10000 karyawannya. Setelah 2 jam dibrief, Mandra hanya ada 1 pertanyaan di otaknya. “Itu tadi orang-orang ngomong apa ya?” dan tanpa diduga-duga oleh mandra, ia ditelepon lead programmer tim IT.

“Apa yang diinginkan para Bos, Pak?” kata lead programmer.

Tanpa sempat berpikir, Mandra berkata “Pesawat”

Sontak semua programmer saling berdiskusi dan sadar bahwa selama ini, mereka tidak mencoba membuat suatu gambaran besar dari apa yang akan mereka kerjakan. Mereka tidak mencoba mengkotak-kotakan atau mengelompokkan problem domainnya. Dan semua programmer java yang pada awalnya meragukan kemampuan mandra, percaya dia jenius. Dan terciptalah class Pesawat.

class Pesawat {

}

“Bagaimana Pak Mandra?”tanya komisaris

“Beres Pak, Pesawatnya sudah jadi” jawabnya lantang

“Hebat!!!, dan pilot yang akan menerbangkannya bagaimana Pak?”tanya komisaris dengan semangat

Mandra pun menelpon lead programmer dan mengatakan kalau yang akan menggunakan pesawat adalah seorang pilot. Maka setelah diskusi seru, para programmer sepakat kalau class Pesawat akan menjadi obyek prototipe di class Pilot yang akan menggunakannya.


class Pesawat

{

}

public class Pilot {

//start awal dari program java harus ada main(), definisi public dan static sangat penting disini.

public static void main(String[] args) {

Pesawat prototipe=new Pesawat();

}}

“Selesai Pak, Pilot sudah menggunakan pesawatnya, dan tidak terjadi error” bangganya Mandra berkata.

“Pak Mandra, sekalian kalau bisa di dalam pesawat ini saya mau menaruh mesin diesel dan bahan bakarnya lho” kata Pak Dirut.

“OK pak, saya mau perintahkan anak buah saya dulu” jawab Mandra.


Para Programmerpun berhasil menaruh mesin dan bahan bakar yang mereka sebut attribut dan mereka merilis Dirgantara Ver.1. Mandra dan para programmer kembali ke rumah masing-masing.


class Pesawat

{

String mesin;

String bahanBakar

}

public class Pilot {

//start awal dari program java harus ada main(), definisi public dan static sangat penting disini.

public static void main(String[] args) {

Pesawat prototipe=new Pesawat();

}}

Hari kedua Mandra

Upacara peresmian Dirgantara Ver.1, sore harinya Mandra dan para programmer karaoke sampai larut malam.

Hari ketiga Mandra

Heboh besar diperusahaan, Dirgantara Ver.1 memang berjalan tapi tidak bekerja seperti seharusnya. Para Engineer mengeluh, karena pesawatnya tidak terasa seperti pesawat dan mengirimkan fax komplain ke kantor Mandra. Sesegera mungkin ia menelpon lead programmer dan meminta solusinya. Setelah 2 jam rapat para Programmer sepakat bahwa untuk bisa menjalankan prototipe, si Engineer harus memasang diesel di mesin dan mengisi bahan bakar dengan avtur.

class Pesawat

{

String mesin;

String bahanBakar;

}

public class Pilot {

//start awal dari program java harus ada main(), definisi public dan static sangat penting disini.

public static void main(String[] args) {

Pesawat prototipe=new Pesawat();

prototipe.bahanBakar="avtur";

prototipe.mesin="Diesel";

}}

Problem solved. Tetapi departemen teknik merasa bahwa mereka menjadi terbebani dengan harus memasang mesin dan mengisi bahan bakar setiap kali prototipe Pesawat di uji coba. Apakah tidak ada cara lain sehingga prototipe bisa memiliki keadaan yang valid begitu di pakai?

Mandra yang sedang bobo siang ketika menerima komplain ini, marah-marah ke lead programmer dan meminta mereka menyelesaikan hal ini sebelum jam pulang kantor, kalau tidak mereka harus lembur tanpa bayaran. Para programmer menyadarai bahwa, suatu obyek harus diusahakan dalam keadaan valid begitu dipakai. Mereka pun membuat metode konstruktor di class Pesawat dan sebagai bonus mereka membuat overloading metode konstruktor sehingga para engineer bisa menganti-ganti mesin dan bahan bakarnya.

Para Engineer dan Mandra tersenyum.

class Pesawat

{

public Pesawat()

{

this.bahanBakar="avtur";

this.mesin="diesel";

}

public Pesawat(String mesin, String bahanBakar)

{

this.bahanBakar=bahanBakar;

this.mesin=mesin;

}

}

public class Pilot {

//start awal dari program java harus ada main(), definisi public dan static sangat penting disini.

public static void main(String[] args) {

Pesawat prototipe=new Pesawat();

Pesawat prototipe2=new Pesawat("4 Tak","Pertamax");

}}

Hari keempat Mandra

Para engineer yang sangat senang dengan perkembangan project dan hasil kerja Mandra, kembali mendatangi Mandra dengan sebuah pertanyaan. Mandra yang semakin percaya diri dengan kemampuannya menerima kepala Engineer dan menanyakan apa yang bisa dia bantu. Kepala engineer mengungkapkan pikirannya.

“Pak Mandra, saya heran. Kenapa prototipe tidak menunjukkan sifat-sifat layaknya sebuah Pesawat ya?” ungkap Kepala engineer.

“Sifat yang seperti apa ya?”Tanya Mandra, ingin tahu.

“Layaknya sih, sebuah Pesawat itu bisa terbang dan mendarat loh Pak Mandra” jelas kepala engineer.

Diplomatis Mandra menjawab “Terima kasih atas masukkannya, saya akan mendiskusikan ini dengan team saya”

Terminology Mandra "diskusikan" adalah : dia asyik-asyik telepon ceweknya dengan pulsa kantor dan team programmer peras otak bekerja. Setelah 2 minggu banting tulang, peras keringat, sedot sumsum. team programmer berhasil menjawabnya dan menyatakan sifat-sifat atau fungsi ini sebagai metode.

class Pesawat

{

String mesin;

String bahanBakar;

public Pesawat()

{

this.bahanBakar="avtur";

this.mesin="diesel";

}

public Pesawat(String mesin, String bahanBakar)

{

this.bahanBakar=bahanBakar;

this.mesin=mesin;

}

void Terbang()

{

System.out.println("Pesawat terbang dengan mesin "+ this.mesin + " dan bahan bakar "+this.bahanBakar);

}

void Mendarat()

{

System.out.println("Pesawat berhasil mendarat");

}

public void JenisPesawat()

{

System.out.println("Jenis : Pesawat " ) ;

}

}

public class Pilot {

public static void main(String[] args) {

Pesawat prototipe=new Pesawat();

prototipe.Terbang();

prototipe.Mendarat();

}}


Hari kelima Mandra

Semua tampak normal bagi Mandra. Pagi tidak macet sampai ke kantor tidak ada kerjaan. Makan siang bisa keluar dan balik lagi telat. Sampai jam menjelang pulang, terjadilah kecelakaan di departemen engineering. Prototipe hancur.

Hari keenam Mandra

Semenjak pagi team programmer menyelidiki kejadian kemarin (Mandra mendadak sakit dan meminta lead programmer untuk in charge hari ini). Setelah selidik punya selidik, ia mengambil kesimpulan bahwa prototipe hancur karena adanya pelanggaran enkapsulasi. beberapa engineer mengubah kondisi valid prototipe menjadi tidak valid dengan mengubah nilai mesin dan bahan bakar menjadi yang tidak disetujui. Sehingga ia memutuskan untuk membatasi akses di class Pesawat, sehingga pengguna prototipe2 tidak bisa secara sembarangan mengubah kondisi validnya.

class Pesawat

{

private String mesin;

private String bahanBakar;

public Pesawat()

{

this.bahanBakar="avtur";

this.mesin="diesel";

}

public Pesawat(String mesin, String bahanBakar)

{

this.bahanBakar=bahanBakar;

this.mesin=mesin;

}

void Terbang()

{

System.out.println("Pesawat terbang dengan mesin "+ this.mesin + " dan bahan bakar "+this.bahanBakar);

}

void Mendarat()

{

System.out.println("Pesawat berhasil mendarat");

}

public void JenisPesawat()

{

System.out.println("Jenis : Pesawat " ) ;

}

}

public class Pilot {

public static void main(String[] args) {

Pesawat prototipe2=new Pesawat();

//no unauthorized access

//prototipe2.mesin="2 Tak";

//prototipe2.bahanBakar="Pertamax";

prototipe2.Terbang();

prototipe2.Mendarat();

}

}

Dengan performa Pesawat yang stabil, maka perusahaan mendapatkan banyak order dari Sipil maupun militer. Sehingga top management yang merasa Mandra berhasil menyelamatkan perusahaan diminta untuk menghadiri rapat direksi untuk membahas order terbesar yang pernah diterima perusahaan semenjak berdirinya (biasanya pada bulan ke-9 pada anak bayi.).

“Selamat Pak Mandra atas hasil kerja yang Superb”kata penggemar Mario teguh ini.

“Terima kasih Pak komisaris” Jawab Mandra dengan senyuman puas dan bangga

“Saya rasa Pak Mandra tahu, kalau klient baru kita akan mengikat kontrak dengan perusahaan kita, jika kita berhasil membuat sebuah pesawat baru berjenis penumpang. Dimana Pesawat Penumpang ini harus mempunyai kestabilan seperti prototipe Pesawat yang telah kita kembangkan sebelumnya serta semacam mekanisme baru dimana walaupun Pesawat Penumpang menggunakan feature lama Pesawat tetapi tetap memberikan feature baru dari Pesawat Penumpang, kalau tidak salah istilahnya Polimorphisme Pak Mandra. Kami tahu, kita tidak mungkin membuat Pesawat Penumpang ini dari scratch, karena mereka mengharapkan result dalam 1 hari. Jadi bagaimana Pak Mandra, Can You Do It?”Tegas komisaris bertanya

“Terima kasih atas kepercayaan Bapak, saya akan mendiskusikan ini dengan team saya” jawab Mandra penuh keyakinan.

Terminology Mandra diskusikan adalah : dia asyik-asyik keluruan di senayan city bareng ceweknya dengan mobil kantor dan team programmer peras otak bekerja. Setelah dibuat kaget setengah mati (Malaikat Pencabut Nyawa bersyukur kerjaannya sisa setengah lagi. Team programmer berhasil membuat class Pesawat Penumpang yang merupakan subclass Pesawat atau disebut inheritance, mempunyai kemampuan dan sifat Pesawat dengan tambahan unik Penumpang di class Pesawat Penumpang.

class Pesawat

{

private String mesin;

private String bahanBakar;

public Pesawat()

{

this.bahanBakar="avtur";

this.mesin="diesel";

}

public Pesawat(String mesin, String bahanBakar)

{

this.bahanBakar=bahanBakar;

this.mesin=mesin;

}

void Terbang()

{

System.out.println("Pesawat terbang dengan mesin "+ this.mesin + " dan bahan bakar "+this.bahanBakar);

}

void Mendarat()

{

System.out.println("Pesawat berhasil mendarat");

}

public void JenisPesawat()

{

System.out.println("Jenis : Pesawat " ) ;

}

}

class PesawatPenumpang extends Pesawat

{

int penumpang;

public PesawatPenumpang()

{

this.penumpang=10;

}

public void JenisPesawat()

{

System.out.println("Jenis Pesawat Penumpang dengan jumlah " + this.penumpang + " penumpang" ) ;

}

}

}

public class Pilot {

public static void main(String[] args) {

PesawatPenumpang prototipePenumpang=new PesawatPenumpang();

prototipePenumpang.JenisPesawat();

prototipePenumpang..penumpang=100;

prototipePenumpang.JenisPesawat();

prototipePenumpang.Terbang();

prototipePenumpang.Mendarat();

}}

Ketika hal ini diperlihatkan langsung ke klient, mereka terkagum-kagum. Gila, Hebat, Mantap. Terlebih lagi jumlah penumpang bisa diubah-ubah tanpa mempengaruhi kestabilan Pesawat serta ketika dilihat Jenis Pesawat yang tampak dari Pesawat Penumpang bukan dari Pesawat. Tetapi klient meminta satu permintaan yang membuat top management kelimpungan, kemampuan untuk mengubah mesin dan bahan bakar Pesawat yang sekarang tidak diperbolehkan dari Pesawat Penumpang. Top management untuk kesekian kalinya memanggil Mandra. Dan Mandra menjawab Bisa.

Terminology Mandra Bisa adalah : dia asyik-asyik main Counter Strike dengan listrik kantor dan team programmer peras otak bekerja. Setelah penelitian yang mendalam didapatkanlah hasil yang sesuai permintaan klient tanpa mengorbankan validitas dan kestabilan Pesawat.

class Pesawat

{

protected String mesin;

protected String bahanBakar;

public Pesawat()

{

this.bahanBakar="avtur";

this.mesin="diesel";

}

public Pesawat(String mesin, String bahanBakar)

{

this.bahanBakar=bahanBakar;

this.mesin=mesin;

}

void Terbang()

{

System.out.println("Pesawat terbang dengan mesin "+ this.mesin + " dan bahan bakar "+this.bahanBakar);

}

void Mendarat()

{

System.out.println("Pesawat berhasil mendarat");

}

public void JenisPesawat()

{

System.out.println("Jenis : Pesawat " ) ;

}

}

class PesawatPenumpang extends Pesawat

{

int penumpang;

public PesawatPenumpang()

{

this.penumpang=10;

}

public void JenisPesawat()

{

System.out.println("Jenis Pesawat Penumpang dengan jumlah " + this.penumpang + " penumpang" ) ;

}

}

class Pilot {

public static void main(String[] args) {

PesawatPenumpang prototipePenumpang=new PesawatPenumpang();

prototipePenumpang.mesin="Jet";

prototipePenumpang.JenisPesawat();

prototipePenumpang.Terbang();

prototipePenumpang.Mendarat();

}

}

Dan begitulah akhir dari cerita kita ini. Mandra menjadi pahlawan super. Dia mendapatkan bonus yang sangat lumayan setelah proyek ini selesai, menikah dengan gadis cantik, soleha dan sedikit nakal (soleha bukannya harus kalem lho). Dan para programmer, masih tetap bekerja 9 to 5 di perusahaan tersebut.

Dengarkan suara saya, pada hitungan ketiga anda akan memahami cerita tadi dan menyambungkannya dengan apa yang telah anda ketahui serta terus menggali ilmu dan pengetahuan anda. Satu tambah dua…………


Tidak ada komentar:

Posting Komentar