TUTORIAL CODEIGNITER : APLIKASI WEBSITE / BLOG (WEBLOG) SEDERHANA DENGAN CODEIGNITER

Oke gan, langsung saja untuk screen shoot contoh aplikasi website, weblog, blog dengan codeigniter yang ane kasi, seperti di bawah ini...

Tutorial HTML

HTML merupakan bahasa dasar pembuatan web. Disebut dasar karena dalam membuat web, jika hanya menggunakan HTML tampilan web terasa hambar. Terdapat banyak bahasa pemograman web yang ditujukan untuk memanipulasi kode HTML, seperti ...

TUTORIAL ORACLE - KONEKSI ORACLE KE JAVA, PHP DAN C# (C-SHARP)

Disitu juga ane kasi contoh aplikasi CRUD nya yang bisa ente download Gratisss :D ...

Kamis, 04 April 2013

Pattern Memento di Java, C# dan PHP

Memento pattern secara bahasa artinya adalah kenang-kenangan :) pattern memento ini termasuk kategory design pattern behaviour yang menangani kelakuan dari program... kali ini memang saatnya pattern memento ane bahas, karena hati ane memang lagi pengen bahas pattern memento ini :D dan nanti akan ane kasi penerapannya di Java, C# dan PHP ... Pattern memento ini secara gampangnya adalah pola yang dapat menyimpan sebuah proses ataupun sebuah moment, contoh nya yang sangat gampang dan kita ketahui seperti yang ada di Windows yaitu system restore...
System restore ini bisa menyimpan waktu dan keadaan system operasi. suatu saat kita menyimpan sebuah waktu / sebuah keadaan laptop kita, kemudian besok2 nya ada kerusakan pada system operasi, maka kita tidak perlu buru2 menginstal ulang komputer, karena kita sudah pernah menyimpan sebuah moment dari komputer itu kmaren2, jadi tinggal di restore atau dikembalikan saja maka akan kembali pada moment yang kita simpan tadi :D, cara kerja Pattern memento ini seperti itu..
kali ini ane akan kasi contoh yang kasusnya berbeda dari penjelasan ane tadi, kasus ini menceritakan saat ane PDKT sama mantan ane sampai akhir nya putus :D hehehee... dan ini bukan curhat loo ya ? hanya sebagai simulasi saja dan pada penerapan pattern memento ini ane akan simpan sebuah moment yang indah menurut ane dan saat putus ane akan kembalikan dengan pattern memento ini... begini gan penerapan pattern memento di Java, C# dan PHP :)

Java

package Memento;

import Memento.StatusInfo.Memento;

public class MainClass {
public static void main(String[] args) {
Controller controller = new Controller();
StatusInfo info = new StatusInfo("Rizal Afani", "January", "Jomblo", "Kenalan");
System.out.println(info);
info.SetState("February", "Jomblo", "PDKT");
System.out.println("\nsimpan moment\n");
controller.Save(info);
System.out.println(info);
info.SetState("Maret", "Berpacaran", "Berpacaran");
System.out.println(info);
info.SetState("Juni", "Berpacaran", "Galau");
System.out.println(info);
info.SetState("Juli", "Jomblo", "Galau");
System.out.println(info);
System.out.println("\n=========================================================================");
System.out.println("|| Andaikan saja waktu bisa diulang dengan pattern memento seperti ini ||");
System.out.println("=========================================================================\n");
System.out.println("kembalikan moment\n");
controller.Restore(info);
System.out.println(info);
}
}

class StatusInfo{
private String name, bulan, status,keadaan;
public StatusInfo(String name,String bulan,String status,String keadaan) {
this.name = name;
this.bulan = bulan;
this.status = status;
this.keadaan = keadaan;
}
public void SetState(String bulan,String status,String keadaan){
this.bulan = bulan;
this.status = status;
this.keadaan = keadaan;
}

public String toString(){
return this.name+" pada bulan "+this.bulan+" sedang "+this.keadaan+" dengan status "+this.status;
}

public Memento Save(){
return new Memento(bulan, status, keadaan);
}

public void Restore(Object objMemento){
Memento _obj = (Memento)objMemento;
this.bulan = _obj.bulan;
this.status = _obj.status;
this.keadaan = _obj.keadaan;
}

public class Memento{
public String bulan, status,keadaan;
public Memento(String bulan,String status,String keadaan) {
this.bulan = bulan;
this.status = status;
this.keadaan = keadaan;
}
}
}

class Controller{
private Object objMemento;
public void Save(StatusInfo info){
this.objMemento = info.Save();
}
public void Restore(StatusInfo info){
info.Restore(this.objMemento);
}
}


C#
using System;

namespace Memento
{
class Program
{
public static void Main(string[] args)
{
Controller controller = new Controller();
StatusInfo info = new StatusInfo("Rizal Afani", "January", "Jomblo", "Kenalan");
Console.WriteLine(info.ToString());
info.SetState("February", "Jomblo", "PDKT");
Console.WriteLine("\nsimpan moment\n");
controller.Save(info);
Console.WriteLine(info.ToString());
info.SetState("Maret", "Berpacaran", "Berpacaran");
Console.WriteLine(info.ToString());
info.SetState("Juni", "Berpacaran", "Galau");
Console.WriteLine(info.ToString());
info.SetState("Juli", "Jomblo", "Galau");
Console.WriteLine(info.ToString());
Console.WriteLine("\n=========================================================================");
Console.WriteLine("|| Andaikan saja waktu bisa diulang dengan pattern memento seperti ini ||");
Console.WriteLine("=========================================================================\n");
Console.WriteLine("kembalikan moment\n");
controller.Restore(info);
Console.WriteLine(info.ToString());

Console.ReadKey(true);
}
}

class StatusInfo{
private String name, bulan, status,keadaan;
public StatusInfo(String name,String bulan,String status,String keadaan) {
this.name = name;
this.bulan = bulan;
this.status = status;
this.keadaan = keadaan;
}
public void SetState(String bulan,String status,String keadaan){
this.bulan = bulan;
this.status = status;
this.keadaan = keadaan;
}

public String ToString(){
return this.name+" pada bulan "+this.bulan+" sedang "+this.keadaan+" dengan status "+this.status;
}

public Memento Save(){
return new Memento(bulan, status, keadaan);
}

public void Restore(Object objMemento){
Memento _obj = (Memento)objMemento;
this.bulan = _obj.bulan;
this.status = _obj.status;
this.keadaan = _obj.keadaan;
}

public class Memento{
public String bulan, status,keadaan;
public Memento(String bulan,String status,String keadaan) {
this.bulan = bulan;
this.status = status;
this.keadaan = keadaan;
}
}
}

class Controller{
private Object objMemento;
public void Save(StatusInfo info){
this.objMemento = info.Save();
}
public void Restore(StatusInfo info){
info.Restore(this.objMemento);
}
}
}


