Selasa, 08 Oktober 2013

Rangkuman tentang OOP pada C#


Object Oriented Progamming
1.      Class, Atribut, dan Object
A.     Class
Dalam object oriented programming kita mulai mengenal adanya class & object. Secara umum, Class adalah penggambaran dari sebuah object atau  benda,sifat objek, dan juga apa yang bisa dilakukan oleh objek tersebut. Class digunakan untuk membuat objek, dan berperan sebagai tipe data dari objek. Class merupakan bagian dari program, yang memiliki semua atribut- atribut seperti halnya yang dimiliki oleh program biasa, akan tetapi class tidak bersifat “Main” atau utama, sehingga sebuah class tidak akan bisa dirun dan dieksekusi tanpa menggunakan main class, atau class utama. Pada pemrograman struktural kita menaruh kodingan kita pada main class sehingga kita langsung bisa mengkompile dan mengeksekusi program kita tersebut, dimana pada pemrograman berorientasi object sekarang ini kita akan mulai menggunakan class untuk menaruh program kita, sehingga program kita dapat digunakan kembali dan dipadukan dengan program-program lain oleh orang lain. 
Ketika menggunakan class, kita tidak dapat menyamakannya seperti saat kita memprogram dengan basis pemrograman struktural. Class disini hanya bersifat sebagai cetakan atau “blueprint” dari program yang kita buat, untuk dapat mengeksekusi sebuah class kita harus melakukan “instansiasi” yaitu membuat sebuah object dari class yang telah kita buat. Untuk lebih mudahnya kita ibaratkan sebuah class adalah sebuah cetakan roti dan roti adalah sebuah object dimana proses pembuatan roti disebut sebagai instansiasi. Dalam hal ini sama halnya seperti cetakan roti, sebuah class juga bisa digunakan berkali kali untuk membuat sebuah object, dimana satu object dengan yang lainnya tidaklah memiliki keterkaitan meskipun berasal dari kelas yang sama. Dalam pembuatan suatu class kita bisa jadikan satu file dengan main class atau juga bisa kita pisahkan menjadi file sendiri. Dimana dalam menaruh program kita di class tersebut, kita tidak bisa sembarang menaruh dalam class tersebut, melainkan kita harus membuat fungsi-fungsi, yang nantinya akan bisa kita eksekusi melalui instance object yang telah kita buat.
Sebagai contoh adalah pengambaran yang real dalam kehidupan kita adalah tentang dunia transportasi. Tentunya kita semua  mengetahui bahwa sangatlah banyak jenis alat transportasi yang ada seperti motor, mobil,pesawat terbang,kapal laut, dan lain sebagainya.Kemudian marilah kita anggap berbagai alat transportasi tersebut sebagai  suatu class. Maka motor tentunya mempunyai nomor polisi, tahun pembuatan,merk dll, demikian juga dengan alat transportasi yang lainnya, oleh karenanya hal ini bisa disebut sebagai properties. Selanjutnya motor itu sendiri bisa berjalan maju, berjalan mundur,belok kiri, belok kanan yang mana kegiatan ini disebut method.
Elemen Pada Class
Class pada C# terdiri dari :
·        Instance Variable / Field : atribut / hal-hal yang akan dimiliki oleh objek dari class tersebut.
·         Method : aksi / tindakan yang dapat dilakukan oleh objek dari class tersebut.
image
Method digunakan untuk merubah state pada field.  
               Untuk lebih jelasnya perhatikan contoh dibawah ini :
using System;
 
namespace Test
{
 class Program
 {
     static void Main(string[] args)
     {
         Penjumlahan p = new Penjumlahan(5, 9);
         Penjumlahan q = new Penjumlahan(7, 9);
         Console.WriteLine(p.hitungPenjumlahan());
         Console.WriteLine(q.hitungPenjumlahan());
     }
 }
 class Penjumlahan
 {
     int a;
     int b;
     public Penjumlahan(int a, int b)
     {
         this.a = a;
         this.b = b;
     }
     public int hitungPenjumlahan()
     {
         return a + b;
     }
 }
}
Dalam contoh tersebut Penjumlahan adalah suatu class yang memiliki constructor(fungsi yang pertama kali dieksekusi ketika class diinstansiasi) yang membutuhkan passing 2 variable integer. Dimana dalam class tersebut juga terdapat Method untuk menjumlahkan dua bilangan yang telah dipassing pada constructor tersebut. 
Keterangan dari contoh tersebut adalah:
·      Class Penjumlahan adalah pendefinisian nama class public Penjumlahan(int a, int b) merupakan constructor dari class penjumlahan tersebut int hitungPenjumlahan() merupakan method yang digunakan untuk menjumlahkan dua variabel integer yang telah dipassingkan pada constructor tadi Penjumlahan p = new Penjumlahan(5,9) proses instansiasi dari class penjumlahan yang membentuk object p, dimana object p mengacu pada struktur yang ada dalam class penjumlahan.
·      Keyword new adalah keyword yang digunakan untuk menginstansiasi sebuah object dari sebuah class dimana berikutnya diikuti oleh construcor dari class tersebut.
·      Operator this adalah operator yang digunakan untuk mengakses variabel yang paling global dari suatu class jika terdapat dua variabel yang memilki nama yang sama dam scope yang berbeda.
·      Operator (.) dot adalah operator yang digunakan untuk mengakses atribut atribut yang terdapat didalam class yang telah diinstansiasi tersebut.
Didalam contoh tersebut akan menghasilkan dua output yang berbeda yaitu 14 & 16, meskipun berasal dari class yang sama akan tetapi dalam contoh tersebut terdapat dua object yang berbeda. Hal ini membuktikan bahwa tidak ada keterkaitan pada satu object dengan object lainnya meski berasal dari class yang sama.
B.     Atribut
Atribut merupakan nilai data yang terdapat pada suatu object yang berasal dari class. Atribut merepresentasikan karakteristik dari suatu object. Penerapan  didalam program, atribut adalah variabel.
Penamaan atribut diawali dengan huruf kecil. Jika nama atribut lebih dari 2 kata, maka huruf awal kata kedua dst diawali dengan huruf besar dan penulisan tetap disambung.

