JavaRush /مدونة جافا /Random-AR /طرق وفئات جافا النهائية
articles
مستوى

طرق وفئات جافا النهائية

نشرت في المجموعة
من خلال الإشارة إلى طريقة فئة مع معدل final، نعني أنه لا توجد فئة مشتقة قادرة على تجاوز هذه الطريقة عن طريق تغيير تنفيذها الداخلي. بمعنى آخر، نحن نتحدث عن النسخة النهائية من الطريقة. يمكن أيضًا وضع علامة على الفصل ككل على أنه final. طرق وفئات جافا النهائية - 1
final class NoExtending {
// …
}
الفئة التي تم وضع علامة عليها على أنها finalلا يمكن توريثها وتكتسب جميع أساليبها الخاصية بشكل غير مباشر final. يمكن أن يؤدي استخدام الميزة finalفي إعلانات الفئات والأساليب إلى زيادة مستوى أمان التعليمات البرمجية. إذا تم تجهيز الفصل بمعدِّل final، فلن يتمكن أحد من تمديد الفصل ومن المحتمل أن يفسخ عقده في هذه العملية. إذا كانت العلامة finalتشير إلى طريقة ما، فيمكنك أن تثق تمامًا في تنفيذها الداخلي في جميع المواقف دون خوف من "التزوير". ومن المناسب استخدامها final، على سبيل المثال، في الإعلان عن طريقة تتطلب التحقق من كلمة المرور التي أدخلها المستخدم للتأكد من التنفيذ الدقيق لما قصدته الطريقة في الأصل. لن يتمكن المهاجم المحتمل من تغيير التنفيذ الأصلي لمثل هذه الطريقة عن طريق "إدخال" نسخة متجاوزة منها إلى البرنامج، والتي، على سبيل المثال، تُرجع دائمًا القيمة الحقيقية، مما يشير إلى التسجيل الناجح للمستخدم، بغض النظر عن الأمر كلمة المرور التي أدخلها فعلا. لديك الحق، إذا سمح الوضع المحدد، بالمضي قدمًا وإعلان finalالفصل بأكمله كفصل دراسي؛ سوف تكتسب الطريقة ValidatePasswordنفس الخاصية بشكل غير مباشر. يفرض استخدام المُعدِّل finalفي طريقة أو إعلان فئة قيودًا خطيرة على إمكانية مواصلة استخدام الكود وتطويره. يعد استخدام finalالطريقة في الإعلان مؤشرًا أكيدًا على أن تنفيذ الطريقة مستقل بذاته وكامل تمامًا. المبرمجون الآخرون الذين يرغبون في استخدام فصلك، وتوسيع وظائفه لتناسب احتياجاتهم الخاصة، سيكونون محدودين في اختيار الوسائل لتحقيق هدفهم أو محرومين منها تمامًا. من خلال وضع علامة على finalالفصل ككل، سوف تقوم بتعطيل إمكانية توريثه ومن المحتمل أن تقلل بشكل كبير من فائدته للآخرين. عندما تكون على وشك استخدام المُعدِّل final، تأكد مما إذا كنت مستعدًا لمثل هذه التضحيات وما إذا كان الأمر يستحق القيام بها. في كثير من الحالات، لتحقيق مستوى كافٍ من أمان التعليمات البرمجية، ليس من الضروري تعيين الفئة بأكملها على أنها final- فمن الممكن تمامًا الحفاظ على قابلية توسيع الفئة عن طريق وضع علامة على finalعناصرها الهيكلية "الحرجة" فقط باستخدام المُعدِّل. في هذه الحالة، ستترك الوظائف الرئيسية للفئة سليمة وفي نفس الوقت تسمح بوراثتها مع إضافة أعضاء جدد، ولكن دون إعادة تعريف الأعضاء "القدامى". بالطبع، الحقول التي يتم الوصول إليها عن طريق كود الطرق finalيجب أن يتم تعيينها بدورها على أنها finalإما private، وإلا فإن أي فئة مشتقة ستكون قادرة على تغيير محتوياتها، مما يؤثر على سلوك الطرق المقابلة. هناك تأثير آخر لاستخدام المعدل finalيتعلق بتبسيط مشكلة تحسين الكود التي يحلها المترجم. هذا ما يحدث عندما يتم استدعاء الطريقة التي لم يتم وضع علامة عليهاfinal، يحدد نظام وقت التشغيل الفئة الفعلية للكائن، ويربط الاستدعاء بالكود الأكثر ملاءمة من مجموعة الأساليب المحملة بشكل زائد، وينقل التحكم إلى هذا الكود. ولكن، على سبيل المثال، إذا تم تعيين الطريقة الموجودة getNameفي مثال الفئة Attrالذي تمت مناقشته سابقًا على أنها final، فقد تكون عملية استدعائها مبسطة بشكل ملحوظ. في الحالات الأكثر تافهة، مثل الحالة المتعلقة بـ getName، يمكن للمترجم ببساطة استبدال استدعاء الأسلوب بالرمز الأساسي الخاص به. تسمى هذه الآلية بتضمين الكود. عند استخدام الإصدار المضمن من الطريقة، getNameيتم تنفيذ التعبيرين التاليين بنفس الطريقة تمامًا:
system.out.println("id = " + rose.name);
system.out.println("id = " + rose.getName());
على الرغم من أن التعبيرات المذكورة أعلاه متكافئة، إلا أن الثانية لا تزال تتمتع بميزة، حيث getNameتسمح لك الطريقة بإعطاء حقل الاسم خاصية للقراءة فقط، وأن يكون لرمز الفئة درجة معينة من التجريد، مما يسمح لك بتغيير بحرية أكبر تنفيذ الصف. يمكن للمترجم تطبيق نفس مخطط التحسين على privateالأساليب statiс، لأنها لا تسمح أيضًا بالتجاوز. يؤدي استخدام المُعدِّل finalفي إعلانات الفئة أيضًا إلى جعل بعض عمليات التحقق من النوع أكثر كفاءة. في هذه الحالة، يمكن تنفيذ العديد من هذه العمليات بالفعل في مرحلة التجميع وبالتالي يتم اكتشاف الأخطاء المحتملة في وقت أبكر بكثير. إذا واجه المترجم مرجعًا لفئة ما في النص المصدر final، فيمكن "التأكد" من أن الكائن المقابل من النوع المحدد. يستطيع المترجم أن يحدد على الفور المكان الذي تشغله الفئة في التسلسل الهرمي العام للفئة والتحقق مما إذا كان يتم استخدامه بشكل صحيح أم لا. إذا لم يتم تطبيق المعدل final، فسيتم إجراء الفحوصات المقابلة فقط في مرحلة تنفيذ البرنامج. تمرين 3.4. هل يُنصح بإدراج المعدل النهائي في إعلانات الطريقة (وإذا كان الأمر كذلك، أي منها) للمركبة وفئات مركبات الركاب ؟ رابط المصدر الأصلي: http://src-code.net/metody-i-klassy-final-java
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION