DESTRUCTOR

Author: bLue biRd // Category:
Destructor adalah anggota class (member function) yang berfungsi melepas memori pada saat suatu obyek sudah tidak diperlukan lagi. Fungsi destructor kebalikan constructor. Destructor tidak mempunyai atau memerlukan argumen. Destructor juga tidak mengembalikan nilai apapun (tidak mempunyai return type). Seperti halnya constructor, compiler dapat menambahkan sebuah destructor jika sebuah class tidak mempunyai destructor.
virtual Destructor
Sebuah destructor dapat berupa fungsi virtual. Hal ini menjadi keharusan jika class B,

• merupakan base class.
• class D yang menggunakan B sebagai base class mempunyai anggota berupa data dengan alokasi memori dinamik (pointer).

class B

{

public:

B();

~B();

};

class D : public B

{

public:

D() : p(new char[256]) {}

~D()

{

delete[] p;

}

private:

char *p;

};



Pada contoh tersebut destructor base class B bukan fungsi virtual. Dalam C++ umumnya obyek class D digunakan secara polimorphic dengan membentuk obyek class D (derived class) dan menyimpan alamat obyek tersebut dalam pointer class B (base class) seperti pada contoh berikut ini,

void main(void)

{

B *pB=new D();

delete pB;

}


Dalam standar C++ menghapus obyek D (derived class) melalui pointer class B (base class) sedangkan destructor base class non-virtual mempunyai efek yang tidak menentu (undefined behaviour). Apabila standard C++ tidak menetapkan apa yang seharusnya berlaku, maka terserah kepada pembuat compiler menentukan perilaku program pada kondisi semacam ini. Umumnya pembuat compiler mengambil langkah untuk tidak memanggil destructor class D (derived class). Dengan demikian, pada saat menjalankan perintah delete, destructor class D tidak dieksekusi karena destructor base class B non-virtual. Akibatnya lokasi memori dinamik yang digunakan class D tidak pernah dilepas. Hal ini adalah contoh lain terjadinya pemborosan memori (memory leak) oleh suatu program. Jalan keluarnya adalah membuat destructor base class B virtual,

class B

{

public:

B();

virtual ~B();

}

Tidak seperti destructor, tidak ada virtual constructor atau virtual copy constructor. Pada saat membentuk obyek, tipe obyek harus diketahui terlebih dahulu, apakah membentuk obyek class A, B, C dsb. Tidak ada aspek bahasa C++ untuk mewujudkan virtual constructor secara langsung, menempatkan virtual pada deklarasi constructor merupakan kesalahan yang terdeteksi pada proses kompilasi. Efek virtual constructor bukan tidak mungkin dicapai, C++ memungkinkan membuat idiom virtual constructor yang bertumpu pada fungsi virtual dalam kaitannya dengan hubungan antara sebuah class dengan base classnya.


Source code

Penerapan Memberwise Copy dan Destructor

#include

class Date {

public:

Date (int =1, int =1, int =1990);

void print();

private:

int month;

int day;

int year;

};

Date::Date (int m, int d, int y) {

month =m;

day =d;

year =y;

}

void Date::print(){

cout<

}

Date::~Date(){ //definisi destructor

cout<<"\nDestructor dipanggil"<

}

void main() {

Date date1(7,4,1993),date2; //Date2 default to 1/1/90

cout<<"Date1= ";

date1.print();

cout<<"\n Date2= ";

date2.print();

date2=date1;

cout<<"\n\n After default memberwise copy, date2=";

date2.print();

cout<

}



OVERRIDING

Author: bLue biRd // Category:
Overriding menyatakan suatu keadaan dimana method pada subclass menolak method pada parent class-nya.

Ciri dari overriding :

    • Nama method harus sama
    • Daftar parameter harus sama
    • Return type harus sama

Contoh overriding

