Relasi One-To-Many Pada Objek Database

Untuk mengimplementasikan relasi one-to-many pada pemrograman terstruktur dengan sistem basis data relasional diperlukan sebuah tabel detil karena dalam satu field tidak boleh berisi lebih dari satu item. Namun pada pemrograman berorientasi objek dapat dihandel oleh sebuah kelas dengan format atribut array. Misalnya kelas kursus yang berisi lebih dari satu peserta kursus berikut ini.

Salah satu atribut kursus adalah peserta yang merupakan sebuah objek dari kelas siswa. Simbol kurung “[]” menandakan bahwa kelas Kursus bisa memiliki lebih dari satu objek peserta kursus, yang dalam ERD sistem relasional dikenal dengan relasi one-to-many. Bagaimana dalam implementasinya di Netbeans?

Memakai Atribut dari Kelas Lain

Pada kelas kursus terdapat atribut “peserta” yang berasal dari kelas Siswa. Karena menggunakan atribut maka terdapat relasi memiliki dari kelas Kursus terhadap kelas Siswa, diistilahkan dengan relasi “has-a”. Bandingkan dengan relasi antara kelas Main dengan Kursus yang berupa penggunaan saja (mengatur/maintain kursus), diistilahkan dengan relasi “is-a”. Berikut potongan kode dalam bahasa Java untuk kelas yang menggunakan objek dari kelas Siswa (peserta).

public class Kelas {
private String kode,jadwal;
private Siswa[] peserta;
private int i;
//konstruktor
public Kelas(){
this.peserta=new Siswa[5];
}
public Kelas(String kode, String jadwal, Siswa[] peserta){
this.kode=kode;
this.jadwal=jadwal;
this.peserta=peserta;
}

Perhatikan variabel peserta diambil dari kelas Siswa (private Siswa[] peserta). Selanjutnya ditambah dengan setter & getter serta operasi-operasi lainnya. Pada konstruktor kelas misalnya dibatasi lima peserta kurus saja (this.peserta=new Siswa[5];). Operasi penting untuk menangkap data objek Kelas adalah sebagai berikut.

public void add(Siswa s){
if(i<peserta.length){
peserta[i]=s;
System.out.println(“Siswa add at index “+i);
i++;
}
System.out.println(“Peserta: “+peserta);
}
public void add3(String jadwal){
this.jadwal=jadwal;
}
public void add2(String kode){
this.kode=kode;
}

Peserta kursus memanfaatkan variabel I untuk menambah beberapa kali (dalam hal ini max 5). Operasi lainnya juga disertakan untuk menambahkan kode kelas dan jadwalnya. Jika dilihat di navigation pada Netbeans tampak seperti berikut ini.

Dua operasi CRUD (insertData dan readData) misalnya dimasukan. Sebaiknya seluruh CRUD dimasukan juga (update dan delete). Variabel I: int digunakan untuk memasukan peserta kursus yang lebih dari satu.

Kelas Siswa seperti biasa dibuat dengan atribut dan operasi tertentu. Buat CRUD yang lengkap seperti contoh berikut. Untuk akses ke basis data objek dengan operasi CRUD silahkan lihat pos yang lalu.

Kelas Main

Kelas ini hanya contoh interface untuk mendaftarkan kelas beserta pesertanya. Dalam implementasi biasanya menggunakan form/frame.

ObjectContainer db = Db4oEmbedded.openFile(“C:/Users/Herlawati/Documents/NetBeansProjects/com.kursus/kursus.yap”);
Kelas kel = new Kelas();
//siswa pertama
Siswa sis = new Siswa();
sis.setKodesiswa(“03”);
ObjectSet<Object> result = db.queryByExample(sis);
Siswa m1 = (Siswa) result.next();
System.out.println(“ketemu siswa nama: “+m1.getNama()+” kode “+m1.getKodesiswa());
System.out.println(m1);
kel.add(m1);
//siswa kedua
Siswa sis2 = new Siswa();
sis2.setKodesiswa(“04”);
ObjectSet<Object> result2 = db.queryByExample(sis2);
Siswa m2 = (Siswa) result2.next();
System.out.println(“ketemu siswa nama: “+m2.getNama()+” kode “+m2.getKodesiswa());
System.out.println(m2);
kel.add(m2);
//input atribut Kelas
kel.add3(“senin dan selasa”);
kel.add2(“kode3”);
db.close();
kel.insertData();
kel.readData();

Ada satu Kelas dengan dua peserta ditambahkan dengan kode di atas, pastikan ketika dieksekusi akan menghasilkan jawaban yang mengindikasikan data tersimpan.

Siswa dengan kode 03 dan 04 dicari terlebih dahulu dari kelas Siswa. Tentu saja sudah dimasukan terlebih dahulu beberapa objek Siswa. Fungsi Add akan memasukan siswa secara multivalue ke objek Kelas. Setelah atribut kelas (jadwal dan kode kelas) ditambahkan (operasi add2 dan add3) maka operasi insertData akan memasukan objek Kelas yang baru saja didaftarkan secara permanen ke sistem basis data objek. Butuh penjelasan yang detil, tetapi secara garis besar langkah-langkah di atas bermaksud menjelaskan prinsip kerja objek, baik instan (temporer) maupun persistence (permanen). Semoga bermanfaat.

Membuat Kelas Transaksi dengan Basis Data Objek

Mirip dengan tabel master dan tabel transaksi pada basis data relasional, pada pemrograman berorientasi objek membutuhkan juga tabel transaksi yang melibatkan lebih dari dua tabel. Sebagai contoh adalah mahasiswa yang mendaftarkan kelas yang diikutinya lewat kelas registrasi. Di sini kelas registrasi memerlukan kelas Mahasiswa dan kelas Kelas yang diikuti. Berikut kode untuk membuat kelas Kelas.

public class Kelas {
String kodemk;
String namamk;
int sks;
public Kelas(String kodemk, String namamk, int sks){
this.kodemk=kodemk;
this.namamk=namamk;
this.sks=sks;
}
public void display(){
System.out.println(“Kode MK: “+kodemk+”| Nama MK: “+namamk+” | Jlh SKS: “+sks+”SKS”);
}
}

Seperti biasa tiap kelas memiliki nama, atribut dan operasi. Karena hanya sebagai latihan, pada kelas ini tidak dimasukan kelas untuk operasi create, read, update and delete (CRUD). Hanya operasi display yang disertakan untuk memunculkan atribut-atribut kelas Kelas antara lain: kodemk, namamk, dan sks yang berturut-turut bertipe string, string, dan integer.

Dengan cara yang sama kita bisa membuat kelas Mahasiswa dengan atribut: nama, usia, dan jurusan. Tentu saja hanya sekedar contoh, karena biasany membutuhkan juga nomor pokok mahasiswa (NPM), alamat, ipk, dan lain-lain. Lanjut saja ke bagian penting, yaitu kelas Registrasi yang berfungsi mengakomodir Mahasiswa yang medaftarkan kelas mata kuliah tertentu. Berikut kode pada kelas Registrasi yang dibuat cepat dengan IDE Netbeans 8.

public class Registrasi {
private String noreg;
Mahasiswa m;
Kelas kls;
public Registrasi(String noreg, Mahasiswa m, Kelas kls){
this.noreg=noreg;
this.m=m;
this.kls=kls;
}
public void display(){
System.out.println(“No Reg: “+noreg);
kls.display();
m.display();
}
public void insertData() {
System.out.println(“* Insert data…”);
ObjectContainer db;
db = Db4oEmbedded.openFile(“<folder>/mahasiswadb.yap”);
try {
Registrasi reg = new Registrasi(noreg,m,kls);
db.store(reg);
System.out.println(“Stored “+reg);
}
finally {
db.close();
}
}
}

Kelas Registrasi ini memiliki atribut: noreg, m, dan kls yang merepresentasikan berturut-turut nomor registrasi, mahasiswa dan kelas. Ada operasi display() yang berisi display dari kelas yang terlibat (Mahasiswa dan Kelas). Satu kelas penting lainnya adalah insertData() yang menyimpan data objek registrasi ke basis data agar tersimpan secara permanen (persistence). Terakhir di kelas Main masukan kode contoh berikut.

public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Mahasiswa m = new Mahasiswa(“Rahmadya”,43,”Teknik Komputer”);
Kelas kls = new Kelas(“FIS-1″,”Fisika”,3);
Registrasi reg = new Registrasi(“01/mei/2019”,m,kls);
reg.display();
reg.insertData();
}
}

Pertama-tama objek mahasiswa dibentuk dengan atributnya lengkap. Demikian pula objek Kelas yang berisi kode kelas, nama kelas dan jumlah SKS. Terakhir objek registrasi yang berisi nomor registrasi beserta objek yang terlibat (diberi nama variabel m dan kls) dibentuk. Objek registrasi selain ditampilkan lewat operasi display() juga disimpan ke basis data lewat operasi insertData(). Jika dijalankan dengan menekan tombol segitiga hijau akan menghasilkan output di bawah ini.

Coba buka file basis data objek “mahasiswadb.yap” dengan notepad dan pastikan terisi objek yang baru saja disimpan lewat instruksi db.store(reg) di atas.

Postingan ini menggunakan Netbeans dengan Object Database Management System (ODBMS) DB4O yang masih jarang digunakan. Biasanya pengembang menggunakan kelas dan objek yang disimpan dalam Relational Database Management System (RDBMS). Silahkan searching ebook tentang DB4O yang banyak beredar di internet. Untuk buku sejenis yang berbahasa Indonesia saya masih mencoba menulis, semoga segera selesai

Problem CRUD pada Pemrograman Berorientasi Objek

Problem Create, Read, Update, dan Delete (CRUD) pada PBO dikenal dengan istilah impedance mismatch. Hal ini terjadi karena pemrograman terstruktur dengan karakternya yang menggunakan database relasional menggunakan prinsip pemisahan antara data dengan program. Sementara itu PBO dalam satu kelas memadukan data dan program. Dalam hal ini data berupa atribut, sementara programnya berupa method/operasi. Kontroversi kerap terjadi, biasanya untuk programmer-programmer yang biasanya menangani program-program nonobjek, yang menganjurkan CRUD terpisah dari kelas-nya (lihat di sini). Terutama yang sering menggunakan framework maupun bertipe service oriented architecture (SOA), cenderung memasukan CRUD ke layer service. Atau programmer yang menerapkan Object Relational Database Management System (ORDBMS).

Gambar berikut dikutip dari sumber materi PBO link ini. Tampak pada kelas Customer, kelas ini memiliki operasi bernama +add(name,phone) yang bertugas memasukan pelanggan baru. Operasi yang berada dalam sebuah kelas sebenarnya memperkuat konsep PBO yaitu encapsulation dimana kelas lain tidak bisa mengutak-atik kelas tertentu. Untuk menambah pelanggan, dalam kelas Customer harus lewat operasi +add pada kelas tersebut, tidak seperti database relasional yang menggunakan akses dari luar lewat injeksi SQL (insert into Customer).

Jadi sejatinya CRUD pada objek terletak di bagian operasi kelas yang bersangkutan, jika ingin prinsip encapsulation tetap dipegang. Hal ini bisa dijalankan untuk Object Database Management System (ODBMS) murni dengan basis data objek seperti DB4O (lihat pos yang lalu) atau tipe no-sql seperti MongoDB. Interface yang mengirimkan data yang harus diubah pada PBO hanya berupa pesan (message), misalnya pada diagram kelas di atas ingin menambah satu pelanggan baru maka interface yang biasanya form/frame memberikan pesan ke kelas Customer agar menjalankan operasi +add(name,phone) untuk menambah satu data pelanggan baru dengan name dan phone tertentu (dari isian form/frame). Mungkin pembaca tidak setuju, boleh saja, toh antara konsep PBO dengan terstruktur termasuk antara database relasional dan objek pun bisa dikombinasikan. Terkadang antara teori dengan aplikasi/penerapan perlu kompromi.

Quiz Dasar-Dasar Pemrograman Berorientasi Objek

Perhatikan gambar di bawah ini sebagai latihan mengetahui istilah-istilah dasar pemrograman berorientasi objek.

