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

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

إضافة رد

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

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

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

ال interfaces في System.Collections :

لو راجعنا الواجهات الموجودة في ال collection لوجدنا الواجهات التالية :

ICollection :
تحتوي هذه الواجهة على بعض النقاط الاساسية مثل ال size وال IsSynchronized وخلافه ، لها الشكل العام التالي :

C#:
كود PHP:
public interface ICollection IEnumerable
{
int Count get; }
bool IsSynchronized get; }
object SyncRoot get; }
void CopyTo(Array array, int index);

vb.net:
كود PHP:
Public Interface ICollection 
    Inherits IEnumerable 
    ReadOnly Property Count
() As Integer 
    ReadOnly Property IsSynchronized
() As Boolean 
    ReadOnly Property SyncRoot
() As Object 
    Sub CopyTo
(ByVal array As Array, ByVal index As Integer
End Interface 
IComparer :
تعرفنا عليها سابقا .

IDictionary :
تستخدم كما هو واضح من اسمها من اجل الادلة ، يمكن استخدامها لتخزين مثلاً بيانات الموظفين وعناوينهم بحيث يمكن العثور بعد ذلك على الشخص بدلالة اسمه او عنوانه ، تحتوي على دوال للاضافة والحذف وخلافه . الشكل العام لها بالشكل التالي :

C#:
كود PHP:
public interface IDictionary :
ICollectionIEnumerable
{
bool IsFixedSize get; }
bool IsReadOnly get; }
// Type indexer; see Chapter 12 for full details.
object this[object key] { getset; }
ICollection Keys get; }
ICollection Values get; }
void Add(object keyobject value);
void Clear();
bool Contains(object key);
IDictionaryEnumerator GetEnumerator();
void Remove(object key);

vb.net:
كود PHP:
Public Interface IDictionary 
    Inherits ICollection 
    Inherits IEnumerable 
    ReadOnly Property IsFixedSize
() As Boolean 
    ReadOnly Property IsReadOnly
() As Boolean 
    
' Type indexer; see Chapter 12 for full details. 
    Default Property Item(ByVal key As Object) As Object 
        Get 
        End Get 
        Set 
        End Set 
    End Property 
    ReadOnly Property Keys() As ICollection 
    ReadOnly Property Values() As ICollection 
    Sub Add(ByVal key As Object, ByVal value As Object) 
    Sub Clear() 
    Function Contains(ByVal key As Object) As Boolean 
    Function GetEnumerator() As IDictionaryEnumerator 
    Sub Remove(ByVal key As Object) 
End Interface 
IEnumerable
تم شرحها سابقاً .

IEnumerator
تم شرحها سابقا .

IDictionaryEnumerator
لو لاحظت في IDictionary ستجد الدالة GetEnumerator ، هذا هو ال interface الخاص بهذه الدالة ، لها الشكل العام التالي :

C#:
كود PHP:
public interface IDictionaryEnumerator IEnumerator
{
DictionaryEntry Entry get; }
object Key get; }
object Value get; }

vb.net:
كود PHP:
Public Interface IDictionaryEnumerator 
    Inherits IEnumerator 
    ReadOnly Property Entry
() As DictionaryEntry 
    ReadOnly Property Key
() As Object 
    ReadOnly Property Value
() As Object 
End 
Interface 
IHashCodeProvider
يختص باعادة ال hashcode لل collection المعين باستخدام الدالة GetHashCode .

IList

قائمة ، هذا كل ما في الأمر ، تحتوي على عدة دوال تسهل التعامل معها للاضافة والبحث والحذف وخلافه الشكل العام لها بالشكل التالي :
c#:
كود PHP:
public interface IList :
ICollectionIEnumerable
{
bool IsFixedSize get; }
bool IsReadOnly get; }
object thisint index ] { getset; }
CHAPTER 10 n COLLECTIONS AND GENERICS 311
int Add
(object value);
void Clear();
bool Contains(object value);
int IndexOf(object value);
void Insert(int indexobject value);
void Remove(object value);
void RemoveAt(int index);

vb.net:
كود PHP:
Public Interface IList 
    Inherits ICollection 
    Inherits IEnumerable 
    ReadOnly Property IsFixedSize
() As Boolean 
    ReadOnly Property IsReadOnly
() As Boolean 
    
Default Property Item(ByVal index As Integer) As Object 
        Get 
        End Get 
        Set 
        End Set 
    End Property 
    
Function Add(ByVal value As Object) As Integer 
    Sub Clear
() 
    Function 
Contains(ByVal value As Object) As Boolean 
    
Function IndexOf(ByVal value As Object) As Integer 
    Sub Insert
(ByVal index As IntegerByVal value As Object
    
Sub Remove(ByVal value As Object
    
Sub RemoveAt(ByVal index As Integer
End Interface 
الفئات في System.Collections :

يحتوي على الفئات التالية :


ArrayList
Hashtable
Queue
SortedList
Stack

لن نختصر في هذا الموضوع نظراً للاستخدامات المتعددة لهذه الفئات ، لذا سنبدأ في شرح كل منها ببعض الاختصار .

ArrayList :

هي قائمة array كما هو واضح من الاسم ، تتميز بنفس سمات ال array من حيث تخزينها لعدة بيانات ، اضافة لمميزات القائمة التي تسهل عمليات الاضافة والتعديل والترتيب والحذف وخلافه داخل عناصر هذه المصفوفة .

لنفترض ان لدينا فئة (سيارة) السابقة والتي تحتوي على اسم السيارة وموديلها ، كنا نعرف مصفوفة منها باستخدام الأمر التالي :
c#:
كود PHP:
Car[] carArray = new Car[4]; 
vb.net:
كود PHP:
Dim carArray As Car() = New Car(3
ربما لم تكن تعرف انك تحتاج لاربع سيارات فقط ، ربما تحتاج للزيادة او للنقصان ، ربما ترغب بحذف واحدة منهم من المنتصف ... الخ ، فكما ترى لا توفر لنا ال array الكثير من الخيارات لتسهيل التعامل مع هذه الخصائص ، ستحتاج لبعض الأوامر للحذف وخلافه .
بداية قم بعمل using ل System.Collection لتكون قادراً على التعامل المباشر معها لاحقاً .
c#:
كود PHP:
using System.Collections
vb.net:
كود PHP:
Imports System.Collections 
لكن جاءت array List لتلقي عن كاهلك اي مشاكل بخصوص هذه العمليات ، كل ما عليك هو تعريف arrayList بالطريقة التالية :
C#:
كود PHP:
ArrayList carList = new ArrayList(); 
vb.net:
كود PHP:
Dim carList As New ArrayList() 
والآن يمكنك اضافة سيارة :
c#:
كود PHP:
            Car temp = new Car("BMW"1990);
            
carList.Add(temp); 
vb.net:
كود PHP:
Dim temp As New Car("BMW"1990
carList.Add(temp
تستطيع ايضاً عمل insert في جزء معين ، لاضافة السيارة مثلاً في المكان الثالث نكتب الكود التالي :
c#:
كود PHP:
            carList.Insert(temp); 
vb.net:

كود PHP:
   carList.Insert(temp
في الناحية الأخرى ، تستطيع مسح كامل القائمة :

C#:
كود PHP:
carList.Clear(); 
vb.net:
كود PHP:
carList.Clear() 
أو حذف عنصر معين بدلالة موقعه :
C#:
كود PHP:
carList.RemoveAt(4); 
vb.net:
كود PHP:
carList.RemoveAt(4
او بدلالة العنصر نفسه :

C#:
كود PHP:
carList.Remove(temp); 
vb.net:
كود PHP:
carList.Remove(temp); 
يمكننا استخدام الخاصية Count لمعرفة العدد ، وبالتالي الدوران عليهم جميعاً بالشكل التالي مثلاً :
c#:
كود PHP:
            for (int i 0carList.Counti++)
            {
                
temp = (Car)carList[i];
            } 
vb.net:
كود PHP:
For As Integer 0 To carList.Count 
    temp 
DirectCast(carList(i), Car
Next 
يمكننا استخدام بعض الخصائص الأخرى مثل sort كما تعلمنا سابقاً ، يمكننا تحويلها إلى array عادية باستخدام الدالة toarray ، الدالة Reverse ستعكس ترتيب القائمة ، الدالة indexof تستخدم للبحث بالطريقة التالية ، لنفترض لدينا السيارة temp ونرغب في البحث عنها ضمن السيارات الموجودة ، سيكون ذلك بالشكل التالي :

C#:
كود PHP:
int find=carList.IndexOf(temp0); 
vb.net:
كود PHP:
Dim find As Integer carList.IndexOf(temp0
وهكذا تستطيع استخدام المتغير find للوصول إلى مكان العنصر والتعامل معه كما تريد ، كما يمكنك تحديد نقطة بداية البحث 0 كما حددنا او تغييرها او عدم استخدامها اصلاً ، هناك ايضاً خصائص أخرى ولكن كان هذا عرضاً سريعاً لاهم الخصائص والدوال .

HashTable :

واحد من طرق تخزين البيانات data structure ، مهمته الاساسية تسهيل البحث عن البيانات المرتبطة ، إذا لم تكن قد مرت عليك هذه ال hash table من قبل فانصحك بالتعرف عليها من خلال ويكبيديا هنا :

http://en.wikipedia.org/wiki/Hash_table

في السابق كنا نقوم بتكوين ال hashtable عبارة عن Linked List يرتبط كل عنصر فيه ب Linked list اخرى ، وكنا نقوم بعمل دواله واجراءاته المختلفة ، أما الآن فيمكنك ببساطة تعريف Hashtable والبدء في وضع البيانات فيه مباشرة باستخدام الأوامر التقليدية Add,AddRange و Remove وخلافه مما تعلمناه في الدرس السابق .


Queue :

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

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

لا نريد ان نبتعد كثيراً ، سنفترض طابور العملاء بالشكل التالي :
c#:
كود PHP:
Queue empQueue = new Queue();
            
employee temp=new employee();
            for (
int i 010i++)
            {
                
temp.userName Console.ReadLine();
                
empQueue.Enqueue(temp);
            } 

vb.net:
كود PHP:
Dim empQueue As New Queue() 
Dim temp As New employee() 
For 
As Integer 0 To 9 
    temp
.userName Console.ReadLine() 
    
empQueue.Enqueue(temp
Next 
لو قمنا الآن بعمل Loop لنعمل Dequeue ، ستجد ان اول الموظفين دخولاً سيكون أولهم خروجاً . طبعاً لا تنس أن بامكانك استخدام بعض الخصائص مثل Count وخلافه تلك التي شرحناها في الدرس السابق .

قبل النهاية اشير فقط إلى ان الدالة Dequeue تعيد العنصر الأول وتقوم بحذفه مباشرة من الطابور ، أما الدالة Peek فهي تعيد اول عنصر في الترتيب ولكنها تحتفظ به في الطابور كما كان .
في العصور الغابرة كان هناك الكثير والكثير حول ال Queue وكيفية تطبيقه باستخدام ال linked list ، وال circular queue والكثير مما يمكن ان تكون قد اطلعت عليه إذا كنت قد درست Data Structure .

Stack :

مثل ال Queue فيما عدا انه يتبع تقنية LIFO - Last Input First Output ، حيث ان العنصر الآخير في الدخول هو الأول في الخروج ، يتم ادخال العناصر باستخدام Push ويتم اخراجها باستخدام pop ، ال Peek تقوم بمهمتها كما هي في عرض العنصر الأول وهو في حالتنا الآخر دخولاً دون حذفه من ال Stack .

تعريف ال Stack يتم ببساطة بالشكل التالي :

C#:

كود PHP:
Stack jobStack = new Stack(); 
vb.net:
كود PHP:
Dim jobStack As New Stack() 
الاستخدامات :

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

ابسط استخدام لل Stack هو حل المعادلات في البروسيسور ، إن المعادلة :

A + B

تدخل إلى البروسيسور بالشكل التالي :

AB+

يسمى هذا الاسلوب باسم postfix، وفي البروسيسور يتم ادخالهم في stack لتنفيذهم حيث ان تنفيذهم لن يتم بترتيب الوصول ، مثال آخر في ترجمة ال Compilers ايضاً .

في المرفقات برنامج يوضح كيفية التحويل بين postfix و infix كان احد مشاريع الكلية في الفرقة الثالثة ل FUTEX Group ، يوضح البرنامج كيفية التحويل وكيفية يقوم البروسيسور بوضعهم في stack وتنفيذهم ، قم باختيار View لاستعراض سرعة عرض الخطوات ، يمكنك الحل باستخدام الارقام او الرموز ويمكنك الاختيار فيما بينهما من اعلى النافذة . هذا إذا كنت مهتماً ببعض التفاصيل .
http://vb4arab.com/vb/uploaded/3/21207604046.rar


مزيد من التفاصيل تجدها في موقع MSDN هنا :
http://msdn2.microsoft.com/en-us/lib...49(VS.71).aspx

كل ما سبق في هذا الدرس ينطبق تحت علم Data Structure ، يمكنك الانطلاق من هذه النقطة إذا كنت ترغب في معرفة الكثير عن هذا العالم الذي يتداخل معك كثيراً في عالمك ، سيفيدك ان تكون مطلعاً على اساسياته اضافة لعلم ال Algorithms .

ايضاً هناك ما يعرف باسمSystem.Collections.Specialized ويحتوي على فئات اخرى اكثر تخصصاً مشتقة من الفئات السابقة .


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


توقيع : khaledbelal



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

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


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

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

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

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
الدرس السادس عشر : ال OverLoading دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 1 03-02-2011 03:43 PM
الدرس التاسع عشر : ال Encapsulation دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 02-20-2010 03:07 PM
الدرس الرابع عشر : this دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 02-19-2010 07:58 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

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

الساعة الآن 01:57 AM.


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