Contoh:

public String nama;
public String mataKuliah;

C.     Method 
Method merupakan suatu operasi berupa fungsi-fungsi yang dapat dikerjakan oleh suatu object. Method didefinisikan pada class akan tetapi dipanggil melalui object. Metode menentukan perilaku objek, yakni apa yang terjadi ketika objek itu dibuat serta berbagai operasi yang dapat dilakukan objek sepanjang hidupnya. Method diimplementasikan didalam class dan menyediakan informasi tambahan yang mana class tidak dapat menangani sendiri. Method juga merupakan sarana bagi programmer untuk memecah program kompleks menjadi bagian yang kecil-kecil,sehingga nantinya dapat digunakan berulang-ulang. Contoh pada object manggaà terdapat method ambilRasa , kupasKulit dll.
Method dapat dibagi menjadi 2, yaitu: fungsi dan prosedur.
Ø  Fungsi adalah bagian atau sub dari program yang mempunyai algoritma tertentu dalam menyelesaikan suatu masalah dengan mengembalikan hasil.
Ø  Prosedur adalah bagian atau sub dari program yang mempunyai algoritma tertentu dalam menyelesaikan suatu masalah tanpa mengembalikan suatu nilai hasil.
Secara umum pada konsep Object Oriented Programming, Function lebih dikenal dengan istilah Method, dimana merupakan suatu bagian dari Object yang mendefinisikan apa yang bisa Object tersebut lakukan. Setiap method menghasilkan suatu nilai dengan tipe data tertentu yang dinamai Return Type. Apabila terdapat suatu fungsi yang tidak menghasilkan suatu nilai apapun maka bagian return type ini diganti dengan void. Penamaan method mengikuti kaidah penamaan seperti pada penamaan variabel. Bagian parameter pada method diisi dengan parameter-parameter fungsi yang diperlukan. Passing Parameter  dilakukan dengan cara pass by value dan pass by reference.Dengan analogi tersebut, otomatis beberapa hal umum seperti local variable, pemanggilan method, pendefinisian return value type, dsb adalah sama.
Metode memiliki 4 (empat) bagian dasar :
1. Nama metode
2. Tipe Objek atau tipe primitive yang dikembalikan metode.
3. Daftar parameter.
4. Badan atau isi metode.
Tiga bagian pertama mengindikasikan informasi penting tentang metode itu sendiri. Dengan kata lain, nama metode tersebut=metode lain dalam program.

Macam – macam Method:
·     Method void
Method void adalah bagian atau sub dari program yang mempunyai algoritma tertentu dalam menyelesaikan suatu masalah tanpa mengembalikan suatu nilai hasil. Secara umum method dalam java adalah sebuah fungsi.
·     Method Function
Method Function adalah bagian atau sub dari program yang mempunyai algoritma tertentu dalam menyelesaikan suatu masalah dengan mengembalikan hasil.
Method dasar ada dua jenis yaitu getter() dan setter().
·     Method getter adalah untuk mengambil informasi isi attribut dalam suatu class.
·     Method setter adalah untuk memberikan isi attribut dalam suatu class.

2.      Object
A.       Pengertian Object
Object merupakan suatu bentuk nyata dari class, object ini memiliki Attribute (Properties) dan memiliki Method (Behavior). Kalau kita mengikuti analogi di atas, maka object dari class Hewan adalah Burung, Kambing, Ayam, Kuda. Mereka adalah contoh dari class Hewan. Semua dari mereka adalah Hewan  yang mempunyai nama, kaki, Jenis makanan dst. Dan bisa berlari, bersuara, berkembang biak, dll.


B.       Perbedaan Class dan Object
Jika anda ingin membangun rumah Class adalah blueprint / gambar (berisi spesifikasi lengkap dari rumah yang akan dibuat, ukuran, jumlah, dll). Sedangkan object adalah bentuk fisik / rumah yang dibangun berdasarkan blueprint / class yang sudah ada, biasa disebut instan class / object.
image
Ilustrasi gambar
Contoh perbedaan Class dan Object
Class: Manusia
Attribute: Berat Badan, Tinggi Badan, Jenis Kelamin
Method: Bernafas, Makan, Minum, Bekerja, Belajar, Tidur
Object: Budi
Attribute: 75 kg, 175 cm, Pria
Method: Bernafas, Makan, Minum, Bekerja, Belajar, Tidur


Dapat dilihat perbedaan antar Class dan Object, dimana Class merupakan abstraksinya dan Object adalah bentuk nyata (instance) dari Class yang sudah mempunyai nilai.

3.      Cara Membuat Object
Object Oriented Programming (OOP) atau yang lebih dikenal dengan pemrograman berorientasi objek adalah suatu teknik baru dalam dunia pemrograman. Salah satunya bahasa pemrograman C#. Untuk lebih memahami pengertian class pada pemrograman C# rekan dapat membaca atau mendownload postingan terdahulu tentang Object Oriented Programming using C#, berikut ini adalah contoh programnya:
1.      Buat project baru, dan pilih Console Application.

Galih Library

2.      Untuk membuat sebuah kelas baru, klik pada nama project anda yang terdapat pada jendela Solution Explorer. Kemudian klik kanan, pilih menu Add Class.

  Galih Library             
3.     Maka akan muncul jendela Add New Item. Pada nama class baru yang akan  dibuat, masukkan nama kendaraan.cs.
             Galih Library     
4.      Kemudian kita Add. Maka akan tampil unit class baru dengan nama kendaraan. Selanjutnya kita tuliskan listing dibawah ini pada unit kendaraan tersebut.

Contoh Program:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Kendaraan
    {
        public string NoKendaraan;
        public string Merk;
        public int kecepatan;

    }
}
5.      Kemudian, tuliskan pula listing program dibawah ini pada unit utama aplikasi yang kita buat.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Kendaraan Motor = new Kendaraan();
            Motor.Merk = "YAMAHA";
            Motor.kecepatan = 110;
            Motor.NoKendaraan = "Z 8882AA";
            Console.WriteLine("Motor: " + Motor.Merk + " Mempunyai Kecepatan " + Motor.kecepatan + " Km/Jam, Nomor Plat " + Motor.NoKendaraan);
            Console.ReadLine();
        }
    }
}
6.      RUN. Dan inilah tampilan output dari program di atas.
Galih Library


Jika Anda mengikuti langkah-langkah di atas, pertama kali rekan-rekan akan diminta untuk membuat sebuah class bernama kendaraan. File kendaraan.cs adalah file class yang akan dipergunakan juga pada program utama, yaitu program.cs.
4.      Konstruktor
Konstruktor adalah  method yang secara langsung/otomatis dieksekusi ketika object itu dipanggil. Untuk membuat konstruktor, nama method haruslah sama dengan nama Class-nya ,tidak ada kata kunci void atau pun nilai kembalian(return value) dan dapat diberi modifier akses (public, protected, default, private). Konstruktor digunakan untuk inisialisasi variabel ketika membuat instan class / objek baru. Sebenarnya setiap kali anda membuat instant class / objek baru maka konstruktor dijalankan. Jika anda tidak mendefinisikan  konstruktor secara eksplisit maka tetap dianggap membuat konstruktor kosong. Konstruktor juga dapat di-overload (anda dapat membuat konstruktor lebih dari satu asal parameternya jumlahnya beda atau  tipe datanya beda). Kontruktor akan memberikan nilai awal pada saat suatu objek dibuat. Pada saat program dijalankan, konstruktor akan langsung memberikan nilai awal pada saat perintah new, membuat suatu objek.
Fungsi dari Konstruktor:
Ø   Mengalokasikan sebuah objek saat program dieksekusi.
Ø   Memberikan nilai awal sebagai inisialisasi dari semua atribut yang perlu diinisialisasi.
Ø   Mengerjakan proses-proses yang diperlukan saat sebuah objek dibuat.

Pada saat kita bekerja dengan konstruktor, hal mendasar yang perlu diperhatikan, yaitu:
1.    Nama Konstruktor sama dengan nama Class.
2.    Tidak ada return type yang diberikan kedalam Konstruktor Signature.
3.    Tidak ada return stetement, didalam tubuh konstruktor. 

 Sedangkan pengertian Destruktor adalah (penghancur atau pelenyap) yang secara otomatis akan dijalankan pada saat berakhirnya objek. Syarat dari konstruktor dan destruktor adalah namanya harus sama dengan nama Class nya,,khusus konstruktor boleh mempunyai banyak bentuk (maksudnya dlm satu Class boleh ada lebih dari satu konstruktor) yang di bedakan dengan parameternya.
Contoh program:
class Program
 {
  public static void Main(string[] args)
  {
   Konstruk kon = new Konstruk();
  
   kon.Show();
  
   Console.WriteLine();
   Console.Write("Press any key to continue . . . ");
   Console.ReadKey(true);
  }
 }

 class Konstruk
 {
  public int A,B;
  public Konstruk()    //  <<--- Construktor
  {
   Console.WriteLine("   ==================================");
   Console.WriteLine("   =            Constructor         =");
   Console.WriteLine("   ==================================");
   Console.WriteLine();
   Console.WriteLine();
   Console.WriteLine();
   //inisialisasi
   A = B = 10;
  }
  ~Konstruk()  //  <<--- Destruktor
  {
   Console.WriteLine("Finalizing");
  }
  public void Show()
  {
   Console.WriteLine("Nilai A = {0}",A);
   Console.WriteLine("Nilai B = {0}",B);
   Console.WriteLine();
   Console.WriteLine("Hasil Perkalian = {0}",A*B);
  }
 }
Outputnya:



5.      Private, Protected, dan Public
A.     Public
          Public, seperti namanya, atribut atau fungsi yang diberi access modifier ini bebas diakses dari manapun dari program. Umumnya, sebuah fungsi konstruktor dan destruktor pasti public. Kemudian fungsi-fungsi accessor dan modifier juga diberi akses public. Namun, tidak semua juga harus dijadikan public, karena tidak semua fungsi juga boleh diakses dari luar kelas, tergantung kebutuhan.
