Anda di halaman 1dari 22

UAS REKAYASA PIRANTI LUNAK

DAN ANALISIS SISTEM

Dosen : Dr.Eng. Mardiana, S.T., M.T

Oleh

Hendra Saputra (1621211014)

MAGISTER TEKNIK INFORMATIKA


INSTITUT INFORMATIKA DAN BISNIS DARMAJAYA
2016
SOAL UJIAN AKHIR SEMESTER TA 2016
/ 2017

MATA KULIAH : Rekayasa Piranti Lunak dan Analisis Sistem


DOSEN : Dr. Eng. Mardiana, S.T., M.T
HARI / TANGGAL : Minggu, 18 Desember 2016
SIFAT : Take Home Test (deadline Selasa 20/12 2016 Pkl
23.59 WIB)

1. Internet Explorer
Yang saya kurang sukai dari internet explorer ada beberapa macam:

1# Internet Explorer saya nilai kurang responsif


Respon yang dihasilkan ketika akan membuka aplikasi untuk memunculkan tab baru
akan terasa berat sehingga bisa dibilang kurang responsif.

2# Menu navigasi sedikit membingungkan


Tampilan menunya terlalu banyak dan membingungkan. Sehingga tidak terlihat
praktis dan fleksibel seperti pada brower pesaingnya Google Chrome.

3# Kemampuan membaca script


Kemampuan Internet explorer dalam membaca script memang kurang baik. Di
beberapa situs, ia terkadang tidak mampu membaca script seperti CSS.

Add-ons
Internet Explorer juga menyediakan fitur add-ons, namun jumlahnya tidak sebanyak
browser lain seperti Mozilla ataupun Chrome.

Kecepatan
Sebenarnya kecepatan Internet Explorer bisa ditingkatkan yaitu dengan memasang
google chrome frame. Dengan begitu, ia akan lebih responsif terhadap pencarian.
Namun mengutip dari berbagai situs review dunia, Internet Explorer masih kalah
cepat dibanding Google Chrome atau Safari.

Modifikasi
Ada hal yang bisa dimodofikasi dari Internet explorer yaitu keberadaan
menu/command bar. Banyak yang menilai bahwa IE memiliki terlalu banyak menu
sehingga menyulitkan pengguna.

Hal hal yang perlu dihindari pada saat proses desain adalah dengan melihat
kompitibel software pada beberapa aplikasi untuk operating system dikarenakan
operating system tidak hanya pada windows saja sebagaimana google yang mumbuat
aplikasi browser unruk beberapa operating system, dan kelayakan kompetibel untuk
pembaharuan software tersebut dan dapat menjalankan fitur2 yang terbaru seperti
html5 atau flash , sebagai pembaharuan nya. Untuk versi kedepan nya
2. Gas station Basically Provides Two Services

1.1a.deskripsi

SPBU pada dasarnya memberikan dua layanan:


Ada toko kecil yang menjual suku cadang mobil. Di dalam toko tersebut
setidaknya ada satu kasir, yang terdaftar untuk pembayaran cash oleh seorang
kasir yang merupakan karyawan pompa bensin.

Ada beberapa sejumlah pompa bensin( gas ), di mana pelanggan dapat


memarkir mobil mereka, berinteraksi dengan sistem untuk membayar melalui
kartu kredit, dan kemudian memompa bensin ( gas ) mereka sendiri. Sebagai
alternatif, pelanggan dapat membayar bensin ( gas ) nya melalui uang tunai atau
kartu kredit dengan pergi ke toko dan membayar langsung ke kasir.

Dengan demikian GSCS memiliki dua kelas utama pengguna. Yang pertama adalah
kasir, yang menggunakan GSCS untuk merekam pembelian suku cadang mobil oleh
pelanggan. The GSCS harus memungkinkan kasir untuk memasukkan jenis dan
jumlah bagian yang dibeli, kemudian menghitung harga pembelian total dan
menangani pembayaran. Pelanggan membeli bensin jenis kedua pengguna.
pelanggan ini antarmuka dengan sistem di pompa bensin, dengan menentukan jumlah
dan jenis gas mereka akan dibeli, membayar baik di pompa atau ke kasir, dan
kemudian memompa gas sendiri.
Sistem ini juga harus berinteraksi dengan sistem otomatis lainnya untuk melakukan
tugasnya. Sebagai contoh, untuk menerima pembayaran kartu kredit, GSCS harus
dengan antarmuka sistem dikelola oleh perusahaan kartu kredit. Sistem kartu kredit
bertanggung jawab untuk memeriksa bahwa akun pelanggan dalam performa yang
baik dan dapat menampung jumlah pembelian, dan untuk mendebet account
pelanggan dan akhirnya penggantian pompa bensin. Pengoperasian sistem eksternal
adalah di luar lingkup dari GSCS, meskipun GSCS perlu tahu bagaimana sistem
eksternal akan mengkomunikasikan keberhasilan atau kegagalan tugas mereka.

