SlideShare a Scribd company logo
1 of 24
Download to read offline
MODUL
MATAKULIAH
Pemrograman
Berorientasi Objek
CHOERUN ASNAWI, S.KOM.
SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER
(STMIK) JENDERAL ACHMAD YANI
YOGYAKARTA
2012
PENDAHULUAN
A. Pengertian
Pemrograman berorientasi pada objek atau Object-Oriented Programming (OOP)
merupakan suatu paradigma pemrograman yang termasuk ke dalam ketegori pemrograman
imperatif. Pemrograman imperatif sendiri adalah suatu paradigma pemrograman yang
mendeskripsikan program sebagai suatu urutan atau alur langkah-langkah yang harus
dilakukan untuk memecahkan suatu masalah. Berlawanan dari pemrograman imperatif
adalah pemrograman deklaratif, yang mendeskripsikan program sebagai sekumpulan aturan
yang digunakan untuk mendeskripsikan masalah.
Konsep OOP berbeda dari konsep pemrograman prosedural, meskipun sama-sama bersifat
imperatif. Pada pemrograman prosedural, programmer berpikir bagaimana mengolah data
yang ada dengan menggunakan instruksi-instruksi yang ada. Di sini programmer melihat
data sebagai objek PASIF yang harus dikenai tindakan agar dapat menghasilkan output yang
diinginkan. Berbeda dengan itu, pada konsep OOP programmer berpikir bagaimana
membuat sebuah objek yang berisi data dan dapat melakukan pekerjaan yang sesuai. Di sini
programmer melihat data sebagai objek AKTIF yang dapat bertindak dan melakukan hal-hal
tertentu untuk menghasilkan output.
B. Contoh
Sebagai contoh dapat menggunakan data atau objek pesawat. Pada pemrograman
prosedural atau Non-OOP, programmer berpikir bagaimana cara menerbangkan atau
mendaratkan pesawat. Sementara itu pada pemrograman berorientasi objek atau OOP,
programmer berpikir bagaimana pesawat itu terbang atau mendarat. Contoh lainnya
adalah menggunakan sebuah struktur data abstrak semacam stack atau tumpukan. Pada
pemrograman Non-OOP, programmer berpikir bagaimana cara menambahkan item baru
ke dalam stack. Sementara itu pada konsep OOP, programmer berpikir apa yang akan
dilakukan oleh stack saat suatu item baru ditambahkan padanya.
Berikut ini adalah contoh preview dari sebuah program yang menggunakan konsep OOP:
<?php
require_once('application.php');
require_once('page.php');
...
class MyApp extends Application {
...
}
$myapp = new MyApp('Sistem Informasi Ini Itu');
$url = $myapp->parse_query();
$myapp->dislay($url);
?>
EVOLUSI MENUJU OOP
Lebih lanjut lagi, OOP dapat dipandang sebagai hasil evolusi atau pengembangan dari
konsep pemrograman prosedural. Dalam perkembangannya, pemrograman prosedural pun
masih dapat dibagi dalam dua tahap, yaitu pemrograman tak terstruktur dan pemrograman
terstruktur.
A. Pemrograman Tak Terstruktur
Biasanya orang menyebutkan bahwa yang namanya pemrograman tak terstruktur adalah
cara menulis program yang di dalamnya banyak terdapat penulisan kode yang sama atau
mirip secara berulang-ulang, pemisahan bagiannya tidak jelas dan campur aduk, serta alur
programnya kacau dengan adanya lompatan di sana sini (menggunakan perintah GOTO dan
sejenisnya). Namun pemrograman tak terstruktur sebenarnya juga dapat didefinisikan
sebagai program yang di dalamnya terdapat nilai-nilai yang seharusnya merupakan satu
kesatuan namun dipisah-pisahkan sendiri dalam variabel yang berdiri sendiri. Sebagai
contoh ada data mahasiswa, namun di dalam program data NIM dan namanya dipisahkan
ke dalam variabelnya sendiri-sendiri.
B. Pemrograman Terstruktur
Saat program tumbuh menjadi semakin besar, dengan menggunakan konsep pemrograman
tak terstruktur di atas maka program akan menjadi bertambah kompleks dan susah dibaca
maupun dipelihara. Untuk itu kemudian dikembangkanlah konsep pemrograman
terstruktur. Konsep ini ditandai dengan penggunaan fungsi-fungsi atau subprogram untuk
membungkus kode-kode yang merupakan satu kesatuan atau yang ditulis berulang-ulang,
penggunaan looping atau perulangan, dan mengelompokkan bagian-bagian yang serupa ke
dalam unit atau modulnya sendiri-sendiri. Namun akan lebih tepat lagi jika pada
pemrograman terstruktur ini, nilai-nilai yang memang saling berhubungan dan merupakan
satu kesatuan dibungkus atau disatukan ke dalam suatu data yang terstruktur. Penggunaan
tipe data terstruktur semacam array, record, set, hash, stack, queue, tree, dan semacamnya
menjadi dominan di sini. Sebagai contoh, data mahasiswa akan disimpan di dalam sebuah
record yang di dalamnya mengandung field NIM dan nama.
Dalam konsep pemrograman terstruktur, pada awalnya programmer dituntut untuk dapat
mengelompokkan nilai-nilai terkait yang semula terpisah-pisah menjadi satu kesatuan data.
Setelah itu programmer masih harus berpikir untuk membuat fungsi-fungsi yang terpisah
yang nantinya akan digunakan untuk mengolah kesatuan data yang telah dibuat. Misalkan
jika ada data mahasiswa, maka akan dibuat fungsi-fungsi untuk mendaftarkan mahasiswa,
mengisi KRS mahasiswa, memberi nilai mahasiswa, mencetak KHS mahasiswa, dan
seterusnya.
C. Pemrograman Berorientasi pada Objek
Saat program semakin tumbuh besar lagi, konsep pemrograman terstruktur ini kemudian
dirasa sudah kurang mencukupi lagi untuk menanganinya. Kerepotan yang dirasakan
terutama timbul karena adanya pemisahan antara kesatuan-kesatuan data dengan fungsi-
fungsi yang digunakan untuk mengolahnya. Semakin banyak kesatuan data yang dibuat,
maka semakin akan terasa bahwa sebenarnya ada yang mirip satu sama lain, sehingga
fungsi-fungsi yang mengolahnya pun menjadi mirip-mirip. Hal ini sering menyebabkan
munculnya kode yang ditulis berulang-ulang di bagian-bagian yang saling terpisah. Sebagai
contoh adalah data karyawan di sebuah perguruan tinggi, yang dibedakan menjadi
karyawan kependidikan (dosen) dan karyawan non-kependidikan (non-dosen). Kedua data
ini memiliki banyak kesamaan, namun juga ada perbedaannya yang tidak sedikit. Keduanya
sama-sama digaji namun perhitungannya berbeda. Tapi walaupun dikatakan berbeda cara
menghitungnya , ada kemiripannya juga sehingga menyebabkan adanya duplikasi kode.
Selain itu masih banyak contoh yang lainnya.
Untuk memecahkan masalah semacam itu, dikembangkanlah konsep pemrograman
berorientasi pada objek atau OOP. Dalam OOP, bukan hanya nilai-nilai yang terkait saja yang
disatukan ke dalam satu kesatuan, melainkan juga aksi-aksi atau tindakan untuk mengolah
nilai-nilai itu juga. Dengan kata lain, dalam OOP data dan fungsi (tindakan) untuk
mengolahnya dibungkus dalam satu kesatuan. Bungkus inilah yang kemudian dinamakan
sebagai OBJEK. Teknik pembungkusan data dan fungsi ini dikenal dengan istilah
encapsulation atau pengkapsulan. Selain itu ada konsep inheritance atau pewarisan dimana
dua objek yang mirip dapat diturunkan dari sebuah objek yang lebih umum dan mewarisi
semua data dan fungsi yang ada tanpa harus menulis ulang kodenya. Selain itu terdapat juga
konsep polymorphism yang membuat dua objek berbeda dapat diperlakukan dengan cara
yang sama karena diturunkan dari objek umum yang sama, walaupun nantinya dapat
menghasilkan output yang berbeda juga.
Sebagai contoh, masalah karyawan dosen dan karyawan non-dosen di atas. Dengan OOP,
masalah tersebut dapat dipecahkan dengan membuat sebuah objek (sebenarnya istilah
yang lebih tepat adalah class, namun untuk sementara memakai objek dulu supaya lebih
jelas) karyawan yang berlaku bagi karyawan secara umum, baik dosen maupun non-dosen.
Objek ini berisi data dan fungsi yang umum dimiliki oleh seorang karyawan. Setelah itu
tinggal menurunkan objek tersebut ke dalam dua objek terpisah yaitu objek dosen dan
objek non-dosen. Kedua objek ini mewarisi semua yang dimiliki objek karyawan namun
dapat dikustomisasi atau disesuaikan dengan hal-hal yang lebih spesifik. Kedua objek ini
kadang bisa dianggap sama, kadang juga bisa dianggap berbeda.
D. Ringkasan
Ringkasan dari ketiga konsep pemrograman di atas beserta ciri-ciri yang membedakannya
akan dituliskan dalam tabel berikut:
Konsep
Pemrograman
Ciri-Ciri Berkaitan dengan Data dan Pengolahannya
Pemrograman Tak
Terstruktur
Nilai-nilai data yang harusnya saling berhubungan tertulis secara
terpisah-pisah. Setiap nilai dapat diolah dan dimanipulasi sendiri-
sendiri tanpa harus melihat nilai lainnya yang mungkin memiliki
hubungan dengannya. Pengolahan nilai biasanya dilakukan dengan
perintah-perintah bawaan yang telah tersedia.
Pemrograman
Terstruktur
Nilai-nilai yang memiliki hubungan disatukan ke dalam satu
kesatuan data, semacam record dan array. Dengan cara ini
hubungan antar nilai menjadi lebih jelas. Pengolahan data
dilakukan terhadap kesatuan tersebut bukan pada nilai-nilainya
secara individual, menggunakan fungsi-fungsi yang terpisah.
Pemrograman
Berorientasi pada
Objek
Data dan fungsi yang digunakan untuk mengolahnya disatukan ke
dalam sebuah objek. Dengan cara ini akan lebih mudah dan jelas
melihat sebuah objek secara utuh, dari data dan apa yang bisa
dilakukannya.
PENJELASAN LEWAT CONTOH
A. Contoh Kasus
Contoh yang ada di sini akan dijelaskan menggunakan aplikasi PHPDraw. Perintah yang akan
banyak dipakai di sini adalah perintah line untuk menggambar garis. Untuk mengingatkan
lagi, di sini akan dituliskan dulu bentuk umum dari perintah line tersebut:
line(x1, y1, x2, y2, warna);
Perintah tersebut digunakan untuk membuat atau menggambar garis dari koordinat (x1, y1)
menuju ke koordinat (x2, y2) dengan menggunakan warna tertentu.
Pada bagian ini akan dijelaskan bagaimana cara menggambar bentuk bintang segi lima yang
terlihat pada gambar di bawah ini menggunakan ketiga konsep pemrograman yang telah
dijelaskan di atas.
Sedikit asumsi dari gambar tersebut:
 Ukuran gambar adalah ukuran default (400x400),
gambar yang terlihat di sebelah telah diperkecil
 Warna background juga menggunakan warna default
(putih), sementara garis bintangnya merah
 Pusat dari bintang tersebut adalah di tengah-tengah
gambar, yaitu koordinat (200, 200)
 Jari-jari bintang atau jarak dari pusat ke setiap pucuk
