জাভাতে উত্তরাধিকার নিষিদ্ধ করার ভাল কারণগুলি কী কী, উদাহরণস্বরূপ একটি একক, ব্যক্তিগত প্যারামিটারলেস কনস্ট্রাক্টর ব্যবহার করে চূড়ান্ত ক্লাস বা ক্লাস ব্যবহার করে? কোনও পদ্ধতি চূড়ান্ত করার ভাল কারণগুলি কী কী?
জাভাতে উত্তরাধিকার নিষিদ্ধ করার ভাল কারণগুলি কী কী, উদাহরণস্বরূপ একটি একক, ব্যক্তিগত প্যারামিটারলেস কনস্ট্রাক্টর ব্যবহার করে চূড়ান্ত ক্লাস বা ক্লাস ব্যবহার করে? কোনও পদ্ধতি চূড়ান্ত করার ভাল কারণগুলি কী কী?
উত্তর:
আপনার সেরা রেফারেন্সটি হ'ল জোশুয়া ব্লচের দুর্দান্ত বই "কার্যকর জাভা" এর আইটেম 19, এটি "উত্তরাধিকারের জন্য নকশা এবং দস্তাবেজ বা অন্যথায় এটি নিষিদ্ধ" বলা হয়। (এটি দ্বিতীয় সংস্করণে আইটেম 17 এবং প্রথম সংস্করণে 15 আইটেম)) আপনার এটি সত্যই পড়া উচিত, তবে আমি সংক্ষেপে বলব।
পূর্বপুরুষের কাছ থেকে উত্তরাধিকার সূত্রে নকশাকৃত না হলে তাদের পিতামাতার সাথে উত্তরাধিকারসূত্রে প্রাপ্ত শ্রেণির মিথস্ক্রিয়াটি অবাক করে ও অবিশ্বাস্য হতে পারে।
ক্লাস দুই ধরণের মধ্যে আসা উচিত:
শ্রেণিগুলি প্রসারিত করার জন্য ডিজাইন করা হয়েছে এবং এটি কীভাবে করা উচিত তা বর্ণনা করার জন্য পর্যাপ্ত ডকুমেন্টেশন রয়েছে
ক্লাস চূড়ান্ত চিহ্নিত
আপনি যদি খাঁটি অভ্যন্তরীণ কোড লিখছেন তবে এটি কিছুটা ওভারকিল হতে পারে। তবে ক্লাস ফাইলে পাঁচটি অক্ষর যুক্ত করার সাথে যুক্ত অতিরিক্ত প্রচেষ্টা খুব ছোট small আপনি যদি কেবলমাত্র অভ্যন্তরীণ স্বচ্ছলতার জন্য লিখছেন তবে ভবিষ্যতের কোডার সর্বদা 'চূড়ান্ত' মুছে ফেলতে পারে - আপনি এটিকে একটি সতর্কতা বলে মনে করতে পারেন যে "এই শ্রেণিটি উত্তরাধিকারের কথা বিবেচনা করে তৈরি করা হয়নি"।
আপনি কোনও পদ্ধতি চূড়ান্ত করতে চাইতে পারেন যাতে ওভাররাইডিং ক্লাসগুলি অন্য পদ্ধতিতে গণ্য করা আচরণ পরিবর্তন করতে না পারে। কনস্ট্রাক্টরগুলিতে ডাকা পদ্ধতিগুলি প্রায়শই চূড়ান্ত হিসাবে ঘোষিত হয় যাতে অবজেক্ট তৈরি করার সময় আপনি কোনও অপ্রীতিকর বিস্ময় না পান।
final
।
এমন 3 টি ব্যবহারের ক্ষেত্রে রয়েছে যেখানে আপনি চূড়ান্ত পদ্ধতিতে যেতে পারেন।
ক্লাস ফাইনাল করার উদ্দেশ্য:
যাতে কোনও দেহ এই শ্রেণিগুলিকে প্রসারিত করতে না পারে এবং তাদের আচরণ পরিবর্তন করতে পারে।
উদাহরণস্বরূপ: মোড়কের ক্লাস পূর্ণসংখ্যা একটি চূড়ান্ত শ্রেণি। যদি সেই শ্রেণিটি চূড়ান্ত না হয়, তবে যে কোনও তার নিজের শ্রেণিতে পূর্ণসংখ্যার প্রসার ঘটাতে এবং পূর্ণসংখ্যার শ্রেণির প্রাথমিক আচরণ পরিবর্তন করতে পারে। এটি এড়াতে, জাভা সমস্ত র্যাপার ক্লাসকে চূড়ান্ত শ্রেণি হিসাবে তৈরি করেছিল।
DerivedInteger
, এটি এখনও মূল পূর্ণসংখ্যা শ্রেণিটি পরিবর্তন করে না এবং যে কেউ এটি ব্যবহার DerivedInteger
করে তা তাদের নিজস্ব ঝুঁকিতে করে, সুতরাং এখনও সমস্যা হয় না কেন এটি সমস্যা।
আপনি অপরিবর্তনীয় বস্তু তৈরি করতে চাইতে পারেন ( http://en.wikedia.org/wiki/Immutable_object ), আপনি একটি সিঙ্গলটন তৈরি করতে চাইতে পারেন ( http://en.wikedia.org/wiki/Singleton_pattern ) দক্ষতা, সুরক্ষা বা সুরক্ষার কারণে কাউকে এই পদ্ধতিটিকে ওভাররাইড করা থেকে বিরত রাখতে।
উত্তরাধিকার চেইনসোয়ের মতো - খুব শক্তিশালী তবে ভুল হাতে ভয়ঙ্কর। হয় আপনি উত্তরাধিকারসূত্রে প্রাপ্ত কোনও শ্রেণি নকশা করেন (যা নমনীয়তা সীমাবদ্ধ করতে এবং অনেক বেশি সময় নিতে পারে) অথবা আপনার এটি নিষিদ্ধ করা উচিত।
কার্যকর জাভা 2 য় সংস্করণ আইটেম 16 এবং 17, বা আমার ব্লগ পোস্ট "উত্তরাধিকার ট্যাক্স" দেখুন ।
হুম ... আমি দুটি বিষয় ভাবতে পারি:
আপনার কাছে এমন কোনও শ্রেণি থাকতে পারে যা নির্দিষ্ট সুরক্ষার সমস্যা নিয়ে কাজ করে। এটি সাবক্লাসিং করে এবং আপনার সিস্টেমটিকে এর সাবক্ল্যাসড সংস্করণে খাওয়ানোর মাধ্যমে, আক্রমণকারী নিরাপত্তা বিধিনিষেধকে বাধা দিতে পারে। যেমন আপনার অ্যাপ্লিকেশনটি প্লাগইনগুলিকে সমর্থন করতে পারে এবং যদি কোনও প্লাগইন আপনার সুরক্ষা সম্পর্কিত ক্লাসিকে কেবল সাবক্লাস করতে পারে, তবে এটির কৌশলটি কোনও উপায়ে এটির একটি সাবক্ল্যাসড সংস্করণ স্থানটিতে পাচার করতে ব্যবহার করতে পারে। যাইহোক, এটি বরং অ্যাপ্লিকেশন এবং এর মতো সানকে মোকাবেলা করার মতো কিছু, সম্ভবত এমন বাস্তববাদী ঘটনা নয়।
আরও বাস্তবসম্মত একটি হ'ল কোনও বিষয়টিকে পরিবর্তনযোগ্য করে তোলা যায়। যেমন স্ট্রিংগুলি অপরিবর্তনীয়, তাই আপনার কোডটি নিরাপদে এতে রেফারেন্স রাখতে পারে
String blah = someOtherString;
প্রথমে স্ট্রিংটি অনুলিপি করার পরিবর্তে। তবে, আপনি যদি স্ট্রিং সাবক্লাস করতে পারেন তবে আপনি এর সাথে এমন পদ্ধতি যুক্ত করতে পারেন যা স্ট্রিংয়ের মানটি পরিবর্তন করতে দেয়, এখন কোনও কোড আর নির্ভর করতে পারে না যে স্ট্রিংটি একইভাবে থাকবে যদি এটি উপরের মতো স্ট্রিংটি অনুলিপি করে, পরিবর্তে এটি অবশ্যই নকল করতে হবে স্ট্রিং।
আপনি যদি ক্লাস এবং পদ্ধতিগুলিকে চূড়ান্ত হিসাবে চিহ্নিত করেন তবে আপনি একটি ছোট পারফরম্যান্স লাভ লক্ষ্য করতে পারেন, যেহেতু রানটাইমকে কোনও প্রদত্ত বস্তুর জন্য অনুরোধ করার জন্য সঠিক শ্রেণির পদ্ধতিটি সন্ধান করতে হবে না। চূড়ান্ত নয় এমন পদ্ধতিগুলিকে ভার্চুয়াল হিসাবে চিহ্নিত করা হয় যাতে প্রয়োজনে সেগুলি যথাযথভাবে প্রসারিত করা যায়, চূড়ান্ত পদ্ধতিগুলি ক্লাসে সরাসরি লিঙ্কযুক্ত বা ইনলাইন সংকলন করা যায়।
লোককে এমন কাজ থেকে বিরত রাখা যা নিজের এবং অন্যকে বিভ্রান্ত করতে পারে। কোনও পদার্থবিদ্যার পাঠাগারটি কল্পনা করুন যেখানে আপনার কয়েকটি সংজ্ঞায়িত ধ্রুবক বা গণনা রয়েছে। চূড়ান্ত কীওয়ার্ডটি ব্যবহার না করে, কেউ আবার আসতে পারে এবং মৌলিক গণনা বা ধ্রুবকগুলির নতুন সংজ্ঞা দিতে পারে যা কখনও পরিবর্তন করা উচিত নয়।
আপনি কোনও পদ্ধতি চূড়ান্ত করতে চান যাতে ওভাররাইডিং ক্লাসগুলি এর আচরণ পরিবর্তন করে না। আপনি যখন আচরণটি পরিবর্তন করতে সক্ষম হবেন তখন পদ্ধতিটি সর্বজনীন করুন। আপনি যখন কোনও সর্বজনীন পদ্ধতি ওভাররাইড করবেন তখন এটি পরিবর্তন করা যেতে পারে।