PHP
<?php
class StatusInfo{
private $name, $bulan, $status,$keadaan;
function __construct($name,$bulan,$status,$keadaan) {
$this->name = $name;
$this->bulan = $bulan;
$this->status = $status;
$this->keadaan = $keadaan;
}
function SetState($bulan,$status,$keadaan){
$this->bulan = $bulan;
$this->status = $status;
$this->keadaan = $keadaan;
}

function toString(){
return $this->name." pada bulan ".$this->bulan." sedang ".$this->keadaan." dengan status ".$this->status."<br />";
}

function Save(){
return new Memento($this->bulan, $this->status, $this->keadaan);
}

function Restore($objMemento){
$this->bulan = $objMemento->bulan;
$this->status = $objMemento->status;
$this->keadaan = $objMemento->keadaan;
}
}

class Memento{
public $bulan, $status,$keadaan;
function __construct($bulan,$status,$keadaan) {
$this->bulan = $bulan;
$this->status = $status;
$this->keadaan = $keadaan;
}
}

class Controller{
private $objMemento;
function Save($info){
$this->objMemento = $info->Save();
}
function Restore($info){
$info->Restore($this->objMemento);
}
}

$controller = new Controller();
$info = new StatusInfo("Rizal Afani", "January", "Jomblo", "Kenalan");
echo($info->toString());
$info->SetState("February", "Jomblo", "PDKT");
echo("< br />simpan moment< br />< br />");
$controller->Save($info);
echo($info->toString());
$info->SetState("Maret", "Berpacaran", "Berpacaran");
echo($info->toString());
$info->SetState("Juni", "Berpacaran", "Galau");
echo($info->toString());
$info->SetState("Juli", "Jomblo", "Galau");
echo($info->toString());
echo("< br />=========================================================================<br />");
echo("|| Andaikan saja waktu bisa diulang dengan pattern memento seperti ini ||< br />");
echo("=========================================================================< br />");
echo("kembalikan moment< br />< br />");
$controller->Restore($info);
echo($info->toString());

?>

kalo ente lihat pada implementasi atau penerapan pattern memento di Java, C# dan PHP itu ada sebuah proses kemudian salah satu proses nya ane simpan (dalam hal ini saat ane PDKT) ente juga tau kalo saat2 yang indah itu saat PDKT, bukan saat pacaran, kemudian saat ane putus, ane kembalikan lagi ke saat PDKT :D ... andaikan didunia ini ada Jutsu yang bisa menyimpan dan mengembalikan waktu seperti Pattern memento ini ane akan pelajari... biar gak jomblo gini... wkwkwkwkwk tapi jomblo juga banyak hikmah nya looo hehehehehe... oke dah gan, semoga ente paham dan semoga bermanfaat buat ane, ente juga para pengunjung blog ini :)

Pattern Abstract Factory di Java, C#, PHP

Abstract factory pattern tidak jauh - jauh berbeda dengan Factory Pattern, dan Abstract factory pattern ini juga termasuk kategori design pattern creational, kali ini ane akan coba sedikit membahas dan mengimplementasikannya dengan Java, C# dan PHP... Abtract factory, pattern ini dapat mendefinisikan persetiap factory method nya menjadi operator baru. pattern Abstract factory ini menyediakan sebuah interface untuk menciptakan object yang terkait tanpa perlu menyatakan Class implementasi dari interface ini :D . Sebagai contoh pada pada postingan ini yang nanti akan ane implementasikan di Java, C#, dan PHP...
Di kampus ane Tehnik informatika masi dibagi lagi menjadi 3 bagian, yaitu AI/Citra, RPL dan Jaringan ... tentunya pada 3 bagian minat itu ada mata kuliah2 tertentu juga, misal pada RPL, mata kuliah nya ADBO dan 3tier, kalo AI/Citra matakuliah nya Expret System dan Mechine Learning.. apa hubungannya dengan pattern Abstract factory ? :D hehehee begini gan.. seperti yang ane bilang diatas pattern ini bisa menciptakan object yang terkait.. kan gitu ya ?  minat RPL matakuliah yang terkait itu ADBO dan 3tier, minat AI matakuliah yang terkait itu Expret System dan Mechine Learning.. mulai paham kan ? untuk pihak akademik untuk menciptakan minat baru hanya perlu menyediakan nama jurusan (minat) dan mata kuliah nya saja, dan untuk pihak mahasiswa untuk memilih mata kuliah menurut minatnya, hanya cukup menentukan minat dan dan nama mata kuliah nya itu... biar lebih paham, sekarang ane kasi penerapan pattern abstract factory ini di Java, C# dan PHP

Java
package AbstractFactory;

public class MainClass {
public static void main(String[] args) {
Pilihan pilih = new Pilihan();
Jurusan jurusan = pilih.PilihJurusan("RPL");
MataKuliah matkul = jurusan.Matkul("ADBO");
matkul.Print();

System.out.println("------------------");
jurusan = pilih.PilihJurusan("AI");
matkul = jurusan.Matkul("Expret System");
matkul.Print();
}
}

interface MataKuliah{
public void Print();
}

