BAB II PEMBAHASAN 2.1. Pengertian Object Oriented Programing ( OOP ) - BAB II petruk.pdf
BAB II
PEMBAHASAN
2.1. Pengertian Object Oriented Programing ( OOP )
Object Oriented Programming (OOP) atau dalam bahasa Indonesia
disebut Pemrograman berorientasi objek
adalah suatu metode
pemrograman yang berbasiskan pada objek. secara singkat pengertian
dari OOP adalah koleksi objek yang saling berinteraksi dan saling
memberikan informasi satu dengan yang lainnya atau Setiap objek dapat
menerima pesan, memproses data, dan mengirim pesan ke objek lainnya.
Model data berorientasi objek dikatakan dapat memberi fleksibilitas
yang lebih, kemudahan mengubah program, dan digunakan luas dalam
teknik piranti lunak skala besar. Lebih jauh lagi, pendukung OOP
mengklaim bahwa OOP lebih mudah dipelajari bagi pemula dibanding
dengan pendekatan sebelumnya, dan pendekatan OOP lebih mudah
dikembangkan dan dirawat. Suatu program disebut dengan pemrograman
berbasis obyek (OOP) karena terdapat :
7
8
2.1.1
Encapsulation (pembungkusan) - Variabel dan method
dalam suatu obyek dibungkus agar terlindungi Untuk
mengakses, variabel dan method yang sudah dibungkus
tadi
perlu
interface
Setelah
variabel
dan
method
dibungkus, hak akses terhadapnya bisa ditentukan.
Konsep pembungkusan ini pada dasarnya merupakan
perluasan dari tipe data struktur
2.1.2
Inheritance (pewarisan) - Sebuah class bisa mewariskan
atribut dan method-nya ke class yang lain Class yang
mewarisi disebut superclass Class yang diberi warisan
disebut subclass Sebuah subclass bisa mewariskan atau
berlaku sebagai superclass bagi class yang lain =>
disebut multilevel inheritance.
Keuntungan Penggunaan Pewarisan :
Subclass memiliki atribut dan method yang spesifik
yang membedakannya dengan superclass, meskipun
keduanya mirip (dalam hal kesamaan atribut dan
method).
Dengan
demikian
pada
pembuatan
subclass,
programmer bisa menggunakan ulang source code dari
superclass yang ada => ini yang disebut dengan istilah
9
reuse. Class-class yang didefinisikan dengan atribut dan
method yang bersifat umum yang berlaku baik pada
superclass maupun subclass disebut dengan abstract
class.
2.1.3
Polymorphism”polimorfisme”(perbedaan
bentuk)
-
Polimorfisme artinya penyamaran dimana suatu bentuk
dapat memiliki lebih dari satu bentuk.
2.2. Perbedaan Object Oriented Programming (OOP) dengan
Procedural Programmming
1.
Pemrograman Prosedural Fungsi dan data menjadi satu kesatuan
yang disebut obyek sedangkan Pemrograman Prosedural Diselesaikan
dalam bentuk prosedur atau fungsi.
2.
Pemrograman Prosedural Obyek-obyek dalam OOP bersifat aktif
sedangkan Pemrograman Prosedural Program merupakan urut-urutan
Instruksi.
3.
Pemrograman Prosedural Cara pandang : program bukan urut-urutan
instruksi tapi diselesaikan oleh obyek-obyek yang bekerjasama untuk
menyelesaikan
masalah
sedangkan
Pemrograman
Prosedural
Program dipecah-pecah ke dalam sub program yang lebih sederhana.
10
4.
Pemrograman Prosedural Fungsi dan prosedur digunakan untuk
memanipulasi data Pemrograman Prosedural Sedangkan data sendiri
bersifat pasif Kesimpulan Perbedaan antara prosedural dan OOP :
Prosedural : Fokus pada bagaimana cara komputer
menangani masalah.
OOP : Fokus pada masalah yang ditangani dengan
menggunakan komputer.
Dengan OOP, kita dapat mengimplementasikan objekt data yang
tidak hanya memiliki ciri khas (attribut), melainkan juga memiliki metode
untuk
memanipulasi
keunggulan dari
memiliki
attribut
tersebut.
Singkatnya,
konsep pemrograman terstruktur,
kemampuan
untuk
OOP
memiliki
selain itu juga
mengimplementasikan
objek
dalam
kehidupan nyata.
2.3. Konsep dasar dari Pemrograman Berorientasi Objek
Pemrograman orientasi-objek menekankan konsep berikut:
2.3.1.
Kelas
-
kumpulan atas definisi data dan fungsi-fungsi
dalam suatu unit untuk suatu tujuan tertentu. Sebagai
contoh 'class of dog' adalah suatu unit yang terdiri atas
definisi-definisi data dan fungsi-fungsi yang menunjuk
pada
berbagai
macam
perilaku/turunan
dari
anjing.
11
Sebuah class adalah dasar dari modularitas dan struktur
dalam pemrograman berorientasi object. Sebuah class
secara tipikal sebaiknya dapat dikenali oleh seorang nonprogrammer
sekalipun
terkait
dengan
domain
permasalahan yang ada, dan kode yang terdapat dalam
sebuah class sebaiknya (relatif) bersifat mandiri dan
independen (sebagaimana kode tersebut digunakan jika
tidak menggunakan OOP). Dengan modularitas, struktur
dari sebuah program akan terkait dengan aspek-aspek
dalam masalah yang akan diselesaikan melalui program
tersebut.
Cara
seperti
ini
akan
menyederhanakan
pemetaan dari masalah ke sebuah program ataupun
sebaliknya.
2.3.2.
Abstraksi - Kemampuan sebuah program untuk melewati
aspek informasi yang diproses olehnya, yaitu kemampuan
untuk memfokus pada inti. Setiap objek dalam sistem
melayani sebagai model dari "pelaku" abstrak yang dapat
melakukan kerja, laporan dan perubahan keadaannya, dan
berkomunikasi dengan objek lainnya dalam sistem, tanpa
mengungkapkan
bagaimana
kelebihan
ini
diterapkan.
Proses, fungsi atau metode dapat juga dibuat abstrak, dan
beberapa teknik digunakan untuk mengembangkan sebuah
pengabstrakan.
12
2.3.3.
Enkapsulasi - Memastikan pengguna sebuah objek tidak
dapat mengganti keadaan dalam dari sebuah objek dengan
cara yang tidak layak; hanya metode dalam objek tersebut
yang diberi ijin untuk mengakses keadaannya. Setiap
objek mengakses interface yang menyebutkan bagaimana
objek lainnya dapat berinteraksi dengannya. Objek lainnya
tidak
akan
mengetahui
dan
tergantung
kepada
representasi dalam objek tersebut.
2.3.4.
Polimorfisme
-
melalui pengiriman pesan. Tidak
bergantung kepada pemanggilan subrutin, bahasa orientasi
objek dapat
mengirim
pesan; metode
tertentu yang
berhubungan dengan sebuah pengiriman pesan tergantung
kepada objek tertentu di mana pesa tersebut dikirim.
Contohnya, bila sebuah burung menerima pesan "gerak
cepat", dia akan menggerakan sayapnya dan terbang. Bila
seekor singa menerima pesan yang sama, dia akan
menggerakkan kakinya dan berlari. Keduanya menjawab
sebuah pesan yang sama, namun yang sesuai dengan
kemampuan hewan tersebut. Ini disebut polimorfisme
karena sebuah variabel tungal dalam program dapat
memegang berbagai jenis objek yang berbeda selagi
program berjalan, dan teks program yang sama dapat
memanggil beberapa metode yang berbeda di saat yang
13
berbeda
dalam
pemanggilan
yang
sama.
Hal
ini
berlawanan dengan bahasa fungsional yang mencapai
polimorfisme melalui penggunaan fungsi kelas-pertama.
2.3.5.
Inheritas
- Mengatur polimorfisme dan enkapsulasi
dengan mengijinkan objek didefinisikan dan diciptakan
dengan jenis khusus dari objek yang sudah ada - objekobjek ini dapat membagi (dan memperluas) perilaku
mereka tanpa haru mengimplementasi ulang perilaku
tersebut (bahasa berbasis-objek tidak selalu memiliki
inheritas.)
Dengan menggunakan OOP maka dalam melakukan pemecahan
suatu masalah kita tidak melihat bagaimana cara menyelesaikan suatu
masalah tersebut (terstruktur) tetapi objek-objek apa yang dapat
melakukan pemecahan masalah tersebut. Sebagai contoh anggap kita
memiliki sebuah departemen yang memiliki manager, sekretaris, petugas
administrasi data dan lainnya. Misal manager tersebut ingin memperoleh
data
dari
bag
administrasi
maka
manager
tersebut
tidak
harus
mengambilnya langsung tetapi dapat menyuruh petugas bag administrasi
untuk mengambilnya.
Pada kasus tersebut seorang manager tidak harus mengetahui
bagaimana
cara
mengambil
data
tersebut
tetapi
manager
bisa
mendapatkan data tersebut melalui objek petugas adminiistrasi. Jadi
14
untuk menyelesaikan suatu masalah dengan kolaborasi antar objek-objek
yang ada karena setiap objek memiliki deskripsi tugasnya sendiri.
2.4. Pemrograman Berorientasi Objek (OOP)
Sebuah sistem yang dibangun berdasarkan metode berorientasi
objek adalah sebuah sistem yang komponennya di-enkapsulasi menjadi
kelompok data dan fungsi, yang dapat mewarisi atribut dan sifat dari
komponen lainnya, dan komponen-komponen tersebut saling berinteraksi
satu sama lain.
Object adalah abstraksi dari sesuatu yang mewakili sesuatu pada
dunia nyata. Pada pemrograman berorientasi objek, Objek adalah entitas
pada saat run time. Objek mempunyai siklus hidup : diciptakan,
dimanipulasi, dihancurkan. Sebuah objek dapat diacu lewat namanya atau
lewat referensinya (addressnya).
Class adalah kumpulan objek yang mempunyai atribut yang sama.
Clas adalah definisi statik dari entitas.
Entitas
:
Entitas
>
atribut
kelas
>
variable
lokal
>
parameter formal
>
hasil
fungsi
adalah
salah
satu
dari
berikut
ini:
15
Tujuh
langkah
untuk
mendapatkan
hasil
(SW)
yang
memuaskan[Meyer97]:
1. Object
based
modular
structure,
sistem
dimodularisasi
berdasarkan struktur objek
2. Data
abstraction,
objek
harus
dideskripsikan
sebagai
implementasi dari ADT
3. Automatic
memory
management,
objek
yang
sudah
tidak
dibutuhkan lagi harus di-dealokasi oleh sistem pemroses bahasa
tanpa perlu intervensi pemrogram
4. Classes, setiap type yang tidak sederhana adalah sebuah modul,
setiap modul adalah type tingkat tinggi
5. Inheritance,
sebuah
Class
dapat
didefinisikan
berdasarkan
ekstensi atau restriksi dari kelas lain
6. Polymorphism and dynamic binding, entitas program harus
dimungkinkan untuk mengacu kepada lebih dari satu kelas dan
operasi harus dimungkinkan untuk lebih dari satu kelas
7. Multiple and repeated inheritance, harus dimungkinkan untuk
membuat deklarasi kelas sebagai pewaris dari banyak kelas, dan
lebih darisatu jika pewarisnya sebuah kelas
16
2.5. Keunggulan dan Kelemahan OOP
2.5.1.
Pengembangan
sistem
dengan
metoda
OOP
dapat
meningkatkan :
1. Produktifitas
2. Kecepatan pengembangan
3. Kualitasperangkat lunak
4. Kemudahan pemeliharaan
2.5.2.
Kelemahan dari struktur metodologi programming muncul
kepermukaan meliputi:
1. Program menjadi lebih susah untuk di maintain.
2. Fungsi yang tersedia, susah untuk diubah tanpa harus
mempengaruhi fungsi sistem secara keseluruhan.
3. Programming
tidak
baik
untuk
team
development.
Programmer harus mengetahui setiap aspek bagaimana
program itu bekerja dan tidak menyebabkan terisolasi
usaha mereka atas aspek yang lain dari sistem.
4. Mungkin dapat bekerja dengan baik pada saat terisolasi tapi
tidak pada saat terintegrasi dengan sistem lain.
17
2.5.3.
Keunggulan
dari
objek-oriented
methodologies
adalah
sebagai berikut:
Langkah ini merupakan sebuah transisi intuitive dari
business
analysis
models
menuju
software
implementation models.
Kemampuan untuk lebih efektif menciptakan sistem
software dengan menggunakan sebuah team proses,
yang mengijinkan seorang spesialis untuk bekerja
hanya pada bagiannya saja.
Kemampuan untuk menggunakan kembali komponen
kode dalam suatu program dan membeli komponen
dari
developer
lain
untuk
meningkatkan
fungsi
program mereka dengan usaha minimal
Integration lebih baik dengan pasangan bebas dalam
distributed computing systems.
Meningkatkan integration dengan modern operating
systems.
Kemampuan
untuk
intuitive bagi users.
menciptakan
GUI
yang
lebih
18
2.6. Kelas (Class) dan Objek (Object)
2.6.1.
Kelas (Class) - Kelas merupakan bentuk logik dimana
seluruh
bahasa
berorientasi
objek
dibangun.
Kelas
mendefinisikan bentuk dan sifat/kelakuan/perilaku objek.
Kelas adalah template atau prototype yang mendefinisikan
type objek, sarana pengkapsulan kumpulan data-data dan
method-method yang mengolah data-data tersebut, adalah
cetakan objek, jadi objek harus merupakan instant suatu
kelas. Sebuah kelas dapat melahirkan lebih dari satu
instance.
Sebuah
kelas
dengan
banyak
instance
Pada lingkungan program berorientasi objek, pemrogram
mendefinisikan kelas secara statik. Pada saat run time,
kelas akan dinstansiasi menjadi objek (lihat dinamika).
Objek yang merupakan instansiasi dari suatu kelas selalu
dapat diacu lewat Current Object, apapun nama instantnya.
Untuk menjamin bahwa setiap instans yang lahir dari kelas
sesuai dengan definisi kelas, bebrapa bahasa menyediakan
fasilitas untuk menentukan class invariant, yaitu berupa
asersi yang menjamin kebenaran objek.
19
Untuk
menciptakan
(menghidupkan)
objek,
diperlukankonstruktor. Untuk mematikan (menghancurkan)
objek, diperlukan destructor Kelas mempunyai:
Atribut
Nilai
(data,
atribut
pada
konstanta,
saat
run
time
properti).
menyatakan
“keadaan” (state) dari objek yang merupakan instans
dari
kelas
ybs.
Beberapa
bahasa
pemrograman
mendefinisikan atribut harus sebuah Kelas, atau
beberapa bahasa memperbolehkan atribut dideklarasi
sebagai kelas atau type dasar (numerik: integer/float,
character, boolean)
Method(service,
prosedur,
fungsi).
Pada saat run time, method akan dieksekusi sesuai
dengan kode programnya, atas permintaan (lewat
pesan, message) objek lain. Method mempunyai
spesifikasi, signature (nama dan parameter), dan
mempunyai
body
(kode
program
yang
akan
dieksekusi). Signature adalah informasi bagi kelas
yang akan menggunakan kelas ini, sedangkan body
merupakan kode program yang akan dieksekusi.
Sebenarnya body tidak perlu diketahui oleh kelas
pemakai asalkan spesifikasinya jelas. Spesifikasi :
Prekondisi (initial state), post kondisi (Final State)
20
dan “proses” apa yang akan dikerjakan ketika mehod
dieksekusi.
Prekondisi
dan
Post
kondisi
dapat
dituliskan sebagai asersi (pada beberapa bahasa),
sedangkan
proses
dinyatakan
Parameter
prosedur/fungsi
dalam
dalam
komentar.
OOP
selalu
parameter input, tidak pernah ada parameter output
atau parameter input/output:
Fungsi
dirancang
untuk
melahirkan
sebuah
objek baru (range, hasil) dari objek input.
Parameter fungsi selalu merupakan parameter
input, karena fungsi akan memetakan semua
objek input (domain) menjadi sebuah objek lain
(range), tanpa mengganggu state dari objek
input.
Prosedur dirancang untuk mengubah state dari
Current objek, tanpa melahirkan objek baru.
Parameter
prosedur
selalu
parameter
input
yang mewakili informasi perubahan dari Curent
Objek.
Curent
objek
merupakan
parameter
input/output secara implisit, sehingga tidak
pernah
dimunculkan
dalam
signature
Atribut dan method disebut sebagai feature.
Selanjutnya istilah feature akan dipakai dalam
21
makalah ini untuk mewakili atribut dan/atau
method.
Deklarasi Kelas :
// Hubungan dengan kelas lain
Class X // Nama Kelas
// feature: Atribut
// feature: Method
// invarian kelas
End Class X;
Simple Class : hanya mempunyai field
Class Point
// atribut
x,y : integer
End class Point
x
y
22
Klasifikasi Kelas :
Model program berorientasi objek yang termasuk paling “lama” dan
mendasar adalah model MVC dari Smaltalk, dimana setiap aplikasi
dipandang terdiri dari tiga jenis kelas :
Modeler adalah representasi dari domain persoalan yang akan
diprogram. Viewer bertugas untuk menampilkan objek “domain”
sesuai dengan jenis objek ke antarmuka pengguna (misalnya di
lingkungan GUI : layar/windows), sedangkan Controler bertugas
untuk mengatur interaksi dan aliran data/pesan antara Modeler dan
Viewer. Objek dilahirkan berdasarkan definisi kelas, dan ketika
eksekusi program akan “hlang”. Jika objek harus dapat disimpan
secara
permanen,
merepresentasipersistent
maka
objek(pada
modeler
juga
pemrograman
harus
prosedural
menjadi arsip eksternal, external file)
Klasifikasi kelas dari sudut pandang instansiasinya :
kelas “biasa”, instansnya adalah objek, siap dipakai semua
featurenya
kelas abstrak : instance bukan objek.
defered class : kelas yang belum seluruhnya dimplementasi.
23
Klasifikasi kelas dari sudut pandang Booch :
ADT
: definisi type dan method
Mesin
: punya state dan behavior, pasif
Proses
: objek aktif
Klasifikasi kelas dari sudut pandang UML :
Boundary entity : objek-objek yang menjadi antarmuka
interaksi.
Domain entity
: objek
Controler
: objek pengendali yang mengendalikan
semua objek yang ada.
Klasifikasi kelas dari sudut pandang Coadd:
Domain problem
Interface
Hubungan Antar Kelas Antara sebuah kelas dengan kelas yang lain
ada hubungan yaitu :
Client-Supplier atau inheritance. Hubungan Client-Supplier
Pada hubungan Client-Suplier, sebuah kelas Client memakai
kelas Supplier. Hubungannya adalah hubungan “kontrak”.
Supplier menyediakan sejumlah services yang dapat dipakai
24
oleh Client, dan menjanjikan akan memenuhi “kontrak”, yaitu
memenuhi prekondisi yang ditentukan. Client wajib mentaati
aturan (prekondisi) yang tertulis sebelum memakai services
yang disediakan oleh Supplier.
Hubungan yang lebih simple, sederhana ini lebih disarankan
untuk dipakai!
Definisi : Kelas A adalah Client dari kelas B dan B adalah
Supplierdari Kelas A jika A mengandung definisi entitas e: B.
Entitas adalah :
Atribut argumen formal dari rutin hasil evaluasi fungsi
Hubungan Inheritance Padahubungan Inheritance, sebuah
kelas turunan (descendant, heir, child,…) mewarisi kelas
leluhur (parent, …).
Karena mewarisi, maka “semua” atribut dan method kelas
bapak akan “dibawa”, secara intrinsik menjadi bagian dari
kelas anak. Dalam beberapa keadaan, membawa secara
intrinsik semua atribut dan method tidak dikehendaki. Maka
pemroses bahasa menyediakan sarana untuk :
a) menambah feature baru,
b) mengubah atau menggantikan feature yang diwarisi ,
c) menghapus feature yang diwarisi,
d) menentukan
terdefinisi)
feauture
yang
masih
defered
(belum
25
Ini menimbulkan persoalan yang tidak sederhana. Karena
penghapusan menimbulkan beberapa konsekuensi berbahaya,
maka sedikit sekali metodologi/bahasa yang membolehkan
penghapusan feature yang diwarisi.
Feature
visibility
dalam
sebuah
kelas
Scope" dalam pemrograman procedural, yaitu :
a) Private,
feature
yang
"visible"
hanya
untuk
kelas
dimana feature tersebut didefinisikan
b) Protected, feature yang "disembunyikan" terhadap kelas
Client, tetapi "visible" untuk kelas turunan.
c) public, feature yang "visible", dapat dipakai oleh semua
kelas lain (Client, turunan).
d) friend: dalam bahasa C++, memberikan hak akses ke
kelas-kelas tertentu untuk dapat mengakses semua
feature
yang
sebenarnya
private.
Ini
merupakan
pelanggaran terhadap prinsip information hiding. Jadi
beberapa feature yang sebenarnya "private" dijinkan
untuk menjasi "visible" hanya untuk kelas tertentu.
Sebenarnya pemakaian friend tidak terlalu dianjurkan
karena
menyalahi
kaidah
inkapsulasi.
Visibility dari feature yang diwarisi pada kelas turunan
sehubungan dengan inheritance :
26
1) Private
inheritance
:
semua
feature
yang
diwarisi menjadi private dalam kelas anak, tanpa
peduli
visibility
pada
Parent.
Pemakaiannya
mendukung information hiding dan maintainability
dari feauture yang diwarisi karena dengan cara
ini, perubahan pada ancestor tidak mempengaruhi
anak.
sebab
Tetapi,
penggunaannya
menimbulkan
harus
nonconformity
hati-hati
terhadap
parent, sebab apa yang visible di parent :
menyalahi subtyping, spesialisasi dan substitusi
polimorfik.
2) Protected inheritance : semua feature yang
mempunyai visibility protected pada parent, tetap
protected pada Child, sedangkan yang public pada
parents, menjadi protected pada Child.
3) Public inheritance : semua feature yang diwarisi
mempunyai visibility yang sama dengan visibility
pada parent (jika public maka tetap public; jika
private tetap private; dst)
Jenis inheritance :
Single inheritance : sebuah kelas turunan merupakan turunan
dari
sebuah
kelas
bapak.
Jika
simbol
lingkaran/elips
27
merupakan simbol sebuah kelas, maka hubungan inheritance
digambarkan sebagai berikut. Arti dari gambar tersebut: B
mewarisi A. B adalah turunan dari A.
Multiple inheritance :sebuah kelas turunan mewarisi lebih dari
satu kelas bapak (Join) Multiple inheriance menimbulkan
beberapa persoalan : jika ternyata ada feature di kelas-kelas
leluhur yang ternyata “konflik”. Konflik yang terjadi mungkin
adalah :
a) konflik nama
b) konflik “body” (untuk method) Tidak semua bahasa
mensupport repeated inheritance, tetapi menyediakan
mekanisme lain untuk merealisasi konsep ini.
c) Repeated inheritance : sebuah kelas turunan mewarisi
lebih dari satu kelas bapak, dan kelas bapak tersebut
mempunyai leluhur yang sama.
2.7. Lingkup akses OOP :
1. Public : dapat diakses/dipakai kelas apapun
2. Friend : hanya kelas tertentu yang boleh mengakses
3. Private : hanya kelas yang bersangkutan yang boleh
memakai Penentuan lingkup akses terhadap feature
merupakan bagian yang harus dirancang. Sebenarnya,
dalam perancangan yang murni OO, sebaiknya “friend”
tidak digunakan.
PEMBAHASAN
2.1. Pengertian Object Oriented Programing ( OOP )
Object Oriented Programming (OOP) atau dalam bahasa Indonesia
disebut Pemrograman berorientasi objek
adalah suatu metode
pemrograman yang berbasiskan pada objek. secara singkat pengertian
dari OOP adalah koleksi objek yang saling berinteraksi dan saling
memberikan informasi satu dengan yang lainnya atau Setiap objek dapat
menerima pesan, memproses data, dan mengirim pesan ke objek lainnya.
Model data berorientasi objek dikatakan dapat memberi fleksibilitas
yang lebih, kemudahan mengubah program, dan digunakan luas dalam
teknik piranti lunak skala besar. Lebih jauh lagi, pendukung OOP
mengklaim bahwa OOP lebih mudah dipelajari bagi pemula dibanding
dengan pendekatan sebelumnya, dan pendekatan OOP lebih mudah
dikembangkan dan dirawat. Suatu program disebut dengan pemrograman
berbasis obyek (OOP) karena terdapat :
7
8
2.1.1
Encapsulation (pembungkusan) - Variabel dan method
dalam suatu obyek dibungkus agar terlindungi Untuk
mengakses, variabel dan method yang sudah dibungkus
tadi
perlu
interface
Setelah
variabel
dan
method
dibungkus, hak akses terhadapnya bisa ditentukan.
Konsep pembungkusan ini pada dasarnya merupakan
perluasan dari tipe data struktur
2.1.2
Inheritance (pewarisan) - Sebuah class bisa mewariskan
atribut dan method-nya ke class yang lain Class yang
mewarisi disebut superclass Class yang diberi warisan
disebut subclass Sebuah subclass bisa mewariskan atau
berlaku sebagai superclass bagi class yang lain =>
disebut multilevel inheritance.
Keuntungan Penggunaan Pewarisan :
Subclass memiliki atribut dan method yang spesifik
yang membedakannya dengan superclass, meskipun
keduanya mirip (dalam hal kesamaan atribut dan
method).
Dengan
demikian
pada
pembuatan
subclass,
programmer bisa menggunakan ulang source code dari
superclass yang ada => ini yang disebut dengan istilah
9
reuse. Class-class yang didefinisikan dengan atribut dan
method yang bersifat umum yang berlaku baik pada
superclass maupun subclass disebut dengan abstract
class.
2.1.3
Polymorphism”polimorfisme”(perbedaan
bentuk)
-
Polimorfisme artinya penyamaran dimana suatu bentuk
dapat memiliki lebih dari satu bentuk.
2.2. Perbedaan Object Oriented Programming (OOP) dengan
Procedural Programmming
1.
Pemrograman Prosedural Fungsi dan data menjadi satu kesatuan
yang disebut obyek sedangkan Pemrograman Prosedural Diselesaikan
dalam bentuk prosedur atau fungsi.
2.
Pemrograman Prosedural Obyek-obyek dalam OOP bersifat aktif
sedangkan Pemrograman Prosedural Program merupakan urut-urutan
Instruksi.
3.
Pemrograman Prosedural Cara pandang : program bukan urut-urutan
instruksi tapi diselesaikan oleh obyek-obyek yang bekerjasama untuk
menyelesaikan
masalah
sedangkan
Pemrograman
Prosedural
Program dipecah-pecah ke dalam sub program yang lebih sederhana.
10
4.
Pemrograman Prosedural Fungsi dan prosedur digunakan untuk
memanipulasi data Pemrograman Prosedural Sedangkan data sendiri
bersifat pasif Kesimpulan Perbedaan antara prosedural dan OOP :
Prosedural : Fokus pada bagaimana cara komputer
menangani masalah.
OOP : Fokus pada masalah yang ditangani dengan
menggunakan komputer.
Dengan OOP, kita dapat mengimplementasikan objekt data yang
tidak hanya memiliki ciri khas (attribut), melainkan juga memiliki metode
untuk
memanipulasi
keunggulan dari
memiliki
attribut
tersebut.
Singkatnya,
konsep pemrograman terstruktur,
kemampuan
untuk
OOP
memiliki
selain itu juga
mengimplementasikan
objek
dalam
kehidupan nyata.
2.3. Konsep dasar dari Pemrograman Berorientasi Objek
Pemrograman orientasi-objek menekankan konsep berikut:
2.3.1.
Kelas
-
kumpulan atas definisi data dan fungsi-fungsi
dalam suatu unit untuk suatu tujuan tertentu. Sebagai
contoh 'class of dog' adalah suatu unit yang terdiri atas
definisi-definisi data dan fungsi-fungsi yang menunjuk
pada
berbagai
macam
perilaku/turunan
dari
anjing.
11
Sebuah class adalah dasar dari modularitas dan struktur
dalam pemrograman berorientasi object. Sebuah class
secara tipikal sebaiknya dapat dikenali oleh seorang nonprogrammer
sekalipun
terkait
dengan
domain
permasalahan yang ada, dan kode yang terdapat dalam
sebuah class sebaiknya (relatif) bersifat mandiri dan
independen (sebagaimana kode tersebut digunakan jika
tidak menggunakan OOP). Dengan modularitas, struktur
dari sebuah program akan terkait dengan aspek-aspek
dalam masalah yang akan diselesaikan melalui program
tersebut.
Cara
seperti
ini
akan
menyederhanakan
pemetaan dari masalah ke sebuah program ataupun
sebaliknya.
2.3.2.
Abstraksi - Kemampuan sebuah program untuk melewati
aspek informasi yang diproses olehnya, yaitu kemampuan
untuk memfokus pada inti. Setiap objek dalam sistem
melayani sebagai model dari "pelaku" abstrak yang dapat
melakukan kerja, laporan dan perubahan keadaannya, dan
berkomunikasi dengan objek lainnya dalam sistem, tanpa
mengungkapkan
bagaimana
kelebihan
ini
diterapkan.
Proses, fungsi atau metode dapat juga dibuat abstrak, dan
beberapa teknik digunakan untuk mengembangkan sebuah
pengabstrakan.
12
2.3.3.
Enkapsulasi - Memastikan pengguna sebuah objek tidak
dapat mengganti keadaan dalam dari sebuah objek dengan
cara yang tidak layak; hanya metode dalam objek tersebut
yang diberi ijin untuk mengakses keadaannya. Setiap
objek mengakses interface yang menyebutkan bagaimana
objek lainnya dapat berinteraksi dengannya. Objek lainnya
tidak
akan
mengetahui
dan
tergantung
kepada
representasi dalam objek tersebut.
2.3.4.
Polimorfisme
-
melalui pengiriman pesan. Tidak
bergantung kepada pemanggilan subrutin, bahasa orientasi
objek dapat
mengirim
pesan; metode
tertentu yang
berhubungan dengan sebuah pengiriman pesan tergantung
kepada objek tertentu di mana pesa tersebut dikirim.
Contohnya, bila sebuah burung menerima pesan "gerak
cepat", dia akan menggerakan sayapnya dan terbang. Bila
seekor singa menerima pesan yang sama, dia akan
menggerakkan kakinya dan berlari. Keduanya menjawab
sebuah pesan yang sama, namun yang sesuai dengan
kemampuan hewan tersebut. Ini disebut polimorfisme
karena sebuah variabel tungal dalam program dapat
memegang berbagai jenis objek yang berbeda selagi
program berjalan, dan teks program yang sama dapat
memanggil beberapa metode yang berbeda di saat yang
13
berbeda
dalam
pemanggilan
yang
sama.
Hal
ini
berlawanan dengan bahasa fungsional yang mencapai
polimorfisme melalui penggunaan fungsi kelas-pertama.
2.3.5.
Inheritas
- Mengatur polimorfisme dan enkapsulasi
dengan mengijinkan objek didefinisikan dan diciptakan
dengan jenis khusus dari objek yang sudah ada - objekobjek ini dapat membagi (dan memperluas) perilaku
mereka tanpa haru mengimplementasi ulang perilaku
tersebut (bahasa berbasis-objek tidak selalu memiliki
inheritas.)
Dengan menggunakan OOP maka dalam melakukan pemecahan
suatu masalah kita tidak melihat bagaimana cara menyelesaikan suatu
masalah tersebut (terstruktur) tetapi objek-objek apa yang dapat
melakukan pemecahan masalah tersebut. Sebagai contoh anggap kita
memiliki sebuah departemen yang memiliki manager, sekretaris, petugas
administrasi data dan lainnya. Misal manager tersebut ingin memperoleh
data
dari
bag
administrasi
maka
manager
tersebut
tidak
harus
mengambilnya langsung tetapi dapat menyuruh petugas bag administrasi
untuk mengambilnya.
Pada kasus tersebut seorang manager tidak harus mengetahui
bagaimana
cara
mengambil
data
tersebut
tetapi
manager
bisa
mendapatkan data tersebut melalui objek petugas adminiistrasi. Jadi
14
untuk menyelesaikan suatu masalah dengan kolaborasi antar objek-objek
yang ada karena setiap objek memiliki deskripsi tugasnya sendiri.
2.4. Pemrograman Berorientasi Objek (OOP)
Sebuah sistem yang dibangun berdasarkan metode berorientasi
objek adalah sebuah sistem yang komponennya di-enkapsulasi menjadi
kelompok data dan fungsi, yang dapat mewarisi atribut dan sifat dari
komponen lainnya, dan komponen-komponen tersebut saling berinteraksi
satu sama lain.
Object adalah abstraksi dari sesuatu yang mewakili sesuatu pada
dunia nyata. Pada pemrograman berorientasi objek, Objek adalah entitas
pada saat run time. Objek mempunyai siklus hidup : diciptakan,
dimanipulasi, dihancurkan. Sebuah objek dapat diacu lewat namanya atau
lewat referensinya (addressnya).
Class adalah kumpulan objek yang mempunyai atribut yang sama.
Clas adalah definisi statik dari entitas.
Entitas
:
Entitas
>
atribut
kelas
>
variable
lokal
>
parameter formal
>
hasil
fungsi
adalah
salah
satu
dari
berikut
ini:
15
Tujuh
langkah
untuk
mendapatkan
hasil
(SW)
yang
memuaskan[Meyer97]:
1. Object
based
modular
structure,
sistem
dimodularisasi
berdasarkan struktur objek
2. Data
abstraction,
objek
harus
dideskripsikan
sebagai
implementasi dari ADT
3. Automatic
memory
management,
objek
yang
sudah
tidak
dibutuhkan lagi harus di-dealokasi oleh sistem pemroses bahasa
tanpa perlu intervensi pemrogram
4. Classes, setiap type yang tidak sederhana adalah sebuah modul,
setiap modul adalah type tingkat tinggi
5. Inheritance,
sebuah
Class
dapat
didefinisikan
berdasarkan
ekstensi atau restriksi dari kelas lain
6. Polymorphism and dynamic binding, entitas program harus
dimungkinkan untuk mengacu kepada lebih dari satu kelas dan
operasi harus dimungkinkan untuk lebih dari satu kelas
7. Multiple and repeated inheritance, harus dimungkinkan untuk
membuat deklarasi kelas sebagai pewaris dari banyak kelas, dan
lebih darisatu jika pewarisnya sebuah kelas
16
2.5. Keunggulan dan Kelemahan OOP
2.5.1.
Pengembangan
sistem
dengan
metoda
OOP
dapat
meningkatkan :
1. Produktifitas
2. Kecepatan pengembangan
3. Kualitasperangkat lunak
4. Kemudahan pemeliharaan
2.5.2.
Kelemahan dari struktur metodologi programming muncul
kepermukaan meliputi:
1. Program menjadi lebih susah untuk di maintain.
2. Fungsi yang tersedia, susah untuk diubah tanpa harus
mempengaruhi fungsi sistem secara keseluruhan.
3. Programming
tidak
baik
untuk
team
development.
Programmer harus mengetahui setiap aspek bagaimana
program itu bekerja dan tidak menyebabkan terisolasi
usaha mereka atas aspek yang lain dari sistem.
4. Mungkin dapat bekerja dengan baik pada saat terisolasi tapi
tidak pada saat terintegrasi dengan sistem lain.
17
2.5.3.
Keunggulan
dari
objek-oriented
methodologies
adalah
sebagai berikut:
Langkah ini merupakan sebuah transisi intuitive dari
business
analysis
models
menuju
software
implementation models.
Kemampuan untuk lebih efektif menciptakan sistem
software dengan menggunakan sebuah team proses,
yang mengijinkan seorang spesialis untuk bekerja
hanya pada bagiannya saja.
Kemampuan untuk menggunakan kembali komponen
kode dalam suatu program dan membeli komponen
dari
developer
lain
untuk
meningkatkan
fungsi
program mereka dengan usaha minimal
Integration lebih baik dengan pasangan bebas dalam
distributed computing systems.
Meningkatkan integration dengan modern operating
systems.
Kemampuan
untuk
intuitive bagi users.
menciptakan
GUI
yang
lebih
18
2.6. Kelas (Class) dan Objek (Object)
2.6.1.
Kelas (Class) - Kelas merupakan bentuk logik dimana
seluruh
bahasa
berorientasi
objek
dibangun.
Kelas
mendefinisikan bentuk dan sifat/kelakuan/perilaku objek.
Kelas adalah template atau prototype yang mendefinisikan
type objek, sarana pengkapsulan kumpulan data-data dan
method-method yang mengolah data-data tersebut, adalah
cetakan objek, jadi objek harus merupakan instant suatu
kelas. Sebuah kelas dapat melahirkan lebih dari satu
instance.
Sebuah
kelas
dengan
banyak
instance
Pada lingkungan program berorientasi objek, pemrogram
mendefinisikan kelas secara statik. Pada saat run time,
kelas akan dinstansiasi menjadi objek (lihat dinamika).
Objek yang merupakan instansiasi dari suatu kelas selalu
dapat diacu lewat Current Object, apapun nama instantnya.
Untuk menjamin bahwa setiap instans yang lahir dari kelas
sesuai dengan definisi kelas, bebrapa bahasa menyediakan
fasilitas untuk menentukan class invariant, yaitu berupa
asersi yang menjamin kebenaran objek.
19
Untuk
menciptakan
(menghidupkan)
objek,
diperlukankonstruktor. Untuk mematikan (menghancurkan)
objek, diperlukan destructor Kelas mempunyai:
Atribut
Nilai
(data,
atribut
pada
konstanta,
saat
run
time
properti).
menyatakan
“keadaan” (state) dari objek yang merupakan instans
dari
kelas
ybs.
Beberapa
bahasa
pemrograman
mendefinisikan atribut harus sebuah Kelas, atau
beberapa bahasa memperbolehkan atribut dideklarasi
sebagai kelas atau type dasar (numerik: integer/float,
character, boolean)
Method(service,
prosedur,
fungsi).
Pada saat run time, method akan dieksekusi sesuai
dengan kode programnya, atas permintaan (lewat
pesan, message) objek lain. Method mempunyai
spesifikasi, signature (nama dan parameter), dan
mempunyai
body
(kode
program
yang
akan
dieksekusi). Signature adalah informasi bagi kelas
yang akan menggunakan kelas ini, sedangkan body
merupakan kode program yang akan dieksekusi.
Sebenarnya body tidak perlu diketahui oleh kelas
pemakai asalkan spesifikasinya jelas. Spesifikasi :
Prekondisi (initial state), post kondisi (Final State)
20
dan “proses” apa yang akan dikerjakan ketika mehod
dieksekusi.
Prekondisi
dan
Post
kondisi
dapat
dituliskan sebagai asersi (pada beberapa bahasa),
sedangkan
proses
dinyatakan
Parameter
prosedur/fungsi
dalam
dalam
komentar.
OOP
selalu
parameter input, tidak pernah ada parameter output
atau parameter input/output:
Fungsi
dirancang
untuk
melahirkan
sebuah
objek baru (range, hasil) dari objek input.
Parameter fungsi selalu merupakan parameter
input, karena fungsi akan memetakan semua
objek input (domain) menjadi sebuah objek lain
(range), tanpa mengganggu state dari objek
input.
Prosedur dirancang untuk mengubah state dari
Current objek, tanpa melahirkan objek baru.
Parameter
prosedur
selalu
parameter
input
yang mewakili informasi perubahan dari Curent
Objek.
Curent
objek
merupakan
parameter
input/output secara implisit, sehingga tidak
pernah
dimunculkan
dalam
signature
Atribut dan method disebut sebagai feature.
Selanjutnya istilah feature akan dipakai dalam
21
makalah ini untuk mewakili atribut dan/atau
method.
Deklarasi Kelas :
// Hubungan dengan kelas lain
Class X // Nama Kelas
// feature: Atribut
// feature: Method
// invarian kelas
End Class X;
Simple Class : hanya mempunyai field
Class Point
// atribut
x,y : integer
End class Point
x
y
22
Klasifikasi Kelas :
Model program berorientasi objek yang termasuk paling “lama” dan
mendasar adalah model MVC dari Smaltalk, dimana setiap aplikasi
dipandang terdiri dari tiga jenis kelas :
Modeler adalah representasi dari domain persoalan yang akan
diprogram. Viewer bertugas untuk menampilkan objek “domain”
sesuai dengan jenis objek ke antarmuka pengguna (misalnya di
lingkungan GUI : layar/windows), sedangkan Controler bertugas
untuk mengatur interaksi dan aliran data/pesan antara Modeler dan
Viewer. Objek dilahirkan berdasarkan definisi kelas, dan ketika
eksekusi program akan “hlang”. Jika objek harus dapat disimpan
secara
permanen,
merepresentasipersistent
maka
objek(pada
modeler
juga
pemrograman
harus
prosedural
menjadi arsip eksternal, external file)
Klasifikasi kelas dari sudut pandang instansiasinya :
kelas “biasa”, instansnya adalah objek, siap dipakai semua
featurenya
kelas abstrak : instance bukan objek.
defered class : kelas yang belum seluruhnya dimplementasi.
23
Klasifikasi kelas dari sudut pandang Booch :
ADT
: definisi type dan method
Mesin
: punya state dan behavior, pasif
Proses
: objek aktif
Klasifikasi kelas dari sudut pandang UML :
Boundary entity : objek-objek yang menjadi antarmuka
interaksi.
Domain entity
: objek
Controler
: objek pengendali yang mengendalikan
semua objek yang ada.
Klasifikasi kelas dari sudut pandang Coadd:
Domain problem
Interface
Hubungan Antar Kelas Antara sebuah kelas dengan kelas yang lain
ada hubungan yaitu :
Client-Supplier atau inheritance. Hubungan Client-Supplier
Pada hubungan Client-Suplier, sebuah kelas Client memakai
kelas Supplier. Hubungannya adalah hubungan “kontrak”.
Supplier menyediakan sejumlah services yang dapat dipakai
24
oleh Client, dan menjanjikan akan memenuhi “kontrak”, yaitu
memenuhi prekondisi yang ditentukan. Client wajib mentaati
aturan (prekondisi) yang tertulis sebelum memakai services
yang disediakan oleh Supplier.
Hubungan yang lebih simple, sederhana ini lebih disarankan
untuk dipakai!
Definisi : Kelas A adalah Client dari kelas B dan B adalah
Supplierdari Kelas A jika A mengandung definisi entitas e: B.
Entitas adalah :
Atribut argumen formal dari rutin hasil evaluasi fungsi
Hubungan Inheritance Padahubungan Inheritance, sebuah
kelas turunan (descendant, heir, child,…) mewarisi kelas
leluhur (parent, …).
Karena mewarisi, maka “semua” atribut dan method kelas
bapak akan “dibawa”, secara intrinsik menjadi bagian dari
kelas anak. Dalam beberapa keadaan, membawa secara
intrinsik semua atribut dan method tidak dikehendaki. Maka
pemroses bahasa menyediakan sarana untuk :
a) menambah feature baru,
b) mengubah atau menggantikan feature yang diwarisi ,
c) menghapus feature yang diwarisi,
d) menentukan
terdefinisi)
feauture
yang
masih
defered
(belum
25
Ini menimbulkan persoalan yang tidak sederhana. Karena
penghapusan menimbulkan beberapa konsekuensi berbahaya,
maka sedikit sekali metodologi/bahasa yang membolehkan
penghapusan feature yang diwarisi.
Feature
visibility
dalam
sebuah
kelas
Scope" dalam pemrograman procedural, yaitu :
a) Private,
feature
yang
"visible"
hanya
untuk
kelas
dimana feature tersebut didefinisikan
b) Protected, feature yang "disembunyikan" terhadap kelas
Client, tetapi "visible" untuk kelas turunan.
c) public, feature yang "visible", dapat dipakai oleh semua
kelas lain (Client, turunan).
d) friend: dalam bahasa C++, memberikan hak akses ke
kelas-kelas tertentu untuk dapat mengakses semua
feature
yang
sebenarnya
private.
Ini
merupakan
pelanggaran terhadap prinsip information hiding. Jadi
beberapa feature yang sebenarnya "private" dijinkan
untuk menjasi "visible" hanya untuk kelas tertentu.
Sebenarnya pemakaian friend tidak terlalu dianjurkan
karena
menyalahi
kaidah
inkapsulasi.
Visibility dari feature yang diwarisi pada kelas turunan
sehubungan dengan inheritance :
26
1) Private
inheritance
:
semua
feature
yang
diwarisi menjadi private dalam kelas anak, tanpa
peduli
visibility
pada
Parent.
Pemakaiannya
mendukung information hiding dan maintainability
dari feauture yang diwarisi karena dengan cara
ini, perubahan pada ancestor tidak mempengaruhi
anak.
sebab
Tetapi,
penggunaannya
menimbulkan
harus
nonconformity
hati-hati
terhadap
parent, sebab apa yang visible di parent :
menyalahi subtyping, spesialisasi dan substitusi
polimorfik.
2) Protected inheritance : semua feature yang
mempunyai visibility protected pada parent, tetap
protected pada Child, sedangkan yang public pada
parents, menjadi protected pada Child.
3) Public inheritance : semua feature yang diwarisi
mempunyai visibility yang sama dengan visibility
pada parent (jika public maka tetap public; jika
private tetap private; dst)
Jenis inheritance :
Single inheritance : sebuah kelas turunan merupakan turunan
dari
sebuah
kelas
bapak.
Jika
simbol
lingkaran/elips
27
merupakan simbol sebuah kelas, maka hubungan inheritance
digambarkan sebagai berikut. Arti dari gambar tersebut: B
mewarisi A. B adalah turunan dari A.
Multiple inheritance :sebuah kelas turunan mewarisi lebih dari
satu kelas bapak (Join) Multiple inheriance menimbulkan
beberapa persoalan : jika ternyata ada feature di kelas-kelas
leluhur yang ternyata “konflik”. Konflik yang terjadi mungkin
adalah :
a) konflik nama
b) konflik “body” (untuk method) Tidak semua bahasa
mensupport repeated inheritance, tetapi menyediakan
mekanisme lain untuk merealisasi konsep ini.
c) Repeated inheritance : sebuah kelas turunan mewarisi
lebih dari satu kelas bapak, dan kelas bapak tersebut
mempunyai leluhur yang sama.
2.7. Lingkup akses OOP :
1. Public : dapat diakses/dipakai kelas apapun
2. Friend : hanya kelas tertentu yang boleh mengakses
3. Private : hanya kelas yang bersangkutan yang boleh
memakai Penentuan lingkup akses terhadap feature
merupakan bagian yang harus dirancang. Sebenarnya,
dalam perancangan yang murni OO, sebaiknya “friend”
tidak digunakan.