NTP C# Dersi 2: Nesneler ve Metotların Yapısı

Merhaba arkadaşlar, bu derste NTP C# Dersi 0’da dediğim gibi öncelikle nesne nedir onu öğreneceğiz. Bu derste de ağırlık teori olacak.

 

Using

Görüldüğü üzere programımız da “Console” ve “Convert” gibi classların barındırdığı “ReadLine”, “WriteLine” ve “ToInt16”gibi metotları kullandık. Bu metotları kullanabilmemiz için öncelikle bu metotları barındıran kütüphaneleri projemize çağırmamız gerekiyordu. Bu çağırma işini de “using” komutu ile yaptık. İleriki derslerimizde kütüphane yapmayı öğreneceğiz ve kütüphanemizi başka bir projeye çağırmak için yine using komutunu kullanacağız.

 

Namespace

Namespace aynı isme sahip nesnelerin birbirleri ile çakışmasını önlemek için kullanılır. Belki biz aynı isme sahip iki nesne oluşturmamaya dikkat edebiliriz. Fakat dışarıdan bir kütüphane çağırdığımızda, projemizdeki bir nesnenin çağırdığımız kütüphanenin barındırdığı bir nesne ile çakışma olasılığı daha yüksektir. Bunun da üstesinden gelebilirim diye bilirsiniz. Ama çağırdığınız iki kütüphane de aynı isme sahip nesneler barındırabilir. Şayet namespaceleri de aynı ise program bu sefer sürüm numaraları gibi vs. ayırt edici özellikleri kullanmayı deniyecektir. Merak etmeyin namespaceleri doğru ve işlevsel bir şekilde kullandığınızda bu sorunlar ortadan kalkacaktır.

Namespace aynı zamanda nesneleri işlevlerine göre ayırmamıza olanak tanır. Öreğin matematiksel işlevleri yerine getiren fonksiyonları barındıran nesneleri bir namespace altında toplamak isteyebiliriz. Ve bu sayede daha sonra yapmış olduğumuz nesneleri, fonksiyonları hazır olarak kullanmak isteyenler kodlarımızın hiyerarşik düzenini kolaylıkla ezberleyeceklerdir. Bu büyük bir kolaylıktır. Çünkü metotları(fonksiyonlar vs.) kullanabilmek için hiyerarşik adresini kodlamak zorundayız.

Şunu da unutmamak gerekir ki programımızın kodları içerisinde muhakkak bir namespace bulunmak zorundadır. Çünkü nesneler ancak bir namespace içerisinde barınabilir.

 

Class ve Struct

Class(tr:sınıf) ile struct(tr:yapı) temelde benzer özellikler gösterir. Arasındaki fark ise class daha çok metotlar oluşturmak için kullanılırken, struct daha çok veri depolamak için kullanılır. Ama bu classları veri depolamak için kullanamayacağımız anlamına gelmez.

Aralarındaki teknik fark ise classlar öbek(en:heap) alanı, struct yığın(en:stack) alanı üzerinde tutulurlar. Bu yüzden structların yıkıcı (sonlandırıcı,yok edici) metotları yoktur. Buna ek olarak structlar static olarak tanımlanamazlar.

 

Static Class

Bir classın static özellik taşıması demek. O class bir namespace özelliği gösteriyor demektir. Yani sahip olduğu metotları sadece barındırma işini yerine getiriyor demektir.

Örnekle açıklayalım.

// [-B] : Girilen sayı ile metni arada “-” olacak şekilde birleştiren program.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace yG_CS_Proje1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Yaşınızı giriniz."); // [01]
            int yas = Convert.ToInt16(Console.ReadLine()); // [02]
            Console.WriteLine("Adınızı giriniz."); //[03]
            string ad = Console.ReadLine(); // [04]
            string birlesmis = duraganClass.sayiIleMetniBirlestir(yas, ad); // [05]
            Console.WriteLine(birlesmis); // [06]
            Console.ReadKey(); // [07]
        }
    }
    static class duraganClass
    { // [08]
        public static string sayiIleMetniBirlestir(int sayi, string metin)
        { // [09]
            string birlestir = sayi + "-" + metin; // [10]
            return birlestir; // [11]
        }
    }
}
// [01]: Ekrana “Yaşınızı giriniz.” cümlesini yazdırdık.
// [02]: Girilen sayıyı okuttuk. Ve klavyeden girilen ne olursa olsun programın bunu metin olarak algılayacağını hatırladık ve girilen metni sayıya çevirttik. “yas” adında, int(integer:tamsayı) türünde bir değişken/hafıza bölgesi tanımladık ve sayıya dönüştürülen metni değişkene/hafıza bölgesine yükledik.
// [03]: Ekrana “Adınızı giriniz.” cümlesini yazdırdık.
// [04]: Klavyeden girilen metni “ad” adlı, string(dizge) türünde bir değişken/hafıza bölgesi tanımlayıp, yükledik.
// [05]: “duraganClass” adlı classımızın barındırdığı “sayiIleMetniBirlestir” adını verdiğimiz metodunu çağırıp 1. parametresine “yas”ı 2. parametresine “ad”ı atadık/yükledik. Metodun döndürmüş olduğu string veriyi “birlesmis” değişkenini/hafıza bölgesini tanımlayıp yükledik.
// [06]: “birlesmis” değişkenindeki/hafıza bölgesindeki yüklü metni ekrana yazdırdık.
// [07]: Konsol penceresinin hemen kaybolmasını engelledik.
// [08]: “duraganClass” adında bir static(tr:durağan) class oluşturduk.
// [09]: “sayiIleMetniBirlestir” adında iki parametreli, 1. parametresi int(integer:tam sayı), 2. parametresi string olan ve string bir değer döndüren static bir metot oluşturduk.
// [10]: “sayi” ve “metin” adlı parametrelerdeki verileri aralarında “-“ olacak şekilde tek bir metin halinde string “birlestir” adında bir değişken/hafıza bölgesi tanımlayıp, yükledik.
// [11]: Programa metodumuzun döndürmesi yani kullanıcısına sunması gereken verinin, “return” komutunu kullanarak birlestir değişkenindeki/hafıza bölgesindeki veri olduğunu bildirdik.

 

Örnekte görüldüğü gibi classımız aktif bir rol oynamadı sadece metodumuza ulaşabilmek için adres tayini yapmamızda bize yardımcı oldu.

Static olmayan class ise çoğunlukla veri depolama işi görür. Nasıl ki veri depolamak için bellekte ayrılmış hafıza bölgesi olarak tanımladığımız değişkenler bize veri depolama olanağı tanıyor, static olmayan classlar da fonksiyonel değişkenler diyebileceğimiz metotlar barındırırlar. Dolayısıyla static olmayan classlar dolaylı olarak değişkenler gibi veri depolama işi görür.

 

Dinamik Class

Bir classın başında static komutu yoksa direkt dinamik özellik kazanır. Dinamik diye bir komut yoktur. Dinamik classları değişkenler gibi isimlendirir bu isimleri ile direkt olarak çağırabiliriz. Program içerisinde bir değişkenmiş gibi kullanabiliriz. Fakat dinamik classları, static classlardan farklı olarak “içerisinde fonksiyonel değişkenler yani iş yapan değişkenler barındıran çok boyutlu dev bir değişken olarak tanımlayabiliriz.” Tabii ki bu tanım structlar için de geçerlidir.

 

Dinamik Class veya Struct Tanımlama ve Çağırma

Class tanımlama(kasıt:oluşturmak/kodlamak değil) değişken tanımlamaya benzer fakat değişken tanımlamadan farklı olarak new komutu kullanılarak yapılır. Dizi değişkenler de buna dahildir.

DinamikClassinAdi yenilakap = new DinamikClassinAdi();

Yerel değişken tanımlar gibi değişken türünü yazdığımız yere classın ismini yazıyoruz. Zaten bir değişkenin önündeki int ifadesi Integer structını ifade eder. “int” komutunun üzerine tıklayıp F12ye bastığınızda “Integer” structını ve barındırdığı metotları görebilirsiniz. İkinci adımda ise classa bir isim veriyoruz. “new” komutunu kullanarak ve oluşturacağımız classın adını sağına yazarak dinamik classımızı tanımlamış oluyoruz.

 

Çağırma

Çağırmadan kastettiğimiz classın bir sonraki adımda nasıl kullanılacağıdır. Yani bir değişkeni tanımladıktan sonra program içerisinde sadece ismiyle çağırıyorsak classı da sadece lakabıyla yani tanımladığımız yeni ismiyle çağıracağız. Ama dinamik bir class birden fazla değişken özelliği gösteren metot barındırdığı için classı çağırırken classın lakabı ve metot adını aralarında nokta olacak şekilde birlikte yazmamız gerekiyor.

Classinlakabı.Metotadi” gibi olacak. Dinamik class için anlattıklarımızın hepsi structlar için de geçerlidir.

 

Metotlar

Kodlarımızın temel taşını oluştururlar. Yazmış olduğumuz kodlarımızın çok büyük bir bölümünü barındırırlar. İşleri yapan asıl bileşenlerdir.

Metotlar fonksiyonel özellikler de taşırlar. Örnek [-B]‘de “sayiIleMetniBirlestir” metodunda olduğu gibi verilenlere göre bir değer de döndürebilirler veya “Main” metodunda olduğu gibi bir uyarı sonrası yapılacak işleri de içerebilirler. Bir metot içindeki kodların çalışması için metodun uyarılması veya uyarılmış başka bir metot içersinde çağrılmış olması gerekir. Bu uyarı bir bilgisayar faresi hareketi dolabilir. Buradaki uyarı ise konsol sayfasının yüklenmesidir. Bu olayı bir web sayfası gibi düşünebiliriz. Web adresine gittiğimizde ilk çalışan sayfa index sayfası ise burada da “Main” metodudur.

Bir sonraki derste görüşmek üzere. İyi çalışmalar.

Önerilen diğer yazılar:
NTP C# Dersi 1: Kodlama Yapısı ve Hiyerarşi

NTP C# Dersi 3: Değişkenler ve Operatörler

Yorum Yap

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

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>