Diagram di atas dikenal dengan nama ….(1)…. diagram. Hubungan Person dengan Mahasiswa dikenal dengan istilah ….(2)…. . Sementara itu relasi Mahasiswa dengan Utama dikenal dengan istilah ….(3)…. Atribut dari kelas Person adalah ….(4)…. dan ….(5)…. Simbol “-” dikenal dengan istilah ….(6)…. Sementara “+” dikenal dengan istilah ….(7)…. Sebutkan atribut-atribut lengkap kelas Mahasiswa: ….(8)…. Sebutkan operasi-operasi yang bisa dijalankan oleh kelas Mahasiswa: ….(9)…. Utama tidak bisa digunakan untuk membentuk obyek dari kelasnya, dikenal dengan tipe kelas ….(10)…. Kelas Utama tidak bisa merubah nama, usia, dan jurusan dari sebuah obyek Mahasiswa tanpa melewati operasi setJurusan(), setNama(), dan setUsia(), dikenal dengan konsep ….(11)… n. Sebuah obyek Mahasiswa dapat dibentuk dengan bantuan operasi otomatis yang dikenal dengan nama ….(12)…r. Obyek tersebut hanya sementara di random access memory (RAM), dikenal dengan istilah i…(13)…. Maka perlu disimpan dalam sistem basis data, misalnya DB4O atau database relational lainnya, istilah penyimpanan permanen ini dalam PBO dikenal dengan nama p…(14)…n.

Jawaban: (1) class, (2) inheritance/pewarisan atau bisa juga generalisasi, (3) association/asosiasi, (4) nama, (5) usia, (6) private (7) public, (8) nama, usia, dan jurusan, (9) getNama(), setNama(), getUsia(), setUsia(), getJurusan(), setJurusan(), greetings(), bio(), insertData(), (10) abstract/abstrak, (11) encapsulation, (12) constructor, (13) instance/instan, (14) persistence.

Untuk lebih lengkapnya silahkan kunjungi situs-situs yang berisi tes-tes dasar pemrograman berorientasi objek berikut ini. Banyak kontroversi-kontroversi yang muncul di sisi praktisi, misalnya insertData() yang terpisah dari kelas Mahasiswa pada conoh di atas. Ada yang berpendapat terpisah (karena business logic) tetapi teori dasarnya object-oriented tidak memisahkan program dan data (prinsip impedansi/impedance).

Instal Netbeans di Ubuntu

Netbeans merupakan salah satu Integrated Development Environment (IDE) terkenal untuk pemrograman. Bahasa yang digunakan adalah Java, walaupun di dalamnya bisa juga PHP dan C++. Netbeans merupakan opensource dan dengan gratis dapat diinstal baik lewat platform Windows maupun Linux. Jika ingin murni opensource, instalasi pada Linux merupakan pilihan utama. Postingan ini sedikit men-share instalasi Netbeans pada Linux, khususnya Ubuntu.

Download Netbeans

Jika Netbeans diunduh dengan browser Mozilla pada Ubuntu di link ini, maka otomatis situs tersebut memberikan pilihan platform Linux. Simpan file unduhan tersebut di Ubuntu. Untuk mudahnya pilih All yang artinya seluruh fasilitas yang ada dipilih. Jangan khawatir, ukuran file hanya sekitar 200-an Mb.

Instal JDK

JDK yang sebaiknya versi 8 harus telah terinstal sebelum Netbeans hasil unduhan dipasang. Salah satu situs yang cukup jelas menginstal JDK adalah di sini. Di situs tersebut juga diajari cara menginstal Netbeans lewat terminal, tetapi di Ubuntu saya entah mengapa tidak berhasil meng-create new project. Tapi untuk menginstal JDK bisa berjalan. Dan pastikan JDK terpasang dengan menulis instruksi berikut pada terminal:

javc -version

Instal Netbeans

Akhirnya kita sampai tahap terakhir yaitu instalasi Netbeans yang kode sumbernya telah diunduh. Perhatikan nama file-nya, misalnya yang saya unduh bernama: netbeans-8.0-linux.sh. Juga lokasinya, biasanya pada folder Downloads. Pindahkan saja ke Documents atau folder lain. Ketik dua script berikut ini yang berturut-turut memberikan akses ke file hasil unduhan dan menjalankannya:

chmod +x netbeans-8.0-linux.sh
sudo ./netbeans-8.0-linux.sh

Ketika tulisan ini dibuat, Netbeans masuk versi 10 yang namanya berganti Apache Netbeans. Ada juga versi 8.2, tetapi di sini saya unduh yang di bawahnya sedikit (versi 8.0). Berikutnya tidak perlu dijelaskan di sini karena ketika jendela instalasi Netbeans muncul maka tinggal tekan Next saja hingga selesai. Uji dengan membuat project baru, jika berhasil muncul maka Netbeans telah diinstal dengan benar. Selamt ber-opensource.

Membuat Database Objek (file *.yap) dengan DB4O

[PBO|TK&TI|PERT3]

Database objek memiliki keunikan tersendiri jika dibandingkan dengan database relasional. Database ini memasukan sebuah operasi ke dalam data objek, sementara database relasional hanya memasukan atribut saja. DBMS yang kebanyakan beredar saat ini menggunakan jenis relasional walaupun beberapa sudah mulai mengombinasikan dengan database objek dalam bentuk Object Relational Database Management System (ORDBMS). Namun beberapa pengembang objek merasa tidak puas dengan kinerjanya karena ketika menggunakan harus merakit menjadi sebuah objek sementara ketika selesai digunakan dibongkar lagi untuk dimasukan ke dalam sistem basis data relasional.

Salah satu alternatif DBMS jika akan menggunakan murni sistem berorientasi objek adalah DB4O. Postingan ini sedikit membahas apa saja yang dibutuhkan untuk mempraktekan program berorientasi objek.

Bahasa Pemrograman

Ada dua kubu yang mempraktekan bahasa pemrograman berbasis objek, antara lain: dotnet dan java. Dotnet di sini biasanya menggunakan bahasa C# dalam suatu IDE terkenal visual studio. Sementara untuk yang opensource dipelopori oleh Java dengan IDE yang terkenal netbeans dan eclipse.

Sistem Basis Data

Silahkan unduh DB4O, yang merupakan singkatan dari Database For Object. Bentuk DB4O adalah Jar file yang ketika tulisan ini dibuat sudah masuk versi 8. Searching saja di Google maka kita dapat dengan mudah mengunduh db4o tersebut.

File Database

Berbeda dengan basis data relasional yang ketika membuat basis data harus menggunakan Data Definition Language (DDL), pada db4o mudah saja, siapkan saja satu file dengan nama ekstensi standar *.yap. Walaupun bisa dengan nama lain, alangkah baiknya menggunakan nama standar *.yap karena agar terhindar dari konflik dengan nama database lain seperti MySQL, SQL Server,Oracle, dll.

Praktek dengan Netbeans

Salah satu IDE Java yang mudah digunakan adalah Netbeans walaupun sepertinya berat ketika dibuka. IDE ini bisa berjalan dengan baik di sistem operasi Windows maupun linux, misalnya Ubuntu. Untuk praktek, siapkan terlebih dahulu Netbeans dan DB4O. Berikut hasil uji coba untuk meng-insert sebuah objek baru dari sebuah kelas yang ada pada db4o. Langkah-langkahnya antara lain:

  • Import jar basis data db4o
  • Masukan nama basis data [1]
  • Buat objek baru [2]
  • Jalankan (RUN) [3]
  • Lihat hasilnya [4]

Sekian, semoga postingan ini bisa menarik minat untuk mempelajari basis data objek lebih lanjut.

Konsep Inheritance pada Objek – bag 2

[pbo|t.inf&t.komputer|pert.2]

Postingan ini kelanjutan dari postingan yang lalu tentang pewarisan. Sedikit diulang, inheritance artinya sebuah kelas mewarisi kelas lain yang merupakan induknya. Karakter ini merupakan kekhasan pemrograman berorientasi objek. Langsung saja praktek, sebagai ilustrasi adalah kelas Person yang akan mewarisi kelas Teacher. Ada ungkapan “dosen juga manusia”, nah untuk inheritance juga sama, Teacher juga Person yang mewarisi ciri-ciri seorang manusia tetapi memiliki ciri-ciri lain yang tidak dimiliki oleh manusia lainnya.

class with visio

Di sini diambil contoh kelas Person memiliki atribut: nama, umur, dan hobi dengan operasi: bio() dan greeting() yang masing-masing jika dipanggil berturut-turut memunculkan alert biografi dan kata sambutan dari objek yang bersangkutan. Buka mozilla dan masuk developer dengan menekan ctrl-shift-k agar muncul jendela developer. Buat sebuah kelas person:

function Person(first, last, age, gender, interests) {
this.name = {
‘first’: first,
‘last’ : last
};
this.age = age;
this.gender = gender;
this.interests = interests;
this.bio = function() {
alert(this.name.first + ‘ ‘ + this.name.last + ‘ is ‘ + this.age + ‘ years old. He likes ‘ + this.interests[0] + ‘ and ‘ + this.interests[1] + ‘.’);
};
this.greeting = function() {
alert(‘Hi! I\’m ‘ + this.name.first + ‘.’);
};
}

Tambahkan sebuah objek baru dengan nama variable person1.

var person1 = new Person(‘Bob’, ‘Smith’, 32, ‘male’, [‘music’, ‘skiing’]);

Berikutnya buat kelas Teacher dengan karakteristik yang sama dengan Person hanya memiliki satu tambahan atribut yaitu subject dan satu operasi yaitu farewell().

function Teacher(first, last, age, gender, interests, subject) {
Person.call(this, first, last, age, gender, interests);
this.subject = subject;
}

Perhatikan kata kunci call yang memanggil atribut yang dimiliki kelas Person dan menandakan kelas Teacher tersebut mewarisinya. Hanya saja ada tambahan baru yaitu subject.

Teacher.prototype.farewell = function() {
alert(this.name.first + ‘ has left the building. Bye for now!’);
};

Perhatikan teknik menambah operasi di sebuah kelas, dengan kata kunci prototype. Biasanya bermanfaat ketika akan menambah operasi tidak sekalian membuat kelas (tambahan). Ok, berikutnya menguji kelas Teacher apakah mewarisi Person? Buat satu objek.

var teacher1 = new Teacher(‘Dave’, ‘Griffiths’, 31, ‘male’, [‘football’, ‘cookery’], ‘mathematics’);
Jalankan operasi:
teacher1.bio()
teacher1.farewell()

Uji dengan person1, apakah bisa menjalankan operasi person1.farewell? Seharusnya tidak karena hanya milik kelas Teacher, sementara Teacher bisa menjalankan operasi bio() milik induknya.

Pastikan alert muncul. Selamat mencoba, semoga bermanfaat.

Problem – Windows Can’t Find Target Pada Netbeans

Lama juga tidak menggunakan Netbeans, ternyata sudah versi 10, padahal dulu pakai yang versi 6. Kini menggunakan versi 8, itu pun sebagai pendukung perkuliahan “pemrograman berbasis objek”, terutama untuk bagian prakteknya. Saat mengimpor file Jar sistem basis data objek db4o ada pesan yang sedikit mengganggu berikut:

Terus terang agak membingungkan mengingat versi-versi sebelumnya tidak ada masalah. Tetapi ketika ditekan OK kira-kira beberapa kali, netbeans tetap berjalan sesuai dengan yang diinginkan. Mungkin ada sedikit “block” dari Windows, terutama windows 10 dengan platform 64 bit. Terbukti db4o berhasil ditarik ke paket yang akan digunakan (pada folder library).

Tampak db4o versi 7 yang baru saja diunduh dari sini berhasil ditarik ke Libraries walaupun beberapa kali muncul pesan mengganggu di atas. Yah, selama masih berjalan tidak apa-apa yang penting praktek tetap berjalan. Untuk membuktikannya ketika diketik instruksi import di bawah paket, bantuan muncul, menandakan library berjalan dengan baik.

Selain dengan Java (Netbeans, Eclipse, dll), db4o dapat berjalan juga di lingkungan .NET buatan Windows. Sepertinya ada sedikit persaingan dua platform itu. Semoga postingan ini bisa mengurai masalah ini minimal ada kasus seperti tersebut di atas yang mungkin saja terjadi kepada pembaca sekalian. Komentar berisi penyelesaian hal mengganggu ini tentu saja saya butuhkan, walaupun untuk sementara masih bisa berjalan.

Skripsi – Apa & Untuk Apa

[riset.ti|r.408|pert.1]

Skripsi dikenal juga dengan nama Final Project untuk jenjang Strata 1 (S1). Untuk jenjang diploma diberi nama tugas akhir. Skripsi terkadang menjadi momok yang menakutkan bagi para mahasiswa yang terkadang pula menyebabkan tidak selesainya perkuliahan seorang mahasiswa. Hal ini terjadi karena memang skripsi seperti layaknya sebuah proyek membutuhkan perencanaan yang matang, dengan tujuan tertentu dengan waktu yang jelas dan realistis dengan sumber daya yang terbatas (keuangan dan peralatan).

Manfaat Skripsi/Final Project

Terlepas dari penting atau tidaknya skripsi, ada manfaat yang bisa dipetik dari pelaksanaan skripsi:

  • Belajar lebih dalam. Ada peluang dengan skripsi seorang mahasiswa terpaksa belajar lebih dalam dibanding materi perkuliahan.
  • Langkah awal sebelum bekerja. Skripsi mempersiapkan mahasiswa untuk terjun dalam kehidupan/problem nyata dengan mempraktekan keahlian/skill yang diterima selama perkuliahan.
  • Mempersiapkan kelanjutan studi. Skripsi juga sebagai persiapan seorang mahasiswa jika ingin lanjut ke jenjang yang lebih tinggi dengan lebih mengeksplor permasalahan serta belajar melakukan proses-proses penelitian.

Atau dengan bahasa yang sederhana, skripsi memiliki dua tujuan utama yaitu dari sisi edukasi (critical thinking, kemampuan bekerja independen, kemampuan menerapkan metode ilmiah, dan kemampuan mengungkapkan ide baik lisan maupun tulisan) dan aspek penelitian dimana mahasiswa turut berkontribusi mengembangkan IPTEK dengan mengisi gap penelitian (research gap) yang ada. Poin penting adalah pada critical thinking yang mengharuskan mahasiswa tetap berfikir logis dan sistematis.

Aktor yg Terlibat

Pemain utama skripsi adalah mahasiswa yang bersangkutan. Berikutnya adalah dosen pembimbing (supervisor) dan dewan penguji (examiner). Interaksi yang positif diantara ketiganya dapat meningkatkan kualitas dari skripsi yang dilaksanakan. Tentu saja ada aktor-aktor tambahan lain yang mendukung seperti laboran, research collaborator, research participants, dll.

Proses Penelitian

Ada banyak variasi proses pengerjaan skripsi. Biasanya langkah awal adalah masalah administratif yang merupakan otonomi kampus masing-masing. Namun secara garis besar tahapan-tahapan yang selalu dilalui antara lain:

  • Menyusun proposal
  • Mendeskripsikan permasalahan
  • Mengikuti tujuan/objektif skripsi
  • Mengumpulkan dan menganalisa data
  • Membuat kesimpulan dan merancang/mengidentifikasikan riset ke depan
  • Mempresentasikan hasil penelitian dan mempertahankan ide di sidang secara lisan
  • Menyusun dan merevisi laporan akhir/final

Kriteria Keberhasilan

Keberhasilan sebuah final project sangat tergantung dari standar kampus masing-masing. Namun ada kriteria-kriteria standar yang biasanya selalu ada pada tiap-tiap institusi. Yang pertama adalah secara umum, hasil penelitian suatu mahasiswa:

  • Memiliki topik riset yang relevan
  • Topik yang orisinil
  • Temuan yang signifikan
  • Hasil pekerjaan si mahasiswa adalah yang utama

Hasil laporan juga merupakan kriteria penting baik atau buruknya sebuah skripsi:

  • Presentasi hasil yang jelas dan dapat diklarifikasi
  • Tiap bagian report konsisten
  • Argumentasi yang dipilih tepat
  • Mampu secara jelas memisahkan ide sendiri dengan ide orang lain (sitasi)
  • Mampu meramu pustaka dan sitasi
  • Gaya penulisan yang menarik

Selain itu mempertahankan sebuah ide/gagasan merupakan salah satu kriteria keberhasilan pula.

  • Ketepatan berargumentasi
  • Mampu mendiskusikan hasil sebagai respon terhadap permasalahan yang diangkat

Juga hal-hal lain yang tak kalah pentingnya bisa menjadi kriteria sukses atau tidaknya final project¸ seperti:

  • Bagaimana bersikap terhadap pihak yang tidak sependapat
  • Memenuhi tenggak waktu (deadline) dan persyaratan-persyaratan lain yang harus dipenuhi

Demikian pengantar bagi adik-adik yang sedang berjuang dalam kegalauan, siapa tahu bisa membantu untuk segera mempersiapkan diri.

Konsep Inheritance pada Objek – JavaScript

Salah satu kharakter khas dari pemrograman berorientasi objek selain konsep objek adalah konsep inheritance. Konsep ini seperti arti katanya, pewarisan, mirip dengan seorang anak yang mewarisi kharakter orang tuanya, tetapi juga memiliki karakter khas yang tidak dimiliki oleh orang tuanya itu.

Untuk mempraktekannya silahkan buka mozilla firefox lalu tekan ctr-shift-k untuk mengaktifkan jendela developer. Untuk membuat kelas objek, silahkan lihat postingan yang lalu.

function Person(first, last, age, gender, interests) {
// property and method definitions
this.first = first;
this.last = last;
this.age=age;
}

Perlu diketahui, fungsi dalam JavaScript merupakan salah satu tipe objek (silahkan lihat penjelasannya di link resminya). Berikutnya bangkitkan sebuah objek instan dengan nama person1.

var person1 = new Person(‘Bob’, ‘Smith’, 32, ‘male’, [‘music’, ‘skiing’]);

Ketika sebuah objek instan dipanggil maka JavaScript akan menyimpannya. Coba saja ketik person1 maka ketika ditekan titik (“.”) maka akan muncul bantuan seperti tampak pada gambar di bawah ini.

Tampak di atas “age”, “first”, dan “last” yang merupakan atribut yang pada definisi kelas Person diawali kata kunci this. Pilih valueOf() maka akan muncul:

person1.valueOf()
Object { first: “Bob”, last: “Smith”, age: 32 }

Object Constructor

JavaScript menggunakan kata kunci constructor untuk menjabarkan inheritance. Misalnya kita telah memiliki objek person1 dan akan membuat person3 yang mewarisi karakteristik dari person1 yang sudah dibuat sebelumnya.

var person3 = new person1.constructor(‘Karen’, ‘Stephenson’, 26, ‘female’, [‘playing drums’, ‘mountain climbing’]);

Di sini person3 memiliki atribut seperti di atas dengan mewarisi kelas Person. Silahkan ketik: person3.age, maka akan menampilkan 26 yang merupakan umur dari objek person3. Gambaran inheritance dapat dilihat di bawah ini.

Metaheuristic Optimization – Advanced

Metaheuristic pengertiannya telah sedikit diulas pada postingan yang lalu. Di sini sedikit diulas metode-metode yang dapat dikatakan advanced. Namun di sini advanced tidak serta-merta untuk tingkat lanjut melainkan sekedar memberitahukan metode-metode terbaru berdasarkan artikel-artikel jurnal yang sudah diterbitkan.

Metode heuristik terkini dapat diklasifikasikan berdasarkan aliran algoritma pencariannya, antara lain:

  • Mengambil inspirasi dari sifat-sifat alami (nature)
  • Mengambil inspirasi dari sifat-sifat fisika

