الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

معني OOP

مغلق
بدأه tarekahmed في 9 مارس 2003 · 3 رد · 2,389 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته .

برجاء من يعرف معني oop أن يشرحه لنا وجزاه الله خيراً.

أخوكم : طارق

#2

كتبت هذه المقالة في لموقع 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

#3

جزاك الله خير يا أخي نجم.

#4

للرفع

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

هذا الموضوع مغلق.

مواضيع مشابهة