Sunday, April 27, 2014

Abstract class dan Interface pada bahasa pemograman C#

a. Abstract class
Abstract class adalah sebuah class yang tidak dapat dibuat objeknya. Abstract class hanya bisa dijadikan sebagai class yang menggeneralisasikan anggota-anggotanya kepada class turunannya dan bukan untuk di jadikan objek.
Misalkan saya mempunyai sebuah class parent bernama Hewan.
Dan class Ayam yang merupakan turunan dari class hewan.

Maka, yang lebih cocok untuk dijadikan abstract class adalah class Hewan, karena hewan bersifat abstract (belum jelas hewan jenis apa, bentuk nya, sifatnya, dll) dan sifat-sifat kehewanan dapat di turunkan kebada turunannya.

Sedangkan Ayam  memiliki objek yang jelas yaitu memiliki paruh, bentuk, dan ciri has lainnya, maka class Ayam bisa di buat objeknya. Dan satu hal lagi bahwa Ayam adalah seekor hewan, yang mempunyai sifat kehewanan, oleh karena itu Ayam akan mempunyai sifat-sifat seperti seeokor hewan. Misalkan sifat seekor hewan adalah bisa mempertahankan diri dari ancaman, namun sifat ini juga berbeda untuk setiap hewan, contohnya, Ayam akan mempertahankan diri dengan mematuk musuhnya, dan kerbau mempertahankan diri dengan cata menyeruduk.

Maka jika kasus seperti ini di implementasikan pada sebuah program :
class abstract Hewan akan memiliki abstract method yang bernama MempertahankanDiri(). Abstract method yaitu method yang tidak memiliki statement (method kosong) yang harus di timpa (override) oleh class turunan yang akan mengimplementasikannya.
Abstract class tidak harus selalu memiliki abstract method, abstract class juga boleh memiliki non abstract method (method biasa).
Contoh program :

Class Hewan
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AbstractClassDanInterface
{
    public abstract class Hewan
    {
        private int _beratBadan;

        public int beratBadan
        {
            get { return _beratBadan; }
            set
            {
                if (value <= 0)
                    value = 1;
                else
                    _beratBadan = value;
            }
        }
        //Ini adalah abstract method
        public abstract void MempertahankanDiri();
    }
}

class Ayam
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AbstractClassDanInterface
{
    class Ayam : Hewan
    {
        public Ayam()
        {
            beratBadan = 5;
        }

        //Mengimplementasikan method MempertahankanDiri khas Ayam
        public override void MempertahankanDiri()
        {
            Console.WriteLine("Ayam mematuk dengan sangat keras .... ");
        }
    }
}

b. Interface
Interface hampir sama seperti abstract class namun interface bukanlah sebuah class. Sebuah class hanya bisa menjadi keturunan dari satu buah class saja, sedangkan sebuah class bisa mengadopsi banyak Interface.
Misalkan saya mempunyai dua buah Interface yaitu IDapatTerbang, dan IDapatLoncat.
IDapatTerbang memiliki method Terbang(), dan IDapatLoncat memiliki method Loncat.

Maka class ayam bisa mengadopsi dua interface tersebut dan bisa membuat method yang sama dengan dua Interface tersebut yaitu method Terbang() dan Loncat.

Perlu di catat bahwa sebuah interface hanya boleh memiliki sebuah method kosong saja, yang nantinya method tersebut harus di buat lagi oleh class yang mengadopsinya. method pada sebuah Interface tidak memiliki akses identifier (otomatis) public. Interface juga tidak boleh memiliki field.

Contoh program :
Interface IDapatTerbang (penulisan Interface harus di awali dengan huruf I)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AbstractClassDanInterface
{
    public interface IDapatTerbang
    {
        void Terbang();
    }
}
Interface IDapatLoncat
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AbstractClassDanInterface
{
    interface IDapatLoncat
    {
        void Loncat();
    }
}
Class Ayam
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AbstractClassDanInterface
{
    class Ayam : Hewan, IDapatTerbang, IDapatLoncat
    {
        public Ayam()
        {
            beratBadan = 5;
        }

        //Mengimplementasikan method MempertahankanDiri khas Ayam
        public override void MempertahankanDiri()
        {
            Console.WriteLine("Ayam mematuk dengan sangat keras ....!!!");
        }

        //Membuat method Terbang baru khas Ayam
        public void Terbang()
        {
            Console.WriteLine("Ayam sedang terbang ...!!!");
        }

        //Membuat method Loncat baru khas Ayam
        public void Loncat()
        {
            Console.WriteLine("Ayan sedang loncat ...!!!");
        }
    }
}
Program utama
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AbstractClassDanInterface
{
    class Program
    {
        static void Main(string[] args)
        {
            Ayam siImoet = new Ayam();

            siImoet.MempertahankanDiri();
            siImoet.Terbang();
            siImoet.Loncat();

            Console.WriteLine("Berat badan siImoet : {0}", siImoet.beratBadan);
        }
    }
}

Jika di jalankan hasilnya adalah seperti berikut :