Selasa, 13 April 2010

Tugas Mata Kuliah PBO

Polymorphisme
"Polimorfisme: Terjadinya bentuk yang berbeda, tahapan, atau jenis dalam organisme individu atau organisme dari spesies yang sama, terlepas dari variasi seksual". [1]

Kedua definisi bila dikombinasikan menimbulkan serangan sangat berpotensi berbahaya pada sistem komputer. Sebuah virus polimorfik adalah salah satu yang mereplikasi sendiri untuk menghasilkan klon operasional, tapi dengan kode sumber yang berbeda untuk masing-masing misalnya, untuk menghindari deteksi oleh aplikasi anti-virus. Polimorfisme dapat dianggap sebagai salah satu gagasan kunci di belakang teori Darwin tentang "Survival dari Fittest" di alam. Kebanyakan sistem konvensional mengikuti hukum alam, hukum-hukum ini memiliki wilayah yang tumpang tindih di berbagai bidang ilmu. Dengan demikian, kita menemukan persimpangan antara biologi dan ilmu komputer di bidang virus komputer polimorfik. Polimorfisme sama sekali tidak ada dari aplikasi komputer tradisional yang bertindak sebagai tuan rumah bagi virus komputer. Di alam, proses mutasi akan memastikan bahwa dalam kebanyakan kasus setidaknya beberapa dari host dari organisme virus atau bakteri penyakit entah bagaimana bertahan hidup dan membawa spesies ke generasi berikutnya dengan gen kuat, sedangkan bakteri atau virus akan berevolusi lebih lanjut untuk menyerang dengan sepenuh hati bahkan lebih pada generasi berikutnya untuk mempertahankan hidup spesies mereka. Jadi, ini semacam proses jungkat-jungkit adalah proses konstan di alam. Namun, karena gaya saat ini program komputer, sesuai dengan "baik" praktek-praktek rekayasa perangkat lunak, ini bertentangan dengan proses alam yang menjamin keberlanjutan dari suatu spesies. Pengembang diminta untuk menulis kode dari kerangka yang telah ada. Jika kerangka kerja ini memiliki kekurangan di dalamnya, semua program masa depan yang mewarisi fitur dari mereka juga akan mengandung cacat. Dalam istilah biologi ini akan sama dengan gen lemah dalam orangtua bisa membuat semua generasi mendatang yang rentan terhadap gangguan. Fakta ini telah sangat baik diterima dan dilaksanakan oleh para penulis virus, sedangkan programmer mengabaikan mereka untuk tetap inline dengan menulis kode yang baik dan mudah dibaca.

Polymorphic virus komputer di deteksi kekalahan negara tidak aktif oleh scanner pencocokan pola sederhana. Kode virus polimorfik menggabungkan keacakan [3], obfuscation kode [4] dan kompleksitas untuk melawan scanner ini. Memproduksi beragam salinan itu sendiri.

Pada bagian berikutnya kita akan membahas sejarah polimorfisme dalam virus komputer, teknik-teknik yang digunakan untuk mencapai polimorfisme dan beberapa-langkah penanggulangan yang dapat digunakan untuk mengandung virus polimorfik.




INHERITANCE
Inheritanceatau pewarisan pada pemrograman berorientasi objek merupakan suatu hubungan dua buah kelas atau lebih. Dalam hal ini ada kelas yang memiliki atribut dan metode yang sama dengan kelas lainnya beserta atribut dan metode tambahan yang merupakan sifat khusus kelas yang menjadi turunannya. Sebagai contoh, misalkan ada sebuah kelas Titik yang mempunyai kelas turunan Titik3D:
class Titik
private integer x
private integer y
Titik()
x < 0
y < 0
{end Titik}

public getX() -> integer
-> x
{end getX}

public getY() -> integer
-> y
{end getY}
{end class}
class Titik3D: Titik
private integer z

Titik3D()
z <- 0
{end Titik3D}

public getZ() -> integer
-> z
{end getZ}

{end class}
Keterkaitan antara kelas Titik dan Titik3D adalah kelas Titik3D merupakan kelas turunan dari kelas Titik. Dalam hal ini kelas Titik disebut dengan kelas dasar atau super classatau base classsedangkan kelas Titik3D disebut sebagai kelas turunan atau derived classatau subclass.
Pada contoh di atas, ketika kelas Titik3D dibuat objeknya maka objek tersebut dapat menggunakan metode yang ada pada kelas Titik walau pada kode programnya metode itu tidak dituliskan, misalkan sebagai berikut:
Titik3D p <- new Titik3D()
integer x <- p.getX()
integer y <- p.getY()
integer z <- p.getZ()
Keuntungan dari pewarisan adalah tidak perlu mengutak atik kode kelas yang membutuhkan tambahan atribut atau metode saja, karena tinggal membuat kelas turunannya tanpa harus mengubah kode kelas dasarnya. Kelas dasar akan mewariskan semua atribut dan kodenya kecuali konstruktor dan destruktor yang memiliki izin akses publicdan protectedke kelas turunannya dengan izin akses yang sama dengan pada kelas dasar.
Ketika sebuah kelas turunan dibuat objeknya saat eksekusi, maka secara implisit konstruktor kelas dasar dipanggil terlebih dahulu baru kemudian konstruktor kelas turunan dijalankan. Begitu juga saat objek dimusnahkan maka secara destruktor kelas turunan akan dijalankan baru kemudian destruktor kelas dasar dijalankan.



