Ads Home1

C# Tutorial - Perbedaan Antara Tipe Akses Public, Private, Protected dan Internal

http://www.xcodeplus.net/2017/11/csharp-tutorial-perbedaan-antara-tipe-akses.html


Mengenal Apa itu Tipe Akses

Sejauh ini contoh-contoh program yang kita buat masih memiliki data dan metode dengan tipe akses public. Tipe akses sendiri menentukan apakah data atau metode dapat di akses oleh semua bagian kode di dalam program atau tidak. Tipe akses merupakan penentu hak akses terhadap data maupun fungsi yang terdapat di dalam suatu kelas, artinya akan terdapat pembatasan akses terhadap data maupun fungsi tersebut sehingga tidak semua kelas maupun lingkungan program dapat bebas mengaksesnya.

Tipe akses sendiri ditentukan oleh seorang programmer (si pembuat program) kapan tipe akses public digunakan, kapan tipe akses private digunakan dan sebagainya. Tipe akses ini sangatlah penting, oleh karna itu Anda harus mengetahui perbedaan dari ke-empat tipe akses tersebut, kapan Anda harus menggunakan tipe akses public atau private, protected maupun internal.


Berbeda dengan Bahasa pemrograman popular lainnya seperti C++, dalam C#, ada 4 (empat) tingkat akses yang dapat digunakan untuk menentukan bagaimana data maupun fungsi di dalam suatu kelas dapat diakses dari lingkungan luar. Tingkat akses tersebut adalah public, private, protected, dan internal. Selengkapnya mari kita lihat perbedaan antara masing-masing dari tingkat akses tersebut di bawah ini.




Tipe Akses Private

Tingkat akses ini berguna untuk memberikan hak akses data hanya kepada kelas yang bersangkutan saja. Artinya kelas-kelas turunan ataupun lingkungan luar di dalam program tidak diizinkan untuk mengakses data tersebut. Berikut ini contoh pendefinisian sebuah kelas yang menggunakan tingkat akses private.


    class DemoPrivate{
         private int data;    // data akan bersifat private.
         private string nama; // nama akan bersifat private.
}

Harus Anda perhatikan disini, secara default jika kita tidak menuliskan tingkat akses dalam pendeklarasian data (maupun fungsi) dalam sebuah kelas, maka data ataupun fungsi tersebut akan dianggap sebagai data private. Dalam contoh program di atas, kita mendefinisikan data yang hak aksesnya bersifat private ini berarti kelas-kelas lain, maupun fungsi yang ada di dalam program tidak dapat mengakses data yang berada di dalam kelas DemoPrivate, ini terjadi karena kita mendefinisikan hak dengan tingkat akses private. Untuk membuktikan hal tersebut lihatlah contoh program di bawah ini.

PROGRAM 1.1

using System;


namespace CSharpTutorials
{
    class DemoPrivate
    {
        private string nama; // nama akan bersifat private.
        int usia;  // usia secara default akan bersifat private.

        // Metode SetNama
        public void SetNama()
        {
            // Input data nama.
            nama = Console.ReadLine();
           
        }
        
        // Metode SetUsia
        public void SetUsia()
        {
            // Input data usia.
            usia = Convert.ToInt32(Console.ReadLine());
        }

        // Metode GetNama
        public void GetNama()
        {
            // Menampilkan data nama ke layar.
            Console.WriteLine("Nama : " + nama);
           

        }
        
         // Metode GetUsia
        public void GetUsia()
        {
            // Menampilkan data usia ke layar.
            Console.WriteLine("Usia : " + usia);
        }

    }

    class Program
    {
        static void Main()
        {
            // Membuat dari kelas DemoPrivate
            DemoPrivate obj = new DemoPrivate();

            // Memanggil metode SetNama dari kelas DemoPrivate.
            obj.SetNama();
            // Memanggil metode SetUsia dari kelas DemoPrivate.
            obj.SetUsia();
            // Memanggil metode GetNama dari kelas DemoPrivate.
            obj.GetNama();
            // Memanggil metode GetUsia dari kelas DemoPrivate.
            obj.GetUsia();

            Console.WriteLine("\n");

            
            // Pernyataan dibawah ini tidak dapat dikompilasi.
            // karna nama bersifat private
            // SALAH, obj.nama = "The Best Resource to Learn to Code"; 
            // SALAH, Console.WriteLine("Nama Baru: " + obj.nama);  

            Console.ReadLine();


        }
    }        
    
}


