Nesne Yönelimli Programlama – 2 Encapsulation

Bu yazımda encapsulation (kapsülleme) konusuna değineceğim. Bir önceki makalemde bahsettiğim Telefon sınıfını hatırlayalım. Sınıfımızın içinde bulunan özellikleri public erişim düzenleyicisi ile tanımlamıştık. Bunun bize yaratabileceği bazı sıkıntılar var. Mesela telefonun rengini başka yerden değiştirebiliyoruz. Peki bunu aşmak için ne yapabiliriz?

Bunu aşmak için ilk olarak değişkenlerimizi private yapabiliriz. İçerideki değişkenlere erişmek için ise public metotlar yazabiliriz. Nasıl mı?

namespace OOP_1_Class
{
    class Telefon
    {
        private string _marka;
        private string _model;
        private string _islemci;
        private string _kamera;
        private string _renk;
        private int _fiyat;

        public string GetMarka()
        {
            return _marka;
        }

        public void SetMarka(string marka)
        {
            _marka = marka;
        }
    }
}
using System;

namespace OOP_1_Class
{
    class Program
    {
        static void Main(string[] args)
        {
            Telefon t1 = new Telefon();
            t1.SetMarka("Sony");
            Console.WriteLine(t1.GetMarka());
        }
    }
}

Aslında burada yaptığımız şey bir kapsülleme işlemi. Gerçek dünyadan örnek vermek gerekirse; televizyon kumandalarının içerisinde çeşitli devreler, pil yuvası vardır. Ama bunların hepsi bir kapak ile dış dünyadan, son kullanıcıdan soyutlanmıştır. Çünkü içerisinde ne bulunduğu bizi pek de ilgilendirmez. Kanalları değiştirmesi sesi açıp kapatması yeterlidir bizim için.

Peki biz her özellik için oturup metot mu yazmalıyız? Yok mu bunun daha kolay bir yolu? Elbette var. Belkide daha önceki projelerimizde de çokça kullandığımız property kavramı devreye giriyor. Yukarıdaki kodu property kullanarak tekrar yazalım.

namespace OOP_1_Class
{
    class Telefon
    {
        private string _marka;
        private string _model;
        private string _islemci;
        private string _kamera;
        private string _renk;
        private int _fiyat;

        public string Marka
        {
            get { return _marka; }
            set { _marka = value; }
        }
    }
}

Yukarıdaki get ve set bloklarından sadece birini kullanarak read-only ya da write-only özellikler yaratabiliriz. Kısa yol kullanmak isteyenler ise pro tab tab yaparak property yaratabilirler.


Yayımlandı

kategorisi

yazarı:

Yorumlar

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.