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 ...

Sabtu, 13 April 2013

Contoh Aplikasi Blog Sederhana PHP

contoh aplikasi web - blog php
Setelah memberikan beberapa contoh aplikasi C#, Java dan PHP dan juga tutorial2 nya, kali ini giliran PHP yang kembali ane kasi Contoh Aplikasi nya, kali ini adalah Contoh Aplikasi blog sederhana dengan PHP, Aplikasi yang sangat2 sederhana, tetapi hampir sedikit seperti Blogspot dan wordpress. Intinya ada postingan, kategori, pagination.. kan seperti itu to blog ? :D.. Contoh Aplikasi ini tidak menggunakan Framework PHP tetapi menggunakan PHP murni... bagi anda yang baru belajar PHP lebih baik anda pelajari dulu postingan - postingan saya sebelumnya yang membahas PHP dasar dan PHP OOP untuk membantu anda memahami Aplikasi Blog dengan PHP ini...
bagi anda yang sudah mempelajari PHP, dalam aplikasi ini saya tidak menggunakan OOP, jadi masi banyak kode program yang ditulis berulang kali, sebenar nya tidak efisien tapi postingan kali ini sebenarnya saya tulis buat temen saya yang sedang mempelajari Web programming fundamental, yang tugas besar nya adalah membuat aplikasi blog sederhana yang tentunya menggunakan PHP, tidak dituntut menggunakan OOP apalagi Framework tetapi hanya sekedar paham dengan cara membuat aplikasi PHP. :D
Oia, nama nya aplikasi blog tentunya tidak hanya aplikasi depan saja / aplikasi yang dikunjungi oleh pengguna internet, tetapi harusnya disertakan CMS (Content Management System) nya juga.. hemm tapi kali ini ane kasi dulu contoh aplikasi index nya dulu saja ya ? :D untuk aplikasi web admin / CMS nya Insya Alloh pada postingan - postingan selanjutnya.. di tunggu saja ya gan.. gak lama kok, mungkin 2 tahun... wkwkwkwkw...
Tentang fitur dari aplikasi ini adalah seperti yang ane jelaskan tadi yaitu :
  • List posting menurut waktu upload
  • List posting menurut kategori
  • List posting menurut pencarian
  • Full posting page
  • Pagination
Sebenarnya pengen melengkapi dengan beberapa fitur, seperti ajax.. tapi mungkin akan ane bahas pada postingan - postingan selanjutnya.. dan ane akan jelasin kekurangan dan kelebihan dari ajax.. tidak semua aplikasi web baik untuk dilengkapi dengan ajax... tapi ada sebagian yang harus tidak menggunakan ajax... :D
Oke gan, untuk template yang ane gunakan ini ane download dari templatemo.com , disana template nya bagus - bagus walaupun tampilannya sederhana.. bisa ente cek nanti lah...
Oke dah gan, untuk yang mau download aplikasi blog sederhana dengan PHP ente bisa download Disini dan bagi ente yang pengen tau screen shoot aplikasi nya, seperti ini

contoh aplikasi web blog php

Download file nya Disini gan (minta share nya ya gan) :D ... semoga bermanfaat, jangan lupa di like kalo gak sempet comment :)

Kamis, 11 April 2013

Pattern Mediator di Java, C# dan PHP

Setelah update tentang pattern observer, langsung ane terusin update juga design pattern yang ane bahas terakhir yaitu tentang pattern mediator dan implementasinya di Java, C# dan PHP (mengejar target gan) :D ... pattern mediator ini sama seperti observer yang berkategori design pattern behaviour.  Fungsi dari pattern ini adalah memungkinkan interaksi antara object sehingga ketika object berinteraksi dengan object lainnya sama2 dapat memberi informasi baru ke dalam object tersebut ... contoh kasus nya seperti aplikasi chating, jika ada 2 client lagi chatingan maka ke dua nya sangat mungkin untuk bertukar informasi saat chating ??
ya kan ?? :D kalo gak bisa bertukar informasi ya berarti bukan chating...  wkwkwkwkwkwk... dan 2 client tadi kita ibaratkan seperti object yang saling berinteraksi... biar lebih paham akan ane coba implementasinya di Java, C# dan PHP...

Java
package Mediator;

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

Friend1 friend1 = new Friend1(mediator);
Friend2 friend2 = new Friend2(mediator);

mediator.SetFriend1(friend1);
mediator.SetFriend2(friend2);

friend1.Send("I love U");
friend2.Send("I Love U too");
}
}

abstract class Mediator{
public abstract void Send(Friend friend,String message);
}

class MediatorConcrete extends Mediator{
private Friend1 friend1;
private Friend2 friend2;

public void SetFriend1(Friend1 friend1){
this.friend1 = friend1;
}

public void SetFriend2(Friend2 friend2){
this.friend2 = friend2;
}

@Override
public void Send(Friend friend, String message) {
if(friend == friend1){
friend2.Notify(message);
}else{
friend1.Notify(message);
}
}
}

abstract class Friend{
public Friend(Mediator mediator) {
this.mediator = mediator;
}
protected Mediator mediator;
}

