Koneksi C# dengan Ms Access - Contoh CRUD Database

Koneksi C# dengan Ms Access - Contoh CRUD Database
koneksi c# dan database access contoh
Alhmadulillah pagi ini ditemani dengan secangkir kopi membuat tambah semangat ngupdate blog ini :D .. kali ini tentang C# lagi.. udah lama gak ngasi contoh Aplikasi C# diblog ini, apa lagi yang Java... sepertinya malah gak pernah... wkwkwkwk... ya besok2 lah... soalnya update nya sesuai selera gan.. insya Alloh besok yang java ane kasi dah contoh2 Aplikasinya yang bisa ente download gratisss... postingan kali ini akan membahas C# dan Ms. Access ... jadi koneksi database antara C# dan Ms. Access... kenapa ane nulis tentang C# dan Access ?? hemmb... banyak alasan sebenernya... diantara nya adalah mungkin dari pengunjung dapet project yang tidak terlalu besar seperti ane kmaren, disuruh buat Aplikasi SMS Gateway (SENDER) di sekolah adek ane... adek ane masi SD gan :D ..
Dan jumlah siswa nya hanya sekitar 450an ... jadi ane pikir kalo pake Mysql rasanya masih tidak perlu, soalnya kebutuhan systemnya hanya menyimpan nama, kelas, nomer hp.... ya sekitaran itu lah...tidak terlalu besar dan menurut ane sangat kecil dan masih bisa diatasi dengan Database Ms. Access... SMS SENDER nya itu digunakan sebagai tempat pegumuman dari sekolah, seperti mungkin pulang nya lebih awal lah.. mungkin ada hari libur dadakan :D .... ya pokok nya dibuat pengumuman2 gitu... jadi nanti semua nomer siswa yang tersimpan di situ bisa dapet pengumuman dari sekolah.... besok2 ane bahas lah Aplikasi SMS Sender ini :) ...
Oia, untuk melakukan koneksi ke Database Ms. Access ada beberapa jalan kalo di C#, ente bisa pakai ODBC, bisa pake OLEDB dan mungkin yang lainnya kalo ada :D .. kalo ane tau nya cuma 2 itu aja.. hehee... dipostingan ini ane mau bahas yang pake OLEDB saja... karena lebih mudah ketimbang pake ODBC .. biasanya kalo pake ODBC ente harus setting inilah itulah di control panel (administration tool).. dan itu menurut ane sangat merepotkan, mangkanya pake yang OLEDB saja :)
Sebenarnya untuk mengkoneksikan C# dan Ms. Access Database tidak sulit.. hanya saja kita harus tau dimana kita meletakkan Database Ms. Access nya (file Access), kalo ane biasanya ane barengin sama file .exe hasil compilasi program yang ane buat, biasanya di folder project kan ada folder bin >> debug , di folder debug ini file .exe program kita ada, ya ane tarok disitu saja database Ms, Access nya jadi gak repot setting directory database nya nanti di kode program nya.. :D ...
Berikut adalah Class koneksi yang ane pake untuk koneksi ke Ms. Access
public class Connection
{
public Connection()
{
try
{
alamat = "Provider=Microsoft.ace.Oledb.12.0; Data Source=database.accdb";
koneksi = new OleDbConnection(alamat);
}
catch(Exception e)
{
Console.WriteLine(e.ToString());
}
}

private string alamat;
private OleDbConnection koneksi;
private OleDbCommand perintah;
private OleDbDataAdapter adapter;
private DataSet ds;
private static Connection connection = null;

public static Connection GetInstance(){
if(Connection.connection == null){
Connection.connection = new Connection();
}
return Connection.connection;
}

private DataSet GetData(string query)
{
try
{
ds = new DataSet();
koneksi.Open();
perintah = new OleDbCommand(query, koneksi);
adapter = new OleDbDataAdapter(perintah);
perintah.ExecuteNonQuery();
adapter.Fill(ds);
koneksi.Close();
return ds;
}
catch (Exception)
{
return null;
}
}

private int ManipulasiData(string query)
{
try
{
int res = 0;
koneksi.Open();
perintah = new OleDbCommand(query, koneksi);
adapter = new OleDbDataAdapter(perintah);
res = perintah.ExecuteNonQuery();
koneksi.Close();
return res;
}
catch (Exception)
{
return 0;
}
}

public DataSet GetContact(){
return GetData("select * from phonebook");
}

public DataSet GetContact(string contact_name){
return GetData("select * from phonebook where contact_name = '"+contact_name+"';");
}

public int TambahContact(string name,string number,string address){
return ManipulasiData("insert into phonebook values ('"+name+"','"+number+"','"+address+"');");
}

public int UbahContact(string name,string number,string address){
return ManipulasiData("update phonebook set contact_number = '"+number+"', address = '"+address+"' where contact_name = '"+name+"';");
}

public int DeleteContact(string name){
return ManipulasiData("delete from phonebook where contact_name = '"+name+"';");
}
}