class Parent {

public void Info() {

System.out.println(“ini class parent”);

}

class Child extends Parent {

public void Info() {

System.out.println(“ini class child”);

}


Peraturan pada Overriding

Method yang terkena Override (overriden method) tidak boleh mempunyai modifier yang lebih luas aksesnya daripada method yang meng-override (overriding method).



contoh program overriding :

class SubKelas extends KelasSuper {
bli id th dA li() {
SubKelas.java
public void methodAsli() System.out.println("Method yg overrided jalan");
}
public void methodPemanggil (){
System.out.println("Method pemanggil methodAsli jln");
super.methodAsli(); // yg dipanggil milik kelas super
}

public static void main(String [] args) {
SubKelas osk = new SubKelas();
osk.methodAsli();
osk.methodPemanggil();
}

}

Output







Menggunakan Method dan Constructor Kelas Super
• Constructor
  1. super();
  2. super(tipe parameter);
• Method (non static)
  1. super.namaMethod();


Author: bLue biRd // Category:
Nama : Syevi Rossiana N.H
Kelas : TF - A
NPM : 0834010254

Pemrograman Berorientasi Objek

Author: bLue biRd // Category:
Pemrograman berorientasi objek (Inggris: object-oriented programming disingkat OOP) merupakan paradigma pemrograman yang berorientasikan kepada objek. Semua data dan fungsi di dalam paradigma ini dibungkus dalam kelas-kelas atau objek-objek. Bandingkan dengan logika pemrograman terstruktur. Setiap objek dapat menerima pesan, memproses data, dan mengirim pesan ke objek lainnya.

Model data berorientasi objek dikatakan dapat memberi fleksibilitas yang lebih, kemudahan mengubah program, dan digunakan luas dalam teknik piranti lunak skala besar. Lebih jauh lagi, pendukung OOP mengklaim bahwa OOP lebih mudah dipelajari bagi pemula dibanding dengan pendekatan sebelumnya, dan pendekatan OOP lebih mudah dikembangkan dan dirawat.

Konsep dasar dari Pemrograman Berorientasi Objek

Author: bLue biRd // Category:

Pemrograman orientasi-objek menekankan konsep berikut:


kelas — kumpulan atas definisi data dan fungsi-fungsi dalam suatu unit untuk suatu tujuan tertentu. Sebagai contoh 'class of dog' adalah suatu unit yang terdiri atas definisi-definisi data dan fungsi-fungsi yang menunjuk pada berbagai macam perilaku/turunan dari anjing. Sebuah class adalah dasar dari modularitas dan struktur dalam pemrograman berorientasi object. Sebuah class secara tipikal sebaiknya dapat dikenali oleh seorang non-programmer sekalipun terkait dengan domain permasalahan yang ada, dan kode yang terdapat dalam sebuah class sebaiknya (relatif) bersifat mandiri dan independen (sebagaimana kode tersebut digunakan jika tidak menggunakan OOP). Dengan modularitas, struktur dari sebuah program akan terkait dengan aspek-aspek dalam masalah yang akan diselesaikan melalui program tersebut. Cara seperti ini akan menyederhanakan pemetaan dari masalah ke sebuah program ataupun sebaliknya.


Objek - membungkus data dan fungsi bersama menjadi suatu unit dalam sebuah program komputer; objek merupakan dasar dari modularitas dan struktur dalam sebuah program komputer berorientasi objek.


Abstraksi - Kemampuan sebuah program untuk melewati aspek informasi yang diproses olehnya, yaitu kemampuan untuk memfokus pada inti. Setiap objek dalam sistem melayani sebagai model dari "pelaku" abstrak yang dapat melakukan kerja, laporan dan perubahan keadaannya, dan berkomunikasi dengan objek lainnya dalam sistem, tanpa mengungkapkan bagaimana kelebihan ini diterapkan. Proses, fungsi atau metode dapat juga dibuat abstrak, dan beberapa teknik digunakan untuk mengembangkan sebuah pengabstrakan.


Enkapsulasi - Memastikan pengguna sebuah objek tidak dapat mengganti keadaan dalam dari sebuah objek dengan cara yang tidak layak; hanya metode dalam objek tersebut yang diberi ijin untuk mengakses keadaannya. Setiap objek mengakses interface yang menyebutkan bagaimana objek lainnya dapat berinteraksi dengannya. Objek lainnya tidak akan mengetahui dan tergantung kepada representasi dalam objek tersebut.


Polimorfisme melalui pengiriman pesan. Tidak bergantung kepada pemanggilan subrutin, bahasa orientasi objek dapat mengirim pesan; metode tertentu yang berhubungan dengan sebuah pengiriman pesan tergantung kepada objek tertentu di mana pesa tersebut dikirim. Contohnya, bila sebuah burung menerima pesan "gerak cepat", dia akan menggerakan sayapnya dan terbang. Bila seekor singa menerima pesan yang sama, dia akan menggerakkan kakinya dan berlari. Keduanya menjawab sebuah pesan yang sama, namun yang sesuai dengan kemampuan hewan tersebut. Ini disebut polimorfisme karena sebuah variabel tungal dalam program dapat memegang berbagai jenis objek yang berbeda selagi program berjalan, dan teks program yang sama dapat memanggil beberapa metode yang berbeda di saat yang berbeda dalam pemanggilan yang sama. Hal ini berlawanan dengan bahasa fungsional yang mencapai polimorfisme melalui penggunaan fungsi kelas-pertama.


Inheritas- Mengatur polimorfisme dan enkapsulasi dengan mengijinkan objek didefinisikan dan diciptakan dengan jenis khusus dari objek yang sudah ada - objek-objek ini dapat membagi (dan memperluas) perilaku mereka tanpa haru mengimplementasi ulang perilaku tersebut (bahasa berbasis-objek tidak selalu memiliki inheritas.)


Dengan menggunakan OOP maka dalam melakukan pemecahan suatu masalah kita tidak melihat bagaimana cara menyelesaikan suatu masalah tersebut (terstruktur) tetapi objek-objek apa yang dapat melakukan pemecahan masalah tersebut. Sebagai contoh anggap kita memiliki sebuah departemen yang memiliki manager, sekretaris, petugas administrasi data dan lainnya. Misal manager tersebut ingin memperoleh data dari bag administrasi maka manager tersebut tidak harus mengambilnya langsung tetapi dapat menyuruh petugas bag administrasi untuk mengambilnya. Pada kasus tersebut seorang manager tidak harus mengetahui bagaimana cara mengambil data tersebut tetapi manager bisa mendapatkan data tersebut melalui objek petugas adminiistrasi. Jadi untuk menyelesaikan suatu masalah dengan kolaborasi antar objek-objek yang ada karena setiap objek memiliki deskripsi tugasnya sendiri.

Bagaimana Menentukan Object-Object dalam suatu program

Author: bLue biRd // Category:


Ketika kita hendak membuat suatu program tentunya kita akan dihadapkan dengan persoalan bagaimana cara mendesain object yang baik sehingga program yang kita buat dapat berjalan dengan optimal? Untuk menjawab pertanyaan ini tidaklah mudah, karena belum ada aturan yang baku dalam mendesain object yang akan dibuat, akan tetapi ada beberapa hal yang dapat dijadikan pegangan dalam mendesain program yang baik yaitu :

Correctness and Sufficiency

Dalam mendesain program sebaiknya kita memperhatikan bahwa object-object yang kita desain dapat menjamin kebenaran informasi dan juga kecukupan informasi yang dibutuhkan


Robustness

Object-object yang kita desain sebaiknya dapat membuat suatu program menjadi tangguh, dalam hal ini diharapkan program yang dibuat memiliki error yang sedikit dan dapat bertahan dalam situasi yang sulit sekalipun.


Flexibility

Object-object yang didesain sebaiknya mdah untuk diexpand atau dikembangkan (bersifat flexibel). Hal ini dibutukan karena dalam pembuatan program sering kali kita harus merubah desain yang telah kita buat sebelumnya karena adanya perubahan desain yang diinginkan oleh user/pengguna.


Reusability

Kode-kode program yang telah kita buat, dapat kita gunakan kembali. Hal ini haruslah terpenuhi dalam mendesain program yang baik. Karena ketika kita menggunakan point ini maka kita akan lebih mudah untuk me-manage program yang kita buat, apalagi disaat kita harus mengganti suatu informasi dalam program yang kita buat.


Efficiency

Desain yang kita buat sebaiknya efisien karena akan berkaitan dengan penggunaan resource hardware yang kita gunakan. Baik itu dalam faktor kecepatan maupun dalam faktor penyimpanan data/program.

Dengan berpegang pada beberapa hal diatas diharapkan kita dapat mendesain program yang tangguh, dan bagus.