العودة   منتدى رياض الجنة - Riad Al-Ganah > الرياض التقنية > روضة الكورسات والدورات التقنية والعلمية > روضة دورات تقنية الـ .NET بلغاتها المختلفة > دورة .NET 2008 من منتدى فيجوال بيسك للعرب

دورة .NET 2008 من منتدى فيجوال بيسك للعرب مقدم الدورة : أحمد جمال ، نوع الدورة : كتابية مصحوبة بصور ، حالة الدورة : انتهت ، عدد الدروس : 80 درس . مستوى الدورة : من البداية للاحتراف .

إضافة رد

 
أدوات الموضوع انواع عرض الموضوع
  #1  
قديم 02-20-2010, 03:07 PM
الصورة الرمزية khaledbelal
khaledbelal khaledbelal غير متواجد حالياً
مبرمج المنتدى
الادارة تكليف لا تشريف
 
تاريخ التسجيل: Oct 2009
العمر: 34
المشاركات: 3,606
افتراضي الدرس التاسع عشر : ال Encapsulation دورة .net 2008

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

يهدف مبدأ ال Encapsulation والذي سبق شرحه باختصار في الدرس السابع عشر إلى اخفاء التفاصيل الداخلية لأي كلاس عن اعين باقي المبرمجين ، باختصار شديد لنفترض نظام محاسبي يتضمن نظام لادارة المخازن ، وآخر للصيانة ، وثالث من اجل المبيعات .

في هذه الحالة يدعوك مبدأ ال Encapsulation ليكون لكل واحد من هذه النظم عدد محدد من الدوال للدخول والخروج من هذا النظام والتي يمكن للنظم الثلاثة التواصل من خلالها ، فمثلاً في نظكام المبيعات تجد (اضافة عملية مبيعات) ( اضافة مشتريات ) ( خصم ) ... الخ في مجموعة محدودة جداً من الدوال .

طبعاً لو لاحظت ان عملية مثل اضافة عملية مبيعات تتطلب طابوراً من الأوامر ، يتضمن فتح قاعدة البيانات والتأكد من ان البيانات المدخلة صحيحة والتأكد من وجود الكمية ومن ثم تخزين الناتج في قاعدة البيانات ، تم تجميعها في النهاية على شكل أمر واحد يقوم زميلك الآخر الذي يقوم ببرمجة واجهات المستخدم إلى استخدامه بدلاً من الغوص في كل هذه التفاصيل الفنية .

كما لاحظت ، يفيد هذا الموضوع الأشخاص التي تعمل في مجموعات اولاً ، حيث لن اكون مضطراً لفهم كودك بالكامل ويكفيني ان اعرف كيف اتعامل معك ، كما ان الكود سيكون مصمماً على شكل هرم حيث كل أمر يستتبعه مجموعة من الأوامر ، لكن سيكون زميلك المبرمج قادراً فقط للوصول إلى رأس الهرم وهو ما يقلل كثيراً من الأخطاء ، كما يحمي متغيراتك الخاصة من العبث بها عن طريق الخطأ من المبرمجين الآخرين .

هذا المفهوم الذي تحاول ان توصله لك كل لغات برمجة OOP ، ولتطبيق هذا المفهوم هناك العديد من النقاط التي سنتطرق لها في هذا الدرس .

قبل ان نواصل درسنا هذا ، اول نقطة لا بد ان تضعها في ذهنك انك مبرمج وهناك مبرمج آخر هو المستخدم ... بمعنى مثلاً انك تقوم ببرمجة كلاس ويقوم زميلك المبرمج باستخدام هذا الكلاس كجزء من المشروع .

استخدام دوال public للوصول إلى متغيرات private .

لنفترض المثال التالي بخصوص ال Person الذي قمنا بانشاءه عدة مرات على مستوى الدروس السابقة :

C#:

كود PHP:
class Person
{
public 
int Age;

VB.net:
كود PHP:
Class Person 
 
 
    
Public Age As Integer 
 
End 
Class 
ولإن زميلك العزيز في الفريق الخاص بادخال بعض البيانات بشر - وجل من لا يسهو - قام بكتابة الجملة التالية :

C#:
كود PHP:
Person Ahmed = new Person();
Ahmed.Age 999999999999
VB.net:
كود PHP:
Dim Ahmed As New Person() 
Ahmed.Age 999999999999 
ولو ان السهو في رقم بهذا الحجم يعد شبه مستحيل ، لكننا قد نتعرض لهذه المشكلة في اشياء اقرب للواقع ، وابسط من ذلك لو انه يقوم بقراءة القيمة من المستخدم ليرسلها لك مباشرة ، وفي وجود مستخدم - غلس - فإن مثل هذه المدخلات تعد أمراً طبيعياً .

طبعاً هذا المدخل سيسبب الدمار العاجل للكلاس الذي قمت بعمله ، كما ان زميلك مبرمج شاشات الادخال ربما لن يكلف نفسه عناء برمجة امر التحقق من الادخال ، لذا تأتي النصيحة الدائمة ، امنع متغيراتك من الظهور لمستخدمها - المبرمج الآخر - وضع بدلاً منها دوال لقراءتها او الكتابة إليها بالشكل التالي :

C#:
كود PHP:
class person
{
private 
int Age;
public 
string SetAge(int x)
{
 if(
x>100 || x<1)
  return 
"you can't edit age like that";
 
 
Age=x;
 return 
"done";
 
}
public 
int GetAge()
{
 return 
Age;
}

VB.net:
كود PHP:
Class person 
    
Private Age As Integer 
 
    
Public Function SetAge(ByVal x As Integer) As String 
        
If 100 OrElse x 1 Then 
            
Return "you can't edit age like that" 
        
End If 
 
        
Age 
        
Return "done" 
 
    
End Function 
 
    Public Function 
GetAge() As Integer 
        
Return Age 
    End 
Function 
End Class
طبعاً تسمية المتغيرات باسم x هو خطا كما اتفقنا سابقاً ، دالة Set ينبغي ان تأخذ الشكل التالي مثلاً :

C#:

رمز:
public 
string SetAge(int Age)
{
 if(
Age>100 || Age<1)
  return 
"you can't edit age like that";
 
 
this.Age=Age;
 return 
"done";
 
}
VB.net :

رمز:
Public Function 
SetAge(ByVal Age As Integer) As String 
    
If Age 100 OrElse Age 1 Then 
        
Return "you can't edit age like that" 
    
End If 
 
    
Me.Age Age 
    
Return "done" 
 
End Function 
وذلك حسبما تعلمنا من خصائص this أو Me في الدرس السابق ...

ربما يبدو لك الأمر مملاً او طويلاً ، لكنه مثل هذه الأمور في المشاريع الجدية تعد نقاطاً حيوية لا يمكن الاستغناء عنها لإنها قد تتسبب في سقوط للمشروع يكلف عدة ملايين بسبب خطأ بسيط .

تنبيه أخير ، الدالة GetAge يطلق عليها اسم Accessor أما الدالة SetAge فتسمى باسم Mutator .

ارسال القيم كجزء من ال Constructor :

طريقة أخرى يمكنك استخدامها كبديل او مع الطريقة السابقة ، وهي اتاحة الفرصة للمستخدم لتمرير بارميترات قيم المتغيرات ضمن المشيد Constructor ، في الكلاسات الكبيرة سيكون لزاماً عليك استخدام الطريقة الأولى إلى جانب هذه الطريقة حيث انك لن تتصور المستخدم يقوم بتمرير قيم كل المتغيرات لحظة انشاء Object من ال Class .

مثال هذه الطريقة :

C#:
كود PHP:
class Person
{
private 
int Age;
public 
Person(int Age)
{
 if(
Age>100 || Age<1)
  return 
"you can't edit age like that";
 
 
this.Age=Age;
 return 
"done";
}

VB.net:
كود PHP:
Class Person 
    
    
Private Age As Integer 
    
    
Public Sub New(ByVal Age As Integer
        
        If 
Age 100 OrElse Age 1 Then 
            
Return "you can't edit age like that" 
        
End If 
        
        
Me.Age Age 
        
Return "done" 
    
End Sub 
استخدام ال Type Property :

بنفس الطريقة السابقة ، ولكن بطريقة اخرى واعتماداً على تحويل المتغير إلى خاصية لكل منها دالتان : Set و Get ، يتم كتابة ذلك بالشكل التالي :

C#:
كود PHP:
class Person
{
public 
int Age
{
get { return Age;}
set
{
if (!(
value>100 || value<1))
Age=value;
}
}

VB.net:

كود PHP:
Class Person
  
public Property Age() As Integer 
      Get 
          
Return Age 
      End Get 
      Set 
          
If Not (value 100 OrElse value 1Then 
              Age 
value 
 
          End 
If 
      
End Set 
  End Property 
End 
Class 
والآن يمكنك الوصول المباشر إلى Age ، ولكن قبل تطبيق اي شيء سيتم استدعاء Set ، وفي حالة طلب شيء سيتم الحصول عليه من Get ، وهو ما يتيح لك التأكد من بيانات الادخال او عمل بعض العمليات على عمليات الاخراج .

لعلك لاحظت ايضاً أن Set و Get هما public لان الخاصية (وليس المتغير في هذه الحالة) المسماه Age هي public ، ولكن منذ .net 2.0 اصبح بامكانك التعديل في معرف الوصول الخاص ب Set او Get على حدة ، بالشكل التالي مثلاً :

C#:
كود PHP:
public int Age
{
get { return Age; }
protected 
set Age value; }

VB.net:

كود PHP:
Public Property Age() As Integer
  Get 
      
Return Age 
  End Get 
  
Protected Set 
      Age 
value 
  End Set 
End Property 

إذا كنت ترغب في عمل Read Only Property فيمكنك ازالة الخاصية Set ، أما لو اردت العكس لعمل Write Only Property فأزل الخاصية Get ، هذا المثال ل Read Only Property :

C#:
كود PHP:
public int Age
{
get { return Age; }

VB.net:
كود PHP:
Public ReadOnly Property Age() As Integer 
    Get 
        
Return Age 
    End Get 
End Property 


توقيع : khaledbelal



(أَفَأَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا بَيَاتاً وَهُمْ نَآئِمُونَ {97} أَوَ أَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا ضُحًى وَهُمْ يَلْعَبُونَ {98}
أَفَأَمِنُواْ مَكْرَ اللّهِ فَلاَ يَأْمَنُ مَكْرَ اللّهِ إِلاَّ الْقَوْمُ الْخَاسِرُونَ {99}).
سورة الأعراف.

رد مع اقتباس
إضافة رد


تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

الانتقال السريع

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
الدرس السادس عشر : ال OverLoading دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 1 03-02-2011 03:43 PM
الدرس الرابع عشر : this دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 02-19-2010 07:58 PM
الدرس الثاني عشر : ال Nullable Types دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 02-18-2010 08:07 PM
الدرس العاشر : التراكيب Structure دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 02-18-2010 04:33 PM
الدرس التاسع : ال Enumeration دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 02-18-2010 04:27 PM

استضافة الحياة

الساعة الآن 03:53 PM.


Powered by vBulletin® v3.8.4, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. , TranZ By Almuhajir
النسخة الفضية
Ads Management Version 3.0.1 by Saeed Al-Atwi

SlamDesignzslamDesignzEdited by Riad Al-Ganah Team - جميع الحقوق محفوظة لشبكة رياض الجنة

Privacy Policy Valid XHTML 1.0 Transitional By SlamDesignz Valid CSS Transitional By SlamDesignz