Karalama Defteri - Yorumlar SZP.net 4.1 Beta  
Sınıf, Nesne, Nesneye Yönelik Programlama
ASP.net sınıf, nesne, NYP, class, object, OOP

Bu makale Sınıf (Class), Nesne (Object), Nesneye Yönelik Programlama (OOP - Object Oriented Programming) kavramlarını anlatmak için kaleme alınmıştır. Ayrıca Olay Sürmeli (Event Driven) programlama kavramına da kısaca değinilmiştir.

Makalenin taslağını yazdığım yerden mermer ocakları görünüyor, ilham geldi, bu sebeple örnekleri mermer temalı veriyorum.

Sınıf (Class)
Kendisinden nesneler türetilen, temel özellikleri ve işlevi önceden kendisini yazan programcı tarafından belirlenmiş nesne şablonlarıdır. Bir sınıfa, ait olduğu aduzayı (namespace) hiyerarşisi içinden erişilebilir.

Nesne (Object)
Bir sınıftan türetilmiş program parçalarıdır.

Nesneye Yönelik Programlama (OOP)
Uygulamaları nesneler kullanarak yani bir çok nesnenin bir araya gelmesi ile oluşturmak demektir. Yani kullandığınız yordamları direk uygulama koduna yazmayıp, sınıflar içine yazıyor ve bu sınıflardan türettiğiniz nesneler üzerinden çağırıyorsanız Nesneye Yönelik Programlama yapıyorsunuz demektir.

Olay Sürmeli (Event Driven) Programlama
Yazdığınız kod belli bir sırayla çalışmıyor ve her kod parçasının çalışması bir olaya bağlanmışsa buna Olay Sürmeli Programlama denir. Mesela bir butona tıklanması (Command_Click), yazı kutunun içindeki metnin değişmesi (Text1_Change) birer olaydır. Her olay oluştuğunda olayın yordamı içindeki kod çalışır.

OOP ile Olay Sürmeli programlama kavramlarının karıştırılmasının sebebi de budur. Bir buton bir nesnedir. Butona tıklamak bir olaydır. Nesne başka şey, nesnenin olayları başka şeydir. Makalenin ilerleyen kısımlarında örnek olarak oluşturacağım Hesap adlı nesnenin hiç olayı yoktur. Ama o bir nesnedir. Nesneye Yönelik Programlamada nesnelerin olaylarının olması şart değildir.

Bütün Dünyayı bir framework kabul ediyoruz. Mermerin;
"Taşlar.Mermerler" aduzayı içindeki sınıflar olduklarını varsayıyoruz. Mermerleri kabaca sınıflara ayırırsak BeyazMermer, SiyahMermer, KırmızıMermer gibi sınıflar (classes) oluşur. Bu sınıfların bazı özellikleri (properties) önceden bu sınıfları yapan (Allah C.C.) tarafından belirlenmiştir. Sertlik, renk vs. gibi. Bunlara müdahale edemeyiz ama istediğimiz sınıfı kullanabiliriz. Bize siyah bir mermer nesnesi lazımsa SiyahMermer sınıfından türetiriz. Örneğin MySQL kullanıyorsak System.Data.SqlClient aduzayı içindeki SqlClientConnection sınıfı işimize yaramaz ama System.Data.ODBC aduzayı içindeki ODBCConnection sınıfını tercih ederek işimizi görürüz.
Elbette sınıflardan türetilen nesnelerin müdahale edebileceğimiz özellikleri de (properties) vardır; en, boy, kalınlık gibi. Şimdi bize 80 x 20 x 2 cm. ebadında, kapı eşiğine koymak için beyaz bir mermer (nesnesi) lazım. Öyleyse bu nesnemizi BeyazMermerler sınıfından türetmeliyiz. BeyazMermerler sınıfı "Taşlar.Mermerler" aduzayı içindedir.

Dim KapıEşiği As Taşlar.Mermerler.BeyazMermer

diyerek nesnemizi tanımlarız. Henüz düşünüyoruz; "bana BeyazMermer sınıfından bi mermer lazım." Hala ortada nesne filan yok. Sadece genel olarak kullanacağımız şeyin neye benzeyeceğini düşündük ve tanımladık. Peki elimizde mevcut önceden hazırlanmış bir mermeri mi, yoksa yeni bir tane keserek onu mu kullanacağız? Eğer yeni (New) bir tane lazımsa;

KapıEşiği = New Taşlar.Mermerler.BeyazMermer

deriz ve nesnemiz oluşur. New anahtar kelimesi nesne oluşturulup referansı KapıEşiği'ne atanmadan önce sınıfın ilk yapılandırma komutlarının işlemesini sağlar. Bu cümleyi anlamadıysanız ilerleyen satırlarda verdiğim örneğe bakın. Üzerinde BeyazMermer sınıfının önceden tanımlı bütün özelliklerini (properties) taşıyor. Müdahale edebileceğimiz özelliklerinide biz belirleyelim;

