السلام عليكم ورحمة الله وبركاته .
برجاء من يعرف معني oop أن يشرحه لنا وجزاه الله خيراً.
أخوكم : طارق
السلام عليكم ورحمة الله وبركاته .
برجاء من يعرف معني oop أن يشرحه لنا وجزاه الله خيراً.
أخوكم : طارق
كتبت هذه المقالة في لموقع vb4arab ، وهي تجيب عن سؤالك
وقد كتبتها منذ فترة ، أول ظهور الـ .NET ، وفيها موجز عن بعض الأشياء
الأساسية في الفيجوال دوت نيت ، بخصوص غرضية التوجه ؟
من أين نبدأ مع فيجوال بيسك دوت نيت
.NET حاولت المقاربة من اللغات العالمية الغرضية التوجه OOP وهي بالتالي قد غير ت النهج المتبع في التعامل مع VB التي كانت تعتمد على خلط الأوراق من لغة بنيوية مقادة بالأحداث Events مع قليل من مبدأ الغرضية التوجه الغير ناضجة ، ولكن هذه القفزة النوعية قد قلبت ظهر المجن لمعظم مبرمجي VB الذين يبنون البرامج بدون خطة مبنية على التفاهم مع سلوك اللغة ، أي أريد ان أقول إن اللغة الجديدة ذات سلوك صارم يجب أحترامه من أجل التعامل معها بشكل جيد ومحترم ، لذلك كان لابد من تعلم طرق التأقلم مع سلوك وأخلاق لغتنا الجديدة !
وإليك التالي :
ما هو الفرق بين VB.6 و VB.NET ؟
من المؤكد إنك عندما تجد الجواب سوف تكون مسرورا بشكل كبير !
إن أول الفروق الواضحة إن VB.NET لغة برمجة غرضية التوجه بشكل صرف أي أنها أصبحت OOP
(Object Oriented Programming) ، أي تلك كافة خصائص لغات غرضية التوجه مثل الفئات(Classes)
والتحقيق (Implementation) والأهم قضية الوراثة (Inheritance) ...
سوف نستعرض من خلال الآتي شرح موجز لهذه القضايا الجديدة :
(لاحظ أنني حذفت عبارة Public من بداية تحقيق الفئة Class لإنك على الأغلب لا تحتاج للعمل إلا ضمن نفس الموديل Module) .
الفئات Class :
الفئة هي عبارة عن مجموعة من الخصائص Properties و الوظائف Methods في قطعة واحدة من الكود البرمجي Code نستطيع استخدامها في أوقات متعددة ، الفئة نفسها ليست غرض Object ولكن الأغراض يمكن أن تنشئ من الفئات .
الكود التالي يوضح فئة بسيطة simple class :
Class SimpleClass
Public Sub SimpleMethod()
System.Console.Write("Simple Class")
End Sub
End Class
الكود السابق يظهر الفئة SimpleClass (لاحظ أن هذه الفئة لا تستخدم حتى نصنع منها مثيلاً instance) .
الكود التالي يوضح كيفية استخدم الفئة السابقة :
Class Prog1 Public Shared Sub Main() Dim obj As New SimpleClass() obj.SimpleMethod() End Sub End Class
أي برنامج في VB.NET يجب على الأقل أن تملك فئة واحدة على الأقل (أو موديل module) بالطريقة Main التي يبدأ البرنامج من عندها العمل .
هذا الإجراء sub يجب أن يكون Shared (نوضح ذلك لاحقاً) .
في المثال الأعلى الفئة البرمجية Prog1 تملك الإجراء Main ومثيل instance من الفئة SimpleClass التي تستخدم عبارة Dim ، هذه العبارة التي تستدعي الأغراض والمتحولات Variables .
عبارة New تصنع مثيل جديد وتعطي المساحة الكافية من الذاكرة .
تذكر أنك في حالة عدم استخام عبارة New فإنك من الناحية العملية تعطي مرجعا فقط للفئة ، ولن تستطيع استخدامها مرة أخرى حتى تستخدم العبارة New .
أعضاء الفئة Class members :
أعضاء الفئة يمكن ان تكون عامة أو خاصة أو محمية Public , Private or Protected
الأعضاء العامة تكون مرئية من الفئات المشتقة من الفئة التي تحويها ، ومن الفئة نفسها التي تحوي هذه الأعضاء .
الأعضاء الخاصة تكون مرئية فقط من الفئة نفسها أيضاً .
نوع العضو/ من يستطيع الصول إليه| الفئة نفسها| الفئات المشتقة| الأغراض المشتقة من الفئة
Public YES YES YES
Protected YES YES NO
Private YES NO NO
الأعضاء المحمية تستخدم في نفس الفئة وفي الفئات التي ترث فئتها .
في المثال التالي نظهر كيفية استخدام أنواع مختلفة من الأعضاء :
Class SimpleClass2 Private MemberVar1 As Long Protected MemberVal2 As Long Public MemberVal3 As Long End Class Class Prog2 Public Shared Sub Main() Dim obj As New SimpleClass2() 'obj.MemberVal1 = 1 'wrong because it's a private member 'خطأ لإنه عضو خاص 'obj.MemberVal2 = 2 'wrong because it's a protected member 'خطأ لإنه عضو محمي obj.MemberVal3 = 3 'correct because it's a public member 'صحيح لإنه عضو عام End Sub End Class
المشيدات Constructors :
في بعض الأوقات تحتاج لإعطاء الأعضاء في بعض الفئات قيم ابتدائية تمهيدية initialization value
عندما تنشئ الغرض ، هذا يكون باستخدام New كإجراء sub .
الكود التالي يوضح كيفية الإستخدام :
Class SimpleClass3 Public Var As Long Public Sub New() Var = 10 'Initialization value 'القيمة التمهيدية End Sub End Class Class Prog4 Public Shared Sub Main() Dim obj As New SimpleClass3() System.Console.Write(obj.Var) End Sub End Class
عندما ينشئ الغرض object ، قيمة المتحول Var يهيئ بالقيمة 10 .
ويمكنك أيضا ً إرسال بارامترات للمشيد كالتالي :
Class SimpleClass4 Public Var As Long Public Sub New(ByVal InitValue As Long) Var = InitValue 'Initialization value 'القيمة التمهيدية End Sub End Class Class Prog5 Public Shared Sub Main() Dim obj As New SimpleClass4(1000)'The initialization value is 1000 'القيمة التمهيدية تكون 10 System.Console.Write(obj.Var) End Sub End Class
الطرق المشاركة Shared methods :
في بعض الأحيان تريد كتابة فئة تملك بعض الطرق الغير مرتبطة مع غرض معين مثل الفئات التي تملك طرق رياضية Math methods .
وهكذا إذا اردت استخدام الطرق بدون إنشاء غرض اولاً ، في هذه الحالة تستدعي مع استخدام عبارة Shared
في المثال التالي نوضح كيفية ذلك :
ملاحظة : الطرق المشاركة shared methods والخواص properties لا تستطيع الوصول للطرق والخواص أو المتحولات الغير مشاركة .
Class SimpleClass5 Public Shared Function Multiply(ByVal Num1 As Long, ByVal Num2 As Long) As Long Return Num1 * Num2 End Function End Class Class Prog6 Public Shared Sub Main() System.Console.Write(SimpleClass5.Multiply(10, 10)) End Sub End Class
من أين نبدأ مع VB.NET (الجزء الثاني)
تتمة للموضوع سوف نتعامل مع مفاهيم غاية في الأهمية بالنسبة لغرضية التوجه "من خلال Vb.net"
"يعز على كل من يملك مشاعر الإنسانية في هذا الزمان إلا أن يختلج قلبه تفطرا على الفلسطينين ، ولكن ما يشفع لنا المسلمين أن لدينا قلوبا تتحرق ، وعزيمة تتوقد إن شاء الله ، ولكن حسبنا الله ونعم الوكيل من حراس الأوغاد" ...
الوراثة Inheritance :
أن موضوع الوراثة هومن أهم المواضيع على الإطلاق في عالم لغات غرضية التوجه OOP ، وهي تمكنك من جعل الكود الذي تتعامل معه ذو ميزات يوفر عليك إعادة الإستخدام لمرات عديدة ، أي تملك كوداً ذا سرعة في التعامل معه ، ذلك كون الكود المكتوب لكل الفئات classes يكون مستندٍ للكود الموجود في الفئة أو الفئات الأكثر عمومية ...
فعندما تحاول على سبيل المثال كتابة فئة تحوي على شخصيات لعبة فإنك تصنع الفئة الأساسية لشخصية أساسية من شخصيات اللعبة ، ثم ترث بقية الشخصيات في اللعبة بعض خواص وطرق الشخصية الأساسية ، طبعا مع إضافة الملامح الأخرى لكل شخصية (ميزات خاصة) ، لا أريد الإطالة فهنا ما هو مطلب للتعامل مع كود بسيط يشرح الفكرة بشكل معمق (ومن خلال المثال تعلم عبارات VB.NET بخصوص موضوع الوراثة) :
Namespace sample6
Class A
' parent class
Public Sub A()
System.Console.Write("A")
End Sub
End Class
Class B
' fist child class
Inherits A
' this line tells VB that this class inherits A
'واضحة عبارة التوريث الجديدة في VB.NET
Public Sub B()
System.Console.Write("B")
End Sub
End Class
Class C
'second child class
Inherits B
' this line tells VB that this class inherits A
Public Sub C()
System.Console.Write("C")
End Sub
End Class
Class Prog7
Public Shared Sub Main()
Dim objC As New C()
' always remember to use parentheses when using the New statement
'لاتنسى وضع الأقواس المتوسطة عندما تستخدم عبارة new
objC.A()
'because C inherits B and B inherits A so it has A() too
objC.B()
'inherits B() directly from B
objC.C()
'classes own sub
End Sub
End Class
End Namespace
الفئات المجردة Abstract classes(MustInherit) :
بعض الفئات لا تكون قابلة للاستخدام كأغراض Object بل هي بحاجة إلى فئة ثانية من أجل التعامل معها ، أي هي فقط لتُورث من قبل فئة ثانية ...
Namespace sample7
MustInherit Class A ' parent class
Public Sub A()
System.Console.Write("A")
End Sub
End Class
Class B ' fist child class
Inherits A ' this line tells VB that this class inherits A
Public Sub B()
System.Console.Write("B")
End Sub
End Class
Class Prog8
Public Shared Sub Main()
'Dim objA as New A()
'this is wrong because you can 'not create an instance from a mustinherit class
'هذه العبارة خاطئة لإنك لا تستطيع إنشاء مثيل من فئة مجردة
Dim objB As New B()
' always remember to use parentheses 'when using the New statement
objB.A()
objB.B()
End Sub
End Class
End Namespace
التخطي(التجاوز) Overriding
في بعض الحالات عندما تكتب فئة ترث فئة أخرى تريد تجاوز بعض أعمال الإجراءات والوظائف في الفئة الأساسية إليك الطريق المناسبة وهو التجاوز :
Namespace sample8
Class A ' parent class
Public Overridable Sub A()
System.Console.Write("A.A")
End Sub
End Class
Class B ' fist child class
Inherits A ' this line tells VB that this class inherits A
Public Overrides Sub A()
System.Console.Write("B.A")
End Sub
End Class
Class Prog9
Public Shared Sub Main()
Dim objB As New B()
objB.A() ' the output will be "B.A" not "A.A"
'الخرج سوف يكون
'B.A
'وليس
'A.A
End Sub
End Class
End Namespace
الموضوع متشعب وقد حاولت أن أقدم بعض المفاهيم التي يجب علينا فهمها قبل الدخول في متاهة اللغة ...
وأرجو من الله للجميع الفائدة .
هناك قريبا بعض المفاهيم ذات الأهمية ، أرجو من التمكن من عرضها عليكم بأقرب فرصة
تم تعديل هذه المشاركة بواسطة walcom في 2 ديسمبر 2004 في 12:24
جزاك الله خير يا أخي نجم.
للرفع
Technical Lead Developer
اللهم قنى شر الجهل و الجهلاء
( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}
هذا الموضوع مغلق.