متى يجب أن أستخدم طرقًا ثابتة في الفصل وما هي الفوائد؟

StackOverflow https://stackoverflow.com/questions/2080150

سؤال

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

س: يحمل المتغير الثابت في طريقة ما قيمته حتى عند تنفيذ الطريقة ولكن يمكن الوصول إليه إلا في طريقة احتوائها ولكن ما هو أفضل تعريف للطريقة الثابتة؟

س: هل استدعاء الطريقة الثابتة دون إنشاء كائن من تلك الفئة هو الفائدة الوحيدة للطريقة الثابتة؟

س: ما هو النطاق الذي يمكن الوصول إليه للطريقة الثابتة؟

شكرًا

هل كانت مفيدة؟

المحلول

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

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

// This makes little sense
Math m = new Math();
float answer = m.sin(45);

// This would make more sense
float answer = Math.sin(45);

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

نصائح أخرى

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

يمكن استخدامها لتجميع الأساليب المتماسكة في فئة واحدة ، أو للعمل على كائنات من فصلها ، كما هو الحال في نمط المصنع.

بناء الجملة (PHP) للطرق الثابتة:

<?php
class Number {
    public static function multiply($a, $b) {
        return $a * $b;
    }
}
?>

رمز العميل:

echo Number::multiply(1, 2);

وهو أمر منطقي أكثر من:

$number = new Number();
echo $number->multiply(1, 2);

كما multiply() لا تستخدم الطريقة أي متغيرات فئة وبالتالي لا تتطلب مثيلًا Number.

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

المرة الوحيدة التي ترغب في استخدامها طريقة ثابتة في الفصل هي عندما لا تتطلب طريقة معينة مثيلًا لفصل. قد يكون هذا عند محاولة إرجاع مصدر بيانات مشترك (مثل Singleton) أو إجراء عملية لا تعدل الحالة الداخلية للكائن (string.format على سبيل المثال).

يفسر إدخال ويكيبيديا طرقًا ثابتة جيدًا: http://en.wikipedia.org/wiki/method_(computer_science)#static_methods

ترتبط المتغيرات الثابتة والأساليب الثابتة بالفئة ، وليس مثيلًا للفئة.

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

أحد الاستخدامات الشائعة للطرق الثابتة في المصطلح المُشغل المسماة. يرى: http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.8.

طرق ثابتة في PHP:

يمكن استدعاؤها دون إنشاء كائن فئة.

يمكن فقط استدعاء الأساليب الثابتة والوظيفة.

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

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

تتوفر العناصر الثابتة في كل مثيلات من الفصل ، بحيث يمكنك تعيين القيم التي تريد أن تكون متاحة لجميع أعضاء النوع.

لمزيد من القراءة رابط!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top