Keterangan :

Pada keterangan diatas dapat saya ketahui bahwasanya SPBU memiliki dua jenis
usaha yaitu sebuah toko kecil dan pengisian BBM dari bebrapa pompa BBM. Dan
untuk pembayaran transaksi dapat dilakukan secara cash tunai dan menggunakan
kartu kredit, dan pada saat transaksi si kasir melakukan dengan menggunakan aplikasi
GSCS dan aplikasi tersebut menompang kinerja dari seluruh transaksi yang aada
termasuk pembayaran sparepart mobil atau pun pembayaran pembelian BBM dan di
sistem GSCS aplikasi tersebut harus dapat berinteraksi dengan sistem bank untuk
memeriksa akun pelanggan bahwasanya akun tersebut memiliki jumlah saldo yang
cukup saat mendebet akun tersebut untuk melakukan transaksi pembayaran.
b. Use Case
Diagram

Keterangan use case diagram :


Pembayaran bbm (gas) dan pembayaran parkir dan pembayaran alat sparepart.
Dapat dilakuakan pada aplikasi pembayaran (billing services) dan konsumen (customer)
melakukan pembayaran dengan cara tunai (cash) atau dengan kartu kredit ( Credit Card )
apabila membayar dengan kartu kredit maka bank selaku pemegang system kartu kredit akan
memfalidasi apakah konsumen masih memiliki jumlah uang yang akan di bayarkan di saldo
kartu kredit yang di tetapkan limit nya, dan setelah oke maka system kartu kredit akan
membayarkan ke system billing services SPBU untuk mengantikan uang pembayaran milik
SPBU, dan kasir akan mengecek dan menginput seluruh pembayaran termasuk pembayaran
bbm, sparepart dan parkir. Dan kasir menerima pemabayaran tunai dan kredit.
c. Class
Diagram

Keterangan per table :

1. Table services:
Pada table ini menerangkan tentang jumlah total pembayaran dan diskon yang
dilakukan di SPBU termasuk di dalam nya pengisian BBm dan parkir dan
perbaikan mobil.
2. Table Refuel
Pada table ini menerangkan tentang berapa gallon/liter BBM yang di isikan dan
total harga keseluruhan BBM.
3. Parkir
Pada table ini menjelaskan tentang parkir dan harga parkir dari parkir itu sendiri
4. Purchase
Pada table pembayaran ini menjelaskan tentang tagihan dan konsumen yang
terdaftar
5. Gas
Pada table ini menjelaskan tentang harga BBM perliter
6. Parking spot
Pada table ini menjelaskan tentang spot parkir atau tempat parkir yang di tempati
untuk parkir
7. Sparepart
Pada table sparepart ini menjelas kan tentang kode sparepart dan nilai diskon dari
sparepart tersebut yang merupakan table lanjutan dari table perbaikan mobil ( car-
maintenance)
8. Registered customer
Adalah table yang menjelaskan tentang customer yang terdaftar melalui account
kartu kredit merupakan table lanjutan dari table pembayaran (purchase).
9. Product
Pada table ini menjelaskan tentang produk yang di pilih dari sparepart dan BBM
yang dipilih jenis nya
10. Bill
Merupakan table yang menjelaskan tentang tagihan , struk yang akan di bayarkan
11. Inventory
Pada table ini menjelaskan tentang inventaris dari product sparepart yang dimiliki
12. Hash table
Pada table ini menjelaskan tentang kumpulan kode id pada inventory product
sparepart
13. Warning letters
Pada table ini menjelaskan tentang , peringatan kartu kredit pada saat pembayaran
, bisa berupa peringatan pembayaran angsuran kartu kredit atau limit batas
pemakaian yang sudah melampaui.
14. Message
Pada table ini menjelasakan tentang pesan yang merupakan lanjutan dari table
warning letters yang akan dilanjutkan ke kartu kredit tersebut saat transaksi
pembayaran
15. Periodic messages
Pada table ini menjelaskan tentang pesan berkala di kartu kredit yang berkaitan
tentang promo, diskon, angsuran kredit perbulan dan lain lain

Tambahan untuk sistem tersebut :


Seharus nya ada penambahan field untuk tabel parker , isi pada field tersebut
adalah id atau kode untuk tempat parkir , yang akan di parkir sehingga memudah
kan pembayaran transaksi dan pengambilan mobil setelah parkir.