KapıEşiği.Boy = 80
KapıEşiği.En = 80
KapıEşiği.Kalınlık = 2


taşımız hazır.

Taşlar.Mermerler aduzayı içindeki BeyazMermer sınıfından KapıEşiği adlı nesnemizi türettik.

Taşlar.Mermerler namespace'i içindeki BeyazMermer class'ından KapıEşiği adlı object'imizi türettik.

Dim KapıEşiği As New Taşlar.Mermerler.BeyazMermer
şeklinde de yazabilirdik.

---------------------------------------------------

Şimdi Dünya Framework'ünden .NET Framework'üne geçelim.
System.Data.OleDB aduzayı içindeki OleDbConnection sınıfından Con isimli bir nesne türetelim.

Imports System.Data.OleDB

Dim Con As OleDbConnection

Con = New OleDbConnection()


System.Data.OleDB aduzayı içindeki OleDbConnection sınıfından Con adlı nesnemizi türettik.

Bu sınıfın kendisini yazan tarafından belirlenmiş özellikleri vardır. Bazılarına müdahale edebiliriz,  bazılarına edemeyiz.

Con.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0;data source=C:\dene.mdb"

Tabii .NET dünyasında mevcut sınıfları kullanmak gibi bir kısıtlama yok. Kendi sınıfımızı kendimiz yazabilirz ve ondan nesnelerimizi türetebiliriz.

Şimdi Matematik aduzayı içinde Temel işlemler sınıfını oluşturalım. Bu sınıf toplama, çıkarma, bölme, çarpma gibi temel matematik işlemleri yapacak olsun.
1. Sayı, 2. Sayı ve İşlem özelliklerine değer atayacağız, Hesapla metodunu çağırıp sonucu Sonuc özelliğinde okuyacağız.

Matematik.vb adlı bir text dosyası oluşturun ve yazmaya başlayın;

Imports System

Namespace Matematik

Public Class Temel
    Dim csIslem As String
    Dim ciSayi1 As Integer
    Dim ciSayi2 As Integer
    Dim ciSonuc As Integer
    
    Public Sub New()
        csIslem = "+"
        ciSayi1 = 4
        ciSayi2 = 2
        Hesapla()
    End Sub
    
    Public Property Islem() As String
        Get
            Return csIslem
        End Get
        Set(Value As String)
            csIslem = Value
        End Set
    End Property
    
    Public Property Sayi1() As Integer
        Get
            Return ciSayi1
        End Get
        Set(Value As Integer)
            ciSayi1 = Value
        End Set
    End Property
    
    Public Property Sayi2() As Integer
        Get
            Return ciSayi2
        End Get
        Set(Value As Integer)
            ciSayi2 = Value
        End Set
    End Property
    
    Public ReadOnly Property Sonuc() As Integer
        Get
            Return ciSonuc
        End Get
    End Property
    
    Public Sub Hesapla()
        Select Case csIslem
            Case "+" : ciSonuc = ciSayi1 + ciSayi2
            Case "-" : ciSonuc = ciSayi1 - ciSayi2
            Case "*" : ciSonuc = ciSayi1 * ciSayi2
            Case "/" : ciSonuc = ciSayi1 / ciSayi2
        End Select
    End Sub
End Class

End NameSpace


Şimdi derleyelim;
vbc.exe matematik.vb /out:matematik.dll /t:library

Not; Derlemeyle ilgili daha ayrıntılı bilgi için yazının sonuna bakın

Derleme sonucunda oluşan Matematik.dll dosyasını sunucumuzun "bin" dizinine kopyaladıktan sonra hazırladığımız bu sınıfı denemek için deneme.aspx adlı bir dosya oluşturun ve aşağıdaki kodu içine yapıştırın;

<%@ Page Language="VB" %>
<%@ Import Namespace="matematik" %>
<script runat="server">
Private Sub Page_Load(ByVal Sender As System.Object, ByVal E As System.EventArgs)
    Dim Hesap As Matematik.Temel
    Hesap = New Matematik.Temel

    Response.Write("İlk atanan değerlerin verdiği sonuç = " & Hesap.Sonuc & "<br/>")

    Hesap.Sayi1 = 10
    Hesap.Sayi2 = 2
    Hesap.Islem = "+"
    Hesap.Hesapla()

    Response.Write(Hesap.Sonuc)
End Sub
</script>


İşte bu kadar.

<%@ Import Namespace="matematik" %> satırıyla matematik aduzayını sayfamıza import ettik.

Matemetik aduzayı içindeki Temel sınıfından Hesap adlı nesnemizi türettik;
Dim Hesap As Matematik.Temel
Hesap = New Matematik.Temel