Kalo ente perhatikan di Constructor Class ini, pada code "Data Source = database.accdb" kode ini digunakan untuk setting directory file Database Ms. Access ente.. seperti yang ane bilang tadi.. kalo ente narok file nya di forder debug ente gak usah setting directory nya, langsung saja nama file nya :D .. jadi gak repot2 .. kalo di tarok di directory "D" (misalnya) maka penulisannya ya "D:\\database.accdb" gitu... paham ya ?? disitu juga udah ane sediain bagaimana kita menggunakan SQl nya Ms Access.. ya gak beda2 jauh sama SQl nya Mysql.. nama nya saja SQL... ya mesti kayak gitu2 aja... hehehee...
Oia untuk contoh program CRUD C# dan Ms Access bisa ente download yang link nya nanti ane kasi dibawah :D ... kalo mau download ane minta tolong yak gan ? ane minta share nya... ya... sedekah lah buat ane.. masak ngeshare aja gak mau ... pelit amat... hehee... untuk postingan ini cukup sampai disini dulu, besok2 kita bahas lagi C# nya, insya Alloh akan ane bahas SMS Gateway (Sender) dengan C#...  ditunggu aja ya ?? :D .. sekian, semoga bermanfaat....

Download File (ane minta share - nya ya gan :D)

Read More

Belajar Codeigniter untuk pemula

Belajar Codeigniter untuk pemula
belajar kode igniter untuk pemula
Yupzzz... kali ini tentang framework PHP yang udah ane tunggu2 buat ane bahas diblog ini :) dan untuk yang pertama ane bahas adalah framework Codeigniter sesuai yang terpopuler saat ini. sebelumnya sedikit ane mau bahas, kenapa kok akhir2 ini banyak di pakai framework php dari pada php murni yang seperti ane contohin di Aplikasi blog dan CMS nya kmaren... jawabannya sederhana... sebenarnya menggunakan framework itu memudahkan untuk memanagement file saja... jadi penempatan file pengontrol, yang menampung query dan yang mengurusi tampilan di sendirikan dalam sebuah directory.. jadi sangat memudahkan dalam pembangunan aplikasi dan memanitenance nya :D ....
Framework PHP kebanyakan menggunakan konsep Model - View - Controller ... model adalah tempatya kita berhubungan dengan database, view tempatnya kita meletakkan file2 PHP yang berisi form HTML dan controller adalah yang mengontrol dari Model dan view... ketika kita membangun Aplikasi web dan ada masalah dengan database... tinggal cek di Model nya ... ketika ada masalah dengan tampilan... tinggal cek di view nya ... konsep nya sangat mudah sebenarnya :D ... hanya saja kita harus bisa memahami konsep ini... intinya ya seperti yang ane bilang tadi... memanagement file saja :)
Setelah ane bahas sedikit tentang framework yang berkonsep MVC sekarang molai kita ke framework nya itu sendiri.. kita coba untuk menggunakan framework codeigniter... sebelumnya ente harus siapkan hal - hal yang dibutuhkan untuk menggunakan framework Code igniter... pertama ente harus siapin web server... kalo ente udah terbiasa dengan pemrograman web pastinya di lapy ente udah ada web server nya, ente bisa pake XAMPP atau WAMPP atau yang lain... kalo ane pake XAMPP... ke dua ente harus siapin text editor kode ente... ente bisa pake Notepad++ atau dreamweaver ... kalo ane pake dream weaver :D.... selanjutnya dan yang terakhir ente harus siapin framework nya yang ente bisa download di web reminya juga... 
setelah ente siapin XAMPP, Dream Weaver dan Codeginiter nya sekarang saat nya bertarung dengan code igniter... kita taklukkan Codeigniter (CI) :D .....
Pertama Extract dulu file rar hasil download Codeigniter ente dan letakkan hasil extract nya di Htdoc (XAMPP)... biasanya hasil extract tadi itu adalah folder nama nya Codeigniter_versi...  untuk folder itu boleh ente rename sesuai selera ente :D .... isi folder Codeigniter itu sperti ini (ane pake yang versi 2.1.3)..

framework codeigniter untuk pemula










folder yang penting dan gak boleh dihapus hanya ada 2 yaitu folder application dan folder system, kalo folder  user_guide itu kalo mau dihapus ya gak apa apa... soalnya isinya cuma documentasi saja :D ... boleh dihapus boleh tidak... kemudian sekarang ente coba jalankan di browser ente code igniter nya... misal folder codeigniter_versi tadi ente kasi name ci_belajar berarti di browser ente manggilnya ya localhost/ci_belajar kemudian tekan enter... maka akan keluar tampilan seperti ini

belajar framework php untuk pemula

kalo dilihat menurut directory nya, codeigniter mempunyai susunan directory seperti berikut :

konfigurasi codeigniter

yang perlu ente perhatikan sementara ini ada 3 dulu, pertama folder controllers, folder models dan folder views... kalo ente buka folder controllers ente akan nemu 2 file yaitu index.html dan welcome.php kalo ente buka folder views ente juga akan nemu 2 file yaitu index.html dan welcome_message.php :) , kalo buka folder models ente bakal nemu 1 file yaitu index.html... folder controllers itu nanti nya akan dijadikan directory tempat controller2 yang ente pakai, begitu juga dengan folder views, disitu tempatnya form2 HTML yang file nya berekstensi .php dan model disitu akan dijadikan tempatnya class yang kita gunakan untuk mengutak atik query database... pada postingan kali ini ane gak akan bahas dulu bagaimana kita menggunakan controller, model atau view... postingan ini hanya akan membahas pengenalan Codeigniter dan konfigurasi awal Codeigniter :D
sekarang coba ente buka folder config (application >> config ) kemudian ente buka file config.php... kalo sudah ente bisa lihat ada array yang index nya adalah "base_url" .. ente bisa setting base url ini untuk root direcory Codeigniter, dalam hal ini karena kita tadi folder codeigniter_versi nya kita ganti jadi ci_belajar jadi untuk base_url nya bisa kita setting menjadi
$config['base_url'] = 'http://localhost/ci_belajar/';
setting ini sangat berguna nanti nya..... diantaranya untuk in bound link, selain itu untuk configurasi directory css, javascript.... ya nanti kita bahas di postingan selanjutnya... kemudian sekarang ente buka file autoload.php.... file ini digunakan untuk setting configurasi library, helper, url, dll yang akan kita gunakan nanti... jika kita melakukan konfigurasi pada file ini, misal konfigurasi database pada file ini maka kita tidak perlu setting ulang pada constructor nya model nanti :D karena  sudah auto load dari setting file ini... gitu .... di file ini juga sudah dicontohkan library apa saja yang biasanya dipakai dan url apa yang biasanya dipakai.. misal untuk library ada database dan pada helper ada url...
$autoload['libraries'] = array('database');
$autoload['helper'] = array('url');
Yupzzz... kalo untuk konfigurasi awal saja, sampai disini sudah cukup... untuk selebihnya (konfigurasi) bisa baca sendiri referensi nya di documentasi nya... tapi kalo secara umum dan yang sering dipakai sudah cukup seperti yang ane terangin diatas tadi :D.. oke... untuk postingan kali ini, cukup dulu... dan postingan selanjutnya ane mau kasi manipulasi database seputar CURD di Codeigniter dengan database Mysql :D ... ditunggu aja ya ? dan semoga postingan ini bermanfaat buat ane, ente dan pengunjung blog ini.... amiiin :)
Read More

Function (M-file) Brightness Matlab