class Friend1 extends Friend{
public Friend1(Mediator mediator) {
super(mediator);
}

public void Send(String message){
mediator.Send(this, message);
}

public void Notify(String message){
System.out.println("Friend 1 menerima pesan "+message);
}
}

class Friend2 extends Friend{
public Friend2(Mediator mediator) {
super(mediator);
}

public void Send(String messages){
mediator.Send(this, messages);
}

public void Notify(String message){
System.out.println("Friend 2 menerima pesan "+message);
}
}


C#
using System;

namespace Mediator
{
class Program
{
public static void Main(string[] args)
{
MediatorConcrete mediator = new MediatorConcrete();

Friend1 friend1 = new Friend1(mediator);
Friend2 friend2 = new Friend2(mediator);

mediator.Friend1 = friend1;
mediator.Friend2 = friend2;

friend1.Send("I love U");
friend2.Send("I Love U too");

Console.ReadKey(true);
}
}

abstract class Mediator{
public abstract void Send(Friend friend,string message);
}

class MediatorConcrete : Mediator{
private Friend1 friend1;
private Friend2 friend2;

public Friend1 Friend1 {
get { return friend1; }
set { friend1 = value; }
}

public Friend2 Friend2 {
get { return friend2; }
set { friend2 = value; }
}

public override void Send(Friend friend, string message) {
if(friend == friend1){
friend2.Notify(message);
}else{
friend1.Notify(message);
}
}
}

abstract class Friend{
public Friend(Mediator mediator) {
this.mediator = mediator;
}
protected Mediator mediator;
}

class Friend1 : Friend{
public Friend1(Mediator mediator):base(mediator) {
}

public void Send(string message){
mediator.Send(this, message);
}

public void Notify(string message){
Console.WriteLine("Friend 1 menerima pesan "+message);
}
}

class Friend2 : Friend{
public Friend2(Mediator mediator):base(mediator){
}

public void Send(string messages){
mediator.Send(this, messages);
}

public void Notify(string message){
Console.WriteLine("Friend 2 menerima pesan "+message);
}
}
}


PHP
<?php
abstract class Mediator{
public abstract function Send($friend,$message);
}

class MediatorConcrete extends Mediator{
private $friend1;
private $friend2;

function SetFriend1($friend1){
$this->friend1 = $friend1;
}

function SetFriend2($friend2){
$this->friend2 = $friend2;
}

function Send($friend,$message) {
if($friend == $this->friend1){
$this->friend2->Notify($message);
}else{
$this->friend1->Notify($message);
}
}
}

abstract class Friend{
function __construct($mediator) {
$this->mediator = $mediator;
}
protected $mediator;
}

class Friend1 extends Friend{
function __construct($mediator) {
parent::__construct($mediator);
}

function Send($message){
$this->mediator->Send($this, $message);
}

function Notify($message){
echo("Friend 1 menerima pesan ".$message."< br />");
}
}

class Friend2 extends Friend{
function __construct($mediator) {
parent::__construct($mediator);
}

function Send($messages){
$this->mediator->Send($this,$messages);
}

function Notify($message){
echo("Friend 2 menerima pesan ".$message."< br />");
}
}

$mediator = new MediatorConcrete();

$friend1 = new Friend1($mediator);
$friend2 = new Friend2($mediator);

$mediator->SetFriend1($friend1);
$mediator->SetFriend2($friend2);

$friend1->Send("I love U");
$friend2->Send("I Love U too");
?>

Biar lebih paham lagi, coba ente analisa lagi program diatas, dan tentunya seperti itulah interaksi antar object yang memungkinkan untuk saling memberikan informasi dengan menggunakan mediator tentunya :D hehee.. sekian dulu ya ? dengan berakhirnya postingan ini, berakhir juga pembahasan ane tentang design pattern dan penerapannya di Java, C# dan PHP... semoga bermanfaat bagi ane, ente dan pengunjung blog ini :) ... happy cooding

Pattern Observer di Java, C# dan PHP

Setelah jumatan ada kuliah... waktu nya tidur siang si sebenarna.. tapi karena memang sudah kewajiban untuk mengikuti mata kuliah ke PGRI-an..  ya diikuti ajalah, skalian ane juga mau update lagi tentag design pattern yang rencana nya ane akhiri semua pembahasan design pattern hari ini.. semoga aja bisa... hehehee.. oke kali ini tentang pattern observer yang akan ane bahas dan penerapannya di Java,C# dan PHP .. pattern ini termasuk dalam kategori behaviour  yang menangani kelakuan sebuah program... dan juga termasuk sering dipakai, dan juga sering kita temui...
Contoh real nya yaitu seperti notifikasi di facebook... konsep kerja pattern ini adalah melaporkan secara otomatis ke server jika ada sebuah data/proses baru dan si server melaporkan ke semua client yang telah didaftarkan sebelumnya... sekarang ane akan mencoba untuk mengimplementasikannya di Java, C# dan PHP

Java
package ObServer;

import java.util.*;

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

subject.Add(new User(subject, "Rizal"));
subject.Add(new User(subject, "Afani"));

subject.SetSubjectStatus("Selamat Pagi");
subject.Notivy();
}
}

interface Subject{
public void Add(ObServer observer);
public void Remove(ObServer observer);
public void Notivy();
}

interface ObServer{
public void DoUpdate();
}

