Anda di halaman 1dari 12

Pemrograman Berorientasi Objek menggunakan Python

__.:Design Patterns:.__

Pemrograman Berorientasi Objek


menggunakan Python:
Design Patterns 2

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. Singleton design pattern
Memastikan hanya ada satu objek yang dibuat; menyediakan suatu titik
akses untuk suatu objek yang tersedia secara global dalam suatu program;
mengendalikan akses bersamaan pada sumberdaya berbagi.
Diagam UML suatu Singleton sebagai berikut:






Implementasi klasikal suatu Singleton di dalam Python:
• Kita akan membuat hanya satu instan dari klas Singleton.
• Jika instan sudah ada, maka akan memberikan objek yang sama
Berikut contoh kode;
Contoh 1:


Perhatikan output dari class Singleton tersebut! Apakah ada perbedaan
antara instan objek s dan s1?

4
Pemrograman Berorientasi Objek menggunakan Python
__.:Design Patterns:.__
Implementasi lazy instantiation suatu Singleton di dalam Python
Dalam kasus, pembuatan objek secara tidak sengaja meskipun objek
tersebut tidak diperlukan. Lazy instantiation memastikan objek dibuat
ketika benar-benar diperlukan.
Berikut contoh kode:
Contoh 2:












Perhatikan output dari program Contoh 2! Bagaimana sebenarnya objek
singleton ini dibuat dengan teknik lazy instantiation?
Implementasi Singleton menggunakan metaclasses: Contoh 3:

5
Pemrograman Berorientasi Objek menggunakan Python
__.:Design Patterns:.__
Amati output dari program tersebut! Apakah logger 1 sama dengan logger 2?
Implementasi di dunia nyata untuk mengakses suatu basisdata. Basisdata
merupakan sumber tunggal yang diakses oleh banyak instan, karena
basisdatanya juga hanya satu, maka digunakan Singleton untuk memastikan
hanya ada satu instan objek basisdata saja.
Contoh 4:



2. The Factory Pattern – membuat Factory untuk menciptakan objek-
objek
Merupakan class yang bertanggungjawab untuk membuat objek yang lain.
• Keuntungan pertama adalah loose coupling dimana pembuatan objek
dapat dimandirikan dari implementasi class.
• Client tidak perlu khawatir oleh class yang membuat objek yang akan
digunakan oleh client. Ini hanya memerlukan interface, metode, dan
parameter yang diperlukan untuk membuat objek yang diinginkan

6
Pemrograman Berorientasi Objek menggunakan Python
__.:Design Patterns:.__
• Menambahkan class lainnya ke factory untuk membuat objek dari
tipe lainnya lebih mudah tanpa client mengubah kodenya.
• Factory dapat juga menggunakan objek yang ada. Namun, ketika
client membuat objek secara langsung, akan selalu membuat objek
baru.

The Simple Factory Pattern










Implementasi dari diagarm UML Simple Factory sebagai berikut:
Contoh 5:

7
Pemrograman Berorientasi Objek menggunakan Python
__.:Design Patterns:.__



The Factory Method Pattern
Pada factory method pattern memiliki poin-poin seperti berikut:
• Kita mendifinisikan suatu interface untuk membuat objek, namun
penanggung jawab pembuatan objek bukanlah factory, melainkan
subclass-nya
• Pembuatan The Factory method melalui inheritance dan bukan melalui
instantiation.
• The Factory method membuat rancangan lebih mudah disesuaikan. Dapat
mengembalikan beberapa instance atau subclass daripada suatu objek
dari tipe tertentu (seperti pada simple factory method)











8
Pemrograman Berorientasi Objek menggunakan Python
__.:Design Patterns:.__
Dari diagram UML di atas, kita memiliki kelas abstrak, Creator, yang berisi
factoryMethod(). Metode factoryMethod() memiliki tanggung jawab untuk
membuat objek dengan tipe tertentu. Kelas ConcreteCreator memiliki
factoryMethod() yang mengimplementasi kelas abstrak Creator, dan metode
ini dapat mengubah objek yang dibuat secara runtime. ConcreteCreator
membuat ConcreteProduct dan memastikan bahwa objek yang dibuat
tersebut mengimplementasi kelas Product dan menyediakan implementasi
untuk seluruh metode dalam interface Product.
Singkatnya, factoryMethod() dari interface Creator dan kelas
ConcreteCreator menjelaskan subclass dari Product mana yang dibuat.
Selanjutnya, the Factory method pattern menentukan suatu interface untuk
membuat suatu objek, namun menentang keputusan kelas mana yang akan
dipakai oleh subclass-nya.

Contoh 6:
Kita ingin membuat profile dari tipe sosial media yang berbeda seperti LinkedIn
dan Facebook untuk seseorang atau perusahaan. Sekarang, setiap profil akan
memiliki seksi yang berbeda-beda. Pada LinkedIn, anda akan memiliki sebuah
seksi bernama paten. Pada Facebook, anda akan melihat seksi dalam album foto
dari tempat anda terakhir kunjungi. Selanjutnya, kedua profile akan memiliki
seksi yang sama tentang informasi personal. Sehingga kita akan membuatkan
profil dengan tipe-tipe seksi yang berbeda-beda untuk ditambahkan kepada
profile tersebut.
Berikut implementasinya. Pada kode berikut ini, kita mulai dengan
medifinisikan interface Product. Kita membuat Section abstract class yang
menentukan bagaimana seksi itu. Kita akan membuat yang sederhana dan
menyediakan abstract method, describe().
Sekarang kita buat beberapa kelas ConcreteProduct, PersonaSection,
AlbumSection, PattentSection, dan PublicationSection. Kelas-kelas
tersebut mengimplementasi metode abstrak describe() dan mencetak sesuai
dengan namanya:

9
Pemrograman Berorientasi Objek menggunakan Python
__.:Design Patterns:.__


Kita membuat kelas abstrak Creator yang bernama Profile. Kelas abstrak
Profile [Creator] menyediakan factory method, createProfile(). Metode
createProfile() harus diimplementasikan oleh ConcreteClass untuk membuat

10
Pemrograman Berorientasi Objek menggunakan Python
__.:Design Patterns:.__
secara aktual profil-profil dengan seksi yang sesuai. Kelas abstrak Profile tidak
perduli dengan seksi-seksi yang dimiliki oleh masing-masing profil. Sebagai
contoh, profil Facebook harus memiliki seksi personal information dan album,
sehingga kita biarkan subclass menentukan ini.
Kita buat dua kelas ConcreteCreator, linkedIn dan facebook. Masing-
masing kelas mengimpementasikan metode abstrak createProfile() yang secara
aktual membuat (instantiates) beberapa seksi (ConcreteProducts) saat
runtime:

11
Pemrograman Berorientasi Objek menggunakan Python
__.:Design Patterns:.__
kemudian akhirnya kita membuat kode client yang menentukan kelas Creator
untuk membuat profil sesuai pilihan

12

Anda mungkin juga menyukai