الخميس، 5 ديسمبر 2013

أساسيات البرمجة سي شارب - الوارثة C# - Inheritance

أساسيات البرمجة - الوارثة C# - Inheritance


الوارثة Inheritance

الوارثة هي واحدة من أهم المفاهيم الاساسية المتعلقة بالبرمجة الموجهة بالكائنات OPP. وهي تعني وارثة فئة لفئة أخرى.فهي تسهل عملية بناء وصيانة التطبيقات.
فبدلا من أن ينشاء المستخدم فئة جديدة فيمكنه وراثة عناصر ودوال  ومتغيرات  فئة أخرى. الفئة الموروثة تسمى بالفئة الأساسية Base Class
والفئة الوارثة تسمى بالفئة المشتقة derived Class.


الفئة الأساسية والفئة المشتقة

الفئة يمكن أن تشتق من أكثر من فئة أو واجهة بمعنى أنه يمكن أن ترث البيانات والدوال من أكثر من فئة أو واجهة.

الصيغة العامة للفئة الاساسية Base Class والفئة المشتقة Derived Class.

 class 
{
 ...
}
class  : 
{
 ...
}

مثال على الوراثة نفترض ان الفئة الاساسية هي الشكل وان الفئة الموروثة هي المستطيل.

using System;
namespace InheritanceApplication
{//الفئة الاساسية الشكل
   class Shape 
   {
      public void setWidth(int w)
      {
         width = w;
      }
      public void setHeight(int h)
      {
         height = h;
      }
      protected int width;
      protected int height;
   }

   // الفئة المستطيل المشتقة
   class Rectangle: Shape
   {
      public int getArea()
      { 
         return (width * height); 
      }
   }
   
   class RectangleTester
   {
      static void Main(string[] args)
      {
         Rectangle Rect = new Rectangle();

         Rect.setWidth(5);
         Rect.setHeight(7);

         // طباعة المساحة للمستطيل
         Console.WriteLine("Total area: {0}",  Rect.getArea());
         Console.ReadKey();
      }
   }
}

ناتج الكود:-

Total area: 35

تهيئة الفئة الاساسية base Class Initialization 

يجب تهئية الفئة الاساسية قبل انشاء الفئة المشتقة.بمعنى أخري يجب كتابة الفئة الاساسية قبل الفئة المشتقة كي يتم وراثتها.

مثال على تهيئة الفئة الاساسية ووراثتها.


sing System;
namespace RectangleApplication
{
   class Rectangle
   {
      //تعريف المتغيرات
      protected double length;
      protected double width;
      public Rectangle(double l, double w)
      {
         length = l;
         width = w;
      }
      public double GetArea()
      {
         return length * width;
      }
      public void Display()
      {
         Console.WriteLine("Length: {0}", length);
         Console.WriteLine("Width: {0}", width);
         Console.WriteLine("Area: {0}", GetArea());
      }
   }//نهاية الفئة المستطيل
   class Tabletop : Rectangle
   {
      private double cost;
      public Tabletop(double l, double w) : base(l, w)
      { }
      public double GetCost()
      {
         double cost;
         cost = GetArea() * 70;
         return cost;
      }
      public void Display()
      {
         base.Display();
         Console.WriteLine("Cost: {0}", GetCost());
      }
   }
   class ExecuteRectangle
   {
      static void Main(string[] args)
      {
         Tabletop t = new Tabletop(4.5, 7.5);
         t.Display();
         Console.ReadLine();
      }
   }
}

ناتج الكود تهيئة الفئة الاساسية

Length: 4.5
Width: 7.5
Area: 33.75
Cost: 2362.5


الواراثة المتعددة Multiple Inheritance 

لغة السي شارب لا تدعم الوارثة المتعددة  للفئات فالحل هو تنفيذ وارثة واجهات كبديل عن وارثة الفئات.

مثال على وراثة المتعدد للواجهات 

using System;
namespace InheritanceApplication
{
   class Shape 
   {
      public void setWidth(int w)
      {
         width = w;
      }
      public void setHeight(int h)
      {
         height = h;
      }
      protected int width;
      protected int height;
   }

   // واجهة اساسية لتكلفة الدهان
   public interface PaintCost 
   {
      int getCost(int area);

   }
   // الفئة المشتقة
   class Rectangle : Shape, PaintCost
   {
      public int getArea()
      {
         return (width * height);
      }
      public int getCost(int area)
      {
         return area * 70;
      }
   }
   class RectangleTester
   {
      static void Main(string[] args)
      {
         Rectangle Rect = new Rectangle();
         int area;
         Rect.setWidth(5);
         Rect.setHeight(7);
         area = Rect.getArea();
         // Print the area of the object.
         Console.WriteLine("Total area: {0}",  Rect.getArea());
         Console.WriteLine("Total paint cost: ${0}" , Rect.getCost(area));
         Console.ReadKey();
      }
   }
}

ناتج الوراثة المتعددة للكود السابق.

Total area: 35
Total paint cost: $2450






Ahmed Ata Almahallawi
Freelancer
IT
IT Help Desk,
SEO experience,PHP,C#,ASPX
Al alami st
gaza -jabaliaGaza Strip
Palestine
ahmed.almahallawi@gmail.com

DOB: 05/10/1984
by +Ahmed Almahallawi 
5/12/2013




التسميات: