Sunday, 27 November 2016

DESIGN PATTERN : TEMPLATE METHOD DESIGN PATTERN

1. Definisi Template Method Design Pattern
Template Method adalah sebuah tipe design pattern dimana terdapat sebuah baseclass yang akan mendefinisikan kerangka algoritma/urutan method yang nantinya akan digunakan oleh subclass-subclassnya. Base class ini akan dijadikan sebagai template untuk subclassnya, dan subclass tersebut bisa me-redefine method method yang ada di baseclass tersebut sesuai dengan kegunaan subclass itu tersendirinya.

2. Gambar Diagram

Dari gambar diatas dapat dijelaskan, jadi FrameworkClass adalah class yang akan digunakan sebagai baseclass dimana ApplicationClassOne dan ApplicationClassTwo adalah subclassnya. Kemudian didalam baseclass tersebut terdapat templateMethod(), yang didalamnya terdapat urutan pemanggilan method: 1.stepOne() 2.stepTwo() 3.stepThree() . Pada gambar diatas method stepTwo() pada gambar dijadikan sebagai placeholder, dimana definisi fungsi stepTwo itu akan di redefine pada class masing masing.

3. Contoh Sedehana
Untuk menjelaskan penggunaaan template method, maka dibuat sebuah program sederhana untuk simulasi membangun sebuah bangunan.

Pertama, dibuat sebuah baseclass bernama HouseTemplate.Java

package com.journaldev.design.template;

public abstract class HouseTemplate {

 //template method, final so subclasses can't override
 public final void buildHouse(){
  buildFoundation();
  buildPillars();
  buildWalls();
  buildWindows();
  System.out.println("House is built.");
 }

 //default implementation
 private void buildWindows() {
  System.out.println("Building Glass Windows");
 }

 //methods to be implemented by subclasses
 public abstract void buildWalls();
 public abstract void buildPillars();

 private void buildFoundation() {
  System.out.println("Building foundation with cement,iron rods and sand");
 }
}
Dari baseclass diatas dapat dilihat bahwa buildHouse dijadikan sebagai template method yang akan memangil buildFoundation buildPilars buildWalls dan buildWindows secara berurutan. Dimana function ini diberi final agar template method tidak dapat di override pada subclassnya. Fungsi yang terdapat didalam template method harus dapat di override agar subclass dapat meredefine isinya.

package com.journaldev.design.template;

public class GlassHouse extends HouseTemplate {

 @Override
 public void buildWalls() {
  System.out.println("Building Glass Walls");
 }

 @Override
 public void buildPillars() {
  System.out.println("Building Pillars with glass coating");
 }

}
Contoh diatas adalah subclass untuk membuat sebuah Glass House, dimana subclass ini meredefine isi dari buildWalls dan buildPillars. 

package com.journaldev.design.template;

public class WoodenHouse extends HouseTemplate {

 @Override
 public void buildWalls() {
  System.out.println("Building Wooden Walls");
 }

 @Override
 public void buildPillars() {
  System.out.println("Building Pillars with Wood coating");
 }

}
Contoh diatas ia membuat subclass untuk membuat WoodenHouse dimana dia mengoverride method buildWalls dan buildPillars.

package com.journaldev.design.template;

public class HousingClient {

 public static void main(String[] args) {
  
  HouseTemplate houseType = new WoodenHouse();
  
  //using template method
  houseType.buildHouse();
  System.out.println("************");
  
  houseType = new GlassHouse();
  
  houseType.buildHouse();
 }

}
Nah untuk menjalankan programnya , di main dapat dibuat baru , diatas diberikan contoh pertama kali ia membuat wooden house, maka akan digunakan method2 pada class WoodenHouse (yang telah sesuai pemanggilannya dengan template method). dan glass house akan mengugnakan method2 pada GlassHouse (yang juga telah sesuai pemanggilannya dengan template method).

4. Output Implementasi:

Building foundation with cement,iron rods and sand
Building Pillars with Wood coating
Building Wooden Walls
Building Glass Windows
House is built.
************
Building foundation with cement,iron rods and sand
Building Pillars with glass coating
Building Glass Walls
Building Glass Windows
House is built.
5. Contoh Penggunaan:

Contoh penggunaannya misalnya dalam pembuatan game yang didalamnya terdapat beberapa mini games, Misalnya, suatu game didalamnya terdapat permainan catur dan juga permainan monopoly, maka di baseclass game akan terdapat fungsi seperti inisialisasiGame, pergaintianPemain, akhirGame , printPemenang , dan  di subclass catur dan subclass monopoly , fungsi2 tersebut akan di redefine kembali lagi sesuai dengan aturan bermainnya. 

Penjelasan implementasi contoh menggunakan pseudocode: 

abstract class Game {
    protected int playersCount;
    abstract void initializeGame();
    abstract void makePlay(int player);
    abstract boolean endOfGame();
    abstract void printWinner();

    /* A template method : */
    public final void playOneGame(int playersCount) {
        this.playersCount = playersCount;
        initializeGame();
        int j = 0;
        while (!endOfGame()) {
            makePlay(j);
            j = (j + 1) % playersCount;
        }
        printWinner();
    }
}


class Monopoly extends Game {

    void initializeGame() {
        // Initialize players
        // Initialize money
    }
    void makePlay(int player) {
        // Process one turn of player
    }
    boolean endOfGame() {
        // Return true if game is over 
        // according to Monopoly rules
    }
    void printWinner() {
        // Display who won
    }
    /* Specific declarations for the Monopoly game. */

    // ...
}

class Chess extends Game {

    void initializeGame() {
        // Initialize players
        // Put the pieces on the board
    }
    void makePlay(int player) {
        // Process a turn for the player
    }
    boolean endOfGame() {
        // Return true if in Checkmate or 
        // Stalemate has been reached
    }
    void printWinner() {
        // Display the winning player
    }
    /* Specific declarations for the chess game. */

    // ...
}

Sunday, 13 November 2016

Activity Diagram

Berikut activity diagram untuk tiap usecase

Mengubah Transaksi


Insert Transaksi
'
Insert Supplier

Supplier cek pembelian barang

Delete Barang


Supplier cek stok barang


Insert barang

Update supplier


update barang

Sequence Diagram

Berikut adalah sequence Diagram minimarket system

Class Diagram

Karena minimarket system menggunakan MVC (model, view , controller) maka class diagramnya sebagai berikut

Use Case Diagram - Minimarket system

Minimarket system adalah sebuah web untuk para karyawan minimarket menginputkan transaksi dan juga untuk melaksanakan kerja dengan suppler.

Terdapat 2 Aktor, yaitu supplier dan karyawan, dimana supplier dapat full akses terhadap transaksi dan Barang. Sedangkan Supplier hanya dapat mengecek stok barang yang ia miliki dan mengecek barang ia yang telah terbeli.