0% menganggap dokumen ini bermanfaat (0 suara)
5 tayangan32 halaman

Desain Kelas dalam Pemrograman

Dokumen ini membahas tentang desain kelas dalam pemrograman, termasuk konsep cohesion dan coupling yang penting untuk menciptakan kelas yang baik. Cohesion mengacu pada seberapa baik bagian-bagian dalam kelas saling terkait, sedangkan coupling merujuk pada ketergantungan antar kelas. Selain itu, dokumen juga menjelaskan tentang immutable class, precondition, postcondition, dan penggunaan packages dalam Java.

Diunggah oleh

cosmic123gleam
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
5 tayangan32 halaman

Desain Kelas dalam Pemrograman

Dokumen ini membahas tentang desain kelas dalam pemrograman, termasuk konsep cohesion dan coupling yang penting untuk menciptakan kelas yang baik. Cohesion mengacu pada seberapa baik bagian-bagian dalam kelas saling terkait, sedangkan coupling merujuk pada ketergantungan antar kelas. Selain itu, dokumen juga menjelaskan tentang immutable class, precondition, postcondition, dan penggunaan packages dalam Java.

Diunggah oleh

cosmic123gleam
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Designing Class
Pemrograman 1

Rauhil Fahmi, [Link]., [Link].

1
Outline
◼ Cohesion
◼ Coupling
◼ Immutable Class
◼ Package

2
Menentukan Desain Class
◼ Aktor – Objek yang dapat melakukan sesuatu hal, atau
yang menjadi “korban” atau “pelaku”
◼ Utility Class – Tidak punya objek, hanya berupa static
dan konstanta
◼ Misal kelas Math

◼ Program utama – Yang punya main


◼ Jangan membuat aksi menjadi nama class
◼ Bukan MendaftarKuliah, tapi class Mahasiswa, Dosen,
dan MataKuliah

3
Kriteria Desain yang Baik
Kriteria yang digunakan untuk menilai sebuah desain kelas:
◼ Cohesion
◼ Internal sebuah kelas

◼ How a single class is designed.

◼ Coupling
◼ Hubungan antar kelas

◼ How classes interact with each other.

4
Cohesion
◼ Menggambarkan tingkat keterhubungan tiap bagian dalam objek
◼ Sebuah class harus merepresentasikan satu konsep yang

sama (high cohesion)

◼ Class tidak boleh merepresentasikan terlalu banyak hal (low cohesion)

◼ Pembagian yang lebih spesifik mempermudah pemanfaatan class

◼ Class harus dilengkapi dengan attribute dan method yang berhubungan


langsung
◼ Design goal: high cohesion
◼ Well-focused purpose
◼ Tidak merepresentasikan lebih dari satu konsep
◼ Bertanggung jawab untuk sebuah logical task
5
Cohesion
◼ Good test for cohesion:
◼ Bisakah kita deskripsikan kegunaan kelas hanya
dengan menggunakan pernyataan sederhana (tanpa
“dan”, “atau”, dsb) ?

◼ Keuntungan high cohesion:


◼ Fokus: dapat dimengerti dengan mudah kegunaan
kelas dan method-method yang ada di dalamnya.
◼ Mudah di-maintain

◼ Reuse classes and methods

◼ Less-frequently changed
6
Cohesion
Buat program sales report yang membuat laporan penjualan, menyimpan
di database, mencetak laporan, dsb.
class SalesReport {

public void connectToDatabase() {} public


void generateSalesReport() {} public void
saveAsFile() {}
public void printReport() {}
}
• Lack of cohesion ! Ada banyak konsep di kelas SalesReport.
• Tidak fokus !
• SalesReport : Class that does everything !

7
Cohesion
class printStuff {
public PrintOptions getPrintOptions () {}
}

class fileSaver {
public SaveOptions getFileSaveOptions() {}
}

Desain yang lebih kohesif. Kelas-kelas tersebut dapat digunakan


oleh kelas lain (reuse). Misal, mungkin ada kelas lain yang
mempunyai fungsionalitas untuk menyimpan file atau
mencetak file → tinggal pakai printStuff & fileSaver.

8
Cohesion
Kelas CashRegister berikut juga kurang kohesif.
public class CashRegister
{
public void enterPayment(int dollars, int
quarters, int dimes, int nickels, int pennies)

...
public static final double NICKEL_VALUE = 0.05;
public static final double DIME_VALUE = 0.1;
public static final double QUARTER_VALUE = 0.25;
...
}

