Zihin Geliştirme Merkezi

KOOLPA

Zihin Geliştirme Merkezi

 

ASP ile Class Kullanımı

 Programlama Katagorisinde ve  Asp,Perl,Php,Html Forumunda Bulunan  ASP ile Class Kullanımı Konusunu Görüntülemektesiniz.=>MaxiASP.com'da bu günden itibaren yeni bir yazıdizisine başlıyoruz. Herkesin aklına takılan, çok ulaşılmaz gelen ve açıkçası korkulan Class yapısını sizlere ...


Geri git   Zihin Geliştirme Merkezi > KooLpa Webmaster / Grafik / Programlama > Programlama > Asp,Perl,Php,Html

Üye ol Bloglar Yardım Üye Listesi Ajanda Forumları Okundu Kabul Et

Cevapla

 

LinkBack Seçenekler Stil
Alt 31-05-2007, 20:48   #1 (permalink)
KooooLpa
 
pReNsEs - ait Kullanıcı Resmi (Avatar)
 
Üyelik tarihi: Dec 2006
Mesajlar: 2,639
Tecrübe Puanı: 8 pReNsEs is on a distinguished road
Arrow ASP ile Class Kullanımı


MaxiASP.com'da bu günden itibaren yeni bir yazıdizisine başlıyoruz. Herkesin aklına takılan, çok ulaşılmaz gelen ve açıkçası korkulan Class yapısını sizlere anlatmaya çalışacağım. Bu yapıyı anlatırken birlikte baştan sona bir class hazırlayacağız ve eminim ki bu class sizlerinde benim işime yaradığı gibi işinize yarayacak.

Class nasıl yazılır sorusuna geçmeden önce biraz class'lardan ve kullanım alanlarından bahsetmek isterim.Şimdi ilk aklımıza gelen soru herhalde, neden class kullanarak script veya program yazmalıyım?
Bilindiği üzeri class nesneye yönelik bir programlama tipidir ve bir çok getirdiği avantajlar vardır. Class kullanarak yazılan scriptler veya programlar , içinde gerçekleşen olaylara daha değişik bakmanızı sağlar.

Ne gibi faydaları olur?

• Nesne kavramı, nesnelerin metod ve özellikler içermeleriyle, artık programcının kendisine yüklemiş olduğu değişkenler, durumlar, fonksiyonlar arasında bulunan ilişkileri, programcıdan alıp nesnenin depolama özelliği sayesinde nesneye yükleyebiliyor. Programcı kendisine yüklemiş olduğu bu sorumluluğu, nesne kavramı ile halledebiliyor.
• Nesneye Yönelik Programlama, kalıtım özelliği sayesinde, yazılan kod başka amaçlar için ek özellikler eklenerek tekrar kullanılabiliyor.
• Nesneye Yönelik Programlama, ile yazılan kod daha okunabilir ve anlaşılabilir oluyor.
• Nesneye Yönelik Programlama ve kalıtım programcıların, kollektif çalışmalarına olanak sunuyor.
• Zor problemleri, sunduğu yaklaşım ile daha kolay ve hızlı çözülebilir hale getiriyor.


Class Nasıl Yazılır?

Class yazarken kullanabileceğimiz bazı ifadeler(statements) bulunmaktadır.Bunları sıralayacak olursak1. Public
2. Private
3. Const
4. Class_Initialize
5. Class_Terminate 6. Property Get
7. Property Let
8. Property Set
9. Function
10. Sub


İlk olarak yukarıdaki ifadelerin(statements) nasıl kullanıldığına geçmeden önce class nasıl tanımlanır onu bir inceleyelim.

Syntax :
Class ClassAdi
İfade(statement)
End Class

Class tanımlaması yukarıda görüldüğü şekildedir.

1. Public
Public olarak tanımladığınız bir değişkenle, class içine dışarıdan veri gönderebiliriz.

Syntax :
Class ClassAdi
Public DegiskenAdi
..... (İfade/Statement)
End Class

<%
Class ClassAdi
Public Deneme
Public Sub Yazdir
Response.Write Deneme
End Sub
End Class

Set Demo = New ClassAdi
Demo.Deneme = "MaxiASP"
Set Demo = Nothing
%>

Bu kodun çıktısı "MaxiASP" olacaktır

2. Private
Private olarak tanımladığımız değişkeni, sadece açılan class içinde kullanabiliriz.

Syntax :
Class ClassAdi
Private DegiskenAdi
..... (İfade/Statement)
End Class

<%
Class ClassAdi
Private RS
Public Sub RecordSet
Set RS = Server.CreateObject("ADODB.RecordSet")
End Sub
End Class

Set Demo = New ClassAdi
Demo.RecordSet
Set Demo = Nothing
%>

Bu kod ile "RS" isminde bir recordset yaratmış oluruz.


3. Const
Const ile sabit(değişmeyen) değişkenler tanımlayabilirsiniz.

Syntax :
Const DegiskenAdi = Alınacak Değer

<%
Const adInteger = 3
Class ClassAdi
Private RS
Public Sub RecordSet
Set RS = Server.CreateObject("ADODB.RecordSet")
RS.Fields.Append "Size", adInteger
RS.open
End Sub
End Class

Set Demo = New ClassAdi
Demo.RecordSet
Set Demo = Nothing
%>

Bu kod ile "RS" isminde bir recordset yarattik ve "adInteger" değerini "3" olarak tanımladık.

4 / 5. Class_Initialize & Class_Terminate
Class_Initialize ile class çalıştırıldığı anda, çalıştırılmasını istediğiniz kodları yazabilirsiniz. Class_Terminate ise class sonlandırıldığı anda (Nothing) çalıştırılmasını istediğiniz kodları yazabilirsiniz.

Syntax :
Class ClassAdi
Private Sub Class_Initialize
.....
End Sub

Private Sub Class_Terminate
.....
End Sub
End Class

<%
Class ClassAdi
Private RS
Private Sub Class_Initialize
Set RS = Server.CreateObject("ADODB.RecordSet")
End Sub
Private Sub Class_Terminate
If IsObject(RS) Then RS.Close : Set RS = Nothing
End Sub
End Class

Set Demo = New ClassAdi
Set Demo = Nothing
%>

Yukarıda yaptığımız işlemde class açıldığında "RS" isimli bir recordset oluşturduk. Class'ımızı sonlandırdığımızda bu oluşturduğumuz "RS" isimli recordsetimizi kullanılmaz hale getirdik.

6. Property Get
Bu ifade ile çağırılan programa değerleri gönderebilir ve alabiliriz.

Syntax:
Public | Private Property Get isim(value)
....
Exit Property
....
End Property

<%
Class ClassAdi
Public Property Get Link(strurl,strtitle)
Link = "<a href='"& strurl &"'>"& strtitle &"</a>"
End Property
End Class

'veya

Class ClassAdi
Public strurl
Public strtitle

Public Property Get Link
Link = "<a href='"& strurl &"'>"& strtitle &"</a>"
End Property
End Class

Set Demo = New ClassAdi
'Demo.strurl = "http://www.maxiasp.com"
'Demo.strtitle = "MaxiASP - ASP Eğitim Merkezi"
'Response.Write Demo.Link
'veya
Response.Write Demo.Link("http://www.maxiasp.com","MaxiASP - ASP Eğitim Merkezi")
Set Demo = Nothing
%>
...
__________________
pReNsEs isimli üyemiz çevrimdışıdır. (Offline)  
Digg this Post!Add Post to del.icio.usStumble this Post!Reddit!Google Bookmark this Post!Live Bookmark this Post!Propeller this post!
Alıntı ile Cevapla

Sponsor Linkler
Alt 31-05-2007, 20:49   #2 (permalink)
KooooLpa
 
pReNsEs - ait Kullanıcı Resmi (Avatar)
 
Üyelik tarihi: Dec 2006
Mesajlar: 2,639
Tecrübe Puanı: 8 pReNsEs is on a distinguished road
Standart


7. Property Let
Bu ifade, çağırılan program tarafından verilen değeri kabul eder.

Syntax:
Public | Private Property Let isim(value)
....
Exit Property
....
End Property

<%
Class ClassAdi
Private Msg

Public Property Get Kontrol
Kontrol = Msg
End Property

Public Property Let Kontrol(Item)
If IsNumeric(Item) Then
Msg = "Girilen Değer Sayı"
Else
Msg = "Girilen Değer Sayı Değil"
End If
End Property

Public Sub Yazdir
Response.Write Kontrol
End Sub
End Class

Set Demo = New ClassAdi
Demo.Kontrol = 5
Demo.Yazdir
Set Demo = Nothing
%>

8. Property Set
Set parametresi ise Get parametresinin özel halidir.

Syntax:
Public | Private Property Set isim(value)
....
Exit Property
....
End Property

<%
Class ClassAdi
Private Name
Public Property Set pName(Data)
Set Name = Data
End Property

Public Property Get pName
Set pName = Name
End Property
End Class

Set Deneme = New ClassAdi
Set Deneme.pName = Server.CreateObject("ADODB.RecordSet")
Set RS = Deneme.pName
Set Deneme = Nothing

Cons adVarChar = 200
RS.Fields.Append "Name", adVarChar, 50
RS.open
If RS.EOF Then
Response.Write "Yok"
End If
%>

Bu örneğimizde Private olarak tanımladığımız Name değişkenine, dışardan erişimi kısıtlıyoruz. Daha sonra Data olarak tanımladığımız değişkeni, Set olarak Name değişkenine yazdırıyoruz. Sonra Get ile tanımlanan pName ifadesini dışardan okumaya izin veriyoruz. Ayrıca Set olarak tanımlanan ifadeler, sadece objeler'le kısıtlı değildir. Objeler dışındada değerler alabilirler.

9 / 10. Function & Sub
Class yazarken, içlerinde fonksiyon ve sub yordamlarını da kullanmamız mümkün.

Syntax :
Public | Private Function isim(ByRef | ByVal value)
.....
Exit Function
.....
End Function

Syntax :
Public | Private Sub isim(ByRef | ByVal value)
.....
Exit Sub
.....
End Sub

Örnek kod'a geçmeden önce ByVal ve ByRef ne işe yararmış, bir inceleyelim.
ByVal bir değişkenin aldığı değeri aktarır. Mesela bir fonksiyonda bir değişkenin değerini ByVal olarak fonksiyona gönderip, fonksiyon içinde o değişkenin değerini değiştirirsek, fonksiyon dışında tanımladığımız değişkenin değeri değişmez. Fakat ByRef bu işin tam tersini yapar. Mesela fonksiyon dışında tanımlanmış bir değişkeni ByRef olarak fonksiyon içine gönderip değerini değiştirirsek, bu sefer dışarda tanımlamış olduğumuz değişkenin değerini değiştirmiş oluruz.
Not : Class içinde Fonksiyon veya Sub yordamlarını tanımlarken içlerine alınacak değerleri ByVal ya da ByRef olarak gönderme zorunluluğumuz yoktur.

<%
Class ClassAdi

Private Sub Yazdir(Msg)
Response.Write Msg
End Sub

Public Function Control(Item)
If IsNumeric(Item) Then
Yazdir "Girilen Değer Sayi"
Else
Yazdir "Girilen Değer Sayi Değil"
End If
End Function
End Class

Set Demo = New ClassAdi
Demo.Control("MaxiASP")
Set Demo = Nothing
%>

Yukarıda basit bir örnek yaptık. Dikkat ederseniz Sub yordamımızı Private Fonksiyonumuzu ise Public olarak tanımladık. Bu örneğimizi çalıştırdığınızda ekrana "Girilen Değer Sayı Değil" yazacaktır.

Class'lar hakkında anlatacaklarım bunlardan ibaret. Bir daha ki yazı dizimizde beraber bir class yazacağız. Daha sonra bu yazdığımız class ile hayal gücümüzü kullanarak neler yapabileceğimizi göreceğiz.
...

Hatırlarsanız geçen yazı dizimizde, Class kullanımını, nasıl yazılabileceğini ve ne gibi yararları olduğunu konu edinmiştik. Şimdi ise beraber bir class yazarak kullanımını göstereceğim..
Bu class'ımızda veritabanı bağlantısını, recordset oluşturma, tablolara bağlanma ve tablolardan bilgi çekmeyi öğreneceğiz. Belki class biraz basit olacak ama ileride kullandıkça yararlarını fazlasıyla göreceksiniz.

clsConnection.asp
<script language="VBScript" runat="Server">
'************************
'* Conntection Object *
'* Coded by PsyChaos *
'* A.K.A Semih Turna *
'* 22.04.2004 09:30 *
'* ***@maxiasp.com *
'************************

Class clsTFConnection
Public vtType, vtPath
Public SQLServerName, SQLUserID, SQLPwd, SQLDBName
Private objConn, objName

Private Sub Class_Initialize
Set objConn = Server.CreateObject("ADODB.Connection")
End Sub

Private Sub Class_Terminate
If IsObject(objConn) Then objConn.Close : Set objConn = Nothing
End Sub

Public Function openDB
If Not IsNumeric(vtType) Then
ErrMsg "Veritabanı Türü Sayı Olmalıdır!" : Response.End
Else
Select Case vtType
Case 1
If vtPath = "" OR IsNull(vtPath) OR IsEmpty(vtPath) Then
ErrMsg "Lütfen Veritabanı Yolunu Girin!" : Response.End
Else
objConn.open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.Mappath(vtPath)
End If
Case 2
If SQLServerName = "" OR IsNull(SQLServerName) OR IsEmpty(SQLServerName) Then
ErrMsg "Lütfen SQL Server Adını Giriniz!" : Response.End
ElseIf SQLUserID = "" OR IsNull(SQLUserID) OR IsEmpty(SQLUserID) Then
ErrMsg "Lütfen SQL Server Kullanıcı Adınızı Giriniz!" : Response.End
ElseIf SQLPwd = "" OR IsNull(SQLPwd) OR IsEmpty(SQLPwd) Then
ErrMsg "Lütfen SQL Server Parolanızı Giriniz!" : Response.End
ElseIf SQLDBName = "" OR IsNull(SQLDBName) OR IsEmpty(SQLDBName) Then
ErrMsg "Lütfen Veritabanı Adını Giriniz" : Response.End
Else
objConn.open "Driver={SQL Server}; Server="& SQLServerName &"; Uid="& SQLUserID &"; Pwd="& SQLPwd &"; Database="& SQLDBName
End If
Case Else
ErrMsg "Girilen Veritabanı Türü Bulunamadı!" : Response.End
End Select
End If
End Function

Public Property Set RSName(Data)
Set objName = Data
End Property

Public Property Get RSName
Set RSName = objName
End Property

Public Function SQLCode(SQL)
RSName.open(SQL),objConn,1,3
End Function

Private Sub ErrMsg(Msg)
Response.Write "<font face='verdana'><font size='3' color='#ff0000'><b>Hata :</b></font>"&_
"<br><font size='2'>• "& Msg &"</font></font>"
End Sub
End Class
</script>

dene.asp
<%
Set tfConn = New clsTFConnection
tfConn.vtType = 1
tfConn.vtPath = "../db/t8f7.mdb"
tfConn.openDB

Set tfConn.RSName = Server.CreateObject("ADODB.RecordSet")
Set RS = tfConn.RSName
tfConn.SQLCode("Select * From tblKategori")

If RS.EOF Then
Response.Write "Yok"
Else
Do Until RS.EOF
Response.Write "<b>"& RS("Sira") &".</b> "& RS("KategoriAdi") &"<br>"& vbCrlf
RS.MoveNext
Loop
End If

RS.Close : Set RS = Nothing
Set tfConn = Nothing
%>


Şimdi clsConnection.asp sayfasını inceleyelim.
vtType, vtPath, SQLServerName, SQLUserID, SQLPwd, SQLDBName gibi değişkenlerimizi Public olarak tanımladık. Çünkü bu gibi değişkenlere dışarıdan müdehale etmemiz olası bir durum. Fakat objConn ve objName isimli değişkenlerimize dışarıdan müdehale edilmesini istemiyoruz. Çünkü bunlar, yazdığımız class içinde oluşmasını istediğimiz nesneler. Class_Initialize methodumuz ile (yani class çalıştırıldığında) objConn nesnemizi yaratıyoruz ve Class_Terminate methodu ile (yani class sonlandığında) bu yarattığımız objConn isimli nesnemizi sonlandırıyoruz.

OpenDB fonksiyonu ile veritabanının türüne bakıyoruz. Gerekli kontroller yapıldıktan sonra veritabanı seçimimize göre veritabanımızı kullanılır hale getiriyoruz.
Set RSName ile Class içinde recordsetimizi tanımlıyoruz. Fakat bu tanımladığımız recordset'e dışarıdan ulaşmak için Get RSName ile gerekli işlemler yapılıyor ve okunmasını sağlıyoruz.
SQLCode fonksiyonu ise, yazmış olduğumuz SQL kodlarımızı çalıştırmaya yarıyor.
ErrMsg fonksiyonunu herhalde açıklamaya gerek yok.. Ne yaptığı belli bir fonksiyon.

dene.asp sayfasına gelelim.
tfConn isminde, yazdığımız class'ı tanımlıyoruz.Daha sonra Veritabanı türümüzü 1 olarak veriyoruz. Buradan da anlaşıldığı gibi Access veritabanı kullanacağız. Access veritabanı kullandığımız için vtPath ile veritabanı yolumuzu giriyoruz. Daha sonra RSName property'sine ne yapması gerektiğini söylüyoruz. (Biz recordset oluşturmasını istedik.) Ve bir altındaki işlemde ise oluşturduğumuz recordset 'i class dışında kullanılabilir hale getirdik.. SQLCode fonksiyonunu kullanarakta, gerekli SQL tanımlamalarımızı yaptık. Bundan sonrası zaten normal olarak kullanılan kodlar.
Eğer MS SQL veritabanı kullanmış olsaydık bu sefer vtType değerini 2 yapacaktık, ayrıca vtPath yerine SQLServerName, SQLUserID, SQLPwd ve SQLDBName gibi tanımlamaları yapacaktık.

Not : Class tanımlamaları yapıldıktan sonta mutlaka yapılan tanımlamayı sonlandırınız.

Görüldüğü üzere class yazmak bu kadar basit. Bu class ileride çok işinize yarayacak.Bundan emin olabilirsiniz
__________________
pReNsEs isimli üyemiz çevrimdışıdır. (Offline)  
Digg this Post!Add Post to del.icio.usStumble this Post!Reddit!Google Bookmark this Post!Live Bookmark this Post!Propeller this post!
Alıntı ile Cevapla
Cevapla


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)

 
Seçenekler
Stil

Yetkileriniz
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML KodlarıKapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık


Benzer Konular

Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Class V1 + 2.0 beta SMF Tema Download Alvertis Web Sistemleri 0 06-10-2008 02:48
Karanlık Oda Kullanımı Alvertis Fotoğrafçılık 0 26-09-2008 13:25
For Kullanımı pReNsEs C# 0 25-07-2007 18:01
Ati Tools Kullanımı lifeandeath Donanım 0 01-06-2007 23:03
Class yapısı ile matris çarpımı pReNsEs C / C++ 0 01-06-2007 17:40


Bütün Zaman Ayarları WEZ +3 olarak düzenlenmiştir. Şu Anki Saat: 06:17 .


Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

Gizlilik Politikası | KooLpa üyeleri onay gerektirmeksizin mesaj yazabilmektedir. KooLpa' da yasalara aykırı unsurlar bulursanız buraya yazınız. En kısa zamanda gereği yapılacaktır.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208