bintang tersebut adalah 200.
Seperti kata pepatah: “Banyak jalan menuju Roma”, maka demikian pula dengan menuliskan
program. Satu masalah dapat dipecahkan dengan menggunakan program-program yang
berbeda, bahkan meskipun menggunakan paradigma yang sama. Artinya, program-program
yang dituliskan di sini bukanlah satu-satunya solusi untuk masalah di atas.
B. Pemrograman Tak Terstruktur
Dengan konsep pemrograman terstruktur, tinggal mencari lima koordinat yang membentuk
kelima sudut bintang tersebut. Setelah itu gunakan perintah bawaan line untuk
menggambar garis antar setiap koordinat yang berhubungan. Caranya bisa dengan mencari
nilai x dan y dari setiap koordinat terlebih dahulu, baru menggambarkan garis-garisnya,
seperti yang tergambar dalam pseudocode berikut:
$x1 = ...; $y1 = ...;
$x2 = ...; $y2 = ...;
$x3 = ...; $y3 = ...;
$x4 = ...; $y4 = ...;
$x5 = ...; $y5 = ...;
line($x1, $y1, $x3, $y3, COLOR_RED);
line($x3, $y3, $x5, $y5, COLOR_RED);
line($x5, $y5, $x2, $y2, COLOR_RED);
line($x2, $y2, $x4, $y4, COLOR_RED);
line($x4, $y4, $x1, $y1, COLOR_RED);
Atau bisa juga dengan cara menghitung dua koordinat yang saling terhubung dulu dan
diikuti dengan menggambar garisnya, lalu diteruskan dengan mencari koordinat berikutnya
lalu menggambar lagi, dan seterusnya. Dengan cara ini, variabel yang digunakan bisa
dihemat karena bisa menggunakan kembali (reuse) variabel yang nilainya sudah tidak
terpakai lagi, sehingga cukup menggunakan variabel x1 dan y1 untuk koordinat awal garis,
serta x2 dan y2 untuk koordinat akhir garis. Lagipula nilai koordinat akhir dari suatu garis
dapat digunakan kembali sebagai nilai koordinat awal garis yang digambar sesudahnya. Cara
ini dapat dilihat pada pseudocode berikut:
$x1 = ...; $y1 = ...;
$x2 = ...; $y2 = ...;
line($x1, $y1, $x2, $y2, COLOR_RED);
$x1 = $x2; $y1 = $y2;
$x2 = ...; $y2 = ...;
line($x1, $y1, $x2, $y2, COLOR_RED);
$x1 = $x2; $y1 = $y2;
$x2 = ...; $y2 = ...;
line($x1, $y1, $x2, $y2, COLOR_RED);
$x1 = $x2; $y1 = $y2;
$x2 = ...; $y2 = ...;
line($x1, $y1, $x2, $y2, COLOR_RED);
$x1 = $x2; $y1 = $y2;
$x2 = ...; $y2 = ...;
line($x1, $y1, $x2, $y2, COLOR_RED);
Memang terlihat lebih panjang, namun dengan kode yang terakhir ini program berpotensi
untuk dibawa ke bentuk perulangan, sehingga akan menyederhanakan kode program.
Perhatikan bahwa di sini setiap nilai yang membentuk sebuah koordinat disimpan dalam
variabel-variabel yang berdiri sendiri, semacam $x1, $x2, $y1, dan $y2. Terlebih lagi di situ
terlihat bahwa nilai dari setiap koordinat dihitung sendiri-sendiri tanpa melihat relasinya
dengan koordinat sebelumnya. Hal inilah yang terkadang membuat program menjadi susah
dibaca dan dimengerti.
Detail untuk menghitung setiap koordinatnya tidak akan dijelaskan secara detail disini, yang
jelas menggunakan rumus-rumus yang dikenal dalam trigonometri. Berikut ini salah satu
program yang dapat digunakan untuk membuat gambar bintang semacam itu:
<?php
$x1 = 200; $y1 = 0;
$x2 = 200 + 200*cos(deg2rad(1*72 – 90));
$y2 = 200 + 200*sin(deg2rad(1*72 – 90));
$x3 = 200 + 200*cos(deg2rad(2*72 – 90));
$y3 = 200 + 200*sin(deg2rad(2*72 – 90));
$x4 = 200 + 200*cos(deg2rad(3*72 – 90));
$y4 = 200 + 200*sin(deg2rad(3*72 – 90));
$x5 = 200 + 200*cos(deg2rad(4*72 – 90));
$y5 = 200 + 200*sin(deg2rad(4*72 – 90));
line($x1, $y1, $x3, $y3, COLOR_RED);
line($x3, $y3, $x5, $y5, COLOR_RED);
line($x5, $y5, $x2, $y2, COLOR_RED);
line($x2, $y2, $x4, $y4, COLOR_RED);
line($x4, $y4, $x1, $y1, COLOR_RED);
?>
Angka 72 yang ada dalam program tersebut merupakan besarnya sudut (dalam derajat)
yang terbentuk dari dua buah pucuk bintang yang berdekatan, dilihat dari pusat bintangnya.
Angka 72 tersebut dihitung dari besarnya sudut yang dibentuk sebuah lingkaran penuh
(360o
) dibagi banyaknya pucuk atau segi dari bintang (5). Perintah deg2rad (dibaca deg-to-
rad) yang ada di program tersebut digunakan untuk mengkonversi nilai sudut dari satuan
derajat (degree) ke satuan radian. Hal ini karena dalam PHP semua fungsi trigonometri
(semacam cos, sin dan tan) semuanya beroperasi dalam satuan radian, bukan derajat.
Selanjutnya silahkan dipelajari sendiri.
C. Pemrograman Terstruktur
Dengan menggunakan konsep pemrograman terstruktur, setiap nilai x dan y yang ada tidak
akan dianggap sebagai nilai yang terpisah. Pemrograman terstruktur berusaha mengatur
dan mengelompokkan nilai-nilai yang tercerai berai tersebut agar lebih mudah dikelola.
Kesatuan data yang menyatukan setiap nilai x dan y tersebut diberi nama sesuai dengan
maksudnya, yaitu sebagai koordinat. Untuk keperluan tersebut biasanya digunakan record,
yang dalam hal ini memiliki dua buah field yaitu field x dan field y. Demikian juga dengan
nilai-nilai yang menyusun sebuah garis, disatukan ke dalam sebuah record yang disebut
sebagai garis dan memiliki tiga field, yaitu: koordinat awal, koordinat akhir, dan warna-nya.
Selain itu juga perlu dibuat fungsi-fungsi yang akan digunakan untuk membuat
(mengkonstruksi), mengakses dan memanipulasi kesatuan data yang telah dibuat. Fungsi
untuk membuat kesatuan data tugasnya adalah mengumpulkan nilai-nilai yang ada dan
membentuk kesatuan data darinya. Nilai-nilai yang akan dikumpulkan disebutkan sebagai
argumen dari fungsi, dan sebagai balasannya fungsi menghasilkan sebuah record yang berisi
nilai-nilai tersebut. Fungsi semacam ini dinamakan sebagai fungsi konstruktor. Contohnya:
function buat_koordinat($x, $y) {
return array('x' => $x, 'y' => $y);
}
Sementara itu fungsi untuk mengakses dan manipulasi biasanya menggunakan kesatuan
data yang terkait sebagai parameter pertama. Jika tidak berniat mengubah nilai yang ada di
dalamnya maka akan menggunakan parameter pass-by-value, seperti contoh berikut:
function gambar_titik($koordinat) {
pixel($koordinat['x'], $koordinat['y'], $koordinat['warna']);
}
Sementara jika berniat akan mengubah nilai maka akan menggunakan parameter pass-by-
reference, seperti contoh berikut:
function pindah_koordinat(&$koordinat, $dx, $dy) {
$koordinat['x'] += $dx;
$koordinat['y'] += $dy;
}
Berikut ini contoh jawaban menggunakan konsep pemrograman terstruktur:
<?php
function buat_koordinat($x, $y) {
return array(
'x' => $x,
'y' => $y
);
}
function ubah_koordinat(&$koordinat, $x, $y) {
$koordinat['x'] = $x;
$koordinat['y'] = $y;
}
function putar_koordinat(&$koordinat, $pusat, $sudut) {
$x0 = $pusat['x']; $y0 = $pusat['y'];
$x1 = $koordinat['x']; $y1 = $koordinat['y'];
$dx = $x1 - $x0; $dy = $y1 - $y0;
$a = deg2rad($sudut);
$x2 = $x0 + $dx*cos($a) - $dy*sin($a);
$y2 = $y0 + $dx*sin($a) + $dy*cos($a);
ubah_koordinat($koordinat, $x2, $y2);
}
function buat_garis($awal, $akhir, $warna) {
return array(
'awal' => $awal,
'akhir' => $akhir,
'warna' => $warna
);
}
function gambar_garis($garis) {
$x1 = $garis['awal']['x']; $y1 = $garis['awal']['y'];
$x2 = $garis['akhir']['x']; $y2 = $garis['akhir']['y'];
line($x1, $y1, $x2, $y2, $garis['warna']);
}
function putar_garis(&$garis, $pusat, $sudut) {
putar_koordinat($garis['awal'], $pusat, $sudut);
putar_koordinat($garis['akhir'], $pusat, $sudut);
}
$pusat = buat_koordinat(200, 200);
$pucuk = buat_koordinat(200, 0);
putar_koordinat($pucuk, $pusat, 144);
$garis = buat_garis(buat_koordinat(200, 0), $pucuk, COLOR_RED);
for ($i = 0; $i < 5; $i++) {
gambar_garis($garis);
putar_garis($garis, $pusat, 144);
}
?>
Tentu saja masih ada cara yang berbeda untuk memperoleh hasil yang sama.
D. Pemrograman Berorientasi pada Objek
Program berikut ini merupakan program yang sama ditulis menggunakan konsep OOP.
Untuk sementara di sini hanya akan dituliskan dulu, dengan penjelasan akan diberikan nanti.
Untuk sementara tidak semua fitur OOP akan digunakan di sini, untuk menyederhanakan
jawaban.
<?php
class Koordinat {
var $x;
var $y;
function __construct($x, $y) {
$this->x = $x;
$this->y = $y;
}
function ubah($x, $y) {
$this->x = $x;
$this->y = $y;
}
function putar($pusat, $sudut) {
$x0 = $pusat->x; $y0 = $pusat->y;
$x1 = $this->x; $y1 = $this->y;
$dx = $x1 - $x0; $dy = $y1 - $y0;
$a = deg2rad($sudut);
$x2 = $x0 + $dx*cos($a) - $dy*sin($a);
$y2 = $y0 + $dx*sin($a) + $dy*cos($a);
$this->ubah($x2, $y2);
}
}
class Garis {
var $awal;
var $akhir;
var $warna;
function __construct($awal, $akhir, $warna) {
$this->awal = $awal;
$this->akhir = $akhir;
$this->warna = $warna;
}
function gambar() {
$x1 = $this->awal->x;
$y1 = $this->awal->y;
$x2 = $this->akhir->x;
$y2 = $this->akhir->y;
line($x1, $y1, $x2, $y2, $this->warna);
}
function putar($pusat, $sudut) {
$this->awal->putar($pusat, $sudut);
$this->akhir->putar($pusat, $sudut);
}
}
$pusat = new Koordinat(200, 200);
$pucuk = new Koordinat(200, 0);
$pucuk->putar($pusat, 144);
$garis = new Garis(new Koordinat(200, 0), $pucuk, COLOR_RED);
for ($i = 0; $i < 5; $i++) {
$garis->gambar();
$garis->putar($pusat, 144);
}
?>
MIGRASI DARI NON-OOP KE OOP
A. Pembuatan Class
Kesatuan data (record) yang ada di pemrograman non-OOP (terstruktur) beserta segala
fungsi yang terkait dengannya, dalam OOP disatukan ke dalam satu konsep yang dinamakan
sebagai class. Nilai-nilai yang ada di record dijadikan sebagai field anggota class, sedangkan
fungsi-fungsi yang terkait dijadikan sebagai metode anggota class.
Sebagai contoh diambil record koordinat, jika dijadikan sebagai class garis besar kodenya
adalah sebagai berikut:
class Koordinat {
...
}
Sebagai catatan tambahan, dalam PHP ada kesepakatan bersama (namun bukan keharusan),
bahwa nama class menggunakan huruf besar di huruf pertama tiap kata. Contohnya adalah:
Koordinat, Garis, SegiTiga, SegiEmpat, Mahasiswa, Dosen, MataKuliah, dll.
B. Field Anggota Class
Field anggota class diimplementasikan sebagai sebuah variabel yang ada di dalam sebuah
class. Untuk membuatnya harus melalui deklarasi terlebih dahulu menggunakan keyword
var. Berikut ini contoh pendeklarasian field x dan y dalam class Koordinat:
class Koordinat {
var $x;
var $y;
...
}
C. Metode Anggota Class
Metode anggota class diimplementasikan sebagai sebuah fungsi yang dideklarasikan di
dalam class. Cara pembuatannya sama persis dengan fungsi biasa, hanya saja berada di
dalam class. Perbedaan lainnya adalah, jika pada konsep pemmrograman terstruktur setiap
fungsi untuk mengakses atau memanipulasi nilai dalam record membutuhkan record yang
terkait sebagai parameter pertamanya, maka pada konsep OOP parameter pertamanya
tersebut dihilangkan. Alasannya akan dijelaskan di bagian berikutnya. Sebagai contoh, fungsi
untuk menggambar garis dan memutar garis berikut:
function gambar_garis($garis) {
...
}
function putas_garis(&$garis, $pusat, $sudut) {
...
}
Kedua fungsi tersebut jika dijadikan metode dalam konsep OOP menjadi sbb:
class Garis {
...
function gambar() {
...
}
function putar($pusat, $sudut) {
...
}
...
}
Perhatikan bahwa nama fungsi atau metode pada OOP menjadi lebih pendek dari
sebelumnya. Hal ini karena nama kesatuan data yang akan diolah sudah terwakili sebagai
nama class, jadi di nama fungsi tidak perlu disebutkan lagi. Sementara itu di konsep non-
OOP nama fungsi harus lengkap dan jelas supaya jika ada kesatuan data yang memiliki
fungsi yang bernama sama tidak akan saling bertumbukan, misalkan fungsi
putar_koordinat dan fungsi putar_garis. Pada OOP kedua fungsi tersebut cukup
menggunakan nama putar saja.
D. Pengaksesan Anggota dari Objek
Untuk mengakses anggota sebuah class lewat objeknya, baik itu field maupun metode,
digunakan operator -> (bisa dianggap sebagai anak panah). Bentuk umumnya adalah
sebagai berikut:
$nama_objek->nama_anggota
Misalkan untuk mengakses field warna dari objek garis L, kodenya adalah:
$L->warna
Pada konsep non-OOP yang menggunakan record, kode di atas memiliki kesamaan dengan
kode:
$L['warna']
Sedangkan untuk mengakses metode gambar pada objek garis L, kodenya adalah:
$L->gambar();
Kode tersebut memiliki kesamaan dengan kode non-OOP berikut:
gambar_garis($L);
Dilihat dari sisi manapun cara penulisan kode menggunakan konsep OOP jauh lebih singkat
dan lebih jelas dimengerti serta lebih mudah dituliskan.
E. Objek Khusus $this
Pada konsep non-OOP setiap fungsi yang berkaitan dengan sebuah kesatuan data pasti
parameter pertamanya adalah berupa yang mewakili kesatuan data terkait, kecuali fungsi
konstruktor. Hal ini karena pada konsep non-OOP pola pikirnya adalah “melakukan sesuatu
terhadap data”, jadi setiap akan melakukan sesuatu pada data maka harus disebutkan data
mana yang akan dikenai tindakan.
Contohnya dapat dilihat pada potongan kode program berikut:
pindah_koordinat($A, 10, 0);
pindah_koordinat($B, 0, 10);
Statement pertama di atas digunakan untuk memindahkan data koordinat A ke kanan,
sementara statement kedua digunakan untuk memindahkan data koordinat B ke bawah.
Perhatikan bahwa fungsi dapat diterapkan pada dua data yang berbeda tergantung dari
argumen yang diberikan.
Pada konsep OOP, pola berpikirnya adalah “menyuruh sebuah objek untuk melakukan
sesuatu”. Oleh karena itu maka objek mana yang akan “disuruh” tidak perlu disebutkan lagi
sebagai argumen dari perintah atau fungsi yang akan digunakan. Jika hal tersebut dilakukan
di luar deklarasi class akan mudah dilakukan, seperti kode berikut yang merupakan versi
OOP dari contoh kode sebelumnya:
$A->pindah(10, 0);
$B->pindah(0, 10);
Statement di atas maksudnya adalah untuk menyuruh objek koordinat A untuk berpindah
ke kanan dan menyuruh objek koordinat B untuk berpindah ke bawah.
Sekali lagi, jika hal tersebut dilakukan di luar class dan merujuk pada satu objek tertentu,
maka tinggal sebut nama objeknya atau variabel yang menampung objek diikuti dengan
nama anggota yang mau diakses setelah operator ->. Namun jika kode pengaksesan
dilakukan di dalam class maka menjadi lain ceritanya. Kode pengaksesan anggota di dalam
class umumnya tidak digunakan untuk mengakses anggota dari objek yang spesifik, namun
ditujukan untuk semua objek yang dibuat dari class tersebut. Oleh karena itu tidak
dimungkinkan untuk merujuk pada suatu objek buatan tertentu.
Untuk keperluan tersebut, PHP menyediakan sebuah objek khusus yang bernama $this.
Objek ini dapat digunakan di dalam deklarasi metode/fungsi dalam class untuk merujuk
pada objek yang menggunakan metode itu. Kata “this” atau dalam Bahasa Indonesia “ini”
dapat diartikan sebagai “objek ini” atau lengkapnya “objek yang sedang menggunakan
metode ini”.
Sebagai contoh, misalkan jika dalam konsep non-OOP ada fungsi berikut:
fungsi pindah_koordinat(&$koordinat, $dx, $dy) {
$koordinat['x'] += $dx;
$koordinat['y'] += $dy;
}
Maka di dalam konsep OOP, parameter pertama ($koordinat) tidak perlu disebutkan dan
setiap variabel $koordinat di dalam tubuh fungsi diganti menjadi $this. Sehingga pada
konsep OOP kode programnya menjadi berikut:
class Koordinat {
...
fungsi pindah($dx, $dy) {
$this->x += $dx;
$this->y += $dy;
}
...
}
Saat metode pindah tersebut digunakan oleh objek $A sebagai berikut:
$A->pindah(100, 50);
maka secara otomatis objek $this akan merujuk pada objek $A.
F. Fungsi Konstruktor
Pada konsep non-OOP yang namanya fungsi konstruktor hanyalah sebuah fungsi yang
utamanya untuk memudahkan proses pembuatan struktur data yang diinginkan. Artinya
fungsi ini sebenarnya cenderung tidak begitu dibutuhkan untuk struktur data yang
sederhana. Sebagai contoh fungsi konstruktor untuk data koordinat berikut:
function buat_koordinat($x, $y) {
return array('x' => $x, 'y' => $y);
}
Untuk membuat data koordinat A (200, 200) menggunakan fungsi konstruktor di atas
kodenya adalah sebagai berikut:
$A = buat_koordinat(200, 200);
Tanpa fungsi konstruktor maka data yang sama dapat dibuat dengan kode berikut:
$A = array('x' => 200, 'y' => 200);
Berlawanan dengan itu, pada konsep OOP fungsi konstruktor adalah suatu keharusan.
Fungsi konstruktor biasanya digunakan untuk melakukan inisialisasi saat sebuah objek
diciptakan. Atau jika dilihat secara teknis, dalam fungsi konstruktor ini dilakukan inisialisasi
terhadap objek $this.
Dalam PHP, terutama PHP 5, fungsi konstruktor dalam class harus menggunakan nama
khusus __construct. Sementara itu daftar parameter yang digunakan secara umum sama
dengan fungsi konstruktor pada fungsi konstruktor non-OOP.
Sebagai contoh, akan dibuat fungsi konstruktor versi OOP dari contoh fungsi konstruktor
non-OOP di atas. Sebelumnya akan dibuat sedikit modifikasi terhadap contoh di atas,
dengan membuat variabel sementara yang di-return-kan oleh fungsi konstruktor, sebagai
berikut:
function buat_koordinat($x, $y) {
$koordinat = array();
$koordinat['x'] = $x;
$koordinat['y'] = $y;
return $koordinat;
}
Pada konsep OOP, tidak diperlukan untuk menciptakan variabel sementara karena sudah
disediakan objek $this yang siap dipakai dan juga tidak perlu di-return-kan. Berikut ini
kode program untuk fungsi konstruktor versi OOP:
class Koordinat {
...
function __construct($x, $y) {
$this->x = $x;
$this->y = $y;
}
...
}
G. Pembuatan Objek atau Instance
Dalam konsep OOP di PHP, untuk membuat sebuah objek dari class tertentu menggunakan
operator new, yang dalam Bahasa Indonesia artinya adalah “baru”, yang bermakna
“membuat objek baru”. Bentuk umumnya adalah sebagai berikut:
$nama_objek = new NamaClass(daftar argumen);
Sebagai contoh kode untuk membuat objek Koordinat dengan nama A di (200, 300)
menggunakan kode berikut:
$A = new Koordinat(200, 300);
Kode tersebut serupa dengan versi non-OOP berikut (meskipun berbeda pada tipe data yang
dihasilkan):
$A = buat_koordinat(200, 300);
TERMINOLOGI DALAM OOP
A. Encapsulation
Istilah encapsulation atau pengkapsulan mengacu pada penyatuan antara data dan metode
atau fungsi ke dalam sebuah bungkus yang disebut sebagai object. Selain itu ada juga yang
mendefiniskannya sebagai pembungkusan data dengan metode-metode pengaksesnya.
B. Information Hiding
Pada definisi kedua dari encapsulation di atas, dikatakan bahwa data dibungkus
menggunakan metode-metode yang digunakan untuk mengolahnya. Lebih lanjut lagi,
dengan adanya pembungkusan ini maka seolah-olah data disembunyikan dari dunia luar,
sehingga tidak bisa diakses secara langsung melainkan harus menggunakan metode-metode
yang membungkusnya. Konsep penyembunyian data dari dunia luar ini disebut sebagai
information hiding. Tujuan utamanya adalah untuk menjaga konsistensi data, karena data
tidak dapat diubah sesuka hati.
C. Class, Object dan Instance
Bangunan utama dari konsep OOP adalah sebuah entiti yang dinamakan sebagai “class”.
Class didefinisikan sebagai sebuah konsep atau gagasan yang menggambarkan data apa saja
yang dimiliki dan tindakan apa saja yang dapat dilakukan atau dikenakan pada sekelompok
objek yang sejenis. Class juga dapat dianggap sebagai gambaran atau deskripsi dari suatu
objek. Oleh karena itu, class merupakan sebuah konsep abstrak yang belum dapat
digunakan secara langsung kecuali sudah diwujudkan dalam bentuk yang nyata.
Perwujudan nyata dari class yang siap digunakan itulah yang disebut sebagai “object”.
Setelah berwujud sebagai object inilah maka baru dapat dilakukan akses terhadap data yang
dimuatnya dan juga dapat disuruh untuk melakukan suatu tindakan atau pekerjaan. Untuk
menekankan bahwa sebuah object merupakan implementasi nyata dari class, maka object
juga dikenal dengan istilah “instance”, yang bisa diterjemahkan sebagai “perwujudan”.
Jika diambil contoh pada kehidupan nyata, contoh class adalah: Mahasiswa, Dosen, Meja,
Kursi, Mobil, Hewan, Burung, Kucing, dan sebagainya. Sementara itu contoh objek adalah:
Saipul, Unyil, Paijo, kursi yang diduduki Sigit, meja di depan Ririn, mobil ferari milik Pak
Badu, burungnya Si Unyil, kucing hitam kepunyaan Andi, dan lain sebagainya. Dapat dilihat
di sini, bahwa class mewakili sesuatu yang berupa konsep tanpa menunjuk objek nyatanya,
sementara object langsung menunjuk pada suatu yang nyata.
D. Member, Field dan Method
Setiap data dan fungsi yang termuat di dalam sebuah class dinamakan sebagai member atau
anggota dari class yang bersangkutan. Anggota yang berupa data dinamakan sebagai field
atau atribut atau properti dari class. Sedangkan anggota yang berupa fungsi dinamakan
sebagai method atau metode dari class.
Sebagai contoh, sebuah class Mahasiswa memiliki field semacam: NIM, nama, angkatan,
program studi, jenis kelamin, umur, dll. Selain itu class Mahasiswa juga memiliki metode
semacam: mendaftar ulang (heregistrasi), mengisi KRS, mengikuti ujian, melakukan
presensi, membuat tugas akhir, dll.
E. Inheritance
Salah satu keunggulan OOP dalam hal code reuse (penggunaan kembali kode program yang
sudah ada sebelumnya) yang tidak ada dalam konsep non-OOP adalah adanya konsep
inheritance atau pewarisan. Dengan konsep ini maka sebuah class dapat diturunkan dari
class lain yang lebih umum dan juga dapat menurunkan class-class yang lebih spesifik. Setiap
ada penurunan class, maka semua sifat (anggota) yang ada pada class yang diturunkan akan
otomatis dimiliki atau diwarisi oleh class turunannya tanpa harus menulis ulang kode
programnya.
Sebagai contoh, dari class Bidang dapat diturunkan berbagai macam class yang
merepresentasikan bidang-bidang tertentu, semacam class SegiEmpat, SegiTiga, Lingkaran,
Elips, dll. Demikian juga dari class SegiEmpat mungkin dapat diturunkan lebih lanjut menjadi
class PersegiPanjang, BujurSangkar, BelahKetupat, JajaranGenjang, LayangLayang, dll. Opsi
lainnya adalah bahwa class BujurSangkar adalah turunan dari class PersegiPanjang, karena
sebuah bujur sangkar merupakan bentuk khusus dari sebuah persegi panjang, dimana
panjang dan lebarnya sama. Dari situ kemudian dapat disimpulkan bahwa class
BelahKetupat adalah turunan dari class LayangLayang dan class Lingkaran merupakan
turunan dari class Elips.
Proses penurunan atau sering disebut sebagai subclassing ini membentuk sebuah pohon
hirarki pewarisan atau dinamakan inheritance tree. Bentuk hirarkinya mirip dengan hirarki
silsilah (namun tanpa perkawinan), sehingga istilah-istilah yang ada pada silsilah pun
digunakan di sini, semacam: orang tua (parent), anak (child), leluhur (anchestor), dan
keturunan (descendant). Berikut ini adalah gambaran dari hirarki pewarisan dari contoh di
atas (urutan dari kiri ke kanan tidak penting):
Bidang
SegiEmpat
PersegiPanjang
BujurSangkar
JajaranGenjang LayangLayang
BelahKetupat
SegiTiga Elips
Lingkaran
F. Subclass, Superclass, Descendant dan Anchestor
Subclass adalah class yang menjadi turunan langsung dari suatu class lain, dinamakan juga
sebagai derived class atau child class. Superclass adalah class yang menurunkan langsung
class lain, sering dinamakan juga sebagai base class atau parent class. Descendant atau
keturunan adalah class-class yang berada di bawah suatu class pada garis hirarki inheritance.
Anchestor atau leluhur adalah clas-class yang berada segaris di atas hirarki inheritance.
Sebuah sublass pastilah descendant namun tidak selalu untuk sebaliknya. Sebuah superclass
pasti termasuk anchestor, namun juga tidak selalu berlaku untuk sebaliknya. Subclass dari
suatu class bisa banyak, namun superclass atau parent class-nya pasti hanya satu.
Konsep satu parent ini dianut oleh kebanyakan sistem OOP yang ada saat ini, dan
dinamakan sebagai konsep single inheritance. Konsep multiple inheritance, yang
mengijinkan penurunan class dari beberapa class sekaligus, juga ada namun tidak banyak
yang menganutnya.
Dari contoh di bagian sebelumnya, dapat dikatakan bahwa class Bidang merupakan
superclass dari class SegiEmpat, SegiTiga dan Elips. Sebaliknya, class SegiEmpat, SegiTiga dan
Elips adalah subclass dari class Bidang. Demikian juga dapat dikatakan bahwa class Bidang
merupakan anchestor dari semua class yang disebutkan disitu, termasuk SegiEmpat,
SegiTiga, Elips, Lingkaran, BujurSangkar, JajaranGenjang, dll. Sebaliknya, semua class
tersebut merupakan descendant dari class Bidang.
Class SegiEmpat memiliki 3 subclass dan 5 descendant. Class BujurSangkar memiliki 3
anchestor, yaitu: class PersegiPanjang, SegiEmpat, dan Bidang. Class JajaranGenjang dan
class SegiTiga BUKANLAH anchestor dari class BujurSangkar. Demikian juga, class Lingkaran
BUKANLAH merupakan descendant dari class SegiEmpat.
G. Polymorphism
Salah satu keunggulan dari konsep OOP adalah keberadaan polymorphism, yaitu
kemampuan menangani objek yang berasal dari class yang berbeda menggunakan suatu
antarmuka yang seragam. Dengan kata lain, polymorphism memungkinkan sebuah objek
yang sama pada waktu yang berbeda dianggap berasal dari dua class yang berbeda, lalu
melakukan hal yang sama, namun hasilnya bisa jadi berbeda.
Sebagai contoh, sebuah object dari class SegiEmpat, satu saat dianggap sebagai object dari
class BujurSangkar (boleh karena sebuah bujur sangkar juga merupakan segi empat) dan
saat lain dianggap sebagai object dari class JajaranGenjang (boleh juga karena jajaran
genjang juga segi empat). Ketika sama-sama disuruh menghitung luasnya, maka caranya
sama (menggunakan metode yang sama) namun hasilnya bisa jadi berbeda.
H. Constructor dan Destructor
Selain konstruktor, dalam OOP juga dikenal istilah destruktor, yang merupakan kebalikan
dari konstruktor. Konstruktor berasal dari kata “construct” yang artinya “membangun”, dan
memang digunakan untuk membangun sebuah object dari class tertentu. Biasanya di dalam
konstruktor berisi kode-kode yang digunakan untuk menginisialisasi nilai-nilai awal yang
dimiliki suatu object yang akan diciptakan. Sedangkan destruktor berasal dari kata
“destruct” yang berarti “menghancurkan”, karena memang tugasnya adalah untuk
menghancurkan atau menghapus object dari memory. Pada PHP, destruktor tidak terlalu
banyak digunakan karena PHP “berbaik hati” untuk menghapus sendiri object-object yang
sudah tidak diperlukan lagi. Namun, jika memang destruktor digunakan, maka secara umum
di dalamnya memuat kode-kode finalisasi saat object hendak dihapus dari memory.
Pada PHP, terutama PHP 5, konstruktor dibuat menggunakan sebuah metode khusus yang
bernama __construct dan destruktor menggunakan metode __destruct. Berikut ini
contoh class yang menggunakan konstruktor dan destruktor:
class TextFile {
private $filename;
private $fp;
public function __construct($filename) {
$this->filename = $filename;
$this->fp = fopen($this->filename, 'r');
}
public function __destruct() {
fclose($this->fp);
}
...
}
$f = new TextFile();
...
unset($f);
Pada contoh di atas, konstruktor digunakan untuk membuka file (fopen) dan destruktor
digunakan untuk menutup file (fclose). Konstruktor dipanggil atau dijalankan saat sebuah
object dibuat menggunakan operator new. Sedangkan destruktor dipanggil atau dijalankan
kapan pun sebuah object dihapus dari memory, baik disengaja (menggunakan perintah
unset) maupun saat object sudah tidak direferensi lagi, atau saat program berakhir.
I. Member Visibility, Public atau Private
Member visibility atau kenampakan anggota adalah konsep yang melanjutkan konsep
encapsulation dan information hiding yang sudah dijelaskan di atas. Seperti telah dituliskan
sebelumnya, bahwa sebuah field seharusnya tidak boleh diakses secara sembarangan dan
dilindungi dari akses dunia luar. Demikian juga terkadang metode-metode yang menangani
proses internal yang seharusnya tidak diekspos ke dunia luar sebaiknya dilindungi juga.
Untuk itu maka field dan metode tersebut harus dibuat tidak “nampak” dari luar class.
Konsep inilah kemudian yang memunculkan istilah anggota private (pribadi) dan anggota
publik. Anggota private seharusnya dilindungi supaya tidak diakses sembarangan,
sedangkan yang namanya anggota publik boleh diakses dari luar. Sebenarnya masih ada
satu lagi jenis pengaksesan yang dinamakan sebagai protected (diproteksi) yang
tingkatannya berada di antara publik dan private.
Ketiga konsep visibility ini diwakili oleh keyword private, protected dan public yang
dituliskan di depan nama field (menggantikan keyword var) atau di depan deklarasi fungsi
(metode). Sebagai contoh dapat dilihat pada potongan program berikut:
class Circle {
private $radius;
public function __construct($r) {
$this->radius = $r;
}
}
Dapat dilihat pada potongan program tersebut bahwa class Circle memiliki sebuah field
privat dengan nama $radius dan metode publik yang berupa konstruktor. Pada umumnya
yang namanya konstruktor selalu bersifat publik.
J. Getter dan Setter
Mengacu pada konsep encapsulation dan information hiding, maka setiap field seharusnya
dibuat sebagai anggota privat. Jika konsep tersebut diterapkan maka setiap field menjadi
benar-benar tidak dapat diakses dari luar, baik dibaca maupun dimodifikasi nilainya. Untuk
dapat mengaksesnya maka diperlukan metode yang dirancang untuk membaca atau
memodifikasi nilai dari field. Metode semacam ini dinamakan sebagai getter dan setter.
Metode getter (dari kata “get”) ditujukan untuk mengambil atau membaca nilai suatu field.
Sedangkan metode setter (dari kata “set”) ditujukan untuk menge-set atau mengubah nilai
suatu field. Jika suatu field dirancang agar dapat dibaca dan ditulis (dimodifikasi) maka
untuk field itu dibuatlah metode getter dan setter-nya. Namun jika suatu field dirancang
supaya bersifat “read-only” atau tidak dapat diubah sembarangan nilainya maka cukup
dibuat metode getter-nya.
Berikut ini contoh class yang menggunakan getter dan setter:
class Circle {
private $radius;
private $area;
private $circumference;
public function __construct($r) {
$this->set_radius($r);
}
private function calculate() {
$this->area = M_PI*$this->radius*$this->radius;
$this->circumference = 2*M_PI*$this->radius;
}
public function get_radius() {
return $this->radius;
}
public function set_radius($r) {
$this->radius = $r;
$this->calculate();
}
public function get_area() {
return $this->area;
}
public function get_circumference() {
return $this->circumference;
}
}
Pada class Circle di atas didefinisikan tiga buah field privat, yaitu $radius (jari-jari), $area
(luas), dan $circumference (keliling). Selain itu didefinisikan juga sebuah metode internal
(privat) yang digunakan untuk menghitung luas dan keliling, yaitu metode calculate. Field
$radius merupakan field yang dapat dimodifikasi karena memiliki getter dan setter,
sementara field $area dan $circumference adalah field yang bersifat read-only, karena
hanya memiliki getter saja.

More Related Content

What's hot

Pengantar Pemrograman Berorientasi Objek
Pengantar Pemrograman Berorientasi ObjekPengantar Pemrograman Berorientasi Objek
Pengantar Pemrograman Berorientasi Objekwawanext01
 
Tugas Praktikum Pemrograman Berorientasi Objek
Tugas Praktikum Pemrograman Berorientasi ObjekTugas Praktikum Pemrograman Berorientasi Objek
Tugas Praktikum Pemrograman Berorientasi ObjekPungkas Soebarkah
 
Algoritma dan Struktur Data
Algoritma dan Struktur DataAlgoritma dan Struktur Data
Algoritma dan Struktur DataAs Faizin
 
Laporan praktikum modul 4 (e-rd notasi martin)
Laporan praktikum modul 4 (e-rd notasi martin)Laporan praktikum modul 4 (e-rd notasi martin)
Laporan praktikum modul 4 (e-rd notasi martin)Devi Apriansyah
 
Laporan praktikum modul 3 (erd notasi peterchen) -
Laporan praktikum modul 3 (erd notasi peterchen) -Laporan praktikum modul 3 (erd notasi peterchen) -
Laporan praktikum modul 3 (erd notasi peterchen) -Devi Apriansyah
 
Fathoni m bahan ajar_if2018_prak.struktur data
Fathoni m bahan ajar_if2018_prak.struktur dataFathoni m bahan ajar_if2018_prak.struktur data
Fathoni m bahan ajar_if2018_prak.struktur dataSTMIK
 
