ÜYE GİRİŞİ  
Kullanıcı adı :
Parola :
 
  Üye Ol!  
 
 
ANASAYFA HABERLER ASP ASP.NET PHP C/C++ C# JAVA ARAMA İLETİŞİM

ASP.NET
  Expression Web ile Site Yapimi
  Web Server Control Yazmak - 2
  Web Server Control Yazmak - 1
  Sql Cache Dependency
  Web Kontrollerini Etkin Kullanmak
  Xslt Kullanımı
  Bir Web Sayfasının Anatomisi
  Client Script Callback
  Login Kontrollerinin Kullanımı

ASP
  ASP Nesneleri
  29 Soruda ASP
  Matematiksel Uygulamalar
  Select Case Yapısı 2
  Fonksiyon(Function) Kullanımı
  IF-ELSE...
  GET Yöntemi ile İşlemler
  Asp de Tarih ve Saat fonksiyonları
  While-wend döngüsü

C Sharp (C#)
  C#'da klasör işlemleri
  C# ile diziyi tersine çevirme
  Çok Kullanılan Kontroller-1
  C# ile Kronometre Uygulaması
  Overloaded Metotların Gücü
  C# ile XMLQuery Örneği
  Rastgele Kod Üretimi
  Kontroller ile Çalışma
  Düzenli İfadeler Nedir?

DUYURULAR

F# Microsoft dil teknolojisinin en yeni üyesi.Common Lisp-Slime-Emacs tarzında etkileşimli,kıvrak,sonuçların anında görülebildiği ve yüksek performanslı bir betik dil olarak özetleyebiliriz bu yeni dili. devamı >>


Türk Telekom'dan yapılan yazılı açıklamada, Telekomünikasyon Kurumu'nun onayladığı yeni tariflerin, internet servis sağlayıcı şirketlerin maliyetlerini önemli oranlarda düşüreceği aktarıldı. devamı >>


C# ile Nesne Yönelimli Programlama I | Asundinay.Com
C Sharp (C#) İçin Eklenmiş Makale
 Makale Adı  :  C# ile Nesne Yönelimli Programlama I
 Yayın Tarihi :  12.08.2007 14:25:16 Ekleyen :  Kazım Aydın Okunma : 192

 

Bu makalede nesne yönelimli programlama tekniğine kadar kullanılan yazılım geliştirmedeki yaklaşımlara göz atacağız. Daha sonra nesne yönelimli programlamanın temel kavramları ve neden böyle bir tekniğin kullanıldığı üzerinde duracağız.

Yazılım Geliştirme ve Bu Alandaki Yaklaşımlar

Kimilerine göre geçtiğimiz yüzyılın en önemli buluşu olarak kabul edilen bilgisayar teknolojisi, baş döndürücü bir hızla gelişmektedir. Bilişim sektöründeki değişimler bazen varolan teknolojilere yenilerinin eklenmesi şeklinde olabilir. Diğer taraftan bir kısım yenilikler vardır ki bu alanda büyük değişimlere ve evrimlere yolaçar. Mesela; kişisel bilgisayarların kullanılmaya başlanması veya internetin belli başlı akademik kurumların ve askeri organizasyonların tekelinden alınıp tüm insanlığın hizmetine sunulması gibi.

Hepimizin bildiği gibi bir bilgisayar sistemi iki ana parçadan oluşur. Bunlar donanım(hardware) ve yazılım(software). Donanımın yazılım ile uyumlu çalişması sonucunda sistemlerimiz sorunsuz bir şekilde bizlere hizmet verirler. Ayrıca donanımın amacımimza uygun hizmet vermesi uygun yazılımın geliştirilip kullanılmasına baglıdır.

Yazılım sektöründe program geliştirme konusunda günümüze kadar bir çok yaklaşim denenmiştir. Bunların ilki programın baştan aşağıya sırası ile yazılıp çalıştırılmasıdır. Bu yaklaşımla BASIC dili kullanılarak bir çok program yazıldığını biliyoruz. Burda sorun programın akışı sırasında değişik kısımlara goto deyimi ile atlanmasıdır. Program kodu bir kaç bin satır olunca, kodu okumak ve yönetmek gerçekten çok büyük sorun oluyordu.

ıkinci yaklaşım ise prosedürel yaklaşımdır. Programlarda bir çok işin tekrar tekrar farklı değerleri kullanılarak yapıldığı farkedildi. Mesela herhangi bir programda iki tarih arasında ne kadar gün olduğunu bulmak birçok kez gerek olabilir. Bu durumda başlangıç ve bitiş tarihlerini alıp aradaki gün sayısını veren bir fonksiyon yazılabilir ve bu fonksiyon ihtiyaç duyulduğu yerde uygun parametrelerle çağrılıp istenen sonuç elde edilebilir. Prosedürel yaklaşım Pascal ve C dillerinde uzun yıllar başari ile kullanılmıştır.

Ama her geçen gün programların daha karmaşık bir hal alması, program kodunun kurumsal uygulama projelerinde onbinlerce satırı bulması ve yazılım geliştirme maliyetinin çok arttiğını gören bilim adamları, programcılara yeni bir yaklaşımın kullanılabilineceğini öğrettiler. Bu yakaşımın ismi Nesne Yönelimli Programlama(Object Oriented Programlama)dır.

Nesne yönelimli programlama tekniği, diger yaklaşımlara nazaran, yazılım geliştiren insanlara büyük avantajlar sağlamaktadır. Birincisi karmaşık yazılım projelerinin üretilmesini ve bakımını kolaylaştırıyor olmasıdır. Diğeri ise program kodunun tekrar kullanılabilmesine (code-reusability) olanak sağlamasıdır. Bu noktada program kodunun tekrar kullanılabilmesi profesyonel yazılım şirketlerinin maliyetlerini azaltmıştır. Dolayısi ile programların lisans ücretleri düşmüş ve sektörün sürekli olarak canlı kalmasına ve rekabet içinde gelişmesine yardımcı olmuştur.

Nesne Yönelimli Programlama Nedir?

Nesne yönelimli programlamada esas olan, gerçek hayatta varolan olguların programlamaya aktarılmasındaki yeni yaklaşımdır. Prosedürel programlamada verilerimiz ve fonksiyonlarımız vardı. Yani veri ve bu veriyi işleyen metodlar etrafinda dönüyordu herşey.

Aslında nesne yönelimli programlamada da iki önemli birim veri ve veriyi işleyip mantıklı sonuçlar üreten metodlar bulunur. Ama burdaki fark gerçek hayattaki olguların da daha iyi gözlenip programlama dünyasına aktarılmasındadır.

Mesela elimizde bir ütümüz olsun. ütünün markası, modeli, rengi, çalıstığı elektrik voltajı, ne tür kumaşları ütüleyebildiği bu ütüye ait özelliklerdir (veri). Aynı zamanda ütümüzü ısıtabiliriz, ütüleme işinde kullanabiliriz ve soğumaya bırakabiliriz. Bunlar ise ütünün fonksiyonalarıdır(metod). Eğer ütü ile ilgili bir program yapmış olsak ve nesne yönelimli programlama tekniğini kullansak hemen bir ütü sınıfı(class) oluştururduk. Bu sınıfta ütüye ait bilgiler (veriler) ve ütü ile yapabileceğimiz işler(metod) bulunurdu. O zaman nesne yönelimli programlama da bir sınıfta, sınıfa ait veriler ve bu verileri işleyip bir takiı faydalı sonuçlar üreten fonksiyonlar/metodlar bulunur.

Dahası, biz birtane ütü sinifi tasarlarsak bu sınıftan istediğimiz sayıda değişik ütüler(object veya instance) yapabiliriz. Ağagidaki şekilde ütü sınıfı ve bu sınıftan oluşturduğumuz neslerin görsel olarak anlatımı bulunmaktadır.

Sınıf Nedir ve Nasıl Tasarlanır?

Az önce de değindiğimiz gibi, sınıf bir yazılım kurgusudur ve gerçek hayattaki herhangi bir olguyu modelleyen ve bu olguya ait özellikleri(veri) ve davranışları(metdodlar) tarifleyen yapıdır.

ısterseniz ütü ile ilgili bir örnek üzerinde çalışalım. Aşağıdaki örnek C# program kodunu lütfen dikkatlice inceleyeniz.

using System;

class ütü_örnegi
{

     static void Main(string[] args)
     {
          ütü ütü1= new ütü("Beyaz", "AyBakır");

          Console.WriteLine(ütü1.Isın(70));
          Console.ReadLine();
     }

}

class ütü
{
     public int sıcaklık;
     public string renk;
     public string marka;

     public ütü(string renk, string marka)
     {

          sıcaklık=15;
          this.renk=renk;
          this.marka= marka;

          Console.WriteLine(sıcaklık+ "derece sıcaklığında,\n "
                                   + renk + " renginde ve\n "
                                   + marka +" markasıyla bir ütü nesnesi oluşturuldu\n\n");

     }

     public string Isın(int derece)
     {
          sıcaklık+=derece;
          return "şu an sıcaklıgım: " + sıcaklık+ " derece";
     }
}

Yukarıdaki örnek programımızda önce altta bulunan ütü sınıfımızı inceleyelim. Bu sınıfın sıcaklık, renk ve marka olmak üzere üç adet verisi vardır. Ayrıca ütü sınıfımızın ütü(string renk, string marka) şeklinde tanımlanmış yapılandırıcısı (constructor) vardır. Yapılandırıcılar bir sınıftan oluşturulan nesnelerin ilk değerlerini atama ve baslangıç işlemlerini yapmak için kullanılırlar. ütü sınıfınımızın yapılandırcısı, oluşturulan her ütü nesnesinin sıcaklığını varsayılan değer olarak 15 dereceye ayarlıyor. Ayrıca paratmetre olarak alınan renk ve marka değerlerini de atayıp, ütüye ait özellikleri ekrana yazdırıyor.

ütü sınıfına ait olan diğer metod ise Isın(int derece) olarak tanımladığımız metoddur. Bu metod ütünün sıcaklığını derece parametresinde verilen değer kadar artırıp sonucu string tipinde geri dönderiyor.

ütü_örnegi sınıfına geri dönersek, burda sadece Main() metodunun bulunduğunu görürüz. Main() metodu, C# dilinde her programda bulunması gereken zorundu bir metoddur. çünkü programın çaliştırılması buradan başlar. Ayrıca her C# programında sadece bir tane Main() metodu bulunur. örneğimizde Main() metodundaki en önemli satir:

        ütü ütü1= new ütü("Beyaz", "AyBakır");

satırıdır. Bu satırda ütü sınıfına ait ütü1 nesnemizi oluşturuyoruz. Yukarıdaki satırdan da görebileceğimiz gibi herhangi bir sınıfa ait yeni nesneyi oluştururken genel olarak şu yapş kullanılır:

        SınıfAdı nesneAdı = new SınıfAdı(parametre1, parametre2, … parameter N)

Referans Tipleri ve Nesneler

Nesnelerin en önemli özelliği referans tipinde olmalarıdır. Referans tiplerinde bir nesnenin değeri saklanmaz. Sadece nesnenin hafızadaki (heap memory) yeri saklanır. Bir nesnenin hafizadaki yerini new operatörü geri dönderir. Aşağıdaki program kodu ile referans tiplerine ait bir kaç temel özelliği inceleyelim:

using System;

class ütü_örnegi
{

    static void Main(string[] args)
    {
        ütü ütü1= new ütü("Beyaz", "AyBakır");

        Console.WriteLine("ütü1'nin ilk özellikleri: " +
                                ütü1.özellikler());
        Console.WriteLine("ütü1'i 50 derece ısıtalım: "+
                                ütü1.Isin(50)+ "\n\n");

        // ütü2 nesnemizi renksiz ve markasız olarak olusturalım:
        ütü ütü2 = new ütü("","");

        //ütü2 nesnemizin özelliklerine bir göz atalım:
        Console.WriteLine("ütü2'nin ilk özellikleri: " +
                                ütü2.özellikler());

        ütü2= ütü1; // ütü2 nesnemizi ütü1 nesnemize atıyoruz.
        Console.WriteLine("ütü2'nin özellikleri: " +
                                ütü2.özellikler());

        Console.ReadLine();
    }

}

class ütü
{
    public int sıcaklık;
    public string renk;
    public string marka;

    public ütü(string renk, string marka)
    {
        sıcaklık=15;
        this.renk=renk;
        this.marka= marka;
    }

    public string Isın(int derece)
    {
        sıcaklık+=derece;
        return "şu an sıcaklığım: " + sıcaklık+ " derece";
    }

    public string özellikler()
    {
        string sonuc= " Sıcaklık: " + sıcaklık+
                            "\n Renk: " + renk+
                            "\n Marka: " + marka+ "\n\n";
        return sonuc;
    }
}

ısterseniz kodumuzu incelemeye yine ütü sınıfından başlayalım. Bir önceki örneğe göre sınıfımızda degişikler yaptık. ütü sınıfının özelliklerini gösteren ayrı bir metod yazdık. Bu metod özellikler() isimli olsun. Doğal olarak ütü sınıfının yapılandırıcısında, sınıf oluşturulduktan hemen sonra nesnenin özelliklerini gösteren kısım kaldırıldı.

şimdi ise ütü_örnegi sınıfındaki Main() metodu üzerinde yoğunlaşalım. Yine, birinci örnekte olduğu gibi, ütü1 nesnemizi

        ütü ütü1= new ütü("Beyaz", "AyBakır");

ile oluşturuyoruz. Sonra ütü1 nesnesinin özelliklerini ekrana yazdırıyoruz. Bir sonraki satırda ise ütü1 nesnemizi 50 derece ısıtıp sonucu ekrana yazıyoruz.

Artık ikinci bir ütü nesnesinin oluşturmanin zamanı geldiğini düşünüp

        ütü ütü2 = new ütü("","");

satırında ütü2 nesnemizi oluşturuyoruz. Burada dikkatinizi çektiği gibi ütü2 nesnesinin renk ve marka özelliklerini boş olarak (null) oluşturuyoruz. ütü2 nesnesini oluşturunca özelliklerine gözatmak için

        Console.WriteLine("ütü2'nin ilk özellikleri: " +
                                 ütü2.özellikler());

satırlarını yazıyoruz. Bir sonaki satır programımızın en önemli satırıdır. Bu satırda ütü2= ütü1 ifadesi ile ütü2 nesnesinin referansını ütü1 nesnesinin referansına atıyoruz. Değer tiplerinde "=" operatörü ile bir değişkenin değeri diğerine kopyalanır. Ama nesneler referans tipleri oldukları için, "=" operatörü bir nesnenin referansı diğerine atar. Bu durumda ütü2 nesnesi artik ütü1'in elemanlarının adreslerini içerir. Bu andan sonra ütü2'nin eskiden gösterdiği sicaklik, renk ve marka verilerine erişmemiz mümkün değildir. Artık onlar hafızada bir yerde ve biz bilmiyoruz. Bu verilerin hafızada kapladıkları alanı .NET Framework'nun çöp toplayıcısı (garbage collector) uygun gördüğü bir anda temizleyecektir.

ütü2 nesnesinin son durumda özelliklerine bakacak olursak gerçektende ütü1'i referans ettiğini görürüz. Yukarıdaki programımızı çalıştırdığımızda aşağıdaki sonucu elde ederiz:

Son olarak şu ilginç soruya cevap vermeye çalışalım. "Bir önceki program kodunun sonuna aşağıdaki kısmı eklersek ne gibi bir değişiklik olur?"

// ütü2 nesnemizin özelliklerini degiştiriyoruz:
ütü2.sıcaklık=30;
ütü2.renk="Kırmızı";
ütü2.marka="Dolu";

//ütü1 nesnemizin özellikerine bir göz atalım:
Console.WriteLine("ütü1'nin son durumdaki özellikleri: " +
                          ütü1.özellikler());

//ütü1 nesnemizin özellikerine bir göz atalım:
Console.WriteLine("ütü2'nin son durumdaki özellikleri: " +
                          ütü2.özellikler());

Yukarıdaki kodun eklenmiş halini derleyip çalıştirmayı deneyelim. Sonuç aşağıdaki gibi olacaktır:

Evet ütü1 ve ütü2'nin son durumdaki özellikleri aynıdır. Bu durumdan şu sonuca ulaşabiliriz: " ütü1 ve ütü2'nin herhangi biri ile özellikleri degiştirirsek diğeri de aynı özelliklere sahip olur. çünkü her iki nesne de hafızada aynı yere referans ediyorlar."

Bu makalede nesne yönelimli programlamaya giriş yaptık. Nesne yönelimli programlamanın iki temel kavramı olan sınıf(class) ve nesne(object)'yi inceledik. Sonraki makalelerde nesne yönelimli programlamanın diğer önemli özellikerini birlikte incelemek dileğiyle.


 

Kaynak : csharpnedir.com


 

C Sharp (C#) İçin Eklenmiş Tüm Makaleler
C Sharp (C#) İçin En Son Eklenen 5 Makale
 Makale Adı  :  C#'da klasör işlemleri
 Yayın Tarihi :  11.04.2009 08:47:40 Ekleyen :  özen karaçakır Makaleyi Oku  
 Makale Adı  :  C# ile diziyi tersine çevirme
 Yayın Tarihi :  27.11.2008 08:57:42 Ekleyen :  özen karaçakır Makaleyi Oku  
 Makale Adı  :  Çok Kullanılan Kontroller-1
 Yayın Tarihi :  05.11.2007 10:39:39 Ekleyen :  Kazım Aydın Makaleyi Oku  
 Makale Adı  :  C# ile Kronometre Uygulaması
 Yayın Tarihi :  09.10.2007 11:23:04 Ekleyen :  Zeliha Görmez Makaleyi Oku  
 Makale Adı  :  Overloaded Metotların Gücü
 Yayın Tarihi :  12.08.2007 16:05:03 Ekleyen :  Kazım Aydın Makaleyi Oku  

C/C++
  C ögreniyorum -8-
  C ögreniyorum -7-
  C ögreniyorum -6-
  C ögreniyorum -5-
  C ögreniyorum -4-
  C ögreniyorum -3-
  C ögreniyorum -2-
  C ögreniyorum -1-
  İlk C++ Programımız

JAVA
  Java ile Histogram Eşitleme
  JAVA İçinde Thread Kullanımı
  Serialization İşlemleri 2
  Serialization İşlemleri
  İlk Bakışta JSP
  Servletler ile Web Sayfaları
  Java ile Grafik Çizim
  Java, MySql Bağlantısı
  JBuilder ile Database

PHP
  php dersleri -1-
  php/access ile silme işlemi
  php ile access'e bağlanma - 2
  php ile access'e bağlanma - 1
  Döngü ve Diziler - BÖLÜM 5
  Döngü ve Diziler - BÖLÜM 4
  Döngü ve Diziler - BÖLÜM 3
  Döngü ve Diziler - BÖLÜM 2
  Döngü ve Diziler - BÖLÜM 1

İSTATİSTİKLER
  Toplam ziyaret :  24684
  Toplam üye sayısı :  1077
  Asp makale sayısı :  20
  Asp.Net makale sayısı :  54
  Php makale sayısı :  26
  C/C++ makale sayısı :  51
  C# makale sayısı :  29
  Java makale sayısı :  33
  Toplam makale saıysı :  213
Copyright asundinay® 2007 Her Hakki Saklidir
Tasarim & Programlama asundinay®