Sifat-sifat yang diambil dari hukum alam telah banyak diteliti di metaheuristik, tetapi yang terkini dapat dirinci sebagai berikut:

  • PSO, bersasarkan sekolompok binatang dalam mencari makan
  • Dolphin     Echolocation (DE), berdasarkan teknik sonar yang dimiliki oleh lumba-lumba
  • Big Bang-Big Crunch (BB-BC), berdasarkan teori evolusi alam
  • Cuckoo Search (CS), berdasarkan sifat burung
  • Imperialist Competitive Algorithm (ICA)

Sementara itu ada algoritma-algoritma yang diambil dari sifat fisika, antara lain:

  • Charged System Search (CSS) dan Magnetic Charged System Search (MCSS), berdasarkan hukum Coulomb dan Newton
  • Colliding Bodies Optimization (CBO), berdasarkan tumbukan satu dimensi partikel
  • Ray Optimization (RO), berdasarkan hukum refraksi cahaya (snell)

Demikian kira-kira metode advanced metaheuristic yang bisa dibaca dari literatur-literatur baik jurnal maupun buku. Sekian informasinya, mudah-mudahan bisa dijelaskan lebih detil pada postingan berikutnya.

Membuat Kelas & Objek dengan JavaScript

JavaScript merupakan Script yang berjalan di browser yang memanfaatkan teknologi dari Java. Salah satunya adalah pemrograman berbasis objek (PBO). Objek berisi atribut seperti layaknya data atau record tabel, tetapi memiliki proses yang menyertai atribut-atributnya. Untuk memudahkan praktek membuat objek pada JavaScript sebaiknya menggunakan browser Mozilla karena memiliki fasilitas “developer”.

Jendela Developer

Untuk mengakses jendela developer pada mozilla dapat dilakukan dengan menekan Ctr-shif-K dan perhatikan akan muncul jendela di bagian bawah mozilla. JavaScript akan langsung dieksekusi Mozilla ketika sebuah script ditulis di jendela developer tersebut tanpa membutuhkan bantuan file HTML.

Membuat Kelas Objek

Objek-objek dengan karakteristik sejenis dapat dikumpulkan dalam satu kelas yang sama misalnya kelas dosen, kelas mahasiswa, kelas mata kuliah, dan lain-lain. Berikut ini kita coba membuat satu kelas dengan nama Person yang berisi atribut-atribut: first, last, age, gender, dan intersets dengan satu operasi menampilkan salam/greetings. Masukan script berikut di jendela developer pada mozilla. Lihat tutorial resminya.

function Person(first, last, age, gender, interests) {
this.name = {
‘first’: first,
‘last’ : last
};
this.age = age;
this.gender = gender;
this.interests = interests;
this.bio = function() {
alert(this.name.first + ‘ ‘ + this.name.last + ‘ is ‘ + this.age + ‘ years old. He likes ‘ + this.interests[0] + ‘ and ‘ + this.interests[1] + ‘.’);
};
this.greeting = function() {
alert(‘Hi! I\’m ‘ + this.name.first + ‘.’);
};
}

Note: Sepertinya kalau copas kode di atas, tanda petik single harus diketik ulang. Parameter “this” mengartikan suatu variabel milik pemilik objek yang bersangkutan, misalnya this.age berarti variabel “age” yang dimaksud berasal dari objek Person yang bersangkutan. Misal kita memasukan satu objek baru dari kelas Person tersebut.

var person1 = new Person(‘Bob’, ‘Smith’, 32, ‘male’, [‘music’, ‘skiing’]);

Kode di atas memasukan satu objek person1 dari kelas Person. Tampak nama depan, belakang, usia, jenis kelamin, dan hobinya. Bagaimana untuk melihat isi data beserta operasi yang mengiringi kelas Person? Ketik kode berikut ini di jendela developer mozilla.

person1[‘age’]
person1.interests[1]
person1.bio()

Instruksi di atas memunculkan “age”, “intersets” dan “bio”. Hasilnya akan memunculkan jendela berikut ini di mozilla.

Satu hal yang unik dari data objek di atas adalah operation yang muncul, dalam hal ini menambilkan jendela greeting di atas. Satu hal lain yang tidak dimiliki oleh data jenis relational adalah multivalue dalam hal ini contoh di atas memberikan hobi yang terdiri dari “music” dan “skiing” yang tentu saja dilarang dalam jenis data relational (jika ingin ditampilkan lebih dari dua hobi maka kode ada sedikit modifikasi di fungsi bio()). Sekian semoga bermanfaat.

Metaheuristic Optimization

Optimalisasi (optimization) merupakan usaha menemukan hasil maksimal (maximization) atau minimal (minimization), tergantung dari kasus yang ingin dioptimalkan. Besar atau kecilnya hasil optimalisasi berdasarkan hitungan sebuah fungsi yang dikenal dengan nama fungsi objective (terkadang untuk bidang RS-GIS lebih disukai fungsi kriteria – criteria function). Secara algoritmik fungsi objektif dikenal dengan istilah fitness function. Selain itu ada batasan-batasan (constraint) tertentu dalam mencapai harga optimal dari objective tersebut.

Deterministik atau Stochastic

Untuk mencapai nilai minimal/maximal fungsi objective beragam metode sudah dikembangkan. Secara garis besar metode-metode yang ada dibagi menjadi deterministic dan stochastic. Deterministic merupakan metode lama dengan bantuan gradient, khusus untuk fungsi-fungsi kontinyu. Di sekolah dulu kita pernah menghitung nilai minimal sebuah fungsi dengan menurunkan dan menyamakannya dengan nol (dikenal dengan metode Newton). Metode stochastic muncul ketika yang akan dioptimalisasi bukan fungsi kontinyu, tidak konvergen, tidak bisa diturunkan dan aspek-aspek analitis lainnya. Beberapa literatur-literatur terkini menyebut metode stochastic dengan sebutan baru yang dikenal dengan nama metaheuristic. Pertama kali istilah ini diperkenalkan oleh Fred Glover di tahun 1986. Dalam proses pencarian, ada dua aspek yang ingin dikejar, diversifikasi (focus ke global optimal secepatnya, dikenal dengan istilah exploration), dan aspek lokalitas untuk mencari yang benar-benar optimal di suatu wilayah tertentu (dikenal dengan sebutan exploitation). Dua aspek tersebut (exploration dan exploitation) harus dikompromikan untuk menghasilkan metode heuristik yang tepat.

