Clear        


                
                    // Encapsulation (Kapsülleme)

using _03_Encapsulation.Demos.Barbut;
using _03_Encapsulation.Demos.Dizi;

namespace _03_Encapsulation
{
    internal class Program
    {
        // Encapsulation: class'ların field'lerine (alanlarına) public olarak ulaşmak yerine field'ler için set ve get methodları üzerinden kapsülleyerek yönetmektir,
        // public olan property kullanımı ile encapsulation gerçekleştirilmiş olur. 
        // Eğer istenirse alanların set veya get davranışlarında veya özelliklerin setter veya getter'larında koda müdahele edilerek özelliştirme yapılabilir. 
        // Örneğin bir cüzdan ortada bırakılıp herkesin ulaşabilmesi sağlanmamalıdır (public field),
        // bunun yerine cüzdana sanki izin alınıyormuş gibi setter ve getter'larla ulaşılmalıdır.



        static void Main(string[] args)
        {
            // Musteri class'ının namespace'i, Program class'ının namespace'inden farklı olduğundan ya Musteri class'ının namespace'i ile birlikte kullanılabilir
            // ya da using ile en yukarıya Musteri class'ının namespace'i eklenir.

            //_03_Encapsulation.Models.Musteri musteri1 = new _03_Encapsulation.Models.Musteri()  // 1. yöntem
            //Models.Musteri musteri1 = new Models.Musteri()  // 2. yöntem
            Musteri musteri1 = new Musteri() // 3. yöntem, using en yukarıya eklenir
            {
                Adi = "Çağıl",
                Soyadi = "Alsaç",
                Yasi = 42,
                CepTelefonu = "0 532 111 22 33",
                Adresi = "Çankaya, Ankara, Türkiye",
                KrediKartiNumarasi = "1234 5678 9012 3456",
                KadinMi = false
            };
            // Class üzerinden obje new'lenirken (initialization) class özellikleri set edilebilir.

            // Ya da class üzerinden obje new'lendikten sonra (initialization) class özellikleri set edilebilir.
            Musteri musteri2 = new Musteri();
            musteri2.Adi = "Luna";
            musteri2.Soyadi = "Alsaç";
            musteri2.Yasi = 1;
            musteri2.CepTelefonu = "0 532 999 88 77";
            musteri2.Adresi = "Çankaya, Ankara, Türkiye";
            musteri2.KrediKartiNumarasi = "9876 5432 1098 7654";
            musteri2.KadinMi = true;

            // 1. müşterinin ekrana yazdırılması:
            Console.WriteLine("Müşteri Bilgileri\nAdı: " + musteri1.Adi + "\nSoyadı: " + musteri1.Soyadi + "\nYaşı: " + musteri1.Yasi + 
                "\nCep Telefonu: " + musteri1.CepTelefonu + "\nAdresi: " + musteri1.Adresi +
                "\nCinsiyeti: " + musteri1.Cinsiyeti + "\nKart No: " + musteri1.KrediKartiNumarasi); // konsola Cinsiyeti: Erkek, Kart No: **** **** **** 3456 yazdıracak
            Console.WriteLine($"Müşteri: {musteri1.UnvanliTamAdi}"); // konsola "Bay Çağıl Alsaç" yazdıracak

            Console.WriteLine();

            // 2. müşterinin ekrana yazdırılması:
            Console.WriteLine($"Müşteri Bilgileri:\nMüşteri: {musteri2.UnvanliTamAdi}\nYaşı: {musteri2.Yasi}" +
                $"\nCep Telefonu: {musteri2.CepTelefonu}\nAdresi: {musteri2.Adresi}" +
                $"\nKart No: {musteri2.KrediKartiNumarasi}"); // konsola Kart No: **** **** **** 7654 yazdıracak

            Console.WriteLine();



            #region Demos
            DiziDemo.Calistir();
            Console.WriteLine();
            BarbutDemo.Calistir();
            #endregion
        }
    }
}