Modularitas dan Abstraksi Data
15.5. Modularitas dan Abstraksi Data
Modularitas dan abstraksi data Penyembunyian informasi yang dapat didefinisikan
dilakukan modul untuk melindungi Modul atau sebuah unit dari
informasi dari "user external" organisasi sistem perangkat lunak
dalam penggunaannya (misalnya yang membundel sekumpulan
software error, security) dan entitas (data dan metoda operasi)
merupakan basis dari abstract dan dengan secara teliti data type (ragam data abstraks). mengontrol apa "user eksternal" Abstract data type (ADT) atau bisa lihat atau gunakan.
Kumpulan obyek dan metoda operasi yang mempresentasikan
Direktorat Pembinaan SMK | 2008
Pemrograman Berorientasi Objek Bahasa Pemrorgraman
sifat-sifat abstraks bagi "user" Cara untuk mendefinisikan dengan menyembunyikan interface yang "clean" bagaimana semua itu Cara untuk menyembunyikan direpresentasikan dalam rincian internal dari data dan representasi data level yang lebih
metoda-metoda operasi
rendah.
Cara untuk kompilasi secara
Interface dari modul atau
terpisah misalnya:
Spesifikasi bagaimana modul o Turbo Pascal menyediakan tersebut dilihat atau digunakan
fasilitas pembuatan TPU oleh "user" sementara bagian
dengan definisi interface.
yang private tetap tersembunyi, o Bahasa C memungkinkan perhatikan contoh dibawah ini:
pembuatan object module o Sebuah microwave oven
(*.obj) dan library (*.a) yang sebagai suatu modul. Pemakai
dapat dilink ke modul program dapat menggunakannya utama melalui interface header
dengan tersedianya interface
file (*.h).
panel tombol. Pemakai hanya Dalam bahasa Java perlu tahu untuk apa tombol-
memungkinkan konsep tombol tersebut dan bagaimana
pemrograman modular, enkapsulasi, mengoperasikannya. Pemakai dan abstraksi data dengan tidak perlu tahu mekanisme disediakannya skema-skema class, kerja oven tersebut secara interface, dan packages. Enkapsulasi intenal seperti kerja tabung dimungkinkan dengan pendefinisian magnetron, mikrokontroller private bagi data/metoda yang mekanik penggerak dan lain disemebunyikan dan public bagi sebagainya.).
data/metoda yang berperan sebagai o Window menyediakan sejumlah
interface.
button untuk dapat menutup, Dalam Java terdapat keyword memperbesar, memperkecil, interface dengan pengertian yang
dan sebagainya. lain. Keword ini digunakan sebagai suatu definisi teknis yang
15.5.1. Pemrograman Modular
menyatakan sekumpulan metoda
Bahasa-bahasa pemrograman abstraks yang bisa modern menyediakan cara-cara diimplementasikan dalam untuk dapat membuat sistem pendefinisian kelas-kelas obyek. perangkat lunak secara modular Manfaat definisi interface ini agar demikian, antara lain:
obyek-obyek dari sejumlah kelas Cara untuk mengelompokkan
yang mengimplementasikan interface bersama data dan metoda operasi
ini dapat saling direfer oleh variabel beragam interface ini. Perhatikan contoh dibawah ini:
2008 | Direktorat Pembinaan SMK
Bahasa Pemrograman Pemrograman Berorientasi Objek
Program 15.2 interface Xclass { public void whataMethod(); } public class Aclass implements Xclass { public void whataMethod() { ... // diimplementasikan disini } } public class Bclass implements Xclass { public void whataMethod() { ... // diimplementasikan disini } } class Mainclass { Xclass a,b; static public void main(String [] a) {
a = new Aclass();
b = new Bclass(); a.whataMethod(); b.whataMethod(); } }
Contoh lain adalah pada pendefinisian modularitas dan ADT masalah pencarian data (searching).
adalah keyword package. Keyword Key data bisa muncul dalam berbagai
ini membundle sekumpulan kelas tipe data: int, float, String, dsb. yang satu dengan yang lainnya saling Fasiltas interface ini dapat memiliki relasi khusus. Pendefinisian memungkinkan pedefinisan algoritma
package ini memungkinkan kompilasi umum compareTo() dalam interface secara terpisah dan diimport sebagai ComparisonKey untuk setiap tipe library. Sebagai contoh kasus untuk data. Selanjutnya kelas-kelas yang pembahasan modularitas dan ADT mengimplementasikan interface adalah suatu kelas Priority Queue. tersebut dapat didefinisikan sesuai denga tipe data yang dikehendaki.
15.5.2. Priority Queue
Dengan fasilitas-fasilitas ini kita Priority queue (PQ) adalah suatu bisa mengembangkan sistem struktur data abstraks yang perangkat lunak besar dengan berperilaku sebagai berikut. PQ komponen-komponennya yang adalah kumpulan item data yang bersifat umum demikian dan masing-masing memiliki tingkat selanjutnya dapat di-plug-and-play prioritas yang bisa berbeda. Apabila implementasi dalam berbagai tipe item data diambil dari kumpulan data. Fasilitas Java lain dalam tersebut maka item data yang
Direktorat Pembinaan SMK | 2008
Pemrograman Berorientasi Objek Bahasa Pemrorgraman
berprioritas paling tinggi lah yang alterntifnya data yang di ambil satu diperoleh.
demi satu di taruh dari kiri ke kanan Dalam pengembangannya elemen-elemen array. pertama kali adalah Terdapat sejumlah metoda memformulasikan konsep operasi yang menjadi 'interface': bagi abstraksnya tanpa harus memikirkan
pemakai kelas obyek ini. tipe datanya, apalagi implementasi mengkonstruksikan PQ yang rincinya. Implementasinya sendiri
diinisialisasi kosong dapat dilakukan dalam dua PQ = new PriorityQueue(); representasi level bawah yang mendapatkan ukuran (jumlah item berbeda: array atau linked-list yang
data) dalam PQ,
dapat belakangan kita buat.
n = PQ.size();
Banyak ditemukan dalam menyisipkan item baru dalam PQ, masalah-masalah penjadwalan, PQ.insert(X); misalnya untuk sistem antrian untuk bila PQ tidak kosong, menghapus pelayanan pasien dalam ruang
item dengan prioritas tertinggi praktek dokter, penjadwalan dalam PQ
pembayaran tagihan, dsb. Prioritas
X = PQ.remove();
bisa didefinisikan dalam beberapa
aspek. PQ dapat digunakan juga Secara sepintas bisa diketahui untuk pengurutan data kengan key bahwa terdapat suatu proses internal data sebagai harga prioritas: (yang tidak perlu diketahui oleh user) sejumlah data tak terurut dimasukkan di dalam skema ini yaitu pengurutan ke dalam PQ lalu setelah semua item data. Implementasi bagaimana masuk satu demi satu data diambil pun user "tidak perduli". Contoh dari PQ. Pada pengurutan menaik penggunaan dalam metoda maka data yang diambil ditaruh dari pengurutan data berdasarkan Priority kanan ke kiri elemen-elemen array.
Queue:
Pada pengurutan menurun harga key bisa kebalikan dari harga prioritas,
Program 15.3 void priorityQueueSort(ComparisonKey[] A) {
int n = A.length; PriorityQueue PQ = new PriorityQueue(); // create & inisialisasi PQ
for (int i = 0 ; i < n; i++) PQ.insert(A[i]); // mengisi PQ
for (int i = n‐ 1 ; i >= 0 ; i‐‐) A[i] = PQ.remove(); // mengambil satu/satu
Selanjutnya contoh penggunaan mengimplementasikannya maka key PQ dengan tipe key integer ini dapat
data item yang sedang kerjakan ini dilihat dalam program lebih dibungkus dalam tipe data yang
lengkapnya. Pada saat ini definisi generik yaitu: ComparisonKey kelas PriorityQueue belum sebagai suatu interface. diimplementasikan. Sebelum
2008 | Direktorat Pembinaan SMK
Bahasa Pemrograman Pemrograman Berorientasi Objek
interface ComparisonKey { Selanjutnya ComparisonKey ini int compareTo(ComparisonKey value);
diimplementasikan sesuai dengan String toString();
tipe data yang sedang digunakan, } dalam hal ini misalnya kita menggunakan integer (nanti kita lihat bila key bertipe String).
Program 15.4 public class PQItem implements ComparisonKey { private int key;
PQItem(int value) { key = value; } public String toString() { return Integer.toString(key); } public int compareTo(ComparisonKey value) { int a = this.key; int b = ((PQItem) value).key;
return ((a==b)? 0 :( (a > b)? 1 : ‐ 1 ));
Pada level yang lebih rendah Saat item data masuk dalam PQ kelas priority queue ini dapat
maka langsung ditempatkan pada diimplementasikan baik dengan array
posisi yang sesuai dalam urutan atau dengan linked list, dimana hal
menurun (dilakukan pencarian tersebut dijelaskan sebagai berikut:
posisi terlebih dulu lalu dilakukan Versi Implementasi Unsorted
insert), dan saat di-remove maka Array (berukuran dinamis)
cukup dilakukan delete-first (node PQ menyimpan item data dalam
pertama yang diambil. suatu array yang apabila penuh
Kedua implementasi tersebut panjangnya dapat diperbesar berfungsi sama tapi dengan secara otomatis. Item data masuk
implementasi yang berbeda namun
begitu saja di bagian belakang. sekali lagi user melihatnya sesuai Saat di-remove maka item data dengan abstraksi spesifikasi PQ yang dengan key terbesar dicari ditentukan. Dalam prakteknya maka (dilakukan sequential search). Key
kedua versi itu bisa dipilih tanpa
yang diremove tempatnya mengubah modul-modul pemakainya digantikan oleh key yang paling selama spesifikasinya ditaati. belakang (tidak melakukan
Selain implementasinya yang pergeseran!)
bisa berbeda tanpa mengubah Versi Implementasi Sorted Linked-
rancangan modul tingkat di atasnya, list
representasi key data pun dapat diimplementasikan secara berbeda
Direktorat Pembinaan SMK | 2008
Pemrograman Berorientasi Objek
Bahasa Pemrorgraman
karena ComparisonKey yang contoh di atas.ComparisonKey ini didefinisikan abstraks tersebut. memiliki konsep Representation Dengan abstraksi ComparisonKey di
Independent Module. Berikut ini
atas maka key bertipe lain dapat representasi String untuk key. menggantikan tipe key integer dalam
Program 15.5 class PQItem implements ComparisonKey { private String key; PQItem(String value) { key = value; } public String toString() { return key; } public int compareTo(ComparisonKey value) { String a = this.key; String b = ((PQItem)value).key; return a.compareTo(b);
// metoda compareTo dalam kelas String
Dalam program aplikasinya sementara sejumlah metoda tetap perubahan terjadi pada bagian data,
sama.