উত্তর:
এখানে বেশিরভাগ উত্তরগুলি ওওপি-তে ফোকাস করে তবে এনক্যাপসুলেশন অনেক আগে শুরু হয়:
প্রতিটি ফাংশন একটি encapsulation হয় ; সিউডোকোডে:
point x = { 1, 4 }
point y = { 23, 42 }
numeric d = distance(x, y)
এখানে, distance
বিমানের দুটি পয়েন্টের মধ্যে (ইউক্লিডিয়ান) দূরত্বের গণনা encapsulates: এটি বাস্তবায়নের বিশদটি গোপন করে। এটি এনক্যাপসুলেশন, খাঁটি এবং সহজ।
বিমূর্তি হ'ল সাধারণীকরণের প্রক্রিয়া : একটি কংক্রিট বাস্তবায়ন গ্রহণ এবং এটিকে কিছুটা সম্পর্কিত, তথ্যের ধরণের হলেও এটি বিভিন্ন ক্ষেত্রে প্রযোজ্য। বিমূর্তির ধ্রুপদী উদাহরণ হ'লqsort
ডেটা সাজানোরজন্য সি এরকাজ:
বিষয়টি qsort
হ'ল এটি এটি যে ধরণের ডেটা বাছাই করে তার বিষয়ে চিন্তা করে না - বাস্তবে এটি কোন ডেটা বাছাই করে তা জানে না । বরং এর ইনপুট টাইপটি টাইপলেস পয়েন্টার ( void*
) যা কেবলমাত্র সি এর উপায় যা "আমি ডেটার ধরণের বিষয়ে চিন্তা করি না" (এটিকে টাইপ ইরেজরও বলা হয়)। গুরুত্বপূর্ণ বিষয়টি হ'ল qsort
ডেটা ধরণের নির্বিশেষে বাস্তবায়ন সর্বদা একই থাকে। একটাই জিনিস আছে পরিবর্তনের তুলনা ফাংশন, যা পৃথক ডাটা টাইপ থেকে ডাটা টাইপ হয়। qsort
সুতরাং ব্যবহারকারীটি ফাংশন আর্গুমেন্ট হিসাবে তুলনা ফাংশনটি সরবরাহ করবে বলে প্রত্যাশা করে।
এনক্যাপসুলেশন এবং বিমূর্ততা এতটা হাতের মুঠোয় চলে যায় যাতে আপনি এই বিষয়টিকে তৈরি করতে পারেন যে সেগুলি সত্যই অবিচ্ছেদ্য are ব্যবহারিক উদ্দেশ্যে, সম্ভবত এটি সত্য; এটি বলেছিল, এখানে এমন একটি এনক্যাপসুলেশন রয়েছে যা কোনও বিমূর্ততা খুব বেশি নয়:
class point {
numeric x
numeric y
}
আমরা পয়েন্টের স্থানাঙ্ককে এমপ্ল্যাপুলেট করি, তবে আমরা যৌক্তিকভাবে তাদের যৌক্তিকভাবে গ্রুপিংয়ের বাইরে বস্তুগতভাবে বিমূর্ত করি না।
এবং এখানে বিমূর্তির উদাহরণ যা এনকেপসুলেশন নয়:
T pi<T> = 3.1415926535
এটি একটি প্রদত্ত মান (π) সহ একটি জেনেরিক ভেরিয়েবল pi
এবং ঘোষণাপত্রটি ভেরিয়েবলের সঠিক প্রকারের বিষয়ে চিন্তা করে না। স্বীকারোক্তিযুক্ত, আমি বাস্তব কোডে এই জাতীয় কিছু খুঁজে পেতে কঠোরভাবে চাপলাম: বিমূর্ততা কার্যত সর্বদা encapsulation ব্যবহার করে। যাইহোক, উপরে নেই আসলে সি ++ (14) এ, অস্তিত্ব মাধ্যমে পরিবর্তনশীল টেমপ্লেট (= ভেরিয়েবলের জন্য জেনেরিক টেমপ্লেট); কিছুটা জটিল জটিল বাক্য গঠন সহ, যেমন:
template <typename T> constexpr T pi = T{3.1415926535};
এনক্যাপসুলেশন বাস্তবায়ন বিশদটি গোপন করছে যা জেনেরিক বা বিশেষায়িত আচরণের জন্য হতে পারে।
বিমূর্ততা একটি সাধারণীকরণ সরবরাহ করে (বলুন, আচরণের একটি সেট উপর) say
এখানে একটি ভাল পড়ার বিষয়: অবজেক্ট এজেন্সির অ্যাডওয়ার্ড ভি বেরার্ডের দ্বারা বিমূর্তকরণ, এনক্যাপসুলেশন এবং তথ্য গোপন করা।
অনেক উত্তর এবং তাদের উদাহরণ বিভ্রান্তিকর।
এনক্যাপসুলেশন হ'ল ডেটা এবং ফাংশনগুলির প্যাকিং যা সেই ডেটাতে একক উপাদানগুলিতে অপারেটিং করে এবং অবজেক্টের কিছু উপাদানগুলিতে অ্যাক্সেসকে সীমাবদ্ধ করে।
এনক্যাপসুলেশন মানে হ'ল কোনও বস্তুর অভ্যন্তরীণ উপস্থাপনা সাধারণত অবজেক্টের সংজ্ঞা থেকে বাইরে লুকানো থাকে।
অ্যাবস্ট্রাকশন হ'ল এমন একটি প্রক্রিয়া যা প্রয়োগের বিশদটি অন্তর্ভুক্ত না করে প্রয়োজনীয় বৈশিষ্ট্যগুলি উপস্থাপন করে।
এনক্যাপসুলেশন: - তথ্য গোপন করা ।
বিমূর্ততা: - বাস্তবায়ন গোপন ।
উদাহরণ:
class foo{
private:
int a, b;
public:
foo(int x=0, int y=0): a(x), b(y) {}
int add(){
return a+b;
}
}
foo
শ্রেণীর যে কোনও বস্তুর অভ্যন্তরীণ উপস্থাপনা শ্রেণীর বাইরে লুকানো থাকে। -> এনক্যাপসুলেশন।
এর অবজেক্টের যে কোনও অ্যাক্সেসযোগ্য সদস্য (ডেটা / ফাংশন) foo
সীমাবদ্ধ এবং কেবলমাত্র সেই অবজেক্টের মাধ্যমেই এটি অ্যাক্সেস করতে পারে।
foo foo_obj(3, 4);
int sum = foo_obj.add();
পদ্ধতির প্রয়োগ add
গোপন রয়েছে। -> বিমূর্ততা।
qsort
সিতে ফাংশন ব্যবহার করা বিমূর্ততার উদাহরণ। আপনি এটি প্রয়োগের বিশদ জানেন না। এখানে কোনও এনক্যাপসুলেশন জড়িত নেই। সি ++ তে কোনও অবজেক্টের ডেটা ফিল্ড আরম্ভ করতে কনস্ট্রাক্টর ব্যবহার করা এনক্যাপসুলেশনের উদাহরণ (কনস্ট্রাক্টরের মাধ্যমে অবজেক্টের উপাদানগুলির নিয়ন্ত্রিত অ্যাক্সেস)।
এনক্যাপসুলেশন কিছু জিনিস একটি বাক্সে রাখে এবং আপনাকে একটি পীফোল দেয়; এটি আপনাকে গিয়ারগুলির সাথে উপহাস থেকে বিরত রাখে।
বিমূর্ততা ফ্ল্যাট-আউট বিশদগুলিকে উপেক্ষা করে না, যেমন জিনিসগুলির গিয়ারস, র্যাচেটস, ফ্লাইওহিল বা পারমাণবিক কোর রয়েছে কিনা; তারা শুধু "যেতে"
এনক্যাপসুলেশন উদাহরণ:
বিমূর্তনের উদাহরণ:
এনক্যাপসুলেশনের অর্থ হ'ল ডেটা লুকানো যেমন গেটর এবং সেটার ব্যবহার ইত্যাদি iding
বিমূর্ততা অর্থ- বিমূর্ত শ্রেণি এবং ইন্টারফেস ব্যবহার করে বাস্তবায়ন লুকানো
বিমূর্ততা সাধারণ শব্দ হয়। অর্থাৎ এনক্যাপসুলেশন বিমূর্তির সাবসেট।
উদাহরণ 2: সমাধান স্থপতি ব্যক্তি উচ্চ পর্যায়ের সৃষ্টি করে বিমূর্ত সমগ্র সমাধান প্রযুক্তিগত নকশা, এবং এই নকশা তারপর কাছে হস্তান্তর করা হয় উন্নয়ন দল জন্য বাস্তবায়ন ।
এখানে, সমাধান আর্কিটেক্ট একটি বিমূর্ত হিসাবে কাজ করে এবং উন্নয়ন দলটি একটি এনক্যাপসুলেশন হিসাবে কাজ করে।
উদাহরণ 3: ব্যবহারকারী ডেটার এনক্যাপসুলেশন (নেটওয়ার্কিং)
বিমূর্ততা (বা মড্যুলারিটি) - প্রকারগুলি কম স্তরের প্রয়োগের সাথে বিরক্ত না করে বিট বা বাইটের চেয়ে উচ্চতর স্তরে চিন্তা করতে সক্ষম করে। উদাহরণস্বরূপ, প্রোগ্রামাররা কেবল একটি বাইটের অ্যারে হিসাবে পরিবর্তে একটি স্ট্রিংকে অক্ষর মানগুলির সেট হিসাবে ভাবা শুরু করতে পারে। উচ্চতর স্থির, প্রকারগুলি যেকোন আকারের সাবসিস্টেমগুলির মধ্যে ইন্টারফেসগুলি সম্পর্কে ভাবতে এবং প্রকাশ করতে সক্ষম করে। এটি স্থানীয়করণের আরও স্তরের সক্ষম করে যাতে এই দুটি সাবসিস্টেম যোগাযোগ করার সময় সাবসিস্টেমের আন্তঃব্যবহারের জন্য প্রয়োজনীয় সংজ্ঞাগুলি সামঞ্জস্য থাকে। সূত্র
উপরে অনেক ভাল উত্তর সরবরাহ করা হয়েছে তবে আমি আমার (জাভা) দৃষ্টিভঙ্গি এখানে উপস্থাপন করতে যাচ্ছি।
ডেটা এনক্যাপসুলেশনটির অর্থ সহজভাবে কোনও শ্রেণিতে লজিক্যাল গ্রুপযুক্ত ডেটা মোড়ানো এবং নিয়ন্ত্রণ করা and এটি সাধারণত অন্য কীওয়ার্ডের সাথে সম্পর্কিত - ডেটা লুকানো । এটি অ্যাক্সেস মডিফায়ার ব্যবহার করে জাভাতে অর্জন করা হয়েছে ।
একটি সাধারণ উদাহরণটি হ'ল একটি প্রাইভেট ভেরিয়েবল সংজ্ঞায়িত করা এবং গেটর এবং সেটার পদ্ধতি ব্যবহার করে এটিতে অ্যাক্সেস দেওয়া বা কোনও পদ্ধতি ব্যক্তিগত হিসাবে তৈরি করা কারণ এটি কেবলমাত্র ক্লাসের সাথে যুক্ত is এই পদ্ধতিগুলি এবং ভেরিয়েবলগুলি সম্পর্কে ব্যবহারকারীদের জানার দরকার নেই।
দ্রষ্টব্য : এটিকে ভুল বোঝাবুঝি করা উচিত নয় যে এনক্যাপসুলেশন কেবলমাত্র তথ্য গোপনের বিষয়ে। যখন আমরা এনক্যাপসুলেশন বলি, তখন গ্রুপিং বা প্যাকেজিং বা সম্পর্কিত ডেটা এবং আচরণ একসাথে বান্ডিল করার উপর জোর দেওয়া উচিত।
অন্যদিকে ডেটা অ্যাবস্ট্রাকশন হ'ল সাধারণীকরণের ধারণাটি যাতে নীচের জটিল যুক্তি ব্যবহারকারীর সামনে না আসে। জাভাতে এটি ইন্টারফেস এবং বিমূর্ত ক্লাস ব্যবহার করে অর্জিত হয় ।
উদাহরণ -
বলুন আমাদের একটি ইন্টারফেস অ্যানিমাল রয়েছে এবং এটির একটি ফাংশন মেকসাউন্ড () রয়েছে । দুটি কংক্রিট ক্লাস আছে কুকুর এবং বিড়াল যে এই ইন্টারফেস বাস্তবায়ন। এই কংক্রিট শ্রেণীর মেকসাউন্ড () ফাংশনের পৃথক বাস্তবায়ন রয়েছে। এখন বলি যে আমাদের কাছে একটি প্রাণী রয়েছে (আমরা এটি কিছু বাহ্যিক মডিউল থেকে পাই)। সমস্ত ব্যবহারকারী জানেন যে এটি যে বস্তুটি গ্রহণ করছে তা হ'ল কিছু প্রাণী এবং এটি পশুর শব্দ প্রিন্ট করা ব্যবহারকারীদের দায়িত্ব। একটি নিষ্ঠুর বলের উপায় হ'ল যে প্রকারটি প্রকারটি তা টাইপ করে তা সনাক্ত করতে চেক করা , তারপরে এটিকে প্রাণী প্রকারে টাইপকাস্ট করুন এবং তারপরে মেকসাউন্ড () এ কল করুন। তবে একটি সুস্পষ্ট উপায় হ'ল বিমূর্ত করা । প্রাণী হিসাবে একটি হিসাবে ব্যবহার করুন রেফারেন্সএবং এতে মেকসাউন্ড () কল করুন। এ রানটাইম কি বাস্তব বস্তু টাইপ সঠিক ফাংশন প্রার্থনা করা হবে উপর নির্ভর করে।
আরও বিশদ এখানে ।
জটিল যুক্তিটি সার্কিট বোর্ডে থাকে যা একটি টাচপ্যাডে এনপ্যাপুলেটেড থাকে এবং এটি ব্যবহারকারীর কাছে অ্যাবস্ট্রাক্ট করার জন্য একটি দুর্দান্ত ইন্টারফেস (বোতাম) সরবরাহ করা হয়।
PS: উপরের লিঙ্কগুলি আমার ব্যক্তিগত ব্লগে।
আপনি যখন গাড়ি চালাচ্ছেন, ঠিক তেমনি আপনি জানেন যে গ্যাসের প্যাডেলটি কী করে তবে আপনি এটির পেছনের প্রক্রিয়াটি জানেন না কারণ এটি আবরণযুক্ত।
আমি সি # তে একটি উদাহরণ দিই। মনে করুন আপনার একটি পূর্ণসংখ্যা রয়েছে:
int Number = 5;
string aStrNumber = Number.ToString();
আপনি নাম্বার.স্ট্রাস্টিং () এর মতো একটি পদ্ধতি ব্যবহার করতে পারেন যা আপনাকে 5 নম্বরের চরিত্র উপস্থাপনা এবং স্ট্রিং অবজেক্টে সঞ্চয় করে। পদ্ধতিটি আপনাকে জানায় যে এটি কীভাবে এটি করে তার পরিবর্তে এটি কী করে।
এগুলি কিছুটা अस्पष्ट ধারণা যা কম্পিউটার সায়েন্স এবং প্রোগ্রামিংয়ের পক্ষে অনন্য নয়। আমি কিছু অতিরিক্ত চিন্তাভাবনা পেশ করতে চাই যা অন্যদের এই গুরুত্বপূর্ণ ধারণাটি বুঝতে সহায়তা করে।
এনক্যাপসুলেশন - প্রয়োজনীয় ইন্টারফেস প্রকাশ করার সময় কোনও সিস্টেমের নির্দিষ্ট অংশগুলিতে লুকানো এবং / অথবা অ্যাক্সেসকে সীমাবদ্ধ করে।
বিমূর্ততা - কংক্রিটের বাস্তবতা, নির্দিষ্ট বস্তু বা প্রকৃত উদাহরণগুলি বাদ দিয়ে নির্দিষ্ট কিছু বৈশিষ্ট্যযুক্ত কিছু বিবেচনা করা, যার ফলে জটিলতা হ্রাস পায়।
প্রধান সাদৃশ্য হ'ল এই কৌশলগুলি লক্ষ্য এবং বোধগম্যতা উন্নত করা।
মূল পার্থক্য হ'ল বিমূর্ততা জিনিসগুলিকে আরও সহজভাবে উপস্থাপনের একটি মাধ্যম (প্রায়শই প্রতিনিধিত্বকে আরও বিস্তৃতভাবে প্রযোজ্য করে তোলার জন্য), তবে এনক্যাপসুলেশনটি অন্য জিনিসগুলির সাথে কোনওভাবে যোগাযোগ করার উপায় পরিবর্তন করার পদ্ধতি।
এখানে এনকেপসুলেশনের একটি উদাহরণ যা আশাকরি জিনিসগুলি আরও স্পষ্ট করে তুলেছে:
এখানে আমাদের একটি আরডুইনো ইউনো এবং একটি ঘেরের মধ্যে একটি আরডুইনো ইউনো রয়েছে। এনক্যাপসুলেশন সম্পর্কে কী রয়েছে তা একটি ঘের a
এনক্যাপসুলেশনটি লক্ষ্য করে বাইরের প্রভাব এবং জ্ঞান থেকে কিছু উপাদান রক্ষা করার পাশাপাশি অন্যান্য বিষয়গুলির সাথে ইন্টারফেস করা উচিত এমন উপাদানগুলি প্রকাশ করা। প্রোগ্রামিংয়ের পদগুলিতে, এতে অ্যাক্সেস মডিফায়ার হলেও তথ্যের আড়াল থাকা জড়িত থাকে , যা নির্দিষ্ট ভেরিয়েবল এবং / অথবা বৈশিষ্ট্যগুলি পড়তে এবং লিখতে পারে সেই পরিমাণে পরিবর্তন করে।
তবে এর বাইরে, এনক্যাপসুলেশনটি আরও কার্যকরভাবে those বাহ্যিক ইন্টারফেস সরবরাহ করা s আমাদের আরডুইনোর উদাহরণ সহ, এটিতে দুর্দান্ত বোতাম এবং স্ক্রিন অন্তর্ভুক্ত থাকতে পারে যা ডিভাইসের সাথে ব্যবহারকারীর ইন্টারঅ্যাকশনকে আরও সহজ করে তোলে। তারা ব্যবহারকারীকে ডিভাইসের আচরণকে প্রভাবিত করার এবং এর ক্রিয়াকলাপ সম্পর্কে দরকারী তথ্য অর্জনের সহজ উপায় সরবরাহ করে যা অন্যথায় আরও বেশি কঠিন।
প্রোগ্রামিং, এই ধরনের একটি হিসাবে একটি খণ্ডনীয় কনস্ট্রাক্ট মধ্যে বিভিন্ন উপাদান গোষ্ঠী জড়িত থাকে, function
, class
, অথবা object
। এর মধ্যে রয়েছে এই কনস্ট্রাক্টগুলির সাথে কথোপকথনের মাধ্যমগুলির পাশাপাশি তাদের সম্পর্কে দরকারী তথ্য অর্জনের পদ্ধতিও।
এনক্যাপসুলেশন প্রোগ্রামারগুলিকে অনেকগুলি অতিরিক্ত উপায়ে সহায়তা করে, যার মধ্যে কমপক্ষে কোড বজায় রাখা এবং টেস্টিবিলিটি উন্নত হয়।
যদিও এখানে আরও অনেক উত্তর বিমূর্তিটিকে সাধারণীকরণ হিসাবে সংজ্ঞায়িত করেছে, আমি ব্যক্তিগতভাবে মনে করি যে সংজ্ঞাটি বিপথগামী। আমি বলব যে জেনারালাইজেশন আসলে একটি নির্দিষ্ট ধরণের বিমূর্ততা, অন্যভাবে নয়। অন্য কথায়, সমস্ত সাধারণীকরণ বিমূর্ততা, তবে সমস্ত বিমূর্ততা জেনারালাইজেশন হয় না ।
আমি এখানে বিমূর্ততা সম্পর্কে ভাবতে পছন্দ করি:
আপনি কি ছবিটি বলতে পারেন একটি গাছ আছে? সম্ভাবনা আপনি হবে। তবে আসলেই কি গাছ? ঠিক আছে, অবশ্যই না! এটি এমন একটি পিক্সেলের গুচ্ছ যা দেখতে আমরা কোনও গাছকে ডাকি something আমরা বলতে পারি যে এটি একটি বাস্তব গাছের বিমূর্ততা উপস্থাপন করে। লক্ষ্য করুন যে গাছের কয়েকটি দৃশ্য বিবরণ বাদ দেওয়া হয়েছে। এছাড়াও, এটি বৃদ্ধি পায় না, জল গ্রহণ করে বা অক্সিজেন উত্পাদন করে না। এটা কিভাবে পারে? এটি আপনার কম্পিউটারের স্মৃতিতে বাইট দ্বারা প্রতিনিধিত্ব করা কোনও স্ক্রিনে রঙের একগুচ্ছ।
এবং এখানে বিমূর্ততার সারাংশ। এটি জিনিসগুলিকে সরল করার একটি উপায় যাতে তারা বুঝতে সহজ হয়। আপনার মাথার মধ্য দিয়ে যাওয়া প্রতিটি ধারণা বাস্তবতার বিমূর্ততা। আপনার গাছের মানসিক চিত্রটি এই জেপিগের চেয়ে প্রকৃত গাছ আর নয়।
প্রোগ্রামিংয়ে, আমরা Tree
সিমুলেটেড ক্রমবর্ধমান, জল গ্রহণ এবং অক্সিজেন উত্পাদনের জন্য পদ্ধতি সহ একটি শ্রেণী তৈরি করে আমাদের সুবিধার জন্য এটি ব্যবহার করতে পারি । আমাদের সৃষ্টি এমন কিছু হবে যা আমাদের প্রকৃত গাছগুলির অভিজ্ঞতার প্রতিনিধিত্ব করে এবং কেবলমাত্র সেই উপাদানগুলিকে অন্তর্ভুক্ত করে যা আমরা আমাদের বিশেষ সিমুলেশনটির জন্য সত্যই যত্নশীল। বাইটস এবং গণিতের সাথে আমাদের কোনও কিছুর অভিজ্ঞতা উপস্থাপনের উপায় হিসাবে আমরা বিমূর্ততা ব্যবহার করি।
প্রোগ্রামিংয়ের বিমূর্ততা আমাদের বেশ কয়েকটি "কংক্রিট" অবজেক্টের ধরণের (প্রকৃতপক্ষে বিদ্যমান প্রকারের) মধ্যে সাধারণতা বিবেচনা করতে এবং একটি অনন্য সত্তার মধ্যে সেই সাধারণতাকে সংজ্ঞায়িত করতেও সহায়তা করে। উদাহরণস্বরূপ, আমাদের Tree
ক্লাসটি একটি থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে abstract class Plant
, যার বেশ কয়েকটি বৈশিষ্ট্য এবং পদ্ধতি রয়েছে যা আমাদের উদ্ভিদের মতো সমস্ত শ্রেণীর জন্য প্রযোজ্য, তবে প্রতিটি ধরণের উদ্ভিদের সাথে নির্দিষ্ট সেগুলি সরিয়ে দেয় । এটি কোডের নকলকে উল্লেখযোগ্যভাবে হ্রাস করতে পারে এবং রক্ষণাবেক্ষণযোগ্যতা উন্নত করে।
একটি abstract class
এবং সমতল ব্যবহারিক পার্থক্য class
ধারণাগতভাবে এর কোন "সত্য" উদাহরণ নেই abstract class
। কোনও Plant
অবজেক্ট তৈরির অর্থ হবে না কারণ এটি যথেষ্ট নির্দিষ্ট নয়। প্রতিটি "রিয়েল" Plant
এটি আরও নির্দিষ্ট ধরণের Plant
।
এছাড়াও, আমরা যদি আমাদের প্রোগ্রামটি আরও বাস্তববাদী হতে চাই, আমরা আমাদের Tree
শ্রেণিটি খুব বিমূর্ত হতে পারে এই বিষয়টি বিবেচনা করতে চাই । প্রকৃতপক্ষে, যে Tree
একটি নির্দিষ্ট ধরনের Tree
, তাই আমরা যেমন যারা ধরনের ক্লাস তৈরী করতে পারে Birch
, Maple
ইত্যাদি আমাদের, সম্ভবত এখন থেকে যা উত্তরাধিকারী abstract
, Tree
বর্গ।
অ্যাবস্ট্রাকশনের আরেকটি ভাল উদাহরণ জাভা ভার্চুয়াল মেশিন (জেভিএম) , যা জাভা কোডটি চালানোর জন্য একটি ভার্চুয়াল বা বিমূর্ত কম্পিউটার সরবরাহ করে। এটি মূলত কোনও সিস্টেমের সমস্ত প্ল্যাটফর্মের নির্দিষ্ট উপাদানগুলি কেড়ে নেয় এবং বিশেষত কোনও সিস্টেমকে বিবেচনা না করে "কম্পিউটার" এর একটি বিমূর্ত ইন্টারফেস সরবরাহ করে।
এনক্যাপসুলেশন বিমূর্তির থেকে পৃথক যে এটি 'আসল' বা 'নির্ভুল' কিছু কীভাবে হয় তার সাথে কিছুই করার থাকে না। এটি কোনও কিছুর উপাদানগুলি সরল বা আরও ব্যাপকভাবে প্রযোজ্য করার জন্য এটি সরায় না । বরং এটি অনুরূপ উদ্দেশ্য অর্জনের জন্য নির্দিষ্ট উপাদানগুলিকে আড়াল করতে পারে ।
এনক্যাপসুলেশন : অবজেক্টের প্রকৃত ব্যবহারকারীদের কাছ থেকে অযাচিত / প্রত্যাশিত / স্বতন্ত্র প্রয়োগের বিবরণ গোপন করছে। যেমন
List<string> list = new List<string>();
list.Sort(); /* Here, which sorting algorithm is used and hows its
implemented is not useful to the user who wants to perform sort, that's
why its hidden from the user of list. */
বিমূর্ততা : সাধারণীকরণ সরবরাহ করার একটি উপায় এবং অতএব বিশাল বৈচিত্র্যের বস্তুর সাথে কাজ করার একটি সাধারণ উপায়। যেমন
class Aeroplane : IFlyable, IFuelable, IMachine
{ // Aeroplane's Design says:
// Aeroplane is a flying object
// Aeroplane can be fueled
// Aeroplane is a Machine
}
// But the code related to Pilot, or Driver of Aeroplane is not bothered
// about Machine or Fuel. Hence,
// pilot code:
IFlyable flyingObj = new Aeroplane();
flyingObj.Fly();
// fighter Pilot related code
IFlyable flyingObj2 = new FighterAeroplane();
flyingObj2.Fly();
// UFO related code
IFlyable ufoObj = new UFO();
ufoObj.Fly();
// **All the 3 Above codes are genaralized using IFlyable,
// Interface Abstraction**
// Fly related code knows how to fly, irrespective of the type of
// flying object they are.
// Similarly, Fuel related code:
// Fueling an Aeroplane
IFuelable fuelableObj = new Aeroplane();
fuelableObj.FillFuel();
// Fueling a Car
IFuelable fuelableObj2 = new Car(); // class Car : IFuelable { }
fuelableObj2.FillFuel();
// ** Fueling code does not need know what kind of vehicle it is, so far
// as it can Fill Fuel**
বিমূর্তি এবং এনক্যাপসুলেশন এর মধ্যে পার্থক্য।
বিমূর্ততা: সরল / ভিন্ন উপায়ে এমন কিছু উপস্থাপনের ধারণা, যা বোঝা ও ব্যবহার করা সহজতর বা পরিস্থিতিটির সাথে আরও প্রাসঙ্গিক।
এমন কোনও শ্রেণীর কথা বিবেচনা করুন যা ইমেল প্রেরণ করে ... এটি আপনাকে একরকম মেসেঞ্জার বয় হিসাবে নিজেকে দেখানোর জন্য বিমূর্তি ব্যবহার করে যাতে আপনি ইমেলসেন্ডার.সেন্ডকে (মেল, প্রাপক) কল করতে পারেন। এটি আসলে কী করে - পিওপি 3 / এসএমটিপি চয়ন করে, কলিং সার্ভারগুলি, মাইমেটি ট্রান্সমিশন ইত্যাদি বিমূর্ত হয়ে যায়। আপনি কেবল আপনার মেসেঞ্জার ছেলেকে দেখতে পাচ্ছেন।
এনক্যাপসুলেশন: কোনও সামগ্রীর জন্য ব্যক্তিগত এবং ডেটা এবং পদ্ধতিগুলি সুরক্ষিত এবং আড়াল করার ধারণা। এটি স্বাধীন এবং বুদ্ধিমান কিছু তৈরির সাথে আরও বেশি আলোচনা করে।
উদাহরণস্বরূপ, আমাকে নিন। আমি আমার হৃদস্পন্দনকে বিশ্বের অন্যান্য স্থান থেকে সজ্জিত করি। কারণ আমি চাই না যে অন্য কেউ এই ভেরিয়েবলটি পরিবর্তন করছে এবং আমার কাজ করার জন্য এটির সেট করার জন্য আমার আর কারও প্রয়োজন নেই। এটি আমার পক্ষে অত্যন্ত গুরুত্বপূর্ণ, তবে এটি কী তা আপনাকে জানার দরকার নেই এবং সম্ভবত আপনি কোনওভাবেই পাত্তা দিচ্ছেন না।
চারপাশে আপনি দেখতে পাবেন যে আপনি স্পর্শ করেছেন প্রায় সমস্ত কিছুই বিমূর্ততা এবং এনক্যাপসুলেশন উভয়ের উদাহরণ। উদাহরণস্বরূপ আপনার ফোনটি আপনাকে যা বলেছে তা নিতে এবং এটি অন্য কারও কাছে বলার পক্ষে সক্ষম হওয়ার বিমূর্ততা উপস্থাপন করে - জিএসএম, প্রসেসরের আর্কিটেকচার, রেডিও ফ্রিকোয়েন্সিগুলি এবং আপনি জানেন না বা যত্ন করছেন না এমন আরও এক মিলিয়ন জিনিস coveringেকে রাখে। এটি সিরিয়াল নম্বর, আইডি নম্বর, ফ্রিকোয়েন্সি ইত্যাদির মতো আপনার কাছ থেকে নির্দিষ্ট কিছু ডেটাওকেপসেট করে
এটি সমস্তকে বাস করার জন্য একটি সুন্দর জায়গা করে তোলে: ডি
বিমূর্ততা: কেবল প্রয়োজনীয় তথ্য প্রদর্শিত হবে। আসুন কম্পিউটারে স্যুইচ করার উদাহরণের দিকে মনোনিবেশ করি সিস্টেমটি এখনও লোড হওয়ার সময় ব্যবহারকারী কী হবে তা জানতে হবে না (সেই তথ্য ব্যবহারকারীর কাছ থেকে লুকানো আছে)।
এটিএম এর আরেকটি উদাহরণ নেওয়া যাক। গ্রাহকটি কীভাবে মেশিনটি পিনটি পড়ে এবং লেনদেনটি প্রক্রিয়াজাত করে তা জানার দরকার নেই, তাকে কেবল পিনটি প্রবেশ করা, নগদ নেওয়া এবং ছেড়ে যাওয়া দরকার।
এনক্যাপসুলেশন: সংঘর্ষের সংবেদনশীল ডেটা লুকিয়ে রাখার सौदा তাই এর অংশটি ব্যক্তিগত করে zing এটি বাইরে থেকে কোনও অ্যাক্সেস না দিয়ে কিছু তথ্য তার ক্লায়েন্টদের কাছে ব্যক্তিগত রাখার একটি উপায়।
আরেকটি উদাহরণ:
ধরুন আমি এইর মতো একটি পরিবর্তনীয় আয়তক্ষেত্র শ্রেণি তৈরি করেছি:
class Rectangle {
public:
Rectangle(int width, int height) : width_(width), height_(height) {}
int width() const { return width_; }
int height() const { return height_; }
private:
int width_;
int height_;
}
এখন এটা স্পষ্ট যে আমি প্রস্থ এবং উচ্চতা (প্রবেশাধিকার একরকমভাবে সীমাবদ্ধ) আবৃত করেছি , কিন্তু আমি তা করি নি কোনও কিছু বিমূর্ত করি নি (ঠিক আছে, সম্ভবত আমি আয়তক্ষেত্র স্থানাঙ্ক স্থানে অবস্থিত যেখানে উপেক্ষা করেছি, তবে এটি একটি ত্রুটি উদাহরণস্বরূপ)।
ভাল বিমূর্ততা সাধারণত ভাল encapsulation বোঝায়।
ভাল বিমূর্তনের একটি উদাহরণ একটি জেনেরিক ডাটাবেস সংযোগ শ্রেণি। এর পাবলিক ইন্টারফেসটি ডাটাবেস-অজোনস্টিক, এবং খুব সহজ, তবুও আমাকে সংযোগের সাথে যা করতে চাই তা করতে দেয়। এবং আপনি দেখতে পাচ্ছেন? এখানে এনক্যাপসুলেশনও রয়েছে, কারণ শ্রেণীর ভিতরে সমস্ত নিম্ন স্তরের হ্যান্ডলগুলি এবং কল থাকতে হবে।
Abstraction
এবং Encapsulation
একটি একক সাধারণ উদাহরণ ব্যবহার করে-------------------------------------------------- -------------------------------------------------- --------------------------------
জটিল সমস্যা গণনার জন্য আমরা সবাই ক্যালকুলেটর ব্যবহার করি!
Your both example tell about just encapsulation, not abstraction
; অ্যাবস্ট্রাকশনটির hiding
পরিবর্তে এর কোনও সম্পর্ক নেইGeneralizing
বিমূর্ততা: বিমূর্ততা মানে What
কার্যকারিতার অংশ দেখানো ।
এনক্যাপসুলেশন: এনক্যাপসুলেশন মানে How
কার্যকারিতার অংশটি আড়াল করা ।
একটি খুব সহজ উদাহরণ নিতে দেয়
/// <summary>
/// We have an Employee class having two properties EmployeeName and EmployeeCode
/// </summary>
public class Employee
{
public string EmplpyeeName { get; set; }
public string EmployeeCode { get; set; }
// Add new employee to DB is the main functionality, so are making it public so that we can expose it to external environment
// This is ABSTRACTION
public void AddEmployee(Employee obj)
{
// "Creation of DB connection" and "To check if employee exists" are internal details which we have hide from external environment
// You can see that these methods are private, external environment just need "What" part only
CreateDBConnection();
CheckIfEmployeeExists();
}
// ENCAPLUSATION using private keyword
private bool CheckIfEmployeeExists()
{
// Here we can validate if the employee already exists
return true;
}
// ENCAPLUSATION using private keyword
private void CreateDBConnection()
{
// Create DB connection code
}
}
কনসোল অ্যাপ্লিকেশন প্রোগ্রাম ক্লাস
class Program
{
static void Main(string[] args)
{
Employee obj = new Employee();
obj.EmplpyeeName = "001";
obj.EmployeeCode = "Raj";
// We have exposed only what part of the functionality
obj.AddEmployee(obj);
}
}
স্ট্যাকের উদাহরণটি নেওয়া যাক। এটি অ্যারে বা একটি লিঙ্কযুক্ত তালিকা ব্যবহার করে প্রয়োগ করা যেতে পারে। তবে এটি যে অপারেশনগুলিকে সমর্থন করে তা হ'ল পুশ এবং পপ।
এখন বিমূর্ততা কেবলমাত্র ইন্টারফেসগুলি পুশ এবং পপ উন্মুক্ত করছে। অন্তর্নিহিত উপস্থাপনাটি লুকানো আছে (এটি একটি অ্যারে বা লিঙ্কযুক্ত তালিকা?) এবং একটি ভাল সংজ্ঞায়িত ইন্টারফেস সরবরাহ করা হয়। এখন আপনি কীভাবে নিশ্চিত করবেন যে বিমূর্ত ডেটাতে কোনও দুর্ঘটনাজনক অ্যাক্সেস তৈরি হয়নি? এখান থেকেই এনক্যাপসুলেশন আসে example উদাহরণস্বরূপ, সি ++ এর ক্লাসগুলি অ্যাক্সেস স্পেসিফায়ার ব্যবহার করে যা নিশ্চিত করে যে দুর্ঘটনাজনিত অ্যাক্সেস এবং পরিবর্তন রোধ করা হয়েছে। এবং এছাড়াও, উপরে বর্ণিত ইন্টারফেসগুলি সর্বজনীন হিসাবে তৈরি করে, এটি নিশ্চিত করে যে স্ট্যাকটি পরিচালনা করার একমাত্র উপায় হ'ল সুসংজ্ঞায়িত ইন্টারফেসের মাধ্যমে। প্রক্রিয়াটিতে, এটি ডেটা এবং কোডটিকে একত্রিত করেছে যা এটি ব্যবহার করতে পারে (আসুন এখানে বন্ধুটির সাথে জড়িত না হয়ে)) তা হল, কোড এবং ডেটা একত্রে আবদ্ধ বা আবদ্ধ বা আবদ্ধ হয়।
এনক্যাপসুলেশনটি এমন একটি ক্যাপসুল যা জটিল এবং তাই এনক্যাপসুলেশনটিতে জটিলতা গুটিয়ে ফেলা হয় ... যদিও বিমূর্ততা এমন কোনও বস্তুর বৈশিষ্ট্য যা অন্য বস্তুর থেকে পৃথক হয় ...
এক বা একাধিক পদ্ধতির বিমূর্ত ব্যবহার করে শ্রেণীর বিমূর্ততা তৈরি করে বিমূর্ততা অর্জন করা যায়। যা বৈশিষ্ট্য ছাড়া কিছুই নয় যা শ্রেণি দ্বারা এটি প্রসারিত করা উচিত। যেমন আপনি যখন গাড়ী আবিষ্কার করেন / ডিজাইন করেন আপনি একটি বৈশিষ্ট্য নির্ধারণ করেন যেমন গাড়ীর 4 টি দরজা, ব্রেক, স্টিয়ারিং হুইল ইত্যাদি থাকা উচিত ... সুতরাং যে কেউ এই নকশাটি ব্যবহার করে তার এই বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করা উচিত। বাস্তবায়ন বিমূর্ততার প্রতিটি মাথা নয়। এটি কেবল বৈশিষ্ট্যগুলি সংজ্ঞায়িত করবে যা অন্তর্ভুক্ত করা উচিত।
এনক্যাপসুলেশন ডেটা এবং শ্রেণিভুক্ত একটি ক্যাপসুলে আচরণ রাখার মাধ্যমে প্রাপ্ত করা হয় এবং পাবলিক, প্রাইভেট, উত্তরাধিকার, সমষ্টি বা রচনার সাথে সুরক্ষিত যেমন অ্যাক্সেস মডিফায়ার ব্যবহার করে। সুতরাং আপনি কেবলমাত্র প্রয়োজনীয় জিনিসগুলি দেখান, এটিও কেবলমাত্র আপনি যে পরিমাণ প্রদর্শন করতে চান তা কেবল। অর্থাত্ জনসাধারণ, সুরক্ষিত, বন্ধুত্বপূর্ণ এবং বেসরকারী কা তহবিল …… উদাহরণস্বরূপ জিএম উপরের গাড়ির বিমূর্ত নকশাটি ব্যবহার করার সিদ্ধান্ত নিয়েছে। তবে তাদের বিভিন্ন পণ্য একই বৈশিষ্ট্যযুক্ত এবং প্রায় একই কার্যকারিতা করে। সুতরাং তারা একটি ক্লাস লিখেন যা উপরের বিমূর্ত শ্রেণিকে প্রসারিত করে। এতে বলা হয়েছে যে গিয়ার বাক্স কীভাবে কাজ করা উচিত, কীভাবে বিরতি কাজ করা উচিত, স্টিয়ারিং হুইল কীভাবে কাজ করা উচিত। তারপরে সমস্ত পণ্য কেবল এই সাধারণ কার্যকারিতাটি ব্যবহার করে। গিয়ার বক্স কীভাবে কাজ করে বা ব্রেকিং কাজ করে বা স্টিয়ারিং হুইল ওয়ার্কগুলি কাজ করে তা তাদের জানা দরকার।
দুটোই শক্তিশালী; তবে অ্যাবস্ট্রাকশন ব্যবহারের জন্য এনক্যাপসুলেশনের চেয়ে আরও দক্ষতা প্রয়োজন এবং বড় অ্যাপ্লিকেশন / পণ্যগুলি বিমূর্ততার সাথে বেঁচে থাকতে পারে না।
থেকে এই
ওওপিএসে এনক্যাপসুলেশন এবং বিমূর্তনের মধ্যে পার্থক্য
বিমূর্তি এবং এনক্যাপসুলেশন দুটি গুরুত্বপূর্ণ অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (ওওপিএস) ধারণা are এনক্যাপসুলেশন এবং বিমূর্ততা উভয়ই আন্তঃসম্পর্কিত পদ।
এনক্যাপসুলেশন এবং বিমূর্তনের মধ্যে বাস্তব জীবনের পার্থক্য
এনক্যাপসুলেট মানে আড়াল করা। এনক্যাপসুলেশনকে ডেটা আড়ালকরণও বলা হয় You এনক্যাপসুলেশন মোড়ানো হয়, কেবল বৈশিষ্ট্য এবং পদ্ধতি লুকায়। এনক্যাপসুলেশনটি একক ইউনিটে কোড এবং ডেটা আড়াল করার জন্য বিশ্বের বাইরে থেকে ডেটা সুরক্ষার জন্য ব্যবহৃত হয়। ক্লাস হ'ল এনক্যাপসুলেশনের সর্বোত্তম উদাহরণ।
বিমূর্ততা উদ্দেশ্য ব্যবহারকারীকে শুধুমাত্র প্রয়োজনীয় বিশদ দেখানো বোঝায়। নামটি যেমন বোঝায়, বিমূর্তিটি হ'ল "কোনও কিছুর বিমূর্ত রূপ"। আমরা প্রোগ্রামিং ভাষায় বিমূর্ততা ক্লাস তৈরি করতে ব্যবহার করি। বিমূর্ত শ্রেণি পদ্ধতি এবং শ্রেণীর বৈশিষ্ট্যগুলির বিমূর্ত দৃষ্টিভঙ্গি উপস্থাপন করে।
এনক্যাপসুলেশন এবং বিমূর্তনের মধ্যে প্রয়োগের পার্থক্য
বিমূর্ততা ইন্টারফেস এবং বিমূর্ত শ্রেণি ব্যবহার করে প্রয়োগ করা হয় যখন এনক্যাপসুলেশন ব্যক্তিগত এবং সুরক্ষিত অ্যাক্সেস মডিফায়ার ব্যবহার করে প্রয়োগ করা হয়।
ওওপিএস প্রোগ্রামারদের অ-উদ্দেশ্যমূলক পদ্ধতিতে ডেটা অ্যাক্সেস করা থেকে বিরত রেখে কোনও প্রকারের (যেমন নিশ্চিতভাবে ডেটা যথাযথভাবে ব্যবহৃত হয় তা নিশ্চিত করার জন্য) এনক্যাপসুলেশন ব্যবহার করে। এনক্যাপসুলেশনের মাধ্যমে, কেবলমাত্র পূর্ব নির্ধারিত ফাংশনগুলির ডেটা অ্যাক্সেস করতে পারে। অ্যাক্সেস সীমাবদ্ধতার (পাবলিক / প্রাইভেট ইত্যাদি) একসাথে বান্ডিল করা ডেটাটাইপস এবং ক্রিয়াকলাপগুলির জন্য পদ্ধতি (পদ্ধতি) একটি শ্রেণি।
আমি সহজ পদ্ধতিতে এনক্যাপসুলেশন প্রদর্শনের চেষ্টা করব .. দেখা যাক ..
এনক্যাপসুলেশন হ'ল -
এনক্যাপসুলেশন বিমূর্তি প্রয়োগ করে।
এবং বিমূর্তিটি হ'ল -
একটি উদাহরণ দেখতে দিন-
নীচের চিত্রটি "গ্রাহকের বিবরণকে একটি ডেটাবেসে অ্যাড-এড করতে হবে" এর একটি জিইউআই দেখায়।
চিত্রটি দেখে আমরা বলতে পারি যে আমাদের গ্রাহক শ্রেণি দরকার।
পদক্ষেপ - 1: আমার গ্রাহক শ্রেণীর কী প্রয়োজন?
অর্থাত
1 ডাটাবেসে গ্রাহক কোড এবং গ্রাহকের নাম যুক্ত করার কাজ।
নেমস্পেস কাস্টমারকন্টেন্ট {পাবলিক ক্লাস কাস্টমার {পাবলিক স্ট্রিং কাস্টমার কোড = ""; পাবলিক স্ট্রিং গ্রাহক নাম = ""; সর্বজনীন শূন্য ADD () {// আমার ডিবি কোড এখানে যাবে}
এখন শুধুমাত্র ADD পদ্ধতিটি এখানে একা কাজ করবে না।
পদক্ষেপ -২: বৈধতা কীভাবে কাজ করবে, এডিডি ফাংশন আইন?
আমাদের ডাটাবেস সংযোগ কোড এবং বৈধকরণ কোড (অতিরিক্ত পদ্ধতি) প্রয়োজন হবে।
public bool Validate()
{
//Granular Customer Code and Name
return true;
}
public bool CreateDBObject()
{
//DB Connection Code
return true;
}
class Program
{
static void main(String[] args)
{
CustomerComponent.Customer obj = new CustomerComponent.Customer;
obj.CustomerCode = "s001";
obj.CustomerName = "Mac";
obj.Validate();
obj.CreateDBObject();
obj.ADD();
}
}
এখন শেষ ব্যবহারকারীর কাছে অতিরিক্ত পদ্ধতিগুলি (বৈধতা (); ক্রিয়েটডিবিঅবজেক্ট () [জটিল এবং অতিরিক্ত পদ্ধতি]) দেখানোর দরকার নেই nd এবং ব্যবহারকারীকে কেবল গ্রাহক কোড, গ্রাহকের নাম এবং অ্যাডিডি বোতামটি দেখতে এবং জানতে হবে যা ADD করবে রেকর্ড .. শেষ ব্যবহারকারী এটি ডেটাবেসে ডেটা যুক্ত করবে কীভাবে তার কোন চিন্তা করে না ?.
পদক্ষেপ -৩: অতিরিক্ত এবং জটিল পদ্ধতির ব্যক্তিগত যা ব্যক্তিগত ব্যবহারকারীর ইন্টারঅ্যাকশন জড়িত না।
সুতরাং জটিল ও অতিরিক্ত পদ্ধতিটিকে ব্যক্তিগত পরিবর্তে জনসাধারণ হিসাবে তৈরি করা (অর্থাত্ সে পদ্ধতিগুলি আড়াল করা) এবং আপত্তি মুছে ফেলা V obj.CreateDBObject (); ক্লাস প্রোগ্রামের মূল থেকে আমরা এনক্যাপসুলেশন অর্জন করি।
অন্য কথায় অন্তর ব্যবহারকারীর সহজতরকরণ হ'ল এনক্যাপসুলেশন।
সুতরাং এখন কোডটি নীচের মত দেখাচ্ছে -
namespace CustomerContent
{
public class Customer
{
public string CustomerCode = "";
public string CustomerName = "";
public void ADD()
{
//my DB code will go here
}
private bool Validate()
{
//Granular Customer Code and Name
return true;
}
private bool CreateDBObject()
{
//DB Connection Code
return true;
}
class Program
{
static void main(String[] args)
{
CustomerComponent.Customer obj = new CustomerComponent.Customer;
obj.CustomerCode = "s001";
obj.CustomerName = "Mac";
obj.ADD();
}
}
সারসংক্ষেপ :
পদক্ষেপ -১: আমার গ্রাহক শ্রেণীর কী প্রয়োজন? বিমূর্ততা।
পদক্ষেপ -৩: পদক্ষেপ -৩: অতিরিক্ত ব্যবহারকারীর এবং ব্যক্তিগত জটিলতার সাথে ব্যক্তিগত ব্যবহারকারীর অন্তর্ভুক্ত নেই যা এনক্যাপসুলেশন।
PS - উপরের কোডটি কঠোর এবং দ্রুত।
নীচের অনুচ্ছেদে আমাকে বুঝতে সাহায্য করেছে যে তারা কীভাবে একে অপরের থেকে পৃথক:
ডেটা এনক্যাপসুলেশন হ'ল ডেটা বান্ডিল করার একটি প্রক্রিয়া, এবং যে ফাংশনগুলি সেগুলি ব্যবহার করে এবং ডেটা বিমূর্তিটি কেবল ইন্টারফেসগুলি প্রকাশ করে এবং ব্যবহারকারীর কাছ থেকে প্রয়োগের বিবরণগুলি গোপন করে রাখার একটি প্রক্রিয়া।
আপনি এখানে আরও পড়তে পারেন ।
বিমূর্ততা বা এনক্যাপসুলেশনের জন্য তথ্য গোপনের কঠোরভাবে প্রয়োজন হয় না। তথ্য উপেক্ষা করা হতে পারে, কিন্তু লুকানো হবে না।
এনক্যাপসুলেশন হ'ল কোনও কিছুকে একক জিনিস হিসাবে বিবেচনা করার ক্ষমতা, যদিও এটি অনেকগুলি জটিল অংশ বা ধারণার সমন্বয়ে গঠিত। উদাহরণস্বরূপ, আমি বলতে পারি যে আমি সেই চেয়ারের বিভিন্ন অংশের নির্দিষ্ট নকশা এবং ফাংশন উল্লেখ না করে "চেয়ারে" বসে আছি, কিছুটা আরাম করে আমার পাছা কয়েক পা ধরে রাখার উদ্দেশ্যে একসাথে পুরোপুরি ফিট করা দূরে মেঝে থেকে।
বিমূর্ততা encapsulation দ্বারা সক্ষম করা হয়। যেহেতু আমরা বস্তুগুলি encapsulate করি, আমরা সেগুলি সম্পর্কে অভ্যন্তরীণ অবজেক্ট কাঠামোর সূক্ষ্ম বিবরণে ঝাঁকুনির পরিবর্তে কোনওভাবে একে অপরের সাথে সম্পর্কিত এমন জিনিস হিসাবে চিন্তা করতে পারি। বিমূর্ততা হ'ল বড় চিত্র বিবেচনা করার ক্ষমতা, সামান্য বিশদ নিয়ে উদ্বেগ থেকে সরানো।শব্দের মূলটি বিমূর্ত যা সাম্প্রদায়িক কাগজের শীর্ষে প্রদর্শিত হয়, কোনও শ্রেণীর মতো বিমূর্ত নয় যা কেবল উত্পন্ন সাবক্লাস হিসাবে ইনস্ট্যান্ট করা যেতে পারে ti
আমি সত্যই বলতে পারি যে আমি যখন আমার চেয়ারে আমার পাছা নীচে নেব, তখন আমি কখনই চিন্তা করি না যে সেই চেয়ারটির কাঠামোটি কীভাবে আমার ওজন ধরে ফেলবে। এটি একটি শালীন যথেষ্ট চেয়ার যা আমাকে এই বিবরণগুলির বিষয়ে চিন্তা করতে হবে না। তাই আমি আমার কম্পিউটারের দিকে মনোযোগ দিতে পারি। এবং আবারও, আমি আমার কম্পিউটারের উপাদানগুলি সম্পর্কে ভাবি না। আমি কেবল একটি ওয়েবপৃষ্ঠার এমন একটি অংশের দিকে তাকিয়ে যা আমি যে পাঠ্য অঞ্চলটি টাইপ করতে পারি তার প্রতিনিধিত্ব করে এবং আমি কথায় কথায় যোগাযোগ করছি, আমার আঙ্গুলগুলি কীভাবে কীভাবে এত তাড়াতাড়ি সঠিক অক্ষরগুলি খুঁজে পেতে পারে এবং কীভাবে তা নিয়ে ভাবছিলাম সংযোগটি শেষ পর্যন্ত এই কীগুলিতে আলতো চাপানো এবং এই ফোরামে পোস্ট করার মধ্যে তৈরি হয়। এটি বিমূর্ততার দুর্দান্ত শক্তি। যেহেতু সিস্টেমের নিম্ন স্তরেরগুলি ধারাবাহিকতা এবং নির্ভুলতার সাথে কাজ করতে বিশ্বস্ত হতে পারে, তাই আমাদের আরও বৃহত্তর কাজের জন্য বাঁচানোর মনোযোগ রয়েছে।
class Aeroplane : IFlyable, IFuelable, IMachine
{ // Aeroplane's Design says:
// Aeroplane is a flying object
// Aeroplane can be fueled
// Aeroplane is a Machine
}
// But the code related to Pilot, or Driver of Aeroplane is not bothered
// about Machine or Fuel. Hence,
// pilot code:
IFlyable flyingObj = new Aeroplane();
flyingObj.Fly();
// fighter Pilot related code
IFlyable flyingObj2 = new FighterAeroplane();
flyingObj2.Fly();
// UFO related code
IFlyable ufoObj = new UFO();
ufoObj.Fly();
// **All the 3 Above codes are genaralized using IFlyable,
// Interface Abstraction**
// Fly related code knows how to fly, irrespective of the type of
// flying object they are.
// Similarly, Fuel related code:
// Fueling an Aeroplane
IFuelable fuelableObj = new Aeroplane();
fuelableObj.FillFuel();
// Fueling a Car
IFuelable fuelableObj2 = new Car(); // class Car : IFuelable { }
fuelableObj2.FillFuel();
// ** Fueling code does not need know what kind of vehicle it is, so far
// as it can Fill Fuel**
বিমূর্ততা ব্যবহারকারীদের কাছ থেকে অ উপকারী ডেটা লুকিয়ে রাখছে এবং এনক্যাপসুলেশন ডেটা একসাথে একটি ক্যাপসুলে (একটি শ্রেণি) আবদ্ধ করা হয়। আমি মনে করি এনক্যাপসুলেশনটি এমনভাবে হয় যাতে আমরা বিমূর্ততা অর্জন করি।
Abstraction
আমরা বাস্তবায়ন করার জন্য একটি চুক্তি । সময়ের সাথে সাথে বাস্তবায়ন পরিবর্তিত হতে পারে। বিভিন্ন বাস্তবায়ন তারা নিজেরাই লুকিয়ে থাকতে পারে বা নাও রাখতে পারে তবে বিমূর্তির পিছনে মুখোশযুক্ত ।
ধরা যাক আমরা APIs
একটি শ্রেণীর সমস্ত সংজ্ঞা সংজ্ঞায়িত করেছি interface
তারপরে আমাদের কোড ব্যবহারকারীদের এর সংজ্ঞায়িত সংজ্ঞায়িত করতে অনুরোধ APIs
করুন interface
। আমরা প্রয়োগের উন্নতি বা সংশোধন করতে পারি কেবলমাত্র আমাদের অবশ্যই সেট চুক্তিটি অনুসরণ করতে হবে। ব্যবহারকারীরা আমাদের বাস্তবায়নের সাথে মিলিত হয় না ।
আমরা বিমূর্তকরণে সমস্ত প্রয়োজনীয় বিধিগুলি (পদ্ধতিগুলি) এক্সপোজ করি , বিধিগুলির বাস্তবায়নটি বাস্তবায়নকারী সংস্থাগুলির জন্য রেখে দেওয়া হয়, এছাড়াও প্রয়োগটি বিমূর্ততার অংশ নয়। এটি ঠিক স্বাক্ষর এবং ঘোষণা কী বিমূর্ততা তোলে।
Encapsulation
রাজ্য এবং আচরণের অ্যাক্সেস হ্রাস করে কেবল অভ্যন্তরীণ বিবরণগুলি লুকিয়ে রাখছে । একটি এনক্যাপসুলেটেড বর্গ ভাল সংজ্ঞা দিতে পারে বা নাও পারে Abstraction
।
java.util.List
জন্য বিমূর্ততা java.util.ArrayList
। অ্যাক্সেস সংশোধকগুলির java.util.ArrayList
সাথে চিহ্নিত হওয়ার অভ্যন্তরীণ রাজ্যগুলি non public
এনক্যাপসুলেশন।
সম্পাদনা করুন
একটি বর্গ ধরুন Container.nava implements IContainer
, IContainer
পদ্ধতি পছন্দ ঘোষণা করা হতে পারে addElement
, removeElements
, contains
, ইত্যাদি এখানে IContainer
তার বাস্তবায়ন বর্গ জন্য বিমূর্ততা প্রতিনিধিত্ব করে। বিমূর্ততা ক্লাসের APIs বা মডিউল বা কোনও সিস্টেমকে বাইরের বিশ্বে ঘোষণা করছে। এই API গুলি হয়ে ওঠে contract
। সেই সিস্টেমটি এখনও বিকশিত হতে পারে বা নাও হতে পারে। সিস্টেমের ব্যবহারকারীরা এখন ঘোষিত এপিআই-র উপর নির্ভর করতে পারেন এবং নিশ্চিত যে এই জাতীয় চুক্তি কার্যকরকারী কোনও সিস্টেম সর্বদা ঘোষিত এপিআইগুলিতে মেনে চলবে, তারা সর্বদা সেই এপিআইগুলির জন্য tge বাস্তবায়ন সরবরাহ করবে। একবার যখন আমরা কিছু কংক্রিট সত্তা লিখি তখন আমাদের অভ্যন্তরীণ রাজ্যগুলি গোপন করার সিদ্ধান্ত নেওয়া হ'ল এনক্যাপসুলেশন
আমি মনে করি এনক্র্যাপসুলেশন অ্যাবস্ট্রাকশন বাস্তবায়নের একটি উপায়। নীচের লিঙ্কটি দেখুন।
সংক্ষেপে
বিমূর্ত ব্যবহার -> এনক্যাপসুলেশন এবং এনক্যাপসুলেশন ব্যবহার -> ডেটা লুকানো
অথবা
ডেটা আড়াল করা হ'ল এনক্যাপসুলেশনের একটি উপসেট এবং এনক্যাপসুলেশন বিমূর্তির সাবসেট set
তথ্যসূত্র: http://www.tonymarston.co.uk/php-mysql/abstration.txt