Pemrograman Berorientasi Objek menggunakan Python
__.:Design Patterns:.__
Pemrograman Berorientasi Objek
menggunakan Python:
Design Patterns 3
Design Petterns merupakan solusi untuk permasalahan-permasalahan yang
sering muncul pengembangan rancangan perangkat lunak. Dapat dikatakan
design pattern seperti blueprint yang dapat disesuaikan untuk menyelesaikan
masalah rancangan dalam kode program.
Pattern bukan suatu kode yang dapat kita gunakan dalam pengembangan
progam, namun lebih kepada konsep solusi untuk masalah rancangan yang ada,
sehingga program yang kita kembangkan memenuhi prinsip-prinsip program
yang baik.
Design Pattern adalah alat untuk pengujian dan percobaan masalah-masalah
umum pada rancangan perangkat lunak. Meskipun kita tidak pernah
menemukan permasalahan tersebut, memahami patterns tetap bermanfaat
karena ini mengajarkan kita bagaimana menyelesaikan permasalahan-
permasalahan pendek menggunakan prinsip-prinsip rancangan berorientasi-
objek.
Design Pattern mendifinisikan bahasa umum dimana anda dan tim dapat
berkomunikasi lebih efektif. Kita dapat mengatakan, “gunakan saja Singleton,”
dan semua orang faham dengan ide tersebut. Tanpa perlu menjelaskan apa itu
singleton jika kita memahami nama pattern tersebut.
Untuk bisa memahami Design Pattern, anda harus memahami aspek-aspek
utama dalam pemrograman berorientasi objek, antara lain:
• Enkapsulasi
o Perilaku objek disembunyikan dari dunia luar atau objek menjaga
nilai informasinya bersifat prifat
o Client tidak dapat mengubah nilai internal objek secara langsung,
namun client melakukan permintaan kepada objek dengan
mengirimkan pesan. Berdasarkan tipe dari permintaan ini, objek
1
Pemrograman Berorientasi Objek menggunakan Python
__.:Design Patterns:.__
akan merespon dengan mengubah nilai internal menggunakan
fungsi-fungsi khusus seperti get dan set.
o Di Python, konsep enkapsulasi (penyembunyian data danmetode)
tidak secara implisit, tidak memiliki keyword seperti public,
private, dan protected (seperti pada C++ atau Java) yang
mendukung untuk enkapsulasi. Tentu saja, keteraksesan dapat
dibuat privat dengan menggunakan prefiks __ pada nama variabel
atau fungsi.
• Polymorphism
o Memiliki dua tipe
§ Suatu objek menyediakan implementasi yang berbeda dari
suatu metode berdasarkan parameter-parameter input
§ Interface yang sama dapat digunakan oleh objek dengan
tipe yang berbeda-beda
o Di Python, polymorphism adalah suatu fitur buil-in untuk bahasa.
Contoh: operator + dapat digunakan pada dua integer untuk
menambahkan atau dapat bekerja dengan penggabungan string
• Inheritance
o Inheritance mengindikasikan bahwa satu class mewariskan
fungsionalitas dari class orang tuanya.
o Inheritance menjelaskan sebagai opsi untuk penggunaan kembali
fungsionalitasn yang didifinisikan pada base class dan mengijinkan
pengembangan secara mandiri implementasi software aslinya.
o Inheritance membuat hirarki melalui hubungan antara objek-objek
yang berbeda class. Python, tidak seperti Java, mendukung multipe
inheritance (inheriting from multiple base class)
• Abstraction
o Menyediakan interface sederhana kepada client, dimana client
dapat berinteraksi dengan objek class dan memanggil metode-
metode yang didifinisikan di dalam interface
o Memberikan abstraksi dari kompleksitas internal class dengan
interface sehingga client tidak perlu khawatir dengan
implementasi internal.
2
Pemrograman Berorientasi Objek menggunakan Python
__.:Design Patterns:.__
• Composition
o Cara untuk mengkombinasikan objek-objek atau clases ke dalam
struktur data kompleks atau implementasi software
o Dalam komposisi, suatu objek digunakan untuk memanggil
anggota fungsi di modul-modul yang lain sehingga membuat
fungsionalitas dasar tersedia melalui modul tanpa inheritance.
Prinsip-prinsip perancangan berorientasi-objek
Prinsip-prinsip ini penting sebagai pegangan untuk mempelajari design pettern
secara detail.
• Prinsip the open/close
Class atau objek dan metode harus terbuka untuk pengembangan namun
tertutup untuk modifikasi
• Prinsip the inversion of control
Modul tingkat tinggi tidak dapat tergantung oleh modul tingkat rendah;
keduanya harus tergantung pada abstraksi. Detail harus tergantung dari
abstraksi dan tidak dengan lainnya.
• Prinsip the interface segregation
Client tidak boleh dipaksa untuk tergantung pada interfaces yang tidak
digunakan.
• Prinsip the single responsibility
Suatu class hanya memiliki satu alasan untuk diubah
• Prinsip the substitution
Derived class harus dapat menggantikan secara lengkap class dasarnya.
Keuntungan Design Pattern
• Mereka dapat digunakan kembali pada banyak projek
• Masalah-masalah level arsitektural dapat diselesaikan
• Sudah terbukti oleh pengembang dan arsitek berpengalaman
• Mereka memiliki reliabilitas dan mandiri
3
Pemrograman Berorientasi Objek menggunakan Python
__.:Design Patterns:.__
Klasifikasi patterns
• Creational patterns
• Structural patterns
• Behavioral patterns
1. Model-View-Controller
Design pattern ini memisahkan aplikasi kedalam tiga bagian penting: Model,
View, dan Control. Model merepresentasikan data dan proses bisnis
(bagaimana informasi disimpan dan diambil), View untuk menampilkan
data, dan Controller adalah perekat antara keduanya.
MVC Design Pattern bekerja dengan istilah-istilah berikut – Model, View,
Controller dan Client:
ü Model: mendeklarasikan kelas untuk menyimpan dan memanipulasi
data
ü View: mendeklarasikan kelas untuk membangun antarmuka user dan
menampilkan data
ü Controller: mendeklarasikan kelas yang menghubungkan model dan
view
ü Ueser: mendeklarasikan kelas yang meminta beberapa hasil berdasar
pada aksi-aksi tertentu
Gambar di bawah menjelaskan flow dari pattern MVC:
4
Pemrograman Berorientasi Objek menggunakan Python
__.:Design Patterns:.__
Berbicara tentang MVC pattern dalam terminologi pengembangan software,
berikut kelas-kelas utama yang telibat dalam pattern MVC:
ü Kelas model digunakan untuk mendifinisikan seluruh operasi yang
dilakukan pada data (seperti create, modify, dan delete) dan
menyediakan metode-metode bagaimana menggunakan data
ü Kelas view adalah representasi dari antarmuka pengguna. Ini
memiliki metode-metode yang membantu membangun antarmuka
bebasis grafis atau web pada konteks dan keperluan dari aplikasi. Ini
mestinya tidak berisi logika apapun dan hanya menampilkan apa
yang diterimanya saja.
ü Kelas controller digunakan untuk menerima data dari permintaan
dan mengirimkan ke bagian lainnya dari sistem. Ini memiliki metode-
metode yang digunakan untuk merutekan/menyebarkan permintaan
Pattern MVC digunakan dalam kasus seperti berikut:
ü Ketika dibutuhkan perubahan penampilan tanpa ada perubahan pada
proses bisnis
ü Multiple controllers dapat digunakan untuk beerja dengan multiple
view untuk mengubah tampilan antarmuka pengguna.
ü Sekali lagi, model dapat diubah tanpa mengubah view sebagaimana
mereka dapat bekerja secara mandiri satu sama lain.
Secara singkat, tujuan utama dari pattern MVC sebagai berikut:
ü Menjaga pemisahan data dan tampilan data
ü Kemudahan pengelolaan kelas dan implementasi
ü Fleksibel dalam mengubah cara penuyimpanan data dan
penampilannya. Keduanya mandiri dan memiliki fleksibilitas dalam
perubahan.
Contoh kasus: kita ingin mengembangkan aplikasi yang menginformasikan
kepada pengguna tentang layanan marketing yang dikirim oleh perusahaan
cloud, yang meliputi e-mail, SMS, dan fasilitas voice.
Pertama kita mengembangkan kelas model (Model) yang mendifinisikan
layanan-layanan yang disediakan oleh produk, sebut saja e-mail, SMS, dan voice.
Setiap layanan ini memiliki nilai, seperti 1000 e-mail akan menagih klien $2, dan
5
Pemrograman Berorientasi Objek menggunakan Python
__.:Design Patterns:.__
untuk 1000 pesan, tagihannya $10, dan $15 untuk 1000 pesan suara.
Selanjutnya, model mewakili data tentang layanan dan harga produk.
Kemudian kita mendifinisikan kelas view (View) yang menyediakan suatu
metode untuk menampilkan informasi kembali ke klien. Metode-metode adalah
list_service() dan list_pricing(); sesuai saran dari namanya, satu metode
digunakan untuk mencetak layanan yang ditawarkan oleh produk dan lainnya ke
dalam daftar harga untuk layanan.
Selanjutnya kita mendifinisikan kelas controller yang mendifinisikan dua
metode, get_service() dan get_pricing(). Setiap metode ini melakukan query
terhadap model dan mengambil data. Kemudian data diserahkan ke view dan
menampilkan hasilnya.
Kelas Client menginisiasi controller. Objek controller digunakan untuk memanggil
metode-metode yang sesuai.
Contoh 1:
6
Pemrograman Berorientasi Objek menggunakan Python
__.:Design Patterns:.__
Contoh 2:
7
Pemrograman Berorientasi Objek menggunakan Python
__.:Design Patterns:.__
8
Pemrograman Berorientasi Objek menggunakan Python
__.:Design Patterns:.__
2. Observer Pattern
Objek (Subjek) menjaga suatu daftar pengamat (Observers) sehingga Subjek
dapat memberitahu seluruh Observers tentang perubahan yang terjadi pada
Subjek menggunakan suatu metode yang didifinisikan oleh Observer.
Contoh 3:
Observer pattern memiliki suda aktor utama: Subject dan Observer. Pada
diagram UML, terdapat tiga partisipan dalam pattern ini:
ü Subject: kelas Subject memperhatikan Observer. Kelas Subject memiliki
metode seperti register() dan deregister() yang digunakan oleh Observers
untuk mendaftarkan dirinya keypad kelas Subject. Suatu Subject dapat
menangani banyak Observers
9
Pemrograman Berorientasi Objek menggunakan Python
__.:Design Patterns:.__
ü Observer: mendifinisikan suatu interface untuk objek-objek yang
mengamagi Subject. Ini mendifinisikan metode-metode yang
membutuhkan untuk diimplementasi oleh Observer untuk mendapatkan
pemberitahuan perubahan didalam Subject.
ü ConcreteObserver: menyimpan keadaan atau status dengan konsisten
dengan keadaan atau status dari Object. Ini mengimplementasi Observer
interface untuk menjaga keadaan atau status agar tetap konsisten
dengan perubahan pada Subject.
Berikut adalah gambar dari diagram UML Observer Pattern
dari diagram UML terlihat bahwa ConcrateObservers mendaftarkan dirinya
kepada Subject dengan mengimplementasikan interface yang disediakan
oleh Observer. Apabila terjadi perubahan nilai pada Subject, maka Subject
akan memberitahukan seluruh ConcrateObservers dengan metode notify
yang disediakan oleh Observers.
10
Pemrograman Berorientasi Objek menggunakan Python
__.:Design Patterns:.__
Contoh 4:
11
Pemrograman Berorientasi Objek menggunakan Python
__.:Design Patterns:.__
12