ক্লিন কোড সুরক্ষিত ভেরিয়েবলগুলি এড়িয়ে যাওয়ার পরামর্শ দিচ্ছে কেন?


168

ক্লিন কোড "ফরম্যাটিং" অধ্যায়ের "উল্লম্ব দূরত্ব" বিভাগে সুরক্ষিত ভেরিয়েবলগুলি এড়ানো পরামর্শ দেয়:

ঘনিষ্ঠভাবে সম্পর্কিত ধারণাগুলি একে অপরের সাথে উল্লম্বভাবে রাখা উচিত। স্পষ্টতই এই নিয়মটি পৃথক ফাইলে অন্তর্ভুক্ত ধারণাগুলির জন্য কাজ করে না। তবে যদি আপনার খুব ভাল কারণ না থাকে তবে ঘনিষ্ঠভাবে সম্পর্কিত ধারণাগুলি আলাদা আলাদা ফাইলে আলাদা করা উচিত নয়। প্রকৃতপক্ষে, এটির অন্যতম কারণ হ'ল সুরক্ষিত ভেরিয়েবলগুলি এড়ানো উচিত

যুক্তি কী?


7
একটি উদাহরণ যেখানে আপনি কি মনে করেন আপনাকে প্রয়োজন এটা
মশা

63
আমি সেই বইতে সুসমাচার হিসাবে বেশি কিছু নেব না।
রিগ

40
@ রিগ আপনি এই অংশে ব্লাসফেমির সাথে মত মন্তব্য করেই চলেছেন।
রাইথাল

40
আমি ঠিক আছে। আমি বইটি পড়েছি এবং এটি সম্পর্কে আমার নিজস্ব মতামত থাকতে পারে।
রিগ

10
আমি বইটি পড়েছি এবং যদিও সেখানে যা রয়েছে তার বেশিরভাগের সাথে আমি একমত নই , তবে আমি এটি গসপেলটি বিবেচনা করব না বলে বলব না। আমি মনে করি যে প্রতিটি পরিস্থিতি আলাদা হয় .. এবং বইটিতে উল্লিখিত সঠিক নির্দেশিকাগুলির সাথে আঁকতে সক্ষম হওয়া প্রচুর প্রকল্পের পক্ষে বেশ কঠিন।
সাইমন হোয়াইটহেড

উত্তর:


277

সুরক্ষিত ভেরিয়েবলগুলি এড়ানো উচিত কারণ:

  1. তারা YAGNI ইস্যুতে নেতৃত্ব দেয় । আপনার যদি বংশধর শ্রেণি না থাকে যা প্রকৃতপক্ষে সুরক্ষিত সদস্যের সাথে স্টাফ করে তবে এটিকে ব্যক্তিগত করুন।
  2. তারা এলএসপি সমস্যার দিকে পরিচালিত করে। সুরক্ষিত ভেরিয়েবলগুলির সাধারণত তাদের সাথে কিছু অভ্যন্তরীণ আক্রমণাত্মকতা যুক্ত থাকে (অন্যথায় তারা সর্বজনীন হতে পারে)। উত্তরাধিকারীদের তখন সেই বৈশিষ্ট্যগুলি বজায় রাখা দরকার, যা লোকেরা স্ক্রু বা ইচ্ছাকৃতভাবে লঙ্ঘন করতে পারে।
  3. ওসিপি লঙ্ঘনের ঝোঁক তারা । যদি বেস ক্লাসটি সুরক্ষিত সদস্য সম্পর্কে অনেক বেশি অনুমান করে, বা উত্তরাধিকারী শ্রেণীর আচরণের সাথে খুব নমনীয় হয়, তবে এটি বর্ধিত শ্রেণীর আচরণকে সেই এক্সটেনশনের মাধ্যমে সংশোধন করতে পারে।
  4. তারা রচনা না করে এক্সটেনশনের জন্য উত্তরাধিকারের দিকে পরিচালিত করে। এটি কঠোর সংযোজন, এসআরপি-র আরও লঙ্ঘন , আরও কঠিন পরীক্ষা-নিরীক্ষা এবং অন্যান্য বিষয় যা 'উত্তরাধিকারের ওপরে রচনার পক্ষপাতী' আলোচনার দিকে নিয়ে যায়।