class ABDO implements MataKuliah{
@Override
public void Print() {
System.out.println("Ini mata Kuliah ADBO (Rumpun RPL)");
}
}

class ThreeTier implements MataKuliah{
@Override
public void Print() {
System.out.println("Ini mata Kuliah 3 Tier (Rumpun RPL)");
}
}

class ExpretSystem implements MataKuliah{
@Override
public void Print() {
System.out.println("Ini mata Kuliah Expret System (Rumpun AI)");
}
}

class MechineLearning implements MataKuliah{
@Override
public void Print() {
System.out.println("Ini mata Kuliah Mechine Learning (Rumpun AI)");
}
}

interface Jurusan{
public MataKuliah Matkul(String matakuliah);
}

class RPL implements Jurusan{
@Override
public MataKuliah Matkul(String matakuliah) {
if(matakuliah.equals("ADBO")){
return new ABDO();
}else{
return new ThreeTier();
}
}
}

class AI implements Jurusan{
@Override
public MataKuliah Matkul(String matakuliah) {
if(matakuliah.equals("Mechine Learning")){
return new MechineLearning();
}else{
return new ExpretSystem();
}
}
}

class Pilihan{
public Jurusan PilihJurusan(String jurusan){
if(jurusan.equals("RPL")){
return new RPL();
}else{
return new AI();
}
}
}

C#
using System;

namespace AbstractFactory
{
class Program
{
public static void Main(string[] args)
{
Pilihan pilih = new Pilihan();
Jurusan jurusan = pilih.PilihJurusan("RPL");
MataKuliah matkul = jurusan.Matkul("ADBO");
matkul.Print();

Console.WriteLine("------------------");
jurusan = pilih.PilihJurusan("AI");
matkul = jurusan.Matkul("Expret System");
matkul.Print();

Console.ReadKey(true);
}
}

interface MataKuliah{
void Print();
}

class ABDO : MataKuliah{
public void Print() {
Console.WriteLine("Ini mata Kuliah ADBO (Rumpun RPL)");
}
}

class ThreeTier : MataKuliah{
public void Print() {
Console.WriteLine("Ini mata Kuliah 3 Tier (Rumpun RPL)");
}
}

class ExpretSystem : MataKuliah{
public void Print() {
Console.WriteLine("Ini mata Kuliah Expret System (Rumpun AI)");
}
}

class MechineLearning : MataKuliah{
public void Print() {
Console.WriteLine("Ini mata Kuliah Mechine Learning (Rumpun AI)");
}
}

interface Jurusan{
MataKuliah Matkul(String matakuliah);
}

class RPL : Jurusan{
public MataKuliah Matkul(String matakuliah) {
if(matakuliah == "ADBO"){
return new ABDO();
}else{
return new ThreeTier();
}
}
}

class AI : Jurusan{
public MataKuliah Matkul(String matakuliah) {
if(matakuliah == "Mechine Learning"){
return new MechineLearning();
}else{
return new ExpretSystem();
}
}
}

class Pilihan{
public Jurusan PilihJurusan(String jurusan){
if(jurusan == "RPL"){
return new RPL();
}else{
return new AI();
}
}
}
}


PHP
<?php
interface MataKuliah{
function _Print();
}

class ABDO implements MataKuliah{
function _Print() {
echo("Ini mata Kuliah ADBO (Rumpun RPL)< br />");
}
}

class ThreeTier implements MataKuliah{
function _Print() {
echo("Ini mata Kuliah 3 Tier (Rumpun RPL)< br />");
}
}

class ExpretSystem implements MataKuliah{
function _Print() {
echo("Ini mata Kuliah Expret System (Rumpun AI)< br />");
}
}

class MechineLearning implements MataKuliah{
function _Print() {
echo("Ini mata Kuliah Mechine Learning (Rumpun AI)< br />");
}
}

interface Jurusan{
function Matkul($matakuliah);
}

class RPL implements Jurusan{
function Matkul($matakuliah) {
if($matakuliah == "ADBO"){
return new ABDO();
}else{
return new ThreeTier();
}
}
}

class AI implements Jurusan{
function Matkul($matakuliah) {
if($matakuliah == "Mechine Learning"){
return new MechineLearning();
}else{
return new ExpretSystem();
}
}
}

class Pilihan{
function PilihJurusan($jurusan){
if($jurusan == "RPL"){
return new RPL();
}else{
return new AI();
}
}
}

$pilih = new Pilihan();
$jurusan = $pilih->PilihJurusan("RPL");
$matkul = $jurusan->Matkul("ADBO");
$matkul->_Print();

echo("-------------------------<br />");
$jurusan = $pilih->PilihJurusan("AI");
$matkul = $jurusan->Matkul("Expret System");
$matkul->_Print();
?>
untuk memahaminya secara mudah langsung saja kita ke main program (program utama), kalo ente lihat disitu ane membuat instance object dari class Pilih, kemudian ane memanggil function pilih jurusan kemudian pada parameter nya ane kasi komentar yaitu "RPL" dan return value dari function ini ane tampung di sebuah variabel bertipe Jurusan (Interface) bernama jurusan, kemudian variabel ini mengakses function Matkul dan parameternya ane kasi komentar "ADBO" dan return value ini ane tampung pada sebuah variabel bertipe Matakuliah (Interface) bernama matkul, kemudian variabel ini mengakses function Print...
Artinya begini saat object instance class pilih mengakses function pilihjurusan,function ini mengembalikan object instance dari class RPL kemudian waktu variabel jurusan mengakses function matkul, function ini mengembalikan object instance dari class ADBO, dengan begitu dari pilih jurusan dan penentuan mata kuliah saling berkaitan :D dan object instance nya yang diberikan dari return value nya juga berkaitan, inilah konsep kerja pattern abstract factory ... paham ya ? kalo udah paham sekian dulu untuk postingan kali ini tentang design pattern Abstract factory dan implementasinya di Java, C# dan PHP, semoga bermanfaat :)

Pattern Facade di Java, C# dan PHP

