İlginizi Çekebilir
C# Override Örnekleri
C# Encapsulation Nedir
  1. Ana Sayfa
  2. C#
  3. C# Kapsülleme Nedir?

C# Kapsülleme Nedir?

Nesne yönelimli programlama içerisinde önemli bir yere sahip olan kapsülleme (encapsulation) kavramını “C# Kapsülleme Nedir” başlığı altında ele alarak uçsuz bucaksız bir serüvene giriş yapacağız.

Temel olarak oluşturmuş olduğumuz sınıf yapısında yer alan metotların, değişkenlerin korunmasını sağlayan ve ulaşılmasını engelleyeceğimiz, bir nevi güvenli bir kasa görevini üstlenen kapsülleme yapısını öğrenmeye başlayalım.👨🏻‍🏫🎓

C# Kapsülleme Nedir?

Nesne yönelimli programlama dillerinde önemli bir yere sahip olan kapsülleme kavramını encapsulation olarak da görmemiz mümkündür.

C# Kapsülleme, sınıf yapımız içerisinde yer alan private erişim seviyesindeki değişkenlerin ve metot yapılarının dışarıdan güvenli bir şekilde erişilmesini sağlamak amacıyla ya da güvenli bir şekilde muhafaza etmek için kullanılan önemli bir nesne yönelimli programlama özelliğidir. 🔒🔑

Kapsülleme kavramının tanımı teorik olarak anlaması zor gelmiş olabilir. Bu yüzden bilindik bir örnekten yardım alarak anlatımımı destekleyeceğim. Bilgisayarımızı çalıştırmak için bir enerji kaynağına bağlı olması ve güç tuşuna basılmasının gerektiğini biliyoruz fakat bilgisayarımız açılırken hangi işlemleri uyguladığını bilmiyoruz. Sadece bu işlemlerin nasıl yapılacağı hakkında bir fikrimiz olabilir. Nesne yönelimli programlama olgusunda bu olaya kapsülleme yani encapsulation denir.

Bu yapıyı anlayabilmek için programlama dillerinde bulunan erişim belirleyicilerini iyi tanımamız gerekmektedir. Bunun için daha önceden “C# OOP Nedir” içeriğinde paylaşmış olduğum bir görselden yardım alarak bu erişim belirleyicilerini biraz yakından tanıyalım.

C Sharp Erişim Seviyeleri
C# Kapsülleme Erişim Seviyeleri

Yukarıdaki görsel erişim belirleyiciler kavramı hakkında bir fikir sahibi olmamıza yardımcı olsada genel hatlarıyla c# üzerinde bulunan erişim belirleyicilerinin hangi yapılarda nasıl erişim imkanı sağladığı hakkında bir fikir sahibi olamıyoruz. Bunun için basit bir tablo çiziminden yararlanabiliriz.

C# Kapsülleme Nedir - Erişim Belirleyiciler
C# Erişim Belirleyiciler

Tabloda görüldüğü üzere kapsülleme için kullanacağımız private yani field (alan) özellikteki değişkenlere sadece bulunduğu sınıf üzerinden erişim sağlayabiliyoruz. Bu yapıya farklı yerlerden güvenli bir şekilde erişmek, içerisindeki veriyi değiştirmek istediğimiz zaman ise get ve set metotlarını kullanmamız gerekmektedir.

Bu yüzden isterseniz bir sonraki aşamamız olan “C# Get ve Set Metotlarının Kullanımına” geçiş yapabiliriz. 🚀

C# Get ve Set Metotları

Kapsülleme kavramının temel prensibinin oluşturan get ve set metotlarını ulaşmak ya da değiştirmek istediğimiz yapıların kontrol mekanizması olarak düşünebiliriz. Karşılaşacağımız problemleri önlemek, uygulanacak işlemleri güvenilir ve kontrollü bir yapı içerisinde gerçekleştirmek için encapsulation işlemini uygularken get ve set metotlarını kullanırız.

C# Get Metodu Nedir?

