ما كتبته من قبل:
يعرف كل من يكتب البرامج أنه عندما تقوم بتطوير الوظائف التي تريد تنفيذها تدريجيًا، في معظم الأحيان، سيتم نسيان ما كتبته في اليوم الأول في اليوم التالي، ويجب عليك كتابة ملاحظات مفصلة حول تطوير البرنامج. وينطبق هذا بشكل خاص على تطوير نظام ASP عندما تكون الملفات والوظائف معقدة. عندما نخطط لتعديل بعض وظائف موقع الويب، نشعر أنه ليس لدينا أي فكرة من أين نبدأ أو ما نشعر أنه يحتاج إلى تعديل. في هذا الوقت، إذا كنت قد تعلمت أي لغة برمجة موجهة للكائنات، فمن الطبيعي أن تفكر في كيفية تنفيذ وظيفة التعليمات البرمجية في الوحدات النمطية. ASP ليس برمجة موجهة للكائنات بطبيعتها، ولكن VBSCRPIT6.0 يوفر فئات يمكننا استخدامها تحقيق تغليف التعليمات البرمجية وتنفيذ لغة الوحدة.
بادئ ذي بدء، أريد أن أكتب بعض المفاهيم الرسمية للغاية هنا، والتي تهدف إلى توضيح أن الكائن الموجه هو نموذج ملموس وجوهري للغاية، ولا يمكن أن يخاف بعض الناس عندما يرون الكائن.
الكائن هو شيء يمكن رؤيته، أو الشعور به، أو سماعه، أو لمسه، أو تذوقه، أو شمه. ونحن هنا نعرّفه بهذه الطريقة: الكائن هو كيان قائم بذاته يتم تحديده من خلال مجموعة من الخصائص والسلوكيات التي يمكن تحديدها.
في البرمجة كائنية التوجه (oop)، يتم استخدام المصطلحين التاليين.
الفئة: هذا هو قالب الكائن ويحدد خصائص الكائن.
المثيل: هذا كائن حقيقي، شيء يمكنك التفاعل معه.
الخصائص والأساليب والأحداث
في OOP، تصف المصطلحات التالية خصائص الكائنات:
السمة: هذا تصنيف يصف سمات الكائن.
الطريقة: هذا فعل يصف ما يمكن للكائن أن يفعله، أو ما يتوقع منه أن يفعله.
الحدث: يصف العملية التي يقوم بها كائن استجابةً لإجراء ما.
تعتبر الكائنات جزءًا من البرمجة الشيئية والتصميم الشيئي عند البرمجة، حيث يعتقد الكثير من الناس أن هذا موضوع معقد، ولكنه في الواقع بسيط جدًا ويمكن شرحه بأربعة مصطلحات بسيطة. التجريد والتغليف وتعدد الأشكال والميراث.
التجريد: هذه طريقة لإخفاء التعقيد، والعمل الداخلي للفصل، لذلك لا يتعين على المستخدم معرفة كيفية عمله، تمامًا مثل ذلك. إذا كنت ترغب في مشاهدة التلفزيون، فلن تحتاج إلى معرفة كيفية عمل التلفزيون، كل ما عليك فعله هو تشغيل التلفزيون والبحث عن القنوات طريقة القطع، والتي يمكن أن تحذف المساحة الموجودة في نهاية السلسلة، لا تحتاج أيضًا إلى معرفة كيفية إنجاز هذه المهمة، ما عليك سوى معرفة أن لديها هذه الوظيفة.
التغليف: يحتوي كل كائن على جميع المعلومات اللازمة لتنفيذ العمليات. يُسمى هذا الكائن بالتغليف، لذلك لا يعتمد الكائن على كائنات أخرى لإكمال عملياته. في مصطلح TOupper()، لا تحتاج السلسلة إلى الحصول على معلومات من كائنات أخرى يتم تحويل كافة الأماكن لإكمال عملياتها إلى أحرف كبيرة.
تعدد الأشكال: يستخدم هذا المصطلح للإشارة إلى أن الكائنات المختلفة يمكنها تنفيذ نفس الإجراء، ولكن من خلال رمز التنفيذ الخاص بها، الاسم هو نفسه، ولكن رمز التنفيذ الأساسي مختلف.
الميراث: يحدد كيفية ارتباط الفئات ببعضها البعض ومشاركة الخصائص. تتمثل طريقة عمل الميراث في تحديد الفئات والفئات الفرعية، حيث ترث الفئة الفرعية جميع خصائص الفئة الأصلية. تكمن أهمية الميراث في أنها تفرض فئات ذات أنواع مماثلة تتمتع بالاتساق وتسمح بمشاركة التعليمات البرمجية دون الحاجة إلى تحديد جميع خصائص الفئة الأصلية إذا قرر المرء إنشاء فئة جديدة.
استخدم الفئات في ASP لتحقيق النمطية
اسمحوا لي أن أشرح ذلك من خلال تقديم بعض الأمثلة البسيطة، لاحظ أن ما تم التأكيد عليه هنا هو فكرة إذا كان بإمكانك استخدام فئة (فئة أساسية) للتوسع عند تطوير موقع ويب ASP، فهذا ضروري جدًا (وأيضًا صعب جدًا).
لنختار مثالًا بسيطًا أولاً:
نريد عرض معلومات مستخدمي المنتدى الكلاسيكي. بعد إدخال معرف المستخدم، يمكن عرض بعض معلومات المستخدم. يمكنك التفكير في الأمر بهذه الطريقة المعرف والجنس، النقاط، الأذونات، طريقة التنفيذ هي عرض هذه المعلومات، طيب اكتب هكذا:
فكرة زرقاء الطبقة
اسم خاص، bpoint، bsex، blevel
'...................................
نهاية الطبقة
نعلن هنا أولاً عن فئة تسمى blueidea، متبوعة ببعض المتغيرات الخاصة لتخزين خصائص فئة blueidea، ولا يمكن الوصول إليها من خارج الكود. ولتحديد هذه المتغيرات، استخدم بيان الخاصية للحصول على القيمة تدفع بشكل غير مباشر للمتغيرات الخاصة
'------------------------------------------------ - ---------------
الحصول على الملكية getname
getname=bname
نهاية الملكية
دع الخاصية getname(nameid)
bname=nameid
إذا nameid= ثم
bname=لا يوجد مستخدم مسجل
نهاية إذا
نهاية الملكية
'------------------------------------------------ - -----------------
احصل على الملكية
getex=bsex
نهاية الملكية
خاصية Let getsex(sex)
bsex = Killint (الجنس، 0،0)
إذا كان bsex=0 إذن
bsex=ذكر
آخر
bsex=أنثى
انتهي إذا
نهاية الملكية
'------------------------------------------------ - -----------------
الملكية احصل على نقطة الحصول
getpoint=bpoint
نهاية الملكية
خاصية Let getpoint(point)
ببوينت = كيلينت (نقطة،0،0)
نهاية الملكية
'------------------------------------------------ - -----------------
توجد وظيفة Killint هنا لتحديد صحة البيانات. النموذج الأولي الخاص بها هو:
وظيفة خاصة Killint(i,killstr,killsub)
إذا لم يكن IsNumeric(i) إذن
i=killstr
ElseIf i<=0 ثم
i=killsub
انتهي إذا
Killint=Int(يسار(i,5))
وظيفة النهاية
وظيفة هذه الوظيفة واضحة جدًا ولم تعد معقدة.
وبما أننا بحاجة إلى الحكم على مستوى المستخدم من خلال النقاط، فقد تم تعريف وظيفة خاصة هنا:
الحصول على وظيفة خاصة ()
ببوينت = كيلينت (ببوينت،0،0)
إذا bpoint <500 ثم
blevel=عضو مبتدئ
ElseIf bpoint>=500 وbpoint<=100 إذن
blevel=عضو مميز
آخر
blevel=العضو النهائي
نهاية إذا
Getlevel=blevel
وظيفة النهاية
إذا أردنا إرسال معلومات المستخدم مرة أخرى، فيجب علينا تحديد وظيفة عامة لعرض المعلومات:
عرض الوظيفة العامة ()
Response.write(<h5>يظهر ما يلي معلومات <font color=red>&bname&</font>:</h5>)
Response.write(<h5>الجنس:<font color=red>&bsex&</font></h5>)
Response.write(<h5>النقاط:<font color=red>&bpoint&</font></h5>)
com.getlevel
Response.write(<h5>المستوى:<font color=red>&blevel&</font></h5>)
وظيفة النهاية
إنهاء الفصل
عند استخدام هذا الفصل، استخدمه على النحو التالي: (لقد كتبت معالجة النموذج هنا)
اضبط blueideauser=new blueidea
blueideauser.getname=Trim(request(id))
blueideauser.getsex=طلب(الجنس)
blueideauser.getpoint=طلب(نقطة)
blueideauser.showuser
إذا كنت تريد رؤية التأثير، فقم بإلقاء نظرة هنا: http://www.5do8.com/net/aspclass/class.asp
الفئة التي تتحكم في قراءة معلومات قاعدة البيانات:
كود المصدر المرجعي
'الاسم: ado_5do8
'الوظيفة: قراءة العمليات المختلفة لقاعدة البيانات
'قرية المصدر المزروعة http://www.5do8.com http://www.Blueidea.com-5do8
"الخلق: 5do8."
"الاتصال: [email protected]
'تحديث: 13 نوفمبر 2005
'الترخيص: تتجاوز نقاط موقع Blue Ideal 3000 نقطة، جميع المستخدمين المسجلين في قرية Gengyun
'واجهة الفئة: ado_5do8.ConnectString=المسار المطلق لقاعدة البيانات
'ado_5do8.rs_top عدد المكالمات، اسم الجدول
فئة ado_5do8
اتصال خاص، sqlstr، rs، iid، itable، جلسة
'sqlstr: عنوان قاعدة البيانات، المسار المطلق، الخاص
'conn: فتح اتصال قاعدة البيانات، خاص
'------------------------------------------------ - -----------------
rem يزيل بعض الأرقام غير المرغوب فيها
القمامة ذات الوظيفة الخاصة_في(r1,r2)
إذا كان IsNumeric(r1) وIsNumeric(r2) إذن
ديم ديمرر
إذا r1>r2 ثم
ديمر = r2
آخر
ديمر = r1
نهاية إذا
آخر
ديمر=0
انتهي إذا
liter_in=dimrr
وظيفة النهاية
'------------------------------------------------ - ---------------
وظيفة خاصة Killint(i,killstr,killsub)
إذا لم يكن IsNumeric(i) إذن
i=killstr
ElseIf i<=0 ثم
i=killsub
انتهي إذا
Killint=Int(يسار(i,5))
وظيفة النهاية
'------------------------------------------------ - ---------
startconn الفرعية الخاصة ()
على خطأ استئناف التالي
تعيين conn=server.CreateObject(adodb.connection)
strconn=Provider=Microsoft.Jet.OLEDB.4.0;مصدر البيانات= & Server.MapPath(sqlstr)
conn.open strconn
إذا أخطأت ثم
خطأ. واضح
SetConn=لا شيء
الفوضى=حدث خطأ ولا يمكن الاتصال بقاعدة البيانات
استجابة. الكتابة (الفوضى)
استجابة.النهاية
آخر
mess=تم الاتصال بقاعدة البيانات بنجاح.......<br/>
استجابة. الكتابة (الفوضى)
نهاية إذا
نهاية الفرعية
'------------------------------------------------ - --------------
إغلاق فرعي خاص ()
conn. Close
تعيين كون = لا شيء
Response.write(<strong style='color:red'>إغلاق اتصال الاتصال</strong>...<hr/>)
نهاية الفرعية
'------------------------------------------------ - ---------------
الغالقات الفرعية الخاصة ()
rs. Close
تعيين RS = لا شيء
Response.write(<strong style='color:#085420'>إغلاق قاعدة البيانات RS</strong>.....<br/>)
نهاية الفرعية
'------------------------------------------------ - ---------------
الملكية الحصول على الحيازة
hasse=isession
نهاية الملكية
الملكية دعها تمتلك(جلستك)
isession=yoursession
إذا كانت جلستك = إذن
isession=nodef
نهاية إذا
نهاية الملكية
'------------------------------------------------ - ---------------
جلسة عمل الوظيفة العامة (بيانات المصفوفة)
إذا كان IsArray(arraydata) إذن
makear=arraydata
آخر
صانع = صفيف (0،0،0،0)
نهاية إذا
إذا كانت الجلسة= إذن
isession=nodef
انتهي إذا
session(isession)=makear
وظيفة النهاية
'------------------------------------------------ - ---------------
وظيفة خاصة getession ()
thisget=session(isession)
إذا لم يكن IsArray(thisget) إذن
thisget=صفيف(0,0,0,0)
نهاية إذا
Getsession=thisget
وظيفة النهاية
'------------------------------------------------ - ---------------
خاصية GetConnectString
ConnectString = sqlstr
نهاية الملكية
خاصية Let ConnectString(str)
sqlstr = str
نهاية الملكية
'------------------------------------------------ - ---------------
الحصول على الملكية
getid = iid
نهاية الملكية
اسمحوا الخاصية getid(id)
معرف = معرف
نهاية الملكية
'------------------------------------------------ - ---------------
الحصول على الملكية
gettable = itable
نهاية الملكية
خاصية السماح بالحصول عليها (الجدول)
الجدول = الجدول
نهاية الملكية
'------------------------------------------------ - ---------------
'------------------------------------------------ - -----------------
جلسة قراءة الوظيفة العامة (iStart، ipageno، irowid)
Rowid=killint(irowid,0,0)
ابدأ = Killint (istart،0،0)
pageno=killint(ipageno,5,5)
data=getsession
iRows = UBound(البيانات، 2)
iCols = UBound(بيانات، 1)
Response.write(<h5> العدد الإجمالي الذي تم الحصول عليه :)
Response.write(<b> &iRows+1&</b> الرسائل</h5><hr/><ul style='width:100%;'>)
إذا كان Rowid = 0 إذن
إذا iRows> (ipageno + iStart) ثم
iStop = ipageno + iStart - 1
آخر
iStop = iRows
نهاية إذا
بالنسبة لـ iRowLoop = البدء في iStop
Response.Write (<li style='padding:4px 0;'><a href=?k=read&rowid=&irowloop+1&>&data(1, iRowLoop) & </a><span style='padding:4px 0 4px 10px;background-color:#ccc '>أبطأ، لا يُنصح بالنقر عليه--><a href=?k=list&id=&data(0,irowloop)&>التحديث</a></span></li>)
التالي
Response.Write </ul><div style='top:20px;background-color:#ccc;color:#020;font-weight:bold;bordr-top:2px Solid #008;padding:10px 0;color: #b00'>القائمة (<a href=default.asp>العودة إلى الوضع النموذجي</a>):
إذا ابدأ> 0 ثم
Response.Write <A HREF=?k=read&Start= & iStart-ipageno &&pageno= & ipageno & >السابق</A>
نهاية إذا
إذا iStop <iRows ثم
Response.اكتب <A HREF=?k=read&Start= & iStart+ipageno &&pageno= & ipageno & >التالي</A>
endIf
استجابة.كتابة</div>
آخر
Rowid=litter_in(rowid-1,iRows)
Response.write(<div style='width:85%'><h4 style='text-align:center'><a href=?k=read&pageno=&pageno&&start=&start&>قائمة الإرجاع</a></h4></h2><hr/><h5>&server.htmlencode(data(1,rowid))&</h5><p >&server.htmlencode(data(2,rowid))&<h5>+-----&server.htmlencode(data(3,rowid))&)
استجابة.كتابة(<div>)
انتهي إذا
وظيفة النهاية
'------------------------------------------------ - ---------------
list_ids الوظيفة العامة ()
sql3=select * from &itable& حيث المعرف=&iid&
ستارتكون ()
تعيين rs=conn.execute(sql3)
إذا rs.eof وrs.bof ثم
البيانات = صفيف (0،0،0،0)
آخر
البيانات=Rs.GetRows()
نهاية إذا
الغلق
كلوسيكون
الاستجابة.الكتابة (UBound(البيانات)&:)
Response.write(server.htmlencode(data(2,0)))
وظيفة النهاية
'------------------------------------------------ - ---------------
الوظيفة العامة rs_top(num,table,whe)
ستارتكون ()
sql=select top &num& * من &table&
sql2=اختر العد(*) كـ szd_count من &table& &whe&
تعيين rs=conn.execute(sql2)
szd_count=rs(szd_count)
الغلق
تعيين rs = Conn.Execute(sql)
بيانات قاتمة
إذا روبية.Eof ثم
البيانات=لا توجد بيانات
آخر
البيانات=Rs.GetRows()
انتهي إذا
الغلق
كلوسيكون ()
جلسة إجراء المكالمات (البيانات)
وظيفة النهاية
'++++++++++++++++++++++++++++++++++++++++++++ + +++++++++
نهاية الفصل
عند الاستخدام:
عمل خافت
الإجراء = الطلب (ك)
إذا الإجراء = عرض ثم
اتصل بـ viewnew
ElseIf action=list ثم
قائمة المكالمات()
ElseIf action = اقرأ بعد ذلك
استدعاء القراءة ()
آخر
كالف()
انتهي إذا
سوبف ()
%>
<نمط النموذج=border-top:2px Solid #008;border-bottom:2px Solid #008;margin:auto;background-color:#eee;padding:20px 5px;color:#008;font-weight:bold;>
<label>إجمالي كمية المعلومات المعروضة:<اسم الإدخال=n type=text maxlength=4 size=10 />عدد الصفحات في كل صفحة:<input name=pagesize type=text maxlength=4 size=10 value=5/> <اسم الإدخال = نوع arrstart = القيمة المخفية = 0></label>
<h5 style=border-top:1px Solid #000;الحشو:5px 0> العملية:<input name=k type=submit value=view /></h5>
</form> <%End sub%>
<%عرض فرعي جديد()
f_num=killint(request(n),1,1)
حجم الصفحات=killint(طلب(pageno),5,5)
arrstart=killint(request(start),0,0)
Rowid=killint(request(rowid),0,0)
تعيين cs=new ado_5do8
cs.ConnectString=data/a.mdb
cs.havese=shi
cs.rs_top f_num,site_szd,
cs.readarraysession arrstart,pagesize,rowid
نهاية الفرعية
القائمة الفرعية ()
Response.write(<h5><a href=default.asp>العودة إلى الوضع الافتراضي</a></h5>)
يتم عرض معلومات محددة أدناه Response.write:<hr/>
معرف = طلب (معرف)
معرف = Killint (معرف، 1،1)
تعيين listid=new ado_5do8
listid.ConnectString=data/a.mdb
listid.getid=id
listid.gettable=site_szd
listid.list_ids()
نهاية الفرعية
القراءة الفرعية ()
Response.write<div style='background-color:#ccc;padding:20px 0;color:080;font-weight:bold;border-bottom:2px Solid #008'>اكتمل تحليل الصفحة للتحديث، من فضلك حدد <a href=default.asp>الرجوع إلى الوضع النموذجي</a>المعلمات: البدء، عنصر البداية؛ عدد العناصر في كل صفحة</div>
حجم الصفحات=killint(طلب(pageno),5,5)
arrstart=killint(request(start),0,0)
Rowid=killint(request(rowid),0,0)
تعيين cs=new ado_5do8
cs.havese=shi
cs.readarraysession arrstart,pagesize,rowid
نهاية الفرعية
دالة Killint(i,killstr,killsub)
إذا لم يكن IsNumeric(i) إذن
i=killstr
ElseIf i<=0 ثم
i=killsub
انتهي إذا
Killint=Int(يسار(i,5))
وظيفة النهاية
%>