Function (M-file) Brightness Matlab
Masi bersemangat untuk update di hari ini... ane terusin dah postingnya :D .. masi tentang Matlab.. kali ini tentang function brightness yang ane bahas.. secara bahasa brightness artinya adalah cerah... jadi secara gampangnya methode ini berfungsi untuk mepercerah sebuah citra, tujuan utamanya adalah untuk memperbesar kekontrasan sebuah citra... misal ada citra seperti ini

pengolahan citra digital brightness


jika kecerahannya ditingkatkan maka akan terlihat lebih kontras lagi, bisa lihat seperti ini 

matlab brightness

untuk menerapkan methode brightness ini, memakai rumus seperti ini

rumus brightness

rumus brightness


lalu beginilah function (M-file) nya di Matlab

function hasil = Cerah(citra,input)

hasil = citra;

[m,n] = size(citra);

for k = 1:m
for l = 1:n
hasil(k,l) = citra(k,l)+input;
end
end

subplot(2,2,1);imshow(citra);title('citra asli');
subplot(2,2,2);imhist(citra);title('histogram citra asli');
subplot(2,2,3);imshow(hasil);title('hasil citra cerah');
subplot(2,2,4);imhist(hasil);title('histogram citra cerah');

end
Pemanggilannya begini
i = imread('cameraman.tif');
Cerah(i,50);

penjelasannya seperti ketika function buatan kita tadi kita panggil maka harus mengisikan 2 parameter nya.. yaitu parameter citra nya dan parameter nilai untuk kecerahan citra nya :D begitu ....
hasil pemanggilan function diatas adalah seperti gambar dibawah ini dan sampai disini dulu postingan kali ini :)


citra brightness

Read More

Function (M-file) Negative Citra Matlab

Function (M-file) Negative Citra Matlab
Hari ini ane tiba2 pengen update lagi diblog ini :D .. ya walaupun hanya sekedar corat-coret tapi setidaknya "yang ada manfaatnya" buat diri sendiri dan buat orang lain... postingan ini mungkin agak sedikit berbeda dengan postingan sebelumnya... kalo dilihat dari kategori posting di blog ini cuma ada tutorial pemrograman yang rumpun nya rekayasa perangkat lunak / sistem informasi... kali ini ane akan share sesuatu yang berbeda... yaitu tentang citra digital ... mata kuliah ini adalah salah satu mata kuliah yang ditakuti oleh mahasiswa di kampus ane :D gak tau kenapa, apa karena dosennya yang killer atau karena mata kuliah nya yang agak sulit untuk dipahami... hehee... ya kalo menurut ane si.. ke dua2 nya...
dosennya killer dan mata kuliahnya juga agak sulit untuk di mengerti... hembb... tapi dosen yang itu sudah gak ngajar mata kuliah citra tahun ini, jadi dosennya berbeda... tahun kmaren ane ikut kelas ini karena mantan ane dan ane juga pengen bisa... taun ini ane wajib ngambil -_- padahal ane udah bisa ni matakuliah...
mata kuliah citra ini termasuk dasar dari penjurusan kecerdasan buatan (artificial intelegent)... dan nantinya akan dikembangkan untuk membuat aplikasi2 keren seperti deteksi wajah, deteksi tumor, virtual keyboard... dll ... tapi sayang seribu sayang... ane gak minat sama rumpun yang satu ini... sebenarnya ilmunya unik... bisa membuat aplikasi bahkan sesuatu yang baru.... tapi karena pasar sedang tidak banyak membutuhkan sama penjurusan yang satu ini, maka ane putusin menekuni jurusan yang dicari pasar :D yaitu RPL dan Jaringan... kalo nanti pasar sudah mulai banyak menjamah ke kecerdasan buatan ini maka ane akan perdalam lagi ilmu ini, ane suka si sebenarnya tapi yaaa.. tuntutan kerjanya di RPL dan Jaringan :)
mata kuliah citra dikampus ane dibagi menjadi 3 bagian... untuk yang citra 1 ini lebih banyak membahas enhancement yaitu perbaikan citra... tujuannya adalah untuk meningkatkan kekontrasan suatu citra sehingga citra yang diolah / diproses akan menghasilkan citra baru yang kekontrasannya lebih tinggi ... yang pada akhirnya dapt digunakan untuk memisahkan object - object....
enhancement ini dalam pemrograman citra biasanya tidak berdiri sendiri, maksudnya akan ada proses selanjutnya agar citra ini dapat dimanfaatkan lagi.. misal, untuk mendeteksi wajah harus dilakukan enhancement dulu untuk memperbaiki kekontrasan citra, baru kemudian dilakukan proses lanjutan untuk pendeteksian mana wajah dan mana yang bukan wajahh... Enhancement (perbaikan) mempunyai banyak methode, mulai dari Negative, Gamma Correcton, Brightness, histogram dll... dan inti dari methode2 ini adalah untuk memperbaiki kekontrasan citra :D
seperti judul postingannya yaitu Function (M-file) Negative citra, ane akan kasi contoh functionnya yang murni menggunakan algoritma negative citra, 

