আমি মনে করি আপনি ফাঁসযুক্ত বিমূর্ততা সম্পর্কে আমার একটি ব্লগ পোস্ট খুঁজে পেতে পারেন । এখানে প্রাসঙ্গিক পটভূমি:
অ্যাবস্ট্রাকশন হল সম্পর্কিত প্রোগ্রামের খণ্ডগুলির একটি সেটগুলির মধ্যে যা সাধারণ তা গ্রহণ করতে, তাদের পার্থক্যগুলি সরিয়ে দিতে এবং প্রোগ্রামারদের সেই বিমূর্ত ধারণাটি উপস্থাপনকারী নির্মাণের সাথে সরাসরি কাজ করতে সক্ষম করার একটি ব্যবস্থা। এই নতুন কনস্ট্রাক্টটির (ভার্চুয়াল) সর্বদা প্যারামিটারাইজেশন রয়েছে : আপনার নির্দিষ্ট প্রয়োজনের সাথে মানিয়ে নিতে কনস্ট্রাক্টের ব্যবহারটি কাস্টমাইজ করার একটি উপায়।
উদাহরণস্বরূপ, একটি List
শ্রেণি কোনও লিঙ্কযুক্ত তালিকার প্রয়োগের বিবরণ বিমূর্ত করতে পারে - যেখানে হেরফের next
এবং previous
পয়েন্টারগুলির ক্ষেত্রে চিন্তা করার পরিবর্তে , আপনি ক্রমগুলিতে মানগুলি যুক্ত করার বা অপসারণের স্তরের বিষয়ে চিন্তা করতে পারেন। বিমূর্ততা দরকারী, সমৃদ্ধ এবং কখনও কখনও জটিল বৈশিষ্ট্যগুলির আরও অনেক ছোট সংকলনের মধ্যে আরও প্রাথমিক ধারণা তৈরির জন্য প্রয়োজনীয় সরঞ্জাম।
অ্যাবস্ট্রাকশন এনক্যাপসুলেশন এবং মডুলারিটির সাথে সম্পর্কিত এবং এই ধারণাগুলি প্রায়শই ভুল বোঝা যায়।
ইন List
উদাহরণস্বরূপ, এনক্যাপস্যুলেশন একটি লিঙ্ক-তালিকা বাস্তবায়ন বিবরণ লুকিয়ে রাখা ব্যবহার করা যেতে পারে; উদাহরণস্বরূপ, কোনও অবজেক্ট-ভিত্তিক ভাষায় আপনি next
এবং previous
পয়েন্টারগুলিকে ব্যক্তিগত করতে পারেন , যেখানে কেবলমাত্র তালিকা প্রয়োগের ক্ষেত্রেই এই ক্ষেত্রগুলিতে অ্যাক্সেসের অনুমতি রয়েছে।
বিমূর্তকরণের জন্য এনক্যাপসুলেশন যথেষ্ট নয়, কারণ এটি প্রয়োজনীয়ভাবে বোঝায় না যে আপনার কাছে কনস্ট্রাক্টসের নতুন বা ভিন্ন ধারণা রয়েছে। সমস্ত List
শ্রেণি যদি আপনাকে ' getNext
' / ' setNext
' শৈলীর অ্যাক্সেসর পদ্ধতি দেয় তবে তা বাস্তবায়ন বিশদ থেকে আপনার কাছ থেকে সজ্জিত হবে (উদাহরণস্বরূপ, আপনি ক্ষেত্রটির নাম ' prev
' বা ' previous
' দিয়েছেন? এর স্থির প্রকারটি কী ছিল?), কিন্তু এটি বিমূর্ততা খুব কম ডিগ্রী হবে।
মডিউলারিটি তথ্য গোপনের সাথে সম্পর্কিত : স্থিতিশীল বৈশিষ্ট্য একটি ইন্টারফেসে নির্দিষ্ট করা হয়, এবং একটি মডিউল যে ইন্টারফেসটি প্রয়োগ করে মডিউলের মধ্যে সমস্ত বাস্তবায়ন বিশদ রাখে। মডিউলারিটি প্রোগ্রামারদের পরিবর্তনের সাথে লড়াই করতে সহায়তা করে, কারণ অন্যান্য মডিউলগুলি কেবল স্থিতিশীল ইন্টারফেসের উপর নির্ভর করে।
তথ্য আড়ালকরণকে এনক্যাপসুলেশন দ্বারা সহায়তা করা হয় (যাতে আপনার কোডটি অস্থির প্রয়োগের বিশদগুলির উপর নির্ভর করে না), তবে মড্যুলারটির জন্য এনক্যাপসুলেশন প্রয়োজনীয় নয়। উদাহরণস্বরূপ, যদি আপনি একটি বাস্তবায়ন করতে পারে List
সি গঠন, 'প্রকাশক next
' এবং ' prev
বিশ্বের কাছে' পয়েন্টার, কিন্তু একটি ইন্টারফেস প্রদান ধারণকারী initList()
, addToList()
এবংremoveFromList()
ফাংশন। ইন্টারফেসের নিয়ম অনুসরণ করা হয় তবে আপনি গ্যারান্টি দিতে পারেন যে নির্দিষ্ট বৈশিষ্ট্য সর্বদা রাখে যেমন ডেটা-কাঠামো সর্বদা বৈধ অবস্থায় থাকে তা নিশ্চিত করা। [উদাহরণস্বরূপ, ভারসাম্যতা সম্পর্কে পার্নাসের ক্লাসিক কাগজটি সমাবেশে একটি উদাহরণ সহ লেখা হয়েছিল। ইন্টারফেসটি একটি চুক্তি এবং নকশা সম্পর্কে যোগাযোগের একধরণের রূপ, এটি যান্ত্রিকভাবে পরীক্ষা করা প্রয়োজন হয় না, যদিও এটিই আমরা আজ নির্ভর করি।]
যদিও বিমূর্ত, মডুলার এবং এনক্যাপসুলেটেডের মতো পদার্থকে ইতিবাচক নকশার বিবরণ হিসাবে ব্যবহার করা হয়, তবে এটি উপলব্ধি করা গুরুত্বপূর্ণ যে এই গুণগুলির কোনওটির উপস্থিতি আপনাকে স্বয়ংক্রিয়ভাবে ভাল নকশা দেয় না:
যদি কোনও এন ^ 3 অ্যালগরিদম "চমত্কারভাবে এনক্যাপসুলেটেড" হয় তবে এটি উন্নত এন লগ এন অ্যালগরিদমের চেয়ে আরও খারাপ সম্পাদন করবে।
যদি কোনও ইন্টারফেস একটি নির্দিষ্ট অপারেটিং সিস্টেমে প্রতিশ্রুতি দেয়, তখন একটি ভিডিও গেমটি উইন্ডোজ থেকে আইপ্যাডে পোর্ট করার প্রয়োজন হলে মডুলার ডিজাইনের কোনওটিই উপলব্ধি করা যাবে না।
যদি তৈরি বিমূর্তিটি অনেকগুলি অযৌক্তিক বিবরণ প্রকাশ করে তবে এটি নিজস্ব ক্রিয়াকলাপ সহ একটি নতুন নির্মাণ তৈরি করতে ব্যর্থ হবে: এটি কেবল একই জিনিসটির অন্য নাম হবে।