Bir değişkenimizin ya da metot yapımızın değerine ulaşmak istediğimiz zaman daha önceden tanımlamış olduğumuz ulaşmak istediğimiz özelliğin GET metodu çalışır.

C# Set Metodu Nedir?

Erişim belirleyiciler ile kısıtlamış olduğumuz özelliği başka bir sınıf üzerinde atama gerçekleştirmek istediğimiz zaman SET metodundan faydalanırız. Atama gerçekleştirdiğimiz değere SET metodu içerisinde value anahtar sözcüğü ile erişim sağlanır. Bu (value) anahtar sözcüğün önceden belirlenmiş herhangi bir yapısı bulunmamaktadır. Yani özelliğimize atanacak değer türü hangi türden (string, int, double) ise value anahtar sözcüğümüz o türden olur.

Teorik olarak kapsülleme işlemini uygularken kullanacağımız get ve set metotlarını tanımış olduk. Fakat bu metot yapılarının nasıl kullanmamız gerektiği konusunda henüz bir fikre sahip değiliz. Bu yüzden isterseniz gelin birlikte basit bir tanımlama gerçekleştirerek get ve set metotlarının kullanımı hakkında fikir sahibi olalım. 💪🏻

C# Get ve Set Metot Kullanımı

GET ve SET metot yapılarını birden fazla yöntemle kullanmamız mümkündür. Klasik olarak en çok kullanacağımız ve sıklıkla göreceğimiz yapıyı görerek C# get ve set metot kullanımı hakkında ilk tanımlamamızı inceleyelim.

private ulong TCKimlik;

public ulong TCkimlikNo
{
    get
    {
        return TCKimlik;
    }
    set
    {
        TCKimlik = value;
    }
}

Tabi istersek bu tanımı daha farklı bir şekilde kullanacağımız GET ve SET metot yapılarına erişim belirleyicisi tanımlayarak gerçekleştirebiliriz.

private int telefonNo;

public int TelefonNo
{
    get
    {
        return telefonNo;
    }
    private set
    {
        TelefonNo = value;
    }
}

Klasik halden daha farkla bir hal almış olan bu kullanım örneğimizde SET metodunu private olarak tanımladık. Bu tanımlamamız yüzünden diğer sınıflardan ilgili özelliğimizin mevcut değeri okunabilirken bir atama işlemi gerçekleştirilemez.

Artık kapsülleme kavramını öğrendiğimize ve nasıl kullanmamız gerektiği konusunda bir fikir sahibi olduğumuza göre konuyu pekiştirecek, son vuruşu gerçekleştirecek ve hafızamızda kalıcı bir yer etmesine yardımcı olacak “C# Kapsülleme Örnekleri” başlığına geçiş yapabiliriz. 👊🏻

C# Kapsülleme Örnekleri

Kapsülleme kavramını daha iyi anlayabilmemiz için ilerde projelerimizde kullanabileceğimiz tarzda C# kapsülleme örnekleri oluşturmak istiyorum.

