MATAKULIAH
Pemrograman
Berorientasi Objek
CHOERUN ASNAWI, S.KOM.
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);
?>
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.
D. Ringkasan
Ringkasan dari ketiga konsep pemrograman di atas beserta ciri-ciri yang membedakannya
akan dituliskan dalam tabel berikut:
Konsep
Pemrograman
Pemrograman Tak
Terstruktur
Pemrograman
Terstruktur
Pemrograman
Berorientasi pada
Objek
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.
= ...;
= ...;
= ...;
= ...;
= ...;
$x3, $y3, COLOR_RED);
line($x3,
line($x5,
line($x2,
line($x4,
$y3,
$y5,
$y2,
$y4,
$x5,
$x2,
$x4,
$x1,
$y5,
$y2,
$y4,
$y1,
COLOR_RED);
COLOR_RED);
COLOR_RED);
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,
$x1 = $x2; $y1
$x2 = ...; $y2
line($x1, $y1,
$x1 = $x2; $y1
$x2 = ...; $y2
line($x1, $y1,
$x1 = $x2; $y1
$x2 = ...; $y2
line($x1, $y1,
$x1 = $x2; $y1
$x2 = ...; $y2
line($x1, $y1,
= ...;
= ...;
$x2, $y2,
= $y2;
= ...;
$x2, $y2,
= $y2;
= ...;
$x2, $y2,
= $y2;
= ...;
$x2, $y2,
= $y2;
= ...;
$x2, $y2,
COLOR_RED);
COLOR_RED);
COLOR_RED);
COLOR_RED);
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 =
$x2 =
$y2 =
$x3 =
200; $y1 = 0;
200 + 200*cos(deg2rad(1*72 90));
200 + 200*sin(deg2rad(1*72 90));
200 + 200*cos(deg2rad(2*72 90));
$y3 = 200
$x4 = 200
$y4 = 200
$x5 = 200
$y5 = 200
line($x1,
line($x3,
line($x5,
line($x2,
line($x4,
?>
+ 200*sin(deg2rad(2*72 90));
+ 200*cos(deg2rad(3*72 90));
+ 200*sin(deg2rad(3*72 90));
+ 200*cos(deg2rad(4*72 90));
+ 200*sin(deg2rad(4*72 90));
$y1, $x3, $y3, COLOR_RED);
$y3, $x5, $y5, COLOR_RED);
$y5, $x2, $y2, COLOR_RED);
$y2, $x4, $y4, COLOR_RED);
$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-torad) 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-byreference, seperti contoh berikut:
function pindah_koordinat(&$koordinat, $dx, $dy) {
$koordinat['x'] += $dx;
$koordinat['y'] += $dy;
}
Tentu saja masih ada cara yang berbeda untuk memperoleh hasil yang sama.
Garis {
$awal;
$akhir;
$warna;
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.
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 nonOOP 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.
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();
Dilihat dari sisi manapun cara penulisan kode menggunakan konsep OOP jauh lebih singkat
dan lebih jelas dimengerti serta lebih mudah dituliskan.
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;
}
...
}
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;
}
...
}
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);
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.
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
SegiTiga
LayangLayang
BelahKetupat
Elips
Lingkaran
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.
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.
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.
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.