তবে আপনি যেমন দেখতে পাচ্ছেন, এগুলি সবই 'ঝোঁক'। কখনও কখনও একটি সুরক্ষিত সদস্য সর্বাধিক মার্জিত সমাধান solution এবং সুরক্ষিত ফাংশনগুলির মধ্যে এই সমস্যাগুলির পরিমাণ কম থাকে। তবে এমন অনেকগুলি বিষয় রয়েছে যার কারণে তাদের যত্ন সহকারে চিকিত্সা করা হয়। এই ধরণের যত্নের প্রয়োজন এমন যে কোনও কিছু নিয়ে লোকেরা ভুল করতে পারে এবং প্রোগ্রামিং জগতে যার অর্থ বাগ এবং ডিজাইনের সমস্যা।


অনেক ভাল কারণে ধন্যবাদ। যাইহোক, বইটি বিন্যাস এবং উল্লম্ব দূরত্বের প্রসঙ্গে বিশেষভাবে উল্লেখ করেছে, এটি সেই অংশটি সম্পর্কে আমি ভাবছি।
ম্যাটসেম্যান

2
দেখে মনে হয় যে আঙ্কেল বব যখন উল্লিখিত দূরত্বের কথা উল্লেখ করছেন তখন কেউ ক্লাসের মধ্যে কোনও সুরক্ষিত সদস্যের কথা উল্লেখ করছেন , একই শ্রেণিতে নয়।
রবার্ট হার্ভে

5
@ ম্যাটসেম্যান - নিশ্চিত আমি যদি বইটি নির্ভুলভাবে মনে রাখি তবে section বিভাগটি কোডের পঠনযোগ্যতা এবং আবিষ্কারের দক্ষতার উপর দৃষ্টি নিবদ্ধ করে। যদি ভেরিয়েবল এবং ফাংশন কোনও ধারণায় কাজ করে তবে তাদের কোডের কাছাকাছি হওয়া উচিত। সুরক্ষিত সদস্যগণ উদ্ভূত প্রকারের দ্বারা ব্যবহৃত হবে, যা সুরক্ষিত সদস্যের কাছাকাছি হতে পারে না কারণ তারা সম্পূর্ণ আলাদা একটি ফাইল থাকে in
টেলাস্টিন

2
@ steve314 আমি যেখানে একটি দৃশ্যকল্প বেস শ্রেণী এবং কল্পনা করতে পারবেন না সব তার অধিকারীদের অন্তর্ভূক্ত শুধুমাত্র কখনও একটি ফাইল বাস করবে। একটি উদাহরণ ছাড়াই আমি এটিকে উত্তরাধিকারের অপব্যবহার বা দুর্বল বিমূর্ততা মনে করতে ঝোঁক।
টেলাস্টিন

3
ইয়াগএনআই = আপনার এটির দরকার হবে এলএসপি = লিসকোভ সাবস্টিটিউশন নীতি ওসিপি = ওপেন / ক্লোজড অধ্যক্ষ এসআরপি = একক দায়িত্বের নীতি
ব্রায়ান গ্লেজার

54

আপনি বিশ্বজুড়ে এড়ানো সত্যিই একই কারণে, কেবলমাত্র একটি ছোট স্কেল। এর কারণ এটি যে কোনও স্থানে একটি ভেরিয়েবল পড়া হচ্ছে বা আরও খারাপ, এতে লিখিত রয়েছে এবং ব্যবহারটি সামঞ্জস্যপূর্ণ করা শক্ত find যদি ব্যবহারটি সীমাবদ্ধ থাকে, যেমন উত্পন্ন শ্রেণীর একটি সুস্পষ্ট স্থানে লেখা এবং বেস শ্রেণীর একটি সুস্পষ্ট জায়গায় পড়ার মতো, তবে সুরক্ষিত ভেরিয়েবলগুলি কোডটিকে আরও স্পষ্ট এবং সংক্ষিপ্ত করে তুলতে পারে। যদি আপনি একাধিক ফাইল জুড়ে একটি ভেরিয়েবল উইলি-নিলি পড়তে এবং লিখতে প্ররোচিত হন তবে এটি সজ্জিত করা ভাল।


26

আমি বইটি পড়িনি, তবে আঙ্কেল বব কী বোঝাতে চেয়েছিল তা নিয়ে আমি ছুরিকাঘাত করতে পারি।

