• 0
  • مالي خلق
  • أتهاوش
  • متضايق
  • مريض
  • مستانس
  • مستغرب
  • مشتط
  • أسولف
  • مغرم
  • معصب
  • منحرج
  • آكل
  • ابكي
  • ارقص
  • اصلي
  • استهبل
  • اضحك
  • اضحك  2
  • تعجبني
  • بضبطلك
  • رايق
  • زعلان
  • عبقري
  • نايم
  • طبيعي
  • كشخة
  • النتائج 1 إلى 3 من 3

    الموضوع: درس القوالب Templates-الدرس الأول, احد المواضيع المتعلقة بالبرمجة الغرضية التوجه OOP

    1. #1
      التسجيل
      28-09-2003
      المشاركات
      230
      المواضيع
      25
      شكر / اعجاب مشاركة

      درس القوالب Templates-الدرس الأول, احد المواضيع المتعلقة بالبرمجة الغرضية التوجه OOP

      بسم الله الرحمن الرحيم

      أقدم هذا الدرس المهم جدا في البرمجة الغرضية التوجه object - oriented programming سنتكلم عن القوالب templates .

      القوالب هي طريقة اختصارية للتحميل الزائد وتوفر لنا الوقت والجهد من كتابة تحميل زائد لأي دالة .
      قبل ان ندرس القوالب على البرمجة الغرضية التوجه OOP سنقوم بدراستها على الدوال (التوابع - الوظائف) Function لكي نوضح آليه عملها والفائدة المرجؤة من ذلك .
      Chapter -1

      للتصريح عن قالب معين نستخدم الكلمة class او نستخدم الكلمة typename
      مثال:
      كود:
      template<class T>
      أو :
      كود:
      template<typename T>
      بهذه الطريقة نكون قد صرحنا عن قالب T يمثل نوعية النمط المستخدم لاحقا .
      عند استخدام T كوسيط في أي دالة سيكون عبارة عن وسيط وهمي ! .
      ويتسبب عدم كتابة الكلمة class او الكلمة typename قبل نمط كل وسيط وهمي ظمن قالب لدالة ما بحدوث خطأ قواعدي !! .

      سنقوم الان بإنشاء دالة array تأخذ وسطين أحدهما مصفوفة والاخر عدد يمثل عدد عناصر المصفوفة , تقوم الدالة بطباعة العناصر كلا بصف مستقل .

      كود:
      #include<iostream>
      using std::cout;
      using std::endl;
      
      template<class T>
      void array(T *x,int a)
      {
      	for(int i=0;i<a;i++)
      	cout<<x[i]<<endl;
      }
      main()
      {
      	int x[]={1,2,3,4,5};
      	double y[]={1.5,2.5,1.9,1.4};
      	char z[]="Template";
      
      	array(x,(sizeof(x)/4));
      	array(y,(sizeof(y)/8));
      	array(z,sizeof(z));
      	return 0;
      }
      نلاحظ من خلال المثال السابق بأن المخرجات ستكون
      1
      2
      3
      4
      5
      1.5
      2.5
      1.9
      1.4
      T
      e
      m
      p
      l
      a
      t
      e

      هكذا نكون قد اوضحنا آلية عمل القوالب على الدوال , يتبقى لنا الان ان نعرف كيفية استخدامها على الصفوف .
      Chapter -2
      من خلال المثال التالي , سنقوم بتصميم صف (صنف,فئة)class سنسميه Ali سيحتوي على دالة print تأخذ وسيط وهمي (قالب) وتقوم بطباعته على حسب عدد المرات والتي يتم تحديدها عند اشتقاق غرض من الصف (اي عن طريق دالة البناء).
      تقوم الدالة Sure بالتأكد من ان عملية الطباعة ماتزال مستمرة , أي انها تعيد قيمة bool من خلالها تساوي احد المعطيات(متغير خاص) بالمطعى الخاص بأخذ العدد المطلوب لتكرار عملية الطباعة والذي يتم اعطائة القيمة بواسطة تابع البناء .
      كود:
      #include<iostream>
      using namespace std;
      template <class T>
      class Ali
      {
      public:
      	Ali(int=1);
      	bool print(T);
      	bool Sure()
      {
      	return y==x;
      }
      private:
      	int x;
      	int y;
      };
      template<class T>
      Ali<T>::Ali(int a):x(a),y(0){}
      
      template<class T>
      bool Ali<T>::print(T a)
      {
      	if(!Sure())
      	{
      		cout<<a<<endl;
      		y++;
      		return true;
      	}
      	else
      		return false;
      }
      
      main()
      {
      	Ali<int> i(3);
      	Ali<double> d(2);
      	Ali<char*> c(4);
      
      
      
      
      
      	while(i.print(15)){}
      	while(d.print(15.50)){}
      	while(c.print("Ali")){}
      
      
      	return 0;
      }
      ستكون المخرجات : تكرار العدد الصحيح 15 ثلاث مرات , ايضا تكرار العدد المضاعف 15.5 مرتين , ايضا تكرار كلمة Ali اربع مرات .

      الدوال مع قالب الصف
      Chapter -3
      سنقوم الان باستخدام الصف السابق بكتابة برنامج جديد .
      سنوضح من خلال هذا البرنامج كيفية عمل القوالب مع الدوال التي يكون احد وسطائها قالب صف.
      يحتوي البرنامج على دالة fun تأخذ وسيطين الأول غرض من صف Ali والوسيط الثاني سيكون وسيط وهمي لنوع من البيانات .

      كود:
      #include<iostream>
      using namespace std;
      template <class T>
      class Ali
      {
      public:
      	Ali(int=1);
      	bool print(T);
      	bool Sure()
      {
      	return y==x;
      }
      private:
      	int x;
      	int y;
      };
      template<class T>
      Ali<T>::Ali(int a):x(a),y(0){}
      
      template<class T>
      bool Ali<T>::print(T a)
      {
      	if(!Sure())
      	{
      		cout<<a<<endl;
      		y++;
      		return true;
      	}
      	else
      		return false;
      }
      template<class T>
      void fun(Ali<T> &m,T a)
      {
      	while(m.print(a))
      	{}
      }
      
      
      main()
      {
      	Ali<int> i(3);
      	Ali<double> d(2);
      	Ali<char*> c(4);
      
      
      
      
      
      
      	fun(i,15);
      	fun(d,15.50);
      	fun(c,"Ali");
      	return 0;
      }
      ستكون المخرجات ايضا :تكرار العدد الصحيح 15 ثلاث مرات , ايضا تكرار العدد المضاعف 15.5 مرتين , ايضا تكرار كلمة Ali اربع مرات .

      Chapter -4
      نقوم اولا بتعريف الصف class بأنه "قالب صف" والذي يسمى بالمكدس Stack بواسطة تعريف القالب , يقوم المترجم بواسطة نص برمجي غير ظاهر للمستخدم او المبرمج بتعريف النمط T على انه النمط المرفق عند اشتقاق الغرض مثلا int او double بالنسبة للدوال داخل الصف يتم تعريف الدوال التي تأخذ وسيط وهمي "قالب" خارج تعريف الصف وباستخدام العملية الثنائية :: مع اسم القالب الصف
      كود:
      Ali <T>
      لكي نحدد مجال الرؤية لتعريف الدوال الخاصة بالمكدس .

      في main نقوم باشتقاق الغرض من الصف Ali كما تعودنا ولكن يجب تحديد نوعية النمط للمكدس ليتم التعامل معه مستقبلاً .

      بهذا اكون قد انهيت الدرس الأول .
      اتمنى ان يكون قد حاز على رضاكم واستحسانكم .
      تقبلوا تحياتي

    2. #2
      التسجيل
      29-01-2004
      الدولة
      الحمدلله -- الكويت -- ^_^
      المشاركات
      2,987
      المواضيع
      83
      شكر / اعجاب مشاركة

      رد: درس القوالب Templates-الدرس الأول, احد المواضيع المتعلقة بالبرمجة الغرضية التوجه OOP

      يـُرفع لاهميته و فائدته

    3. #3
      الصورة الرمزية drbmsh
      drbmsh غير متصل عضو مميز في منتدى البرمجة
      التسجيل
      06-02-2005
      الدولة
      EGYPT
      المشاركات
      314
      المواضيع
      43
      شكر / اعجاب مشاركة

      رد: درس القوالب Templates-الدرس الأول, احد المواضيع المتعلقة بالبرمجة الغرضية التوجه OOP

      الف شكر ولكن ممكن استفسار بسيط
      هل الامثلة التي تضعها عن c++ .net
      والسؤال الثاني هل توجد دورة بالتفصيل الممل عن c++.net تبدأ من مستوى المبتدئين وصولا بهم اللى الاحتراف وشكرااااااااااااااااااااا

    ضوابط المشاركة

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