B.     Private
          Atribut atau fungsi yang diberi akses private hanya bisa diakses didalam kelas itu sendiri. Umumnya atribut yang menggambarkan sifat objek diberi akses private. Hal ini dilakukan untuk melindungi validitas data dan keperluan error handling. Karena itulah, ditambahkan fungsi accessor dan/atau modifier untuk setiap atribut private. Fungsi accessor atau yang sering disebut fungsi getter dibuat untuk mengambil properti kelas tanpa bisa mengubahnya. Jadi fungsi accessor ini tipe datanya sama seperti atribut yang akan diambil nilainya, dan isinya hanya return value dari atribut yang bersangkutan saja. Sedangkan fungsi modifier atau yang disebut setter dibuat untuk mengubah nilai atribut kelas. Tentunya, dengan disertai error handling dan batasan lain didalamnya. sehingga atribut kelas tetap bisa diubah namun terkontrol dan tepat. Sama halnya dengan fungsi yang tidak selalu diberi akses public, atribut juga tidak harus dan tidak selalu diberi akses private, public, atau protected.
C.           Protected
          Protected merupakan access modifier yang hanya akan muncul jika ada lebih dari 1 kelas dalam suatu soalus permasalahan dan ada kelas yang mendapat pewarisan sifat(inheritance) dari kelas lain. Jadi, dengan memberi akses protected, suatu atribut dan/atau fungsi bisa diakses penuh dari kelas turunan(child).

D.     Perbedaan Public, Private dan Protected

·         Public: anggota pribadi dari kelas dasar hanya dapat diakses oleh anggota yang kelas dasar.
·         Private: anggota publik dari kelas dasar dapat diakses oleh anggota yang kelas dasar,anggota kelas turunan serta anggota yang berada di luar kelas dasar dan kelas turunan.
·         Protected: anggota dilindungi dari kelas dasar dapat diakses oleh anggota kelas dasarserta anggota kelas turunan.
Perbedaan public, private, protected, dan tanpa penentu akses pada variabel :
·           public : variabel dapat di akses pada semua kelas yang menggunakan kelas yang berisi variabel tersebut.
·           Private : Hanya dapat diakses oleh metode2 dalam kelas itu sendiri.
·           Protected : Variabel instan dapat diakses pada kelas sendiri dan subkelasnya.
Tanpa Penentu akses : variabel dapat diakses oleh kelas yang berada dalam package yang sama. Perbedaan public, private, protected, dan tanpa penentu akses pada metode :
·           Public : Metode dapat diakses oleh sembarang kelas.
·           Private : Hanya dapat diakses pada metode2 dalam kelas yang sama.
·           Protected : Metode dapat diakses pada kelas sendiri dan pada subkelasnya.
6.      Karakteristik OOP dan Contohnya
A.     Inheritance
Pengertian Inheritance (Penurunan/Pewarisan) ini merupakan ciri khas dari oop yang tidak terdapat dalam pemrograman prosedural gaya lama. Inheritance adalah turunan atau pewarisan suatu class ke class baru dengan mewakili semua function yang ada di class utama (parent class). Inheritance sering sekali digunakan di dalam pemrograman berorientasi objek atau OOP. Dengan kata lain, class utama (parent class) dengan classes turunannya berhubungan satu sama lain. 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.Inherintance adalah salah satu bentuk penggunaan kembali perangkat lunak dimana suatu kelas baru dibuat dari kelas yang sudah ada sebelumnya dengan memakai variabel data method dari kelas yang sudah ada, serta menambah atribut/pelaku yang baru, kelas baru otomatis memiliki variabel atau fungsi yang dimiliki kelas asal. Tujuannya yaitu membentuk obyek baru yang memiliki sifat sama dengan obyek yang sudah ada sebelumnya.

Keuntungan Inheritance:
·    Saat anda ingin membuat class baru, dan ternyata pada class lain telah ada code yang ingin anda gunakan, maka anda tinggal meng-extend class lain tersebut.”
·    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.
·    Tidak perlu mendefinisikan Variabel Bila membutuhkan , Cukup menurunkan dari class induk.
·    Memudahkan dan Mempercepat pemprogramman , mengurangi Code
Sample inheritance dalam C#.Net
Contoh yang sangat sederhana dengan mengambil Class Manusia sebagai contoh, perhatikan penjelasan di bawah ini:

Class: Manusia
Attribute: Berat Badan, Tinggi Badan, Jenis Kelamin
Method: Bernafas, Makan, Minum, Bekerja, Belajar, Tidur


Class ini dapat diwariskan menjadi SubClass Dosen dan SubClass Mahasiswa. Dan kedua SubClass tersebut dapat memiliki Attribute dan Method tambahan seperti pada contoh di bawah ini:
SubClass: Dosen
Attribute: Berat Badan, Tinggi Badan, Jenis Kelamin, NIP, Kemampuan (Skill), Gelar
Method: Bernafas, Makan, Minum, Bekerja, Belajar, Tidur, Mengajar
SubClass: Mahasiswa
Attribute: Berat Badan, Tinggi Badan, Jenis Kelamin, NIM, Kemampuan (Skill)
Method: Bernafas, Makan, Minum, Bekerja, Belajar, Tidur