যদি আপনি protectedকোনও কিছু রাখেন , তার অর্থ একটি শ্রেণি এটি উত্তরাধিকারী হতে পারে। তবে সদস্য ভেরিয়েবলগুলি যে শ্রেণিতে রয়েছে সেগুলি অন্তর্ভুক্ত বলে মনে করা হয়; এটি বেসিক এনক্যাপসুলেশনের অংশ। ফেলে protectedসদস্য পরিবর্তনশীল বিরতি এনক্যাপস্যুলেশন উপর কারণ এখন একটি উদ্ভূত বর্গ বেস ক্লাসের বাস্তবায়ন বিবরণ অ্যাক্সেস আছে। আপনি যখন publicকোনও সাধারণ শ্রেণিতে পরিবর্তনশীল তৈরি করেন তখন একই সমস্যা হয় ।

সমস্যাটি সংশোধন করার জন্য, আপনি ভেরিয়েবলটি কোনও সুরক্ষিত সম্পত্তিতে এমনি এমপুলেট করতে পারেন:

protected string Name
{
    get { return name; }
    private set { name = value; }
}

এটি nameবেস শ্রেণীর প্রয়োগের বিশদটি প্রকাশ না করেই কনস্ট্রাক্টর আর্গুমেন্ট ব্যবহার করে একটি উত্পন্ন শ্রেণি থেকে নিরাপদে সেট করার অনুমতি দেয় ।


আপনি সুরক্ষিত সেটার দিয়ে একটি সর্বজনীন সম্পত্তি তৈরি করেছেন। সুরক্ষিত ক্ষেত্রটি প্রাইভেট সেটার সহ কোনও সুরক্ষিত সম্পত্তি দিয়ে সমাধান করা উচিত।
অ্যান্ডি

2
এখন +1 সেটারটিও সুরক্ষিত হতে পারে বলে আমি মনে করি, তবে নতুন মানটি বৈধ আছে কি না তবে ভিত্তিটি প্রয়োগ করতে পারে পয়েন্ট আইডিসি।
অ্যান্ডি

কেবল একটি বিরোধী দৃষ্টিকোণ অফার করার জন্য - আমি আমার সমস্ত ভেরিয়েবলগুলিকে বেস ক্লাসে সুরক্ষিত করে তুলি। যদি সেগুলি কেবল সর্বজনীন ইন্টারফেসের মাধ্যমে অ্যাক্সেস করতে হয় তবে এটি কোনও উত্পন্ন শ্রেণি হওয়া উচিত নয়, এতে কেবল একটি বেসক্লাস অবজেক্ট থাকা উচিত। তবে আমি 2 শ্রেণীরও বেশি গভীর শ্রেণিবদ্ধতা এড়িয়ে চলেছি
মার্টিন বেকেট

2
এবং সদস্যদের মধ্যে একটি বিশাল পার্থক্য আছে । যদি কোনও জনসাধারণের সদস্য প্রকাশিত হয় তবে এর থেকে বোঝা যায় যে সমস্ত উত্পন্ন প্রকারের একই সদস্যের একই পদ্ধতিতে কাজ করা উচিত, যেহেতু একটি উদাহরণ কোডে পাস করা হতে পারে যা একটি রেফারেন্স পায় এবং সেই সদস্যটি ব্যবহার করার প্রত্যাশা করে। এর বিপরীতে, যদি একটি অনাবৃত সদস্য, তারপর যে সদস্য অ্যাক্সেস করতে প্রতীক্ষা করছি , কিন্তু কিছুই হতে পারে না অন্যান্য তুলনায় । protectedpublicBaseTypeDerivedTypeBaseTypeBaseTypeprotectedDerivedTypebasebaseBaseType
সুপারক্যাট

18

চাচা বব এর যুক্তি মূলত দূরত্বের একটি: যদি আপনার কোনও ধারণা থাকে যা একটি শ্রেণীর পক্ষে গুরুত্বপূর্ণ, তবে সেই ফাইলটির ক্লাসের সাথে ধারণাকে বান্ডিল করুন। ডিস্কের দুটি ফাইল জুড়ে আলাদা করা হয়নি।