HASIL PROGRAM 1.1
Al-Khawarizmi
21
Nama : Al-Khawarizmi
Usia : 21


Dalam tipe akses private baik anggota kelas yang berupa data maupun fungsi tidak dapat didefinisikan di dalam kelas lain atau yang bukan kelas pemiliknya sehingga jika kita tetap melakukan hal tersebut, program yang kita buat tidak dapat dijalankan, biasanya akan ada keterangan kesalahan seperti berikut:”Error CS0122' DemoPublic.nama' is inaccessible due to its protection level”. Metode-metode di dalam kelas lain (sebagai contoh disini: metode Main() ) tidak diizinkan untuk mengaksesnya. 



Tipe Akses Public

Sejauh ini kita seringkali menggunakan tipe akses public dalam pendefinisan tingkat akses sebuah data maupun fungsi di suatu kelas. Tingkat akses ini berfungsi untuk memberikan hak akses secara umum atau public kepada kelas-kelas turunannya maupun terhadap lingkunga luar di dalam program. Bagian ini biasanya berisi fungsi-fungsi yang akan dijadikan sebagai penghubung (interface) dari bagian private suatu kelas dengan lingkungan luar. Berikut ini potongan kode program yang menggambarkan penggunaan tingkat akses public.

class DemoPublic{
       public int data; // data akan bersifat public.
       public string nama; // nama akan bersifat public
}


Disini bisa kita lihat pada potongan kode program di atas, kita mendeklarasikan dua buah anggota kelas yang berada di dalam kelas DemoPublic yang keduanya memiliki hak akses public sehingga baik anggota di dalam kelas dan juga diluar kelas dapat mengakses data tersebut. Untuk membuktikannya di bawah ini contoh program yang menggambarkan penggunaan tipe akses public.

PROGRAM 1.2
using System;


namespace CSharpTutorials
{
    class DemoPublic
    {
        public string nama; // nama akan bersifat public.

        // Metode SetNama
        public void SetNama()
        {
            // Memasukan data.
            nama = Console.ReadLine();
        }

        // Metode GetNama
        public void GetNama()
        {
            // Menampilkan data ke layar.
            Console.WriteLine("Nama : " + nama);

        }

    }

    class Program
    {
        static void Main()
        {
            // Membuat dari kelas DemoPublic.
            DemoPublic obj = new DemoPublic();

            // Memanggil metode SetNama dari kelas DemoPublic.
            obj.SetNama();
            // Memanggil metode GetNama dari kelas DemoPublic.
            obj.GetNama();

            Console.WriteLine("\n");

            // Memanggil data nama yang bersifat public secara langsung.
            obj.nama = "The Best Resource to Learn to Code";
            Console.WriteLine("Nama Baru: " + obj.nama);



            Console.ReadLine();

        }
    }  
}


HASIL PROGRAM 1.2
XCODEPLUS
Nama : XCODEPLUS


Nama Baru: The Best Resource to Learn to Code



Bisa kita lihat disini, dengan mendeklarasikan tipe akses public terhadap anggota kelas yang berupa data di dalam kelas DemoPublic, kelas lain selain dari kelas DemoPublic sendiri diizinkan untuk mengakses anggota dari kelas DemoPublic, sehingga pada saat kita ingin menginisialisasi data nama yang berada di dalam kelas DemoPublic dapat dilakukan tanpa adanya kesalahan (error). 

Dalam proses pemanggilannya kita hanya perlu memerintahkan referensi obj untuk memanggil data nama dan lalu mengubah data yang sebelumnya disimpan ke dalam variabel nama tersebut. Tentu hal ini tidak dapat dilakukan jika hak akses yang diberikan berupa private, inilah letak perbedaannya dari kedua hak akses tersebut. Saat pembuatan program hal inilah yang harus kita pikirkan, kapan kita menggunakan tipe akses private, dan kapan kita harus mendefinisikan tipe akses public.


Tipe Akses Protected

Tingkat akses ini digunakan untuk memberikan hak akses terhadap data maupun fungsi di dalam suatu kelas sehingga data tersebut dapat diakses oleh kelas turunannya. Dengan mendeklarasikan suatu data maupun metode menggunakan tipe akses protected maka data maupun metode tersebut hanya dapat diakses oleh kelas pemilikinya dan kelas-kelas lain yang merupakan turunan dari kelas tersebut. Dengan kata lain, kelas-kelas lain yang tidak memiliki hubungan hirarki tidak diberikan hak untuk mengakses data dan metode bersangkutan.