d. Sequence Diagram
Keterangan sequence diagram :
Pada urutan diagram ini saya akan menjelaskan urutan- urutan yang saya
pahami:
1. Konsumen yang terdaftar melalui kartu kredit akan membayarkan
angsuran perbulan dengan cash dengan memasukan nomor akun kartu
kredit nya dan jumlah total yang di bayarkan.
2. Terminal cashier
Kasir memasukkan data konsumen untuk menerima
pembayaran dengan kartu kredit dengan memasukan nomor akun nya
dan total jumlah nya.
3. Gas station (SPBU)
Kemudian konsumen tersebut telah terdaftar di SPBU dengan nomor
akun kartu kredit nya .
Konsumen tinggal menggisi BBM yang di pilih dan mendapatkan total
pembayaran di kasir
4. Bill
Pembaharuan pembayaran waktu pengisian BBM pada tanggal waktu
pengisian,
5. Cashier terminal
Setelah melakukan pembayaran melalui kartu kredit maka akan
mendapatkan balasan pesan dari system bank untuk di tunjukkan ke
kasir.

3. Design Patterns yang cukup populer adalah yang diperkenalkan The Gang of Four
(GoF) - Erich Gamma, Richard Helm, Ralph Johnson dan John Vlissides. Dalam The
Gang of Four (GoF) terdapat 23 Pattern yang dibagi menjadi 3 kelompok besar.

Creational Patterns (cara class/object di-inisiasi).


1. Abstract Factory (Creates an instance of several families of classes)
2. Builder (Separates object construction from its representation)
3. Factory Method (Creates an instance of several derived classes)
4. Prototype (A fully initialized instance to be copied or cloned)
5. Singleton (A class of which only a single instance can exist)

Structural Patterns (struktur/relasi antar object/class)


1. Adapter (Match interfaces of different classes)
2. Bridge (Separates an objects interface from its implementation)
3. Composite (A tree structure of simple and composite objects)
4. Decorator (Add responsibilities to objects dynamically)
5. Facade (A single class that represents an entire subsystem)
6. Flyweight (A fine-grained instance used for efficient sharing)
7. Proxy (An object representing another object)

Behavioral Patterns (tingkah laku atau fungsi dari class/object.)


1. Chain of Responbility (A way of passing a request between a chain of objects)
2. Command (Encapsulate a command request as an object)
3. Interpreter (A way to include language elements in a program)
4. Iterator (Sequentially access the elements of a collection)
5. Mediator (Defines simplified communication between classes)
6. Mementto (Capture and restore an object's internal state)
7. Observer (A way of notifying change to a number of classes)
8. State (Alter an object's behavior when its state changes)
9. Strategy (Encapsulates an algorithm inside a class)
10. Template Method (Defer the exact steps of an algorithm to a subclass)
11. Visitor (Defines a new operation to a class without change)

Contoh design pattern dan cara kerja nya :

A. Creational Patterns

1. Abstract factory pattern adalah untuk "Memberikan sebuah antarmuka untuk


menciptakan keluarga obyek terkait atau tergantung tanpa menentukan sesuatu
yang konkret kelas mereka.
Cara kerja abstract factory pattern :

Factory menentukan jenis sesuatu yang konkret yang sebenarnya dari objek yang
akan dibuat, dan di sini bahwa objek sebenarnya dibuat (di C ++, misalnya, oleh
Operator baru ). Namun, factory hanya mengembalikan abstrak pointer untuk
menciptakan objek sesuatu yang konkret .
Ini memisahkan dari kode klien pembuatan obyek dengan klien meminta objek
factory untuk membuat sebuah objek dari yang diinginkan jenis abstrak dan
mengembalikan pointer abstrak ke objek
Sebagai factory hanya mengembalikan sebuah pointer abstrak, kode klien (yang
meminta objek dari factory) tidak tahu - dan tidak terbebani oleh - jenis sesuatu
yang konkret yang sebenarnya dari objek yang baru saja dibuat. Namun, jenis
benda sesuatu yang konkret (dan karenanya sesuatu factory yang konkret) dikenal
oleh factory abstrak; Misalnya, factory dapat membacanya dari file konfigurasi.
klien tidak memiliki kebutuhan untuk menentukan jenis, karena sudah ditetapkan
dalam file konfigurasi. Secara khusus, ini berarti:
Kode klien tidak memiliki pengetahuan apapun dari sesuatu yang konkret jenis ,
tidak perlu menyertakan file header atau kelas deklarasi yang berhubungan dengan
itu. Kode klien hanya berurusan dengan jenis abstrak. Objek dari jenis sesuatu
yang konkret memang dibuat oleh factory, namun kode klien mengakses objek
seperti hanya melalui mereka antarmuka abstrak .
Menambahkan jenis sesuatu yang konkret baru dilakukan dengan memodifikasi
kode klien untuk menggunakan factory yang berbeda, modifikasi yang biasanya
satu baris dalam satu file. Factory yang berbeda kemudian menciptakan objek dari
jenis sesuatu yang konkret yang berbeda, tapi masih mengembalikan pointer dari
jenis abstrak yang sama seperti sebelumnya - dengan demikian isolasi kode klien
dari perubahan. Hal ini secara signifikan lebih mudah daripada memodifikasi kode
klien untuk memberi contoh jenis baru, yang akan membutuhkan perubahan setiap
lokasi di kode di mana objek yang baru dibuat (serta memastikan bahwa semua
lokasi kode tersebut juga memiliki pengetahuan tentang jenis sesuatu yang
konkret baru, misalnya termasuk kelas sesuatu yang konkret file header). Jika
semua benda factory disimpan secara global dalam tunggal objek, dan semua kode
klien melewati tunggal untuk mengakses factory yang tepat untuk penciptaan
objek, kemudian mengubah factory semudah mengubah objek tunggal.
Contoh dari kasus pemakaian Abstract factory pattern pada php :

Sebagai contoh membuat tombol baik dalam style Windows atau style Mac OS
X tergantung pada jenis pabrik yang digunakan. Perhatikan bahwa Permohonan
tidak tahu apa jenis GUIFactory itu diberikan atau bahkan untuk apa Tombol
yang pabrik ciptakan ?

interface ButtonInterface echo "Windows Button";


{ }
public function Paint(); }
} class OSXButton implements
interface GUIFactoryInterface ButtonInterface
{ {
public function CreateButton(); public function Paint()
} {
class WinFactory implements echo "OSX Button";
GUIFactoryInterface }
{ }
public function CreateButton()
{ $appearance = "osx";
return new WinButton();
} $factory = NULL;
} switch ($appearance) {
class OSXFactory implements case "win":
GUIFactoryInterface $factory = new WinFactory();
{ break;
public function CreateButton() case "osx":
{ $factory = new OSXFactory();
return new OSXButton(); break;
} default:
} break;
class WinButton implements ButtonInterface }
{ $button = $factory->CreateButton();
public function Paint() $button->Paint();
{

B. Prototype
Pola prototipe adalah pembuatan / penciptaan pola desain dalam pengembangan
perangkat lunak . Hal ini digunakan ketika jenis objek untuk menciptakan
ditentukan oleh prototipe misalnya , sebagaimana kloning untuk menghasilkan
objek baru. Pola ini digunakan untuk:

menghindari subclass dari pencipta objek dalam aplikasi klien, seperti pola pabrik
tidak abstrak.
menghindari biaya yang melekat menciptakan objek baru dalam cara standar
(misalnya, menggunakan ' baru kata kunci') bila mahal untuk aplikasi tertentu.
Untuk menerapkan pola, menyatakan abstrak kelas dasar yang menentukan
virtual murni metode clone (). Setiap kelas yang membutuhkan " polimorfik
konstruktor " kemampuan berasal dirinya dari kelas dasar abstrak, dan
mengimplementasikan clone () operasi.

Klien, bukan menulis kode yang memanggil "baru" operator pada nama kelas
hard-kode, panggilan metode clone () pada prototipe, panggilan metode factory
dengan parameter menunjuk sebagaimana mestinya tentu berasal dari kelas yang
diinginkan, atau memanggil clone () metode melalui beberapa mekanisme yang
disediakan oleh pola desain lain.
Contoh dari kasus pemakaian Prototype pada php :

Pola ini menciptakan jenis objek menggunakan prototipe. Dengan kata lain,
sekaligus menciptakan obyek obyek Prototype, dengan kelas sebenarnya menciptakan dari
klon itu dan mengembalikannya sebagai prototipe. Anda bisa lihat di sini, telah
menggunakan metode Clone untuk mengkloning prototipe

// The Prototype pattern in PHP is done with the use of built-in PHP function __clone()
abstract class Prototype
{
public $a;
public $b;
public function displayCONS()
{
echo "CONS: {$this->a}\n";
echo "CONS: {$this->b}\n";
}
public function displayCLON()
{
echo "CLON: {$this->a}\n";
echo "CLON: {$this->b}\n";
}

abstract function __clone();}


class ConcretePrototype1 extends Prototype
{
public function __construct()
{
$this->a = "A1";
$this->b = "B1";

$this->displayCONS();
}
function __clone()
{
$this->displayCLON();
}
}
class ConcretePrototype2 extends Prototype
{
public function __construct()
{
$this->a = "A2";
$this->b = "B2";
$this->displayCONS();
}
function __clone()
{
$this->a = $this->a ."-C";
$this->b = $this->b ."-C";
$this->displayCLON();
}}
$cP1 = new ConcretePrototype1();
$cP2 = new ConcretePrototype2();
$cP2C = clone $cP2;
// RESULT: #quanton81
// CONS: A1
// CONS: B1
// CONS: A2
// CONS: B2
// CLON: A2-C
// CLON: B2-C

C. Decorator pattern

pola dekorator (juga dikenal sebagai Wrapper, sebuah penamaan alternatif


bersama dengan pola Adapter ) adalah pola desain yang memungkinkan perilaku
yang akan ditambahkan ke individu objek , baik statis atau dinamis, tanpa
mempengaruhi perilaku objek lainnya dari kelas yang sama. Pola dekorator sering
digunakan untuk pegangaan pada Prinsip Tanggung Jawab Single , karena
memungkinkan fungsi harus dibagi antara kelas dengan perhatian bidang unik.

This wrapping could be achieved by the following sequence of steps:

1. Subclass the original Component class into a Decorator class


2. In the Decorator class, add a Component pointer as a field;
3. In the Decorator class, pass a Component to the Decorator constructor to
initialize the Componentpointer;
4. In the Decorator class, forward all Component methods to the Component
pointer; and
5. In the ConcreteDecorator class, override any Component method(s) whose
behavior needs to be modified.

Contoh dari kasus pemakaian Decorator pattern pada php :

abstract class Component


{
protected $data;
protected $value;

abstract public function getData();

abstract public function getValue();


}

class ConcreteComponent extends Component


{
public function __construct()
{
$this->value = 1000;
$this->data = "Concrete Component:\t{$this->value}\n";
}

public function getData()


{
return $this->data;
}

public function getValue()


{
return $this->value;
}
}
abstract class Decorator extends Component
{

class ConcreteDecorator1 extends Decorator


{
public function __construct(Component $data)
{
$this->value = 500;
$this->data = $data;
}

public function getData()


{
return $this->data->getData() . "Concrete Decorator 1:\t{$this->value}\n";
}

public function getValue()


{
return $this->value + $this->data->getValue();
}
}

class ConcreteDecorator2 extends Decorator


{
public function __construct(Component $data)
{
$this->value = 500;
$this->data = $data;
}

public function getData()


{
return $this->data->getData() . "Concrete Decorator 2:\t{$this->value}\n";
}

public function getValue()


{
return $this->value + $this->data->getValue();
}
}

class Client
{
private $component;

public function __construct()


{
$this->component = new ConcreteComponent();
$this->component = $this->wrapComponent($this->component);

echo $this->component->getData();
echo "Client:\t\t\t";
echo $this->component->getValue();
}

private function wrapComponent(Component $component)


{
$component1 = new ConcreteDecorator1($component);
$component2 = new ConcreteDecorator2($component1);
return $component2;
}
}

$client = new Client();

// Result: #quanton81

//Concrete Component: 1000


//Concrete Decorator 1: 500
//Concrete Decorator 2: 500
//Client: 2000
D. chain-of-responsibility pattern

chain-of-responsibility pattern pola desain yang terdiri dari sumber objek perintah dan
serangkaian pengolahan objek.
Setiap objek pengolahan mengandung logika yang mendefinisikan jenis perintah objek yang
dapat menangani; sisanya diteruskan ke objek pengolahan berikutnya dalam rantai. Sebuah
mekanisme juga ada untuk menambahkan objek pengolahan baru untuk akhir rantai ini.
Dalam variasi dari model chain of responbility, beberapa penanganan dapat bertindak
sebagai dispatcher , mampu mengirim perintah dalam berbagai arah, membentuk
sebuah pohon tanggung jawab. Dalam beberapa kasus, hal ini dapat terjadi secara rekursif,
dengan benda-benda pengolahan objek memanggil pengolahan yang lebih tinggi dengan
perintah yang mencoba untuk memecahkan beberapa bagian kecil dari masalah; dalam hal ini
rekursi berlanjut sampai perintah diproses, atau seluruh pohon telah dieksplorasi. Sebuah xml
interpreter mungkin bekerja dengan cara ini.

Contoh dari kasus pemaikaian nya pada chain of responbility :


pola di Java. Dalam contoh ini kita memiliki peran yang berbeda, masing-masing
memiliki batas tetap pembelian dan penggantinya. Setiap kali pengguna menerima peran
dalam permintaan pembelian yang melebihi batas nya, permintaan akan diteruskan ke
penggantinya.
The PurchasePowerclass abstrak with method ProcessRequest abstrak.

abstract class PurchasePower {


protected static final double BASE = 500;
protected PurchasePower successor;

abstract protected double getAllowable();


abstract protected String getRole();

public void setSuccessor(PurchasePower successor) {


this.successor = successor;
}

public void processRequest(PurchaseRequest request){


if (request.getAmount() < this.getAllowable()) {
System.out.println(this.getRole() + " will approve $" + request.getAmount());
} else if (successor != null) {
successor.processRequest(request);
}
}
}

//Four implementations of the abstract class above: Manager, Director, Vice President, President
// lass ManagerPPower extends PurchasePower {

protected double getAllowable(){


return BASE*10;
}

protected String getRole(){


return "Manager";
}
}

class DirectorPPower extends PurchasePower {

protected double getAllowable(){


return BASE*20;
}

protected String getRole(){


return "Director";
}
}

class VicePresidentPPower extends PurchasePower {

protected double getAllowable(){


return BASE*40;
}

protected String getRole(){


return "Vice President";
}
}

class PresidentPPower extends PurchasePower {

protected double getAllowable(){


return BASE*60;
}

protected String getRole(){


return "President";
}
}
//The following code defines the PurchaseRequest class that keeps the request data in this example.
//class PurchaseRequest {
private double amount;
private String purpose;

public PurchaseRequest(double amount, String purpose) {


this.amount = amount;
this.purpose = purpose;
}

public double getAmount() {


return amount;
}
public void setAmount(double amt) {
amount = amt;
}

public String getPurpose() {


return purpose;
}
public void setPurpose(String reason) {
purpose = reason;
}
}
//n the following usage example, the successors are set as follows: Manager -> Director -> Vice President -> President
//class CheckAuthority {
public static void main(String[] args) {
ManagerPPower manager = new ManagerPPower();
DirectorPPower director = new DirectorPPower();
VicePresidentPPower vp = new VicePresidentPPower();
PresidentPPower president = new PresidentPPower();
manager.setSuccessor(director);
director.setSuccessor(vp);
vp.setSuccessor(president);

// Press Ctrl+C to end.


try {
while (true) {
System.out.println("Enter the amount to check who should approve your expenditure.");
System.out.print(">");
double d = Double.parseDouble(new BufferedReader(new InputStreamReader(System.in)).readLine());
manager.processRequest(new PurchaseRequest(d, "General"));
}
} catch(Exception e) {
System.exit(1);
}
}
}
E. Observer pattern
Observer pattern adalah pola desain perangkat lunak di mana suatu objek , yang disebut
subjek, menyimpan daftar tanggungan, yang disebut pengamat, dan memberitahu mereka
secara otomatis dari setiap perubahan negara, biasanya dengan memanggil salah satu dari
mereka metode . Hal ini terutama digunakan untuk melaksanakan didistribusikan penanganan
event sistem. Pola Observer juga merupakan bagian penting dalam familiar model-view-
controller pola arsitektur (MVC). Pola pengamat diimplementasikan dalam
berbagai perpustakaan pemrograman dan sistem, termasuk hampir semua GUI toolkit.
Pola pengamat dapat menyebabkan kebocoran memori , yang dikenal sebagai masalah
pendengar salah , karena dalam implementasi dasar itu membutuhkan kedua pendaftaran
eksplisit dan deregistration eksplisit, seperti dalam pola pembuangan , karena subjek
memegang referensi yang kuat ke pengamat, menjaga hidup mereka. Hal ini dapat dicegah
dengan subjek memegang referensi lemah ke pengamat.
Contoh kasus pada pemakaian observer pattern ini adalah
import java.util.Observable;
import java.util.Scanner;

class EventSource extends Observable implements Runnable {


public void run() {
while (true) {
String response = new Scanner(System.in).next();
setChanged();
notifyObservers(response);
}
}
}
import java.util.Observable;
import java.util.Observer;

public class MyApp {


public static void main(String[] args) {
System.out.println("Enter Text: ");
EventSource eventSource = new EventSource();

// New java 8 style with lambda expressions


eventSource.addObserver( (Observable obj, Object arg) -> {
System.out.println("Received response: " + arg);
});
/*
eventSource.addObserver(new Observer() {
public void update(Observable obj, Object arg) {
System.out.println("Received response: " + arg);
}
});
*/

new Thread(eventSource).start();
}
}
/*
interface Observer{
public void update(Observable obj, Object arg);
}*/
4. Refactoring
4.1. Redundansi adalah kerangkapan pada coding atau data
Sebagai contoh :
Redudansi data merupakan kerangkapan data yang terjadi dalam basis
data.
Contoh kasus

Contoh : Tabel 1 (mhs.dbf) tersusun atas field :


No_Mhs
Nama
Alamat
Kode_dosen
Nama_Dosen
Tabel 1 (mhs.dbf) tersusun atas field :
Seharus nya kode dosen tidak perlu di tulis di table mahasiswa

Kode_Dosen
Nama_Dosen

Cara memperbaiki nya adalah dengan membuang pada coding atau data
yang terdapat kerangkapan, dan meminimalisir perulangan data atau
coding yang sama.
4.2. Elemen desain tidak terpakai
Elemen desain tidak terpakai adalah banyak nya varchar yang di kasih
oleh programmer,

Contoh kasus pada script php html 5,


$dbpass = 'password';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $koneksi )
{
die('Gagal Koneksi: ' . mysql_error());
}
echo 'Koneksi Berhasil';
$sql = 'CREATE TABLE karyawan( '.
'id_karyawan INT NOT NULL AUTO_INCREMENT, '.
'nama_karyawan VARCHAR(100) NOT NULL, '.
'alm_karyawan VARCHAR(20) NOT NULL, '.
'gaji_karyawan INT NOT NULL, '.
'tgl_gabung timestamp(14) NOT NULL, '.
'primary key ( id_karyawan ))';

mysql_select_db('test_db');
$buattabel = mysql_query( $sql, $koneksi );
if(! $buattabel )
{
die('Gagal Membuat Tabel: ' . mysql_error());
}
echo "Tabel Karyawan sukses dibuat\n";
mysql_close($koneksi);
?>
pada script di atas nama karyawan bisa mencapai 100 varchar(variable
atau karakter) , pada kasus ini tersebut terlalu banyak variable sampai
seratus, seharus nya ckup 20 atau 30 variabel saja karena jarang di
gunakan sampai 100 variabel, sehingga itu membuat beberapa elemen
tidak terpakai.

Cara menangulangi atau memperbaiki nya adalah dengan cara membuat


variable semaksimal mungkin yang di gunakan dengan mengurangi
beberapa variable yang tidak optimal dengan pengoptimalan variable
yang mungkin digunakan dengan cukup tanpa berlebih, yang berakibat
lambat nya program atau data saat di panggil.

4.3.Algoritma tidak efisien


algoritma merupakan suatu langkah kerja/ uruta langkah kerja yang logis dan tepat
untuk memecahkan suatu masalah, atau dalam ilmu komputer algoritma
merupakan suatu konsep dasar dari sebuah program yang dimana dalam
pembuatannya di perlukan daya nalar dan pikir yang baik maupun logis.
Kata algoritma sendiri berasal dari bahasa arab yaitu dari kata algorism yang
berarti proses menghitung dengan angka arab.

Contoh kasus dalam script :


<!DOCTYPE html>
<html>
<body>

<?php
for ($x = 0; $x = 1; $x = 2; $x = 3; $x = 4; $x = 5; $x = 6; $x = 7; $x = 8; $x = 9; $x $x
= 10; $x++) {
echo "The number is: $x <br>";
}
?>

</body>
</html>
Algoritma diatas ckup tidak efisien karena program akan membaca satu persatu
script, oke kalau cm nominal bisa diabaca dalam 0.0001 detik akan tetapi apabila
data yang di panggil sampai berjuta-juta maka akan membutah kan waktu lama
untuk memanggil nya, script yang benar dan akar program tidak banyak
membaca.

<!DOCTYPE html>
<html>
<body>
<?php
for ($x = 0; $x <= 10; $x++) {
echo "The number is: $x <br>";
}
?>

</body>
</html>
Efisiensi algoritma.

Algoritma yang dapat dikatakan sebagai algoritma yang efisien, merupakan


algoritma yang dimana pada saat pemrosesan algoritma tersebut tidak memakan
banyak waktu dan juga ditak memakan banyak memori dalam pemrosesannya.

seperti yang sudah di jelaskan, efisiensi algoritma umumnya di tinjau dari 2 hal,
yaitu efisiensi terhadap waktu, dan efisiensi terhadap memori.

Walaupun algoritma yang memberikan keluaran yang benar(paling mendekati


kenyataan), tetapi jika harus menunggu berjam-jam atau mungkin berhari-hari
untuk mendapatkan outputannya(dalam hal ini yang dimaksudkan adalah efisiensi
dalam waktu), algoritma tersebut biasanya tidak akan dipakai. Kebanyakan orang
lebih menginignkan algoritma yang memiliki pengeluaran atau hasil outputan
yang lebih cepat.
Faktor-faktor yang dapat mempengaruhi waktu tempuh dari algoritma itu sendiri
adalah :
1. Banyaknya langkah: Makin banyak langkah atau instruksi yang digunakan
dalam menyelesaikan masalah, maka makin lama waktu tempuh yang dibutuhkan
dalam proses tersebut
2. Besar dan jenis input data: Besar dan jenis input data pada suatu algoritma akan
sangat berpengaruh pada proses perhitugan yang terjadi. Jika jenis data adalah
tingkat ketelitian tunggal(Single precision), maka waktu tempuh akan menjadi
relatif lebih cepat dibandingkan dengan tingkat ketelitian ganda(double precesion)
3. Jenis operasi: Waktu tempuh juga dipengaruhi oleh jenis operasi yang
digunakan. Jenis operasi tersebut meliputi operasi matematika, nalar atau logika,
atau yang lainnya. Sebagai contoh, operasi perkalian atau pembagian akan
memakan waktu lebih lama dibandingkan operasi penjumlahan atau pengurangan.

begitu juga dengan memori, algoritma yang memakan banyak memori merupakan
algoritma yang dapat dikatakan memiliki kualitas buruk. Semakin besar memori
yang terpakai untuk algoritma tersebut, maka akan semaikin jeleklah algoritma
tersebut.
Salah satu faktor yang mempengaruhi pemakaian memori dalam suatu algoritma
adalah banyaknya langkah yang digunakan dan jenis variable data yang dipakai
dalam suatu algoritma.
Jadi dalam suatu algoritma, haruslah algoritma yang efisiensi akan waktu dan
memori, karena jika tidak maka pemrosesan dari algoritma tersebut akan menjadi
lama, berat, dan tidak efisien pastinya
4.4. Struktur data yang Badly designed.
Adalah struktur data yang tidak bagus dan perlu diperbaiki, sebagaimana contoh

