Perancangan Perangkat Lunak Menggunakan Design Pattern - Interpreter
Roman Numeral Converter
Disusun oleh:
1. Shafly Naufal Adianto (5114100114)
2. Rahmatin Nadia (5114100130)
3, Hariyoso Ario Bimo (5114100166)
1. Studi Kasus
Studi kasus yang kami kerjakan adalah Roman Numeric Converter, dimana kita dapat menginputkan angka Romawi dan menerjemahkannya ke angka desimal.
Didalam angka Romawi terdapat ketentuan seperti dibawah ini:
Symbol - Nilai Desimal
I - 1
V - 5
X - 10
C - 100
D - 500
M - 1000
Untuk menerjemahkan angka romawi, kita harus menyimpan string input, dan mengiterasi huruf hurufnya dan mengecek apakah huruf tersebut termasuk kedalam ribuan atau ratusan atau puluhan atau satuan, setelah mengecek, kita akan menjumlahkan kedalam sebuah variable temporary untuk menjumlahkan semua hasil iterasi.
2. Design Pattern
Design Pattern yang kami gunakan adalah design pattern interpreter, dimana didalam design pattern ini terdapat:
- sebuah abstract class yang mendefinisikan sebuah "grammar rule" yang nantinya akan digunakan untuk menginterpretasi data.
- Sebuah class yang bernama context yang digunakan untuk menyimpan data input dan output
- Serta subclass yang meng-extend abstract class untuk menggunakan grammar rulenya, di class ini lah proses interpretasi dilakukan.
Kami menggunakan design pattern ini karena studi kasus yang kami gunakan memiliki karakteristik seperti yang dijelaskan pada design pattern, interpreter. dimana terdapat context/data yang akan di interpret , abstract expression dan terminal expressionnya. Dengan menggunakan pattern ini, maka dibuat class diagram seperti dibawah:
Disini kita membuat Class Context berisi angka romawi yang akan di convert dan yang sudah diconvert. Kemudian class Expression kami berisi grammar rule dalam pengkonversian angka romawi, dimana didalamnya terdapat:
- method interpret yang mengecek apabila sebuah angka terdiri dari angka 1 atau 4, 5, 9. Kami melakukan pengecekan hanya pada angka tersebut karena pada angka tersebut dalam bilangan romawi memiliki bentuk yang berbeda sendiri. Contoh:
angka 2 terdiri dari 2 kali angka 1 yaitu II , angka 7 terdiri dari V dan I dan I.
- Pengecekan apakah ia merupakan ribuan , ratusan ,puluhan atau satuan. proses pengecekan ini akan di cek pada Class-Class yang mengextend abstract class.
3. Implementasi
Pertama kita akan membuat dulu Class bernama Context
Di class ini akan disimpan input output serta method method untuk mengeset dan mengambil nilainya.
Kemudian kita buat abstract class sebagai baseclass dari interpreter-interpreter yang dibuat
Disini terdapat method utama bernama interpret, yang mendefinisikan "grammar rule" untuk interpreter lain. Jadi dari method ini akan mengambil data inputan kita, lalu akan megecek apabila ia dimulai dari 1 atau 4 atau 5 atau 9, berdasarkan satuannya. Maksud dari 1 4 5 9 berdasarkan satuannya itu misalnya seperti untuk angka 9 pada puluhan (90) maka romawinya "XC" sedangkan angka 9 pada ratusan (900) maka romawinya "CM"
Setelah menentukan angka awalannya, maka dia akan dikali dengan multiplier. dan Data context akan diupdate.
Kemudian dibuat abstract method seperti diatas untuk didefinisikan lagi pada class-class yang mengextend kelas ini.
Kemudian dibuat tiap tiap class yang mengextend interpreter utama
Di class class ini didefiniskan kembali abstract class pada class Expression, gunanya class-class ini adalah untuk memberikan aturan sendiri setiap satuannya.
setelah itu buat main class untuk menjalankan semuanya
Diatas dapat dilihat, misalnya angka romawi ang akan kita convert adalah MCMXXVIII
maka akan dibuat objek baru yang menyimpan angka romawi tersebut.
Lalu kita membuat array yangn diisi class-class interpreter yang melakukan pengecekan apabila dia itu termasuk bilangan ribuan ratusan puluhan atau satuan.
Kemudian array tersebut diiterasi untuk melakukan pengecekannya.
Dan pada akhirnya hasil akhirnya di print.
Output:
Disusun oleh:
1. Shafly Naufal Adianto (5114100114)
2. Rahmatin Nadia (5114100130)
3, Hariyoso Ario Bimo (5114100166)
Referensi:
https://sourcemaking.com/design_patterns/interpreter
http://www.oodesign.com/interpreter-pattern.html
Roman Numeral Converter
Disusun oleh:
1. Shafly Naufal Adianto (5114100114)
2. Rahmatin Nadia (5114100130)
3, Hariyoso Ario Bimo (5114100166)
Studi kasus yang kami kerjakan adalah Roman Numeric Converter, dimana kita dapat menginputkan angka Romawi dan menerjemahkannya ke angka desimal.
Didalam angka Romawi terdapat ketentuan seperti dibawah ini:
Symbol - Nilai Desimal
I - 1
V - 5
X - 10
C - 100
D - 500
M - 1000
Untuk menerjemahkan angka romawi, kita harus menyimpan string input, dan mengiterasi huruf hurufnya dan mengecek apakah huruf tersebut termasuk kedalam ribuan atau ratusan atau puluhan atau satuan, setelah mengecek, kita akan menjumlahkan kedalam sebuah variable temporary untuk menjumlahkan semua hasil iterasi.
2. Design Pattern
Design Pattern yang kami gunakan adalah design pattern interpreter, dimana didalam design pattern ini terdapat:
- sebuah abstract class yang mendefinisikan sebuah "grammar rule" yang nantinya akan digunakan untuk menginterpretasi data.
- Sebuah class yang bernama context yang digunakan untuk menyimpan data input dan output
- Serta subclass yang meng-extend abstract class untuk menggunakan grammar rulenya, di class ini lah proses interpretasi dilakukan.
Kami menggunakan design pattern ini karena studi kasus yang kami gunakan memiliki karakteristik seperti yang dijelaskan pada design pattern, interpreter. dimana terdapat context/data yang akan di interpret , abstract expression dan terminal expressionnya. Dengan menggunakan pattern ini, maka dibuat class diagram seperti dibawah:
Disini kita membuat Class Context berisi angka romawi yang akan di convert dan yang sudah diconvert. Kemudian class Expression kami berisi grammar rule dalam pengkonversian angka romawi, dimana didalamnya terdapat:
- method interpret yang mengecek apabila sebuah angka terdiri dari angka 1 atau 4, 5, 9. Kami melakukan pengecekan hanya pada angka tersebut karena pada angka tersebut dalam bilangan romawi memiliki bentuk yang berbeda sendiri. Contoh:
angka 2 terdiri dari 2 kali angka 1 yaitu II , angka 7 terdiri dari V dan I dan I.
- Pengecekan apakah ia merupakan ribuan , ratusan ,puluhan atau satuan. proses pengecekan ini akan di cek pada Class-Class yang mengextend abstract class.
3. Implementasi
Pertama kita akan membuat dulu Class bernama Context
Di class ini akan disimpan input output serta method method untuk mengeset dan mengambil nilainya.
Kemudian kita buat abstract class sebagai baseclass dari interpreter-interpreter yang dibuat
Disini terdapat method utama bernama interpret, yang mendefinisikan "grammar rule" untuk interpreter lain. Jadi dari method ini akan mengambil data inputan kita, lalu akan megecek apabila ia dimulai dari 1 atau 4 atau 5 atau 9, berdasarkan satuannya. Maksud dari 1 4 5 9 berdasarkan satuannya itu misalnya seperti untuk angka 9 pada puluhan (90) maka romawinya "XC" sedangkan angka 9 pada ratusan (900) maka romawinya "CM"
Setelah menentukan angka awalannya, maka dia akan dikali dengan multiplier. dan Data context akan diupdate.
Kemudian dibuat abstract method seperti diatas untuk didefinisikan lagi pada class-class yang mengextend kelas ini.
Kemudian dibuat tiap tiap class yang mengextend interpreter utama
Di class class ini didefiniskan kembali abstract class pada class Expression, gunanya class-class ini adalah untuk memberikan aturan sendiri setiap satuannya.
setelah itu buat main class untuk menjalankan semuanya
Diatas dapat dilihat, misalnya angka romawi ang akan kita convert adalah MCMXXVIII
maka akan dibuat objek baru yang menyimpan angka romawi tersebut.
Lalu kita membuat array yangn diisi class-class interpreter yang melakukan pengecekan apabila dia itu termasuk bilangan ribuan ratusan puluhan atau satuan.
Kemudian array tersebut diiterasi untuk melakukan pengecekannya.
Dan pada akhirnya hasil akhirnya di print.
Output:
Disusun oleh:
1. Shafly Naufal Adianto (5114100114)
2. Rahmatin Nadia (5114100130)
3, Hariyoso Ario Bimo (5114100166)
Referensi:
https://sourcemaking.com/design_patterns/interpreter
http://www.oodesign.com/interpreter-pattern.html
Komentar
Posting Komentar