CashRegister juga
mengelola Jenis-jenis koin.
9
Cohesion
• CashRegister, melibatkan 2 konsep : cash register and coin
• Solusi: Buat dua kelas:
public class Coin {
public Coin(double aValue, String aName) {}
public double getValue() { ... }

...

public class CashRegister {


public void enterPayment(int coinCount, Coin coinType) { ... }

...

Memisahkan tanggung jawab kelas Coin dengan kelas


CashRegis3t5er

10
Coupling
◼ Coupling: ketergantungan antara sebuah kelas dengan
kelas lain.

◼ Kelas A bergantung pada B, jika A:


◼ Berasosiasi dengan B (salah satu atribut A bertipe B)

◼ Melalui method:

• Mempunyai variabel lokal B


• Mempunyai parameter B
• Mempunyai tipe kembalian (return type) B

11
Coupling
Konsekuensi dari ketergantungan:

◼ Jika kelas A bergantung pada kelas B, dan kita ingin


membangun sistem yang menggunakan (reuse) kelas A,
maka kita juga harus ikutkan kelas B.

◼ Jika kelas A bergantung pada kelas B, dan kelas B


dimodifikasi, maka kelas A kemungkinan besar juga
perlu dimodifikasi.

12
Coupling
◼ Design goal: Low Coupling.
◼ Minimize coupling to minimize the impact of interface changes.
◼ Keuntungan Low Coupling:
◼ Memahami sebuah kelas tanpa perlu membaca kelas
lain.
◼ Memodifikasi sebuah kelas tanpa menyebabkan
banyak efek pada kelas lain.
◼ Meningkatkan maintainability.

13
Coupling
◼ CashRegister bergantung pada kelas Coin untuk
mendapatkan nilai pembayaran.
◼ Sebaliknya, kelas Coin tidak bergantung pada kelas
CashRegister

Notasi UML (Unified Modeling


Language): Notasi
untuk pemodelan Object- oriented
analysis and design

14
Coupling
◼ High and Low Coupling

15
Coupling
Meminimalisasi ketergantungan
Cara mencetak saldo bank:
[Link](“saldo : ” +
[Link]());

Mengapa menambahkan method di kelas BankAccount berikut kurang


baik ?
public void printBalance () { //tidak bagus
[Link](“saldo : ” + [Link]);
}

16
Coupling
Meminimalisasi ketergantungan
◼ Artinya, kelas BankAccount sekarang bergantung
pada kelas PrintStream karena menggunakan objek
[Link] di dalam salah satu method-nya.
◼ Tidak semua sistem mempunyai [Link].
Akibatnya, jika diimplementasikan di sistem lain,
kita perlu mengubah BankAccount !

17
Immutable Class
◼ Class yang tidak memiliki mutator
◼ Perubahan nilai hanya terjadi saat pemanggilan
constructor
◼ Memiliki tingkat keamanan yang lebih tinggi
dalam penyimpanan data
◼ Tidak memiliki toleransi jika terjadi kesalahan
assignment nilai pada pemanggilan constructor

18
Call by Value dan Call by
Reference
◼ Call by Value
◼ Nilai dari suatu variable dicopy sebagai masukan
dari method
◼ Apapun yang terjadi pada method tidak mengubah
nilai aslinya

◼ Call by Reference
◼ Alamat objek dicopy sebagai masukan dari method

◼ Perubahan pada objek dengan alamat tersebut


akan mempengaruhi nilai objek aslinya

19
Kesalahan Pemanggilan
Method
◼ Perhatikan method berikut

public int cekArray(int[] a, int index){


return a[index];
}

◼ Apakah yang menyebabkan error saat method dipanggil?

20
Kesalahan Pemanggilan
Method
◼ Perhatikan method berikut

public int cekArray(int[] a, int index){


return a[index];
}

◼ Apakah yang menyebabkan error saat method dipanggil?


◼ Array kosong

◼ Index out of bound

21
Precondition
◼ Kondisi yang harus dipenuhi pemanggil sebelum memanggil sebuah
method
◼ Berikan keterangan tentang precondition pada dokumentasi
/**
Mengecek elemen sebuah array
@param array
@param index

(Precondition: index < [Link])

*/

22
Precondition
◼ Biasa digunakan untuk
◼ Membatasi nilai parameter method

◼ Menjamin method baru boleh dipanggil jika objek telah


memenuhi persyaratan tertentu
◼ Jika precondition tidak terpenuhi berarti method tidak
akan berjalan baik
◼ Program dapat menentukan apa yang dilakukan

◼ Berbeda dengan Exception Handling !!

23
Precondition
◼ Method diperkenankan melempar exception jika
precondition dilanggar
if (amount < 0) throw new IllegalArgumentException();
balance = balance + amount;

◼ Method tidak wajib melakukan precondition


// kalau salah input resiko pemanggil
int jumlah = a + b;

24
Assertion
◼ Cara melakukan precondition secara lebih “elegan”
assert amount >= 0;

balance = balance + amount;


◼ Untuk menggunakan assertion checking
java -enableassertions MainClass
◼ Terjadi exception jika kondisi salah dan assertion menyala. Jika tidak
menyala, tidak terjadi apa-apa

25
Assertion

26
Postcondition
◼ Kondisi yang harus benar setelah pemanggilan method
◼ Kegunaan postcondition
◼ Menjamin hasil keluaran method benar
◼ Menjamin objek yang berubah tidak salah

◼ Contoh komentar program

/** Deposits money into this account.


(Postcondition: getBalance() >= 0)
@param amount the amount of money to deposit
(Precondition: amount >= 0)
*/
27
Postcondition
◼ Pembuatan postcondition sama dengan precondition
◼ Dapat menjadi pasangan blok kode pada beberapa program
penting
◼ Jika pemanggil memenuhi precondition, method harus
mengembalikan postcondition

28
Packages
◼ Kumpulan class yang memiliki kegunaan yang sama
◼ Bisa ditentukan java bisa ditentukan programmer
◼ Import library dengan menuliskan nama package dan kelas
import [Link];

◼ Kita dapat membuat package sendiri untuk program yang


kita buat

29
Java Packages
◼ Sekumpulan class pada java yang memiliki fungsi yang mirip
Package Purpose Sample Class
[Link] Language support Math
[Link] Utilities Random
[Link] Input and output PrintStream
[Link] Abstract Windowing Toolkit Color
[Link] Applets Applet
[Link] Networking Socket
[Link] Database Access ResultSet
[Link] Swing user interface JButton
Document Object Model for XML
[Link] Document
documents

30
Membuat Packages
◼ Memberikan kode package pada baris pertama dari kode
class
◼ package packageName;

◼ Mengumpulkan class yang memiliki fungsi mirip


◼ Memberikan nama yang tepat
◼ [Link]

31
Have fun and enjoy
in this class

32

Anda mungkin juga menyukai