Contoh syntax inheritance pada c#:
   1: public class Window
   2:     {
   3:         //objek konstruktor
   4:         public Window(int top, int left)
   5:         {
   6:             this.top = top;
   7:             this.left = left;
   8:         }
   9:
  10:         // simulasi menggambar pada windows
  11:         public void DrawWindow()
  12:         {
  13:             Console.WriteLine("Drawing Window at {0}, {1}",
  14:             top, left);
  15:         }
  16:
  17:         //variabel didefinisikan private sehingga
  18:         //tidak dapat digunakan pada kelas turunannya
  19:         private int top;
  20:         private int left;
  21:     }
  22:
  23:     // ListBox diturunkan dari class Window
  24:     public class ListBox : Window
  25:     {
  26:         // menambahkan parameter pada konstruktor
  27:         public ListBox(int top, int left, string theContents) :
  28:             base(top, left) // call base constructor
  29:         {
  30:             mListBoxContents = theContents;
  31:         }
  32:
  33:         // new version (new keyword) karena
  34:         // pada method di kelas turunan dirubah isinya
  35:         public new void DrawWindow()
  36:         {
  37:             base.DrawWindow(); // memanggil dari base class
  38:             Console.WriteLine("Writing string to the listbox: {0}",
  39:             mListBoxContents);
  40:         }
  41:         private string mListBoxContents; // member variabel baru
  42:     }
  43:
  44:     public class Tester
  45:     {
  46:         public static void Main()
  47:         {
  48:             // membuat instan class baru
  49:             Window w = new Window(5, 10);
  50:             w.DrawWindow();
  51:
  52:             // membuat instan dari class turunan
  53:             ListBox lb = new ListBox(20, 30, "Hello world");
  54:             lb.DrawWindow();
  55:         }
  56:     }

B.            Polymorphisme
          Polymorphism berarti banyak bentuk, maksudnya adalah suatu obyek dapat memiliki berbagai bentuk, sebagai obyek dari Classnya sendiri atau obyect dari Superclassnya. Polymorphism merupakan kemampuan suatu method untuk bekerja dengan lebih dari satu tipe argumen atau 2 object yang berbeda untuk merespon pesan permintaan yang sama dalam suatu cara yang unik. Contoh, saya melatih anjing saya dengan perintah untuk menggonggong dan juga saya melatih kuda untuk merespon perintah saya untuk meringkik. Saya lakukan latihan untuk merespon kepada mereka dengan perintah lisan. Melalui polymorphism saya tahu bahwa anjing dan kuda akan merespon dengan gonggongan atau ringkikan.
Polymorphism itu sendiri terbagi dua yaitu: Overloading dan Overiding
Ø  Overloading : adalah pemakaian beberapa methods ataupun properties dengan nama yang sama, tetapi memiliki daftar parameter/argument yang berbeda. Perbedaan yang dimaksud adalah beda jumlah parameter, beda tipe data, atau beda keduanya (jumlah parameter dan tipe data). Methods ataupun properties yang hanya beda return value (nilai balik) tidak bisa dikatakan sebagai overloading. Keyword yang dipakai adalah Overloads. Jika dalam satu class, keyword ini bersifat optional artinya kita tidak harus menambahkan keyword Overloads ketika mendefinisikan beberapa methods ataupun properties yang menerapkan konsep overloading. Apabila kita tetap ingin memakainya, maka keyword Overloads harus digunakan di semua methods ataupun properties tadi. Apabila beda class, keyword Overloads ini harus digunakan.
 Misalnya method menghitung Luas:
 HitungLuas (int panjang, int lebar)
 Method ini digunakan untuk menghitung luas persegi
 HitungLuas (int alas, int tinggi)
 Method ini digunakan untuk menghitung luas segitiga
Ø  Overriding : kemampuan class turunan untuk memodifikasi methods atau properties dari class induk. Dengan overriding kita bisa membuat implementasi baru pada methods atau properties di class turunan yang berbeda dengan methods atau properties yang ada pada class induk.
Perbedaan utama antara Overloading dengan Overriding adalah pada pemakaian parameter. Pada overloading kita bisa mengubah parameter, sedangkan pada overriding kita tidak boleh mengubah parameter.
Ada beberapa keyword yang bisa dipakai di overriding, antara lain:
·      Keyword Overridable
Keyword ini digunakan pada methods atau properties di class induk yang menandakan bahwa methods atau properties tadi bisa di-override pada class turunan.
·      Keyword Overrides
Keyword ini digunakan pada class turunan yang menandakan bahwa methods atau properties tadi meng-override methods atau properties yang ada di class induk.
·      Keyword Not Overridable
Keyword ini digunakan pada methods atau properties di suatu class yang menandakan bahwa methods atau properties tadi tidak bisa di-override pada class turunan.
·      Keyword MustOverride
Keyword ini digunakan untuk mendeklarasikan abstract methods atau abstract properties. Hanya ada deklarasi header di sini, tanpa ada pendefinisian implementasi. Class yang mempunyai abstract methods atau abstract properties harus didefinisikan juga sebagai abstract class dengan keyword MustInherit.
Aspek kedua yang tidak kalah penting dari inheritance adalah polymorhism, poly berarti banyak dan morph berarti bentuk, jadi polymorphism dapat berarti dapat menggunakan banyak bentuk tanpa harus mengacu details yang sama. Anda dapat mengimplementasikan polymorphism dengan dua cara yaitu:
·       Membuat virtual method pada base class (class induk)
·       Membuat class turunan yang mempunyai method dengan keywordoverride yang mengganti isi dari method dengan keyword virtual yang ada pada base class-nya.
Penggunaan prinsip polymorphism dapat dilihat pada contoh program dibawah ini.
contoh syntax polymorphisme :
   1: public class Window
   2:     {
   3:         //deklarasi konstruktor dengan dua parameter
   4:         public Window(int top, int left)
   5:         {
   6:             this.top = top;
   7:             this.left = left;
   8:         }
   9:
  10:         //method untuk draw window
  11:         public virtual void DrawWindow()
  12:         {
  13:             Console.WriteLine("Window: drawing Window at {0}, {1}",
  14:             top, left);
  15:         }
  16:
  17:         //member variabel dideklarasikan protected
  18:         //berarti dapat diakses dari class turunannya
  19:         protected int top;
  20:         protected int left;
  21:
  22:     }  // end Window
  23:
  24:     // class ListBox diturunkan dari class Window
  25:     public class ListBox : Window
  26:     {
  27:         //konstruktor yang menmanggil konstruktor dari base class nya
  28:         public ListBox(int top,int left,string contents): base(top, left)
  29:         {
  30:             listBoxContents = contents;
  31:         }
  32:
  33:         //method yang di override dari base class-nya
  34:         //karena mempunyai implementasi yang berbeda
  35:         public override void DrawWindow()
  36:         {
  37:             base.DrawWindow(); // invoke the base method
  38:             Console.WriteLine("Writing string to the listbox: {0}",
  39:             listBoxContents);
  40:         }
  41:
  42:         private string listBoxContents; // member variabel baru
  43:     }  // end ListBox
  44:
  45:     public class Button : Window
  46:     {
  47:         public Button(
  48:         int top,
  49:         int left)
  50:             : base(top, left)
  51:         { }
  52:
  53:         // an overridden version (note keyword) because in the
  54:         // derived method we change the behavior
  55:         public override void DrawWindow()
  56:         {
  57:             Console.WriteLine("Drawing a button at {0}, {1}\n",
  58:             top, left);
  59:         }
  60:     }  // end Button
  61:
  62:     public class Tester
  63:     {
  64:         static void Main()
  65:         {
  66:             Window win = new Window(1, 2);
  67:             ListBox lb = new ListBox(3, 4, "Stand alone list box");
  68:             Button b = new Button(5, 6);
  69:             win.DrawWindow();
  70:             lb.DrawWindow();
  71:             b.DrawWindow();
  72:
  73:             Window[] winArray = new Window[3];
  74:             winArray[0] = new Window(1, 2);
  75:             winArray[1] = new ListBox(3, 4, "List box in array");
  76:             winArray[2] = new Button(5, 6);
  77:
  78:             for (int i = 0; i < 3; i++)
  79:             {
  80:                 winArray[i].DrawWindow();
  81:             }   // end for
  82:         }   // end Main
  83:     }      // end Tester
Jika dijalankan akan diperoleh output sebagai berikut:
   1: Window: drawing Window at 1, 2
   2: Window: drawing Window at 3, 4
   3: Writing string to the listbox: Stand alone list box
   4: Drawing a button at 5, 6
   5:
   6: Window: drawing Window at 1, 2
   7: Window: drawing Window at 3, 4
   8: Writing string to the listbox: List box in array
   9: Drawing a button at 5, 6

C.    Encapsulation

      Encapsulation merupakan suatu cara pembungkusan data dan method yang menyusun suatu kelas sehingga kelas dapat dipandang sebagai suatu modul dan cara bagaimana menyembunyikan informasi detail dari suatu class (information hiding) dengan tujuan untuk menghindari interferensi dan menyederhanakan penggunaan sistem itu sendiri. Dalam OOP, Enkapsulasi sangat penting untuk keamanan serta menghindari kesalahan permrograman, pembungkus disini dimaksudkan untuk menjaga suatu proses program agar tidak dapat diakses secara sembarangan atau di intervensi oleh program lain. Konsep enkapsulasi sangat penting dilakukan untuk menjaga kebutuhan program agar dapat diakses sewaktu-waktu, sekaligus menjaga program tersebut. maksudnya secara lebih jelas agar memastikan agar object hanya dapat di ubah oleh object yang mendapat ijin untuk mengubahnya , bila tidak memiliki ijin maka tidak dapat mengubahnya atau membacanya.
Dua hal yang mendasar dalam encapsulasi yakni :
•   Information hiding.
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.
     Dalam kehidupan sehari hari enkapsulasi dapat dimisalkan sebagai arus listrik pada generator, dan sistem perputaran generator untuk menghasilkan arus listrik. Kerja arus listrik tidak mempengaruhi kerja dari sistem perputaran generator, begitu pula sebaliknya. Karena didalam arus listrik tersebut, kita tidak perlu mengetahui bagaimana kinerja sistem perputaran generator, apakah generator berputar kebelakang atau ke depan atau bahkan serong. Begitu pula dalam sistem perputaran generator, kita tidak perlu tahu bagaimana arus listrik, apakah menyala atau tidak.
     Begitulah konsep kerja dari enkapsulasi, dia akan melindungi sebuah program dari akses ataupun intervensi dari program lain yang mempengaruhinya. Hal ini sangat menjaga keutuhan program yang telah dibuat dengan konsep dan rencana yang sudah ditentukan dari awal.