Enkapsulasi
Enkapsulasi adalah suatu cara untuk menyembunyikan informasi detail dari suatu class. Dua hal yang mendasar dalam enkapsulasi yakni :
• Information hiding.
• Interface to access data.
Information hiding
Sebelumnya kita dapat mengakses anggota class baik berupa atribut maupun method secara langsung dengan menggunakan objek yang telah kita buat. Hal ini dikarenakan akses kontrol yang diberikan kepada atribut maupun method yang ada di dalam class tersebut adalah 'public'. Kita dapat menyembunyikan informasi dari suatu class sehingga anggota class tersebut tidak dapat diakses dari luar, caranya adalah hanya dengan memberikan akses kontrol 'private' ketika mendeklarasikan atribut atau method. Proses ini disebut dengan information hiding.
Interface to access data
Jika kita telah melakukan information hiding terhadap suatu atribut pada suatu class, lalu bagaimana cara melakukan perubahan terhadap atribut yang kita sembunyikan tersebut, caranya adalah dengan membuat suatu interface berupa method untuk menginisialisasi atau merubah nilai dari suatu atribut tersebut.

Implementasi UML
Berikut ini kita akan coba untuk lebih memahami penggunaan konsep enkapsulasi dengan mengimplementasikan UML berikut :

UML Vehicle class with no hiding
Vehicle class berisi atribut yang mempunyai modifier public(+), sehingga TestVehicle1 sebagai test program mempunyai akses langsung terhadap atribut pada Vehicle.
Listing program - Vehicle.java
public class Vehicle{
public double load, maxLoad;
public Vehicle (double maxLoad){
maxLoad = maxLoad + load;
}
public double getLoad(){
return load;
}
public double getMaxLoad(){
return maxLoad;
}
}
Listing program - TestVehicle.java
public class TestVehicle{
public static void main(String[] args){
System.out.println("Creating a vehicle with a 10,000kg maximum load.");
Vehicle vehicle = new Vehicle(10000.0);
System.out.println("Add box #1 (500kg)");
vehicle.load = vehicle.load + 500.0;
System.out.println("Add box #2 (250kg)");
vehicle.load = vehicle.load + 250.0;
System.out.println("Add box #3 (5000kg)");
vehicle.load = vehicle.load + 5000.0;
System.out.println("Add box #4 (4000kg)");
vehicle.load = vehicle.load + 4000.0;
System.out.println("Add box #4 (300kg)");
vehicle.load = vehicle.load + 300.0;
System.out.println("Vehicle load is = " +vehicle.getLoad() + "kg");
}
}
Compile Vehicle.java dan TestVehicle.java lalu jalankan TestVehicle.java. Seharusnya akan keluar tampilan sebagai berikut :

Analisa program
Kita lihat bahwa pada output program tersebut kita menginisialisasi batas maximum load 10,000 kg,
Vehicle vehicle = new Vehicle(10000.0);
akan tetapi dengan memberikan akses kontrol / modifier public pada atribut class Vehicle
public double load, maxLoad;
kita dapat mengakses langsung atribut class yang seharusnya perlu diberi pengecekan agar tidak sampai melebihi maxload
vehicle.load = vehicle.load + 500.0;
maka dapat mengakibatkan masalah(trouble) yakni batas maximum load yang kita buat tidak berpengaruh apapun sehingga terdapat penambahan boxes yang melebihi kapasitas(10050.0kg) dikaernakan tidak ada pengecekan kapasitas maksismum.

UML Vehicle class with hiding
Vehicle class berisi atribut yang mempunyai modi_er public, sehingga TestVehicle1 sebagai test program mempunyai akses langsung terhadap atribut pada Vehicle.
Listing program - Vehicle.java
public class Vehicle1{
private double load, maxLoad;
public Vehicle1 (double max){
this.maxLoad = max;
}
public double getLoad(){
return this.load;
}
public double getMaxLoad(){
return this.maxLoad;
}
public boolean addBox(double weight){
double temp = 0.0D;
temp = this.load + weight;
if(temp <= maxLoad){
this.load = this.load + weight;
return true;
}
else{
return false;
}
}
}
Listing program - TestVehicle.java
public class TestVehicle1{
public static void main(String[] args){
System.out.println("Creating a vehicle with a 10,000 kg maximum load.");
Vehicle1 vehicle = new Vehicle1(10000);
System.out.println("Add box #1 (500kg) : " + vehicle.addBox(500));
System.out.println("Add box #2 (250kg) : " + vehicle.addBox(250));
System.out.println("Add box #3 (5000kg) : " + vehicle.addBox(5000));
System.out.println("Add box #4 (4000kg) : " + vehicle.addBox(4000));
System.out.println("Add box #5 (300kg) : " + vehicle.addBox(300));
System.out.println("Vehicle load is " +vehicle.getLoad() + "kg");
}
}
Compile Vehicle1.java dan TestVehicle1.java lalu jalankan TestVehicle1.java. Maka akan keluar tampilan sebagai berikut :

Analisa program
Kita lihat bahwa pada output program tersebut pada penambahan box ke-5 terjadi kelebihan kapasitas maksimal sehingga method addBox mengembalikan nilai false, dalam arti bahwa terjadi penolakan terhadap penambahan box ke 5.