Bu isteğim doğrultusunda örnek yapım da veri tabanına hangi kullanıcı tarafından girildiğini tutacak basit bir giriş kayıt sistemi oluşturmak istiyorum. Bunun için uygulayacağım adımlar şu şekilde olacaktır:

  1. Veri tabanının giriş bilgilerinin ve başarılı girişler sonucunda ekrana yazdırılacak metodun yer alacağı “DatabaseManager” isminde bir sınıf tanımlayarak örneğimin ilk adımını atmış oldum.
  2. İkinci adım olarak private olarak atamasını gerçekleştirdiğim değişkinlerin yapılarına erişim sağlayabileceğim GET ve SET metotların tanımlamasını gerçekleştirdim.
  3. Bu tanımlama işlemlerimden sonra eğer giriş işlemi başarılı bir şekilde gerçekleşirse kullanıcıya işlemin gerçekleştiğini belirten “dbLogin” isminde bir metot tanımlaması gerçekleştirdim.
  4. Bu üç aşamadan sonra “DatabaseManager” ismindeki sınıf yapım şu hale gelmiş oldu:

    namespace EncapsulationApp
    {
        class DatabaseManager
        {
            private string dbUserName = "root", dbPassword = "admin", mark = new string('-', 6), dbLoginName;
    
            public string checkName
            {
                get
                {
                    return dbUserName;
                }
            }
            public string checkPassword
            {
                get
                {
                    return dbPassword;
                }
            }
            public string setLoginName
            {
                set
                {
                    dbLoginName = value;
                }
            }
    
            public void dbLogin()
            {
                Console.WriteLine("{0}\n< Database Bağlantısı Oluştu >\n{1}", mark, mark);
                Console.WriteLine("-> Bağlantı sağlayan kişi: {0}\n-> Bağlantı sağlanan zaman : {1}\n{2}", dbLoginName, DateTime.Now.ToString("dd/MM/yyyy HH:mm"),mark);
            }
    
         
        }
    }
    
  5. Daha sonra işlemlerimi kontrol etmek için “Main” sınıfıma gelerek girilen veri tabanı giriş bilgilerini kontrol işlemini gerçekleştirebilmek için kullanıcıdan alacağım verilerin hafızada tutulmasını sağlayacak değişkenlerin tanımlamasını gerçekleştirdim.
  6. Bu tanımlama işleminden sonra ihtiyaç duyduğum verileri kullanıcıdan isteyerek basit bir if-else kontrol yapısı ile girilen bilgilerin doğruluğunu kontrol edecek bir kod bloğu hazırladım.
  7. Bu işlemlerimden sonra “Main” sınıfım aşağıdaki haline gelmiş oldu:

    namespace EncapsulationApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                string userName, userPassword,mark = new string ('-',6);
                DatabaseManager dbManager = new DatabaseManager();
                Console.WriteLine("{0}\n< C# Kapsülleme Örnekleri #1 >\n{1}", mark, mark);
                Console.Write("-> İsminizi Girin: ");
                dbManager.setLoginName = Console.ReadLine();
                Console.Write("{0}\n-> Lütfen veritabanı kullanıcı adını girin: ",mark);
                userName = Console.ReadLine();
                Console.Write("-> Lütfen veritabanı kullanıcı şifresini girin: ");
                userPassword = Console.ReadLine();
                if (dbManager.checkName == userName && dbManager.checkPassword == userPassword)
                {
                    dbManager.dbLogin();
                }
                else
                    Console.WriteLine("{0}\n-> Giriş gerçekleştirilemedi.\n{1}", mark, mark);
            
            }
        }
    }

Kod Çıktısı:

C# Kapsülleme Örnekleri
C# Kapsülleme Örnekleri #1

Kapsülleme (encapsulation) kavramını anlamak ilk başta zor gelmiş olsada öğrendikten sonra uygulaması oldukça zevkli bir konu. Projelerimizdeki verileri bir kasa içerisinde muhafaza etmemizi sağlayan bu yapıyı ihtiyaç duyduğumuz herhangi farklı bir sınıf üzerinde ya da pakette erişmemize imkan sağlayan GET ve SET metotlarının kullanımı hakkında daha farklı bir kaynak arayışına girerseniz Microsoft tarafından hazırlanmış rehber içeriğini sizlere öneririm. Bahsetmiş olduğum içeriğe buraya tıklayarak ulaşabilirsiniz.

Unutmayın, aklınıza takılan, sormak istediğiniz ya da konu işleyişi hakkında aklınıza gelen herhangi bir fikri aşağıda bulunan yorum yap kısmından bana iletebilirsiniz. 👋🏻

Yorum Yap

Yazar Hakkında

Yazmayı, öğrenmeyi, öğrendiklerini paylaşmayı , kodlamayı ve günün birinde Yönetim Bilişim Sistemleri Uzmanı olmanın hayalini kuran birisiyim.

Yorum Yap