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 ...
|
|||||||
| Üye ol | Bloglar | Yardım | Üye Listesi | Ajanda | Forumları Okundu Kabul Et |
|
|
#1 (permalink) |
|
KooooLpa
![]() Üyelik tarihi: Dec 2006
Mesajlar: 2,639
Tecrübe Puanı: 8
![]() |
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 %> ...
__________________
![]() |
|
|
|
| Sponsor Linkler | |
|
|
|
|
|
#2 (permalink) |
|
KooooLpa
![]() Üyelik tarihi: Dec 2006
Mesajlar: 2,639
Tecrübe Puanı: 8
![]() |
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
__________________
![]() |
|
|
|
![]() |
Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir) |
|
| Seçenekler | |
| Stil | |
|
|
|
||||
| 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 |
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.