Penerapan design pattern di Java, C#, dan PHP memang menjadi target ane yang harus ane selesaikan dalam waktu dekat, karena sebenar nya memang ane belajar design pattern ini sudah agak lama yaitu sebelum liburan semester kmaren selesai, kali ini giliran si pattern facade untuk dibahas.. malam ini sebelum menulis artikel Pattern facade di Java, C#, C++ dan PHP ini ane sempatin sebentar buat update status di facebook, mengingat sudah agak lama tidak update (biar gak dikira gak diurus facebook nya) ... status ane malam ini adalah "selagi bisa belajar, maka ambilah kesempatan itu" .... Sebenarnya ane ambil kata2 ini dari film 3 idiot yang pastinya ente udah pernah liat, kalo gak pernah berarti ente ketinggalan zaman, film ini sangat bagus dan memberikan inspirasi yang banyak buat ane :D ...
Arti dari kata2 itu sangatlah luas, selagi bisa belajar, maka ambilah kesempatan itu... kalo sekarang ane lagi kuliah, setiap hari nya dipenuhi dengan kegiatan belajar, belajar dan belajar... apa tidak bosan ?? nah itu ane jawab dengan lanjutan status tadi "seharusnya kita bisa menikmati indahnya pengetahuan"... kalo kita bisa menikmati sesuatu, kita tidak akan mudah bosan dengan sesuatu itu, menikmati disini juga luas artinya, bisa bersyukur, bisa mengagumi, bisa bangga dll lah... dan intinya kita bisa menambah rasa penasaran pad sebuah ilmu, dengan begitu kita gak akan mudah bosen gan :D dijamin deh, karena kita akan merasa kurang dan kurang untuk mempelajari ilmu, itu bukan TAMAK, tapi itu adalah sebuah anugrah bagi kita para pecinta ilmu pengetahuan :)
Oke sekarang ane mau jelasin tentang pattern facade ini, si pattern yang berfungsi untuk menyediakan sebuah antar muka yang seragam dalam sebuah sub sistem. Bisa dibilang Facade ini menyediakan sebuah antar muka pada level yang sudah tinggi alias sudah berada pada level atas, tujuannya agar sub sistem yang berada di bawahnya lebih mudah digunakan. Antar muka yang nantinya dihadapkan pada pengguna akan terlihat lebih sederhana, dimana pengguna tidak perlu mengetahui bagaimana sub sistem yang berada pada level bawah.
pada penerapan yang ane kasi nanti ane pake contoh di kehidupan sehari - hari, seperti saat kita makan direstoran, sub system nya itu kasir, koki dan  pengantar makanan, masing2 dari sub system mempunyai tugas masing2 dan saling berhubungan dengan sub system lainnya, dan kita tidak perlu mengetahui bagaimana sub system mengerjakan tugas2 nya, bukannya begitu ya ?? kalo direstoran apa pernah kita ruwet, tanya dengan proses yang dikerjakan koki saat membuat makanan kita ? gak to ? :D kita hanya perlu memesan makanan dan membayar dan nanti nya pesanan akan diantar ke meja kita... begitu juga dengan pattern facade ini, dengan kata lain pattern facade bertindak sebagai perwakilan dari beberapa sub sistem yang rumit di bawahnya.
sekarang saat nya mengimplementasikannya ke Java, C# dan PHP

Java
package Facade;

public class MainClass {
public static void main(String[] args) {
Pesan();
}

public static void Pesan(){
Kasir kasir = new Kasir();
Koki koki = new Koki();
Pelayan pelayan = new Pelayan();

kasir.Post();
koki.Persiapan();
koki.Memasak();
koki.Post();
pelayan.Post();
kasir.Simpan();
}
}

class Kasir{
public void Post(){
System.out.println("Memberi tahu ke pihak dapur jika ada pesanan");
}

public void Simpan(){
System.out.println("Simpan Pembayaran");
}
}

class Koki{
public void Persiapan(){
System.out.println("Menyiapkan Bahan Masakan yang dipesan");
}

public void Memasak(){
System.out.println("Memasak makanan yang dipesan");
}

public void Post(){
System.out.println("Memberikan kepada pelayan untuk diantar pesanannya ke pemesan");
}
}

class Pelayan{
public void Post(){
System.out.println("Mengantar pesanan ke pemesan");
}
}

C#
using System;

namespace Facade
{
class Program
{
public static void Main(string[] args)
{
Pesan();
Console.ReadKey(true);
}

public static void Pesan(){
Kasir kasir = new Kasir();
Koki koki = new Koki();
Pelayan pelayan = new Pelayan();

kasir.Post();
koki.Persiapan();
koki.Memasak();
koki.Post();
pelayan.Post();
kasir.Simpan();
}
}

class Kasir{
public void Post(){
Console.WriteLine("Memberi tahu ke pihak dapur jika ada pesanan");
}

public void Simpan(){
Console.WriteLine("Simpan Pembayaran");
}
}

class Koki{
public void Persiapan(){
Console.WriteLine("Menyiapkan Bahan Masakan yang dipesan");
}

public void Memasak(){
Console.WriteLine("Memasak makanan yang dipesan");
}

public void Post(){
Console.WriteLine("Memberikan kepada pelayan untuk diantar pesanannya ke pemesan");
}
}

class Pelayan{
public void Post(){
Console.WriteLine("Mengantar pesanan ke pemesan");
}
}
}

PHP
<?php

class Kasir{
function Post(){
echo("Memberi tahu ke pihak dapur jika ada pesanan< br />");
}

function Simpan(){
echo("Simpan Pembayaran< br />");
}
}

class Koki{
function Persiapan(){
echo("Menyiapkan Bahan Masakan yang dipesan< br />");
}

function Memasak(){
echo("Memasak makanan yang dipesan< br />");
}

function Post(){
echo("Memberikan kepada pelayan untuk diantar pesanannya ke pemesan< br />");
}
}

class Pelayan{
function Post(){
echo("Mengantar pesanan ke pemesan<br />");
}
}