New anahtar kelimesi kullanarak sınıfın yapılandırma komutlarını (constructor) çalıştırdığımız için 1. Sayıya 4, 2. sayıya 2 ve İşlem olarak "+" atandığından yazdırılan sonuç 6 oldu. Dikkat edin Hesap.New() diyerek New() yordamını çağırmadık. "Hesap = New Matematik.Temel" yazmamız bunu sağladı.
Response.Write("İlk atanan değerlerin verdiği sonuç = " & Hesap.Sonuc & "<br/>")

Özellikleri atadık;
Hesap.Sayi1 = 10
Hesap.Sayi1 = 2
Hesap.Islem = "+"

Hesapla() metodunu çağırarak hesaplamayı yaptırdık;
Hesap.Hesapla()

Sonuc özelliğini okutarak sonucu ekrana yazdırdık.
Response.Write(Hesap.Sonuc)

Örnekleri çalıştırırsanız tarayıcı penceresine;
İlk atanan değerlerin verdiği sonuç = 6
12

yazıldığını göreceksiniz.

Not;
Sınıfımızı yazarken Public ReadOnly Property Sonuc() As Integer satırında ReadOnly yazmamız dikkatinizi çekmiş olmalı. ReadOnly yazarak Sonuc özelliğinin sadece okunabilir olduğunu, dışarıdan değer atanarak değiştirilemeyeceğini belirtiyoruz.


Derleme
Derlemeyi yaparken MS-DOS komut istemine geçin. [matematik.vb adlı dosyanın bulunduğu dizine gidin.
vbc.exe matematik.vb /out:matematik.dll /t:library komutunu çalıştırın.
Eğer;
'vbc.exe' iç ya da dış komut, çalıştırılabilir program ya da toplu iş dosyası olarak tanınmıyor. şeklinde bir hata alırsanız derleme komutunu çalıştırmadan önce;
Path="C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322" komutunu çalıştırın. Burada C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322 dizini vbc.exe'nin bulunduğu dizindir. Eğer sizin bilgisayarınızda farklı bir dizinde ise o dizinin yolunu yazın.

Eğer fazladan bir aduzayını import ediyorsak derlerken referans vermemiz gerekir. Mesela sınıfımızın kodunda;
Imports System.Data
yazarak System.Data aduzayını import etmiş olsaydık;

vbc.exe matematik.vb /out:matematik.dll /t:library /r:system.data.dll
yazmamız gerekirdi.

Bu yazı kaynak göstermek kaydıyla kısmen, tamamen veya değiştirilerek yayınlanabilir.
En yeni makaleler FındıkKurdu'nda yayınlanır. http://www.findikkurdu.com

ufukyayla 25.07.2005 18:26:45

@Tuncay

Bravo, çok güzel bir yorum getirilmiş, çok güzel açıklanmış teşekkür ederim...
07.01.2006 07:26:27

 Sayfalar : [1] Taşındık Yeni Siteye Girin
 # Blog - ASP.NET!VB
  Karalama Defteri
 Giriş
 Bölümler
 Son Yorumlar
 
  Bölümler
 Deli Gömleği
 Eşeryakoli
 Makaleler
 Projeler
 UfukSZP Dağıtımı
 ASP.NET Maceraları
 
  Son Karalamalar
 Foruma üye girince oluşan ...
 Taşındık
 SoulTips Gibi Birşey
 Ya Nasip
 Ulan Ubuntu
 El Yapımı Projeksiyon
 Ne İstiyor Bu Üyeler
 Sınıflarda Kalıtım (Inheri...
 Sadeleştirme Şart
 South Park
 
  Son Yorumlananlar
 Ya Nasip
 Ben Ziraat Mühendisiyim
 UfukSZP Dağıtımını Kullananl...
 Grup Hepsi
 Ne İstiyor Bu Üyeler
 Ziyaretçi Defteri
 Powered By Access
 Ulan Ubuntu
 Network A.K.T. (Arada Kafamı...
 Sınıf, Nesne, Nesneye Yöneli...
 
  Güzel İnsanlar
 Fındık Kabuğu
 Evren AYAN
 Halil TUNÇ
 Can HANHAN
 Mehmet TURAC
 Bloglar Alemi
 
  Şu Anda Bağlılar
 Misafir 
 
  Ordan Burdan
  
 
 
 
 
 
 
 
 
 

Bu sayfa 0,046 saniyede derlendi.





Bu sitede çalışan bütün ASP.net ve JavaScript kodları orjinaldir ve sıfırdan yazılmıştır.
Site yaygın bütün tarayıcılarla (IE, Firefox vs.) uyumludur.
Bu sitede kullanılan SZP.net 4.1 Beta altyapısı MS Access, MySQL Server ve MS-SQL Server ile çalışabilmektedir.

Tasarım & Kodlama
Ufuk YAYLA