Professional Documents
Culture Documents
: abstract
هي عبارة عن كلمة محجوزة تأتي مع الـ Classأو الدالة ( )methodوعندما تأتي مع الـ classفال يمكننا
أن نأخذ كائن ( )objectأو نسخة من هذا الـ Classويكون فقط للوراثة .أُنشئ لكي يخدم classeأخرى .
مثال :
}
}
}
الدالة التي تكون abstractتكون أيضا ً بداخل abstract classوتكون الدالة مجردة أي رأس
الدالة فقط بدون الكود بداخلها ,لكن بشرط أن من يرث هذا الـ classيجب أن يكتب الكود بداخل هذه
الدالة الـ , abstractهي تشبه (interfaceسنتحدث عنه الحقا) إلى حد ما .لكن ال تخلط بين
االثنين ألن تلك دالة ( )methodبينما هذا . interface
وعند كتابة كود الدالة في الـ classاالبن نكتب نفس رأس الدالة ونكتب overrideعوضا ً عن
abstractثم نكتب الكود .
:Virtualيجب أن نكتب كود الدالة التي تكون virtualأي ال تكون دالة مجردة .
: abstractيجب أن ال نكتب كود الدالة التي تكون abstractأي تكون مجردة .
مثال :
: Sealed
تأتي مع تعريف الـ Classو الدوال( )methodعندما تأتي مع الـ Classفهذا يعني أنه ممنوع وراثة هذا
الكالس ,بينما يمكننا التعامل معه بطريقة عادية ونستطيع أخذ نسخ منه أو كائن (. )object
مثال :
}
سيحدث خطأ أثناء معالجة الكود ألنه ال يمكن وراثة الـ Classالذي يكون sealedأما في حالة الدوال :
فالدالة التي تكون sealedفهذا يعني أنه ال يمكن عمل overrideلهذه الدالة في classآخر .
مثال :
class A
{
)(public sealed virtual void print
{
;)"Console.WriteLine("c#
}
}
class B : A
{
)(public override void print
{
;)"Console.WriteLine("hello
}
}
سيحدث خطأ أثناء معالجة الكود ألنه ال يمكن عمل overrideلدالة .sealed
فائدة sealedأنها تمنع إعادة استخدام محتويات الـ classفي classآخر أو إعادة استخدام دالة بنفس االسم
ونفس المدخالت في classآخر .
سنتناول في هذا الدرس المجموعات العاديّة ،والمجموعات العموميّة generics collections.سنبدأ هذا
مجردة ،حيث تصف سمات
ّ الدرس بالحديث المختصر عن الواجهات ،وهي تشبه األصناف ولكن بصورة
عا ّمة ينبغي أن تتحلّى بها األصناف التي تح ّققها.
تصرح عن تابع أو خاصيّة ،وتترك للصنف ّ فكأن الواجهة تح ّقق مبدأ التعدديّة الشكليّة بشكل ممتاز ،فهي
ّ
الذي يحقّقها (يرث منها) حريّة التعبير عن هذا التابع أو هذه الخاصيّة بالشكل المالئم.
تُستخدم الواجهات على نحو واسع جدًّا في سي شارب ،وتتبع تسميتها لنفس أسلوب تسمية األصناف ،مع
األول
ي واجهة هو الحرف الطباعي الكبير Iوهو الحرف ّ األول من اسم أ ّ
االصطالح على أن يكون الحرف ّ
من كلمة Interface.في الحقيقة لقد ح ّلت الواجهات مشكلة الوراثة المتعدّدة (الوراثة من أكثر من صنف
بنفس الوقت) والتي كانت تتمتّع بها لغة C++فقط .اآلن أصبح بإمكان أي صنف أن يرث من صنف آخر
واحد فقط ،باإلضافة إلى تحقيقه ألي عدد يرغبه من الواجهات.
يرث الصنف Frogهذه الواجه ،ويحقّقها من خالل إعادة تعريف التابع TakeBreathحيث يُعبّر
عن عمليّة التنفّس بالشكل الذي يناسبه (سيستهلك في مثالنا هذا %20من كميّة األكسجين التي يحصل عليها).
ي" بصرف النظر عن كونه يرث من ي "كائن ح ّ
في الحقيقة يمكن استخدام الواجهة IBreathingمع أ ّ
الصنف (Animalالذي يمثّل الصنف الحيواني) أو من الصنف (Mammalالثديّيات) ً
مثال أو غيره،
ألن جميع الكائنات الحيّة تشترك معًا بخاصيّة التنفّس ،وهنا تكمن ّ
قوة الواجهات. وذلك ّ
namespace oop_7
{
interface IBreathing
{
;)double TakeBreath(double oxygen_amount
ّ انظر إلى السطر الذي قمنا فيه باستنساخ كائن ستجد أنّنا قد.هناك أمر آخر جدير بالمالحظة
صرحنا عن
وهذا أمر،Frog ث ّم أسندنا إليه مرج ًعا لكائن من النوعIBreathing من النوعfrog المتغيّر
IBreathing. يرث من الواجهةFrog ألن الصنف ّ صحيح تما ًما وشائع جدًّا
6 بسمة سراقبي.م
جامعة ادلب
كلية الهندسة المعلوماتية
السنة الثانية -مادة برمجة متقدمة 1
هي عبارة عن مجموعة من الـ classesيمكننا أن نستخدم الـ namespaceلكي ننظم الكود أكثر
ويكون مفهوما ً أكثر ,يمكن أن يكون لدينا أكثر من namespaceفي نفس المشروع ,ويمكن أن يوجد
classفي namespaceبنفس اسم classآخر في namespaceأخرى .
يتم استخدامها عن طريق الكلمة المحجوزة namespaceثم االسم الذي نريده ونكتب بداخلها كل الـ
classesالتي نريد .
في بداية كل كود نكتب , using systemوكلمة systemهي عبارة عن namespaceتحتوي على
العديد من الـ , classesمثل Consoleالذي نستخدمه في عمليات االدخال واإلخراج .
فمثال استدعاء ما بداخل كل namespaceالتي بداخل , systemواستدعاء دالة اإلخراج أيضا ً من
Consoleفيكون االستدعاء على الشكل التالي :
;)(System.Console.WriteLine
مثال :
;using D
namespace Test
{
class prog1
{
}
}
}
namespace D
{
class prog1
{
public void view()
{
Console.WriteLine("I am namespace D class
prog1");
}
}
class A
{
public void show()
{
Console.WriteLine("I am namespace D class A ");
}
}
}
8 بسمة سراقبي.م
جامعة ادلب
كلية الهندسة المعلوماتية
السنة الثانية -مادة برمجة متقدمة 1
في أول سطر داخل الدالة Mainكتبنا D.prog1لكي يذهب إلى الـ classفي الـ namespaceالتي
نحددها ألنه يوجد classبنفس االسم في الـ namespaceالرئيسية ,فلو لم نحدد الـ namespace
كان سيذهب إلى الـ classالذي كان في الـ namespaceالرئيسية ,وبما أن الـ Classالذي اسمه A
ال يوجد classآخر بنفس اسمه فنستدعيه مباشرة ً بدون الحاجة إلى تحديد الـ namespaceالتي تحتويه.
ويمكن أن نكتب namespaceكاملة بداخل namespaceبنفس الطريقة ونستدعيها بهذا الشكل :
مثال :
;using Test1.Test2
namespace Test1
{
class prog1
{
)(public void view
{
Console.WriteLine("I am namespace Test class
;)" prog1
}
}
class Program
{
)static void Main(string[] args
{
;)"Console.WriteLine("Main Function
}
}
namespace Test2
{
class prog2
{
)(public void show
{
;)" Console.WriteLine("hello world
}
}