$kasir = new Kasir();
$koki = new Koki();
$pelayan = new Pelayan();

$kasir->Post();
$koki->Persiapan();
$koki->Memasak();
$koki->Post();
$pelayan->Post();
$kasir->Simpan();
?>

ane rasa ente sudah paham dengan pattern facade ini, dengan keterangan yang ane kasi tadi dan implementasinya di Java, C# dan PHP... kalo ada yang ditanyakan monggo tinggalkan komentar... hehee dan  cukup dulu untuk postingan design pattern kali ini, semoga bermanfaat untuk kita semua :) amiiin

Pattern Factory Method di Java, C# dan PHP

Factory Method Pattern merupakan salah satu jenis design pattern creational, artinnya pattern model ini menangani pembuatan sebuah object. definisi (pengertian) dari pattern factory method ini secara gampang nya adalah pola yang memungkinkan sebuah method menghasilkan retrun values yang sama walaupun inputnya berbeda :D , contoh kasus nya saat kita mempunyai dua koneksi database, misal Mysql dan Oracle..
dan untuk memilih database kita gunakan sebuah function yang menvalidasi pilihan kita, dan tentunya hasil dari validasi dari pemilihan tadi akan bertipe sama yaitu koneksi... dan itu akan di jadikan sebagai nilai kembalian dari function falidasi tadi... gimana cara nya ?? Factory pattern yang akan menjawab masalah ini :D hehehee dan berikut implementasi atau penerapan design pattern factory di Java, C# dan PHP

Java
package Factory;

public class MainClass {
public static void main(String[] args) {
SelectConnection pilih = new SelectConnection("Oracle");
Connection conn = pilih.GetConnection();
conn.CreateConnection();
}
}

interface Connection{
public void CreateConnection();
}

class Mysql implements Connection{
@Override
public void CreateConnection() {
System.out.println("Im Mysql Connection");
}
}

class Oracle implements Connection{
@Override
public void CreateConnection() {
System.out.println("Im Oracle Connection");
}
}

class SelectConnection{
public SelectConnection(String connection) {
this.connection = connection;
}

private String connection;

public Connection GetConnection(){
if(this.connection.toLowerCase().equals("mysql")){
return new Mysql();
}else{
return new Oracle();
}
}
}


C#
using System;

namespace Factory
{
class Program
{
public static void Main(string[] args)
{
SelectConnection pilih = new SelectConnection("Oracle");
Connection conn = pilih.GetConnection();
conn.CreateConnection();

Console.ReadKey(true);
}
}

interface Connection{
void CreateConnection();
}

class Mysql : Connection{
public void CreateConnection() {
Console.WriteLine("Im Mysql Connection");
}
}

class Oracle : Connection{
public void CreateConnection() {
Console.WriteLine("Im Oracle Connection");
}
}

class SelectConnection{
public SelectConnection(String connection) {
this.connection = connection;
}

private String connection;

public Connection GetConnection(){
if(this.connection.ToLower() == "mysql"){
return new Mysql();
}else{
return new Oracle();
}
}
}
}

PHP
<?php
interface Connection{
function CreateConnection();
}

class Mysql implements Connection{
function CreateConnection(){
echo "Im Mysql Connection< br />";
}
}

class Oracle implements Connection{
function CreateConnection(){
echo "Im Oracle Connection< br />";
}
}

class select_connection{
public function __construct($connection){
$this->connection = $connection;
}

private $connection;

function GetConnection(){
if($this->connection == "Mysql"){
return new Mysql();
}else{
return new Oracle();
}
}
}

$pilih = new select_connection("Oracle");
$connection = $pilih->GetConnection();
$connection->CreateConnection();
?>
untuk mengimplementasikan Desain pattern factory ini kita membutuhkan interface untuk membantu penyamaan object, kemudian interface ini kita turunkan ke class Mysql dan Oracle denga begitu kita bisa menyamakan type nya :D .. kemudina tinggal menvalidasi saja... paham kan ?? mudah kok.... dan begitulah penerapan Factory pattern pada Java, C# dan PHP... sekian untuk tulisan tutorial desain pattern kali ini semoga bermanfaat :)

Pattern Proxy di Java, C# dan PHP

Design pattern proxy kali ini gilirannya untuk dibahas, setelah sebelumnya ane udah bahas design pattern yang lain :D, dan penerapannya masi seperti biasa yaitu Java, C# dan PHP, bagi yang pengen C++ kirim donasi dulu donk nanti ane tulis deh semua design pattern tentang C++ dari awal sampai akhir, hehehee... malam ini seperti malam2 sebelum nya, masi sepi dan sendiri dan dari tadi juga hp gak ada bunyinya :D ...
gak papalah kalo saat ini ane jomblo dulu, dari pada galau :D .. perbadingan saat ane jomblo dan punya pacar sepertinya perbedaannya sangat signifikan... bisa dirasa dari beberapa karya yang sudah ane selesaikan saat ane jomblo seperti ini, dan ane bisa tenang belajar... setahun yang lalu ane punya pacar, sebenar nya ane masi bisa belajar saat itu, bahkan ane bisa selesaikan tugas OOP dari pak dosen yang memberikan skitar kalo gak salah ada 8 pembahasan yang juga udah ane upload di blog ini, ane kerjain semalam :D ... alhamdulillah... itu saat ane punya pacar... kalo gak punya pacar kira2 gimana ya ?? wkwkwkwkwkwk... Wallohu a'lam lah... tapi itu semua pasti ada sisi buruk dan sisi baiknya...
Oke sekarang saat nya kita membahas pattern Proxy setelah sedikit berbasa - basi :D ... Pattern proxy ini termasuk dari kategory desain pattern struktural dan itu artinya menangani pengaturan struktur dari program... Pattern proxy ini digunakan untuk pencegahan inisialisasi object class sampai benar2 dibutuhkan inisialisasi dari class tersebut... dari pada bingung mending kita langsung ke implementasi dan penerapannya pada Java, C#, dan PHP..

