Neler yeni

Yeni mesajlar Yeni konular En çok mesaj En çok tepki En çok görüntülenen

C# Sınıflandırma (class) - 1

Son KaFKaS

🏅Acemi Tasarımcı🏅
Katılım
9 Tem 2008
Mesajlar
25
Tepkime puanı
0
1- C# İLE PROGRAMLAMA
Sınıflar ( class)
Nesneye yönelik programlamanın bir düşünce sistemi olduğunu söyleyebiliriz.
Bu sistemin temel taşı nesnedir.
Her nesnenin kendine ait davranış şekilleri vardır ve nesneye yönelik programlama bu davranışları programsal bir kod olarak ifade etmemizi sağlar. Etrafımızda gördüğümüz bisiklet, araba, televizyon vs gibi nesnelerin hepsinin kendine has özellikleri ve fonksiyonları olduğu gibi birbirleriye aynı olan yanları da vardır. Tum televizyonların ses ve kanal düğmeleri vardır ama hepsinin ekran büyüklüğü aynı olmadığı gibi ses ayar fonksiyonları da aynı olmayabilir.
İşte nesneye yönelik programlama ile tüm televizyonların ortak olan özellikleri bir nesne olarak yaratılabilir ve farklı olan özellikleri de baska bır nesne olarak temel nesneden türetilebilir.
Bu yapı aslında doğanın kendisidir. Her nesne kendisine temel olacak bir nesneden türemiştir. Kaplan, panter, aslan aslında kedi sınıfından türemişlerdir. Nesnelerin davranışlarını, sahip oldukları özellikleri ve çeşitli bilgileri sınıflar (class) ile temsil edilir. Yani sınıflar nesnelerin bir şemasıdır.

C# ‘ da herşey bir nesnedir ve object sınıfından türemistir
Sınıfların Tanımlanması
Sınıflar nesnelerin şemasıdır demiştik. Şimdi bu konuyu biraz açalım.
Neden sınıflar nesnelerin şemasıdır ?
Bu sorunun cevabı gayet basit çünkü nesnelerin kendisiyle bağlantılı verileri ve yine kendisine ait olan davranışları vardır. Nesnelerin neye benzediğini derleyiciye anlatmak ta sınıfların görevidir. Peki sınıflar nesnenin neye benzediğini derleyiciye anlattığına göre demek ki bir tip bilgisini içermektedir.
Örneğin meyva sınıfından bir nesne tanımladığımızda bu nesnenin tipi meyva sınıfındandır. Nesnenin üyeleri, davranışları, bellekte ne kadar yer kapladığı, nesne kullanıcılarının nesnenin hangi üyelerine erişip erişemeyeceği bilgisini derleyiciye anlatmaktadir.
Programlama dillerinin gelişim sürecine bakıldığında karmaşık programlardaki sorunların nasıl daha kolay bir şekilde çözülebilir sorusu vardır. Yazılan bir programda daha sonra yapılacak köklü bir değişikliği sanırım ki hic bir programcı yapmak istemez. Özellikle büyük projelerde, projenin test aşamalarında ortaya çıkan bir sorun belkide tüm projenin elden geçmesine sebep olabilir. Bu durumda kullandığımız progamlama dilinin nesne yönelimli programlamayı destekleyip desteklemediği önem arz etmektedir. Çünkü nesne yönelimli tasarımda program içindeki iş bölümleri nesneler üzerine oturtulmuştur. Bu durumda projede daha sonra meydana gelebilecek bir değişiklik sadece sorunun meydana geldiği nesnede, yani nesneyi meydana getiren sınıf tasarımında olacaktır.
Sınıflar class anahtar sözcüğü ile tanımlanır.

class class_ismi
{
sınıf üyeleri
}

class anahtar sozcüğünden sonra sınfın isimi vardır sınıf üyeleri küme parantezleri ({ }) içinde yer alır.
using System;

namespace Siniflar
{
class Musteri
{
private string Isim;

public void IsimAl(string isim)
{
Isim = isim;
}

public void IsimYaz()
{
Console.WriteLine(Isim);
}
}

class Uygulama
{
static void Main ()
{
Musteri a = new Musteri();
a.IsimAl("Esra S.");
a.IsimYaz();
}
}
}
Yukarıdaki örnekte müsteri isimli bir sınıf tanımlanmıştır. Bu sınıfın İsim adlı bir üye değişkeni, IsimAl ve IsimYaz adında iki tane yöntemi bulunmaktadır. Müsteri sınıfı, bu türden tanımlanacak bir nesnenin şemasıdır yani nesnenin verilerini ve davranışlarını göstermektedir. Daha sonra müsteri sınıfı türünden bir nesnenin bildirimi için new anahtar sözcüğü kullanılmakta ve nesnenin tanımlaması yapılmaktadır.

