Konu Anlatımı
Nesne Nedir, Sınıf Neden Gereklidir?
Bilişim sistemlerinde anahtar, yönlendirici, yazıcı, kullanıcı kaydı ve log dosyası gibi her varlığın programda bir karşılığı vardır; bu karşılığı düzenli temsil etmenin yolu sınıftır. Sınıf, nesnelerin kalıbıdır ve yalnızca tarif eder; nesne ise o kalıptan new operatörüyle üretilen somut örnektir. Sınıf sayesinde cihaz bilgisi, o bilgiyi doğrulayan kurallar ve o bilgiyle yapılan işlemler tek çatı altında toplanır; böylece kod tekrarlanmaz ve hata noktası tek yerde toplanır.
1. Sınıf Tanımı ve Üyeler
Bir sınıf iki tür üye barındırır. Veri üyeleri (alan ve özellikler) nesnenin durumunu tutar: IP adresi, MAC adresi, marka, model ve bağlı olduğu switch portu. Üye metotları ise bu durum üzerinde yapılan işlemleri tanımlar: adres doğrulama, porta bağlama ve bilgiyi listeye yazdırma. Özellikler, alana erişimi saran okuyucu ve yazıcı bloklarıdır; alan genellikle private, özellik public yapılır.
| Üye Türü | Görevi | Örnek |
|---|
| Alan | Nesnenin durumunu tutar, doğrudan dışarı açılmaz | ipAdresi, macAdresi, portNo |
| Özellik | Alana denetimli erişim sağlar | public string IpAdresi { get; set; } |
| Metot | İşlem tanımlar | bool AdresGecerliMi() |
| Statik üye | Sınıfa aittir, nesne gerekmeden çalışır | static int cihazSayisi |
2. Erişim Belirleyicileri ve Kapsülleme
Erişim belirleyicisi hangi kodun üye okuyabileceğini belirler. private yalnızca tanımlandığı sınıf içinden, internal aynı derleme (montaj) içindeki her yerden, protected sınıftan türeyen sınıflardan, public ise programın her yerinden erişime açıktır. Kapsülleme, veriyi private tutup dışarıya yalnızca gerekli arayüzü açmaktır; böylece 0 dışındaki IP oktetleri, 48 bitten uzun MAC değerleri gibi geçersiz veriler sınıfın dışında engellenir.
3. Nesne Üretimi ve this Göstergesi
new operatörü sınıfın kalıbından bellekte bir nesne üretir ve o nesnenin adresini döndürür. Her nesnenin kendi kopyası olan alanları vardır: üç cihaz nesnesi oluşturulursa üç ayrı IP alanı bellekte durur. Yapıcı içinde parametre adı ile alan adı aynı yazıldığında this göstergesi hangi nesneye ait olduğunu belirtir ve karışıklığı önler. static alan ise tüm nesneler arasında ortaktır, örnek olarak cihaz sayacı buna örnektir.
4. Adım Adım: Cihaz Envanter Sınıfı Kurma
Sınıf tasarımı beş adımda tamamlanır; adımlar atlandığında kapsülleme ve doğrulama kaybolur.
- Sınıfın adı ve barındıracakları yazılır: BilgiIslemCihazi sınıfında ipAdresi, macAdresi ve portNo alanları tanımlanır.
- Alanlar private, dışarı açılacak bilgiler public özellik olarak yazılır.
- Adres yazıcı özelliğinde geçersizlik durumunda değer reddedilir (0-255 dışı oktet kabul edilmez).
- new BilgiIslemCihazi ile nesne üretilir ve alanlara değerler özellik üzerinden atanır.
- Statik cihaz sayacı her üretimde bir artırılıp okuyucu özellikten sorgulanır.
5. Sınav ve Saha Odaklı Notlar
Sınavda en sık erişim belirleyicilerinin kapsamları sorulur. Ezber yerine daire genişliği düşünülür: private sınıf içi, internal derleme içi, protected türeyenler, public sınırsız. private alana sınıf dışında erişim denenirse bu bir çalışma zamanı hatası değil, derleme zamanı hatasıdır; kod hiç çalışmaya başlamaz.
Sahada sınıf tasarımının karşılığı envanter tutarlılığıdır. IP ve MAC bilgilerinin tek bir sınıfta doğrulanması, hatalı kaydın sisteme girmesini engeller. MAC adresi 48 bit yani 6 bayttır ve onaltılık gösterimde 12 haneyle yazılır; bu değerler alan içinde tutulurken uzunluk denetimi sınıfın işidir, formun değil.
Ne Öğreneceğiz
Sınıf, üye, nesne ve erişim belirleyicisi kavramlarını cihaz envanteri örneğiyle anlatan temel yapı konusudur. Bu konuda ögrenme çıktıları:
- Sınıf, nesne, üye, özellik ve metot kavramlarını birbirinden ayırır.
- public, private, internal ve protected erişim belirleyicilerinin kapsamını açıklar.
- Kapsülleme ilkesine uygun private alan ve public özellik yapısı kurar.
- new operatörü ile nesne üretip üyenin erişimini doğru örneklendirir.
- static üyenin nesneden bağımsız nasıl çalıştığını örnek üzerinden gösterir.
Ön Bilgi
Bu konuya başlamadan önce temel kavram ve ön koşulları kavramanız yardımcı olacaktır. Konunun çerçevesinde şu kavramlar dikkat ister:
- Alan adı ile özellik adı aynı olabilir; this kullanıldığında karışıklık yaşanmaz.
- private alan dışarıdan doğrudan değiştirilemez, bu yüzden veri doğrulaması sınıfta kalır.
- Statik üye tüm nesneler arasında ortaktır; cihaz sayacı gibi sayaçlar buna uygundur.
- new operatörü bellekte alan ayırır ve dönen değer nesnenin adresidir.
- internal erişim yalnızca aynı derleme (montaj) dosyası içinde geçerlidir.
- Sınıf adı nesne adından ayrılır: BilgiIslemCihazi bir kalıp, labAnkastre bir nesnedir.
Basit Örnek ve Günlük Yaşam
Günlük yaşamda ve mesleki bağlamda bir uygulama:
Soru: BilgiIslemCihazi sınıfında ipAdresi adlı bir alan tanımlayıp bu sınıftan bir nesne üretmek ve adrese değer vermek isteniyor. Adımları yazınız.
- Adım 1: class BilgiIslemCihazi kalıbı açılır ve içine private string ipAdresi alanı yazılır.
- Adım 2: Alana değer verebilmek için public IpAdresi özelliği eklenir.
- Adım 3: BilgiIslemCihazi cihaz = new BilgiIslemCihazi(); ile nesne üretilir.
- Adım 4: cihaz.IpAdresi = 192.168.1.20 satırıyla özellik üzerinden değer atanır.
Sonuç/cevap: Cevap: Sınıf tanımlanır, new ile nesne üretilir ve değer public özellik üzerinden atanır; alanın kendisine sınıf dışından erişilemez.
İleri Örnek
Daha ileri bir uygulama:
Soru: Laboratuvar envanterinde toplam cihaz sayısını static alanla tutan bir sınıf tasarlanacak. Beş cihaz kaydedilip ikisi silindiğinde sayının okunması nasıl yapılır?
- Adım 1: static int cihazSayisi alanı tanımlanır, bu alan tüm nesneler ortaktır.
- Adım 2: Kayıt ekleme metodunda sayaç bir artırılır: beş kayıtta değer 5 olur.
- Adım 3: Kayıt silme metodunda sayaç bir azaltılır: iki silmede değer 3 olur.
- Adım 4: Değer BilgiIslemCihazi.CihazSayisi biçiminde nesne üretmeden okunur.
Sonuç/cevap: Cevap: Sayaç 5 − 2 = 3 kalır ve statik üye olduğu için sınıf adıyla, nesne üretmeden okunur.
Karşılaştırma Tablosu
| Kavram | Açıklama |
|---|
| Alan adı ile özellik adı aynı olabilir; | Alan adı ile özellik adı aynı olabilir; this kullanıldığında karışıklık yaşanmaz. |
| private alan dışarıdan doğrudan değiştir | private alan dışarıdan doğrudan değiştirilemez, bu yüzden veri doğrulaması sınıfta kalır. |
| Statik üye tüm nesneler arasında ortaktı | Statik üye tüm nesneler arasında ortaktır; cihaz sayacı gibi sayaçlar buna uygundur. |
| new operatörü bellekte alan ayırır ve dö | new operatörü bellekte alan ayırır ve dönen değer nesnenin adresidir. |
| internal erişim yalnızca aynı derleme (m | internal erişim yalnızca aynı derleme (montaj) dosyası içinde geçerlidir. |
| Sınıf adı nesne adından ayrılır: BilgiIs | Sınıf adı nesne adından ayrılır: BilgiIslemCihazi bir kalıp, labAnkastre bir nesnedir. |
Sık Yapılan Hatalar
private alanı dışarıdan doğrudan atamak: private alan sınıfnın kendi dışından okunamaz ve yazılamaz, erişim public özellik üzerinden verilir.
Alan ile özelliği aynı erişimde tutmak: Alanı da public yapmak kapsüllemeyi kaldırır, geçersiz IP ve MAC değerleri sınıfa girer.
Statik üyeyi nesne üzerinden okumaya çalışmak: static üye sınıf adına bağlıdır, okuma sınıf adıyla yapılır.
new ile üretilen nesneleri aynı sanmak: İki new çağrısı iki ayrı nesne ve iki ayrı alan kümesi üretir, alanlar ortak değildir.
Sınıf adını dosya adıyla karıştırmak: Dosyanın adı sınıfın adını zorunlu kılmaz; derleyici için belirleyici olan sınıf tanımıdır.
Özet
Bu konuda sınıf kalıbı ile nesne örneği arasındaki ayrım, üye türleri ve erişim belirleyicileri ele alındı. Kapsüllemenin private alan ve public özellik ile kurulduğu, geçersiz IP ve MAC değerlerinin bu denetimle engellendiği gösterildi. new operatörünün nesne üretimi, this göstergesinin ayırt edici rolü ve static üyelerin nesneden bağımsız davranışıyla envanter sayacının nasıl tutulduğu örneklerle pekiştirildi.
Kendini Dene
Soru: Bilgi işlem odası için Cihaz adlı bir sınıf tasarla: IP ve MAC bilgilerini tutan private alanlar, bu alanlara erişim sağlayan public özellikler ve cihaz sayısını izleyen static sayaç bulunsun. Ardından alanların neden private olduğunu açıkla.
Örnek cevap: Puanlama anahtarı: Private alanlar ve public özellikler doğru biçimde tanımlanır (5 puan); Özelliklerde oktet değeri 0-255 dışındaysa reddetme kontrolü yapılır (4 puan); Static sayacın tüm nesneler arasında ortak olduğu ve sınıf adıyla okunduğu belirtilir (3 puan); Private alan kullanılmasının veriyi dış müdahaleden koruduğu iki cümleyle gerekçelendirilir (3 puan).