Cara Mudah Mempelajari GRASP
Cara Mudah Mempelajari GRASP
1. Konsep GRASP
Responsibility merupakan kewajiban atau tanggung jawab yang harus dimiliki oleh
setiap objek. Ada 2 type responsibility yaitu :
Doing
Berhubungan dengan pembuatan objek, melakukan kalkulasi, instansiasi
action pada objek lain.
Knowing
Berhubungan dengan private enkapsulasi data, hubungan antar objek, dan
mengetahui segala sesuatu apakah it can drive or calculate. Biasanya knowing
sering ditemukan pada domain model, contoh nya adalah atribut dan asosiasi.
A. Information Expert
Contoh : pada POS system siapa yang bertanggung jawab untuk mengetahui the grand
total of a sale ? (kita mengetahui bahwa kita membutuhkan a grand total from use
case/requirement dan interakasi diagram pada scenario ini).
Pertanyaan selanjutnya adalah informasi apa yang dibutuhkan untuk menentukan line
item subtotals?, maka kita membutuhkan “SalesLineItem.quantity” and
“ProductSpecification.Price” karena kedua kelas ini saling berhubungan. Sehingga
B. Creator
Untuk memahami konsep creator dapat dilihat dari contoh berikut ini :
Contoh permasalahan : Siapa yang bertanggungjawab untuk melakukan inisiasi
sebuah object dari sebuah class. Penunjukan atau pemberian responsibility yang tepat
kepada sebuah object untuk menginisiasi sebuah object baru akan memberikan
dampak kepada sebuah design yang mensuport low coupling, kemudahan untuk
memahami desain, encapsulation dan reusability meningkat.
Solusi nya adalah : diberikan tangung jawab kepada B untuk melakukan inisiasi
instance dari kelas A, maka :
B contains gabungan dari A
Dari gambar diatas dapat dilihat bahwa sale merupakan aggregates dari objek Sales LineItem
Sehingga class sale merupakan kandidat yang cocok memiliki responsibility create
salesLineItem
Keuntungan dari creator:
C. High Cohesion
Sebuah elemen dengan tanggung jawab yang pasti (jelas). Sebuah elemen terdiri dari class,
subsystems dan systems. Sebuah class dengan kohesi yang rendah memiliki efek atau
masalah berikut:
1. Sulit untuk dipahami
2. Sulit untuk digunakan kembali
3. Sulit untuk dipertahankan
4. Terus dipengaruhi oleh perubahan
Saat Customer hendak melakukan pembelian kelas register tidak langsung berhubungan
dengan sale. Sale dan register dihubungkan dengan kelas payment. Agar tanggungjawab dari
kelas register tidak terganggu saat customer hendak melakukan paym
Coupling adalah ketergantungan antar modul satu dengan modul lainnya. Low Coupling
terbagi dua; Low Coupling dan High Coupling. Low coupling adalah yang keterikatannya
tidak begitu kuat atau tidak bergantung kepaa kelas lain. Sebaliknya high coupling memiliki
ketergantungan kepada banyak elemen. Sebuah elemen terdiri dari class, subsystems dan
systems.
Kelas yang sifatnya high coupling akan mengakibatkan:
1. Terjadinya perubahan yang tidak diinginkan karena terjadinya perubahan yang kita
lakukan pada kelas yang berelasi dengannya.
2. Ketika sebuah kelas dipisahkan dari kelas yang berelasi maka akan menjadi lebih sulit
untuk dimengerti atau akan menjadi semakin complecated.
3. Kelas menjadi lebih sulit untuk di-reuse karena penggunaannya kembali
membutuhkan kelas lain yang seharusnya tidak perlu.
Problem: Bagaimana mendukung low dependency, efek perubahan yang kecil, peningkatan
penggunaan kembali.
Solusi: Memberikan responsibility supaya coupling-nya menjadi rendah.
Contoh: Jika kita memiliki class Payment, Register dan Sale, maka kita asumsikan perlu
untuk membuat instance dari Payment dan diasosiasikan dengan Sale. Siapa yang memiliki
responsibility untuk melakukan hal ini? Menurut pattern Creator, dan sesuai dengan real
world domain, tugas ini ada pada Register karena register me-record payment. Object dari
Register akan mengirimkan message addPayment ke Sale. Maka partial diagramnya menjadi
seperti di bawah ini.
Pattern ini bisa juga disebut sebagai sebuah delegation pattern. Me-refer kepada pemahaman
bahwa UI layer tidak harus berisi logic dari sebuah aplikasi tapi sebuah object dari UI layer
harus mendelegasikan request yang masuk ke layar lain.
Problem: Object pertama apa yang berada di luar UI Layer yang menerima dan mengontrol
sistem operasi?
Solusi: Berikan tanggungjawab tersebut kepada sebuah kelas yang merepresentasikan salah
satu dari pilihan-pilihan di bawah ini:
1. Sebuah kelas yang merepresentasikan system secara keseluruhan. Root object adalah
sebuah device dimana software berjalan didalamnya, atau sebuah major sub system.
2. Merepresentasikan skenario dari sebuah use case dimana sebuah system event terjadi
dalam scenario tersebut dan hal ini sering disebut dengan <UseCaseName>Handler,
<UseCaseName>Coordinator, atau <UseCaseName>Session.
1. Gunakan class controller yang sama untuk semua sistem events dari sebuah
skenario use case.
2. Sebuah session adalah instance dari conversation dengan actor. Panjang dari
sebuah session bervariasi dan biasanya diatur dalam hubungannya dengan use
cases.