Berikut di bawah ini potongan kode program yang akan menggambarkan penggunaan tingkat akses protected di dalam suatu kelas.


class DemoProtected{
       protected int usia; // usia akan bersifat protected.
       protected string nama; // nama akan bersifat protected
}

Pada contoh potongan kode program di atas, terlihat bagaimana tipe akses protected di definisikan, pada saat kita mendefiniskan suatu anggota kelas dengan tingkat akses protected, data maupun fungsi dari kelas DemoProtected dapat dikenal (diakses) oleh kelas yang merupakan kelas turunannya, akan tetapi metode-metode kelas yang bukan merupakan kelas turunannya tidak dapat mengakses data tersebut. Untuk lebih memahami cara kerja dari tipe akses protected, silahkan Anda perhatikan contoh program di bawah ini.

PROGRAM 1.3
using System;


namespace CSharpTutorials
{
    // Mendefinisikan kelas A yang merupakan
    // Kelas dasar.
    class A
    {
        // Mendeklarasikan data protected.
        protected string nama_A;
        protected int usia_A;

        // Metode SetNama
        public void SetNama(string nama)
        {
            nama_A = nama;
        }

        // Metode GetNama
        public string GetNama()
        {
            return nama_A;
        }

        // Metode SetUsia
        public void SetUsia(int usia)
        {
            usia_A = usia;
        }

        // Metode GetUsia
        public int GetUsia()
        {
            return usia_A;
        }
    }

    // Mendefinisikan kelas B yang merupakan
    // Kelas turunan dari kelas A.
    class B : A
    {
        // Mendeklarasikan data private
        private string nama_B;
        private int usia_B;

        // Metode SetNAMA
        public void SetNAMA(string Nama)
        {
            nama_B = Nama;
        }

        // Metode GetNAMA
        public string GetNAMA()
        {
            return nama_B;
        }

        // Metode SetUSIA
        public void SetUSIA(int Usia)
        {
            usia_B = Usia;
        }

        // Metode GetUSIA
        public int GetUSIA()
        {
            return usia_B;
        }

        public void CetakData()
        {
            // Mengakses data 'nama_A' dari kelas A melalui kelas B
            Console.WriteLine("nama_A: " + nama_A); // Pernyataan ini benar.

            // Mengakses data 'usia_A' dari kelas A melalui kelas B
            Console.WriteLine("usia_A: " + usia_A); // Pernyataan ini benar.

            // Mengakses data milik sendiri.
            Console.WriteLine("nama_B: " + nama_B);
            Console.WriteLine("usia_B: " + usia_B);
        }

    }

    // Kelas utama.
    class Program
    {
        static void Main()
        {

            // Membuat objek dari kelas A.
            A obj1 = new A();

            // baris kode di bawah ini akan menyebabkan kesalahan
            // karna nama_A dan usia_A bersifat protected.

            // obj1.nama_A = "Tommy"; <- Salah
            // obj1.usia_A = 21; <- Salah

            
            // Mengisi data
            obj1.SetNama("Tommy"); // Benar
            obj1.SetUsia(27); 
            
            // Menampilkan data ke layar
            Console.WriteLine("OBJECT A: ");
            Console.WriteLine("nama: " + obj1.GetNama());
            Console.WriteLine("usia: " + obj1.GetUsia());

            // Baris baru
            Console.WriteLine();

            // Membuat objek dari kelas B
            B obj2 = new B();

            // Mengisi data
            obj2.SetNAMA("Luke"); // Metode milik kelas B
            obj2.SetUSIA(21); // Metode milik kelas B

            obj2.SetNama("Luna"); // Metode milik kelas A
            obj2.SetUsia(19); // Metode milik kelas A

            Console.WriteLine("OBJECT B");

            // Menampilkan hasil
            obj2.CetakData();


            Console.ReadLine();
        }
    }           
    
}


HASIL PROGRAM 1.3
OBJECT A:
nama: Tommy
usia: 27

OBJECT B
nama_A: Luna
usia_A: 19
nama_B: Luke
usia_B: 21

Dengan mendeklarasikan data nama_A dan usia_A di dalam kelas A menggunakan tipe akses protected maka data tersebut dapat di akses oleh kelas B yang merupakan kelas turunan.

