Friday, December 6, 2013

أساسيات البرمجة سي شارب - تعدد أو متعدد الاشكال C# - Polymorphism

8:53 PM

Share it Please

أساسيات البرمجة - تعدد الاشكال C# - Polymorphism


تعدد الأشكال Polymorphism:-

كلمة Polymorphism تعني متعدد أ, تعدد الاشكال غالبا ما تعبر عنها ب واجهة واحدة وعدة دوال.تعدد الاشكال هو نموذج من نماذج البرمجة الكائنية.

أساسيات البرمجة - تعدد أو متعدد  الاشكال C# - Polymorphism

تعدد الاشكال يمكن استاتكي Static أو ديناميكي Dynamic. حيث ام الاستاتكي أو الساكنة يتم الاستجابة له وقت التجميع Compiler Time. بينما الديناميكي وقت التشغيل Run Time.

تعدد الاشكال الاستاتكي أو الساكنة:-

ألية عمل الاستاتكي يتم من خلال الربط الدالة مبكرا خلال وقت التجميع ويتم تنفيذ ذلك من خلال الطرقتين التالتين.

1- دالة الحمل الزائد Function overloading.
2- مشغل الحمل الزائد Operator overloading.

دالة الحمل الزائد Function Overloading.

عدة دوال لها نفس الاسم ولكن الوسطاء أما مختلفون في نوع البيانات أو عدد الوسطاء.ويتم تنفيذ الدالة حسب الوسيط الممر من خلال الدالة.

using System;
namespace PolymorphismApplication
{
   class Printdata
   {
      void print(int i)
      {
         Console.WriteLine("Printing int: {0}", i );
      }

      void print(double f)
      {
         Console.WriteLine("Printing float: {0}" , f);
      }

      void print(string s)
      {
         Console.WriteLine("Printing string: {0}", s);
      }
      static void Main(string[] args)
      {
         Printdata p = new Printdata();
         // استدعاء الدالة ذات الوسيط عدد صحيح
         p.print(5);
         // استدعاء الدالة ذات الوسيط العدد الكسري
         p.print(500.263);
         // استدعاء الدالة ذات الوسيط النصي
         p.print("Hello C++");
         Console.ReadKey();
      }
   }
}

ناتج الكود دالة الحمل الزائد:-

Printing int: 5
Printing float: 500.263
Printing string: Hello C++


تعدد الاشكال الديناميكي:-

لغة سي الشارب تسمح بإنشاء فئات مجردة (سيتم شرحها لاحقا ان شاء الله) الت تسمح بتزويد فئات جزئية partial class التي تطبق الواجهات . ويتم اكتمال تنفيذه عندما ترث قفئة مشتقة منه.

الفئات المجردة abstract class

هي فئات تحتوي على دوال مجردة اي ان لا يوجد فيها اي كود يتم تنفيذه.ويجب اخذ القواعد التالية بعين الاعتبار.

1- لا يمكن انشاء مثيلات من الفئة اي كائن منها.
2- لا يمكن انشاء دالة مجردة خارج فئة مجردة.
3- عندما يتم تعريف بانها مغلقة أو مختومة sealed.فأنه لايمكن وراثتها والفئات المجردة لايمكن تصريحها كفئة مختومة.


الكود التالي يوضح الفئات المجردة.

using System;
namespace PolymorphismApplication
{
   abstract class Shape  //الفئة المجردة
   {
      public abstract int area();
   }
   class Rectangle:  Shape //وراثة الفئة
   {
      private int length;
      private int width;
      public Rectangle( int a=0, int b=0)
      {
         length = a;
         width = b;
      }
      public override int area () // إعادة استخدام الدالة 
      { 
         Console.WriteLine("Rectangle class area :");
         return (width * length); 
      }
   }

   class RectangleTester
   {
      static void Main(string[] args)
      {
         Rectangle r = new Rectangle(10, 7);
         double a = r.area();
         Console.WriteLine("Area: {0}",a);
         Console.ReadKey();
      }
   }
}

كود ناتج الفئة المجردة

Rectangle class area :
Area: 70

عندما تكون هناك دالة تريد استخدامها في الفئة المشتقة فانك تستخدم الدالة الافتراضية virtual .فالدالة الافتراضية يمكن تنفيذها بصورة مختلفة في الفئة الوارثة وعند استدعاء هذه الدوال تنفذ وقت التشغيل.تعدد الاشكال الديناميكية يتم تطبيقه من قبل الفئات المجردة والدوال الافتراضية.

مثال على الفئات المجردة والدوال الافتراضية:-

using System;
namespace PolymorphismApplication
{
   class Shape 
   {
      protected int width, height;
      public Shape( int a=0, int b=0)
      {
         width = a;
         height = b;
      }
      public virtual int area()
      {
         Console.WriteLine("Parent class area :");
         return 0;
      }
   }
   class Rectangle: Shape
   {
      public Rectangle( int a=0, int b=0): base(a, b)
      {

      }
      public override int area ()
      {
         Console.WriteLine("Rectangle class area :");
         return (width * height); 
      }
   }
   class Triangle: Shape
   {
      public Triangle(int a = 0, int b = 0): base(a, b)
      {
      
      }
      public override int area()
      {
         Console.WriteLine("Triangle class area :");
         return (width * height / 2); 
      }
   }
   class Caller
   {
      public void CallArea(Shape sh)
      {
         int a;
         a = sh.area();
         Console.WriteLine("Area: {0}", a);
      }
   }  
   class Tester
   {
      
      static void Main(string[] args)
      {
         Caller c = new Caller();
         Rectangle r = new Rectangle(10, 7);
         Triangle t = new Triangle(10, 5);
         c.CallArea(r);
         c.CallArea(t);
         Console.ReadKey();
      }
   }
}

ناتج مثال على الفئات المجردة والدوال الافتراضية:-

Rectangle class area:
Area: 70
Triangle class area:
Area: 25



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 


8/12/2013

0 comments :

Post a Comment