You are on page 1of 7

‫‪TARIG‬‬

‫‪Tariq Mohammed Al-Sultan‬‬

‫‪Abstract‬‬
‫‪Classes and Methods‬‬
‫‪MOHAMMED AL-‬‬ ‫أوالً الفصيل المجرد ‪abstract class‬‬
‫هو فصيل إفتراضي وهمي ال يمكن إنشاء غرض منه‪ ،‬يستخدم بشكل أساسي ليدعم مبدأ الوراثة‪.‬‬
‫يتم التصريح عن فصيل بأنه مجرد لإلشارة إلى أن هذا الفصيل أساسي‪.‬‬

‫‪SULTAN‬‬
‫المفهوم العام من الفصيل المجرد هو تجميع البيانات المشتركة بين أكثر من فئة ففصيل مجرد بحيث ال‬
‫يمكن الوصول لها إال من فصيل مشتق‪ ،‬أي ال نستطيع إنشاء غرض من هذا الفصيل والوصول من خالله‬
‫إلى هذه البيانات‪  ،‬وهذا يساعد في إخفاء البيانات وحمايتها بصورة أكثر فاعلية‪.‬‬
‫للتصريح عن فصيل بأنه مجرد نكتب الكلمة المفتاحية ‪ abstract‬بالشكل التالي ‪:‬‬
‫‪abstract class NameClass‬‬
‫}‬

‫{‬

‫ثانيا ً الدوال المجردة ‪abstract method‬‬


‫دالة وهمية يتم التصريح عنها داخل الفصيل المجرد فقط‬
‫ونستخدمها مع الدوال المشتركة بين أكثر من فصيل لكن تنفيذها يختلف من فصيل إلى آخر‪.‬‬
‫يتم التصريح عن دالة مجردة بالكلمة المفتاحية ‪ abstract‬داخل فصيل مجرد وال تحتوي على أي كود كذلك‬
‫ليس لها حاصرتين {} وينتهي التصريح عنها بفاصلة منقوطة وتأخذ التصريح التالي ‪:‬‬

‫;)‪public abstract Type fun_name(parameters‬‬

‫محدد الوصول لها دائم ‪( public‬حسب ما قال األستاذ نجم)‪.‬‬


‫حسب قول الدكتور عائش يمكن للدالة المجردة أن تملك جميع محددات الوصول ماعدا ‪private‬‬
‫وعليكم التأ ُكد‬
‫عند اشتقاق فصيل من فصيل مجرد يجب علينا إعادة كتابة جميع الدوال المجردة داخل الفصيل المشتق‬
‫وتعريفها بالكلمة‪ override‬داخل الفصيل المشتق‪.‬‬

‫وتسمى الدالة المعرفة بالكلمة ‪ override‬باللدالة الناسخة‪.‬‬

‫إعداد طارق محمد السلطان‬


Tariq Mohammed Al-Sultan

: ‫الصورة العامة للتصريح عن دالة ناسخة داخل فصيل مشتق كالتالي‬

public override Type fun_name(parameters)


{

‫ بالكلمة‬abstract ‫يجب أن يكون رأس الدالة الناسخة هو نفسه رأس الدالة المجردة مع تغيير الكلمة‬
.‫ فقط‬override

‫يمكن إعادة تعريف الدوال المجردة داخل الفصيل المشتق من الفصيل المشتق من الفصيل المجرد (بمفهوم‬
‫عام إعادة تعريفها داخل األحفاد) ويمكن تجاوزها‬
 
: ‫مثال حول الفصائل المجردة والدوال المجردة‬
using System;
namespace lab6
{
abstract class Shapes // Abstract class
{
protected double width;
protected double height;
public double Width
{
set { width = value; }
get { return width; }
}
public double Heiht
{
set { height = value; }
get { return height; }
}
public abstract double Area();
}
class Square : Shapes
{
public override double Area()
{
return Math.Pow(width, 2);
}
}
class Rectangular : Shapes
{
public override double Area()
{
return width * height;
}
}
class Triangle : Shapes
{
double Base;
public double BASE
{
set { Base = value; }
get { return Base; }
}

‫إعداد طارق محمد السلطان‬


Tariq Mohammed Al-Sultan

public override double Area()


{
return height * Base / 2;
}
}
class Program
{
static void Main()
{

Square square = new Square();


square.Heiht = 6;
square.Width = 5;

Rectangular rectangular = new Rectangular();


rectangular.Heiht = 6;
rectangular.Width = 5;

Triangle triangle = new Triangle();


triangle.Heiht = 6;
triangle.BASE = 5;

Console.WriteLine("Area of Square ={0}",square.Area());

Console.WriteLine("Area of Rectangular ={0}",rectangular.Area());

Console.WriteLine("Area of Triangle ={0} ",triangle.Area());

Console.ReadKey();
}
}

‫إعداد طارق محمد السلطان‬


‫‪Tariq Mohammed Al-Sultan‬‬

‫‪Sealed‬‬
‫‪Class and Methods‬‬

‫أوالً الفصيل العقيم ‪: sealed class‬‬


‫هو فصيل مجسد يمكن إنشاء غرض منه‪ ،‬و يمكن أن يكون مشتق من فصيل آخر بينما ال يمكن إشتقاق فصيل‬
‫آخر منه‪ ،‬وهذا هو االختالف بينه وبين الفصيل المجسد العادي‪.‬‬
‫أهم فوائد استخدامه هو إيقاف الوراثة المتعدية عند جزء ما من السلسلة الهرمية‪.‬‬
‫يمكن التصريح عن الفصيل العقيم بالصورة العامة التالية ‪:‬‬
‫‪sealed class Class_Name‬‬
‫}‬

‫{‬
‫على سبيل المثال لو كان لدينا السلسلة التالية ‪:‬‬
‫‪class First‬‬
‫}‬

‫{‬

‫‪class Second :First‬‬


‫}‬

‫{‬

‫‪sealed class Third : Second‬‬


‫}‬

‫{‬

‫إن الفصيل ‪ Third‬الذي في نهاية السلسلة يقوم بقطع الوراثة عن الفصائل التي بعده أي ال يمكن إضافة‬
‫فصيل جديد إلى السلسلة بالشكل التالي ‪:‬‬

‫‪class Fourth :Third‬‬


‫}‬

‫{‬

‫إعداد طارق محمد السلطان‬


Tariq Mohammed Al-Sultan

‫إعداد طارق محمد السلطان‬


‫‪Tariq Mohammed Al-Sultan‬‬

‫ثانيا ً الدوال العقيمة ‪sealed methods‬‬


‫من أنواع الدوال الناسخة مهمتها منع إعادة تعريف دالة مجردة أو وهمية في الفئات المشتقة من الفصيل‬
‫المعرفة داخلة‬
‫تستخدم دائما ً مع الدوال الناسخة وتكون في أي فصيل مشتق سواء مجرد أو عقيم‬
‫نستخدم الكلمة المفتاحية ‪ sealed‬لتعريف الدالة المجردة‬
‫على سبيل المثال ليكن معنا السلسلة التالية‬
‫‪abstract class First‬‬
‫{‬
‫;)(‪public abstract void Func‬‬
‫}‬
‫‪class Second:First‬‬
‫{‬
‫)(‪public override void Func‬‬
‫{‬
‫;)"‪Console.WriteLine("Func in Second class‬‬
‫}‬
‫}‬
‫‪class Third : Second‬‬
‫{‬
‫)(‪public override sealed void Func‬‬
‫{‬
‫;)"‪Console.WriteLine("Func in Third class‬‬
‫}‬
‫}‬
‫‪sealed class Fourth : Third‬‬
‫{‬

‫}‬

‫كما نالحظ يمكن لنا إعادة تعريف الدالة المجردة‪ Func  ‬في الفصيل ‪ Second‬والفصيل ‪ Third‬لكن قمنا‬
‫بمنع إعادة تعريفها في أي فصيل مشتق من الفصيل ‪ Third‬وذلك بجعلها عقيمة في هذا الفصيل‬
‫لهذا ال يمكن للفصيل ‪ Fourth‬كتابة الدالة ‪ Func‬بالكلمة المفتاحية ‪override‬‬
‫مالحضة‬
‫تعريف الدالة ‪ Func‬في الفصيل ‪ Third‬بالكلمة ‪  sealed‬يمنع الفصيل ‪ Fourth‬من إعادة تعريفها كدالة‬
‫ناسخة‪ ،‬لكن هذا ال يمنع الفصيل ‪ Fourth‬من وراثتها‪.‬‬
‫على سبيل المثال لو قمنا بإنشاء غرض من الفصيل ‪ Fourth‬فإن هذا الغرض يستطيع الوصول إلى الدالة‬
‫‪ Func‬المعرفة في الفصيل ‪Third‬‬
‫كالتالي‬
‫;)(‪Fourth ob=new Fourth‬‬
‫;)(‪ob.Func‬‬
‫نتيجة التعليمة السابقة هو تنفيذ الدالة ‪ Func‬التي في الفصيل ‪ Third‬‬
‫‪ ‬‬

‫تطبيق حول استخدام الكلمة ‪sealed‬‬


‫;‪using System‬‬

‫‪namespace SealedClassAndFuc‬‬
‫{‬

‫إعداد طارق محمد السلطان‬


Tariq Mohammed Al-Sultan

abstract class First


{
public abstract void Func();
}
class Second:First
{
public override void Func()
{
Console.WriteLine("Func in Second class");
}
}
class Third : Second
{
public override sealed void Func()
{
Console.WriteLine("Func in Third class");
}
}
sealed class Fourth : Third
{

}
/*
class Fifth : Fourth
{
‫ال يمكن الوراثة من الفصيل‬ Fourth
}

*/
class Program
{
static void Main(string[] args)
{
Third third = new Third();
third.Func();
Fourth thourth = new Fourth();
thourth.Func();

Console.WriteLine("Hello World!");
}
}
}

‫إعداد طارق محمد السلطان‬

You might also like