Rumus :

S = (L-1) - r

S = nilai citra hasil.
L-1 = gray level tertinggi / color depth
r = nilai citra asli

rumus pengolahan citra negative

kalo ente lihat pada simulasi diatas itu nilai (L-1) adalah 9 .. jadi rumusnya 9 - nilai pixel nya :D ... kalo secara gampangnya proses negativ ini adalah proses dimana sisi gelap dijadikan terang, si gelap dijadikan terang... jadi dibalik gitu....
untuk penerapan di matlab, sebenarnya matlab sendiri sudah menyediakan function nya yaitu "imcomplement"

i = imread('rice.png');
hasil = imcomplement(i);
subplot(1,2,1);imshow(i);title('citra asli');
subplot(1,2,2);imshow(hasil);title('citra hasil negativ');
diatas itu penerapannya kalo pake function bawaan matlab... tapi rasanya kurang greget kalo kita gak bisa terapin dengan algoritma yang ada :D ... ni ane kasi function yang mengimplementasikan algoritma negative biar greget...
function hasil = NegativeCitra(citra,maxbit)

hasil = citra;

[m,n] = size(citra);

for k = 1:m
for l = 1:n
hasil(k,l) = (maxbit-1)-citra(k,l);
end
end

subplot(2,2,1);imshow(citra);title('citra asli');
subplot(2,2,2);imhist(citra);title('histogram citra asli');
subplot(2,2,3);imshow(hasil);title('hasil citra negative');
subplot(2,2,4);imhist(hasil);title('histogram citra negative');

end
untuk pemanggilannya ya cukup seperti ini
NegativeCitra(i,256);  
hembbb... ya kira2 seperti itulah penerapan negative dan algoritmanya di function (M-file) matlab... kalo gak ngerti silahkan di coment atau tanya lewat facebook... kalo paham monggo postingannya dilike gitu...  :D ...sekian dulu untuk postingan kali ini... semoga bermanfaat :)
Read More

Contoh aplikasi PHP - Content Management System (CMS) Sederhana

Contoh aplikasi PHP - Content Management System (CMS) Sederhana
free cms php download
Pada postingan sebelumnya, Aplikasi Blog PHP - MySql udah ane kasi contoh nya, tinggal ngasi CMS (Content Management System) - nya doank yang belom.. kali ini ane mau kasi CMS nya yang tentunya dengan PHP - Mysql... karena halaman blog nya kan kmaren pake PHP, masak halaman Adminnya pake ASP / JSP ?? :D kan gak etis to ?? hehehee... hari ini kuliah masuk agak siangan, sesi 1 yang biasanya jam 08.00 pindah jam tayang pada jam 10.30.. ini dikarenakan ada UN di SMP yang tempatnya juga dikampus... -_-  ya... nasib 2 lembaga yang masih satu yayasan, kadang harus terganggu dengan keadaan satu tempat dengan SMP PGRI ...  mungkin ane nilai ini merugikan, tapi beda lagi bagi mahasiswa yang asal2an buat kuliah, malah keadaan seperti ini akan menguntungkan mereka... ya terserahlah... apa kata mahasiswa itu... bukan urusan ane ngurusin orang yang seperti itu... kita punya urusan sendiri2 dikampus :D ... yang males silahkan males... dan itu tidak akan merugikan ane... yang rugi ya diri dia sendiri dan orang tuanya tentunya... udah bayar kuliah mahal2 tapi gak dapet ape2 wkwkwkwkwkwk... kasian....
Contoh CMS yang ane upload nanti bersifat free / open source... bisa ente download dan modifikasi, bahkan untuk pengumpulan tugas kuliah gak apa - apa... itu free CMS :D ... tapi kalo ente upload ulang ya mbok jangan dihapus copy right nya... yang "programming by Ahmad Rizal Afani" itu looo..hehee.. sebenarnya ane upload aplikasi blog dan cms nya pake PHP ini pengen bantuin temen2 ane yang sekarang lagi ngambil mata kuliah Web programming fundamental yang tugas akhirnya membuat aplikasi blog dan CMS nya... harus ada Array dan function katanya... ya.. udah ane kasi kok di contoh CMS PHP ini, pake array dan function :D ... ente bisa cek nanti kalo udah ente download...

untuk template nya ane download di free css template, nama template admin nya adah mos admin, bikinan orang indonesia, dengan tampilan yang sangat sederhana tapi cukup bagus... ente bisa lihat preview nya disini... untuk tex editor dan file manager nya ane pake plugin java script yaitu CKeditor dan KCfinder yang ente bisa download di web resminya gratis.... dan disana juga disediakan documentasinya untuk pembelajaran cara memakainya... disini ane gak akan bahas bagaimana untuk mengintegrasikan CKeditor dan KCfinder karena itu sudah banyak dibahas dan sangat mudah sekali menurut saya untuk dipelajari, kalo pemakaian CKeditornya, ente cukup pasang nama class nya pada atribut textarea HTML aja.. atau dari yang via javascript.. kalo KCfinder nya ente tinggal konfigurasi saja... kalo mau belajar integrasi KCfinder dan CKeditor ente bisa lihat disini :) .... ni ane kasi script konfigurasi Kcfinder ke CKeditor...
CKEDITOR.editorConfig = function(config) {
config.filebrowserBrowseUrl = 'js/kcfinder/browse.php?type=files';
config.filebrowserImageBrowseUrl = 'js/kcfinder/browse.php?type=images';
config.filebrowserFlashBrowseUrl = 'js/kcfinder/browse.php?type=flash';
config.filebrowserUploadUrl = 'js/kcfinder/upload.php?type=files';
config.filebrowserImageUploadUrl = 'js/kcfinder/upload.php?type=images';
config.filebrowserFlashUploadUrl = 'js/kcfinder/upload.php?type=flash';
};
oke... kalo agan2 mau download contoh CMS PHP nya ente bisa download disini... kalo mau download aplikasi blog nya atau halaman index nya ente bisa baca disini gan.... dan kalo pengen tau preview CMS nya, seperti dibawah ini gan :D 

contoh content management system php

contoh penggunaan kcfinder ckeditor


contoh CMS php

setelah ane upload aplikasi blog dan cms nya menggunakan PHP murni (bukan framework), besok2 saat nya membahas PHP framework.. seperti yang ente tau framework banyak macam nya tapi yang paling terkenal dan populer saat ini adalah Code Igniter (CI) .. dan  insya Alloh akan ane bahas dipostingan selanjutnya... ini yang ane tunggu2.. membahas framework PHP di blog ini... hehee... dan seperti biasa ane sediain contoh2 aplikasinya yang bisa ente download free... :D dan mungkin ada yang mau ngasi sedikit donasi ya gapapa... wkwkwkwk... mangkanya tongkrongin blog ini terus dan tunggu update2 terbarunya :D ... sekian dulu untuk postingan Aplikasi admin CMS dengan PHP ini... semoga bermanfaat dan happy cooding :)

Download Aplikasi CMS PHP (minta share nya ya gan :D )
Read More

Contoh Aplikasi Blog Sederhana PHP

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 :)

Read More

Pattern Mediator di Java, C# dan PHP

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
Read More

Pattern Observer di Java, C# dan PHP

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();
?>

Read More

Pattern Bridge di Java, C# dan PHP

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

Pattern Chain Of Responsibility di Java, C# dan PHP

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 :)

Read More

Pattern Iterator di Java, C# dan PHP

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 :)
Read More

Pattern Flyweight di Java, C# dan PHP

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

Read More