নির্দিষ্ট ব্যবহারের ক্ষেত্রে সন্ধান করছেন যেখানে একই প্যাকেজের মধ্যে একটি সাবক্লাস এবং শ্রেণি উভয়কেই একটি সুরক্ষিত ক্ষেত্র বা পদ্ধতি অ্যাক্সেস করতে হবে ...
আমার কাছে ভাল, এই ধরনের ব্যবহারের ক্ষেত্রে নির্দিষ্টটি না থেকে সাধারণ হয় এবং এটি আমার পছন্দ থেকে শুরু করে:
- যতটা সম্ভব কঠোর অ্যাক্সেস মডিফায়ার দিয়ে শুরু করুন, কেবল পরে প্রয়োজনীয় হিসাবে বিবেচিত হিসাবে দুর্বল (গুলি) এর অবলম্বন করুন।
- ইউনিট পরীক্ষাগুলি পরীক্ষিত কোডের মতো একই প্যাকেজে থাকে।
উপরের থেকে, আমি আমার অবজেক্টগুলির জন্য ডিফল্ট অ্যাক্সেস মডিফায়ারগুলি দিয়ে ডিজাইনিং শুরু করতে পারি (আমি এটি দিয়ে শুরু করব privateতবে এটি ইউনিট পরীক্ষা জটিল করে তুলবে):
public class Example {
public static void main(String [] args) {
new UnitTest().testDoSomething(new Unit1(), new Unit2());
}
static class Unit1 {
void doSomething() {} // default access
}
static class Unit2 {
void doSomething() {} // default access
}
static class UnitTest {
void testDoSomething(Unit1 unit1, Unit2 unit2) {
unit1.doSomething();
unit2.doSomething();
}
}
}
সাইড নোট উপরে স্নিপেট এ, Unit1, Unit2এবং UnitTestহয় নেস্টেড মধ্যে Exampleউপস্থাপনার সরলীকরণের জন্য, কিন্তু একটি বাস্তব প্রকল্পে, আমি সম্ভবত পৃথক ফাইলে (এবং এই শ্রেণীর হবে UnitTestএমনকি একটি পৃথক ডিরেক্টরির মধ্যে )।
তারপরে, যখন কোনও প্রয়োজনীয়তা দেখা দেয়, আমি ডিফল্ট থেকে অ্যাক্সেস নিয়ন্ত্রণকে দুর্বল করে দেব protected:
public class ExampleEvolved {
public static void main(String [] args) {
new UnitTest().testDoSomething(new Unit1(), new Unit2());
}
static class Unit1 {
protected void doSomething() {} // made protected
}
static class Unit2 {
protected void doSomething() {} // made protected
}
static class UnitTest {
// ---> no changes needed although UnitTest doesn't subclass
// ...and, hey, if I'd have to subclass... which one of Unit1, Unit2?
void testDoSomething(Unit1 unit1, Unit2 unit2) {
unit1.doSomething();
unit2.doSomething();
}
}
}
আপনি দেখুন, ExampleEvolvedএকই প্যাকেজ থেকে সুরক্ষিত পদ্ধতিগুলি অ্যাক্সেসযোগ্য হওয়ার কারণে আমি ইউনিট টেস্ট কোডটি অপরিবর্তিত রাখতে পারি , যদিও অ্যাক্সেস অবজেক্টটি কোনও উপ-শ্রেণীর নয় ।
কম পরিবর্তন প্রয়োজন => নিরাপদ পরিবর্তন; সর্বোপরি আমি কেবল অ্যাক্সেস মডিফায়ার পরিবর্তন করেছি এবং আমি কোন পদ্ধতিগুলি Unit1.doSomething()এবং কী করে তা সংশোধন করি Unit2.doSomething()না, সুতরাং ইউনিট পরীক্ষার কোডটি পরিবর্তন ছাড়াই চালিয়ে যাওয়া আশা করা স্বাভাবিক is
protectedকেবল সাবক্লাস হলে সহজ হবে না ? সত্যি কথা, দীর্ঘদিন ধরে, আমি এমন আচরণের মধ্যে ছিলাম যে এই আচরণটি