Object Oriented Pemrograman (OOP)

Karakteristik Kelas OOP C++

Di dalam penggunaan konsep pemrograman yang berbasis objek atau yang disebut Object Oriented Pemrograman(OOP),haruslah memiliki karakteristik.Adapun karakteristik tersebut adalah memiliki sifat turunan atau pewarisan(inheritance),satu nama memiliki banyak sifat atau perilaku(polymorphism),pembungkusan sifat dari objek yang berbeda(encapsulation).

1.     Inheritance

Mendefinisikan suatu kelas dan kemudian menggunakannya untuk membangun hirarki kelas turunan,yang mana masing-masing turunan mewarisi semua akses kode maupun data kelas dasarnya. Inheritance memungkinkan programmer untuk "menurunkan" sebuah class menjadi class lain yang lebih spesifik dan memiliki fungsi yang lebih komplit. Inheritance merepresentasikan hubungan "seperti" atau "sejenis" (a kind of).

a)      Konsep

·         Suatu kelas dapat diciptakan berdasarkan kelas lain

·         Kelas baru ini mempunyai sifat-sifat yang sama dengan kelas pembentuknya,ditambah sifat-sifat khusus lainnya

·         Dengan pewarisan kita dapat menciptakan kelas baru yang mempunyai sifat sama dengan kelas lain tanpa harus menulis ulang bagian-bagian yang sama

·         Pewarisan merupakan unsur penting dalam pemrograman berorientasi objek dan merupakan blok bangunan dasar pertama penggunaan kode ulang(code reuse)



b)      Pembatasan inheritance

·         Data dan fungsi yang dapat diwariskan hanya yang bersifat public dan protected

·         Untuk data dan fungsi private tetap tidak dapat diwariskan.Hal ini disebabkan sifat private yang hanya dapat diakses dari dalam kelas saja



c)      Sifat inheritance

·         Sifat pewarisan ini menyebabkan kelas-kelas dalam pemrograman berorientasi objek membentuk hirarki kelas mulai dari kelas dasar,kelas turunan pertama,kelas turunan kedua dan seterusnya



Contoh Source Kode C++:



#include <iostream>

using namespace std;



class Person // konsep inheritance

{

     public:

        string profesi;

        int usia;



        Person(): profesi("unemployed"), usia(18) { }

        void display()

        {

             cout << "Saya adalah seorang: " << profesi << endl;

             cout << "Umur saya sekarang adalah: " << usia << endl;

             walk();

             talk();

        }

        void walk() { cout << "Saya berasal dari Karangasem" << endl; }

        void talk() { cout << "Saya tinggal di Jimbaran" << endl; }

};



// class mahasiswax diturunkan dari dasar class Person

class mahasiswax : public Person

{

    public:

       void maba() { cout << "Saya mahasiswa dari Unud" << endl; }

};



// class Programmer diturunkan dari dasar class Person

class Programmer : public Person

{

    public:

       void playProgrammer() { cout << "Saya bisa membuat aplikasi" << endl; }

};



int main()

{

     mahasiswax mahasiswa ;

     mahasiswa.profesi = "Mahasiswa";

     mahasiswa.usia = 18;

     mahasiswa.display();

     mahasiswa.maba();



     Programmer programmerY;

     programmerY.profesi = "Programmer";

     programmerY.usia = 23;

     programmerY.display();

     programmerY.playProgrammer();



     return 0;

}



Tanpa inheritance,kelas merupakan sebuah unit yang berdiri sendiri.Inheritance akan membentuk suatu konsep dimana jika konsep yang diatas berubah maka perubahan akan juga berlaku pada yang ada dibawahnya.Manakala suatu kelas menerima warisan,semua anggota data dan fungsi juga akan menerima warisan,walapun tidak semuanya akan dapat diakses oleh anggota fungsi dari kelas.

Di dalam C++ penentuan akses pada inheritance ada tiga macam,yaitu:

1)      Public

Penentuan akses berbasis public menyebabkan anggota dari public dari sebuah kelas utama akan menjadi anggota public kelas turunan dan menyebabkan juga anggota protect kelas utama menjadi anggota protect kelas turunan.Namun,untuk anggota kelas private tetap pada private kelas utama

2)      Private

Penentu akses berbasis private menyebabkan anggota public dari kelas utama akan menjadi anggota protect kelas turunan dan menyebabkan anggota dari kelas utama menjadi anggota protect kelas turunan.Namun,untuk anggota kelas kelas private tetap pada private kelas utama



3)      Protected

Penentu akses berbasis protected menyebabkan anggota dari anggota protect dani public dari kelas utama akan menjadi anggota private dari kelas turunan.Anggota private dari kelas utama selalu menjadi anggota private kelas utama.



2.     Encapsulation



Ciri penting lainnya dari OOP adalah encapsulation.Encapsulation adalah sebuah proses dimana tidak ada akses langsung ke data yang diberikan,bahkan hidden.Jika ingin mendapat data,maka harus berinteraksi dengan objek yang bertanggung jawab atas dara tersebut.

Berikut ciri dari encapsulation:

1.      Variabel dan method dalam suatu obyek dibungkus agar terlindungi

2.      Untuk mengakses,variabel dan method yang sudah dibungkus tadi perlu interface

3.      Setelah variabel dan method dibungkus,hak akses terhadapnya dapat ditentukan

4.      Konsep pembungkusan ini pada dasarnya merupakan perluasan dari tipe data struktur

Dua hal dalam enkapsulasi:

1.      Informasi hiding

2.      Menyediakan perantara(method) untuk mengakses data



Pada intinya,encapsulation adalah pemisahan antara bagian private dan public pada sebuah objek atau dapat dipandang sebagai pemisahan antara interface(bagian private) dan implementation(bagian public).Objek-objek lain yang hendak berinteraksi dengan objek ini akan mengirimkan sebuah pesan(message) dan objek ini akan mengerjakan sesuatu dan mengirimkan pesan balik sebagai jawaban jika diperlukan.Keuntungan utama dari encapsulation tentu saja adalah penyembunyian implementasi(implewmentation hiding).Dengan implementation hiding,kita dapat memperbaiki bagaimana objek kita bekerja tanpa harus khawatir bagaimana menginformasikan perubahan tersebut ke objek-objek yang lain.Selama kita tidak merubah interface dari objek kita,objek-objek yang lain akan tetap dapat menggunakan objek kita. 



Contoh code C++:



#include <iostream>

#include <conio.h>

using namespace std;

class enkapsulasi

{

   public :

   char *Nama;

   char *NIM;

   int nilaiku;

   void setNilai(int nilai)

{//methode yang digunakan untuk input

    nilaiku=nilai;

}

int getNilai( )

{ // methode yang digunakan untuk output

    return nilaiku;

}

};

int main( )

{

   enkapsulasi data; // pembuatan objek class

    //input datanya



   data.Nama = "I Nyoman Tri Aditya";

   data.NIM = "1705551117";

   data.setNilai(100);

//output datanya



   cout << "Nama = " << data.Nama << endl;

   cout << "NIM = " << data.NIM << endl;

   cout << "Nilai = " << data.getNilai( );

   getch( );

}




3.     Polymorphism

Memberikan satu aksi untuk satu nama yang dipaki bersama pada suatu hirarki kelas,yang mana masing-masing kelas hirarki menerapkan cara yang sesuai dengan dirinya.Poly(many)+morph(shape)=POLYMORPHISM:banyak bentuk(many shapes).

Polymorphism sangat berhubungan dengan konsep inheritance

Implementasi polymorphism dengan 2 cara:

1.      Overloading function: penggunaan kembali nama fungsi yang sama tapi dengan argument yang berbeda

2.      Overriding function: sebuah fungsi dalam class turunan yang memiliki nama,return type dan argument function yang sama dengan fungsi dalam class induk





Konsep

1.Polimorfisme merupakan fitur pemrograman berorientasi objek yang penting setelah pengkapsulan dan pewarisan,Polimorfisme berasal dari bahasa Yunani,poly(banyak) dan morphos(bentuk)

2.Polmorfisme menggambarkan kemampuan kode C++ berperilaku berbeda tergantung situasi pada waktu run(program berjalan)

3.Konstruksi ini memungkinkan untuk mengadakan ikatan dinamis(juga disebut ikatan tunda,atau ikatan akhir)

4.Kalau fungsi-fungsi dari suatu kelas dasar didefinisikan ulang atau ditindih pada kelas turunan,maka objek-objek yang dihasilkan hirarki kelas berupa objek polimorfik

5.Polimorfik artinya mempunyai banyak bentuk atau punya kemampuan untuk mendefinisi banyak bentuk



Contoh Source kode C++ :



#include <iostream>

#include <conio.h>

using namespace std;

class HewanPeliharaan

{

   public:

   void lucu()

   {

       cout << " Lucunya hewan peliharaan"<<endl;

   }

    virtual void makan()//konsep polymorphism

   {

       cout << " makan... dibutuhkan hewan"<<endl;

   }

};

class Jinak : public HewanPeliharaan

{

public:

    void lucu()

    {

        cout<<"lucu dan jinak"<<endl;

    }

    virtual void makan()//konsep polymorphism

    {

        cout<<"diberi makan agar jinak"<<endl;

    }

};

class Kucing : public Jinak

{

public:

    void lucu()

    {

        cout<<"lucunya kucing"<<endl;

    }

    virtual void makan()//konsep polymorphisme

    {

        cout<<"makanan dibutuhkan kucing"<<endl;

    }

};

int main()

{

    //definisi objek jinak dan kucing puma

    Jinak jinak;

    Kucing puma;

    //definisi poiter ke objek

    HewanPeliharaan *hewan;

    hewan=&jinak;

    hewan->lucu();

    hewan->makan();

    cout<<"--------------------"<<endl;

    getch();

}






*Optional (Java)

4.   Class

Class adalah 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 objek. 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.

Contoh source code Java:

class Pegawai {

String nama; // property nama dengan tipe data String

String nip; // property nip dengan tipe data String

String jabatan; // property jabatan dengan tipe data String

}

class AksesClass {

public static void main(String[] args) { // awal eksekusi (method main)

Pegawai pgw = new Pegawai(); // membuat objek dari class Pegawai

pgw.nama = “saya”; // mengisikan property nama

pgw.nip = “2004470099”; // mengisikan property nip



pgw.jabatan = “Kabid”; // mengisikan property alamat

System.out.println(“Nama Pegawai : “ + pgw.nama); // menampilkan nama

System.out.println(“Nip Pegawai : “ + pgw.nip); // menampilkan nim

System.out.println(“Jabatan pegawai : “ + pgw.jabatan); // menampilkan jabatan

}

}



5.    Abstraction  



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.



Contoh source kode Java:



abstract class SuperHero {

String superPowers[];

void setSuperPowers(String superPowers[]) {

this.superPowers = superPowers;

}

void printSuperPowers() {

for (int i = 0; i < superPowers.length; i++) {

System.out.println(superPowers[i]);

}

}

abstract void displayPower();

}

class UnderwaterSuperHero extends SuperHero {

void displayPower() {

System.out.println("Communicate with sea creatures…");

System.out.println("Fast swimming ability…");

}

}

class FlyingSuperHero extends SuperHero {

void displayPower() {

System.out.println("Fly…");

}

}

}

Komentar

Postingan populer dari blog ini

Flowchart

Tipe Data dan karakter khusus C++

Instalasi dan Review Linux Ubuntu 16.04 LTS