Panduan Java sebagai Pemrograman Berorientasi Objek dan Implementasi Thread
Panduan Java sebagai Pemrograman Berorientasi Objek dan Implementasi ThreadPanduan Java sebagai Pemrograman Berorientasi Objek dan Implementasi Thread
Panduan Java sebagai Pemrograman Berorientasi Objek dan Implementasi ThreadHary HarysMatta
 
Pertemuan 1 konsep dasar pemrograman berorientasi objek
Pertemuan 1 konsep dasar pemrograman berorientasi objekPertemuan 1 konsep dasar pemrograman berorientasi objek
Pertemuan 1 konsep dasar pemrograman berorientasi objekI Putu Arya Dharmaadi
 
03 enkapsulasi
03 enkapsulasi03 enkapsulasi
03 enkapsulasiKuliahKita
 
Modul Praktikum Pemrograman Berorientasi Objek (Chap.7)
Modul Praktikum Pemrograman Berorientasi Objek (Chap.7)Modul Praktikum Pemrograman Berorientasi Objek (Chap.7)
Modul Praktikum Pemrograman Berorientasi Objek (Chap.7)Debby Ummul
 
1 Mengenal Pemrograman Berorientsi Objek.pptx
1 Mengenal Pemrograman Berorientsi Objek.pptx1 Mengenal Pemrograman Berorientsi Objek.pptx
1 Mengenal Pemrograman Berorientsi Objek.pptxAlbertusHariAfandi
 
Pemrograman Berorientasi Objek "Pengenalan Dasar Pemrograman JAVA"
Pemrograman Berorientasi Objek "Pengenalan Dasar Pemrograman JAVA"Pemrograman Berorientasi Objek "Pengenalan Dasar Pemrograman JAVA"
Pemrograman Berorientasi Objek "Pengenalan Dasar Pemrograman JAVA"Asnita Meydelia C K
 
Laporan Modul 1 Praktikum Pemrograman Berbasis Objek
Laporan Modul 1 Praktikum Pemrograman Berbasis ObjekLaporan Modul 1 Praktikum Pemrograman Berbasis Objek
Laporan Modul 1 Praktikum Pemrograman Berbasis ObjekKuncara Laksana
 
Java (Netbeans) - Class, Constructor, Object (Object Oriented Programming)
Java (Netbeans) - Class, Constructor, Object (Object Oriented Programming)Java (Netbeans) - Class, Constructor, Object (Object Oriented Programming)
Java (Netbeans) - Class, Constructor, Object (Object Oriented Programming)Melina Krisnawati
 

What's hot (19)

Pengantar Pemrograman Berorientasi Objek
Pengantar Pemrograman Berorientasi ObjekPengantar Pemrograman Berorientasi Objek
Pengantar Pemrograman Berorientasi Objek
 
3. OOP Java
3. OOP Java3. OOP Java
3. OOP Java
 
Tugas Praktikum Pemrograman Berorientasi Objek
Tugas Praktikum Pemrograman Berorientasi ObjekTugas Praktikum Pemrograman Berorientasi Objek
Tugas Praktikum Pemrograman Berorientasi Objek
 
Algoritma dan Struktur Data
Algoritma dan Struktur DataAlgoritma dan Struktur Data
Algoritma dan Struktur Data
 
Laporan praktikum modul 4 (e-rd notasi martin)
Laporan praktikum modul 4 (e-rd notasi martin)Laporan praktikum modul 4 (e-rd notasi martin)
Laporan praktikum modul 4 (e-rd notasi martin)
 
Laporan praktikum modul 3 (erd notasi peterchen) -
Laporan praktikum modul 3 (erd notasi peterchen) -Laporan praktikum modul 3 (erd notasi peterchen) -
Laporan praktikum modul 3 (erd notasi peterchen) -
 
Fathoni m bahan ajar_if2018_prak.struktur data
Fathoni m bahan ajar_if2018_prak.struktur dataFathoni m bahan ajar_if2018_prak.struktur data
Fathoni m bahan ajar_if2018_prak.struktur data
 
Panduan Java sebagai Pemrograman Berorientasi Objek dan Implementasi Thread
Panduan Java sebagai Pemrograman Berorientasi Objek dan Implementasi ThreadPanduan Java sebagai Pemrograman Berorientasi Objek dan Implementasi Thread
Panduan Java sebagai Pemrograman Berorientasi Objek dan Implementasi Thread
 
Pertemuan 1 konsep dasar pemrograman berorientasi objek
Pertemuan 1 konsep dasar pemrograman berorientasi objekPertemuan 1 konsep dasar pemrograman berorientasi objek
Pertemuan 1 konsep dasar pemrograman berorientasi objek
 
03 enkapsulasi
03 enkapsulasi03 enkapsulasi
03 enkapsulasi
 
BAB IV Analisis TB
BAB IV Analisis TBBAB IV Analisis TB
BAB IV Analisis TB
 
Modul algoritma dan struktur data i
Modul algoritma dan struktur data iModul algoritma dan struktur data i
Modul algoritma dan struktur data i
 
Modul Praktikum Pemrograman Berorientasi Objek (Chap.7)
Modul Praktikum Pemrograman Berorientasi Objek (Chap.7)Modul Praktikum Pemrograman Berorientasi Objek (Chap.7)
Modul Praktikum Pemrograman Berorientasi Objek (Chap.7)
 
1 Mengenal Pemrograman Berorientsi Objek.pptx
1 Mengenal Pemrograman Berorientsi Objek.pptx1 Mengenal Pemrograman Berorientsi Objek.pptx
1 Mengenal Pemrograman Berorientsi Objek.pptx
 
Pemrograman Berorientasi Objek "Pengenalan Dasar Pemrograman JAVA"
Pemrograman Berorientasi Objek "Pengenalan Dasar Pemrograman JAVA"Pemrograman Berorientasi Objek "Pengenalan Dasar Pemrograman JAVA"
Pemrograman Berorientasi Objek "Pengenalan Dasar Pemrograman JAVA"
 
Laporan Modul 1 Praktikum Pemrograman Berbasis Objek
Laporan Modul 1 Praktikum Pemrograman Berbasis ObjekLaporan Modul 1 Praktikum Pemrograman Berbasis Objek
Laporan Modul 1 Praktikum Pemrograman Berbasis Objek
 
Java (Netbeans) - Class, Constructor, Object (Object Oriented Programming)
Java (Netbeans) - Class, Constructor, Object (Object Oriented Programming)Java (Netbeans) - Class, Constructor, Object (Object Oriented Programming)
Java (Netbeans) - Class, Constructor, Object (Object Oriented Programming)
 
Normalisasi Database
Normalisasi DatabaseNormalisasi Database
Normalisasi Database
 
Modul Object Oriented Programming
Modul Object Oriented ProgrammingModul Object Oriented Programming
Modul Object Oriented Programming
 

Similar to OOP BINTANG

Materi-1-sd-2-Pengenalan-PBO.pptx
Materi-1-sd-2-Pengenalan-PBO.pptxMateri-1-sd-2-Pengenalan-PBO.pptx
Materi-1-sd-2-Pengenalan-PBO.pptxHallendAfroni1
 
Pengantar Pengembangan Sistem Berorientasi Objek.pptx
Pengantar Pengembangan Sistem Berorientasi Objek.pptxPengantar Pengembangan Sistem Berorientasi Objek.pptx
Pengantar Pengembangan Sistem Berorientasi Objek.pptxDzulFadliRahman1
 
0-Pengantar Pemrograman lanjut.pptx
0-Pengantar Pemrograman lanjut.pptx0-Pengantar Pemrograman lanjut.pptx
0-Pengantar Pemrograman lanjut.pptxBom Bom
 
Uts pemrograman berbasis obj
Uts pemrograman berbasis objUts pemrograman berbasis obj
Uts pemrograman berbasis objJulianGultom2
 
Pertemuan 2 Konsep Dasar Pemrograman OOP
Pertemuan 2 Konsep Dasar Pemrograman OOPPertemuan 2 Konsep Dasar Pemrograman OOP
Pertemuan 2 Konsep Dasar Pemrograman OOPProdiTIPenusa
 
Pengenalan OOP
Pengenalan OOPPengenalan OOP
Pengenalan OOPdaffa12
 
APBO Pertemuan Rev01.pptx
APBO Pertemuan Rev01.pptxAPBO Pertemuan Rev01.pptx
APBO Pertemuan Rev01.pptxSamso20
 
Tugas 4 (individu) rekayasa web 0316
Tugas 4 (individu) rekayasa web 0316Tugas 4 (individu) rekayasa web 0316
Tugas 4 (individu) rekayasa web 0316septianarul
 
Pengertian pemrograman terstruktur
Pengertian pemrograman terstrukturPengertian pemrograman terstruktur
Pengertian pemrograman terstrukturPutri Sari
 
PRESENTASI DATA ANALYS.pptx
PRESENTASI DATA ANALYS.pptxPRESENTASI DATA ANALYS.pptx
PRESENTASI DATA ANALYS.pptxEdiSum1
 
Pemrogaman Visual Basic.NET (Modul 4)
Pemrogaman Visual Basic.NET (Modul 4)Pemrogaman Visual Basic.NET (Modul 4)
Pemrogaman Visual Basic.NET (Modul 4)Materi Kuliah Online
 
Tugas resume aplikasi internet
Tugas resume aplikasi internetTugas resume aplikasi internet
Tugas resume aplikasi internetReyan Yui
 
