الطريقة (برمجة حاسوبية)

الطريقة في البرمجة الموجهة للكائنات (OOP) هي إجراء مرتبط بكائن ، وعادة ما تكون رسالة أيضًا . يتكون الكائن من بيانات الحالة والسلوك ؛ وتشكل هذه البيانات واجهة تحدد كيفية استخدام الكائن. الطريقة هي سلوك كائن يتم تحديده بواسطة مستخدم.

يتم تمثيل البيانات كخصائص للكائن، ويتم تمثيل السلوكيات كطرق. على سبيل المثال، Windowيمكن أن يحتوي الكائن على طرق مثل openو close، بينما تكون حالته (سواء كانت مفتوحة أو مغلقة في أي نقطة زمنية معينة) خاصية.

في البرمجة القائمة على الفئة ، يتم تعريف الطرق داخل فئة ، وتكون الكائنات عبارة عن حالات لفئة معينة. إحدى أهم القدرات التي توفرها الطريقة هي تجاوز الطريقة - يمكن استخدام نفس الاسم (على سبيل المثال، area) لأنواع مختلفة متعددة من الفئات. يسمح هذا للكائنات المرسلة باستدعاء السلوكيات وتفويض تنفيذ تلك السلوكيات إلى الكائن المتلقي. تحدد الطريقة في برمجة Java سلوك كائن الفئة. على سبيل المثال، يمكن لكائن إرسال areaرسالة إلى كائن آخر ويتم استدعاء الصيغة المناسبة سواء كان الكائن المتلقي هو rectangle، circle، triangle، إلخ.

توفر الطرق أيضًا الواجهة التي تستخدمها الفئات الأخرى للوصول إلى خصائص الكائن وتعديلها؛ وهذا ما يُعرف بالتغليف . التغليف والتجاوز هما الميزتان الأساسيتان اللتان تميزان بين الطرق ومكالمات الإجراءات. [1]

التجاوز والتحميل الزائد

تعد تجاوز الطريقة والتحميل الزائد من أهم الطرق التي تختلف بها الطريقة عن الإجراء التقليدي أو استدعاء الوظيفة. يشير التجاوز إلى إعادة تعريف فئة فرعية لتنفيذ طريقة من فئتها العليا. على سبيل المثال، findAreaقد تكون طريقة محددة على فئة الشكل، [2] triangle ، إلخ. كل منها يحدد الصيغة المناسبة لحساب مساحتها. تكمن الفكرة في النظر إلى الكائنات على أنها "صناديق سوداء" بحيث يمكن إجراء تغييرات على الأجزاء الداخلية للكائن بأقل تأثير على الكائنات الأخرى التي تستخدمه. يُعرف هذا بالتغليف ويهدف إلى تسهيل صيانة الكود وإعادة استخدامه.

من ناحية أخرى، يشير التحميل الزائد للطريقة إلى التمييز بين التعليمات البرمجية المستخدمة للتعامل مع رسالة بناءً على معلمات الطريقة. إذا نظر المرء إلى الكائن المستقبل باعتباره المعلمة الأولى في أي طريقة، فإن التجاوز هو مجرد حالة خاصة من التحميل الزائد حيث يعتمد الاختيار على المعلمة الأولى فقط. يوضح مثال Java البسيط التالي الفرق:

طرق الوصول والتحوير والإدارة

تُستخدم طرق الوصول لقراءة قيم بيانات الكائن. تُستخدم طرق التعديل لتعديل بيانات الكائن. تُستخدم طرق الإدارة لتهيئة وتدمير كائنات فئة ما، مثل المنشئين والمدمرين.

توفر هذه الطرق طبقة تجريد تسهل التغليف والوحدات النمطية . على سبيل المثال، إذا قدمت فئة حساب مصرفي getBalance()طريقة وصول لاسترداد الرصيد الحالي (بدلاً من الوصول مباشرة إلى حقول بيانات الرصيد)، فيمكن للمراجعات اللاحقة لنفس الكود تنفيذ آلية أكثر تعقيدًا لاسترداد الرصيد (على سبيل المثال، جلب قاعدة البيانات )، دون الحاجة إلى تغيير الكود التابع. إن مفاهيم التغليف والوحدات النمطية ليست فريدة من نوعها في البرمجة الموجهة للكائنات. في الواقع، من نواح كثيرة، فإن النهج الموجه للكائنات هو ببساطة الامتداد المنطقي للأنماط السابقة مثل أنواع البيانات المجردة والبرمجة المنظمة . [3]