public void CetakData()
{
  // Mengakses data 'nama_A' dari kelas A melalui kelas B
 Console.WriteLine("nama_A: " + nama_A); // Pernyataan ini benar.

 // Mengakses data 'usia_A' dari kelas A melalui kelas B
 Console.WriteLine("usia_A: " + usia_A); // Pernyataan ini benar.

 // Mengakses data milik sendiri.
 Console.WriteLine("nama_B: " + nama_B);
 Console.WriteLine("usia_B: " + usia_B);
        
}

Namun, data nama_A dan usia_A tidak dapat diakses oleh kelas lain yang bukan turunan dari kelas A. Dalam contoh ini, kelas program tidak diizinkan untuk mengakses data tersebut.

// baris kode di bawah ini akan menyebabkan kesalahan
// karna nama_A dan usia_A bersifat protected.

// obj1.nama_A = "Tommy"; <- Salah
// obj1.usia_A = 21; <- Salah

Jika tetap dijalankan, pada saat dikompilasi akan ada informasi kesalahan seperti berikut: “Error CS0122    'A.nama_A' is inaccessible due to its protection level”.


Tipe Akses Internal

Sejauh ini kita telah membahas mengenai tiga tingkat akses popular yang seringkali kita jumpai di dalam program, di dalam C# ada satu tipe akses lagi, yaitu internal. Data yang dideklarasikan dengan tipe akses internal hanya akan dikenal di dalam assembly yang sama. Dengan kata lain, assembly lain tidak dapat mengakses data tersebut.

Tipe akses internal dapat diterapkan untuk kelas, struktur, interface, dan anggota-anggotanya. Selain itu, tipe akses internal juga dapat diterapkan pada enumerasi. Berikut ini contoh kode program yang akan menunjukan penggunaan kata kunci internal.


PROGRAM 1.4
using System;


namespace CSharpTutorials
{
    // Mendefinisikan kelas DemoInternal
    class DemoInternal
    {
        // Mendeklarasikan data dengan
        // tingkat akses internal
        internal int nilai;

        // Metode SetNilai
        public void SetNilai(int nilai)
        {
            this.nilai = nilai;
        }

        // Metode GetNilai
        public int GetNilai()
        {
            return nilai;
        }

    }

    
    // Kelas utama.
    class Program
    {
        static void Main()
        {
            // Membuat objek untuk kelas DemoInternal
            DemoInternal obj = new DemoInternal();

            // Mengakses metode yang ada di kelas DemoInternal
            obj.SetNilai(100);
            
            // Menampilkan data ke layar
            Console.WriteLine("Nilai 1: " + obj.GetNilai());

            // Mengakses data nilai.
            obj.nilai = 20;

            // Menampilkan data ke layar
            Console.WriteLine("Nilai 2: " + obj.GetNilai());

            Console.ReadLine();
        }
    }

}


HASIL PROGRAM 1.4
Nilai 1: 100
Nilai 2: 20


Pada kode program di atas. metode Main() dapat mengakses data nilai di dalam kelas DemoInternal karena kelas DemoInternal dan kelas Program berada dalam satu file (assembly yang sama). Tipe akses internal juga sering dikombinasikan dengan tipe akses protected, menjadi protected internal, yang hanya dapat diterapkan untuk anggota kelas. Data dengan tipe akses protected internal boleh diakses oleh kelas-kelas lain yang berada di dalam satu assembly atau oleh kelas-kelas turunan.





C# (dibaca: C Sharp) merupakan bahasa pemrograman generasi baru yang mewah, kaya akan fitur, dan dapat digunakan untuk membuat beraneka raga program/aplikasi di berbagai bidang. C# mendukung beberapa paradigma pemrograman: imperatif, deklaratif, fungsional, serta pemrograman berorientasi objek. C# termasuk dalam keluarga C, dan fitur-fiturnya banyak diadopsi dari Java dan C++. C# menggunakan pustaka (library) yang terdapat dalam .NET Framework, kelengkapan di dalam pustaka .NET Framework menjadikan proses pengembangan program/aplikasi menggunakan C# relatif lebih mudah dan cepat jika dibandingkan dengan C++ dan Java.

No comments:

Kami menerima masukan dari anda jika memang ada pembahasan yang keliru dan kami sangat senang jika anda dapat berkontribusi untuk menyempurnakan postingan kami. Anda dapat mengirimkan email ke : hari18.muhammad@gmail.com

Jika postingan ini bermanfaat jangan lupa share postingan ini. Kami sangat merekomendasikan untuk anda yang membutuhkan informasi tentang computer stuff silakan subscribe blog kami dapatkan informasi terupdate dari kami secara gratiss. Terimakasih!

Powered by Blogger.