Metaheuristic

Metaheuristic merupakan gabungan kata Meta dan Heuristic. Heuristic artinya mencari jawaban dengan cara trial & error sementara meta berarti melampaui atau tingkat yang lebih dari. Jadi metaheuristic tidak hanya mencari jawaban dengan coba-coba saja melainkan dengan bantuan atau arahan dari faktor-faktor lain. Faktor-faktor itulah yang membuat banyaknya variasi dari metaheuristic ini. Algoritma-algoritma metaheuristic yang banyak dikenal dan diterapkan antara lain:

1. Simulated Annealing

Metode ini meniru proses pendinginan baja yang dicor. Fungsi yang digunakan adalah fungsi eksponensial:

dengan kB konstanta Boltzmann dan T adalah suhu (kelvin). E merupakan energi yang perubahannya setara dengan perubahan fungsi objektif:

Dengan gamma konstanta yang biasanya berharga 1 untuk penyederhanaan.

2. Genetic Algorithm

Algoritma genetika diperkenalkan oleh John Holland di tahun 60-an. Metode ini meniru sifat alami evolusi dimana yang adaptif adalah yang optimal. Setelah fungsi objektif ditentukan, maka serentetan algoritma bekerja mencari nilai optimal fungsi tersebut. Keunikan metode ini adalah mengkombinasikan antar nilai sementara yang diperoleh dengan kawin silang (crossover) dan mutasi. Awalnya nilai-nilai tersebut harus di-encode menjadi biner agar beberapa bitnya bisa disalingtukarkan dengan nilai lainnya dan juga untuk mutasi. Namun saat ini banyak dikembangkan metode tanpa mengkonversi bilangan tersebut menjadi biner. Pemilihannya pun (selection) berdasarkan bentuk peluang (roulette wheel) dimana nilai yang memiliki harga fitness besar akan memiliki peluang yang besar pula.

3. Differential Evolution

Differential Evolution (DE) merupakan metode pengembangan dari algoritma genetika yang diperkenalkan oleh R. Storn dan K. Price di tahun 96-97. Jika pada algoritma genetika kromosom dalam bentuk biner, DE menggunakan vektor sebagai kromosom.

Mutasi, crossover, dan selection sedikit lebih rumit dari algoritma genetika. Secara detail silahkan buka makalah aslinya.

4. Ant Colony Optimization

Metode ini meniru prinsip semut dalam usaha mencari makanan. Semut menggunakan senyawa kimia bernama pheromone ketika berjalan. Jalur yang banyak dilalui semut akan memiliki konsentrasi pheromone yang lebih banyak. Penurunan fungsi konsentarasi pheronome adalah berikut ini.

Jika ada jalur yang memiliki konsentrasi pheromone melebihi jalur yang lain maka jalur ini dikatakan favorit dan umpan balik positif berlaku di sini dan lama kelamaan berlaku kondisi “self-organized”.

5. Bee Algorithms

Sesuai dengan namanya, algoritma ini mengikuti pergerakan lebah dalam mencari sumber materi pembuatan madu. Mirip dengan semut, tawon juga mengeluarkan pheromone yang disertai dengan tarian “waggle dance”. Bee algorithm dikembangkan oleh Moritz and Southwick 1992, Craig A Tovey, Xin-She Yang, dan lain-lain.

Turunan algoritma ini cukup banyak, antara lain: honeybee algorithm, artificial bee colony, bee algorithm, virtual bee algorithm, dan honyebee mating algorithm. Banyak dikembangkan untuk optimasi posisi tertentu dalam suatu jaringan (misal server).

6. Particle Swarm Optimization

Particle Swarm Optimization (PSO) meniru pergerakan sekelompok binatang (ikan, burung, dll) dalam mencari makanan. Berbeda dengan algoritma genetika yang berganti individu (punah, baru, dan mutasi), PSO menjaga jumlah kelompok individu dan hanya perubahan posisi saja. Algoritma ini dikembangkan oleh Kennedy dan Eberhart (lihat pos yang lalu).

PSO memiliki dua nilai sebagai patokan pergerakan kerumunan: local optima dan global optima. Local optima merupakan nilai terbaik tiap individu di masa lampau (biasanya hanya sebelumnya saja) sementara global optima adalah nilai terbaik di kerumunan tersebut. Bobot antara keduanya menggambarkan karakter PSO apakah selfish atau sosialis. Selain itu langkah pergerakan menentukan karakter PSO apakah lebih tinggi daya jelajah atau lebih sempit tetapi berkualitas.

7. Tabu Search

Tabu search dikembangkan oleh Fred Glover di tahun 1970 (tapi baru dipublikasikan dalam bentuk buku di tahun 1997-an). Berbeda dengan PSO yang menggunakan data lampau satu atau dua iterasi sebelumnya, tabu search merekam seluruh data yang lampau. Manfaatnya adalah mengurangi jumlah komputasi karena data yang lama sudah ada dan tidak perlu dihitung ulang. Algoritma ini masih banyak peluang untuk dikembangkan dengan cara hybrid dengan metode lain.

8. Harmony Search

Ide dari algoritma ini adalah musik. Metode ini diperkenalkan oleh Z.W. Geem di tahun 2001. Prinsipnya adalah di tiap iterasi ada tiga jenis pencarian antara lain berdasarkan: daftar irama yang sudah terkenal dimainkan, mirim dengan yang ada dengan beberapa penekanan (pitching), dan merancang komposisi yang benar-benar baru. Pitch adjustment mengikuti pendekatan Markov Chain:

dengan b merupakan bandwidth yang mengontrol pitch adjustmant.

9. Firefly Algorithm

Metode ini dikembangkan oleh Xin-She Yang pada tahun 2008 dengan mendasari prinsip kerjanya dengan seekor kunang-kunang. Fakta unik kunang-kunang antara lain:

  • Kunang-kunang tidak memiliki jenis kelamin, interaksi dengan kunang-kunang lain tidak berdasarkan jenis kelamin.
  • Ketertarikan berdasarkan kecerahan dari cahaya. Kunang-kunang yang lebih bercahaya, lebih menarik kunang-kunang lain yang kurang bercahaya.

Kecerahan berdasarkan lanskap dari fungsi objektif-nya:

dengan beta merupakan tingkat kecerahan. Pergerakan kunang-kunang i mengikuti ketertarikan dengan kunang-kunang lain, j ditentukan dengan persamaan:

10 Advanced Method