Java
package Proxy;

import java.util.Date;

public class MainClass {
public static void main(String[] args) {
Proxy proxy = new Proxy();

Printer_1 printer_1 = new Printer_1();
printer_1.Text();

proxy.Text();
}
}

abstract class Temporary{
public void Text(){
System.out.println("Im a Text from class temporary");
}
}

class Printer_1 extends Temporary{
public Printer_1() {
}
}

class Printer_2 extends Temporary{
public Printer_2() {
try{
Thread.sleep(5000);
}catch (Exception e) {
e.printStackTrace();
}
}
}

class Proxy{
Printer_2 printer_2 = null;
public Proxy() {
System.out.println("Class Proxy di inisialisasi");
}

public void Text(){
if(printer_2 == null){
printer_2 = new Printer_2();
}
System.out.println("---------------------------");
printer_2.Text();
System.out.println("dari class Proxy");
System.out.println("---------------------------");
}
}

C#
/*
* Created by SharpDevelop.
* User: MADARA UCHIHA
* Date: 30/03/2013
* Time: 6:14
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Threading;

namespace Proxy
{
class Program
{
public static void Main(string[] args)
{
Proxy proxy = new Proxy();

Printer_1 printer_1 = new Printer_1();
printer_1.Text();

proxy.Text();
Console.ReadKey(true);
}
}

abstract class Temporary{
public void Text(){
Console.WriteLine("Im a Text from class temporary");
}
}

class Printer_1 : Temporary{
public Printer_1() {
}
}

class Printer_2 : Temporary{
public Printer_2() {
try{
Thread.Sleep(5000);
}catch (Exception e) {
Console.WriteLine(e.Message);
}
}
}

class Proxy{
Printer_2 printer_2 = null;
public Proxy() {
Console.WriteLine("Class Proxy di inisialisasi");
}

public void Text(){
if(printer_2 == null){
printer_2 = new Printer_2();
}
Console.WriteLine("---------------------------");
printer_2.Text();
Console.WriteLine("dari class Proxy");
Console.WriteLine("---------------------------");
}
}
}

PHP
<?php
abstract class Temporary{
function Text(){
echo("Im a Text from class temporary<br />");
}
}

class Printer_1 extends Temporary{
function __construct() {
}
}

class Printer_2 extends Temporary{
function __construct() {
sleep(5);
}
}

class Proxy{
private $printer_2 = null;
function __construct() {
echo("Class Proxy di inisialisasi< br />");
}

function Text(){
if($this->printer_2 == null){
$this->printer_2 = new Printer_2();
}
echo("---------------------------< br />");
echo date('h:i:s')."<br />";
$this->printer_2->Text();
echo("dari class Proxy<br />");
echo("---------------------------< br />");
}
}

$proxy = new Proxy();
echo date('h:i:s')."<br />";
$printer_1 = new Printer_1();
$printer_1->Text();

$proxy->Text();
?>

pada contoh penerapan pattern proxy ini ane kasi sebuah perbandingan.. antara inisialisasi class langsung dan inisialisasi saat object bener2 dibutuhkan :D ... kalo ente lihat class Printer_1 diinisialisasi tanpa menggunakan proxy, sedangkan class printer_2 di inisialisasi dengan proxy, jadi ketika bener2 dibutuhkan, saat class proxy di inisialisasi, class printer_2 belum di inisialisasi sampai ketika function Text dipanggil dan melakukan inisialisasi class printer_2 :D ... begitulah konsep pattern proxy ini... selain membatasi penganalisasian sebelum object bener2 dibutuhkan, proxy ini juga digunakan untuk mengakses class lain ya contoh nya class proxy mengakses class Printer_2 ... paham ya ?? hehehee :D ane kira cukup sekian postingan ini, jika gak paham silahkan komentar atau tanya di facebook :) semoga bermanfaat

Pattern State di Java, C# dan PHP

kali ini masi tentang design pattern dan penerapannya pada Java, C# dan PHP.. dan kali ini gilirannya pattern state yang akan ane bahas dan akan ane kasi contoh programnya... sebelum ane bahas pattern ini ada baiknya jika ente dengerin keluh kesan ane saat nulis tutorial ini, :( bukan karena cinta atau karena mata kuliah ini ane sekarang gak enak hati, tapi gak tau kenapa tiba - tiba saja hati merasa sakit, gak ada angin apa2 padahal, bukan juga karena mantan yang lagi mesrah sama pasarnya,
Karena ane sih udah gak peduli dia mau kayak gimana. tapi gak tau kenapa tadi pas di kampus seolah2 ada perasaan yang nyebabin ane jadi galau tanpa arah ni sekarang, apa karena kecapekan ya ?? rasa nya si itu hanya sedikit faktor pendukung dari kegalauan saat ini, tapi walaupun ane lagi galau untuk saat ini, ane terus berusaha agar tidak merusak seluruh kegiatan ane, misal ni lagi nulis blog ini, walaupun performa turun 5% :D .. ya semoga kegalauan ini berlalu... karena kegalauan ini tanpa sebab dan ane juga gak tau obatnya apa ? hehehee..
setelah ane nulis tentang keadaan ane, ajaibnya sekarang ane udah sedikit mendingan dari pada tadi, :D dan sekarang ane mau jelasin tentang pattern state ini, pattern state adalah sebuah pola (algoritma) dimana sebuah object bisa mengganti - mengganti2 akses nya ke object lain untuk menggali informasi, tergantung internal state atau input nya, semoga aja ente paham dengan penjelasan ane :D ... biar gak tambah pusing sekarang kita coba implementasi nya di Java, C# dan PHP

Java
package State;

public class MainClass {
public static void main(String[] args) {
Mahasiswa mahasiswa = new Mahasiswa(new Happy());
System.out.println("Mahasiswa saat senang raut muka nya akan "+mahasiswa.Wajah()+" dan suaranya akan "+mahasiswa.Suara());
mahasiswa.SetState(new Sedih());
System.out.println("Mahasiswa saat sedih raut muka nya akan "+mahasiswa.Wajah()+" dan suaranya akan "+mahasiswa.Suara());
}
}

interface EmosionalStatus{
public String Wajah();
public String Suara();
}

class Happy implements EmosionalStatus{
@Override
public String Suara() {
return "Naik Turun";
}
@Override
public String Wajah() {
return "Ceria";
}
}

class Sedih implements EmosionalStatus{
@Override
public String Suara() {
return "Pelan";
}
@Override
public String Wajah() {
return "Melas";
}
}

class Mahasiswa implements EmosionalStatus{
public Mahasiswa(EmosionalStatus status) {
this.status = status;
}

private EmosionalStatus status;

public void SetState(EmosionalStatus status){
this.status = status;
}

@Override
public String Wajah() {
return status.Wajah();
}

@Override
public String Suara() {
return status.Suara();
}
}


C#
using System;

namespace State
{
class Program
{
public static void Main(string[] args)
{
Mahasiswa mahasiswa = new Mahasiswa(new Happy());
Console.WriteLine("Mahasiswa saat senang raut muka nya akan "+mahasiswa.Wajah()+" dan suaranya akan "+mahasiswa.Suara());
mahasiswa.SetStatus(new Sedih());
Console.WriteLine("Mahasiswa saat sedih raut muka nya akan "+mahasiswa.Wajah()+" dan suaranya akan "+mahasiswa.Suara());

Console.ReadKey(true);
}
}

interface EmosionalStatus{
string Wajah();
string Suara();
}

class Happy : EmosionalStatus{

public string Suara() {
return "Naik Turun";
}

public string Wajah() {
return "Ceria";
}
}

class Sedih : EmosionalStatus{

public string Suara() {
return "Pelan";
}

public string Wajah() {
return "Melas";
}
}

class Mahasiswa : EmosionalStatus{
public Mahasiswa(EmosionalStatus status) {
this.status = status;
}

private EmosionalStatus status;

public void SetStatus(EmosionalStatus status){
this.status = status;
}

public string Wajah() {
return status.Wajah();
}

public string Suara() {
return status.Suara();
}
}
}


PHP
<?php

interface EmosionalStatus{
function Wajah();
function Suara();
}

class Happy implements EmosionalStatus{

function Suara() {
return "Naik Turun";
}

function Wajah() {
return "Ceria";
}
}

class Sedih implements EmosionalStatus{

function Suara() {
return "Pelan";
}

function Wajah() {
return "Melas";
}
}

class Mahasiswa implements EmosionalStatus{
function __construct($status) {
$this->status = $status;
}

private $status;

function SetStatus($status){
$this->status = $status;
}

function Wajah() {
return $this->status->Wajah();
}

function Suara() {
return $this->status->Suara();
}
}

$mahasiswa = new Mahasiswa(new Happy());
echo("Mahasiswa saat senang raut muka nya akan ".$mahasiswa->Wajah()." dan suaranya akan ".$mahasiswa->Suara()."< br />");
$mahasiswa->SetStatus(new Sedih());
echo("Mahasiswa saat sedih raut muka nya akan ".$mahasiswa->Wajah()." dan suaranya akan ".$mahasiswa->Suara()."< br />");

?>


Kalo ente lihat pada contoh pattern state di Java, C#, C++ dan PHP yang ane tulis diatas... ada sebuah interface namanya EmosionalStatus yang mempunyai 2 method kosong, yang akan di implementasikan jika sudah diturunkan pada sebuah class, interface EmotionalStatus diimplementasikan pada 2 class yaitu Happy dan Sedih. kemudian ada sebuah class namanya Mahasiswa yang juga sama2 implementasi dari interface EmosionalStatus tetapi class ini mempunyai field bertipe interface emosionalStatus tadi dan untuk menginisialisasinya dikirim lewat constructor dan satu function namanya SetStatus... 
sekarang kita pindah ke main program, kita membuat sebuah object instance dari class mahasiswa dan mengisi constructor nya dengan object instance dari class Happy, setelah itu object instance dari class mahasiswa mengakses function wajah() dan suara(), dan menghasilkan isi sebuah function dari class Happy. kemudian object instance mahasiswa mengakses method SetStatus dan mengisi parameternya dengan object instance class Sedih, lalu kembali mengakses function wajah() dan function suara() dan hasilnya adalah isi dari function class Sedih... itu lah cara kerja pattern ini, memungkinkan sebuah object merubah akses nya ke object lain untuk menggali informasi :D ... paham kan ?? gampang kan ?? hehehee oke... kali ini cukup sampai disini dulu ya ? kita lanjutkan pembahasan selanjutnya tentang desain pattern dan penerapannya di Java, C# dan PHP pada postingan selanjutnya :)

Rabu, 03 April 2013

Pattern Command di Java, C# dan PHP

Postingan kali ini kembali ane menulis tentang Desain pattern, kali ini giliran pattern command yang ane kasi contoh program nya tentunya masi menggunakan Java, C# dan PHP... ini tulisan ke 5 dihari ini... sebenarnya si ane udah siapin semua contoh program dari pattern - pattern menurut versi gang of four, tapi ya menunggu waktunya aja untuk di upload di blog ini, pengen cepet selesai juga si, sebenarnya ini bukan tuntutan dari pak dosen, pak dosen hanya ngasi tugas rangkuman tiap materi yang dibahas dikelas, istilah jadul nya PR Rangkuman gt :D ...
tapi berhubung ane pengen cepet gak ada tanggungan mangkanya ane sediain 23 pattern  diwaktu yang relativ singkat ini :D Alhamdulillah ane bisa selesaikan semua dan memahaminya... oke, sebelumnya ane kasi penjelasan tentang pattern command ini sebelum ane kasi contoh programya pake Java, C# dan PHP.. pattern command berguna ketika sebuah object digunakan untuk mengakses object lainnya selain itu juga dapat merangkum informasi object yang diakses oleh object ini. bingung ?? :D oke kita langsung ke penulisan program nya yak ?

Java
package Command;

public class MainClass {
public static void main(String[] args) {
Sarapan sarapan = new Sarapan();
CommandSarapan cmd_sarapan = new CommandSarapan(sarapan);
Controller eksekusi = new Controller(cmd_sarapan);
eksekusi.Invoke();

System.out.println("-------------------");
MakanMalam mkn_mlm = new MakanMalam();
CommandMakanMalam cmd_dinner = new CommandMakanMalam(mkn_mlm);
eksekusi = new Controller(cmd_dinner);
eksekusi.Invoke();
}
}

interface Command{
public void Execute();
}

class Sarapan{
public void PrintSarapan(){
System.out.println("Ini dari class Sarapan");
}
}

class MakanMalam {
public void PrintMakanMalam(){
System.out.println("Ini dari class Makan Malam");
}
}

class CommandSarapan implements Command{
private Sarapan sarapan = null;
public CommandSarapan(Sarapan sarapan) {
this.sarapan = sarapan;
}
@Override
public void Execute() {
sarapan.PrintSarapan();
}
}

class CommandMakanMalam implements Command{
private MakanMalam mkn_mlm = null;
public CommandMakanMalam(MakanMalam mkn_mlm) {
this.mkn_mlm = mkn_mlm;
}
@Override
public void Execute() {
mkn_mlm.PrintMakanMalam();
}
}

class Controller{
private Command cmd;
public Controller(Command cmd) {
this.cmd = cmd;
}
public void Invoke(){
cmd.Execute();
}
}

C#
using System;

namespace Command
{
class Program
{
public static void Main(string[] args)
{
Sarapan sarapan = new Sarapan();
CommandSarapan cmd_sarapan = new CommandSarapan(sarapan);
Controller eksekusi = new Controller(cmd_sarapan);
eksekusi.Invoke();

Console.WriteLine("-------------------");
MakanMalam mkn_mlm = new MakanMalam();
CommandMakanMalam cmd_dinner = new CommandMakanMalam(mkn_mlm);
eksekusi = new Controller(cmd_dinner);
eksekusi.Invoke();

Console.ReadKey(true);
}
}

interface Command{
void Execute();
}

class Sarapan{
public void PrintSarapan(){
Console.WriteLine("Ini dari class Sarapan");
}
}

class MakanMalam {
public void PrintMakanMalam(){
Console.WriteLine("Ini dari class Makan Malam");
}
}

class CommandSarapan : Command{
private Sarapan sarapan = null;
public CommandSarapan(Sarapan sarapan) {
this.sarapan = sarapan;
}

public void Execute() {
sarapan.PrintSarapan();
}
}

class CommandMakanMalam : Command{
private MakanMalam mkn_mlm = null;
public CommandMakanMalam(MakanMalam mkn_mlm) {
this.mkn_mlm = mkn_mlm;
}

public void Execute() {
mkn_mlm.PrintMakanMalam();
}
}

class Controller{
private Command cmd;
public Controller(Command cmd) {
this.cmd = cmd;
}
public void Invoke(){
cmd.Execute();
}
}
}

PHP
<?php

interface Command{
function Execute();
}

class Sarapan{
function PrintSarapan(){
echo("Ini dari class Sarapan< br />");
}
}

class MakanMalam {
function PrintMakanMalam(){
echo("Ini dari class Makan Malam< br />");
}
}

class CommandSarapan implements Command{
private $sarapan = null;
function __construct($sarapan) {
$this->sarapan = $sarapan;
}

function Execute() {
$this->sarapan->PrintSarapan();
}
}

class CommandMakanMalam implements Command{
private $mkn_mlm = null;
function __construct($mkn_mlm) {
$this->mkn_mlm = $mkn_mlm;
}

function Execute() {
$this->mkn_mlm->PrintMakanMalam();
}
}

class Controller{
private $cmd;
function __construct($cmd) {
$this->cmd = $cmd;
}
function Invoke(){
$this->cmd->Execute();
}
}

$sarapan = new Sarapan();
$cmd_sarapan = new CommandSarapan($sarapan);
$eksekusi = new Controller($cmd_sarapan);
$eksekusi->Invoke();

echo("-------------------< br />");
$mkn_mlm = new MakanMalam();
$cmd_dinner = new CommandMakanMalam($mkn_mlm);
$eksekusi = new Controller($cmd_dinner);
$eksekusi->Invoke();
?>
coba ente perhatikan program diatas, ada sebuah interface command yang mempuyai function execute, sebenarnya kalo pada contoh yang ada diblog lain mungkin nama nya bukan execute tapi invoke karena ini ane bedakan :D biar agak berbeda, yang penting algoritma nya sama... heheheejadi nanti interface ini diturunkan pada sebuah class dimana class turunan ini menjadi wrapper (wadah) class yang lain. yang dikirim melalui constructor class nya , misal pada class CommandSarapan, disitu ane siapin variabel dari class sarapan yang nantinya akan di isi dengan object instance sarapan yang inisialisasinya ada diluar class CommandSarapan, dan dikirim melalui Constructor :D, kemudian pada implementasi function execute kita panggil function milik class sarapan yang akan dieksekusi.. begitu... 
disitu juga ada Class Controller, kalo yang ini ini sebagai wrapper class turunan dari class command seperti class Command sarapan. dan pada class contoller ini ada satu function Invoke yang digunakan untuk mengeksekusi function yang diperlukan...... kalo contoh diatas begini ketika ane mengakses function invoke() maka function ini akan mengakses function execute() milik class Command sarapan. kemudian akan mengakses lagi function PrintSarapan() milik class sarapan... jadi saling berkesinambungan yang dilapisi dengan banyak pembungkus :D ... paham ? kalo gak paham monggo dianalisa kembali, atau tanyakan kepada ane melalui facebook... hehehee untuk postingan kali ini cukup dulu ya ? selanjutnya masi tentang design pattern yang lain yang ane bahas juga pake Java, C# dan PHP... Happy Cooding :)