প্রথমে দৃষ্টান্তটি পরিষ্কার করা যাক।
- ডেটা স্ট্রাকচারস -> মেমরির একটি লেআউট যা উপযুক্ত জ্ঞানীয় ফাংশন দ্বারা ট্র্যাভারসড এবং হেরফের করা যায় can
- অবজেক্টস -> একটি স্ব অন্তর্ভুক্ত মডিউল যা এর বাস্তবায়নটি গোপন করে এবং একটি ইন্টারফেস সরবরাহ করে যা মাধ্যমে যোগাযোগ করা যেতে পারে।
একজন গেটর / সেটার কোথায় দরকারী?
প্রাপ্তি / সেটটাররা ডেটা স্ট্রাকচারগুলিতে কি কার্যকর? না।
ডেটা স্ট্রাকচার হ'ল মেমোরি লেআউট স্পেসিফিকেশন যা সাধারণ এবং ফাংশনগুলির একটি পরিবার দ্বারা ম্যানিপুলেট।
সাধারণত কোনও পুরানো নতুন ফাংশনটি উপাত্ত-কাঠামোটি নিয়ে আসে এবং তা হস্তান্তর করতে পারে, যদি এটি এমনভাবে করে যাতে অন্যান্য ফাংশনগুলি এখনও এটি বুঝতে পারে, তবে ফাংশনটি পরিবারে যোগ দেয়। অন্যথায় এটি একটি দুর্বৃত্ত ফাংশন এবং বাগগুলির উত্স।
আমাকে ভুল মনে করবেন না যে সমস্ত জায়গায় ছিনতাই, টার্ন-কোটস এবং ডাবল এজেন্টের সাথে ডেটা-কাঠামোয় লড়াইয়ের বিভিন্ন পরিবার থাকতে পারে। এটি ঠিক আছে যখন তাদের প্রত্যেকের সাথে খেলতে তাদের নিজস্ব ডেটা কাঠামো থাকে, তবে তারা যখন তা ভাগ করে নেয় ... কল্পনা করুন যে বেশ কয়েকটি অপরাধ পরিবার রাজনীতির বিষয়ে দ্বিমত পোষণ করছে, এটি সত্যিই দ্রুত গন্ডগোল হয়ে উঠতে পারে।
জঞ্জাল ক্রমবর্ধমান ফাংশনগুলি পরিবারগুলি অর্জন করতে পারে, এমন কি ডেটা স্ট্রাকচারটি এনকোড করার কোনও উপায় আছে যাতে দুর্বৃত্ত ফাংশনগুলি সমস্ত গোলমাল না করে? হ্যাঁ, তাদের বলা হয় অবজেক্টস।
গেটার / সেটাররা কি অবজেক্টে দরকারী? না।
কোনও অবজেক্টে ডেটা স্ট্রাকচার মোড়ানোর পুরো বিষয়টিটি ছিল এটি নিশ্চিত করা যে কোনও দুর্বৃত্ত ফাংশন থাকতে পারে না। যদি ফাংশনটি পরিবারে যোগ দিতে চায়, তবে প্রথমে এটি ভালভাবে পরীক্ষা করা উচিত এবং তারপরে অবজেক্টটির অংশ হয়ে উঠতে হবে।
গেটর এবং সেটারের পয়েন্ট / উদ্দেশ্য হ'ল অবজেক্টের বাইরের ফাংশনগুলিকে সরাসরি বস্তুর মেমরি লেআউটটিকে পরিবর্তন করতে দেওয়া। দুর্বৃত্তদের অনুমতি দেওয়ার জন্য এটি একটি মুক্ত দরজার মতো শোনাচ্ছে ...
এজ কেস
দুটি পরিস্থিতি একটি পাবলিক গেটার / সেটার বোধগম্য ছিল।
- অবজেক্টের মধ্যে ডেটা-স্ট্রাকচারের একটি অংশ অবজেক্ট দ্বারা পরিচালিত হয় তবে অবজেক্ট দ্বারা নিয়ন্ত্রিত হয় না।
- একটি ইন্টারফেস এমন একটি ডেটা-কাঠামোর উচ্চ স্তরের বিমূর্তি বর্ণনা করে যেখানে কিছু উপাদান বাস্তবায়নকারী অবজেক্টের নিয়ন্ত্রণে না থাকে বলে আশা করা হয়।
ধারক এবং ধারক ইন্টারফেস এই দুটি পরিস্থিতিতে উভয়েরই নিখুঁত উদাহরণ। ধারকটি অভ্যন্তরীণভাবে ডেটা-স্ট্রাকচারগুলি (লিঙ্কযুক্ত-তালিকা, মানচিত্র, গাছ) পরিচালনা করে তবে হাতে এবং সমস্ত কিছুতে নির্দিষ্ট উপাদানকে নিয়ন্ত্রণ করে। ইন্টারফেস এটিকে বিমূর্ত করে এবং বাস্তবায়নটিকে সম্পূর্ণ উপেক্ষা করে এবং কেবল প্রত্যাশা বর্ণনা করে।
দুর্ভাগ্যক্রমে অনেক বাস্তবায়ন এটিকে ভুল করে এবং প্রকৃত বস্তুর সরাসরি অ্যাক্সেস দিতে এই ধরণের বস্তুর ইন্টারফেসটিকে সংজ্ঞায়িত করে। কিছুটা এইরকম:
interface Container<T>
{
typedef ...T... TRef; //<somehow make TRef to be a reference or pointer to the memory location of T
TRef item(int index);
}
এটি ভেঙে গেছে কনটেইনারের বাস্তবায়নগুলিকে অবশ্যই তাদের অভ্যন্তরীণগুলির স্পষ্টভাবে নিয়ন্ত্রণ তাদের কারও ব্যবহারের জন্য হস্তান্তর করতে হবে। আমি এখনও একটি পরিবর্তনীয়-মূল্যবান ভাষা দেখতে পেলাম যেখানে এটি সূক্ষ্ম (স্থাবর-মান শব্দার্থের ভাষাগুলি ডেটা-দুর্নীতি দৃষ্টিকোণ থেকে সংজ্ঞায়িত জরিমানা, তবে ডেটা-স্পাই করার দৃষ্টিকোণ থেকে অগত্যা নয়)।
আপনি কেবল অনুলিপি-শব্দার্থক শব্দ ব্যবহার করে বা প্রক্সি ব্যবহার করে গেটার / সেটারকে উন্নত / সংশোধন করতে পারেন:
interface Proxy<T>
{
operator T(); //<returns a copy
... operator ->(); //<permits a function call to be forwarded to an element
Proxy<T> operator=(T); //< permits the specific element to be replaced/assigned by another T.
}
interface Container<T>
{
Proxy<T> item(int index);
T item(int index); //<When T is a copy of the original value.
void item(int index, T new_value); //<where new_value is used to replace the old value
}
যুক্তিযুক্তভাবে একটি দুর্বৃত্ত ফাংশন এখানে এখনও মারামারি খেলতে পারে (পর্যাপ্ত প্রচেষ্টার সাথে বেশিরভাগ জিনিস সম্ভব) তবে কপি-শব্দার্থবিজ্ঞান এবং / বা প্রক্সি বেশ কয়েকটি ত্রুটির সম্ভাবনা হ্রাস করে।
- টলমলানি
- underflow
- উপ-উপাদানটির সাথে মিথস্ক্রিয়াগুলি হ'ল টাইপ-চেকড / টাইপ-চেকযোগ্য (টাইপ হেরে যাওয়া ভাষাগুলিতে এটি একটি উত্সাহ))
- আসল উপাদান মেমরির বাসিন্দা হতে পারে বা নাও হতে পারে।
প্রাইভেট গেটার / সেটার্স
এটি হ'ল গ্রাহক ও সেটটারদের শেষ ঘাঁটি যা সরাসরি টাইপটিতে কাজ করে। আসলে আমি এই গেটর এবং সেটটারগুলিকেও কল করতে পারি না তবে অ্যাকসেসর এবং ম্যানিপুলেটরগুলি।
এই প্রসঙ্গে কখনও কখনও ডেটা-স্ট্রাকচারের নির্দিষ্ট অংশটি সর্বদা / প্রায়-সর্বদা / সাধারণত সুনির্দিষ্ট বই রাখার প্রয়োজন হয় man বলুন আপনি যখন গাছের গোড়াটি আপডেট করেন তখন চেহারা-সাইড ক্যাশেটি খাঁটি করা প্রয়োজন, বা আপনি যখন বাহ্যিক ডেটা উপাদানটি অ্যাক্সেস করেন তখন একটি লক পাওয়া / ছেড়ে দেওয়া প্রয়োজন। এই ক্ষেত্রে DRY অধ্যক্ষকে প্রয়োগ করা এবং সেই ক্রিয়াগুলি একসাথে পার্সেল করা বুদ্ধিমান।
ব্যক্তিগত প্রসঙ্গে, পরিবারের অন্যান্য ক্রিয়াকলাপগুলির পক্ষে এই 'গেটারস এবং সিটারস'-এর পক্ষ-পদক্ষেপ নেওয়া এবং ডেটা স্ট্রাকচারটি সামাল দেওয়া সম্ভব। তাই আমি কেন তাদের আরও সহায়ক এবং কারচুপি হিসাবে বিবেচনা করি। আপনি সরাসরি ডেটা অ্যাক্সেস করতে পারেন, বা অংশটি সঠিকভাবে পেতে অন্য পরিবারের সদস্যের উপর নির্ভর করতে পারেন।
সুরক্ষিত গেটার / সেটার্স
সুরক্ষিত প্রসঙ্গে, এটি জনসাধারণের প্রেক্ষাপটে মারাত্মকভাবে পৃথক নয়। বিদেশী সম্ভবত দুর্বৃত্ত ফাংশনগুলি ডেটা-কাঠামোটিতে অ্যাক্সেস চায়। সুতরাং না, যদি তাদের উপস্থিতি থাকে তবে তারা পাবলিক গেটার / সেটটারগুলির মতো কাজ করে।
this->variable = x + 5
কোনও দিন আপনি যা করতে চাইতে পারেন বাUpdateStatistics
সেটারে কোনও ফাংশন কল করতে পারেন এবং এই ক্ষেত্রেclassinstancea->variable = 5
সমস্যা দেখা দিতে পারে।