Archive Page 2

OO Design

19Mar09
public interface PartaiPolitik {
	// semua aktivitas parpol yang diizinkan di Indonesia
	void registerPemilu(int tahun);
	void kerja();
}

public abstract class AbstractPartaiPolitik implements PartaiPolitik {
	// Menyediakan implementasi default dari sebuah parpol,
	// jadi kalo mo bikin parpol baru, cukup extends kelas ini saja
	// Soalnya banyak implementasi parpol yang sama-sama aje
	// (makanya rata-rata sama semua)
	// ...

	public void kerja() {
		// do nothing
	}
}

public class Golkar extends AbstractPartaiPolitik {
	private volatile Capres capres;

	// big class with multiple responsibilities..
}

public class PDIP extends AbstractPartaiPolitik {
	public static final Capres capres = Megawati.getInstance();

	// well known operation
	public void tolakUUPornografi() {
		// implementation is omitted
	}

	public void changeCapres() {
		throw new UnsupportedOperationException();
	}
}

public class PD extends AbstractPartaiPolitik {
	// advertise
	public void gelengkanKepalaDanKatakanTidak();
}

public class Undisclosed {
	public PartaiPolitik getPKS() {
		return PKS.instance;
	}

	// inner class
	private class PKS implements PartaiPolitik {
		// Lazy instantiation
		// (c.f. Effective Java 2nd ed., by Joshua Bloch)
		private static PKS instance = new PKS();

		// mengimplementasi semua method di interface
		// karena tidak extends dari default abstract class
		// ...

		public void dispose() {
			// tidak semua parpol punya method ini
		}
	}
}

… bahwa kampanye politik di dalam kampus ITB itu diizinkan?


Banyak yang bilang, ijazah kuliah itu mahal…

Toner laser untuk cetak ijazah

Hitung aja berapa harga toner warna printer laser yang digunakan untuk mencetak ijazah :D
Harga toner untuk satu warna aja udah hampir 4 jutaan…

Sayangi ijazah Anda! =)


Senangnya pake Java… Tidak perlu lagi membuat sendiri kelas-kelas untuk koleksi objek, karena sudah disediakan oleh Java Collections (java.util.*). Malah sejak 1.5, Java juga menyediakan koleksi objek yang cocok untuk akses concurrent (java.util.concurrent.*).

Namun, terkadang kita juga membutuhkan koleksi dengan kebutuhan spesifik. Berikut ini adalah beberapa library koleksi objek yang dikembangkan secara open source.

Apache Commons Collections
Gak support generic! :( Ada beberapa kelas yang cukup revolusioner, seperti Multimap (Map yang support entri-entri dengan key yang sama).

Javolution
Cocok bagi aplikasi yang sifatnya realtime dan membutuhkan waktu eksekusi yang deterministik. Mengurangi GC dan koleksi objek bisa di-reuse setelah tidak dipakai. Gak ada alesan lagi buat pake C/C++ dengan alasan lambat atau waktu eksekusinya indeterministik!

Google Collections
It’s like Apache Commons Collections on steroid, hehe…
Selain support Generic, Google Collections juga menyediakan banyak helper utility yang akan membuat kita berpikir, “problem saya bisa diselesaikan dari dulu dengan Google Collections!”
Selain itu, Google Collections juga dipakai secara internal di aplikasi-aplikasi Google yang berbasis Java, jadi efisiensi & skalabilitasnya ga usah diragukan. :p

fastutil
fastutil menyediakan koleksi objek yang spesifik untuk semua (!) tipe, baik primitif maupun objek. Misalnya untuk List, disediakan int list, float list, dan lainnya. Konsekuensinya, library-nya jadi sangat besar. Tapi cocok bagi Anda yang tidak suka dengan autoboxing tipe primitif jadi objek. Tentunya hal ini dapat meningkatkan efisiensi memori.

Ada library koleksi objek lain yang Anda gunakan?


Tidak hanya bahasa Java yang bisa dijalankan pada Java Virtual Machine (JVM).

Berikut ini adalah beberapa bahasa yang dapat dijalankan pada JVM, dan semuanya sifatnya interpreted (tidak perlu di-compile), walaupun ada juga beberapa yang bisa di-compile (biasanya untuk mempercepat eksekusi).

Python
Diimplementasi pada JVM dengan Jython. Bagi pemrogram yang sudah sangat fluent dengan Python, rasanya tidak akan menemui masalah berarti. Hanya saja, Jython tidak bisa memanfaatkan library Python yang native.

Groovy
Berangkat dari bahasa Java. Tidak perlu titik-koma “;” pada akhir baris :p.
Fitur yang sangat menarik pada Groovy adalah closure, yaitu sejenis anonymous function. Tidak perlu lagi menggunakan anonymous class hanya untuk implementasi function object.

Ruby
Diimplementasi pada JVM dengan JRuby. Saya belum eksplorasi, heuheu…

Scala & Clojure
Bahasa fungsional! How cool is that?!
Memungkinkan kita untuk membuat aplikasi yang sangat scalable (karena pure function tidak memiliki side effect, ehm ehm…).

Salah satu kelebihan implementasi bahasa-bahasa tersebut di JVM adalah: Jika kita menemukan permasalahan yang tidak bisa dipecahkan dengan library yang disediakan bahasa tersebut, kita masih tetap bisa melakukan import Java package… :)


Belas Kasihan


Setahun

12Feb09

Sudah setahun berlalu sejak sidang saya. Hehehe..

Mudah-mudahan saya bisa segera sidang kembali :)
Mohon bimbingannya!


Hyperorganized Gmail

Sebaliknya dengan Inbox:

Hyperorganized Gmail

Bersih… :D

Triknya:
1. Filter dengan action ‘Skip Inbox’ sama ‘Apply label’.
2. Gunakan rule ‘listid’, lebih akurat dibandingkan ’subject’ atau ‘from’.


Makanya jangan pake aki yang abal-abal! :D

Mendorong Mobil


Muka

22Oct08

Mau dikemanakan muka saya

pada Hari Pertanggungjawaban,

kalau saya ketahuan memilih

partai pendukung Pornografi?!?