2019 Format Article Tugas ( EKA MEI RISTIANTI PBD ).pdf
2019 Format Article Tugas ( EKA MEI RISTIANTI   PBD ).pdf2019 Format Article Tugas ( EKA MEI RISTIANTI   PBD ).pdf
2019 Format Article Tugas ( EKA MEI RISTIANTI PBD ).pdfssuser6c0737
 
Abu yanto tugas resume aplinet
Abu yanto tugas resume aplinetAbu yanto tugas resume aplinet
Abu yanto tugas resume aplinetabuyanto
 
Materi 1 - Konsep PBO.pptx
Materi 1 - Konsep PBO.pptxMateri 1 - Konsep PBO.pptx
Materi 1 - Konsep PBO.pptxplgbk
 
Modul oop with java application mauludin
Modul oop with java application   mauludinModul oop with java application   mauludin
Modul oop with java application mauludinMauludin Ahmad
 
9. sistem terdistribusi (dhaa9)
9. sistem terdistribusi (dhaa9)9. sistem terdistribusi (dhaa9)
9. sistem terdistribusi (dhaa9)khalghy
 

Similar to OOP BINTANG (20)

Materi-1-sd-2-Pengenalan-PBO.pptx
Materi-1-sd-2-Pengenalan-PBO.pptxMateri-1-sd-2-Pengenalan-PBO.pptx
Materi-1-sd-2-Pengenalan-PBO.pptx
 
Pengantar Pengembangan Sistem Berorientasi Objek.pptx
Pengantar Pengembangan Sistem Berorientasi Objek.pptxPengantar Pengembangan Sistem Berorientasi Objek.pptx
Pengantar Pengembangan Sistem Berorientasi Objek.pptx
 
0-Pengantar Pemrograman lanjut.pptx
0-Pengantar Pemrograman lanjut.pptx0-Pengantar Pemrograman lanjut.pptx
0-Pengantar Pemrograman lanjut.pptx
 
Uts pemrograman berbasis obj
Uts pemrograman berbasis objUts pemrograman berbasis obj
Uts pemrograman berbasis obj
 
Pertemuan 2 Konsep Dasar Pemrograman OOP
Pertemuan 2 Konsep Dasar Pemrograman OOPPertemuan 2 Konsep Dasar Pemrograman OOP
Pertemuan 2 Konsep Dasar Pemrograman OOP
 
Pengenalan OOP
Pengenalan OOPPengenalan OOP
Pengenalan OOP
 
APBO Pertemuan Rev01.pptx
APBO Pertemuan Rev01.pptxAPBO Pertemuan Rev01.pptx
APBO Pertemuan Rev01.pptx
 
Tugas 4 (individu) rekayasa web 0316
Tugas 4 (individu) rekayasa web 0316Tugas 4 (individu) rekayasa web 0316
Tugas 4 (individu) rekayasa web 0316
 
Object oriented programming (oop)
Object oriented programming (oop)Object oriented programming (oop)
Object oriented programming (oop)
 
Pengertian pemrograman terstruktur
Pengertian pemrograman terstrukturPengertian pemrograman terstruktur
Pengertian pemrograman terstruktur
 
PRESENTASI DATA ANALYS.pptx
PRESENTASI DATA ANALYS.pptxPRESENTASI DATA ANALYS.pptx
PRESENTASI DATA ANALYS.pptx
 
Pemrogaman Visual Basic.NET (Modul 4)
Pemrogaman Visual Basic.NET (Modul 4)Pemrogaman Visual Basic.NET (Modul 4)
Pemrogaman Visual Basic.NET (Modul 4)
 
Tugas resume aplikasi internet
Tugas resume aplikasi internetTugas resume aplikasi internet
Tugas resume aplikasi internet
 
2019 Format Article Tugas ( EKA MEI RISTIANTI PBD ).pdf
2019 Format Article Tugas ( EKA MEI RISTIANTI   PBD ).pdf2019 Format Article Tugas ( EKA MEI RISTIANTI   PBD ).pdf
2019 Format Article Tugas ( EKA MEI RISTIANTI PBD ).pdf
 
Tugas 4 rekweb
Tugas 4 rekwebTugas 4 rekweb
Tugas 4 rekweb
 
Abu yanto tugas resume aplinet
Abu yanto tugas resume aplinetAbu yanto tugas resume aplinet
Abu yanto tugas resume aplinet
 
Materi 1 - Konsep PBO.pptx
Materi 1 - Konsep PBO.pptxMateri 1 - Konsep PBO.pptx
Materi 1 - Konsep PBO.pptx
 
Modul oop with java application mauludin
Modul oop with java application   mauludinModul oop with java application   mauludin
Modul oop with java application mauludin
 
class method object
class method objectclass method object
class method object
 
9. sistem terdistribusi (dhaa9)
9. sistem terdistribusi (dhaa9)9. sistem terdistribusi (dhaa9)
9. sistem terdistribusi (dhaa9)
 

More from Jamil Jamil

Tonyfortunatoiperfquickstart 1212633021928769-8
Tonyfortunatoiperfquickstart 1212633021928769-8Tonyfortunatoiperfquickstart 1212633021928769-8
Tonyfortunatoiperfquickstart 1212633021928769-8Jamil Jamil
 
Skripsi perancangan-sistem-informasi-pendataan-biodata-mahasiswa-pada-fakulta...
Skripsi perancangan-sistem-informasi-pendataan-biodata-mahasiswa-pada-fakulta...Skripsi perancangan-sistem-informasi-pendataan-biodata-mahasiswa-pada-fakulta...
Skripsi perancangan-sistem-informasi-pendataan-biodata-mahasiswa-pada-fakulta...Jamil Jamil
 
Skripsi perancangan-sistem-informasi-pendataan-biodata-mahasiswa-pada-fakulta...
Skripsi perancangan-sistem-informasi-pendataan-biodata-mahasiswa-pada-fakulta...Skripsi perancangan-sistem-informasi-pendataan-biodata-mahasiswa-pada-fakulta...
Skripsi perancangan-sistem-informasi-pendataan-biodata-mahasiswa-pada-fakulta...Jamil Jamil
 
Skripsi universitas paramadina_jakarta_fitriyani_kepemimpinan_perempuan_dalam...
Skripsi universitas paramadina_jakarta_fitriyani_kepemimpinan_perempuan_dalam...Skripsi universitas paramadina_jakarta_fitriyani_kepemimpinan_perempuan_dalam...
Skripsi universitas paramadina_jakarta_fitriyani_kepemimpinan_perempuan_dalam...Jamil Jamil
 
Silabus disain pemrogramanberorientasiobjek_iki10830
Silabus disain pemrogramanberorientasiobjek_iki10830Silabus disain pemrogramanberorientasiobjek_iki10830
Silabus disain pemrogramanberorientasiobjek_iki10830Jamil Jamil
 
Publikasi 09.22.1115
Publikasi 09.22.1115Publikasi 09.22.1115
Publikasi 09.22.1115Jamil Jamil
 
Publikasi 08.12.3175 2
Publikasi 08.12.3175 2Publikasi 08.12.3175 2
Publikasi 08.12.3175 2Jamil Jamil
 
Publikasi 08.12.3175
Publikasi 08.12.3175Publikasi 08.12.3175
Publikasi 08.12.3175Jamil Jamil
 
Naskah publikasi 09.11.2727
Naskah publikasi 09.11.2727Naskah publikasi 09.11.2727
Naskah publikasi 09.11.2727Jamil Jamil
 
Modul training-php-rc1-u3
Modul training-php-rc1-u3Modul training-php-rc1-u3
Modul training-php-rc1-u3Jamil Jamil
 
M odul 5 komponen dasar visual basic 2
M odul 5 komponen dasar visual basic 2M odul 5 komponen dasar visual basic 2
M odul 5 komponen dasar visual basic 2Jamil Jamil
 
M odul 5 komponen dasar visual basic
M odul 5 komponen dasar visual basicM odul 5 komponen dasar visual basic
M odul 5 komponen dasar visual basicJamil Jamil
 
Membuat laporan berbentuk khs 2
Membuat laporan berbentuk khs 2Membuat laporan berbentuk khs 2
Membuat laporan berbentuk khs 2Jamil Jamil
 
Membuat laporan berbentuk khs
Membuat laporan berbentuk khsMembuat laporan berbentuk khs
Membuat laporan berbentuk khsJamil Jamil
 
Junipermplsbestpractice part1-100717041724-phpapp02
Junipermplsbestpractice part1-100717041724-phpapp02Junipermplsbestpractice part1-100717041724-phpapp02
Junipermplsbestpractice part1-100717041724-phpapp02Jamil Jamil
 

More from Jamil Jamil (20)

Tonyfortunatoiperfquickstart 1212633021928769-8
Tonyfortunatoiperfquickstart 1212633021928769-8Tonyfortunatoiperfquickstart 1212633021928769-8
Tonyfortunatoiperfquickstart 1212633021928769-8
 
Skripsi perancangan-sistem-informasi-pendataan-biodata-mahasiswa-pada-fakulta...
Skripsi perancangan-sistem-informasi-pendataan-biodata-mahasiswa-pada-fakulta...Skripsi perancangan-sistem-informasi-pendataan-biodata-mahasiswa-pada-fakulta...
Skripsi perancangan-sistem-informasi-pendataan-biodata-mahasiswa-pada-fakulta...
 
Skripsi perancangan-sistem-informasi-pendataan-biodata-mahasiswa-pada-fakulta...
Skripsi perancangan-sistem-informasi-pendataan-biodata-mahasiswa-pada-fakulta...Skripsi perancangan-sistem-informasi-pendataan-biodata-mahasiswa-pada-fakulta...
Skripsi perancangan-sistem-informasi-pendataan-biodata-mahasiswa-pada-fakulta...
 
Skripsi universitas paramadina_jakarta_fitriyani_kepemimpinan_perempuan_dalam...
Skripsi universitas paramadina_jakarta_fitriyani_kepemimpinan_perempuan_dalam...Skripsi universitas paramadina_jakarta_fitriyani_kepemimpinan_perempuan_dalam...
Skripsi universitas paramadina_jakarta_fitriyani_kepemimpinan_perempuan_dalam...
 
Silabus disain pemrogramanberorientasiobjek_iki10830
Silabus disain pemrogramanberorientasiobjek_iki10830Silabus disain pemrogramanberorientasiobjek_iki10830
Silabus disain pemrogramanberorientasiobjek_iki10830
 
Publikasi 09.22.1115
Publikasi 09.22.1115Publikasi 09.22.1115
Publikasi 09.22.1115
 
Publikasi 08.12.3175 2
Publikasi 08.12.3175 2Publikasi 08.12.3175 2
Publikasi 08.12.3175 2
 
Publikasi 08.12.3175
Publikasi 08.12.3175Publikasi 08.12.3175
Publikasi 08.12.3175
 
Prak 1
Prak 1Prak 1
Prak 1
 
Paper ta
Paper taPaper ta
Paper ta
 
Naskah publikasi 09.11.2727
Naskah publikasi 09.11.2727Naskah publikasi 09.11.2727
Naskah publikasi 09.11.2727
 
Modul training-php-rc1-u3
Modul training-php-rc1-u3Modul training-php-rc1-u3
Modul training-php-rc1-u3
 
Modul 2
Modul 2Modul 2
Modul 2
 
M odul 5 komponen dasar visual basic 2
M odul 5 komponen dasar visual basic 2M odul 5 komponen dasar visual basic 2
M odul 5 komponen dasar visual basic 2
 
M odul 5 komponen dasar visual basic
M odul 5 komponen dasar visual basicM odul 5 komponen dasar visual basic
M odul 5 komponen dasar visual basic
 
Membuat laporan berbentuk khs 2
Membuat laporan berbentuk khs 2Membuat laporan berbentuk khs 2
Membuat laporan berbentuk khs 2
 
Membuat laporan berbentuk khs
Membuat laporan berbentuk khsMembuat laporan berbentuk khs
Membuat laporan berbentuk khs
 
Makalah seminar
Makalah seminarMakalah seminar
Makalah seminar
 
Jurnaltoninetti
JurnaltoninettiJurnaltoninetti
Jurnaltoninetti
 
Junipermplsbestpractice part1-100717041724-phpapp02
Junipermplsbestpractice part1-100717041724-phpapp02Junipermplsbestpractice part1-100717041724-phpapp02
Junipermplsbestpractice part1-100717041724-phpapp02
 

