Csharp Encapsulation, Kapsülleme İşlemi

Bilinçsiz kullanımı önleyen, private tanımlanan alanları public hale getirip istediğimiz gibi kullanmamızı sağlayan işlemdir. Class içindeki değişkenlere erişimi kaldırmak ya da kısıtlamak için kullanılır. Önemli bir değişkeni public olarak tanımlamak, değişkene yazılımcı tarafından -bilinçli ya da bilinçsiz- müdahaleye açık hale getirir. Bu da class içindeki metotların çalışmasını olumsuz etkileyebilir. Bu gibi durumların önüne geçmek için kapsülleme tekniği kullanılır.

Şimd bu yazımda bir önceki örnek üzerinden gideceğim, dolayııs ile öncelikle o yazıyı okumanızı ve bu yazıya devam etmenizi öneririm.

Örnek olarak ben Fiat sınıfıma bir özellik daha eklemek istiyorum. Bu özelliğimiz, Araç Model Yılı olsun. Örnek olarak kullanıcılar yıl verisini negatif girerse anlamsız bir değer elde edilecek. İşte bu gibi durumların önüne geçebilmek için encapsulation yani kapsülleme kullanılır. Bu işlemi de get ve set metotları ile yaparız. Alanda geriye değer döndürmek için get, alanın değerini belirlemek için set kullanırız.

Şimdi bir önceki yazımı inceledi iseniz oradaki Fiat sınıfındaki kodlarıma bir özellik daha ekliyorum. Bu özellik diyelim ki tüm nesnelerimde kullanılmayacak bir özellik olsun. Ama bazı nesnelerimde de kullanmak istiyorum. Dolayısı ile ben bu özelliği private olarak tanımlarım. Ama istediğim yerde kullanabilmek için de public olarak get ve set metodunu açabilirim. Dolayısı ile Fiat.cs dokümanında kodlarımı aşağıdaki gibi düzenliyorum;

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

namespace FiatClassOrnek
{
    class Fiat
    {
        //Özelliklerime diğer formlardan erişim sağlanabilmesi için her bir özelliğimi public olarak tanımlıyorum.

        public string model;
        public string YakitTipi;
        public string VitesTipi;
        public string Renk;
        public string MotorTipi;
        public decimal fiyat;
        private int _ModelYil;

        public int ModelYil
        {
            //get ile karşıma çıkmasını istediğim değeri tanımlıyorum.
            get { return _ModelYil; }
            //Yıl eksi bile girilse mutlak değerini alarak düzenleme yapıyorum.
            set { _ModelYil = Math.Abs(value); }
        }


       
    }
}

Daha sonra nesnelerimden örnek olarak EgeaSedan.cs formumda çalışacağım. Bu formuma bir adet daha label ekliyorum. Labelin adı lblModelYil olsun. Şimdi yazdırma işlemine geçelim; Kodlayalım:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace FiatClassOrnek
{
    public partial class Sedan : Form
    {
        public Sedan()
        {
            InitializeComponent();
        }

        private void Sedan_Load(object sender, EventArgs e)
        {
            //Fiat sınıfından türeterek, EgeaSedan adında bir nesne oluşturdum. Artık Fiat sınıfında tanımladığım her bir özellik bu nesne tarafından erişilebilir durumda. Her bir özellik için uygun veri tipinde atama yapıyorum.
            Fiat EgeaSedan = new Fiat();
            EgeaSedan.model = "1.4 Fire Urban Plus";
            EgeaSedan.YakitTipi = "Benzinli";
            EgeaSedan.VitesTipi = "Manuel";
            EgeaSedan.Renk = "Kurşun Grisi";
            EgeaSedan.MotorTipi = "1.4";
            EgeaSedan.fiyat = 105900;
            //ModelYil aslında private ama ben bunu erişim belirleyici ile encapsule ederken public olarak tanımladığım için herhangi bir nesnemin formunda da erişim sağlayabilme imkanım oluyor.
            EgeaSedan.ModelYil = 2020;

            //ilgili labellara yazdırma işlemimi yapıyorum.
            lblModel.Text = EgeaSedan.model;
            lblYakitTip.Text = EgeaSedan.YakitTipi;
            lblVitesTip.Text = EgeaSedan.VitesTipi;
            lblRenk.Text = EgeaSedan.Renk;
            lblMotor.Text = EgeaSedan.MotorTipi;
            lblFiyat.Text = EgeaSedan.fiyat.ToString();
            lblModelYil.Text = EgeaSedan.ModelYil.ToString();
        }
    }
}

Görüldüğü üzere ModelYil aslında private ama ben bunu erişim belirleyici ile encapsule ederken public olarak tanımladığım için herhangi bir nesnemin formunda da erişim sağlayabilme imkanım oluyor. Ayrıca kullanıcı örneğin eksi değer (-2020 gibi) bile girse labelda 2020 olarak görünmesini sağlayabiliyorum.

Şimdilik bu kadar 😊

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir