BAB II STUDI PUSTAKA Bab ini berisi penjelasan hasil studi pustaka mengenai dasar teori, konsep, dan teknologi yang berkaitan dengan Tugas Akhir ini. Penjelasan yagn terdapat pada bab ini meliputi penjelasan mengenai, dasar teori tentang code generator, JavaScript Object Notation, dan penjelasan mengenai aplikasi web berorientasi objek. 2.1
CODE GENERATOR
Code generator pada dasarnya adalah sebuah program yang menulis kode program lain. Sebuah code generator akan membaca meta-data dari rancangan perangkat lunak dan membangkitkan kode program dari informasi tersebut. Meskipun dulu kurang populer, konsep pembangkitan kode otomatis ini bukanlah konsep yang baru [STE02]. Dengan berkembangnya framework-framework yang kompleks, maka kebutuhan akan sebuah program yang dapat membantu pengembangan aplikasi semakin meningkat. Semakin kompleks sebuah framework, maka semakin terasa kegunaan dari sebuah Code Generator [HER03]. Code generator dapat membantu pengembang dalam melakukan sebuah pekerjaan yang berulang-ulang. Memang sebuah code Generator bukanlah cara paling efektif dan efisien untuk membantu pengembangan sebuah perangkat lunak. Akan tetapi, dengan adanya sebuah Code Generator, pekerjaan pengembang perangkat lunak menjadi lebih ringan karena pekerjaan yang dapat dilakukan secara otomatis sudah terselesaikan. 2.1.1
Mekanisme Code Generator
Seperti telah disebutkan pada Subbab 1.1, code generator dapat melakukan tugastugas yang berulang-ulang secara otomatis. Sisa pekerjaan yang lebih kompleks dapat dilakukan oleh porgrammer. Pada Gambar II-1, dapat dilihat posisi code generator dalam sebuah proses implementasi perangkat lunak [HER03]. Dapat II-1
II-2
dilihat bahwa sebuah code generator akan menerima definisi atau template sebuah kode dan setelah digabungkan dengan hasil kode suntingan programmer, maka kode-kode tersebut dapat dikompilasi dan diuji. Untuk proses pengembangan yang menggunakan bahasa yang tidak perlu dikompilasi, maka bagian kompilasi dapat diabaikan dan proses pengujian langsung dilakukan.
Gambar II-1 Posisi code generator dalam proses implementasi perangkat lunak
Gambar II-2 menunjukkan 3 hal penting yang perlu diperhatikan dalam membuat code generator. Ketiga hal ini harus benar-benar dimengerti dan dapat diprediksi variasinya. Hal-hal tersebut adalah [STE02]: 1. Template kode sebagai hasil dari perancangan perangkat lunak 2. Meta-data yang biasanya berupa model data yang digunakan dalam perangkat lunak yang akan dibangkitkan. 3. Domain Rule yang mengatur fungsi dan behaviour dari model data yang diberikan. Biasanya domain rule ini diberikan dalam bentuk hasil perancangan perangkat lunak atau template kode.
II-3
Gambar II-2 Unsur-unsur penting dalam pembangkitan kode
2.1.2
Jenis Code Generator
Code Generator terbagi menjadi 2 kategori, yaitu pasif dan aktif. Code Generator pasif hanya bertugas untuk membangkitkan kode awal yang harus dikembangkan lagi oleh programmer. Semua bagian dari hasil kode yang dibangkitkan dapat diubah dengan sesuka hati oleh programmer yang bertanggung jawab atas kode tersebut [HER03]. Generator pasif ini tidak bisa menerima input tambahan dari pengguna untuk mengubah kode hasil keluarannya. Sebuah Code Generator aktif dapat membangkitkan sebuah kode yang sama berulang kali. Apabila perubahan dibutuhkan, maka pengguna dapat memasukkan parameter input yang baru dan kode yang dihasilkan pun akan berubah sesuai keinginan pengguna. Jenis generator yang akan dibahas pada subbab ini adalah jenis Code Generator aktif. Code Generator aktif terbagi atas beberapa model yang meliputi berbagai solusi, mulai dari yang paling sederhana sampai yang paling rumit. Ada banyak cara dalam mengelompokkan generator, salah satunya pengelompokan dilihat dari masukan dan hasil keluarannya. Dilihat dari sudut padang ini, Code Generator dapat dikelompokkan menjadi 6 tipe yaitu Code Munger, Inline-Code Expander, Mixed-code Generator, Partial Class Generator, Tier/Layer Generator dan FullDomain Language Generator [HER03].
II-4
2.1.2.1 Code Munger Munging merupakan sebuah kata informal dalam bahasa inggris berarti mengubah sesuatu menjadi bentuk lain. Dari kode masukan yang diberikan, Code Munger akan memilih hal-hal penting dari kode tersebut dan menggunakannya untuk membuat satu atau lebih file keluaran dalam berbagai jenis file. Skema mekanismenya dapat dilihat pada Gambar II-3. Dengan memberikan sebuah source code sebagai masukan, Code Munger akan melakukan parsing kode dan dengan memanfaatkan template yang ada, membangkitkan file keluaran.
Gambar II-3 Mekanisme code munger
Code munger dapat dimanfaatkan untuk membangkitkan kode pada banyak kasus aplikasi. Penggunaan paling umum adalah untuk membuat sebuah dokumentasi dari program yang ada. Selain itu, code munger juga dapat digunakan untuk membaca nilai-nilai konstanta atau prototipe fungsi dari sebuah file. 2.1.2.2 Inline-code Expander Skema dari inline-code expander yang dapat dilihat pada Gambar II-4, mirip dengan code munger. Yang berbeda adalah masukan dan hasil keluarannya. Masukan kode untuk jenis generator ini memiliki bagian kode yang ditandai agar dapat dikenali dan dikembangkan oleh program generator. Bagian kode yang ditandai ini akan diganti menjadi kode yang dibangkitkan dan dimasukkan ke file keluaran. File keluaran yang dihasilkan adalah kode yang berformat sama dengan file masukan.
II-5
Gambar II-4 Mekanisme inline-code expander
Contoh paling umum pemanfaatan inline-code expander adalah penambahan kode SQL ke dalam sebuah source code. Program expander akan membaca kode masukan, lalu menambahkan kode SQL di tempat yang telah diberikan tanda khusus pada kode masukan. Selanjutnya, kode yang telah diubah disimpan ke dalam file baru. 2.1.2.3 Mixed-code generator
Gambar II-5 Mekanisme mixed-code generator
Mixed-code generator menggunakan mekanisme yang mirip dengan inline-code expander. Perbedaan dengan inline-code expander adalah generator tipe ini memodifikasi langsung file masukan dan menimpa file masukan. File keluarannya dapat langsung dikompilasi atau dieksekusi, atau dimasukkan kembali ke dalam generator untuk ditambahkan kode lainnya. Perbedaan lainnya adalah bagian kode khusus yang dikenali sebagai bagian yang akan dibangkitkan. Pada inlinecode expander, generator akan mencari kata kunci yang ditulis secara khusus dan berbeda dengan bahasa pemrogramannya. File input dari inline-code expander
II-6
tidak bisa langsung dikompilasi atau dieksekusi. Sedangkan pada mixed-code generator, kata kunci tersebut dimasukkan ke dalam komentar yang berlaku dalam bahasa pemrograman target. Skema yang menunjukkan cara kerja dari mixed-code generator dapat dilihat pada Gambar II-5. Teknik pembangkitan kode mixed-code generator dapat digunakan di berbagai hal dalam pengembangan perangkat lunak, antara lain: 1. Membangkitkan kode antarmuka untuk menyematkan variabel ke kontrol antarmuka. 2. Mambangun kasus uji dari data uji yang disimpan dalam komentar 3. Membuat kode akses basis data dari spesifikasi yang disimpan dalam komentar 2.1.2.4 Partial-class Generator
Gambar II-6 Mekanisme partial-class generator
Sebuah partial-class generator mambaca file yang berisi definisi abstrak yang menyimpan informasi yang cukup untuk membangun suatu kumpulan kelas. Dengan template yang ada, sebuah kelas dasar dapat dibangun oleh generator jenis ini. Kelas yang dibangun akan menjadi kelas dasar yang dapat dikembangkan oleh programmer menjadi kelas-kelas turunan yang dapat digabungkan ke dalam aplikasi. Gambar II-6 menunjukkan mekanisme dari partial-class generator. Sebuah partial-class generator dapat menjadi dasar dari pembuatan sebuah generator yang bisa membangkitkan keseluruhan kode dari sebuah tier pada
II-7
sebuah aplikasi. Pada kasus generator jenis ini, yang melengkapi tier-nya adalah programmer. 2.1.2.5 Tier/Layer Generator Model ini adalah pengembangan dari partial-class generator. Perbedaan terbesar antara partial-class dan tier generator adalah tier generator bertanggung jawab penuh atas sebuah tier dalam aplikasi n-tier. Programmer tidak perlu lagi menambahkan kelas turunan seperti pada model partial-class. Model ini memberikan keuntungan dalam kecepatan implementasi. Namun, apabila kelas yang akan dibangkitkan sangat khusus, pengembang tetap membutuhkan partialclass generator. Gambar II-7 menunjukkan mekanisme dari tier generator.
Gambar II-7 Mekanisme tier generator
2.1.2.6 Full-domain Language Generator Generator model ini menggunakan metode mesin turing yang memiliki definisi penuh sebuah bahasa pemrograman. Pengembang dapat membuat segala macam kemungkinan logika, objek dan aturan yang bisa diakomodasi oleh bahasa yang digunakan. Penggunaan metode ini sangat memudahkan pengembangan, namun untuk mengembangkan generatornya sangat rumit karena diperlukan pengetahuan mendalam tentang bahasa yang digunakan. Selain itu, generator model ini tidak memperhatikan struktur kelas secara semantik. Contoh penggunaan generator ini adalah Mathematica, sebuah bahasa yang mendukung penggunaan matriks secara sederhana. Penggunaan matriks termasuk rumit dalam bahasa pemograman
II-8
tradisional seperti C, C++ atau Java. Dengan mathematica, maka pengembang tidak perlu lagi memikirkan masalah fungsi matematik matriks yang rumit. 2.1.3
Keuntungan dan Kerugian Penggunaan Code Generator
Ada beberapa keuntungan dan kerugian penggunaan code generator. Tidak semua keuntungan dan kerugian tersebut dapat terbukti dengan menerapkan code generator pada satu kasus saja. Keuntungan dan kerugian ini mungkin berlaku untuk kasus satu, tetapi tidak berlaku untuk kasus lainnya. 2.1.3.1 Keuntungan Penggunaan Code Generator Keuntungan penggunaan code generator adalah: 1. Konsistensi. Kode yang dibangkitkan oleh mesin akan konsisten karena dilakukan melalui proses yang selalu sama. Perbedaan pendekatan yang dilakukan
oleh
banyak
programmer
sebagai
salah
satu
penyebab
inkonsistensi kode bisa diminimalisasi 2. Kualitas yang baik. Apabila sebuah generator dikembangkan dengan baik, maka kode yang dihasilkan akan baik juga. Jumlah kesalahan yang dilakukan manusia akibat keteledoran akan berkurang dengan signifikan 3. Waktu perancangan yang lebih besar. Dengan berkurangnya waktu implementasi, maka perancangan bisa lebih mendapat porsi waktu yang besar. 4. Programmer bisa lebih berkonsentrasi pada hal-hal yang lebih spesifik. 2.1.3.2 Kerugian Penggunaan Code Generator Kerugian penggunaan code generator adalah: 1. Waktu inisiasi pengembangan bertambah karena pembangunan code generator sendiri membutuhkan waktu yang cukup besar. 2. Code generator hanya dapat diterapkan pada kondisi yang spesifik.
II-9
3. Untuk kode yang berhubungan dengan basis data, skema basis data yang dipakai harus sudah dirancang dengan baik.. 2.2
JAVASCRIPT OBJECT NOTATION (JSON)
JavaScript Object Notation atau lebih dikenal dengan sebutan JSON merupak sebuah format pertukaran data yang disebut-sebut sebagai pengganti dari format XML. Menggunakan format dasar JavaScript, JSON menjadi salah satu pilihan format pertukaran data di internet. 2.2.1
Gambaran Umum JSON
JavaScript Object Notation atau JSON adalah format pertukaran data yang berukuran kecil dan ringan untuk digunakan. JSON berformat file teks terstruktur yang mengikuti format JavaScript, dan sifatnya tidak terikat oleh bahasa pemrograman yang digunakan. JSON dirancang agar dapat digunakan secara mudah oleh manusia dan komputer. Sisi kemudahan untuk manusianya adalah, JSON lebih mudah dibuat karena strukturnya mirip dengan JavaScript. Selain itu, tidak ada tag-tag khusus yang perlu diingat untuk menggunakannya. Sedangkan pada sisi komputer atau mesin, proses parsing tidak terlalu sulit karena nilai-nilai di dalamnya sudah dibungkus dalam sebuah objek. Data yang disimpan dalam JSON memiliki 6 tipe dasar, yaitu: 1. Number (integer, real, atau floating point) 2. String (format Unicode, dengan dukungan backslash escape character) 3. Boolean (true atau false) 4. Array (kumpulan nilai terurut yang dipisahkan oleh koma dan ditutup oleh tanda kurung siku) 5. Object (koleksi pasangan key dan value, dipisahkan oleh tanda koma dan ditutup oleh tanda kurung kurawal) 6. null
II-10
2.2.2
Struktur JSON
Format JSON adalah sebuah bentuk literal. Bentuk literal dalam sains komputer adalah notasi dalam source code yang merepresentasikan sebuah nilai konstan. Nilai untuk literal ditetapkan pada waktu kompilasi. Sedangkan nilai yang dihasilkan dari perbandingan variabel diberikan pada saat runtime. Format JSON dibangun di atas 2 struktur [SHI09]. Kedua struktur tersebut adalah: 1. Pasangan key/value Dalam berbagai bahasa pemrograman, struktur seperti ini direalisasikan sebagai objek, record, struct, dictionary, hash table, list yang menggunakan key, atau associative array. Contoh bentuk ini ditunjukkan dalam Kode II-1. { “a”:1, “b”:2, “c”:3 }
Kode II-1 Contoh JSON - Pasangan Key/Value
Dalam Kode II-1, ada tiga pasangan key/value yang menggunakan key a, b, dan c dan masing-masing bernilai 1, 2, dan 3. 2. List nilai terurut Dalam berbagai bahasa pemrograman, struktur seperti ini direalisasikan sebagai array, vector, list, atau sequence. [ 1, 2, 3, “nilai 4”]
Kode II-2 Contoh JSON - List Nilai Terurut
Dalam Kode II-2, terdapat sebuah array dengan nilai integer 1, 2, 3 dan string berisi “nilai 4”. Bentuk-bentuk tersebut adalah struktur data yang universal yang didukung oleh banyak bahasa pemrograman modern. Jadi, data dalam JSON dapat dengan mudah dipertukarkan dari satu bahasa ke bahasa lain.
II-11
Berikut ini adalah layout spesifik JSON [BMC06]: Tabel II-1 Layout spesifik JSON Nama object
Deskripsi {} { members } string : value members , string : value [] [ elements ] value elements, value string, number, object, array, boolean, null
members array elements value
2.2.3
JSON Dalam PHP
Banyak framework PHP yang sudah mendukung penggunaan JSON, misalnya SolarPHP, atau Zend. Pada PHP standar, sejak versi 5.2.0, PHP sudah menyediakan library untuk melakukan parsing terhadap JSON. Untuk versi sebelum 5.2.0, library tersebut dapat ditambahkan ke dalam program yang dibuat. Ada 3 fungsi utama dalam library JSON pada PHP, yaitu json_decode, json_encode, dan json_last_error. 2.2.3.1 Fungsi json_decode Fungsi ini menerima masukan input string JSON dan mengkonversinya ke dalam PHP variabel. json_decode ( string $json [, bool $assoc= false [, int $depth= 512 ]] ) Kode II-3 Fungsi json_decode
Keterangan: Json
: Input string JSON
Assoc : Apabila nilainya true, maka objek yang dikembalikan akan dikonversi ke asssociative array.
II-12
2.2.3.2 Fungsi json_encode Fungsi ini menerima masukan dalam bentuk apapun asalkan dalam ter-encode dalam bentuk UTF-8 dan akan mengembalikan string dalam format JSON. string json_decode (mixed $value [, int $options= 0]) Kode II-4 Fungsi json_encode
Keterangan: value
: Input string JSON
options :
Nilai
bitmask
yang
JSON_HEX_TAG,
terdiri
atas
JSON_HEX_QUOT,
JSON_HEX_AMP,
JSON_HEX_APOS,
JSON_FORCE_OBJECT. Nilai defaultnya adalah 0.
2.2.3.3 Fungsi json_last_error Fungsi ini akan mengembalikan error terakhir pada eksekusi parsing JSON terakhir (bila ada). int json_last_error (void) Kode II-5 Fungsi json_last_error
2.3
APLIKASI WEB BERORIENTASI OBJEK
Seiring dengan berkembangnya terknologi, penggunaan internet juga berkembang sebagai sarana pertukaran informasi. Salah satu metode pertukaran informasi tersebut adalah dengan menggunakan aplikasi web. Hal ini menunjukkan bahwa pengembangan aplikasi web menjadi hal yang penting. Pembangunan aplikasi web tersebut menggunakan banyak metode dan bentuk. Salah satu bentuk pemrograman aplikasi web adalah aplikasi web berorientasi objek. 2.3.1
Gambaran Umum Aplikasi Web
Pengembangan aplikasi web saat ini sudah berkembang sangat pesat. Di awal pengembangannya, sebuah aplikasi web hanya terdiri atas beberapa halaman web,
II-13
sebagian besarnya bersifat statik dengan tujuan informatif atau mengiklankan sesuatu. Saat ini, aplikasi web sudah menjadi sangat kompleks dan sudah menggunakan berbagai macam teknologi [ARR08]. Menurut definisi, aplikasi web adalah sebuah aplikasi client/server yang menggunakan browser web sebagai program client dan dengan menggunakan koneksi internet atau intranet terhubung dengan server yang melakukan layanan interaktif [SHK03]. Aplikasi web menampilkan konten-konten dinamis yang dirancang berdasarkan parameter request yang diberikan oleh pengguna dengan tetap memperhatikan sisi keamanan. Jadi, sebuah situs web yang terdiri atas halaman-halaman statik yang diakses langsung dari file-file berbeda tidak dapat dikategorikan sebagai aplikasi web. 2.3.2
Jenis Aplikasi Web
Pengelompokan aplikasi web dapat dilihat dari berbagai macam sudut pandang. Dilihat dari sisi fungsionalitas, aplikasi web dapat dibagi menjadi sembilan kategori, yaitu [ARR08]: 1. Aplikasi Informasional Aplikasi web jenis ini hanya menyediakan informasi bagi penggunanya. Aplikasi web ini tidak terlalu membutuhkan interaksi pengguna dalam operasinya. Pengguna hanya melakukan navigasi dan sesekali mengisi form login, mencari sesuatu, atau hanya menelusuri halaman-halaman web yang ada. Contoh aplikasi web ini adalah koran online, manual online, katalog produk, buku online, dan laporan online. 2. Aplikasi Interaktif Aplikasi web jenis ini sangat membutuhkan interaksi dari pengguna karena aplikasi ini bertujuan untuk mengakomodasi kegiatan penggunanya. Dalam menggunakan aplikasi web yang bersifat interaktif, penggunanya biasanya diharuskan untuk mengisi form-form yang kompleks dan membutuhkan
II-14
perhatian yang lebih dalam mengisinya. Contoh aplikasi web jenis ini adalah online game dan registrasi suatu situs web. 3. Aplikasi Transaksional Aplikasi web jenis ini mengakomodasi penggunanya dalam melakukan transaksi secara online. Dalam aplikasi ini, entitas yang berhubungan tidak hanya pengguna dengan web browser sebagai client dan web server saja. Aplikasi ini juga bisa melibatkan pihak lain seperti bank atau penyedia metode pembayaran online. Contoh aplikasi web jenis ini adalah toko online, online banking dan agen perjalanan. 4. Workflow-oriented Application Jenis aplikasi web ini menekankan fungsinya pada alur kerja yang dilakukan pengguna. Aplikasi web ini akan membantu penggunanya dalam melakukan pekerjaan dengan memfasilitasi salah satu bagian dari pekerjaannya. Contoh aplikasi web ini adalah perencanaan dan scheduling online, manajemen inventory, dan status monitoring. 5. Lingkungan Kerja Kolaboratif Aplikasi web jenis ini mendukung suatu pekerjaan agar tetap bisa dilakukan bersama-sama meskipun anggota timnya tidak berada di suatu tempat yang sama. Dengan aplikasi web ini, pengguna dapat melakukan pembagian kerja dan melakukan koordinasi atas apa yang dikerjakan tanpa harus bertemu langsung dengan anggota tim lainnya. Contoh aplikasi ini adalah kakas perancangan kolaboratif dan kakas authoring terdistribusi. 6. Komunitas Online Aplikasi web jenis ini memfasilitasi para penggunanya dalam melakukan komunikasi satu sama lain. Jenis aplikasi web ini biasanya bersifat spesifik terhadap suatu masalah yang umum digunakan oleh penggunanya. Contoh aplikasi web ini adalah forum-forum online, diskusi kelompok dan lelang online.
II-15
7. Portal Sebuah web portal tidak hanya menyediakan sarana informasi bagi penggunanya. Web Portal juga biasanya menyediakan sarana komunikasi untuk penggunanya. Selain itu, sebuah portal juga bisa meyediakan layanan yang bersifat transaksional. Contoh aplikasi web jenis ini adalah mall online, portal bisnis online, dan portal komunitas tertentu. 8. Aplikasi Semantic Web Semantic web ini merupakan jenis aplikasi web yang tergolong baru dikembangkan. Aplikasi web jenis ini membutuhkan sebuah basis data atau basis pengetahuan sebagai sumber informasinya. Aplikasi web ini terkadang memanfaatkan beberapa konsep intelejensia buatan. Contoh aplikasi web ini adalah knowledge management system dan sistem rekomendasi. 9. Aplikasi Ubiquitous Aplikasi web jenis ini memanfaatkan hampir semua jenis aplikasi lainnya, mulai dari informasional, interaktif, hingga workflow-oriented dan semantic web. Aplikasi jenis ini biasanya spesifik terhadap masalah yang dihadapi pengguna. Aplikasi ini menjadi bersifat custom dan sangat kompleks bila dibandingkan dengan aplikasi jenis lannya. Contoh aplikasi jenis ini adalah layanan customized, multi-platform delivery, dan location-aware service. Aplikasi-aplikasi web tersebut memiliki kompleksitas yang berbeda, sesuai dengan fungsinya. Gambar II-8 menunjukkan grafik kompleksitas dan sejarah pengembangan aplikasi web yang dikelompokkan menurut fungsionalitasnya [SHK03]. Gambar tersebut menunjukkan bahwa semakin modern sebuah aplikasi web, kompleksitas dari aplikasi web yang ada semakin meningkat. Semakin modern sebuah aplikasi web, maka semakin komplekslah tugas dari web aplikasi tersebut. Pada aplikasi web tipe informasional, rancangan aplikasinya hanya berbasis hypertext dengan penambahan rancangan antarmuka. Pada aplikasi web yang lebih modern seperti aplikasi web ubiquitous dan semantic web, perancangan aplikasi akan melibatkan banyak aktivitas seperti perencanaan,
II-16
perancangan informasi, evaluasi, jaminan kualitas, performansi sistem, perawatan manajemen perubahan dan sebagainya. Pengecualian terjadi pada aplikasi portal. Meskipun portal lebih baru dari aplikasi kerja kolaboratif, tetapi tingkat kompleksitasnya tidak terlalu tinggi karena tidak banyak aspek yang rumit dalam sebuah portal.
Gambar II-8 Kompleksitas dan Sejarah Pengembangan Jenis-jenis Aplikasi Web
2.3.3
Penggunaan Konsep Objek dan MVC dalam Aplikasi Web
Pendekatan pemrograman berorientasi objek tidak terlihat secara nyata sebagai cara untuk menyederhanakan masalah. Pengembangan aplikasi berorientasi objek mungkin terlihat sebagai masalah baru yang lebih besar. Bagi pengembang aplikasi web, pendekatan objek bisa menjadi sebuah komplikasi baru terhadap masalah yang sudah rumit [LAV06]. Pendekatan objek bisa disimpulkan sebagai langkah menggunakan apa yang sudah ada dan tidak perlu menulis ulang. Sebuah objek yang sudah ada bisa
II-17
digunakan di mana saja, tanpa harus menulis ulang isi dari kode kelas objek tersebut seperti pada pemrograman prosedural. Dalam pengembangan web, konsep
objek
menyederhanakan
masalah
dengan
mengeliminasi
proses
penyuntingan ulang untuk mengadopsi kode yang sudah ada. Misalnya pada suatu proses pengambilan data dari basis data, kode yang ada tidak perlu disalin di setiap bagian yang membutuhkan akses basis data, tetapi cukup menggunakan objek akses basis data yang sudah ada. Beberapa keuntungan dari penggunaan konsep objek adalah [HAY07]: 1. Reusability Sebuah objek adalah entitas yang memiliki property dan method dan bisa berinteraksi dengan objek lain. Sebuah objek memiliki sebuah tanggung jawab tertentu. Dalam berbagai kondisi, apabila ada masalah yang bisa diselesaikan oleh objek yang sama, maka objek tersebut bisa dipakai berulang kali 2. Refactoring Ketika pengembang perlu untuk melakukan refactoring proyeknya, penggunaan objek sangan memberikan keuntungan karena semua objek merupakan
entitas
kecil.
Hal
ini
menyederhanakan
masalah
jika
dibandungkan dengan konsep prosedural yang tidak membagi-bagi kode menjadi entitas-entitas kecil. 3. Perawatan Kode berorientasi objek mudah dirawat karena mengikuti konvensi kode yang cukup ketat dan ditulis dengan format yang jelas. Selain itu, karena sifatnya yang terbagi-bagi menjadi entitas kecil, sangat mudah untuk melakukan perubahan dalam masing-masing kodenya.
II-18
4. Efisiensi Konsep pemrograman berorientasi objek sebenarnya dikembangkan untuk meningkatkan efisiensi dan kemudahan proses pengembangan. Beberapa pola perancangan dikembangkan untuk membuat suatu kode yang efisien. Dalam konsep objek dikenal model MVC yang merupakan singkatan dari ModelView-Controler. Model MVC yang skemanya ditunjukkan pada Gambar II-9 melakukan pemisahan antara pemodelan data, pengolahan data, dan antarmuka untuk interaksi dengan pengguna. Pemisahan ini akan memudahkan modularitas dari suatu aplikasi, terutama modularitas antarmukanya. Dengan menggunakan model MVC, setiap bagian akan memiliki tanggung jawab masing-masing dan terpisah satu sama lain. Selain itu, masing-masing bagian akan ter-enkapsulasi sehingga lebih memenuhi konsep objek itu sendiri. Pola MVC merupakan pola arsitektural
yang
umum
digunakan
dalam
aplikasi
web.
Pola
ini
merepresentasikan tiga logical layer dalam aplikasi web 3-tier.
Gambar II-9 Skema model MVC
Model dalam aplikasi web merepresentasikan business process layer. Bagian ini memodelkan data dan perilakunya pada proses bisnis dalam aplikasi. Model biasanya bertanggung jawab terhadap query yang dilakukan terhadap basis data, penghitungan dalam proses bisinis, dan pemrosesan data lainnya. Model
II-19
melakukan enkapsulasi data dan bersifat tidak terikat dengan cara menampilkan datanya. View dalam aplikasi web memodelkan layer presentasi. Fungsi dati view adalah menampilkan informasi sesuai dengan apa yang diminta oleh client. Informasi yang ditampilkan adalah hasil pengolahan data yang telah dilakukan oleh business process layer. Layer ini tidak bertanggung jawab terhadap sumber data yang dibutuhkan dan bagaimana pengolahan data yang dilakukan. Controller dalam aplikasi web berfuggsi sebagai penghubung antara interaksi pengguna dan business process layer. Controller merupakan layer yang bertanggung jawab atas pengambilan keputusan diantara banyak cara presentasi data. Request dari client ditangani dan diproses oleh controller. Pengambilan keputusan mengenai apa yang akan diproses dan apa hasil yang akan diperlihatkan ke client dilakukan oleh controlller. Secara umum, alur kontrol dari pola MVC yang ditunjukkan dalam Gambar II-9 adalah sebgai berikut: 1. Pengguna berinteraksi dengan antarmuka dengan cara tertentu. 2. Controller menangani masukan pengguna melalui antarmuka. 3. Controller memberikan notifikasi pada model. Proses ini mengubah status dari model. 4. View menampilkan data dengan memanfaatkan model secara tidak langsung. Dalam hal ini, model dan controller tidak mengetahui bagaimana data tersebut ditampilkan. 5. Antarmuka menunggu kembali respon dari pengguna. Proses ini akan dilanjutkan ke proses nomor 1 dan semua proses akan terus berulang selama aplikasi masih berjalan. Ketiga komponen tersebut tidak selalu dipisah sebagai tiga objek fisik yang berbeda. Ada kasus dimana layer-layer harus digabung dalam satu komponen aplikasi [SHI08]. Tetapi, melihat layer-layer tersebut sebagai komponen-
II-20
komponen terpisah akan lebih menguntungkan karena kita dapat menampilkan data dengan cara yang berbeda tanpa harus mengubah struktur keseluruhan aplikasi. 2.3.4
Implementasi Objek dalam PHP
PHP merupakan sebuah bahasa scripting [LAV06]. Pada awalnya konsep objek tidak diterapkan dalam PHP. Pada versi ketiga yang dirilis pertengahan tahun 1998, kemampuan untuk melakukan dasar-dasar pemrograman berorientasi objek mula ditambahkan dalam PHP. Ketika versi keempat dirilis, tidak ada perkembangan yang signifikan dalam penerapan model objek di PHP. Hanya dasar dari objek seperti pembuatan kelas dan turunan dari sebuah kelas sudah didukung. Ketika PHP5 dirilis pada tahun 2004, ada banyak ruang untuk pengembangan kemampuan objek dalam PHP. Konsep objek sudah hampir seluruhnya diimplementasi pada PHP5. Dalam PHP5, sudah didukung proteksi data dalam objek, tidak seperti PHP versi sebelumya di mana semua elemen dari kelas dapat diakses secara publik. Selain itu, PHP5 juga sudah menyediakan kelas-kelas standar yang bisa digunakan langsung oleh pengembang. Sintaks pemrograman objek dengan PHP tidak jauh berbeda dengan bahasa pemrograman lainnya, mulai dari deklarasi kelas, properti, dan method. Yang berbeda adalah, semua method di PHP bersifat sebagai fungsi yang bisa mengembalikan nilai ataupun tidak. Dalam Error! Reference source not found. ditunjukkan contoh deklarasi sebuah kelas dalam PHP. //class KelasA class KelasA extends KelasParent implements InterfacA{ const constant_a; private $properti_a; private $properti_b; function __construct() { //Konstruktor }
II-21
function __destruct() { //dekonstruktor }
public function functionA () { //Isi functionA //contoh method fungsi return ($properti_a + $properti_b); } public function procedureA ($parameter_a) { //Isi procedureA //contoh method prosedur } public funtion f_implement() { } } ?>
Kode II-6 Contoh Kode Kelas dalam PHP
Pada Kode II-6 diperlihatkan contoh sebuah kelas yang bernama KelasA yang merupakan turunan dari KelasParent. KelasA juga mengimplementasi suatu interface, yaitu InterfaceA. KelasA memiliki 2 properti, yaitu properti_a dan properti_b dan sebuah konstatnta constant_a. Selain itu, kelas tersebur
memiliki sebuah konstruktor dan dekonstruktor serta 2 method bernama functionA() yang mengembalikan suatu nilai dan procedureA() yang
merupakan sebuah prosedur yang tidak mengembalikan nilai. Sebuah kelas bisa bersifat abstrak dengan menambahkan keyword abstract. Kelas-kelas dan method dalam PHP juga dapat ditambahakan keyword final untuk memproteksi kelas agar tidak bisa diturunkan dan proteksi method aga tidak bisa di-override. Untuk melakukan reference ke objek lain, digunakan sintaks include atau include_once yang sudah biasa dipakai dalam pemrograman prosedural PHP.
Kelas yang sudah dibuat dapat langsung di-load secara otomatis dengan fungsi
II-22
__autoload(). Instansiasi dan invokasi method suatu objek ditunjukkan dalam
Kode II-7. $param_input = 1; $objek_a = new KelasA(); $objek_a->procedureA($param_input); Kode II-7 Instansiasi Objek dan Invokasi Method dalam PHP
Selain fitur-fitur umum yang telah disebutkan, masih banyak lagi fitur umum yang bisa digunakan dalam pemrograman objek dengan PHP, seperti penggunaan exception, properti dan method statik, iterator, dan serialization. 2.3.5
Framework PHP yang menggunakan Model MVC
Penggunaan model MVC bisa digunakan dalam PHP dengan menggunakan sebuah
framework.
mengimplementasikan
Ada model
banyak MVC.
framework Contoh
PHP
framework
yang PHP
sudah yang
mengimplementasi model MVC adalah CodeIgniter, CakePHP, atau Zend. Selain menggunakan framework yang sudah ada, pengembang juga dapat membuat framework PHP dengan MVC sendiri. Dengan menambahkan beberapa pengaturan dalam konfigurasi PHP-nya, pengembang dapat membuat framework PHP berkonsep MVC sendiri. Dalam subbab ini akan dibahas salah satu framework yang cukup populer, yaitu CodeIgniter 2.3.5.1 Arsitektur CodeIgniter Salah satu framework yang cukup populer dan relatif mudah untuk digunakan adalah
CodeIgniter.
Framework
ini
merupakan
framework
PHP
yang
menggunakan arsitektur MVC. Dalam CodeIgniter, alur aplikasi yang dibuat ditunjukkan dalam Gambar II-10. Penjelasan alur tersebut adalah sebagai berikut [COD09]: 1. File index.php berfungsi sebagai controller utama yang akan menginisiasi resource dasar yang dibutuhkan untuk menjalankan aplikasi.
II-23
2. Router memeriksa HTTP request yang diberikan untuk menentukan apa yang harus dilakukan dengan request tersebut. 3. Apabila terdapat file cache, maka file tersebut langsung dikirimkan ke browser dengan melewatkan eksekusi secara normal 4. Sebelum controller aplikasi diaktifkan, HTTP request akan diperiksa keamanannya oleh modul security dan data pengguna disaring terlebih dahulu. 5. Controller akan mengaktifkan model, library, helper, plugin, dan resource lain yang dibutuhkan terhadap request yang diberikan. 6. Setelah request diproses, view akan di-render dan dikirimkan ke browser untuk diperlihatkan pada pengguna. Apabila caching aktif, maka komponen view akan disimpan dalam cache terlebih dahulu agar request yang sama dapat diproses lebih cepat.
Gambar II-10 Arsitektur CodeIgniter
CodeIgniter menyediakan beberapa library yang dapat digunakan dalam pengembangan aplikasi web. Library yang akan disediakan antara lain validasi form, pembuatan file ZIP, library pembuatan HTML, library yang menangani proses upload dan download, dan library lain yang biasa digunakan dalam pembuatan aplikasi web. 2.3.5.2 Struktur Kode dalam CodeIgniter Dalam pengembangan aplikasi web menggunakan framework CodeIgniter, pengembang hanya perlu membuat 3 komponen, yaitu kelas controller, kelas model apabila ada data yang dimodelkan, dan kelas view untuk membuat suatu
II-24
modul aplikasi web yang bisa langsung dijalankan. Struktur kode dari masingmasing kelas adalah sebagai berikut: 1. Kelas Controller Dalam kelas controller, sebuah fungsi merupakan sebuah halaman web yang dapat diakses melalui alamat tertentu. Misalnya sebuah fungsi yang bernama fungsi_1
dapat
diakses
dengan
alamat:
http://server_web/nama_aplikasi/nama_controller/fungsi_1/parameter1/param eter2/. selain fungsi yang mewakili alamat web tadi, juga dapat didefinisikan fungsi yang bersifat private dengan menambahkan tanda underscore (“_”) di depan nama fungsi. Dalam Kode II-8 ditunjukkan struktur kelas controller dalam CodeIgniter. Sebuah kelas berjenis controller merupakan turunan dari kelas dasar Controller milik CodeIgniter. Setiap kelas Controller disimpan dalam sebuah file yang diberi nama sama dengan nama kelasnya. File tersebut disimpan dalam direktori controllers pada framework CodeIgniter. Kode II-8 Struktur Kelas Controller dalam CodeIgniter
II-25
2. Kelas Model Kelas model dalam codeigniter sama strukturnya dengan kelas controller yang ditunjukkan dalam Kode II-8. Hal yang membedakan adalah, kelas model ini merupakan turunan dari kelas dasar Model milik CodeIgniter. Sama seperti kelas Controller, setiap kelas model ditulis dalam sebuah file bernama sama dengan nama kelas. File tersebut disimpan di direktori bernama models pada framework CodeIgniter. 3. Kelas View Kelas view dalam CodeIgniter tidak diimplementasikan dalam sebuah kelas yang merepresentasikan objek. View merupakan sebuah halaman web yang menggunakan format HTML disisipi oleh kode PHP untuk menampilkan data yang diberikan oleh kelas controller. Jadi, bagian view dalam CodeIgniter bukanlah sebuah kelas, melainkan halaman web yang akan di-load oleh controller untuk keperluan tampilan aplikasi. Nama file tempat disimpannya view-view ini juga tidak tergantung pada nama kelasnya. Setiap file view ini disimpan dalam direktori views pada framework CodeIgniter. Untuk menjalankan aplikasi yang menggunakan CodeIgniter, pengguna juga perlu mengatur konfigurasi dari CodeIgniter. Konfigurasi tersebut terletak pada direktori config. Setelah konfigurasi basis data dan konfigurasi web diatur, barulah aplikasi dapat diakses melalui browser web.