Data Clumping

Clumping (gumpalan) data terjadi ketika kelompok data yang sama (field dalam
kelas, parameter dalam metode) terulang kembali di beberapa tempat dalam
sebuah program. Bad Smell jenis ini dapat diganti dengan enkapsulasi semua data
dalam satu objek.
Salah satu contoh adalah Normalisasi database merupakan suatu pendekatan
sistematis untuk meminimalkan redundansi data pada suatu database agar
database tersebut dapat bekerja dengan optimal. Jika anda seorang database
administrator ketika terjadi sesuatu pada database seperti penurunan kinerja,
mungkin anda akan ditanya apakah database tersebut telah di normalisasi?

Tujuan Normalisasi Database

Tujuan normalisasi database adalah untuk menghilangkan dan mengurangi


redudansi data dan tujuan yang kedua adalah memastikan dependensi data (Data
berada pada tabel yang tepat).

Jika data dalam database tersebut belum di normalisasi maka akan terjadi 3
kemungkinan yang akan merugikan sistem secara keseluruhan.

INSERT Anomali : Situasi dimana tidak memungkinkan memasukkan beberapa


jenis data secara langsung di database.
DELETE Anomali: Penghapusan data yang tidak sesuai dengan yang diharapkan,
artinya data yang harusnya tidak terhapus mungkin ikut terhapus.
UPDATE Anomali: Situasi dimana nilai yang diubah menyebabkan inkonsistensi
database, dalam artian data yang diubah tidak sesuai dengan yang diperintahkan
atau yang diinginkan.

Normalisasi Database
Normalisasi database terdiri dari banyak bentuk, dalam ilmu basis data ada
setidaknya 9 bentuk normalisasi yang ada
yaitu 1NF, 2NF, 3NF, EKNF, BCNF, 4NF, 5NF, DKNF, dan 6NF. Namun dalam
prakteknya dalam dunia industri bentuk normalisasi ini yang paling sering
digunakan ada sekitar 5 bentuk.
Normal Form
Data yang direkam dan dimasukkan secara mentah dalam suatu tabel pada bentuk
ini sangat mungkin terjadi inkonsistensi dan anomali data
Contoh Normal Form
Normalisasi Database Form
1. Normal Form (1NF)
Bentuk normal yang pertama atau 1NF mensyaratkan beberapa kondisi dalam
sebuah database, berikut adalah fungsi dari bentuk normal pertama ini.
Menghilangkan duplikasi kolom dari tabel yang sama.
Buat tabel terpisah untuk masing-masing kelompok data terkait dan
mengidentifikasi setiap baris dengan kolom yang unik (primary key).
Contoh Normalisasi Database 1NF

Nirmalisasi Database 1NF


dari manual bon pembelian diatas kita dapat menjadi bentuk normal pertama
dengan memisah-misahkan data pada atribut-atribut yang tepat dan bernilai
atomik, juga seluruh record / baris harus lengkap adanya.
2. Normal form (2NF)
Syarat untuk menerapkan normalisasi bentuk kedua ini adalah data telah dibentuk
dalam 1NF, berikut adalah beberapa fungsi normalisasi 2NF.
Menghapus beberapa subset data yang ada pada tabel dan menempatkan mereka
pada tabel terpisah.
Menciptakan hubungan antara tabel baru dan tabel lama dengan menciptakan
foreign key.
Tidak ada atribut dalam tabel yang secara fungsional bergantung pada candidate
key tabel tersebut.
Contoh normalisasi database bentuk 2NF

Normalisasi Database 2NF


Bentuk normal kedua dengan melakukan dekomposisi tabel diatas menjadi
beberapa tabel dan mencari kunci primer dari tiap-tiap tabel tersebut dan atribut
kunci haruslah unik.
3. Normal Form (3NF)
Normalisasi database dalam bentuk 3NF bertujuan untuk menghilangkan seluruh
atribut atau field yang tidak berhubungan dengan primary key. Dengan demikian
tidak ada ketergantungan transitif pada setiap kandidat key. Syarat dari bentuk
normal ketiga atau 3NF adalah :
Memenuhi semua persyaratan dari bentuk normal kedua.
Menghapus kolom yang tidak tergantung pada primary key.
Contoh Normalisasi Database Bentuk 3NF
Bentuk normal ketiga mempunyai syarat, setiap relasi tidak mempunyai atribut
yang bergantung transitif, harus bergantung penuh pada kunci utama dan harus
memenuhi bentuk normal kedua (2 NF).

Anda mungkin juga menyukai