Nesne tabanlı
programcılıkta olmazsa olmazlardan biri nesnelerdir . Günlük yaşantımıza
da baktığımızda aslında her şey bir nesnedir . Programcılığın amaçları
arasında da hayatımızı kolaylaştırmak olduğuna göre ürettiğimiz
çözümlerde nesnelerden yararlanmalıyız . Hayatımızda ki nesneleri
programlarımızda sınıflar olarak nitelendiriyoruz . Örnek vermek
gerekirse çalışanlar , öğrenciler , banka hesabı gibi . Basit bir
uygulama ile sınıfların nasıl tanımlandığına
bir göz atalım . |
| |
class
sinifin_adi
{
//sınıfın üyeleri
} |
class
ogrenci
{
public int
ogrID;
…
…
} |
|
|
Öğrenci
adında basit bir sınıf tanımladık ve bu sınıfımızın ogrID adında
tekbir üyesi oldu . Bu üyemizi tanımlarken public anahtar sözcüğü
kullandık . Bu sözcüğe erişim değiştirici denir . Buna benzer
dört farklı erişim değiştiricisi vardır . Bu konuya yeri gelmişken
deyineyim . |
|
|
Erişim Değiştiricisi |
Özelliği |
| private |
Bu tür üyelere tanımlayıcı
sınıf dışında erişilemez , türetilen sınıflardan bile . |
| protected |
Bu tür üyelere sınıf dışında
görünmezler . Sadece türetilen sınıflardan erişilebilir . |
| public |
Bu tür üyelere her yer den
erişilebilir . |
| internal |
Kodun bulunduğu göre public ve
protected türlerinin bir karışımıdır . |
|
|
Bu bilgileri de verdikten sonra şimdide sınıfların üyelerinden bahsedelim .
Aklınızı karıştırmamak için basit tanımlarını verip bu konuyu hemen
geçmek istiyorum . Çünkü verecek olduğum her başlık nesne yönelimli
programlamada birer konu başlığı . |
| |
Alanlar :
Sınıf içerisinde tanımlanan değişkenlere
denir . |
Yöntemler : Sınıfın alanları
üzerinde çalışan gerçek koddur . Sınıflara davranış özelliklerini verir
. |
Özellikler : Bunlar
sayesinde bir sınıfın alanlarına bir erişimci yönteminin var olup
olmadığını bilmeden public alanlarmış gibi erişilebilen bir istemci
yazabiliriz . |
Sabitler : Değiştirilmeyen
bir değeri olan bir alandır . |
Dizinleyiciler : Değerleri
almak , ayarlamak için bir nesneyi kolayca dizinlememizi sağlar . |
Olaylar : Bir kod parçasının
çalışmasını sağlayan şeylerdir . Fare hareketi , tıklama işlemi gibi . |
İşleçler : Standart
matematiksel işleçleri bir sınıfa ekleyerek , bu işleçler
sayesinde daha yetenekli yazabilmemize olanak sağlar . |
| |
Sınıflar ve nesne yönelimli
yazılım hakkındaki bu temel bilgileri aldıktan sonra örnek uygulamalar
ile pekiştirelim . İlk örneğimizde basit bir uygulama yapalım .
Sınıfımızın bir fonksiyonu olsun ve ekrana herhangi bir metni yazdıralım
bu fonksiyon sayesinde . |
| |
static void Main(string[]
args)
{
ilkSinif.ilkFonksiyon();
}
}
class ilkSinif
{
public static void ilkFonksiyon()
{
Console.WriteLine("İlk Sınıf
Uygulaması");
Console.ReadLine();
}
} |
|
| |
Öncelikle gördüğümüz gibi
hazırlamış olduğumuz bir sınıf içerisindeki bir fonksiyona , eğer erişim
değiştiricisinden dolayı bir engel verilmemiş ise sinif_adi.fonksiyon_adi
şeklinde ulaşabiliriz . Bu örneğimizde birde önemli bir nokta var oda
static kelimesi . Eğer örneğimizde
fonksiyonumuzu static olarak tanımlamamış olsa idik uygulamamızı
derlerken şu hata ile karşılaşırdık : "Error 1 An object reference is
required for the nonstatic field, method, or property ‘classmakale_1.ilkSinif.ilkFonksiyon()’
" Bu hatayı Main() fonksiyonumuz static bir fonksiyon olduğu için
static bir fonksiyon içinden static olmayan çağıramıyor olmamızdan verir
. Eğer static yapmadan çağırmak istiyorsak o zaman Main() içerisinde
yavru bir üye tanımlamamız gerekir . Oda şu şekilde yapılıyor : |
| |
static void Main(string[]
args)
{
ilkSinif yavruUye =
new
ilkSinif();
yavruUye.ilkFonksiyon();
}
} |
|
| |
Yavru üye tanımlamayı da
öğrendikten sonra makalemize daha detaylı bir örnek ile devam edelim .
Bir bisiklet sınıfımız olsun bu sınıfa ait bazı üyeler olsun bu
üyeler sayesinde bisikletin maliyet ve satış fiyatlarını hesaplayalım . |
| |
static void Main(string[]
args)
{
double tekerlek;
double demiraksam;
double cant;
double pedal;
double satisF;
bisiklet yeniBisiklet =
new
bisiklet();
Console.WriteLine("\tTekerlek
Birim Fiyatını Giriniz");
tekerlek = Double.Parse(Console.ReadLine());
Console.WriteLine("\t\nDemir
Aksam Fiyatını Giriniz");
demiraksam = Double.Parse(Console.ReadLine());
Console.WriteLine("\t\nCant
Birim Fiyatını Giriniz");
cant = Double.Parse(Console.ReadLine());
Console.WriteLine("\t\nPedal
Fiyatını Giriniz");
pedal = Double.Parse(Console.ReadLine());
satisF=yeniBisiklet.satisFiyatiHesapla(tekerlek,demiraksam,cant,pedal);
Console.WriteLine("\t\nBisikletin
satış fiyatı = {0} YTL",satisF);
Console.ReadLine();
}
}
class
bisiklet
{
private double tekerlekbFiyati;
private double demiraksamFiyati;
private double cantbFiyati;
private double pedalFiyati;
private const double iscilik=52.5;
public double mFiyati;
public double sFiyati;
private double
maaliyetFiyatiHesapla()
{
mFiyati = (tekerlekbFiyati * 2) + demiraksamFiyati +
pedalFiyati;
mFiyati += (cantbFiyati * 2) + iscilik;
return mFiyati;
}
public double
satisFiyatiHesapla(double
tekerlek, double demiraksam,
double cant,
double pedal)
{
tekerlekbFiyati = tekerlek;
demiraksamFiyati = demiraksam;
cantbFiyati = cant;
pedalFiyati = pedal;
return (maaliyetFiyatiHesapla()
* 120)/100;
}
} |
|
| |
Bu uygulamamızda kullanıcıdan
alığımız birim fiyatlara göre belirli bir işçilik ekleyerek bir maliyet
fiyatı ve bu maliyete de belirli bir kar oranı ekleyerek satış fiyatını
bulmaya çalıştık . Burada maaliyetFiyatiHesapla()
fonksiyonunu private yapma sebebimiz ise bu fonksiyona dışardan
erişilmesini istememizdir . Yazımızı burada tamamlıyoruz . Umarım
faydalı olur . |
| |