Contoh syntax encapsulation pada c#:
using System;
namespace Test
{
  class Program
  {
      static void Main(string[] args)
      {
          Penjumlahan p = new Penjumlahan(5, 9);
          Penjumlahan q = new Penjumlahan(7, 9);
          Console.WriteLine(p.hitungPenjumlahan());
          Console.WriteLine(q.hitungPenjumlahan());
      }
  }
  class Penjumlahan
  {
      private int a;
      private int b;
      public Penjumlahan(int a, int b)
      {
          this.a = a;
          this.b = b;
      }
      public int hitungPenjumlahan()
      {
          return getA() + getB();
      }
      public int getA()
      {
          return a;
      }
      public void setA(int a)
      {
          this.a = a;
      }
      public int getB()
      {
          return b;
      }
      public void setB(int b)
      {
          this.b = b;
      }
  }
}
 
Dalam contoh sebelumnya variable a dan b tidak memiliki access modifier, sehingga dianggap public oleh C#, sekarang kita meletakan access modifier private pada variable tersebut sehingga varibel tersebut tidak dapat dengan bebas diakses dari luar class, sehingga untuk merubah variable tersebut kita memerlukan Method yang bernama mutator yaitu public int getA() & public int getB() yang mereturn nilai a dan b. Dan untuk dapat mendapatkan / mengetahui nilai dari a & b kita menggunakan Method yang bernama Accessor yaitu public void setA(int a) & public void setB(int b) dimana Method tersebut akan meng-assign nilai a dengan nilai a baru yang kita passingkan pada variable tersebut. Encapsulation ini berfungsi untuk membatasi akses pada variable-varibel yang ada didalam class secara bebas dari luar class, sehingga kita dapat membuat program yang lebih efektif dan efisien.
D.           Abstraction
    Abstraksi  adalah 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. Abstraction ini merupakan cara kita melihat suatu sistem secara sederhana dimana sistem tersebut terdiri dari subsistem-subsistem yang saling berhubungan satu sama lainnya. Abstraction  mewakili versi yang disederhanakan dari objek dunia nyata dalam kelas dan objek. Hal ini berarti dalam pengembangan perangkat lunak seorang programmer akan menggunakan atau menciptakan sejumlah object dimana object tersebut akan ada dan berperilaku pada sistem.
Pada Obyek Motor terdiri dari Sistem Kemudi, Sistem Pengereman, Sistem Pembakaran, Sistem Pengapian. Pada Sistem Pembakaran terdiri dari Subsistem Energi, Subsistem Udara, Subsistem Bahan Bakar. Kita memandang bahwa Obyek Motor terdiri dari Banyak Sistem dan Subsistem yang saling berhubungan.

E.     Aggregation
   Aggregation adalah kondisi ketika object berisi gabungan dari object-object yang berbeda dan bekerja bersama. Contoh mesin pemotong rumput terdiri dari object roda, objects mesin, object pisau dll. Object mesinpun merupakan gabungan dari berbagai object. Kemampuan untuk menggunakan aggregation dalam OOP adalah satu feature yang powerful yang memungkinkan model menjadi akurat.

7.      Overloading
Overloading Merupakan Suatu Function yang memiliki parameter , dan function tersebut dapat memiliki nama function yang sama dengan yang lainnya dengan syarat jumlah parameter mesti berbeda atau bisa kita bilang Situasi di mana beberapa rutin dalam sebuah program dapat mempunyai nama sama tetapi berbeda jenis parameter dan/utau jenis return value.

Untuk lebih Jelasnya Overloading secara singkat :
Ø Nama Method Boleh Sama , Tapi Jumlah Parameter Mesti berbeda
Ø Nilai Yang Di Return Harus memiliki Tipe yang sama
Sample Overloading pada function TaxCalc pada C#.Net :
>>>Overloading C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
namespace csharp_polymorpism
{
    public class KelilingSegi
    {
        public double sisiA;
        public double sisiB;
        public double sisiC;
        //Constuctor satu
        public void Keliling (double a){
            this.sisiA=a;
            this.sisiB=1;
            this.sisiC=1;
        }
        //Constuctor dua
        public void Keliling (double a, double b){
        this.sisiA=a;
        this.sisiB=b;
        this.sisiC=1;
        }
        //Constuctor tiga
        public void Keliling (double a, double b, double c){
            this.sisiA=a;
            this.sisiB=b;
            this.sisiC=c;
        }
    }
 class Program
 {
     public static void Main(string[] args)
     {
         KelilingSegi tampil = new KelilingSegi();
         KelilingSegi tampil_dua = new KelilingSegi();
         KelilingSegi tampil_tiga = new KelilingSegi();
         Console.WriteLine("Tampil Constructor Pertama");
         tampil.Keliling(10);
         Console.WriteLine("Sisi A = "+tampil.sisiA);
         Console.WriteLine("Sisi B = "+tampil.sisiB);
         Console.WriteLine("Sisi C = "+tampil.sisiC);
         Console.WriteLine("Tampil Constructor Kedua");
         tampil_dua.Keliling(10, 11);
         Console.WriteLine("Sisi A = "+tampil_dua.sisiA);
         Console.WriteLine("Sisi B = "+tampil_dua.sisiB);
         Console.WriteLine("Sisi C = "+tampil_dua.sisiC);
         Console.WriteLine("Tampil Constructor Ketiga");
         tampil_tiga.Keliling(10, 11, 12);
         Console.WriteLine("Sisi A = "+tampil_tiga.sisiA);
         Console.WriteLine("Sisi B = "+tampil_tiga.sisiB);
         Console.WriteLine("Sisi C = "+tampil_tiga.sisiC);
         Console.Write("Press any key to continue . . . ");
         Console.ReadKey(true);
     }
 }
}