class SubjectConcrete implements Subject{
private List<ObServer> list_observer = new ArrayList<ObServer>();
private String SubjectStatus;
public void SetSubjectStatus(String status){
this.SubjectStatus = status;
}
public String GetSubjectStatus(){
return this.SubjectStatus;
}
@Override
public void Add(ObServer observer) {
list_observer.add(observer);
}

@Override
public void Remove(ObServer observer) {
list_observer.remove(observer);
}

@Override
public void Notivy() {
for(ObServer list : list_observer){
list.DoUpdate();
}
}
}

class User implements ObServer{
private String name;
private SubjectConcrete subject;
public User(SubjectConcrete subject,String name) {
this.subject = subject;
this.name = name;
}

public void SetName(String name){
this.name = name;
}

public String GetName(){
return this.name;
}

public void SetSubject(SubjectConcrete subject){
this.subject = subject;
}

public SubjectConcrete GetSubject(){
return this.subject;
}

@Override
public void DoUpdate() {
System.out.println(this.name+" membaca status Baru '"+this.subject.GetSubjectStatus()+"'");
}
}


C#
using System;
using System.Collections.Generic;

namespace Observer
{
class Program
{
public static void Main(string[] args)
{
SubjectConcrete subject = new SubjectConcrete();

subject.Add(new User(subject, "Rizal"));
subject.Add(new User(subject, "Afani"));

subject.SetSubjectStatus("Selamat Pagi");
subject.Notivy();

Console.ReadKey(true);
}
}

interface Subject{
void Add(ObServer observer);
void Remove(ObServer observer);
void Notivy();
}

interface ObServer{
void DoUpdate();
}

class SubjectConcrete : Subject{
private List<ObServer> list_observer = new List<ObServer>();
private string SubjectStatus;
public void SetSubjectStatus(string status){
this.SubjectStatus = status;
}
public string GetSubjectStatus(){
return this.SubjectStatus;
}

public void Add(ObServer observer) {
list_observer.Add(observer);
}


public void Remove(ObServer observer) {
list_observer.Remove(observer);
}


public void Notivy() {
foreach(ObServer list in list_observer){
list.DoUpdate();
}
}
}

class User : ObServer{
private string name;
private SubjectConcrete subject;
public User(SubjectConcrete subject,string name) {
this.subject = subject;
this.name = name;
}

public void SetName(string name){
this.name = name;
}

public string GetName(){
return this.name;
}

public void SetSubject(SubjectConcrete subject){
this.subject = subject;
}

public SubjectConcrete GetSubject(){
return this.subject;
}


public void DoUpdate() {
Console.WriteLine(this.name+" membaca status Baru '"+this.subject.GetSubjectStatus()+"'");
}
}
}


PHP
<?php
interface Subject{
function Add($index,$observer);
function Remove($index);
function Notivy();
}

interface ObServer{
function DoUpdate();
}

class SubjectConcrete implements Subject{
private $list_observer = Array();
private $SubjectStatus;
function SetSubjectStatus($status){
$this->SubjectStatus = $status;
}
function GetSubjectStatus(){
return $this->SubjectStatus;
}

function Add($index,$observer) {
$this->list_observer[$index] = $observer;
}

function Remove($index) {
unset($this->list_observer[$index]);
}

function Notivy() {
foreach($this->list_observer as $list){
$list->DoUpdate();
}
}
}

class User implements ObServer{
private $name;
private $subject;
function __construct($subject,$name) {
$this->subject = $subject;
$this->name = $name;
}

function SetName($name){
$this->name = $name;
}

function GetName(){
return $this->name;
}

function SetSubject($subject){
$this->subject = $subject;
}

function GetSubject(){
return $this->subject;
}

function DoUpdate() {
echo($this->name." membaca status Baru '".$this->subject->GetSubjectStatus()."'< br />");
}
}

$subject = new SubjectConcrete();

$subject->Add('Rizal',new User($subject, "Rizal"));
$subject->Add('Afani',new User($subject, "Afani"));

$subject->SetSubjectStatus("Selamat Pagi");
$subject->Notivy();
?>

Pattern Bridge di Java, C# dan PHP

hari yang tidak terlalu cerah tapi juga tidak terlalu mendung, disambut dengan menulis design pattern di blog ini agar cepet terlunasi target ane selama 2 minggu ini :D... kali ini giliran pattern bridge yang ane bahas dan ane terapin di Java, C# dan PHP... secara bahasa arti dari bridge ini adalah penghubung/jembatan... fungsinya adalah untuk memisahkan antara abstraksi dan implementasinya... disini ane akan coba implementassinya menggunakan sebuah kartu pengenal (kartu KTP dan kartu mahasiswa) yang pembentukan object instance nya dipisahkan dengan interface nya...
Beginilah implementasinya di Java, C# dan PHP

Java
package Bridge;

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

run.SetBiodata(new KTP("Ahmad Rizal Afani","Kertosari","Jomblo"));
run.DisplayText();
System.out.println("--------------------------------------------------------");
run.SetBiodata(new KTM("1110100601", "Ahmad Rizal Afani", "Jln. Ikan Hiu 30 Kertosari, Banyuwangi"));
run.DisplayText();
}
}

interface Biodata{
public void DisplayText();
}

abstract class Controler{
protected Biodata biodata;
public void SetBiodata(Biodata biodata){
this.biodata = biodata;
}
public void DisplayText(){
biodata.DisplayText();
}
}

class RunController extends Controler{}

class KTP implements Biodata{
public KTP(String name,String alamat,String status_hubungan) {
this.name = name;
this.alamat = alamat;
this.status_hubungan = status_hubungan;
}

private String name,alamat,status_hubungan;

@Override
public void DisplayText() {
System.out.println("Class KTP implementasi dari interface Biodata\n");
System.out.println("Nama \t: "+name);
System.out.println("Alamat \t: "+alamat);
System.out.println("Status \t: "+status_hubungan);
System.out.println();
}
}

class KTM implements Biodata{
public KTM(String nim,String nama,String alamat) {
this.nim = nim;
this.nama = nama;
this.alamat = alamat;
}

private String nim,nama,alamat;

@Override
public void DisplayText() {
System.out.println("Class KTM implementasi dari interface Biodata\n\n");
System.out.println("No. Induk \t: "+nim);
System.out.println("Nama \t\t: "+nama);
System.out.println("Alamat \t\t: "+alamat);
System.out.println();
}
}


C#
/*
* Created by SharpDevelop.
* User: FaiQ
* Date: 31/03/2013
* Time: 17:32
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;

namespace Bridge
{
class Program
{
public static void Main(string[] args)
{
RunController run = new RunController();

run.SetBiodata(new KTP("Ahmad Rizal Afani","Kertosari","Jomblo"));
run.DisplayText();
Console.WriteLine("--------------------------------------------------------");
run.SetBiodata(new KTM("1110100601", "Ahmad Rizal Afani", "Jln. Ikan Hiu 30 Kertosari, Banyuwangi"));
run.DisplayText();

Console.ReadKey(true);
}
}

interface Biodata{
void DisplayText();
}

abstract class Controler{
protected Biodata biodata;
public void SetBiodata(Biodata biodata){
this.biodata = biodata;
}
public void DisplayText(){
biodata.DisplayText();
}
}

class RunController : Controler{}

class KTP : Biodata{
public KTP(string name,string alamat,string status_hubungan) {
this.name = name;
this.alamat = alamat;
this.status_hubungan = status_hubungan;
}

private string name,alamat,status_hubungan;

public void DisplayText() {
Console.WriteLine("Class KTP implementasi dari interface Biodata\n");
Console.WriteLine("Nama \t: "+name);
Console.WriteLine("Alamat \t: "+alamat);
Console.WriteLine("Status \t: "+status_hubungan);
Console.WriteLine();
}
}

class KTM : Biodata{
public KTM(string nim,string nama,string alamat) {
this.nim = nim;
this.nama = nama;
this.alamat = alamat;
}

private string nim,nama,alamat;

public void DisplayText() {
Console.WriteLine("Class KTM implementasi dari interface Biodata\n\n");
Console.WriteLine("No. Induk \t: "+nim);
Console.WriteLine("Nama \t\t: "+nama);
Console.WriteLine("Alamat \t\t: "+alamat);
Console.WriteLine();
}
}
}


PHP
<?php
interface Biodata{
function DisplayText();
}

abstract class Controler{
protected $biodata;
function SetBiodata($biodata){
$this->biodata = $biodata;
}
function DisplayText(){
$this->biodata->DisplayText();
}
}

class RunController extends Controler{}

class KTP implements Biodata{
function __construct($name,$alamat,$status_hubungan) {
$this->name = $name;
$this->alamat = $alamat;
$this->status_hubungan = $status_hubungan;
}

private $name,$alamat,$status_hubungan;


function DisplayText() {
echo("<b>Class KTP implementasi dari interface Biodata</b>< br />< br />");
echo("Nama \t: ".$this->name.'< br />');
echo("Alamat \t: ".$this->alamat.'< br />');
echo("Status \t: ".$this->status_hubungan.'< br />');
}
}

class KTM implements Biodata{
function __construct($nim,$nama,$alamat) {
$this->nim = $nim;
$this->nama = $nama;
$this->alamat = $alamat;
}

private $nim,$nama,$alamat;


function DisplayText() {
echo("<b>Class KTM implementasi dari interface Biodata</b><br /><br />");
echo("No-> Induk \t: ".$this->nim.'< br />');
echo("Nama \t\t: ".$this->nama.'< br />');
echo("Alamat \t\t: ".$this->alamat.'< br />');
}
}

$run = new RunController();

$run->SetBiodata(new KTP("Ahmad Rizal Afani","Kertosari","Jomblo"));
$run->DisplayText();
echo("--------------------------------------------------------< br />");
$run->SetBiodata(new KTM("1110100601", "Ahmad Rizal Afani", "Jln-> Ikan Hiu 30 Kertosari, Banyuwangi"));
$run->DisplayText();
?>
pemisahan abstraksi dan implementasinya bisa ente lihat waktu class runController diakses dan kemudian memanggil method yang diwariskan dari parrent class nya... kemudian juga bisa ente lihat waktu method setBiodata diakses dan di isikan dengan object instance class implementasi dari interface biodata :) .. bingung ?? kalo bingung coba ente analisa lagi... ulangi lagi... sampek akhirnya ente paham :D ... sekian dulu untuk postingan kali ini, semoga bermanfaat..

Pattern Chain Of Responsibility di Java, C# dan PHP

Design pattern masi menjadi bahasan di postingan kali ini, sekarang giliran pattern Chain of responsibility untuk ane posting dan contoh implementasinya di Java, C# dan PHP... sebenarnya pattern ini rencananya ane posting tadi pagi... berhubung tadi gak sempet jadi baru ane posting sekarang.. hari sudah sore dan ane pun belum pulang dari kampus... temen2 yang lain juga udah pada pulang, duduk ditemani dengan adik angkatan yang gak ane kenal :D ...
ya gapapalah... hidup itu butuh perjuangan dan pengorbanan.... chain of responsibility arti secara bahasa adalah rantai tanggung jawab.. sesuai namanya, pattern ini mempunyai konsep kerja seperti rantai yang mengolah beberapa proses yang tersambung... jadi pattern ini memungkinkan untuk membuat hubungan terikat antar object... object - object itu berisi sebuah proses, jika sebuah proses gagal menangani permasalahan maka akan dilanjutkan ke proses selanjutnya yang terikat dengan proses tersebut... begitu seterusnya... jika sebuah object berhasil menangani permasalahan maka tidak perlu melanjutkan ke proses selanjutnya... begitulah konsep kerja dari pattern ini yang berkategori design pattern behaviour..
sekarang saatnya ane implementasikan ke dalam program tentunya dengan Java, C# dan PHP :D

Java
package ChainOfResponsibility;

public class MainClass {
public static void main(String[] args) {
PlanetHandler planet = CiptakanSambunganRantai();
planet.SambungRantai(Planet.Jupiter);
planet.SambungRantai(Planet.Mars);
}

private static PlanetHandler CiptakanSambunganRantai(){
PlanetHandler merkurius = new MerkuriusHandler();
PlanetHandler bumi = new BumiHandler();
PlanetHandler mars = new MarsHandler();

merkurius.SetSuccessor(bumi);
bumi.SetSuccessor(mars);

return merkurius;
}
}

abstract class PlanetHandler{
PlanetHandler successor;
public void SetSuccessor(PlanetHandler successor){
this.successor = successor;
}

public abstract void SambungRantai(Planet planet);
}

enum Planet{
Merkurius,Venus,Bumi,Mars,Jupiter,Uranus,Neptunus,Pluto;
}

class MerkuriusHandler extends PlanetHandler{
@Override
public void SambungRantai(Planet planet) {
if(planet == Planet.Merkurius){
System.out.println("Merkurius handler menghandle "+planet);
System.out.println("Merkurius adalah planet terdekat dengan matahari");
}else{
System.out.println("Merkurius handler tidak menghandle "+planet);
if(successor != null){
successor.SambungRantai(planet);
}
}
}
}

class BumiHandler extends PlanetHandler{
@Override
public void SambungRantai(Planet planet) {
if(planet == Planet.Bumi){
System.out.println("Bumi handler menghandle "+planet);
System.out.println("Bumi adalah tempat tinggal manusia");
}else{
System.out.println("Bumi handler tidak menghandle "+planet);
if(successor != null){
successor.SambungRantai(planet);
}
}
}
}

class MarsHandler extends PlanetHandler{
@Override
public void SambungRantai(Planet planet) {
if(planet == Planet.Mars){
System.out.println("Mars handler menghandle "+planet);
System.out.println("Mars adalah tempat tinggal alien");
}else{
System.out.println("Mars handler tidak menghandle "+planet);
if(successor != null){
successor.SambungRantai(planet);
}
}
}
}


C#
using System;

namespace Chain
{
class Program
{
public static void Main(string[] args)
{
PlanetHandler planet = CiptakanSambunganRantai();
planet.SambungRantai(Planet_.Planet.Jupiter);
planet.SambungRantai(Planet_.Planet.Mars);
Console.ReadKey(true);
}

private static PlanetHandler CiptakanSambunganRantai(){
PlanetHandler merkurius = new MerkuriusHandler();
PlanetHandler bumi = new BumiHandler();
PlanetHandler mars = new MarsHandler();

merkurius.SetSuccessor(bumi);
bumi.SetSuccessor(mars);

return merkurius;
}
}

abstract class PlanetHandler{
protected PlanetHandler successor;
public void SetSuccessor(PlanetHandler successor){
this.successor = successor;
}

public abstract void SambungRantai(Planet_.Planet planet);
}

class Planet_{
public enum Planet{
Merkurius,Venus,Bumi,Mars,Jupiter,Uranus,Neptunus,Pluto
}
}

class MerkuriusHandler : PlanetHandler{

public override void SambungRantai(Planet_.Planet planet) {
if(planet == Planet_.Planet.Merkurius){
Console.WriteLine("Merkurius handler menghandle "+planet);
Console.WriteLine("Merkurius adalah planet terdekat dengan matahari");
}else{
Console.WriteLine("Merkurius handler tidak menghandle "+planet);
if(successor != null){
successor.SambungRantai(planet);
}
}
}
}

class BumiHandler : PlanetHandler{

public override void SambungRantai(Planet_.Planet planet) {
if(planet == Planet_.Planet.Bumi){
Console.WriteLine("Bumi handler menghandle "+planet);
Console.WriteLine("Bumi adalah tempat tinggal manusia");
}else{
Console.WriteLine("Bumi handler tidak menghandle "+planet);
if(successor != null){
successor.SambungRantai(planet);
}
}
}
}

class MarsHandler : PlanetHandler{

public override void SambungRantai(Planet_.Planet planet) {
if(planet == Planet_.Planet.Mars){
Console.WriteLine("Mars handler menghandle "+planet);
Console.WriteLine("Mars adalah tempat tinggal alien");
}else{
Console.WriteLine("Mars handler tidak menghandle "+planet);
if(successor != null){
successor.SambungRantai(planet);
}
}
}
}
}


PHP
<?php
class EnumPlanet{
static $planet = array(
'Merkurius' => 'Merkurius',
'Venus' => 'Venus',
'Bumi' => 'Bumi',
'Mars' => 'Mars',
'Jupiter' => 'Jupiter',
'Uranus' => 'Uranus',
'Neptunus' => 'Neptunus',
'Pluto' => 'Pluto'
);
}

abstract class PlanetHandler{
protected $successor;
function SetSuccessor($successor){
$this->successor = $successor;
}
abstract function SambungRantai($planet);
}

class MerkuriusHandler extends PlanetHandler{
function SambungRantai($planet) {
if($planet == EnumPlanet::$planet['Merkurius']){
echo("Merkurius handler menghandle ".$planet.'< br />');
echo("Merkurius adalah planet terdekat dengan matahari< br />");
}else{
echo("Merkurius handler tidak menghandle ".$planet.'< br />');
if($this->successor != null){
$this->successor->SambungRantai($planet);
}
}
}
}

class BumiHandler extends PlanetHandler{
function SambungRantai($planet) {
if($planet == EnumPlanet::$planet['Bumi']){
echo("Bumi handler menghandle ".$planet.'<br />');
echo("Bumi adalah tempat tinggal manusia< br />");
}else{
echo("Bumi handler tidak menghandle ".$planet.'< br />');
if($this->successor != null){
$this->successor->SambungRantai($planet);
}
}
}
}

class MarsHandler extends PlanetHandler{
function SambungRantai($planet) {
if($planet == EnumPlanet::$planet['Mars']){
echo("Mars handler menghandle ".$planet.'< br />');
echo("Mars adalah tempat tinggal alien< br />");
}else{
echo("Mars handler tidak menghandle ".$planet.'< br />');
if($this->successor != null){
$this->successor->SambungRantai($planet);
}
}
}
}

function CiptakanSambunganRantai(){
$merkurius = new MerkuriusHandler();
$bumi = new BumiHandler();
$mars = new MarsHandler();

$merkurius->SetSuccessor($bumi);
$bumi->SetSuccessor($mars);

return $merkurius;
}

$planet = CiptakanSambunganRantai();
$planet->SambungRantai(EnumPlanet::$planet['Jupiter']);
$planet->SambungRantai(EnumPlanet::$planet['Mars']);
?>
Hemmb... beginilah ceritanya design pattern responsibility... :) saling berkesinambungan antar prosesnya, ente tentunya bisa analisa sendiri ya ?? soalnya ini sudah sore dan ane mau pulang :D... cukup dulu yak ?? semoga bermanfaat.. keep cooding :)

Rabu, 10 April 2013

Pattern Iterator di Java, C# dan PHP

Sudah lebih dari seminggu ane posting design pattern dan implementasinya di Java, C# dan PHP... ini pattern ke 5 terakhir yang ane eksekusi setelah tadi ane posting tentang flyweight kali ini tentang pattern iterator.. secara bahasa iterator ini gak ada artinya.. maksudnya dalam bahasa indonesia ya artinya iterator :D, dalam bahasa pemrograman maksud dari pattern iterator ini adalah algortima yang menyediakan cara untuk mengakses elemen dari suatu obyek berurutan tanpa memperlihatkan representasi yang mendasarinya. konsep kerjanya si sama seperti tabel, misal ane punya tabel produk, ada 2 field yaitu nama produk dan harganya..
kita ibaratkan tabel ini adalah object dan produk2 itu juga object.. jadi didalam sebuah object ada juga list object, tentunya saat kita ingin mengakses sebuah produk kita tidak perlu tau bagaimana bentuk asli atau urutan dari list produk, langsung saja kita ambil yang kita butuhkan.... biar tambah jelas coba kita langsung terapkan ke dalam Java, C# dan PHP

Java

package Iterator;

import java.util.ArrayList;
import java.util.Iterator;

public class MainClass {
public static void main(String[] args) {
Item item_1 = new Item("Hardisk", 500);
Item item_2 = new Item("Memory", 200);
Item item_3 = new Item("Processor", 400);

Menu menu = new Menu();
menu.AddItem(item_1);
menu.AddItem(item_2);
menu.AddItem(item_3);
System.out.println("Tampilkan menu");
Iterator<Item> iterator = menu.iterator();
while(iterator.hasNext()){
Item item = iterator.next();
System.out.println(item);
}

System.out.println("Hapus menu paling akhir");
iterator.remove();
System.out.println("Tampilkan menu");
iterator = menu.iterator();
while(iterator.hasNext()){
Item item = iterator.next();
System.out.println(item);
}
}
}

class Item{
public Item(String nama_barang,int harga_barang) {
this.nama_barang = nama_barang;
this.harga_barang = harga_barang;
}
private String nama_barang;
private float harga_barang;

public String toString(){
return this.nama_barang+" : "+this.harga_barang;
}
}

class Menu{
ArrayList<Item> list;
public Menu() {
list = new ArrayList<Item>();
}
public void AddItem(Item item){
list.add(item);
}
public Iterator<Item> iterator(){
return new MenuIterator();
}
class MenuIterator implements Iterator<Item>{
int current_index = 0;
@Override
public boolean hasNext() {
if(current_index >=list.size()){
return false;
}else{
return true;
}
}
@Override
public Item next() {
return list.get(current_index++);
}
@Override
public void remove() {
list.remove(--current_index);
}
}
}


C#
using System;
using System.Collections.Generic;

namespace Iterator_
{
class Program
{
public static void Main(string[] args)
{
Item item_1 = new Item("Hardisk",500);
Item item_2 = new Item("Memory",200);
Item item_3 = new Item("Processor",400);

Menu menu = new Menu();
menu.AddItem(item_1);
menu.AddItem(item_2);
menu.AddItem(item_3);

List<Item> list = menu.iterator();
Console.WriteLine("Tampilkan menu");
foreach(Item my_item in list){
Console.WriteLine(my_item.toString());
}

Console.WriteLine("Hapus menu paling akhir");
menu.RemoveItem();
Console.WriteLine("Tampilkan menu");
list = menu.iterator();
foreach(Item my_item in list){
Console.WriteLine(my_item.toString());
}
Console.ReadKey(true);
}
}

class Item{
public Item(string nama_barang,int harga_barang) {
this.nama_barang = nama_barang;
this.harga_barang = harga_barang;
}
private string nama_barang;
private float harga_barang;

public string toString(){
return this.nama_barang+" : "+this.harga_barang;
}
}

class Menu{
List<Item> list = new List<Item>();
public Menu() {
list = new List<Item>();
}
public void AddItem(Item item){
list.Add(item);
}
public void RemoveItem()
{
if(list.Count != 0){
list.RemoveAt((list.Count-1));
}
}

public List<Item> iterator(){
return this.list;
}
}
}


PHP
<?php
class Item{
function __construct($nama_barang,$harga_barang) {
$this->nama_barang = $nama_barang;
$this->harga_barang = $harga_barang;
}
private $nama_barang;
private $harga_barang;

function ToString(){
return $this->nama_barang." : ".$this->harga_barang.'< br />';
}
}

class Menu{
private $list = Array();
private $index = 0;
function AddItem($item){
$this->list[] = $item;
}

function RemoveItem(){
array_pop($this->list);
}

function GetSize(){
echo sizeof($this->list)-1;
}

function iterator(){
return $this->list;
}
}

$item_1 = new Item("Hardisk",500);
$item_2 = new Item("Memory",200);
$item_3 = new Item("Processor",400);

$menu = new Menu();
$menu->AddItem($item_1);
$menu->AddItem($item_2);
$menu->AddItem($item_3);

$list_menu = $menu->iterator();
echo("Tampilkan menu< br />");
foreach($list_menu as $list){
echo($list->ToString());
}

echo("Hapus menu paling akhir< br />");
$menu->RemoveItem();
echo("Tampilkan menu< br />");
$list_menu = $menu->iterator();
foreach($list_menu as $list){
echo($list->ToString());
}
?>
kalo ente perhatikan program diatas... pertama ane buat list produk nya kemudian ane tampilkan semua produk nya, setelah itu ane menghapus produk yang terakhir masuk.. tanpa harus mengakses list produk dari awal... begitu konsep kerja dari pattern iterator ini... paham ya ?? :D cukup dulu postingan kali ini... soalnya ane mau siap2 kuliah... nanti ane posting lagi insya Alloh kalo sempet masi tentang design pattern dan penerapannya di Java, C# dan PHP... semoga bermanfaat... keep cooding :)

Pattern Flyweight di Java, C# dan PHP

Pagi hari yang mendung :) tapi alhamdulillah masi sehat... masi tentang design pattern yang ane bahas, kali ini pattern Flyweight  yang kudu di action dan contoh nya di Java, C# dan PHP... kelas terbang... arti dari pattern ini... dan fungsinya seperti pattern lainnya, yaitu untuk penghematan memory... pattern ini hampir sama konsep kerjanya dengan factory method yaitu penggunaan object yang mirip dan juga memanfaatkan konsep singleton untuk penghematan memory... hanya saja pattern flyweight ini memnafaatkan list dlam mengakses factory object nya...
hemmb... ya.. kurang lebih begitulah konsepnya flyweight ini, pada contoh penerapannya ane akan melakukan sebuah operasi yang menggunakan konsep singleton dan factory yang object singleton akan mengakses operasi method yang berbeda. biar lebih jelas dan gak bingung langsung aje ke penerapan / implementasi nya di Java, C# dan PHP...


package FlyWeight;

import java.util.HashMap;
import java.util.Map;

public class MainClass {
public static void main(String[] args) {
FlyWeightFactory factory = FlyWeightFactory.GetInstance();

for(byte i = 0; i<5; i++){
FlyWeight penjumlahan = factory.GetFlyWeight("penjumlahan");
penjumlahan.DoIt(i, i);

FlyWeight perkalian = factory.GetFlyWeight("perkalian");
perkalian.DoIt(i, i);
}
}
}

interface FlyWeight{
public void DoIt(int a,int b);
}

class Penjumlahan implements FlyWeight{
public Penjumlahan() {
try{
operasi = "Penjumlahan";
}catch (Exception e) {
e.printStackTrace();
}
}
private String operasi;
@Override
public void DoIt(int a,int b) {
System.out.println(operasi+" dari "+a+" dan "+b+" adalah "+(a+b));
}
}

class Perkalian implements FlyWeight{
public Perkalian() {
try{
operasi = "Perkalian";
}catch (Exception e) {
e.printStackTrace();
}
}

private String operasi;

@Override
public void DoIt(int a, int b) {
System.out.println(operasi+" dari "+a+" dan "+b+" adalah "+(a*b));
}
}

class FlyWeightFactory{
private static FlyWeightFactory flyWeightFactory = null;
private Map<String, FlyWeight> flyWeightpool = null;
public FlyWeightFactory() {
flyWeightpool = new HashMap<String, FlyWeight>();
}
public static FlyWeightFactory GetInstance(){
if(flyWeightFactory == null){
flyWeightFactory = new FlyWeightFactory();
}
return flyWeightFactory;
}

public FlyWeight GetFlyWeight(String key){
if(flyWeightpool.containsKey(key)){
return flyWeightpool.get(key);
}else{
FlyWeight flyWeight;
if(key.equals("penjumlahan")){
flyWeight = new Penjumlahan();
}else{
flyWeight = new Perkalian();
}
flyWeightpool.put(key, flyWeight);
return flyWeight;
}
}
}


C#
using System;
using System.Threading;
using System.Collections;

namespace FlyWeight_1
{
class Program
{
public static void Main(string[] args)
{
FlyweightFactory factory = new FlyweightFactory();
for(byte i = 0; i<5; i++)
{
Flyweight penjumlahan = factory.GetFlyweight("penjumlahan");
penjumlahan.Operation(i,i);

Flyweight perkalian = factory.GetFlyweight("perkalian");
perkalian.Operation(i,i);
}

Console.ReadKey(true);
}
}

class FlyweightFactory
{
private Hashtable flyweights = new Hashtable();

public FlyweightFactory()
{
flyweights.Add("penjumlahan", new Penjumlahan());
flyweights.Add("perkalian", new Perkalian());
}

public Flyweight GetFlyweight(string key)
{
return ((Flyweight)flyweights[key]);
}
}

abstract class Flyweight
{
public abstract void Operation(int a,int b);
}

class Penjumlahan : Flyweight
{
public Penjumlahan()
{
try
{
operasi = "Penjumlahan";
}
catch(Exception e){
Console.WriteLine(e.Message);
}
}

private string operasi;

public override void Operation(int a,int b)
{
Console.WriteLine(operasi+" dari "+a+" dan "+b+" adalah "+(a+b));
}
}

class Perkalian : Flyweight
{
public Perkalian()
{
try
{
operasi = "Perkalian";
}
catch(Exception e){
Console.WriteLine(e.Message);
}
}

private string operasi;

public override void Operation(int a,int b)
{
Console.WriteLine(operasi+" dari "+a+" dan "+b+" adalah "+(a*b));
}
}
}


PHP
<?php
interface FlyWeight{
function Operasi($a,$b);
}

class Penjumlahan implements FlyWeight{
function __construct(){
$this->operasi = "Penjumlahan";
}
private $operasi;

function Operasi($a,$b){
echo $this->operasi." dari ".$a." dan ".$b." adalah ".($a+$b)."< br />";
}
}

class Perkalian implements FlyWeight{
function __construct(){
$this->operasi = "Perkalian";
}
private $operasi;

function Operasi($a,$b){
echo $this->operasi." dari ".$a." dan ".$b." adalah ".($a*$b)."< br />";
}
}

class FlyWeightFactory{
private $factory = array();
function __construct(){
$this->factory['penjumlahan'] = new Penjumlahan();
$this->factory['perkalian'] = new Perkalian();
}

function GetFlyweight($key){
return $this->factory[$key];
}
}

$flyWeightFactory = new FlyWeightFactory();

for($i = 0; $i<5; $i++){
$penjumlahan = $flyWeightFactory->GetFlyweight("penjumlahan");
$penjumlahan->Operasi($i,$i);

$perkalian = $flyWeightFactory->GetFlyweight("perkalian");
$perkalian->Operasi($i,$i);
}
?>
cukup mudah untuk menerapkan design pattern flyweight ini di Java, C# dan PHP... kalo ente belum paham, monggo tanya ke ane lewat facebook aje biar cepet :D.. cukup dulu untuk postingan ini, semoga bermanfaat...