OOP ve Class Kavramı
Yazılımla uğraşan her insanın ilk karşılaştığı kavram OOP( Object Oriented Programing - Nesneye Yönelik Programlama) dır.. Burada Yordamsal (fonksiyonel) Programlamadan neden OOP geçmek zorunda kaldığımızı ve OOP ile gelen Class kavramının üzerinde duracağım.
Bu programlama yöntemlerini anlatmaya geçmeden once programların temel kavramlarını incelemek lazım. Genel anlamda programlar 2 temel kavramdan oluşur.
- Veri : RAM'de,dosyada,database de sakladığımız, değiştirdiğimiz bilgiler..
- Fonksiyonlar: Bu verileri listeleyen,değiştiren,silen ve yenisini ekleyen yapılardır.
OOP ve Yordamsal Programlama , bu iki kavramın nasıl tutuldugu ve nasıl erişileceği konusunda farklılık gösteriyor.
Yordamsal Programlamada Veriler ile Fonksiyonlar ortalıkta dolaşırlar.Bir fonksiyon ile istediginiz veriye ulaşabiliyorsunuz.Aynı şekilde bir veriye istediğiniz kadar fonksyion ile ulaşabiliyorsunuz Genelde, Veriler Struct yapısı icinde tutulur. Bu Struct yapısı verimizin genel şablonunu (kalibini) temsil eder. Daha sonra bu şablonu kullanarak verimizi oluştururuz. En son Fonksiyonlarimizi hazırlar ve bu struct'taki veriyi işleriz.
-
struct BankaHesabi
-
{
-
long hesapNo;
-
double paraMiktari;
-
}
-
BankaHesabi BankaA[100]; // 100 tane hesap acabilen bir banka olsun..
-
-
int bul(long hspNo)
-
{
-
for(int i=0;i<100;i++)
-
if (BankaA[i].hesapNo=hspNo) return i;
-
return -1;
-
}
-
int paraYatir(Long hspNo,double miktar)
-
{
-
int idx=bul(hspNo);
-
if (idx==-1) return -1;
-
BankaA[idx].paraMiktari+=miktar;
-
return 1;
-
}
-
int paraCek(long hspNo,double miktar)
-
{
-
int idx=bul(hspNo);
-
if (idx==-1) return -1;
-
BankaA[idx].paraMiktari -=miktar;
-
return 1;
-
}
Bunun neler getirip neler goturdugunu bakacak olursak.
Zorlukları :
- Programımız büyüdükçe Fonksiyonlara isim bulmakta zorlanacağız.
- Programımız büyüdükçe Yapilara isim bulmakta zorlanacağız.
- Programımız büyüdükçe hatalari takip etmek zorlaşır. Çünkü yapıyı işleyen yüzlerce fonksiyondan hangisinin hataya sebep olduğunu bulmak oldukça zorlaşacaktır.
- Isimlendirme sıkıntımız olmasın diye Fonksiyon ve yapılara çok uzun ve açıklayıcı isimler vermek zorunda kalacağız ve bunları her kullandığımızda uzun uzun yazmak zorunda kalacağız.
- Tüm veriler ve fonksiyonlar ortalıkta dolaşmakta.
- Programcılar önce veriler uzerine yoğunlaşır ve verileri tasarlar.
- Daha sonra Bu verileri işleyecek olan Fonksiyonlar gerek duydukça yazılır.
NOT:Şimdi daha iyi anlıyorum Win32 API'lerindeki anlamsız uzun isimleri.
Getirdikleri :
- Program tasarımı çok fazla zaman almaz.
- Eğer programınız küçük ise hızlı uygulama geliştirmenize olanak sağlar.
- Herşey elinizin altındadır ve istediğiniz anda istediğinize ulaşabilirsiniz.
OOP'da ise amaç aynı olmasına rağmen yöntem çok farklıdır. Bu yötemde birbiriyle ilişkili olan Veri ve Fonksiyonlar bir yapıda bulundurur. Şimdi istersniz bu yapı üzerinde biraz duralım.
Class: Temel olarak Struct yapısına çok benzer. Fakat, Sadece Struct gibi veriler icin şablon olmanın yanında bir de bu verileri işleyen Fonksiyonlari içerir. OOP de herşey bu kavram etrafında dömektedir. Aslında Class programımız içine kullanacagımız herşeyi sınıflandırıp belli kalıplar/şablonlar hazırlamaktır.
Nesne: Sınıf kavramıyla çok karıştırılan bu kavram Class'ta belirtirlen kalıpta veya şablonda bellekten yer almaktır.. Kısaca Class'ın hayat bulmuş şeklidir. Bazı kaynaklarda Instance veya Object diye de geçer bu kavram.
OOP'de bir program tasarlanirken veriler ve fonksiyonlar arasında bir tasarlanma önceliği yoktur. Ikisi birlikte düşünülür..
-
class BankaHesabi
-
{
-
private :
-
long hesapNo;
-
double paraMiktari;
-
void setParaMiktari (double miktar) { paraMiktari = miktar;}
-
public:
-
long getHesapNo(){return hesapNo;}
-
double getParaMiktari(){return paraMiktari;}
-
void setHesapNo(long hspNo) { hesapNo=hspNo;}
-
void paraYatir(double miktar) {
-
setParaMiktari(getParaMiktari()+miktar);
-
}
-
void paraCek(double miktar){
-
setParaMiktari(getParaMiktari()-miktar);
-
}
-
}
-
-
class Banka
-
{
-
private:
-
BankaHesabi bank[100]; //BankaHesap şablonundan 100 adet Nesne oluşturduk.
-
public:
-
BankaHesabi bul(long hspNo){
-
for(i=0;i<100;i++)
-
if (bank[i].getHesapNo()==hspNo) return bank[i];
-
return null;
-
}
-
BankaHesabi bul(BankaHesabi hsp){
-
for(i=0;i<100;i++)
-
if (bank[i].getHesapNo()==hsp.getHesapNo()) return bank[i];
-
return null;
-
}
-
//yeni hesap oluştur..
-
//hesap sil...
-
//Hesap raporlariiiii
-
//..........................
-
}
-
Banka bankaA; // Banka şablonundan bir tane banka Nesnesi oluşturuluyor.
Şimdi OOP'nin getirdiklerine ve götürdüklerine bakarsak..
Getirdikleri:
- İsim bulma gibi bir sıkıntımız yok. bul gibi genel isimli bir fonksiyonu farklı Classlar içinde istediğimiz kadar kullanabiliriz. Hatta parametreleri farklı olduğu surece aynı Class icinde istediğiniz kadar aynı isimli fonksiyon kullanabilirsiniz. (Polymorphizm )
- Programimiz büyüdükçe hata bulmak konusudan sıkıntı yaşamayacağız. Çünkü verileri değiştiren fonksiyonlar verinin yanı başındadır.
- Fonksiyon ve Yapı isimlerini istedigimiz kadar kısa tutabiliriz.
- Veriler ve fonksiyonlar bir düzen içerisindedirler.
- Veriler ve fonksiyonlar aynı önceliğe sahiptirler.
Götürdükleri :
- Bir programın tasarlanması oldukça uzun sürebilir.
OOP ile birlikte yazılım dünyamıza yeni kavramlar girdi. Bunlari da incelersek..
Property: Class içindeki verilere verdiğimiz isimdir. hesapNo ve paraMiktari gibi
Method: Class içindeki fonksiyonlara verdiğimiz isim. paraYatir,paraCek, getHesapNo gibi..
Overloading: Ayni isimde birden cok fonksiyon tanımlaya bilmemizi sağlar. Onemli olan iki fonksiyonun farklı parametre alabilmesidir. Banka.bul(.....) fonksiyoundaki gibi
Encapsulation: Private ve Public kavramlarıyla dışardaki sınıfların erişimine sınır getirilebilir. Mesala Banka Objesi asla bank[0].paraMiktari şeklinde bir erişime sahip değildir. Banka objesi bir BankaHesabi Objesini paraYatir ve paraCek fonksiyonlariyla değiştirebiliyor.
Inheritance: Kelime anlamıyla kalıtım veya Miras anlamına gelmektedir. Bunu kullanarak BankaHesap2 seklinde bir hesap oluşturabiliriz. Bu olay bizim evebeynlerimizin özelliklerini kalıtım yoluyla taşımmamız gibidir.
Polymorphizm: Miras yoluyla olusan yeni Classimizda miras aldıgı Classa ait olan bir fonksiyonu begenmeyip yeniden yazmamız.
Abstract:
Interface:
Neyse bu son iki kavram Interface ve Abstract oldukça derin konular. Oyle iki kelimeyle anlatamayacağımı düşündüm. Özellikle Interface kavramının uzandığı teknolojileri düşününce bu kanıya vardım..
Interface ve Abstract kavramlarını başka bir zaman anlatırız.
Benzer Yazılar
Yorum Yap
XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

6 Şubat 2009 |










Etiketler:


