1. Sınıf (Class) Nedir ve Neden Kullanılır
- OOP’de bir nesne (
object) oluşturabilmek için öncelikle o nesnenin bir modelinin veya şablonunun tasarlanması gerekir. İşte bu modeli tanımladığımız yapıysa sınıf (class) denir. - Bir binayı inşa etmeden önce projesini çizeriz. O proje binanın temelidir (
class). O projeye bakılarak inşa edilen somut bina ise nesnenin (object) kendisidir. - Sınıflar bir referans türüdür.
- Sınıf yapısı, programlamada modelleyeceğimiz nesnelerin
- Hangi özelliklere (properties, fields) sahip olacağını,
- Hangi davranışları veya eylemleri (metods) sergileyeceğini tanımlamamızı sağlar.
2. Sınıf ve Nesne İlişkisi
- Sınıf soyut bir tamımdır (model), nesne ise o tanımdan üretilmiş somut bir örnektir (instance).
- Aralarındaki ilişki bire-çok (one-to-many) olarak tanımlanabilir.
- Tekil Olan (Bir): Sınıf tanımı bir kez yapılır.
- Çoğul Olan (Çok): Bu tek tanımdan istenildiği kadar (bellek yettiği sürece) nesne örneği üretilebilir.
- Özelliklerin ve Değerlerin Ayrımı
- Bir sınıfta tanımlanan özellikler (
ad,soyadgibi) o sınıftan türetilen tüm nesneler için ortaktır. - Ancak her nesne, bu ortak özelliklere kendine özgü değerler atayarak birbirinden farklılaşır.
- Bir sınıfta tanımlanan özellikler (
3. Bir Sınıf Nasıl ve Nerede Oluşturulur
Nasıl Oluşturulur (Sözdizimi - Syntax)
classanahtar kelimesi kullanılır.- Ardından programlama dili kurallarına uygun bir isim verilir.
- Süslü parantezler
{ }arasında sınıfın üyeleri (fields, metods vb.) yazılır.
Uyarı
Bir sınıf tanımlamasında tanımlanan yerde (namespace, namespace dışı, class) aynı isimde birden fazla class tanımlanamaz!
Nerede Oluşturulur
1. Namespace İçerisinde:
- En yaygın ve standart kullanım budur. Sınıfların mantıksal olarak gruplandırılmasını ve kodun organize edilmesini sağlar.
namespace ArabaGalerisi
{
public class Araba
{
// Fields / Properties
public string Marka;
public string Model;
public int Yil;
public string Renk;
// Methods
public void BilgileriGoster()
{
Console.WriteLine($"Marka: {Marka}, Model: {Model}, Yıl: {Yil}, Renk: {Renk}");
}
}
// Aynı namespace içinde başka bir da olabilir.
public class Musteri
{
public string Ad;
public string Soyad;
public string Telefon;
}
}2. Namespace Dışında:
- Teknik olarak mümkündür ancak organize bir yapı sunmadığı için kesinlikle tavsiye edilmez. Bu durumda sınıf “Global Namespace” içinde yer alır ve her yerden doğrudan erişilebilir hâle gelir.
// Herhangi bir namespace yoktur.
public class Kinizm
{
public string FilozofAdi;
public string EserSayisi;
public string Etkilendikleri;
public string Etkiledikleri;
}
// Namespace'li kodlar bunun altında devam edebilir.
namespace AntikYunanFelsefesi
{
public class Platonculuk
{
// ...
}
}
3. Sınıf İçerisinde (Nested Types)
- Bir sınıfın içine başka bir sınıf tanımlanabilri. Bu genellikle bir sınıfın sadece başka bir sınıf tarafından kullanılacağı özel durumlarda tercih edilir ve ileri düzey bir konudur.
namespace AntikYunanFelsefesi
{
// "Platonculuk" ana felsefi okuldur (Dış Class).
public class Platonculuk
{
public string Kurucusu = "Platon";
public string TemelIlkesi = "Gerçeklik, idealar dünyasındadır.";
// "Idea" kavramı, Platonculuk'un içsel ve temel bir parçasıdır.
// Bu yüzden "Nested Type" olarak onun içine yazılır (İç Class).
public class Idea
{
public string Ad; // Örneğin: "İyilik İdeası", "Güzellik İdeası"
public string Tanim;
}
}
}4. Sınıf Modeli Üzerinden Referans Noktası Oluşturma
- Referans Noktası Nedir?: Bir sınıftan nesne oluşturmak iki adımlı bir süreçtir. İlk adım, o nesneyi bellekte (
Heap) tutacak olan referans değişkenini (pointerbenzeri) oluşturmaktır. Bu değişkene “referans noktası” denir.
Oluşturma Süreci
- Tür Belirtilir: Değişkenin türü, oluşturduğumuz sınıfın adıdır (
ÖrnekModel).- Bir class tanımlladığımızda o class adı bir türdür. Haliyle o türü kullanabilmek için direkt olarak class adını kullanmamız yeterlidir.
- İsim Verilir: Değişkene bir isim verilir (
w) (Referans noktası alınır/ayarlanır.)- Referans türlü değişkenler özünde
nullableolabilen değişkenlerdir. ÖrnekModel w;Form2 form2 = new Form2();gibi.
- Referans türlü değişkenler özünde
Bellekteki Karşılığı
- Bu komut çalıştığında belleğin
STACKbölgesindewadında bir değişken için yer ayrılır. - Bu
wdeğişkeni, henüzHeap’te herhangi bir nesneyi işaret etmediği için varsayılan olaraknulldeğerini tutar.null: Hiçlik, boşluk. Referansın bellekte herhangi bir adresi göstermediğini belirtir.
- Velhasılkelam,
newanahtar kelimesini kullanmadan sadeceSınıfAdı değişkenAdı;şeklinde yapılan tanım, nesnenin kendisini değil, o nesneye ileride bağlanacak olan referansı oluşturur. Nesnenin kendisi bir sonraki adımda (new) ile oluşturulacaktır.