Bildirimler derleyiciye değişkenler hakkında bilgi verirler
Tanımlama ise bellekte bir yer ayırma işlemidir
new anahtar sözcüğü ile sınıf için heap bellek bölgesinde bir yer ayrılmaktadır. Bu yerin adresi de yani referans değeride stack bölgesinde saklanmaktadır. .NET Freamwork içinde bellek temizleme görevini üstlenmiş olan çöp toplayıcısı ( garbage collector ) new anahtar sözcüğü ile yaratılmış olan nesnelerin referansları yoksa bu alanları temizler ve belleğe geri bırakır.
Sınıf Üyeleri
Sınıf üyeleri temelde iki kısma ayrılmaktadır. Veri üyeleri ( data members ) ve fonksiyon üyeleri ( member functions, methods )
• Veriler
Alanlar (fields), sabitler (constants) ve olaylardır (events).
Alanlar nesneye ait bilgilerin tutulduğu üye değişkenlerdir. Sabitler nesnenin değiştirilemeyen alanlarıdır. Olaylar belirli bir tetiklemenin meydana gelmesi sonucunda çağrılacak olan fonksiyonların adres bilgilerini tutmakla sorumludurlar.
Sınıfın veri üyeleri değer türlerinde olabileceği gibi, referans türlerinde de olabilir. Her nesnenin sahip olduğu data diğer nesnelerden ayrılmıştır yani her nesnenin datası kendisine aittir hiç bir şekilde karışmaz.
• Fonksiyonlar
Yöntemler (methods), özellikler (properties), yapıcı fonksiyonlar (constructors), sonlandırıcılar (destructer), operatörler (operators) ve dizinliyiciler (indexer)
Yöntemler nesnenin davranış şekilleridir. Nesne kullanıcısına üye veriler üzerinde işlem yapmasına izin verirler ve nesnenin dışa kapalı üyelerine ulaşılmasını sağlarlar.
Özellikler alanlar gibidir. Hatta bunlara akıllı alanlarda denilmektedir. Nesnenin üye verilerine değer atanmasını ve değer çekilmesini kontrollü olarak yapılmasını sağlarlar.
Yapıcı ve sonlandırıcı yöntemler nesnenin özel yöntemleridir. Yapıcı yöntemler nesne ilk yaratıldığında cağrılırken, sonlandırıcı yöntemler nesnenin ömrü tamamlandığında çağrılırlar.
Operatörler ileride göreceğimiz operatörlerin aşırı yüklenmesiyle nesnelerin daha esnek kullanılmasına izin vermektedirler.
Dizinleyiciler nesnenin bir dizi gibi kullanılmasına izin verirler.
Erişim Belirleyicileri
Nesnelerin erişim belirleyicileri için şöyle bir örnek verirsek sanırım yanlış olmayacaktır. Ben özel eşyalarımı ailemden birisi ile paylaşabilirim ancak komşularımla paylasmam. Duruma nesne yönelimli programlama tarafından baktığımızda aile fertlerinden birisi benim özel datalarıma ulaşabilir ancak komşular ulaşamaz.
Yukarıdaki örnek kodda private public anahtar sözcükleri ne işe yaramaktaydı ? Nesneler sınıflar ile oluşturulmaktaydı, dolayısıyla nesnelerin sahip oldukları üyelere nesnenin dışından erişilip erişilemeyeceğine de sınfın erişim belirleyicileri belirler.
Erişim belirleyicileri ile nesne sahip olduğu üyelere kimin ve hangi şartla erişilebileceğini belirtir. Örneğin televizyonumuzun kullanıcı olarak erişebildiğimiz ve erişemediğimiz kısımları vardır. ( sınıfın üye elemanları ) Kanal değiştirmek için kanal düğmelerini kullanırız çünkü bunların kullanılması tamamiyle bize serbesttir. Ancak kanal bilgisinin nasıl ve nerede tutulduğunu bilemeyiz ve bu kısma erişemeyiz. Sadece kullanmaya iznimizin olduğu kısımları kullanabiliriz. Erişim belirleyicileri, nesne kullanıcısına, nesneyi nasıl kullanacağını gösterir .
Erişim belirliyicileri
Public Sınıfın public elemanlarına herkez erişebilir
komsulara açık olan kısım.
Protected Sınıfın protected elemanına ancak o sınıftan türemis sınıflar tarafından erişilebilir.
Protected üyelere türemiş sınıflar haricinde erişilemez
Aile fertleri özel bilgilerime ulaşabilir.
Private Sınıfın private elemanlarına sadece kendi sınıfı içinden erişebilir.
Bu sınıftan türemiş sınıflarda dahil olmak üzere dışarıdan erişilemez.
Ne komşular ne de aile fertleri benim özel bilgilerime erişebilir.

using System;

namespace SinifUyeleri
{
class Firma
{
private string FirmaAdi;
public string FirmaTel;

public void YazFirmaAdi()
{
Console.WriteLine("Firma Adi:{0}",FirmaAdi);
Console.WriteLine("Firma Tel:{0}",FirmaTel);
}

public void SetFirmaAdi(string f)
{
FirmaAdi = f;
}
}

class Uygulama
{
static void Main (string[] args)
{
Firma frm = new Firma();

frm.FirmaTel = "02122304656";
// FirmaTel Üye elemanı public oldugu icin nesnenin
// kullanıcısı erişebilir

frm.SetFirmaAdi("LMSoft");
// FirmaAdi üye elemanı private oldugu için nesnenin kullanıcısı direkt //olarak erişimez. FirmaAdı private Üye elemanına erişmek için Firma //Sınıfının publıc metodlarından yararlanılır.
frm.YazFirmaAdi();
}
}
}
 

Benzer konular

Üst