সুরক্ষিত সদস্য ভেরিয়েবলগুলি দুটি জায়গায় ছড়িয়ে ছিটিয়ে রয়েছে এবং কিন্ডা দেখতে যাদু বলে মনে হচ্ছে। আপনি এই পরিবর্তনশীল রেফারেন্স, এখনো তা এখানে সংজ্ঞায়িত করা হয় না ... যেখানে করা হয় এটা সংজ্ঞায়িত? এবং এইভাবে শিকার শুরু হয়। protectedপুরোপুরি এড়ানো ভাল , তার যুক্তি।

এখন আমি বিশ্বাস করি না যে নিয়মটি পুরোপুরি চিঠিটি মেনে চলার প্রয়োজন (যেমন: আপনি ব্যবহার করবেন না protected)। এ আত্মা কি তিনি এ পেয়ে হয় ... এর সাথে সম্পর্কিত কিছু এক ফাইলে একসঙ্গে বান্ডেল - প্রোগ্রামিং কৌশল এবং বৈশিষ্ট্য যে কাজ করতে ব্যবহার করুন। আমি আপনাকে সুপারিশ করব যে আপনি অতিরিক্ত বিশ্লেষণ না করে এবং এই সম্পর্কে বিশদটি সম্পর্কে ধরা পড়বেন না।


9

ইতিমধ্যে এখানে কিছু খুব ভাল উত্তর। তবে একটি বিষয় যোগ করুন:

বেশিরভাগ আধুনিক ওও ভাষাগুলিতে প্রতিটি শ্রেণিকে নিজস্ব ফাইলে স্থাপন করা (জাভা আফ্রিকায় এটির প্রয়োজনীয়) একটি ভাল অভ্যাস (দয়া করে আপনার সি -++ সম্পর্কে নাইট পাবেন না যেখানে আপনার প্রায়শই দুটি ফাইল থাকে)।

সুতরাং ভেরিয়েবল সংজ্ঞায় সোর্স কোডে "উল্লম্বভাবে বন্ধ" বেস ক্লাসের সুরক্ষিত ভেরিয়েবলটি অর্জন করে একটি উত্পন্ন শ্রেণিতে ফাংশনগুলি রাখা কার্যত অসম্ভব। তবে আদর্শভাবে সেগুলি সেখানে রাখা উচিত, যেহেতু সুরক্ষিত পরিবর্তনশীলগুলি অভ্যন্তরীণ ব্যবহারের উদ্দেশ্যে করা হয়, যা তাদের প্রায়শই "একটি ঘনিষ্ঠভাবে সম্পর্কিত ধারণা" অ্যাক্সেস করে functions


1
সুইফটে নয়। মজার বিষয় হল, সুইফটে "সুরক্ষিত" নেই তবে এতে "ফাইলপ্রাইভেট" রয়েছে যা "সুরক্ষিত" এবং সি ++ "বন্ধু" উভয়ের পরিবর্তে।
gnasher729

@ gnasher729 - অবশ্যই, সুইফটটির heritageতিহ্যে অনেকগুলি স্মলটক রয়েছে। স্মার্টটাকের ব্যক্তিগত ভেরিয়েবল এবং পাবলিক পদ্ধতি ব্যতীত অন্য কিছু নেই। এবং স্মল্টালকের ব্যক্তিগত অর্থ ব্যক্তিগত: একই শ্রেণি এমনকি দুটি বস্তু একে অপরের ভেরিয়েবল অ্যাক্সেস করতে পারে না।
জুলাই

4

মূল ধারণাটি হ'ল সুরক্ষিত হিসাবে ঘোষিত একটি "ক্ষেত্র" (উদাহরণস্বরূপ-স্তর ভেরিয়েবল) সম্ভবত এটির চেয়ে বেশি দৃশ্যমান এবং আপনার পছন্দের চেয়ে কম "সুরক্ষিত"। সি / সি ++ / জাভা / সি # তে কোনও অ্যাক্সেস মডিফায়ার নেই যা "একই সমাবেশের মধ্যে কেবলমাত্র শিশু শ্রেণি দ্বারা অ্যাক্সেসযোগ্য" এর সমতুল্য, এভাবে আপনাকে আপনার নিজের বাচ্চাদের সংজ্ঞা দেওয়ার ক্ষমতা প্রদান করে যা আপনার সমাবেশে ক্ষেত্রটি অ্যাক্সেস করতে পারে, তবে অন্যান্য সমাবেশগুলিতে তৈরি শিশুদের একই অ্যাক্সেসের অনুমতি না দেওয়া; সি # এর অভ্যন্তরীণ এবং সুরক্ষিত সংশোধক রয়েছে, তবে তাদের সংমিশ্রণে অ্যাক্সেসটিকে "অভ্যন্তরীণ বা সুরক্ষিত" করা হয়, "অভ্যন্তরীণ এবং সুরক্ষিত" নয়। সুতরাং, সুরক্ষিত একটি ক্ষেত্র যে কোনও শিশু দ্বারা অ্যাক্সেসযোগ্য, আপনি সেই শিশুটি লিখেছিলেন বা অন্য কেউ করেছেন। সুরক্ষিত এইভাবে হ্যাকারের একটি উন্মুক্ত দরজা।

এছাড়াও, তাদের সংজ্ঞা অনুসারে ক্ষেত্রগুলির পরিবর্তনগুলির মধ্যে অন্তর্নিহিত যথেষ্ট কোনও বৈধতা নেই। সি # তে আপনি একটি মাত্র পঠনযোগ্য করতে পারেন, যা মানের ধরণেরগুলিকে কার্যকরভাবে ধ্রুবক করে তোলে এবং রেফারেন্স প্রকারগুলি পুনরায় পুনর্নির্মাণ করতে অক্ষম করে (তবে এখনও খুব পরিবর্তনযোগ্য), তবে এটি প্রায় about যেমন, এমনকি সুরক্ষিত, আপনার বাচ্চাদের (যার উপর আপনি বিশ্বাস করতে পারবেন না) এই ক্ষেত্রে অ্যাক্সেস রয়েছে এবং এটিকে অবৈধ কিছুতে সেট করতে পারেন, যা অবজেক্টের অবস্থাকে বেমানান করে তোলে (কিছু এড়ানো যায়)।

ক্ষেত্রগুলির সাথে কাজ করার স্বীকৃত উপায় হ'ল তাদের ব্যক্তিগত করা এবং কোনও সম্পত্তি এবং / অথবা একটি গেটর এবং সেটার পদ্ধতিতে তাদের অ্যাক্সেস করা। শ্রেণীর সমস্ত গ্রাহকের যদি মানটির প্রয়োজন হয়, তবে প্রাপ্তিটিকে (কমপক্ষে) সর্বজনীন করুন। যদি কেবল বাচ্চাদের এটির প্রয়োজন হয়, তবে সুরক্ষককে সুরক্ষিত করুন।

আরেকটি পদ্ধতির যা প্রশ্নের উত্তর দেয় তা হল নিজেকে জিজ্ঞাসা করা; একটি শিশু পদ্ধতিতে কোডের কেন সরাসরি আমার রাষ্ট্রের ডেটা পরিবর্তন করার দক্ষতার প্রয়োজন হয়? যে কোড সম্পর্কে কি বলে? এটি তার মুখে "উল্লম্ব দূরত্ব" যুক্তি। যদি কোনও সন্তানের এমন কোড থাকে যা অবশ্যই পিতামাতার অবস্থাকে সরাসরি পরিবর্তন করতে পারে, তবে সম্ভবত সেই কোডটি প্রথম স্থানে পিতামাতার অন্তর্ভুক্ত হওয়া উচিত?


4

এটি একটি আকর্ষণীয় আলোচনা।

প্রকৃতপক্ষে, ভাল সরঞ্জামগুলি এই "উল্লম্ব" সমস্যাগুলির অনেকগুলি প্রশমিত করতে পারে। আসলে, আমার মতে "ফাইল" ধারণাটি আসলে এমন কিছু যা সফ্টওয়্যার বিকাশের পথে বাধা সৃষ্টি করে - লাইট টেবিল প্রকল্পে কাজ করছে (http://www.chris-granger.com/2012/04/12/light- টেবিল --- একটি নতুন IDE-ধারণা /)।

ফাইলটি ফাইল থেকে সরিয়ে নিন এবং সুরক্ষিত স্কোপ অনেক বেশি আকর্ষণীয় হয়ে ওঠে। সুরক্ষিত ধারণাটি স্মলটাকের মতো ল্যাঙ্গোজে সবচেয়ে স্পষ্ট হয়ে ওঠে - যেখানে কোনও উত্তরাধিকার কেবল শ্রেণীর মূল ধারণাটি প্রসারিত করে। এটি পিতামাতা শ্রেণি যা করেছে তা সবই করা উচিত এবং যা কিছু করা উচিত।

আমার মতে, শ্রেণিবদ্ধ স্তরগুলি যতটা সম্ভব অগভীর হওয়া উচিত, বেশিরভাগ সংশ্লেষ রচনা থেকে এসেছে। এই জাতীয় মডেলগুলিতে আমি ব্যক্তিগত ভেরিয়েবলের পরিবর্তে সুরক্ষিত না হওয়ার কোনও কারণ দেখতে পাচ্ছি না । যদি বর্ধিত শ্রেণীর অভিভাবক শ্রেণীর সমস্ত আচরণ (যা আমি বিশ্বাস করি এবং এর ফলে ব্যক্তিগত পদ্ধতিগুলি অন্তর্নিহিতভাবে খারাপ বলে বিশ্বাস করে) সহ একটি বর্ধনের প্রতিনিধিত্ব করে, তবে বর্ধিত শ্রেণি কেন এই জাতীয় ডেটা সংরক্ষণের প্রতিনিধিত্ব করবে না?

এটি অন্যভাবে রাখার জন্য - যে কোনও ক্ষেত্রে যেখানে আমি অনুভব করি যে কোনও ব্যক্তিগত ভেরিয়েবল কোনও সুরক্ষিতের চেয়ে ভাল মানায়, উত্তরাধিকার প্রথম স্থানে সমস্যার সমাধান নয়।


0

এটি সেখানে যেমন বলেছে, এটি কেবলমাত্র কারণগুলির মধ্যে একটি, যা যুক্তিযুক্তভাবে সংযুক্ত কোডটি শারীরিক সংযুক্ত সংস্থাগুলির (ফাইল, প্যাকেজ এবং অন্যান্য) মধ্যে রাখা উচিত। ছোট স্কেলে এটি কারণ হিসাবে আপনি ক্লাস না রাখার কারণ যা ইউআই প্রদর্শন করে এমন ক্লাসগুলির সাথে প্যাকেজের ভিতরে ডিবি কোয়েরি তৈরি করে।

সুরক্ষিত ভেরিয়েবলগুলির প্রস্তাবিত না হওয়ার মূল কারণ হ'ল এগুলি এনক্যাপসুলেশন ভাঙ্গার প্রবণতা। চলক এবং পদ্ধতিগুলির যতটা সম্ভব সীমিত দৃশ্যমান হওয়া উচিত; আরও রেফারেন্সের জন্য জোশুয়া ব্লচের কার্যকর জাভা , আইটেম 13 দেখুন - "শ্রেণি এবং সদস্যদের অ্যাক্সেসযোগ্যতা হ্রাস করুন"।

তবে, আপনার কেবলমাত্র একটি গিল্ডলাইন হিসাবে এই বিজ্ঞাপন লিটারামের সমস্ত গ্রহণ করা উচিত নয়; সুরক্ষিত ভেরিয়েবলগুলি খুব খারাপ হলে এটিকে ভাষার ভিতরে প্রথম স্থানে স্থাপন করা হত না। সুরক্ষিত ক্ষেত্রগুলির জন্য যুক্তিসঙ্গত জায়গা কোনও পরীক্ষার কাঠামো থেকে বেস ক্লাসের অভ্যন্তরে থাকে (একীকরণ পরীক্ষার ক্লাসগুলি এটি প্রসারিত করে)।


1
ধরে নেবেন না যেহেতু কোনও ভাষা এটির অনুমতি দেয়, তাই করা ঠিক আছে। আমি নিশ্চিত না যে সুরক্ষিত ক্ষেত্রগুলিকে অনুমতি দেওয়ার জন্য godশ্বরের কোনও কারণ আছে; আমরা আসলে আমার নিয়োগকর্তাকে এগুলি অস্বীকার করি।
অ্যান্ডি

2
@ অ্যান্ডি আমি যা বলেছি তা আপনি পড়েন নি; আমি বলেছিলাম যে সুরক্ষিত ক্ষেত্রগুলি এর জন্য প্রস্তাবিত নয় এবং এর কারণগুলি। স্পষ্টতই এমন পরিস্থিতিতে রয়েছে যেখানে সুরক্ষিত পরিবর্তনশীলগুলির প্রয়োজন হয়; আপনি কেবল সাবক্লাসে একটি ধ্রুবক চূড়ান্ত মান পেতে পারেন।
m3th0dman

আপনি তখন আপনার পোস্টের কিছুটা উচ্চারণ করতে চাইতে পারেন, যেমন আপনি ভেরিয়েবল এবং ফিল্ডকে আন্তঃব্যক্তভাবে ব্যবহার করেন এবং স্পষ্ট করে তুলবেন যে আপনি সুরক্ষিত কনসেন্টের মতো জিনিসগুলি ব্যতিক্রম হিসাবে বিবেচনা করবেন।
অ্যান্ডি

3
@ অ্যান্ডি এটি অত্যন্ত সুস্পষ্ট যে আমি যেহেতু সুরক্ষিত ভেরিয়েবলগুলি উল্লেখ করছি আমি স্থানীয় বা প্যারামিটার ভেরিয়েবলের কথা বলছিলাম না তবে ক্ষেত্রগুলিতে to আমি এমন একটি দৃশ্যের কথাও উল্লেখ করেছি যেখানে অ-ধ্রুবক সুরক্ষিত ভেরিয়েবলগুলি কার্যকর; imho কোনও সংস্থার পক্ষে প্রোগ্রামাররা কোড লেখার পদ্ধতিটি প্রয়োগ করা ভুল।
m3th0dman

1
যদি এটি সুস্পষ্ট হয় তবে আমি আপনাকে বিভ্রান্ত ও হতাশ করতাম না। স্টাইলকপ, এফএক্সকপ চালানোর সিদ্ধান্ত নিয়ে আমাদের ইউনিট পরীক্ষা এবং কোড পর্যালোচনা প্রয়োজন, এই নিয়মটি আমাদের প্রবীণ বিকাশকারীরা করেছিলেন।
অ্যান্ডি

0

আমি JUnit পরীক্ষার জন্য সুরক্ষিত ভেরিয়েবলগুলি ব্যবহার করে দরকারী হতে পারি find আপনি যদি তাদের ব্যক্তিগত করে থাকেন তবে প্রতিচ্ছবি ছাড়াই পরীক্ষার সময় আপনি এগুলি অ্যাক্সেস করতে পারবেন না। আপনি যদি অনেকগুলি রাষ্ট্রের পরিবর্তনের মাধ্যমে একটি জটিল প্রক্রিয়া পরীক্ষা করে দেখেন তবে এটি কার্যকর হতে পারে।

সুরক্ষিত গিটার পদ্ধতি সহ আপনি এগুলিকে ব্যক্তিগত করতে পারেন, তবে যদি ভেরিয়েবলগুলি কেবল একটি জুনিত পরীক্ষার সময় বাহ্যিকভাবে ব্যবহার করা হয়, তবে আমি নিশ্চিত নই যে এটির থেকে ভাল সমাধান।


-1

হ্যাঁ, আমি একমত যে এটি কিছুটা আশ্চর্যজনক যে (আমি স্মরণ করি) বইটি সমস্ত বেসরকারী ভেরিয়েবলগুলি এড়িয়ে চলার কিছু বিষয় হিসাবেও আলোচনা করেছে।

আমি মনে করি সুরক্ষিত সংশোধকটির সাথে সমস্যাটি হ'ল কেবল সদস্যটি সাবক্লাসের মুখোমুখি হয় না এটি এটি পুরো প্যাকেজটিতে দৃশ্যমানও হয়। আমি মনে করি এটি এই দ্বৈত দিক যা আঙ্কেল বব এখানে ব্যতিক্রম করছে। অবশ্যই, কেউ সর্বদা সুরক্ষিত পদ্ধতি থাকা এবং এইভাবে সুরক্ষিত পরিবর্তনশীল যোগ্যতা অর্জন করতে পারে না।

আমি মনে করি আরও আকর্ষণীয় পদ্ধতির হ'ল সমস্ত কিছু জনসাধারণের কাছে করা, যা আপনাকে ছোট ছোট ক্লাস করতে বাধ্য করবে, যা পুরো উল্লম্ব দূরত্বের মেট্রিককে কিছুটা মোটা করে তোলে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.