dasar teori tentang pemrograman berbasis objek kaitanya dengan permasalahan tentang:
a.inheritance
b.poly morphism
c.encapsulation
d.method overriding, accessor dan mutator
Inheritance
Inheritance atau
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.
Salah
satu pilar Pemrograman Berorientasi Objek yang lain adalah polymorphism
yaitu kemampuan objek bertipe sama beraksi berbeda terhadap “pesan”
yang sama.
Polymorphism
adalah suatu object dapat memiliki berbagai bentuk, sebagai object dari
class sendiri atau object dari superclassnya
- Overloading : penggunaan satu nama untuk beberapa method yang berbeda (beda parameter)
- Overriding : terjadi ketika deklarasi method subclass dengan nama dan parameter yang sama dengan method dari superclassnya.
a).Overloading
- class luas.java
class luasBeraksi.java
hasil dari script diatas adalah dibawah ini:
b). Overriding
- class mobilBeraksi.java
- class kijang.java
hasil dari script diatas adalah dibawah ini:
Encapsulation
Encapsulation
merupakan cara membungkus data dan method yang menyusun kelas dan
menyembunyikannya dari dunia luar. Jika kita telah melakukan information
hiding terhadap suatu attribut pada suatu class, lalu bagaimana cara
melakukan perubahan terhadap attribut yang kita sembunyikan tersebut,
caranya adalah dengan membuat suatu interface berupa method untuk
menginisialisasi atau merubah nilai dari suatu attribut tersebut.
Berikut ini keuntungan dari prinsip encapsulation :
Bersifat
independen. Suatu modul yang terenkapsulasi dengan baik akan bersifat
independen dari yang lain. Sehingga dapat digunakan pada bagian
manapun dari program.
Bersifat
transparan. Jika Anda melakukan modifikasi pada suatu modul, maka
perubahan tersebut akan dirasakan oleh semua bagian yang menggunakan
modul tersebut.
Menghindari
dari efek yang diluar perencanaan. Modul yang terenkapsulasi dengan
baik hanya akan berinteraksi dengan bagian program melalui variable
input dan output yang telah didefinisikan sebelumnya. Sehingga dapat
mengurangi kemungkinan bug.
Kesimpulan :
Tujuan
encapsulation adalah untuk menyembunyikan atau memproteksi suatu proses
dari kemungkinan interfensi atau penyalahgunaan dari luar system dan
sekaligus menyederhanakan system itu sendiri
Contoh :
Person.java
public class Person {
private int age;
private String name;
private String personId;
public void setAge(int newValue){
age = newValue;
}
public void setName( String newValue){
name = newValue;
}
public void setPersonId(String newValue){
personId = newValue;
}
public int getAge(){
return age;
}
public String getName(){
return name;
}
public String getPersonId(){
return personId;
}
}
Main.java
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Person ren = new Person();
ren.setAge(22);
ren.setName(“Ren A”);
ren.setPersonId(“113060002″);
System.out.println(“My name is” +ren.getName() +” My age :”+ ren.getAge() +”and My Id”+ren.getPersonId());
}
}
Method Overriding
Jika pada subclass kita menulis ulang
method yang ada pada super classnya, maka method yang ada di subclass
tersebut disebut meng-override method super classnya. Jadi ketika kita
memanggil method tersebut dari objek subclassnya maka yang akan
dijalankan adalah method yang berada di subclass tersebut. Untuk lebih
jelasnya perhatikan contoh berikut.
public class A {
public void cetak(){
System.out.println("Dicetak oleh class A");
}
}
public class B extends A {
public void cetak(){
System.out.println("Dicetak oleh class B");
}
}
public class TestOverride {
public static void main(String[] args){
B objB = new B();
objB.cetak();
}
}
Accessor Methods
Untuk mengimplementasikan enkapsulasi, kita tidak menginginkan sembarang object dapat mengakses data kapan saja. Untuk itu, kita deklarasikan atribut dari class sebagai private. Namun, ada kalanya dimana kita menginginkan object lain untuk dapat mengakses data private. Dalam hal ini kita gunakan accessor methods.
Accessor Methods digunakan untuk membaca nilai variabel pada class, baik berupa instance maupun static. Sebuah accessor method umumnya dimulai dengan penulisan get<namaInstanceVariable>. Method ini juga mempunyai sebuah return value.
Sebagai contoh, kita ingin menggunakan accessor method untuk dapat membaca nama, alamat, nilai bahasa Inggris, Matematika, dan ilmu pasti dari siswa.
Mari kita perhatikan salah satu contoh implementasi accessor method.
public class StudentRecord
{
private String name;
:
: public String getName(){
return name;
}
}
dimana, public
|
-
|
Menjelaskan bahwa method tersebut dapat diakses object luar kelas
|
String
|
-
|
Tipe data return value dari method tersebut
|
getName
|
-
|
Nama dari method
|
()
|
-
|
Menjelaskan bahwa method tidak memiliki parameter apapun
|
Mutator Methods
Bagaimana jika kita menghendaki object lain untuk mengubah data? Yang dapat kita lakukan adalah membuat method yang dapat memberi atau mengubah nilai variable dalam class, baik itu berupa instance maupun static. Method semacam ini disebut dengan mutator methods. Sebuah mutator method umumnya tertulis set<namaInstanceVariabel>.
Mari kita perhatikan salah satu dari implementasi mutator method :
public class StudentRecord
{
private String name;
:
: public void setName( String temp ){
name = temp;
}
}
dimana, public
|
-
|
Menjelaskan bahwa method ini dapat dipanggil object luar kelas
|
void
|
-
|
Method ini tidak menghasilkan return value
|
setName
|
-
|
Nama dari method
|
(String temp)
|
-
|
Parameter yang akan digunakan pada method
|