OOP BINTANG

  • 1. MODUL MATAKULIAH Pemrograman Berorientasi Objek CHOERUN ASNAWI, S.KOM. SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER (STMIK) JENDERAL ACHMAD YANI YOGYAKARTA 2012
  • 2. PENDAHULUAN A. Pengertian Pemrograman berorientasi pada objek atau Object-Oriented Programming (OOP) merupakan suatu paradigma pemrograman yang termasuk ke dalam ketegori pemrograman imperatif. Pemrograman imperatif sendiri adalah suatu paradigma pemrograman yang mendeskripsikan program sebagai suatu urutan atau alur langkah-langkah yang harus dilakukan untuk memecahkan suatu masalah. Berlawanan dari pemrograman imperatif adalah pemrograman deklaratif, yang mendeskripsikan program sebagai sekumpulan aturan yang digunakan untuk mendeskripsikan masalah. Konsep OOP berbeda dari konsep pemrograman prosedural, meskipun sama-sama bersifat imperatif. Pada pemrograman prosedural, programmer berpikir bagaimana mengolah data yang ada dengan menggunakan instruksi-instruksi yang ada. Di sini programmer melihat data sebagai objek PASIF yang harus dikenai tindakan agar dapat menghasilkan output yang diinginkan. Berbeda dengan itu, pada konsep OOP programmer berpikir bagaimana membuat sebuah objek yang berisi data dan dapat melakukan pekerjaan yang sesuai. Di sini programmer melihat data sebagai objek AKTIF yang dapat bertindak dan melakukan hal-hal tertentu untuk menghasilkan output. B. Contoh Sebagai contoh dapat menggunakan data atau objek pesawat. Pada pemrograman prosedural atau Non-OOP, programmer berpikir bagaimana cara menerbangkan atau mendaratkan pesawat. Sementara itu pada pemrograman berorientasi objek atau OOP, programmer berpikir bagaimana pesawat itu terbang atau mendarat. Contoh lainnya adalah menggunakan sebuah struktur data abstrak semacam stack atau tumpukan. Pada pemrograman Non-OOP, programmer berpikir bagaimana cara menambahkan item baru ke dalam stack. Sementara itu pada konsep OOP, programmer berpikir apa yang akan dilakukan oleh stack saat suatu item baru ditambahkan padanya. Berikut ini adalah contoh preview dari sebuah program yang menggunakan konsep OOP: <?php require_once('application.php'); require_once('page.php'); ... class MyApp extends Application { ... } $myapp = new MyApp('Sistem Informasi Ini Itu'); $url = $myapp->parse_query(); $myapp->dislay($url); ?>
  • 3. EVOLUSI MENUJU OOP Lebih lanjut lagi, OOP dapat dipandang sebagai hasil evolusi atau pengembangan dari konsep pemrograman prosedural. Dalam perkembangannya, pemrograman prosedural pun masih dapat dibagi dalam dua tahap, yaitu pemrograman tak terstruktur dan pemrograman terstruktur. A. Pemrograman Tak Terstruktur Biasanya orang menyebutkan bahwa yang namanya pemrograman tak terstruktur adalah cara menulis program yang di dalamnya banyak terdapat penulisan kode yang sama atau mirip secara berulang-ulang, pemisahan bagiannya tidak jelas dan campur aduk, serta alur programnya kacau dengan adanya lompatan di sana sini (menggunakan perintah GOTO dan sejenisnya). Namun pemrograman tak terstruktur sebenarnya juga dapat didefinisikan sebagai program yang di dalamnya terdapat nilai-nilai yang seharusnya merupakan satu kesatuan namun dipisah-pisahkan sendiri dalam variabel yang berdiri sendiri. Sebagai contoh ada data mahasiswa, namun di dalam program data NIM dan namanya dipisahkan ke dalam variabelnya sendiri-sendiri. B. Pemrograman Terstruktur Saat program tumbuh menjadi semakin besar, dengan menggunakan konsep pemrograman tak terstruktur di atas maka program akan menjadi bertambah kompleks dan susah dibaca maupun dipelihara. Untuk itu kemudian dikembangkanlah konsep pemrograman terstruktur. Konsep ini ditandai dengan penggunaan fungsi-fungsi atau subprogram untuk membungkus kode-kode yang merupakan satu kesatuan atau yang ditulis berulang-ulang, penggunaan looping atau perulangan, dan mengelompokkan bagian-bagian yang serupa ke dalam unit atau modulnya sendiri-sendiri. Namun akan lebih tepat lagi jika pada pemrograman terstruktur ini, nilai-nilai yang memang saling berhubungan dan merupakan satu kesatuan dibungkus atau disatukan ke dalam suatu data yang terstruktur. Penggunaan tipe data terstruktur semacam array, record, set, hash, stack, queue, tree, dan semacamnya menjadi dominan di sini. Sebagai contoh, data mahasiswa akan disimpan di dalam sebuah record yang di dalamnya mengandung field NIM dan nama. Dalam konsep pemrograman terstruktur, pada awalnya programmer dituntut untuk dapat mengelompokkan nilai-nilai terkait yang semula terpisah-pisah menjadi satu kesatuan data. Setelah itu programmer masih harus berpikir untuk membuat fungsi-fungsi yang terpisah yang nantinya akan digunakan untuk mengolah kesatuan data yang telah dibuat. Misalkan jika ada data mahasiswa, maka akan dibuat fungsi-fungsi untuk mendaftarkan mahasiswa, mengisi KRS mahasiswa, memberi nilai mahasiswa, mencetak KHS mahasiswa, dan seterusnya.
  • 4. C. Pemrograman Berorientasi pada Objek Saat program semakin tumbuh besar lagi, konsep pemrograman terstruktur ini kemudian dirasa sudah kurang mencukupi lagi untuk menanganinya. Kerepotan yang dirasakan terutama timbul karena adanya pemisahan antara kesatuan-kesatuan data dengan fungsi- fungsi yang digunakan untuk mengolahnya. Semakin banyak kesatuan data yang dibuat, maka semakin akan terasa bahwa sebenarnya ada yang mirip satu sama lain, sehingga fungsi-fungsi yang mengolahnya pun menjadi mirip-mirip. Hal ini sering menyebabkan munculnya kode yang ditulis berulang-ulang di bagian-bagian yang saling terpisah. Sebagai contoh adalah data karyawan di sebuah perguruan tinggi, yang dibedakan menjadi karyawan kependidikan (dosen) dan karyawan non-kependidikan (non-dosen). Kedua data ini memiliki banyak kesamaan, namun juga ada perbedaannya yang tidak sedikit. Keduanya sama-sama digaji namun perhitungannya berbeda. Tapi walaupun dikatakan berbeda cara menghitungnya , ada kemiripannya juga sehingga menyebabkan adanya duplikasi kode. Selain itu masih banyak contoh yang lainnya. Untuk memecahkan masalah semacam itu, dikembangkanlah konsep pemrograman berorientasi pada objek atau OOP. Dalam OOP, bukan hanya nilai-nilai yang terkait saja yang disatukan ke dalam satu kesatuan, melainkan juga aksi-aksi atau tindakan untuk mengolah nilai-nilai itu juga. Dengan kata lain, dalam OOP data dan fungsi (tindakan) untuk mengolahnya dibungkus dalam satu kesatuan. Bungkus inilah yang kemudian dinamakan sebagai OBJEK. Teknik pembungkusan data dan fungsi ini dikenal dengan istilah encapsulation atau pengkapsulan. Selain itu ada konsep inheritance atau pewarisan dimana dua objek yang mirip dapat diturunkan dari sebuah objek yang lebih umum dan mewarisi semua data dan fungsi yang ada tanpa harus menulis ulang kodenya. Selain itu terdapat juga konsep polymorphism yang membuat dua objek berbeda dapat diperlakukan dengan cara yang sama karena diturunkan dari objek umum yang sama, walaupun nantinya dapat menghasilkan output yang berbeda juga. Sebagai contoh, masalah karyawan dosen dan karyawan non-dosen di atas. Dengan OOP, masalah tersebut dapat dipecahkan dengan membuat sebuah objek (sebenarnya istilah yang lebih tepat adalah class, namun untuk sementara memakai objek dulu supaya lebih jelas) karyawan yang berlaku bagi karyawan secara umum, baik dosen maupun non-dosen. Objek ini berisi data dan fungsi yang umum dimiliki oleh seorang karyawan. Setelah itu tinggal menurunkan objek tersebut ke dalam dua objek terpisah yaitu objek dosen dan objek non-dosen. Kedua objek ini mewarisi semua yang dimiliki objek karyawan namun dapat dikustomisasi atau disesuaikan dengan hal-hal yang lebih spesifik. Kedua objek ini kadang bisa dianggap sama, kadang juga bisa dianggap berbeda. D. Ringkasan Ringkasan dari ketiga konsep pemrograman di atas beserta ciri-ciri yang membedakannya akan dituliskan dalam tabel berikut:
  • 5. Konsep Pemrograman Ciri-Ciri Berkaitan dengan Data dan Pengolahannya Pemrograman Tak Terstruktur Nilai-nilai data yang harusnya saling berhubungan tertulis secara terpisah-pisah. Setiap nilai dapat diolah dan dimanipulasi sendiri- sendiri tanpa harus melihat nilai lainnya yang mungkin memiliki hubungan dengannya. Pengolahan nilai biasanya dilakukan dengan perintah-perintah bawaan yang telah tersedia. Pemrograman Terstruktur Nilai-nilai yang memiliki hubungan disatukan ke dalam satu kesatuan data, semacam record dan array. Dengan cara ini hubungan antar nilai menjadi lebih jelas. Pengolahan data dilakukan terhadap kesatuan tersebut bukan pada nilai-nilainya secara individual, menggunakan fungsi-fungsi yang terpisah. Pemrograman Berorientasi pada Objek Data dan fungsi yang digunakan untuk mengolahnya disatukan ke dalam sebuah objek. Dengan cara ini akan lebih mudah dan jelas melihat sebuah objek secara utuh, dari data dan apa yang bisa dilakukannya.
  • 6.
  • 7. PENJELASAN LEWAT CONTOH A. Contoh Kasus Contoh yang ada di sini akan dijelaskan menggunakan aplikasi PHPDraw. Perintah yang akan banyak dipakai di sini adalah perintah line untuk menggambar garis. Untuk mengingatkan lagi, di sini akan dituliskan dulu bentuk umum dari perintah line tersebut: line(x1, y1, x2, y2, warna); Perintah tersebut digunakan untuk membuat atau menggambar garis dari koordinat (x1, y1) menuju ke koordinat (x2, y2) dengan menggunakan warna tertentu. Pada bagian ini akan dijelaskan bagaimana cara menggambar bentuk bintang segi lima yang terlihat pada gambar di bawah ini menggunakan ketiga konsep pemrograman yang telah dijelaskan di atas. Sedikit asumsi dari gambar tersebut:  Ukuran gambar adalah ukuran default (400x400), gambar yang terlihat di sebelah telah diperkecil  Warna background juga menggunakan warna default (putih), sementara garis bintangnya merah  Pusat dari bintang tersebut adalah di tengah-tengah gambar, yaitu koordinat (200, 200)  Jari-jari bintang atau jarak dari pusat ke setiap pucuk bintang tersebut adalah 200. Seperti kata pepatah: “Banyak jalan menuju Roma”, maka demikian pula dengan menuliskan program. Satu masalah dapat dipecahkan dengan menggunakan program-program yang berbeda, bahkan meskipun menggunakan paradigma yang sama. Artinya, program-program yang dituliskan di sini bukanlah satu-satunya solusi untuk masalah di atas. B. Pemrograman Tak Terstruktur Dengan konsep pemrograman terstruktur, tinggal mencari lima koordinat yang membentuk kelima sudut bintang tersebut. Setelah itu gunakan perintah bawaan line untuk menggambar garis antar setiap koordinat yang berhubungan. Caranya bisa dengan mencari nilai x dan y dari setiap koordinat terlebih dahulu, baru menggambarkan garis-garisnya, seperti yang tergambar dalam pseudocode berikut: $x1 = ...; $y1 = ...; $x2 = ...; $y2 = ...; $x3 = ...; $y3 = ...; $x4 = ...; $y4 = ...; $x5 = ...; $y5 = ...; line($x1, $y1, $x3, $y3, COLOR_RED);
  • 8. line($x3, $y3, $x5, $y5, COLOR_RED); line($x5, $y5, $x2, $y2, COLOR_RED); line($x2, $y2, $x4, $y4, COLOR_RED); line($x4, $y4, $x1, $y1, COLOR_RED); Atau bisa juga dengan cara menghitung dua koordinat yang saling terhubung dulu dan diikuti dengan menggambar garisnya, lalu diteruskan dengan mencari koordinat berikutnya lalu menggambar lagi, dan seterusnya. Dengan cara ini, variabel yang digunakan bisa dihemat karena bisa menggunakan kembali (reuse) variabel yang nilainya sudah tidak terpakai lagi, sehingga cukup menggunakan variabel x1 dan y1 untuk koordinat awal garis, serta x2 dan y2 untuk koordinat akhir garis. Lagipula nilai koordinat akhir dari suatu garis dapat digunakan kembali sebagai nilai koordinat awal garis yang digambar sesudahnya. Cara ini dapat dilihat pada pseudocode berikut: $x1 = ...; $y1 = ...; $x2 = ...; $y2 = ...; line($x1, $y1, $x2, $y2, COLOR_RED); $x1 = $x2; $y1 = $y2; $x2 = ...; $y2 = ...; line($x1, $y1, $x2, $y2, COLOR_RED); $x1 = $x2; $y1 = $y2; $x2 = ...; $y2 = ...; line($x1, $y1, $x2, $y2, COLOR_RED); $x1 = $x2; $y1 = $y2; $x2 = ...; $y2 = ...; line($x1, $y1, $x2, $y2, COLOR_RED); $x1 = $x2; $y1 = $y2; $x2 = ...; $y2 = ...; line($x1, $y1, $x2, $y2, COLOR_RED); Memang terlihat lebih panjang, namun dengan kode yang terakhir ini program berpotensi untuk dibawa ke bentuk perulangan, sehingga akan menyederhanakan kode program. Perhatikan bahwa di sini setiap nilai yang membentuk sebuah koordinat disimpan dalam variabel-variabel yang berdiri sendiri, semacam $x1, $x2, $y1, dan $y2. Terlebih lagi di situ terlihat bahwa nilai dari setiap koordinat dihitung sendiri-sendiri tanpa melihat relasinya dengan koordinat sebelumnya. Hal inilah yang terkadang membuat program menjadi susah dibaca dan dimengerti. Detail untuk menghitung setiap koordinatnya tidak akan dijelaskan secara detail disini, yang jelas menggunakan rumus-rumus yang dikenal dalam trigonometri. Berikut ini salah satu program yang dapat digunakan untuk membuat gambar bintang semacam itu: <?php $x1 = 200; $y1 = 0; $x2 = 200 + 200*cos(deg2rad(1*72 – 90)); $y2 = 200 + 200*sin(deg2rad(1*72 – 90)); $x3 = 200 + 200*cos(deg2rad(2*72 – 90));
  • 9. $y3 = 200 + 200*sin(deg2rad(2*72 – 90)); $x4 = 200 + 200*cos(deg2rad(3*72 – 90)); $y4 = 200 + 200*sin(deg2rad(3*72 – 90)); $x5 = 200 + 200*cos(deg2rad(4*72 – 90)); $y5 = 200 + 200*sin(deg2rad(4*72 – 90)); line($x1, $y1, $x3, $y3, COLOR_RED); line($x3, $y3, $x5, $y5, COLOR_RED); line($x5, $y5, $x2, $y2, COLOR_RED); line($x2, $y2, $x4, $y4, COLOR_RED); line($x4, $y4, $x1, $y1, COLOR_RED); ?> Angka 72 yang ada dalam program tersebut merupakan besarnya sudut (dalam derajat) yang terbentuk dari dua buah pucuk bintang yang berdekatan, dilihat dari pusat bintangnya. Angka 72 tersebut dihitung dari besarnya sudut yang dibentuk sebuah lingkaran penuh (360o ) dibagi banyaknya pucuk atau segi dari bintang (5). Perintah deg2rad (dibaca deg-to- rad) yang ada di program tersebut digunakan untuk mengkonversi nilai sudut dari satuan derajat (degree) ke satuan radian. Hal ini karena dalam PHP semua fungsi trigonometri (semacam cos, sin dan tan) semuanya beroperasi dalam satuan radian, bukan derajat. Selanjutnya silahkan dipelajari sendiri. C. Pemrograman Terstruktur Dengan menggunakan konsep pemrograman terstruktur, setiap nilai x dan y yang ada tidak akan dianggap sebagai nilai yang terpisah. Pemrograman terstruktur berusaha mengatur dan mengelompokkan nilai-nilai yang tercerai berai tersebut agar lebih mudah dikelola. Kesatuan data yang menyatukan setiap nilai x dan y tersebut diberi nama sesuai dengan maksudnya, yaitu sebagai koordinat. Untuk keperluan tersebut biasanya digunakan record, yang dalam hal ini memiliki dua buah field yaitu field x dan field y. Demikian juga dengan nilai-nilai yang menyusun sebuah garis, disatukan ke dalam sebuah record yang disebut sebagai garis dan memiliki tiga field, yaitu: koordinat awal, koordinat akhir, dan warna-nya. Selain itu juga perlu dibuat fungsi-fungsi yang akan digunakan untuk membuat (mengkonstruksi), mengakses dan memanipulasi kesatuan data yang telah dibuat. Fungsi untuk membuat kesatuan data tugasnya adalah mengumpulkan nilai-nilai yang ada dan membentuk kesatuan data darinya. Nilai-nilai yang akan dikumpulkan disebutkan sebagai argumen dari fungsi, dan sebagai balasannya fungsi menghasilkan sebuah record yang berisi nilai-nilai tersebut. Fungsi semacam ini dinamakan sebagai fungsi konstruktor. Contohnya: function buat_koordinat($x, $y) { return array('x' => $x, 'y' => $y); } Sementara itu fungsi untuk mengakses dan manipulasi biasanya menggunakan kesatuan data yang terkait sebagai parameter pertama. Jika tidak berniat mengubah nilai yang ada di dalamnya maka akan menggunakan parameter pass-by-value, seperti contoh berikut:
  • 10. function gambar_titik($koordinat) { pixel($koordinat['x'], $koordinat['y'], $koordinat['warna']); } Sementara jika berniat akan mengubah nilai maka akan menggunakan parameter pass-by- reference, seperti contoh berikut: function pindah_koordinat(&$koordinat, $dx, $dy) { $koordinat['x'] += $dx; $koordinat['y'] += $dy; } Berikut ini contoh jawaban menggunakan konsep pemrograman terstruktur: <?php function buat_koordinat($x, $y) { return array( 'x' => $x, 'y' => $y ); } function ubah_koordinat(&$koordinat, $x, $y) { $koordinat['x'] = $x; $koordinat['y'] = $y; } function putar_koordinat(&$koordinat, $pusat, $sudut) { $x0 = $pusat['x']; $y0 = $pusat['y']; $x1 = $koordinat['x']; $y1 = $koordinat['y']; $dx = $x1 - $x0; $dy = $y1 - $y0; $a = deg2rad($sudut); $x2 = $x0 + $dx*cos($a) - $dy*sin($a); $y2 = $y0 + $dx*sin($a) + $dy*cos($a); ubah_koordinat($koordinat, $x2, $y2); } function buat_garis($awal, $akhir, $warna) { return array( 'awal' => $awal, 'akhir' => $akhir, 'warna' => $warna ); } function gambar_garis($garis) { $x1 = $garis['awal']['x']; $y1 = $garis['awal']['y']; $x2 = $garis['akhir']['x']; $y2 = $garis['akhir']['y']; line($x1, $y1, $x2, $y2, $garis['warna']); } function putar_garis(&$garis, $pusat, $sudut) { putar_koordinat($garis['awal'], $pusat, $sudut);
  • 11. putar_koordinat($garis['akhir'], $pusat, $sudut); } $pusat = buat_koordinat(200, 200); $pucuk = buat_koordinat(200, 0); putar_koordinat($pucuk, $pusat, 144); $garis = buat_garis(buat_koordinat(200, 0), $pucuk, COLOR_RED); for ($i = 0; $i < 5; $i++) { gambar_garis($garis); putar_garis($garis, $pusat, 144); } ?> Tentu saja masih ada cara yang berbeda untuk memperoleh hasil yang sama. D. Pemrograman Berorientasi pada Objek Program berikut ini merupakan program yang sama ditulis menggunakan konsep OOP. Untuk sementara di sini hanya akan dituliskan dulu, dengan penjelasan akan diberikan nanti. Untuk sementara tidak semua fitur OOP akan digunakan di sini, untuk menyederhanakan jawaban. <?php class Koordinat { var $x; var $y; function __construct($x, $y) { $this->x = $x; $this->y = $y; } function ubah($x, $y) { $this->x = $x; $this->y = $y; } function putar($pusat, $sudut) { $x0 = $pusat->x; $y0 = $pusat->y; $x1 = $this->x; $y1 = $this->y; $dx = $x1 - $x0; $dy = $y1 - $y0; $a = deg2rad($sudut); $x2 = $x0 + $dx*cos($a) - $dy*sin($a); $y2 = $y0 + $dx*sin($a) + $dy*cos($a); $this->ubah($x2, $y2); } } class Garis { var $awal; var $akhir; var $warna;
  • 12. function __construct($awal, $akhir, $warna) { $this->awal = $awal; $this->akhir = $akhir; $this->warna = $warna; } function gambar() { $x1 = $this->awal->x; $y1 = $this->awal->y; $x2 = $this->akhir->x; $y2 = $this->akhir->y; line($x1, $y1, $x2, $y2, $this->warna); } function putar($pusat, $sudut) { $this->awal->putar($pusat, $sudut); $this->akhir->putar($pusat, $sudut); } } $pusat = new Koordinat(200, 200); $pucuk = new Koordinat(200, 0); $pucuk->putar($pusat, 144); $garis = new Garis(new Koordinat(200, 0), $pucuk, COLOR_RED); for ($i = 0; $i < 5; $i++) { $garis->gambar(); $garis->putar($pusat, 144); } ?>
  • 13. MIGRASI DARI NON-OOP KE OOP A. Pembuatan Class Kesatuan data (record) yang ada di pemrograman non-OOP (terstruktur) beserta segala fungsi yang terkait dengannya, dalam OOP disatukan ke dalam satu konsep yang dinamakan sebagai class. Nilai-nilai yang ada di record dijadikan sebagai field anggota class, sedangkan fungsi-fungsi yang terkait dijadikan sebagai metode anggota class. Sebagai contoh diambil record koordinat, jika dijadikan sebagai class garis besar kodenya adalah sebagai berikut: class Koordinat { ... } Sebagai catatan tambahan, dalam PHP ada kesepakatan bersama (namun bukan keharusan), bahwa nama class menggunakan huruf besar di huruf pertama tiap kata. Contohnya adalah: Koordinat, Garis, SegiTiga, SegiEmpat, Mahasiswa, Dosen, MataKuliah, dll. B. Field Anggota Class Field anggota class diimplementasikan sebagai sebuah variabel yang ada di dalam sebuah class. Untuk membuatnya harus melalui deklarasi terlebih dahulu menggunakan keyword var. Berikut ini contoh pendeklarasian field x dan y dalam class Koordinat: class Koordinat { var $x; var $y; ... } C. Metode Anggota Class Metode anggota class diimplementasikan sebagai sebuah fungsi yang dideklarasikan di dalam class. Cara pembuatannya sama persis dengan fungsi biasa, hanya saja berada di dalam class. Perbedaan lainnya adalah, jika pada konsep pemmrograman terstruktur setiap fungsi untuk mengakses atau memanipulasi nilai dalam record membutuhkan record yang terkait sebagai parameter pertamanya, maka pada konsep OOP parameter pertamanya tersebut dihilangkan. Alasannya akan dijelaskan di bagian berikutnya. Sebagai contoh, fungsi untuk menggambar garis dan memutar garis berikut: function gambar_garis($garis) { ... } function putas_garis(&$garis, $pusat, $sudut) { ... }
  • 14. Kedua fungsi tersebut jika dijadikan metode dalam konsep OOP menjadi sbb: class Garis { ... function gambar() { ... } function putar($pusat, $sudut) { ... } ... } Perhatikan bahwa nama fungsi atau metode pada OOP menjadi lebih pendek dari sebelumnya. Hal ini karena nama kesatuan data yang akan diolah sudah terwakili sebagai nama class, jadi di nama fungsi tidak perlu disebutkan lagi. Sementara itu di konsep non- OOP nama fungsi harus lengkap dan jelas supaya jika ada kesatuan data yang memiliki fungsi yang bernama sama tidak akan saling bertumbukan, misalkan fungsi putar_koordinat dan fungsi putar_garis. Pada OOP kedua fungsi tersebut cukup menggunakan nama putar saja. D. Pengaksesan Anggota dari Objek Untuk mengakses anggota sebuah class lewat objeknya, baik itu field maupun metode, digunakan operator -> (bisa dianggap sebagai anak panah). Bentuk umumnya adalah sebagai berikut: $nama_objek->nama_anggota Misalkan untuk mengakses field warna dari objek garis L, kodenya adalah: $L->warna Pada konsep non-OOP yang menggunakan record, kode di atas memiliki kesamaan dengan kode: $L['warna'] Sedangkan untuk mengakses metode gambar pada objek garis L, kodenya adalah: $L->gambar(); Kode tersebut memiliki kesamaan dengan kode non-OOP berikut: gambar_garis($L);
  • 15. Dilihat dari sisi manapun cara penulisan kode menggunakan konsep OOP jauh lebih singkat dan lebih jelas dimengerti serta lebih mudah dituliskan. E. Objek Khusus $this Pada konsep non-OOP setiap fungsi yang berkaitan dengan sebuah kesatuan data pasti parameter pertamanya adalah berupa yang mewakili kesatuan data terkait, kecuali fungsi konstruktor. Hal ini karena pada konsep non-OOP pola pikirnya adalah “melakukan sesuatu terhadap data”, jadi setiap akan melakukan sesuatu pada data maka harus disebutkan data mana yang akan dikenai tindakan. Contohnya dapat dilihat pada potongan kode program berikut: pindah_koordinat($A, 10, 0); pindah_koordinat($B, 0, 10); Statement pertama di atas digunakan untuk memindahkan data koordinat A ke kanan, sementara statement kedua digunakan untuk memindahkan data koordinat B ke bawah. Perhatikan bahwa fungsi dapat diterapkan pada dua data yang berbeda tergantung dari argumen yang diberikan. Pada konsep OOP, pola berpikirnya adalah “menyuruh sebuah objek untuk melakukan sesuatu”. Oleh karena itu maka objek mana yang akan “disuruh” tidak perlu disebutkan lagi sebagai argumen dari perintah atau fungsi yang akan digunakan. Jika hal tersebut dilakukan di luar deklarasi class akan mudah dilakukan, seperti kode berikut yang merupakan versi OOP dari contoh kode sebelumnya: $A->pindah(10, 0); $B->pindah(0, 10); Statement di atas maksudnya adalah untuk menyuruh objek koordinat A untuk berpindah ke kanan dan menyuruh objek koordinat B untuk berpindah ke bawah. Sekali lagi, jika hal tersebut dilakukan di luar class dan merujuk pada satu objek tertentu, maka tinggal sebut nama objeknya atau variabel yang menampung objek diikuti dengan nama anggota yang mau diakses setelah operator ->. Namun jika kode pengaksesan dilakukan di dalam class maka menjadi lain ceritanya. Kode pengaksesan anggota di dalam class umumnya tidak digunakan untuk mengakses anggota dari objek yang spesifik, namun ditujukan untuk semua objek yang dibuat dari class tersebut. Oleh karena itu tidak dimungkinkan untuk merujuk pada suatu objek buatan tertentu. Untuk keperluan tersebut, PHP menyediakan sebuah objek khusus yang bernama $this. Objek ini dapat digunakan di dalam deklarasi metode/fungsi dalam class untuk merujuk pada objek yang menggunakan metode itu. Kata “this” atau dalam Bahasa Indonesia “ini” dapat diartikan sebagai “objek ini” atau lengkapnya “objek yang sedang menggunakan metode ini”.
  • 16. Sebagai contoh, misalkan jika dalam konsep non-OOP ada fungsi berikut: fungsi pindah_koordinat(&$koordinat, $dx, $dy) { $koordinat['x'] += $dx; $koordinat['y'] += $dy; } Maka di dalam konsep OOP, parameter pertama ($koordinat) tidak perlu disebutkan dan setiap variabel $koordinat di dalam tubuh fungsi diganti menjadi $this. Sehingga pada konsep OOP kode programnya menjadi berikut: class Koordinat { ... fungsi pindah($dx, $dy) { $this->x += $dx; $this->y += $dy; } ... } Saat metode pindah tersebut digunakan oleh objek $A sebagai berikut: $A->pindah(100, 50); maka secara otomatis objek $this akan merujuk pada objek $A. F. Fungsi Konstruktor Pada konsep non-OOP yang namanya fungsi konstruktor hanyalah sebuah fungsi yang utamanya untuk memudahkan proses pembuatan struktur data yang diinginkan. Artinya fungsi ini sebenarnya cenderung tidak begitu dibutuhkan untuk struktur data yang sederhana. Sebagai contoh fungsi konstruktor untuk data koordinat berikut: function buat_koordinat($x, $y) { return array('x' => $x, 'y' => $y); } Untuk membuat data koordinat A (200, 200) menggunakan fungsi konstruktor di atas kodenya adalah sebagai berikut: $A = buat_koordinat(200, 200); Tanpa fungsi konstruktor maka data yang sama dapat dibuat dengan kode berikut: $A = array('x' => 200, 'y' => 200); Berlawanan dengan itu, pada konsep OOP fungsi konstruktor adalah suatu keharusan. Fungsi konstruktor biasanya digunakan untuk melakukan inisialisasi saat sebuah objek diciptakan. Atau jika dilihat secara teknis, dalam fungsi konstruktor ini dilakukan inisialisasi terhadap objek $this.
  • 17. Dalam PHP, terutama PHP 5, fungsi konstruktor dalam class harus menggunakan nama khusus __construct. Sementara itu daftar parameter yang digunakan secara umum sama dengan fungsi konstruktor pada fungsi konstruktor non-OOP. Sebagai contoh, akan dibuat fungsi konstruktor versi OOP dari contoh fungsi konstruktor non-OOP di atas. Sebelumnya akan dibuat sedikit modifikasi terhadap contoh di atas, dengan membuat variabel sementara yang di-return-kan oleh fungsi konstruktor, sebagai berikut: function buat_koordinat($x, $y) { $koordinat = array(); $koordinat['x'] = $x; $koordinat['y'] = $y; return $koordinat; } Pada konsep OOP, tidak diperlukan untuk menciptakan variabel sementara karena sudah disediakan objek $this yang siap dipakai dan juga tidak perlu di-return-kan. Berikut ini kode program untuk fungsi konstruktor versi OOP: class Koordinat { ... function __construct($x, $y) { $this->x = $x; $this->y = $y; } ... } G. Pembuatan Objek atau Instance Dalam konsep OOP di PHP, untuk membuat sebuah objek dari class tertentu menggunakan operator new, yang dalam Bahasa Indonesia artinya adalah “baru”, yang bermakna “membuat objek baru”. Bentuk umumnya adalah sebagai berikut: $nama_objek = new NamaClass(daftar argumen); Sebagai contoh kode untuk membuat objek Koordinat dengan nama A di (200, 300) menggunakan kode berikut: $A = new Koordinat(200, 300); Kode tersebut serupa dengan versi non-OOP berikut (meskipun berbeda pada tipe data yang dihasilkan): $A = buat_koordinat(200, 300);
  • 18.
  • 19. TERMINOLOGI DALAM OOP A. Encapsulation Istilah encapsulation atau pengkapsulan mengacu pada penyatuan antara data dan metode atau fungsi ke dalam sebuah bungkus yang disebut sebagai object. Selain itu ada juga yang mendefiniskannya sebagai pembungkusan data dengan metode-metode pengaksesnya. B. Information Hiding Pada definisi kedua dari encapsulation di atas, dikatakan bahwa data dibungkus menggunakan metode-metode yang digunakan untuk mengolahnya. Lebih lanjut lagi, dengan adanya pembungkusan ini maka seolah-olah data disembunyikan dari dunia luar, sehingga tidak bisa diakses secara langsung melainkan harus menggunakan metode-metode yang membungkusnya. Konsep penyembunyian data dari dunia luar ini disebut sebagai information hiding. Tujuan utamanya adalah untuk menjaga konsistensi data, karena data tidak dapat diubah sesuka hati. C. Class, Object dan Instance Bangunan utama dari konsep OOP adalah sebuah entiti yang dinamakan sebagai “class”. Class didefinisikan sebagai sebuah konsep atau gagasan yang menggambarkan data apa saja yang dimiliki dan tindakan apa saja yang dapat dilakukan atau dikenakan pada sekelompok objek yang sejenis. Class juga dapat dianggap sebagai gambaran atau deskripsi dari suatu objek. Oleh karena itu, class merupakan sebuah konsep abstrak yang belum dapat digunakan secara langsung kecuali sudah diwujudkan dalam bentuk yang nyata. Perwujudan nyata dari class yang siap digunakan itulah yang disebut sebagai “object”. Setelah berwujud sebagai object inilah maka baru dapat dilakukan akses terhadap data yang dimuatnya dan juga dapat disuruh untuk melakukan suatu tindakan atau pekerjaan. Untuk menekankan bahwa sebuah object merupakan implementasi nyata dari class, maka object juga dikenal dengan istilah “instance”, yang bisa diterjemahkan sebagai “perwujudan”. Jika diambil contoh pada kehidupan nyata, contoh class adalah: Mahasiswa, Dosen, Meja, Kursi, Mobil, Hewan, Burung, Kucing, dan sebagainya. Sementara itu contoh objek adalah: Saipul, Unyil, Paijo, kursi yang diduduki Sigit, meja di depan Ririn, mobil ferari milik Pak Badu, burungnya Si Unyil, kucing hitam kepunyaan Andi, dan lain sebagainya. Dapat dilihat di sini, bahwa class mewakili sesuatu yang berupa konsep tanpa menunjuk objek nyatanya, sementara object langsung menunjuk pada suatu yang nyata. D. Member, Field dan Method Setiap data dan fungsi yang termuat di dalam sebuah class dinamakan sebagai member atau anggota dari class yang bersangkutan. Anggota yang berupa data dinamakan sebagai field atau atribut atau properti dari class. Sedangkan anggota yang berupa fungsi dinamakan sebagai method atau metode dari class.
  • 20. Sebagai contoh, sebuah class Mahasiswa memiliki field semacam: NIM, nama, angkatan, program studi, jenis kelamin, umur, dll. Selain itu class Mahasiswa juga memiliki metode semacam: mendaftar ulang (heregistrasi), mengisi KRS, mengikuti ujian, melakukan presensi, membuat tugas akhir, dll. E. Inheritance Salah satu keunggulan OOP dalam hal code reuse (penggunaan kembali kode program yang sudah ada sebelumnya) yang tidak ada dalam konsep non-OOP adalah adanya konsep inheritance atau pewarisan. Dengan konsep ini maka sebuah class dapat diturunkan dari class lain yang lebih umum dan juga dapat menurunkan class-class yang lebih spesifik. Setiap ada penurunan class, maka semua sifat (anggota) yang ada pada class yang diturunkan akan otomatis dimiliki atau diwarisi oleh class turunannya tanpa harus menulis ulang kode programnya. Sebagai contoh, dari class Bidang dapat diturunkan berbagai macam class yang merepresentasikan bidang-bidang tertentu, semacam class SegiEmpat, SegiTiga, Lingkaran, Elips, dll. Demikian juga dari class SegiEmpat mungkin dapat diturunkan lebih lanjut menjadi class PersegiPanjang, BujurSangkar, BelahKetupat, JajaranGenjang, LayangLayang, dll. Opsi lainnya adalah bahwa class BujurSangkar adalah turunan dari class PersegiPanjang, karena sebuah bujur sangkar merupakan bentuk khusus dari sebuah persegi panjang, dimana panjang dan lebarnya sama. Dari situ kemudian dapat disimpulkan bahwa class BelahKetupat adalah turunan dari class LayangLayang dan class Lingkaran merupakan turunan dari class Elips. Proses penurunan atau sering disebut sebagai subclassing ini membentuk sebuah pohon hirarki pewarisan atau dinamakan inheritance tree. Bentuk hirarkinya mirip dengan hirarki silsilah (namun tanpa perkawinan), sehingga istilah-istilah yang ada pada silsilah pun digunakan di sini, semacam: orang tua (parent), anak (child), leluhur (anchestor), dan keturunan (descendant). Berikut ini adalah gambaran dari hirarki pewarisan dari contoh di atas (urutan dari kiri ke kanan tidak penting): Bidang SegiEmpat PersegiPanjang BujurSangkar JajaranGenjang LayangLayang BelahKetupat SegiTiga Elips Lingkaran
  • 21. F. Subclass, Superclass, Descendant dan Anchestor Subclass adalah class yang menjadi turunan langsung dari suatu class lain, dinamakan juga sebagai derived class atau child class. Superclass adalah class yang menurunkan langsung class lain, sering dinamakan juga sebagai base class atau parent class. Descendant atau keturunan adalah class-class yang berada di bawah suatu class pada garis hirarki inheritance. Anchestor atau leluhur adalah clas-class yang berada segaris di atas hirarki inheritance. Sebuah sublass pastilah descendant namun tidak selalu untuk sebaliknya. Sebuah superclass pasti termasuk anchestor, namun juga tidak selalu berlaku untuk sebaliknya. Subclass dari suatu class bisa banyak, namun superclass atau parent class-nya pasti hanya satu. Konsep satu parent ini dianut oleh kebanyakan sistem OOP yang ada saat ini, dan dinamakan sebagai konsep single inheritance. Konsep multiple inheritance, yang mengijinkan penurunan class dari beberapa class sekaligus, juga ada namun tidak banyak yang menganutnya. Dari contoh di bagian sebelumnya, dapat dikatakan bahwa class Bidang merupakan superclass dari class SegiEmpat, SegiTiga dan Elips. Sebaliknya, class SegiEmpat, SegiTiga dan Elips adalah subclass dari class Bidang. Demikian juga dapat dikatakan bahwa class Bidang merupakan anchestor dari semua class yang disebutkan disitu, termasuk SegiEmpat, SegiTiga, Elips, Lingkaran, BujurSangkar, JajaranGenjang, dll. Sebaliknya, semua class tersebut merupakan descendant dari class Bidang. Class SegiEmpat memiliki 3 subclass dan 5 descendant. Class BujurSangkar memiliki 3 anchestor, yaitu: class PersegiPanjang, SegiEmpat, dan Bidang. Class JajaranGenjang dan class SegiTiga BUKANLAH anchestor dari class BujurSangkar. Demikian juga, class Lingkaran BUKANLAH merupakan descendant dari class SegiEmpat. G. Polymorphism Salah satu keunggulan dari konsep OOP adalah keberadaan polymorphism, yaitu kemampuan menangani objek yang berasal dari class yang berbeda menggunakan suatu antarmuka yang seragam. Dengan kata lain, polymorphism memungkinkan sebuah objek yang sama pada waktu yang berbeda dianggap berasal dari dua class yang berbeda, lalu melakukan hal yang sama, namun hasilnya bisa jadi berbeda. Sebagai contoh, sebuah object dari class SegiEmpat, satu saat dianggap sebagai object dari class BujurSangkar (boleh karena sebuah bujur sangkar juga merupakan segi empat) dan saat lain dianggap sebagai object dari class JajaranGenjang (boleh juga karena jajaran genjang juga segi empat). Ketika sama-sama disuruh menghitung luasnya, maka caranya sama (menggunakan metode yang sama) namun hasilnya bisa jadi berbeda. H. Constructor dan Destructor Selain konstruktor, dalam OOP juga dikenal istilah destruktor, yang merupakan kebalikan dari konstruktor. Konstruktor berasal dari kata “construct” yang artinya “membangun”, dan
  • 22. memang digunakan untuk membangun sebuah object dari class tertentu. Biasanya di dalam konstruktor berisi kode-kode yang digunakan untuk menginisialisasi nilai-nilai awal yang dimiliki suatu object yang akan diciptakan. Sedangkan destruktor berasal dari kata “destruct” yang berarti “menghancurkan”, karena memang tugasnya adalah untuk menghancurkan atau menghapus object dari memory. Pada PHP, destruktor tidak terlalu banyak digunakan karena PHP “berbaik hati” untuk menghapus sendiri object-object yang sudah tidak diperlukan lagi. Namun, jika memang destruktor digunakan, maka secara umum di dalamnya memuat kode-kode finalisasi saat object hendak dihapus dari memory. Pada PHP, terutama PHP 5, konstruktor dibuat menggunakan sebuah metode khusus yang bernama __construct dan destruktor menggunakan metode __destruct. Berikut ini contoh class yang menggunakan konstruktor dan destruktor: class TextFile { private $filename; private $fp; public function __construct($filename) { $this->filename = $filename; $this->fp = fopen($this->filename, 'r'); } public function __destruct() { fclose($this->fp); } ... } $f = new TextFile(); ... unset($f); Pada contoh di atas, konstruktor digunakan untuk membuka file (fopen) dan destruktor digunakan untuk menutup file (fclose). Konstruktor dipanggil atau dijalankan saat sebuah object dibuat menggunakan operator new. Sedangkan destruktor dipanggil atau dijalankan kapan pun sebuah object dihapus dari memory, baik disengaja (menggunakan perintah unset) maupun saat object sudah tidak direferensi lagi, atau saat program berakhir. I. Member Visibility, Public atau Private Member visibility atau kenampakan anggota adalah konsep yang melanjutkan konsep encapsulation dan information hiding yang sudah dijelaskan di atas. Seperti telah dituliskan sebelumnya, bahwa sebuah field seharusnya tidak boleh diakses secara sembarangan dan dilindungi dari akses dunia luar. Demikian juga terkadang metode-metode yang menangani proses internal yang seharusnya tidak diekspos ke dunia luar sebaiknya dilindungi juga. Untuk itu maka field dan metode tersebut harus dibuat tidak “nampak” dari luar class.
  • 23. Konsep inilah kemudian yang memunculkan istilah anggota private (pribadi) dan anggota publik. Anggota private seharusnya dilindungi supaya tidak diakses sembarangan, sedangkan yang namanya anggota publik boleh diakses dari luar. Sebenarnya masih ada satu lagi jenis pengaksesan yang dinamakan sebagai protected (diproteksi) yang tingkatannya berada di antara publik dan private. Ketiga konsep visibility ini diwakili oleh keyword private, protected dan public yang dituliskan di depan nama field (menggantikan keyword var) atau di depan deklarasi fungsi (metode). Sebagai contoh dapat dilihat pada potongan program berikut: class Circle { private $radius; public function __construct($r) { $this->radius = $r; } } Dapat dilihat pada potongan program tersebut bahwa class Circle memiliki sebuah field privat dengan nama $radius dan metode publik yang berupa konstruktor. Pada umumnya yang namanya konstruktor selalu bersifat publik. J. Getter dan Setter Mengacu pada konsep encapsulation dan information hiding, maka setiap field seharusnya dibuat sebagai anggota privat. Jika konsep tersebut diterapkan maka setiap field menjadi benar-benar tidak dapat diakses dari luar, baik dibaca maupun dimodifikasi nilainya. Untuk dapat mengaksesnya maka diperlukan metode yang dirancang untuk membaca atau memodifikasi nilai dari field. Metode semacam ini dinamakan sebagai getter dan setter. Metode getter (dari kata “get”) ditujukan untuk mengambil atau membaca nilai suatu field. Sedangkan metode setter (dari kata “set”) ditujukan untuk menge-set atau mengubah nilai suatu field. Jika suatu field dirancang agar dapat dibaca dan ditulis (dimodifikasi) maka untuk field itu dibuatlah metode getter dan setter-nya. Namun jika suatu field dirancang supaya bersifat “read-only” atau tidak dapat diubah sembarangan nilainya maka cukup dibuat metode getter-nya. Berikut ini contoh class yang menggunakan getter dan setter: class Circle { private $radius; private $area; private $circumference; public function __construct($r) { $this->set_radius($r); }
  • 24. private function calculate() { $this->area = M_PI*$this->radius*$this->radius; $this->circumference = 2*M_PI*$this->radius; } public function get_radius() { return $this->radius; } public function set_radius($r) { $this->radius = $r; $this->calculate(); } public function get_area() { return $this->area; } public function get_circumference() { return $this->circumference; } } Pada class Circle di atas didefinisikan tiga buah field privat, yaitu $radius (jari-jari), $area (luas), dan $circumference (keliling). Selain itu didefinisikan juga sebuah metode internal (privat) yang digunakan untuk menghitung luas dan keliling, yaitu metode calculate. Field $radius merupakan field yang dapat dimodifikasi karena memiliki getter dan setter, sementara field $area dan $circumference adalah field yang bersifat read-only, karena hanya memiliki getter saja.