Overriding Merupakan Suatu Keadaan Dimana kelas anak dapat mengubah atau bisa kita bilang memodifikasi atau memperluas data dan method pada kelas induk.
Keuntungan Overriding : dapat menambahkan sifat / atribut pada kelas induk nya. Contoh Overriding pada C#.Net:
>>>Overiding  C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
namespace csharp_overiding
{
class first
{
public void show()
{
Console.WriteLine("Keterangan ini ditampilkan oleh class first");
}
}
class second : first {
public void show1()
{
Console.WriteLine("Keterangan ini ditampilkan oleh class dua");
}
}
class Program {

public static void Main(string[] args)
{
first satu = new first();
satu.show();
second dua = new second();
dua.show1();
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}

Outputnya adalah:

polymorpis_overridingc++



*8.      Membuat Program Hitung Mata Kuliah Mahasiswa

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace konversiNilaiMahasiswa
{
    class Nilai_Mahasiswa
    {
        //atribut
        private double ntugas;
        private double npartisipasi;
        private double nuts;
        private double nuas;
        private string nhuruf;
        private double nakhir;

        public double _ntugas
        {
            get { return ntugas; }
            set { ntugas = value; }
        }
        public double _npartisipasi
        {
            get { return npartisipasi; }
            set { npartisipasi = value; }
        }
        public double _nuts
        {
            get { return nuts; }
            set { nuts = value; }
        }
        public double _nuas
        {
            get { return nuas; }
            set { nuas = value; }
        }
        public double HitungNilaiAkhir(double ntugas, double npartisipasi,double nuts,double nuas)
        {
            return 0.3 * ntugas + 0.2 * npartisipasi + 0.3 * nuts + 0.2 * nuas;
        }
        public string konversiHuruf(double na)
        {
            string nh = "";
            if (na > 85 && na <= 100)
            {
                nh = "A";

            }
            if (na > 80 && na <= 85)
            {
                nh = "A-";
            }
            if (na > 75 && na <= 80)
            {
                nh = "B+";
            }
            if (na > 70 && na <= 75)
            {
                nh = "B";
            }
            if (na > 65 && na <= 70)
            {
                nh = "B-";
            }
            if (na > 60 && na <= 65)
            {
                nh = "C+";
            }
            if (na > 55 && na <= 60)
            {
                nh = "C";
            }
            if (na > 50 && na <= 55)
            {
                nh = "C-";
            }
            if (na > 40 && na <= 50)
            {
                nh = "D";
            }
            if (na <= 40)
            {
                nh = "E";
            }
            return nh;
        }

        public void tampil()
        {
            Console.WriteLine("Menghitung Nilai Mata Kuliah Mahasiswa");
            Console.WriteLine("<===============================================>");
            Console.Write("Nilai Tugas = ");
            ntugas = double.Parse(Console.ReadLine());
            Console.Write("Nilai Partisipasi = ");
            npartisipasi = double.Parse(Console.ReadLine());
            Console.Write("Nilai UTS = " );
            nuts = double.Parse(Console.ReadLine());
            Console.Write("Nilai UAS = ");
            nuas = double.Parse(Console.ReadLine());
            Console.WriteLine("-----------------------------------------------");
            nakhir =HitungNilaiAkhir(ntugas,npartisipasi,nuts,nuas);
            Console.WriteLine("Nilai Akhir = " + nakhir);
            Console.WriteLine("-----------------------------------------------");
            nhuruf = konversiHuruf(nakhir);
            Console.Write("nilai huruf  = " + nhuruf);

        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace konversiNilaiMahasiswa
{
    class Program
    {
        static void Main(string[] args)
        {
            Nilai_Mahasiswa nl1 = new Nilai_Mahasiswa();
            nl1.tampil();

            Console.ReadKey();

        }
    }
}

Outputnya adalah:


Referensi:


6 komentar:

  1. Isi Blognya keren & Bermanfaat,namun buat tampilannya kurang sinkron... jadi membuat pembaca kurang nyaman dalam membacanya
    harusnya antara tulisan & Background warna harus berbeda seperti kalau bg warna biru maka tulisanya putih/kuning biar bisa mbaca.... :)

    BalasHapus
  2. sangat membantu, terimakasih
    lihat juga www.novisnote.blogspot.com

    BalasHapus
  3. background pink, warna huruf biru... sakit mata aku liatnya

    BalasHapus
  4. warna backgroud dan fontnya bisa tolong gunakan estetika?sakit mata liatnya, boro2 bisa baca

    BalasHapus
  5. LUAR BINASA BLOG ANDA. BUKAN DAPAT ILMU CUMAN SAKIT MATA, INI YG PUNYA BLOG JURUSAN APA ? AKLO INFORMATIKA / SISTEM INFORMASI ATAU APALAH BRATI INI NILAI IMK NYA E YAH ? BACKGROUND PINK + TULISAN FONT BIRU + LATAR BLAKANG BACKGROUND BIRU LUAR BIASA TINGKAT KAN

    BTW INI KEKNYA DI SENGAJA, CIRI2 ORG PELIT ILMU HAHAHAHA SEMGAT YAH INDONESIA GITULOH

    BalasHapus
  6. BLOG INI SANGAT LUARRRR BIASAAAAAA TIDAK MEMBANTU SAMA SEKALIIIIIIIII

    BalasHapus