যখন কেউ "এনক্যাপসুলেট যা পরিবর্তিত হয়" এর অর্থ কী?


25

আমি যে ওওপি নীতিগুলি দেখতে পেয়েছি তার মধ্যে একটি হ'ল: -আর কি পরিবর্তিত হয় তা গণ্য করুন।

আমি বুঝতে পারি যে বাক্যাংশটির আক্ষরিক অর্থ কী তা বোঝায় যা পরিবর্তিত হয় hide তবে, আমি জানি না কীভাবে এটি আরও ভাল ডিজাইনে অবদান রাখবে। কেউ কি একটি ভাল উদাহরণ ব্যবহার করে এটি ব্যাখ্যা করতে পারেন?


En.wikedia.org/wiki/Encapsulation_( কম্পিউটার_প্রগ্রামিং) দেখুন যা এটি ভালভাবে ব্যাখ্যা করে। আমার মনে হয় "কী পরিবর্তিত হয়" সঠিক নয় কারণ আপনার মাঝে মাঝে ধ্রুবককেও আবশ্যক করা উচিত।
কিওয়ার্টি_সো

I don't know how exactly would it contribute to a better designএনক্যাপসুলেটিং বিশদটি "মডেল" এবং বাস্তবায়নের বিশদগুলির মধ্যে আলগা সংযোগ সম্পর্কে। কম বাঁধা বাস্তবায়ন বিশদের সাথে "মডেল", সমাধানটি আরও নমনীয়। এবং এটি বিকাশ করা সহজ করে তোলে। "বিশদ থেকে নিজেকে বিমূর্ত করুন"।
লাইভ

@ লাইভ সো "পরিবর্তিত" বলতে আপনার সফ্টওয়্যার লাইফ চক্র চলাকালীন কী বিবর্তিত হয় বা আপনার প্রোগ্রামের প্রয়োগের সময় কী পরিবর্তন হয় বা উভয়ই বোঝায়?
হারিস ঘুরি

2
@ হারিসঘৌরী উভয়কেই কি একসাথে পরিবর্তিত হয় একসাথে গ্রুপ। যা স্বাধীনভাবে পরিবর্তিত হয় বিচ্ছিন্ন করুন। আপনি যা অনুমান করেন তা কখনই পরিবর্তিত হবে না তা নিয়ে সন্দেহ করুন।
candied_orange

1
"ল্যাভ" ভাব "অ্যাবস্ট্রাক্ট" একটি ভাল বিষয়। এটি করতে পেরে অনুভূতি বোধ করতে পারে। যে কোনও একটি অবজেক্টে আপনাকে একটি দায়িত্ব থাকার প্রস্তাব দেওয়া হয়েছে। এই সম্পর্কে দুর্দান্ত জিনিস আপনি শুধুমাত্র এখানে একটি জিনিস সম্পর্কে সাবধানে চিন্তা করতে হবে। সমস্যাটির বিশদ যখন কারও এলিসের সমস্যা হয় তখন বিষয়গুলি সহজ করে তোলে।
candied_orange

উত্তর:


30

আপনি দেখতে দেখতে কোডটি লিখতে পারেন:

if (pet.type() == dog) {
  pet.bark();
} else if (pet.type() == cat) {
  pet.meow();
} else if (pet.type() == duck) {
  pet.quack()
}

অথবা আপনি কোড দেখতে পেলেন যা দেখতে দেখতে:

pet.speak();

যা পরিবর্তিত হয় তা যদি এনক্যাপসুলেটেড হয় তবে আপনাকে এটি নিয়ে চিন্তা করতে হবে না। আপনার কী প্রয়োজন এবং আপনি কী প্রয়োজন তা কী করে তা কীভাবে করা যায় তা নিয়ে আপনি কেবল চিন্তিত হন really

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

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

আপনি এই উদাহরণটি দেখে মনে করতে পারেন যে আমি বহুবর্ষ এবং এনক্যাপসুলেশনকে সংযুক্ত করছি। আমি নই. আমি "যা পরিবর্তিত হয়" এবং "বিশদ" কনফ্লেট করছি।

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

বাকী কোড থেকে ডিকুয়াল, পৃথক করুন এবং বিবরণ লুকান। বিশদ সম্পর্কিত জ্ঞানটি আপনার সিস্টেমে ছড়িয়ে পড়তে দেবেন না এবং আপনি ঠিক কী সূক্ষ্মভাবে "কী কী পরিবর্তিত হয়" তা অনুসরণ করছেন।


3
এটা সত্যিই বিজোড়। আমার কাছে "যা পরিবর্তিত হয় তা বোঝায়" এর অর্থ রাষ্ট্র পরিবর্তনগুলি আড়াল করা, যেমন বৈশ্বিক ভেরিয়েবল কখনই না। তবে আপনি উত্তরটি খুব তাৎপর্যপূর্ণ করে তোলে, এমনকি যদি এটি এনক্যাপসুলেশনের চেয়ে বহুবচন সম্পর্কে আরও উত্তর অনুভব করে :)
ডেভিড আরনো

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

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

16

"পরিবর্তিত" এখানে অর্থ "পরিবর্তনের প্রয়োজনীয়তার কারণে সময়ের সাথে সাথে পরিবর্তিত হতে পারে"। এটি একটি মূল নকশার নীতি: কোড বা ডেটার টুকরোগুলি পৃথক করে আলাদা করতে যা ভবিষ্যতে পৃথকভাবে পরিবর্তিত হতে পারে। যদি কোনও একক প্রয়োজন পরিবর্তন হয় তবে আদর্শভাবে আমাদের কেবলমাত্র একটি স্থানে সম্পর্কিত কোডটি পরিবর্তন করা উচিত । তবে যদি কোড ভিত্তিটি খারাপভাবে ডিজাইন করা হয়, যেমন প্রয়োজনীয়তার জন্য অত্যন্ত আন্তঃসংযুক্ত এবং যুক্তিটি অনেক স্থানে ছড়িয়ে পড়ে, তবে পরিবর্তনটি কঠিন হবে এবং অপ্রত্যাশিত প্রভাব তৈরির উচ্চ ঝুঁকি রয়েছে।

বলুন আপনার কাছে এমন একটি অ্যাপ্লিকেশন রয়েছে যা প্রচুর জায়গায় বিক্রয় করের গণনা ব্যবহার করে। বিক্রয় করের হার যদি পরিবর্তন হয় তবে আপনি কী পছন্দ করবেন:

  • বিক্রয় কর গণনা করা হয় এমন প্রয়োগের যেখানেই বিক্রয় করের হার হ'ল একটি হার্ডকোডযুক্ত আক্ষরিক।

  • বিক্রয় করের হার বিশ্বব্যাপী ধ্রুবক, যা বিক্রয় কর গণনা করা হয় এমন অ্যাপ্লিকেশনটিতে সর্বত্র ব্যবহৃত হয়।

  • একটি একক পদ্ধতি বলা হয় calculateSalesTax(product)যা কেবলমাত্র বিক্রয় করের হারের জন্য ব্যবহৃত হয়।

  • বিক্রয় করের হার একটি কনফিগারেশন ফাইল বা ডাটাবেস ক্ষেত্রে নির্দিষ্ট করা হয়।

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

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

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

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


2
ট্যাক্স একটি ভাল উদাহরণ। আইন এবং করের গণনা একদিন থেকে অন্য দিনে পরিবর্তিত হতে পারে। আপনি যদি কোনও ট্যাক্স ঘোষণাপত্র প্রয়োগ করেন তবে আপনি এই ধরণের পরিবর্তনের সাথে দৃ strongly়ভাবে আবদ্ধ হন। এছাড়াও একটি স্থানীয় থেকে অন্য এক জায়গায় পরিবর্তন হয়েছে (দেশ, প্রদেশ, ...)
লাইব

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

14

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

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

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

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

ক্যান্ডিডেঞ্জের উদাহরণটিকে ভিন্ন প্রসঙ্গে কাস্ট করা, ধরে নিন আমাদের সি এর মতো একটি পদ্ধতিগত ভাষা আছে যদি আমার কাছে এমন কিছু কোড থাকে যা:

if (pet.type() == dog) {
  pet.bark();
} else if (pet.type() == cat) {
  pet.meow();
} else if (pet.type() == duck) {
  pet.quack()
}

আমি যুক্তিযুক্তভাবে আশা করতে পারি যে এই কোডের টুকরটি ভবিষ্যতে পরিবর্তিত হবে। আমি কেবল একটি নতুন পদ্ধতি সংজ্ঞায়িত করে এটি "encapsulate" করতে পারি:

void speak(pet) {
  if (pet.type() == dog) {
    pet.bark();
  } else if (pet.type() == cat) {
    pet.meow();
  } else if (pet.type() == duck) {
    pet.quack()
  }
}

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

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

প্রয়োজনীয়তা-চালিত উদাহরণের জন্য বলুন যে আপনাকে কিছু ব্যবসায়িক যুক্তির সাথে কিছু ক্ষেত্র বৈধ করতে হবে valid আপনার এখন নির্দিষ্ট প্রয়োজনীয়তা থাকতে পারে তবে আপনি দৃ strongly়ভাবে সন্দেহ করেন যে সেগুলি বিকশিত হবে। আপনি বর্তমান যুক্তিটিকে তার নিজস্ব পদ্ধতি / ফাংশন / নিয়ম / শ্রেণিতে আবদ্ধ করতে পারেন।

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


ওরে তিক্ত মিষ্টি বিড়ম্বনা। হ্যাঁ, এটি কেবল একটি ওওপি সমস্যা নয়। আপনি আমাকে কোনও ভাষার দৃষ্টান্ত বিশদভাবে আমার উত্তরকে দূষিত করতে দিয়েছিলেন এবং সঠিকভাবে দৃষ্টান্তটিকে "আলাদা" করে এর জন্য আমাকে শাস্তি দিয়েছেন।
candied_orange

"এমনকি একটি OO যেমন পণ্য ভাষায়, encapsulating কি পরিবর্তিত হয় অগত্যা তৈরি করা একটি নতুন শ্রেণী বা ইন্টারফেস চাহিদা মানে এই নয়" - এটা একটি অবস্থা যেখানে একটি নতুন শ্রেণী বা ইন্টারফেস লঙ্ঘন করবে না SRP তৈরি করছে না কল্পনা করা কঠিন
taurelas

11

"পরিবর্তিত হয় এবং পরিবর্তিত হতে পারে এমন বাস্তবায়ন বিশদ লুকানোর বিষয়ে উল্লেখ করে" কী পরিবর্তিত হয় তা বোঝায় "।

উদাহরণ:

উদাহরণস্বরূপ, ধরুন শ্রেণি রেজিস্ট্রেশন করতে পারে তা Courseট্র্যাক করে রাখে Students()। আপনি এটির মাধ্যমে এটি প্রয়োগ করতে LinkedListএবং এতে পুনরাবৃত্তির অনুমতি দেওয়ার জন্য ধারকটি প্রকাশ করতে পারেন:

class Course { 
    public LinkedList<Student> Atendees; 
    public bool register (Student s);  
    ...
}

তবে এটি ভাল ধারণা নয়:

  • প্রথমত, লোকেরা ভাল আচরণের অভাব থাকতে পারে এবং এটি স্ব-পরিষেবা হিসাবে ব্যবহার করতে পারে, সরাসরি নিবন্ধন () পদ্ধতিতে না গিয়ে শিক্ষার্থীদের তালিকায় যুক্ত করে।
  • তবে আরও বিরক্তিকর: এটি ব্যবহৃত শ্রেণীর অভ্যন্তরীণ বাস্তবায়নের বিশদে "ব্যবহারের কোড" এর নির্ভরতা তৈরি করে। এটি ক্লাসের ভবিষ্যতের বিবর্তনগুলি রোধ করতে পারে, উদাহরণস্বরূপ যদি আপনি কোনও অ্যারে, ভেক্টর, আসন নম্বর সহ একটি মানচিত্র, বা আপনার নিজের অবিরাম ডেটা কাঠামো ব্যবহার করতে পছন্দ করেন।

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

অতিরিক্ত পড়া:

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