البناة

المنشئ هو طريقة يتم استدعاؤها في بداية عمر الكائن لإنشاء الكائن وتهيئته، وهي عملية تسمى الإنشاء (أو التجسيد ). قد تتضمن التهيئة الحصول على الموارد. قد تحتوي المنشئات على معلمات ولكنها لا ترجع قيمًا عادةً في معظم اللغات. انظر المثال التالي في Java :

public class Main { String _name ; int _roll ;   
     
     

    Main ( String name ، int roll ) { // طريقة البناء this._name = name ؛ this._roll = roll ؛ } }     
          
          
    

مدمر

المدمر هو طريقة يتم استدعاؤها تلقائيًا في نهاية عمر الكائن، وهي عملية تسمى التدمير . لا يسمح التدمير في معظم اللغات بحجج طريقة التدمير ولا بقيم الإرجاع. يمكن تنفيذ المدمرات لأداء مهام التنظيف والمهام الأخرى عند تدمير الكائن .

المُنهيات

في اللغات التي تعتمد على جمع القمامة ، مثل Java ، [4] : 26، 29  C# ، [5] : 208–209  و Python ، تُعرف المدمرات باسم المُنهيات . لها غرض ووظيفة مشابهين للمدمرات، ولكن بسبب الاختلافات بين اللغات التي تستخدم جمع القمامة واللغات التي تستخدم إدارة الذاكرة اليدوية، فإن التسلسل الذي يتم استدعاؤها به مختلف.

الأساليب المجردة

الطريقة المجردة هي الطريقة التي تحتوي على توقيع فقط ولا تحتوي على هيئة تنفيذ . وغالبًا ما تُستخدم لتحديد أن الفئة الفرعية يجب أن توفر تنفيذًا للطريقة، كما هو الحال في الفئة المجردة . تُستخدم الطرق المجردة لتحديد الواجهات في بعض لغات البرمجة. [6]

مثال

يُظهر كود Java التالي فئة مجردة تحتاج إلى التوسيع:

الصف المجرد Shape { abstract int area ( int h , int w ); // توقيع الطريقة المجردة }   
          

تمتد الفئة الفرعية التالية إلى الفئة الرئيسية:

الفئة العامة Rectangle تمتد إلى Shape { @Override int area ( int h , int w ) { return h * w ; } }     
    
         
           
    

إعادة التجريد

إذا قدمت فئة فرعية تنفيذًا لطريقة مجردة، فيمكن لفئة فرعية أخرى جعلها مجردة مرة أخرى. وهذا ما يسمى بإعادة التجريد .

في الممارسة العملية، يتم استخدام هذا نادرا.

مثال

في لغة C#، يمكن استبدال طريقة افتراضية بطريقة مجردة. (ينطبق هذا أيضًا على لغة Java، حيث تكون جميع الطرق غير الخاصة افتراضية.)

الفئة IA { public virtual void M () { } } فئة مجردة IB : IA { public override abstract void M (); // مسموح } 

         

    

         

يمكن أيضًا إعادة تلخيص الطرق الافتراضية للواجهات، مما يتطلب وجود فئات فرعية لتنفيذها. (ينطبق هذا أيضًا على Java.)

واجهة IA { void M () { } } واجهة IB : IA { مجردة void IA . M (); } الفئة C : IB { } // خطأ: الفئة 'C' لا تنفذ 'IA.M'. 

       

   

      

      

طرق الفصل

طرق الفئة هي طرق يتم استدعاؤها على فئة بدلاً من مثيل. تُستخدم عادةً كجزء من نموذج ميتا للكائن . أي أنه لكل فئة، يتم إنشاء مثيل محدد لكائن الفئة في النموذج الميتا. تسمح بروتوكولات النموذج الميتا بإنشاء الفئات وحذفها. وبهذا المعنى، فهي توفر نفس الوظيفة التي توفرها المنشئات والمدمرات الموضحة أعلاه. ولكن في بعض اللغات مثل Common Lisp Object System (CLOS)، يسمح النموذج الميتا للمطور بتغيير نموذج الكائن ديناميكيًا في وقت التشغيل: على سبيل المثال، لإنشاء فئات جديدة، وإعادة تعريف التسلسل الهرمي للفئة، وتعديل الخصائص، وما إلى ذلك.

طرق خاصة

تعتمد الطرق الخاصة بشكل كبير على اللغة وقد تدعم اللغة بعض الطرق الخاصة المحددة هنا أو لا تدعمها كلها. قد يقوم مُجمِّع اللغة تلقائيًا بإنشاء طرق خاصة افتراضية أو قد يُسمح للمبرمج بتحديد طرق خاصة اختياريًا. لا يمكن استدعاء معظم الطرق الخاصة بشكل مباشر، بل يقوم المُجمِّع بإنشاء كود لاستدعائها في الأوقات المناسبة.

الأساليب الثابتة

إن الطرق الثابتة تهدف إلى أن تكون ذات صلة بجميع حالات الفئة وليس بأي حالة محددة. وهي تشبه المتغيرات الثابتة في هذا المعنى. ومن الأمثلة على ذلك طريقة ثابتة لجمع قيم جميع المتغيرات في كل حالة من حالات الفئة. على سبيل المثال، إذا كانت هناك فئة، Productفقد يكون لديها طريقة ثابتة لحساب متوسط ​​سعر جميع المنتجات.

يمكن استدعاء طريقة ثابتة حتى لو لم توجد أي مثيلات للفئة بعد. تسمى الطرق الثابتة "ثابتة" لأنها يتم حلها في وقت التجميع بناءً على الفئة التي يتم استدعاؤها عليها وليس ديناميكيًا كما هو الحال مع طرق المثيل، والتي يتم حلها بشكل متعدد الأشكال بناءً على نوع وقت التشغيل للكائن.

أمثلة

في جافا

في Java، الطريقة الثابتة المستخدمة بشكل شائع هي:

الرياضيات.الحد الأقصى (أ مزدوج، ب مزدوج)

لا تمتلك هذه الطريقة الثابتة كائنًا مالكًا ولا يتم تشغيلها على مثيل. تتلقى جميع المعلومات من وسيطاتها. [2]

مشغلو تخصيص النسخ

تعرف مشغلات تعيين النسخ الإجراءات التي يجب على المترجم تنفيذها عند تعيين كائن فئة إلى كائن فئة من نفس النوع.

طرق المشغل

تحدد طرق المشغل أو تعيد تعريف رموز المشغل وتحدد العمليات التي سيتم إجراؤها باستخدام الرمز ومعلمات الطريقة المرتبطة به. مثال C++:

#تضمين <سلسلة> 

الفئة Data { public : bool operator < ( const Data & data ) const { return roll_ < data . roll_ ; } bool operator == ( const Data & data ) const { return name_ == data . name_ && roll_ == data . roll_ ; }  
 
            
       
           
  

 خاص : 
std :: سلسلة name_ ؛ int roll_ ؛   
   

الدوال الأعضاء في لغة C++

تم توسيع بعض اللغات الإجرائية بقدرات موجهة للكائنات للاستفادة من مجموعات المهارات الكبيرة والرمز القديم لتلك اللغات ولكنها لا تزال توفر فوائد التطوير الموجه للكائنات. ربما يكون المثال الأكثر شهرة هو C++ ، وهو امتداد موجه للكائنات للغة البرمجة C. نظرًا لمتطلبات التصميم لإضافة النموذج الموجه للكائنات إلى لغة إجرائية موجودة، فإن تمرير الرسائل في C++ لديه بعض القدرات والمصطلحات الفريدة. على سبيل المثال، في C++ تُعرف الطريقة باسم دالة العضو . يحتوي C++ أيضًا على مفهوم الوظائف الافتراضية وهي وظائف عضو يمكن تجاوزها في الفئات المشتقة والسماح بالإرسال الديناميكي .

الوظائف الافتراضية

الوظائف الافتراضية هي الوسيلة التي يمكن من خلالها لفئة C++ تحقيق سلوك متعدد الأشكال. الوظائف غير الافتراضية ، أو الطرق العادية ، هي تلك التي لا تشارك في تعدد الأشكال .

مثال C++:

#تضمين <iostream> #تضمين <الذاكرة> 
 

الفئة Super { public : virtual ~ Super () = default ;  
 
     

  void افتراضي IAm () { std :: cout << "أنا الفئة العليا! \n " ; } };       


class Sub : public Super { public : void IAm () override { std :: cout << "أنا الفئة الفرعية! \n " ; } };     
 
         


int main () { std :: unique_ptr < Super > inst1 = std :: make_unique < Super > (); std :: unique_ptr < Super > inst2 = std :: make_unique < Sub > ();  
     
     

  inst1 -> أنا (); // المكالمات |سوبر::IAm|. inst2 -> أنا ()؛ // المكالمات |Sub::IAm|. }  
    

انظر أيضا

ملحوظات

  1. ^ "ما هو الكائن؟". oracle.com . Oracle Corporation . تم الاسترجاع في 13 ديسمبر 2013 .
  2. ^ ab Martin, Robert C. (2009). Clean Code: A Handbook of Agile Software Craftsmanship . Prentice Hall. ص. 296. ISBN 978-0-13-235088-4.
  3. ^ ماير، برتراند (1988). بناء البرمجيات الموجهة للكائنات . كامبريدج: سلسلة برنتيس هول الدولية في علوم الكمبيوتر. ص 52-54. رقم ISBN 0-13-629049-3.
  4. ^ بلوخ، جوشوا (2018). "دليل لغة البرمجة الفعالة جافا" (الطبعة الثالثة). أديسون ويسلي. رقم ISBN 978-0134685991.
  5. ^ البحاري، يوسف. C#10 باختصار . أورايلي. رقم ISBN 978-1-098-12195-2.
  6. ^ "الأساليب والفئات المجردة". oracle.com . Oracle Java Documentation . تم الاسترجاع في 11 ديسمبر 2014 .

مراجع

  • جانا، ديباشيش (1 يناير 2005). نموذج البرمجة بلغة سي++ والبرمجة الموجهة للكائنات. شركة بي إتش آي ليرنينج المحدودة. رقم ISBN 978-81-203-2871-6.
  • سينجوبتا، بروبال (1 أغسطس 2004). البرمجة الموجهة للكائنات: الأساسيات والتطبيقات. شركة PHI Learning Pvt. Ltd. رقم ISBN 978-81-203-1258-6.
  • سفينك، جوران (2003). البرمجة الموجهة للكائنات: استخدام لغة C++ في الهندسة والتكنولوجيا. Cengage Learning. ISBN 0-7668-3894-3.
  • Balagurusamy (2013). البرمجة الموجهة للكائنات باستخدام C++. Tata McGraw-Hill Education. ISBN 978-1-259-02993-6.
  • كيرش-برينز، أولا؛ برينز، بيتر (2002). دليل كامل للبرمجة بلغة سي++. جونز وبارتليت ليرنينج. رقم ISBN 978-0-7637-1817-6.
  • كونجر، ديفيد (2006). إنشاء الألعاب بلغة C++: دليل خطوة بخطوة. نيو رايدرز. رقم ISBN 978-0-7357-1434-2.
  • سكينر، إم تي (1992). كتاب C++ المتقدم. دار نشر سيليكون. رقم ISBN 978-0-929306-10-0.
  • الحب (1 سبتمبر 2005). تطوير نواة لينكس. بيرسون للتعليم. رقم ISBN 978-81-7758-910-8.
  • دهوري، ساتشيداناندا؛ جاجاديف، ألوك كومار؛ راث، أميا كومار (8 مايو 2007). البرمجة الشيئية باستخدام C++. فاي التعلم الجندي. المحدودة رقم ISBN 978-81-203-3085-6.
Retrieved from "https://en.wikipedia.org/w/index.php?title=Method_(computer_programming)&oldid=1224661009#Member_functions_in_C++"
Original text
Rate this translation
Your feedback will be used to help improve Google Translate