Beberapa metode masuk kategori terkini dan sangat advanced, misalnya Cuckoo Search (CS) yang akan dibahas di lain waktu bersama-sama metode-metode terkini lainnya. Diyakini metode-metode terbaru tersebut lebih baik dari yang saat ini banyak digunakan (algoritma genetika, dan PSO). Sekian, semoga bisa membantu bagi yang tertarik dengan metode-metode optimasi metaheuristik.

Systematic Literature Review (SLR)

Studi literatur sudah lama saya dengar, tetapi baru kali ini ada istilah systematic literature review (SLR) yang banyak muncul di artikel-artikel jurnal terkini. Studi literatur sistematik ini bermaksud untuk merinci dan menyimpulkan teknologi yang saat ini digunakan dengan manfaat dan batasan yang dimilikinya. Selain itu metode ini bisa juga untuk memperoleh research gap serta wilayah penelitian baru yang menarik untuk diteliti. Framework dan background bisa pula diketahui dengan SLR untuk memposisikan riset baru.

SLR memiliki tiga langkah/tahapan yaitu Planning, Conducting dan Reporting. Sebenarnya langkah ini pernah saya jalankan, hanya saja tidak sistematis, ada yang Planning dan Conducting saja tanpa Reporting, misalnya. SLR sendiri diperkenalkan oleh Barbara Kitchenham, silahkan unduh di sini. Awalnya SLR (atau disingkat juga SLRs) merupakan pengembangan dari Evidence-Based Software Engineering (EBSE) yang masuk ranah rekayasa perangkat lunak.

Planning

Pada fase ini identifikasi terhadap apa yang dibutuhkan dalam melakukan studi literatur harus sudah fix. Berbeda dengan membaca novel yang kita sendiri tidak tahu isinya dan butuh “surprise” ketika membacanya. Membaca artikel ilmiah kita harus tahu terlebih dahulu isinya sebelum membaca, mengetahui di sini adalah gambaran umumnya saja dulu. Yang kedua pada fase ini adalah menentukan pertanyaan penelitian (research question) yang menjadi dasar dalam melakukan studi literatur.

Conducting

Fase ini adalah proses pencarian terhadap sumber-sumber literatur. Terdiri dari: identifikasi penelitian, memilih riset-riset yang utama, meng-asses kualitas suatu literatur, mengekstrak data-data dan terus memonitor, dan mensintesis data. Biasanya LSR menggunakan media “searching” yang sudah tersedia di beberapa pengindeks (Scopus, SAGE, IEEE Explore, Wiley Online, Science Direct, dan lain-lain. Biasanya penggunaan String sangat membantu (dengan logika OR dan AND), misal: ((“technology-organization-environment” OR “TOE” ) AND (“framework” OR “conceptual framework” OR “structure”)).

Reporting

Fase ini menghasilkan bahan-bahan literatur yang sudah tersistematis dengan baik. Biasanya dari ratusan artikel diolah menjadi puluhan dan akhirnya belasan yang siap dibaca dan dianalisa. Biasanya ada tiga tahapan yaitu Database Search dari pengindeks-pengindeks yang tersedia di internet (baik gratis/berbayar) yang memperoleh data sebanyak ratusan. Berikutnya Abstract, Title, and Keyword review yang mensortirnya menjadi puluhan saja. Terakhir adalah Full Review sebanyak kira-kira belasan. Tentu saja jumlah tidak harus seperti contoh di atas.

Demikian ulasan singkat metode LSR dalam studi litertur, semoga bermanfaat. Selamat membaca artikel ilmiah.

Database Objek

Ketika pertama kali database diperkenalkan di tahun 70-an, bentuknya adalah relasional dan dikenal dengan istilah Relational Database Management System (RDBMS). Bentuk ini adalah bentuk terkenal yang sampai sekarang menjadi andalan aplikasi-aplikasi terkini. Basis data ini menyimpan atribut-atribut suatu data yang statis misalnya nomor ID, nama, alamat, dan lain-lain. Sementara proses yang terjadi, yang biasanya berupa Create, Read, Update dan Delete (CRUD) dilakukan oleh aplikasi (program) yang mengakses basis data tersebut (di luar basis data).

Object Oriented

Perkembangan perangkat keras yang pesat membuat aplikasi pada bidang-bidang lain seperti rekayasa, multimedia, sistem informasi geografis, dan sejenisnya, berkembang pula. Beberapa aplikasi membutuhkan secara independen suatu data berubah ketika diberikan instruksi ke data tersebut. Dengan kata lain suatu data memiliki kemampuan memproses. Data dengan proses tersebut dikenal dengan istilah objek. Ketika ingin mengedit data suatu objek, maka program tinggal mengirim pesan ke objek tersebut agar salah satu datanya dirubah dengan mengaktifkan proses update pada objek tersebut. Masalahnya adalah vendor-vendor basis data sudah terlanjur mengembangkan RDBMS dengan sangat baik.

Object Relational Database Management System

Dengan memanfaatkan canggihnya sistem RDBMS, beberapa pengembang menawarkan konsep Object Relational Database Management System (ORDBMS), khususnya untuk penerapannya dalam basis data. Karena kelemahan RDBMS tidak memiliki penyimpanan berupa proses/method maka basis data tetap tersimpan dalam bentuk relasional tetapi menambahkan satu object yang berfungsi menangani proses-proses tertentu pada objek yang tersimpan dalam RDBMS. Ketika ingin mengedit suatu objek, maka satu objek yang bertugas meng-update diperintahkan mengedit objek tersebut di dalam sistem basis data.

Object Definition Language (ODL)

Dalam literatur RDBMS, sudah ada standar pengolahan basis data yang dikenal dengan nama Structure Query Language (SQL). Sementara itu komunitas Object Data Management Group (ODMB) mencoba membuat standar yang mirip SQL dengan nama Object Definition Language (ODL). Salah satu hasil dari ODL ini adalah suatu bahasa deklarasi mirip SQL untuk objek yaitu Language Integrated Query (LINQ). Silahkan baca-baca buku referensi berikut yang lumayan OK untuk penjelasan awal ODL.

Untuk mempraktekan basis data objek ada baiknya mencoba langsung dengan basis data yang memang dikhususkan untuk basis data objek, yaitu db4o dengan dua pilihan (java dan c#). Silahkan unduh manual-nya di sini. Ada hal-hal unik yang tidak dimiliki dalam literatur RDBMS yang menarik untuk dicoba, dan menarik juga untuk dibuatkan bukunya.