JavaRush /جاوا بلاگ /Random-UR /جاوا کے حتمی طریقے اور کلاسز
articles
سطح

جاوا کے حتمی طریقے اور کلاسز

گروپ میں شائع ہوا۔
موڈیفائر کے ساتھ کلاس کے طریقہ کار کو ظاہر کرنے سے final، ہمارا مطلب ہے کہ کوئی بھی اخذ شدہ کلاس اس طریقہ کو اپنے اندرونی نفاذ کو تبدیل کر کے اوور رائڈ کرنے کے قابل نہیں ہے۔ دوسرے الفاظ میں، ہم طریقہ کار کے آخری ورژن کے بارے میں بات کر رہے ہیں۔ مجموعی طور پر کلاس کو بھی بطور نشان زد کیا جا سکتا ہے final۔ جاوا کے حتمی طریقے اور کلاسز - 1
final class NoExtending {
// …
}
ایک طبقے کو بطور نشان زد finalوراثت میں نہیں مل سکتا اور اس کے تمام طریقے بالواسطہ طور پر جائیداد حاصل کرتے ہیں final۔ کلاسز اور طریقوں کے اعلانات میں فیچر کا استعمال finalکوڈ سیکیورٹی کی سطح کو بڑھا سکتا ہے۔ اگر کوئی کلاس ایک ترمیم کنندہ سے لیس ہے final، تو کوئی بھی کلاس کو بڑھا نہیں سکتا اور شاید اس عمل میں اس کا معاہدہ توڑ سکتا ہے۔ اگر کوئی نشان finalکسی طریقہ کی نشاندہی کرتا ہے، تو آپ "جعل سازی" کے خوف کے بغیر تمام حالات میں اس کے اندرونی نفاذ پر مکمل اعتماد کر سکتے ہیں۔ مثال کے طور پر، اس طریقہ کار کے اعلان میں استعمال کرنا مناسب ہے finalجس میں صارف کے ذریعے داخل کردہ پاس ورڈ کی تصدیق کی ضرورت ہوتی ہے تاکہ اس بات کو یقینی بنایا جا سکے کہ طریقہ اصل میں کیا ارادہ رکھتا ہے۔ ایک ممکنہ حملہ آور اس طرح کے طریقہ کار کے اصل نفاذ کو پروگرام میں "سلپ" کرکے اس کا ایک اوور رائیڈ ورژن تبدیل نہیں کرسکے گا، جو کہ کہیے، ہمیشہ درست قیمت لوٹاتا ہے، صارف کی کامیاب رجسٹریشن کی نشاندہی کرتا ہے، چاہے پاس ورڈ کوئی بھی ہو۔ وہ اصل میں داخل ہوا. آپ کو حق حاصل ہے، اگر مخصوص صورتحال اجازت دیتی ہے، تو مزید آگے بڑھیں اور finalپوری کلاس کو ایک کلاس قرار دیں۔ طریقہ ValidatePasswordبالواسطہ طور پر وہی جائیداد حاصل کرے گا۔ کسی طریقہ یا کلاس ڈیکلریشن میں ترمیم کنندہ کا استعمال finalکوڈ کے مزید استعمال اور ترقی کے امکان پر سنگین پابندیاں عائد کرتا ہے۔ finalاعلان میں طریقہ کار کا استعمال اس بات کا یقینی اشارہ ہے کہ طریقہ کار پر عمل درآمد خود ساختہ اور مکمل طور پر مکمل ہے۔ دوسرے پروگرامرز جو آپ کی کلاس کو استعمال کرنا چاہتے ہیں، اس کے افعال کو اپنی ضروریات کے مطابق بڑھانا چاہتے ہیں، اپنے مقصد کو حاصل کرنے کے ذرائع کے انتخاب میں محدود ہوں گے یا ان سے مکمل طور پر محروم رہ جائیں گے۔ finalایک کلاس کو مجموعی طور پر نشان زد کرنے سے ، آپ اس کی وراثت میں ملنے کی صلاحیت کو غیر فعال کر دیں گے اور ممکنہ طور پر دوسروں کے لیے اس کی افادیت کو نمایاں طور پر کم کر دیں گے۔ جب آپ ترمیم کرنے والے کو استعمال کرنے والے ہیں final، تو یقینی بنائیں کہ آیا آپ ایسی قربانیوں کے لیے تیار ہیں اور کیا یہ ان کو بنانے کے قابل ہے۔ بہت سے معاملات میں، کافی حد تک کوڈ سیکیورٹی حاصل کرنے کے لیے، پوری کلاس کو اس طرح نامزد کرنا ضروری نہیں ہے final- صرف اس کے "اہم" ساختی عناصر کو ترمیم کنندہ کے ساتھ نشان زد کرکے کلاس کی توسیع پذیری کو محفوظ رکھنا کافی ممکن ہے final۔ اس صورت میں، آپ کلاس کے اہم کاموں کو برقرار رکھیں گے اور ساتھ ہی ساتھ نئے اراکین کے اضافے کے ساتھ اس کی وراثت کی اجازت دیں گے، لیکن "پرانے" کی نئی تعریف کیے بغیر۔ بلاشبہ، طریقوں کے کوڈ کے ذریعے حاصل کردہ فیلڈز کو بدلے میں یا تو finalکے طور پر نامزد کیا جانا چاہیے ، کیونکہ بصورت دیگر کوئی بھی اخذ شدہ کلاس متعلقہ طریقوں کے رویے کو متاثر کرتے ہوئے اپنے مواد کو تبدیل کر سکے گی۔ موڈیفائر کے استعمال کا ایک اور اثر مرتب کرنے والے کے ذریعہ حل شدہ کوڈ کی اصلاح کے مسئلے کو آسان بنانے سے متعلق ہے۔ ایسا اس وقت ہوتا ہے جب کوئی ایسا طریقہ جسے نشان زد نہیں کیا جاتا ہے کہا جاتا ہے۔finalprivatefinalfinal، رن ٹائم سسٹم آبجیکٹ کی اصل کلاس کا تعین کرتا ہے، کال کو اوور لوڈ شدہ طریقوں کے گروپ سے موزوں ترین کوڈ سے منسلک کرتا ہے، اور کنٹرول کو اس کوڈ میں منتقل کرتا ہے۔ 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