বিমূর্তি এবং এনক্যাপসুলেশন মধ্যে পার্থক্য?


উত্তর:


263

এখানে বেশিরভাগ উত্তরগুলি ওওপি-তে ফোকাস করে তবে এনক্যাপসুলেশন অনেক আগে শুরু হয়:

  • প্রতিটি ফাংশন একটি 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};

26
যদিও প্রতিটি পদ্ধতি একটি encapsulation, এটি একটি বিমূর্ততাও কারণ প্রতিবার আপনি কিছু জিনিস একসাথে রাখলে এবং এটির নাম দিন আপনি একটি নতুন (বিমূর্ত) ধারণা তৈরি করেন। বিমূর্ততা ছাড়া এনক্যাপসুলেশন অকেজো। সুতরাং এগুলি সত্য নয় যে তারা সাধারণ কিছু পান নি।
প্রোস্কর 21

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

8
এগুলি স্বতন্ত্র, তবে অরথোগোনাল নয়। আসলে, আমি মনে করি যে encapsulation প্রকৃতপক্ষে একটি বিশেষ ধরনের বিমূর্ততা, যেমন একটি কাঠামোগত one সামগ্রিকভাবে কোনও যৌগকে বিবেচনা করে আমরা মূলত এটি কীভাবে অন্য কিছু দিয়ে তৈরি হয় তার বিবরণকে (এস্ট্রাস্ট্রাক্ট) অগ্রাহ্য করি, অর্থাৎ এর অভ্যন্তরীণ কাঠামোটিকে উপেক্ষা করি।
প্রকোসার 0

বিমূর্তিটি হ'ল আমরা যখন ব্যবহারকারীর কাছ থেকে বাস্তবায়ন স্তরের বিশদটি গোপন করি এবং যোগ (1,10) এর মতো প্রয়োজনীয় মানগুলিতে অ্যাক্সেস দেই তবে এটির যোগফল হবে। আমরা জানি না কীভাবে। আমরা ব্যবহারকারীর কাছ থেকে যোগফলের প্রক্রিয়াটিকে বাতিল করে দিয়েছি। যখন encapsulation এর মানক সংজ্ঞাটি প্রস্তাবিত হয় যখন আমরা encapsulate করি অর্থাৎ একটি ডেটা তৈরি করি এবং এটিতে কাজ করা পদ্ধতিটি। ক্লাসের মতো কিছু। এগুলিকে একটি একক সত্তার সাথে আবদ্ধ করা। এখানে আমি যে বিষয়টি আনতে চাইছি তা হ'ল কিছুই হ'ল একটি শক্ত রেখা উভয়েরই একে অপরের প্রয়োজন need একটি ছাড়া অন্য আর নেই।
সারস আর্য

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

130

এনক্যাপসুলেশন বাস্তবায়ন বিশদটি গোপন করছে যা জেনেরিক বা বিশেষায়িত আচরণের জন্য হতে পারে।

বিমূর্ততা একটি সাধারণীকরণ সরবরাহ করে (বলুন, আচরণের একটি সেট উপর) say

এখানে একটি ভাল পড়ার বিষয়: অবজেক্ট এজেন্সির অ্যাডওয়ার্ড ভি বেরার্ডের দ্বারা বিমূর্তকরণ, এনক্যাপসুলেশন এবং তথ্য গোপন করা।


6
নেহার লিংকটিও এখন ভেঙে গেছে, তবে হ্যাঁ। আমরা সবসময় নিবন্ধের নাম গুগল করতে পারি। টনিমারস্টন.কম.এইচ
অভিজিৎ অপ্সুন্ডে

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

1
OOP এ এনক্যাপসুলেশন কিছু লুকিয়ে রাখার বিষয়ে নয়। এটি আক্রমণকারীদের রক্ষার জন্য রাষ্ট্র এবং আচরণকে একত্রিত করার বিষয়ে।
ইউজিন খুদয়

121

অনেক উত্তর এবং তাদের উদাহরণ বিভ্রান্তিকর।

এনক্যাপসুলেশন হ'ল ডেটা এবং ফাংশনগুলির প্যাকিং যা সেই ডেটাতে একক উপাদানগুলিতে অপারেটিং করে এবং অবজেক্টের কিছু উপাদানগুলিতে অ্যাক্সেসকে সীমাবদ্ধ করে।
এনক্যাপসুলেশন মানে হ'ল কোনও বস্তুর অভ্যন্তরীণ উপস্থাপনা সাধারণত অবজেক্টের সংজ্ঞা থেকে বাইরে লুকানো থাকে।

অ্যাবস্ট্রাকশন হ'ল এমন একটি প্রক্রিয়া যা প্রয়োগের বিশদটি অন্তর্ভুক্ত না করে প্রয়োজনীয় বৈশিষ্ট্যগুলি উপস্থাপন করে।

এনক্যাপসুলেশন: - তথ্য গোপন করা
বিমূর্ততা: - বাস্তবায়ন গোপন

উদাহরণ:

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গোপন রয়েছে। -> বিমূর্ততা।


আপনি কি দয়া করে আপনার উত্তরটি আপডেট করতে পারেন এবং এনক্যাপসুলেশনের একটি উদাহরণ যা অ্যাবস্ট্রাকশনের বিরুদ্ধে / নয় এবং অ্যাংক্রেসুলেশনের বিপরীতে / না এনক্র্যাশনের বিপরীতার একটি উদাহরণ প্রদর্শন করতে পারেন।
bjan

1
@bjan; qsortসিতে ফাংশন ব্যবহার করা বিমূর্ততার উদাহরণ। আপনি এটি প্রয়োগের বিশদ জানেন না। এখানে কোনও এনক্যাপসুলেশন জড়িত নেই। সি ++ তে কোনও অবজেক্টের ডেটা ফিল্ড আরম্ভ করতে কনস্ট্রাক্টর ব্যবহার করা এনক্যাপসুলেশনের উদাহরণ (কনস্ট্রাক্টরের মাধ্যমে অবজেক্টের উপাদানগুলির নিয়ন্ত্রিত অ্যাক্সেস)।
হ্যাকগুলি

"বিমূর্ততা: - বাস্তবায়ন লুকানো হচ্ছে।" কি থেকে বাস্তবায়ন গোপন?
অরুণ রাজ

@ArunRaaj; এটি ব্যবহার করছে এমন অন্যান্য অবজেক্ট থেকে।
হ্যাকগুলি

3
এটি সেরা উত্তর হওয়া উচিত। সহজ, স্পষ্ট এবং এগুলির সাথে সরল উদাহরণ রয়েছে।
ডন দিলঙ্গা

99

এনক্যাপসুলেশন কিছু জিনিস একটি বাক্সে রাখে এবং আপনাকে একটি পীফোল দেয়; এটি আপনাকে গিয়ারগুলির সাথে উপহাস থেকে বিরত রাখে।

বিমূর্ততা ফ্ল্যাট-আউট বিশদগুলিকে উপেক্ষা করে না, যেমন জিনিসগুলির গিয়ারস, র‌্যাচেটস, ফ্লাইওহিল বা পারমাণবিক কোর রয়েছে কিনা; তারা শুধু "যেতে"

এনক্যাপসুলেশন উদাহরণ:

  • আন্ডারপ্যান্ট
  • টুলবক্স
  • মানিব্যাগ
  • হ্যান্ডব্যাগ
  • ক্যাপসুল
  • হিমায়িত কার্বনাইট
  • একটি বাক্স, এতে বাটন ছাড়াই without
  • একটি বুরিটো (প্রযুক্তিগতভাবে, বুড়ির চারপাশে টরটিলা)

বিমূর্তনের উদাহরণ:

  • "জিনিসের গোষ্ঠী" একটি বিমূর্ততা (যাকে আমরা একীকরণ বলি)
  • "যে জিনিসগুলিতে অন্যান্য জিনিস রয়েছে" এটি একটি বিমূর্ততা (যাকে আমরা রচনা বলি)
  • "ধারক" হ'ল আর এক ধরণের "জিনিস যা" অন্যান্য জিনিস ধারণ করে "বিমূর্ততা; নোট করুন যে সমস্ত এনক্যাপসুলেশন উদাহরণগুলি বিভিন্ন ধরণের ধারক, তবে সমস্ত পাত্রে এনক্যাপসুলেশন প্রদর্শন / সরবরাহ করে না। একটি ঝুড়ি, উদাহরণস্বরূপ, একটি ধারক যা এর সামগ্রীগুলি আবদ্ধ করে না।

12
কেন এই হ্রাস করা হয়েছিল? এটি ভুল উত্তরের এই বিশাল সমুদ্রের একমাত্র সঠিক বিবরণ।
কনরাড রুডল্ফ

3
কেবল পিফহোল সরবরাহ করে এনক্যাপসুলেশনে, আমরা যে বিবরণ ব্যবহারকারীর পক্ষে গুরুত্বপূর্ণ তা উপেক্ষা করিনি this এটি বিমূর্ততাটি [আপনার দ্বারা বলা হয়েছে] এটি। কীভাবে দুটি জিনিস আলাদা? আপনি আরও বিস্তারিত বলতে পারেন।
সঞ্জীব কুমার ডাঙ্গী

63
@ সঞ্জীব এনকেপসুলেশন কংক্রিট, বিমূর্ততা ... বিমূর্ত! ;-) এনক্যাপসুলেশন হ'ল একটি অবজেক্ট যা আপনি ব্যবহার করতে পারেন, বিমূর্ততা একটি আদর্শ যা আপনি কেবল আলোচনা করতে পারেন। এনক্যাপসুলেশন কেন আপনি অন্তর্বাস পরেন, বিমূর্তিটি কীভাবে আপনি অন্তর্বাস এবং সাঁতারের পোশাকের মধ্যে পার্থক্য ব্যাখ্যা করেন
স্টিভেন এ। লো

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

1
@ বিজন: আমি বলিনি যে তারা পাত্রে ছিল না; তারা হয়। আমি এমন কিছু সংযুক্ত করেছি যা স্পষ্টতই কম পাত্রে রয়েছে তবে এনক্যাপসুলেশনের ধারণার মধ্যে 'কনটেন্টমেন্ট' অন্তর্ভুক্ত। "পাত্রে" একটি বিমূর্ততা। একটি ঝুড়ি একটি ধারক, তবে এটি এর সামগ্রীগুলি সম্পূর্ণরূপে আবরণ (আচ্ছাদন, আড়াল, সুরক্ষা) দেয় না। এটা কি সাহায্য করে?
স্টিভেন এ লো।

64

এনক্যাপসুলেশনের অর্থ হ'ল ডেটা লুকানো যেমন গেটর এবং সেটার ব্যবহার ইত্যাদি iding

বিমূর্ততা অর্থ- বিমূর্ত শ্রেণি এবং ইন্টারফেস ব্যবহার করে বাস্তবায়ন লুকানো


আপনার উত্তর কীভাবে "বিমূর্তকরণ সাধারণীকরণের প্রক্রিয়া" এর সাথে সম্পর্কিত - আমরা কীভাবে বিমূর্ত শ্রেণি এবং ইন্টারফেসের সাহায্যে সাধারণীকরণ অর্জন করতে পারি। আপনার কোন উদাহরণ আছে?
এন শর্মা

43

বিমূর্ততা সাধারণ শব্দ হয়। অর্থাৎ এনক্যাপসুলেশন বিমূর্তির সাবসেট।

এখানে চিত্র বর্ণনা লিখুন

  • উদাহরণ 2: সমাধান স্থপতি ব্যক্তি উচ্চ পর্যায়ের সৃষ্টি করে বিমূর্ত সমগ্র সমাধান প্রযুক্তিগত নকশা, এবং এই নকশা তারপর কাছে হস্তান্তর করা হয় উন্নয়ন দল জন্য বাস্তবায়ন

    এখানে, সমাধান আর্কিটেক্ট একটি বিমূর্ত হিসাবে কাজ করে এবং উন্নয়ন দলটি একটি এনক্যাপসুলেশন হিসাবে কাজ করে।

  • উদাহরণ 3: ব্যবহারকারী ডেটার এনক্যাপসুলেশন (নেটওয়ার্কিং)

এখানে চিত্র বর্ণনা লিখুন

শ্লীলতা

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


এটি অন্যান্য সমস্ত উত্তরের "সিম্পলস্ট" ব্যাখ্যা এবং পাশাপাশি উত্তরও গ্রহণ করা উচিত ছিল।
বিক্রমভি

31

উপরে অনেক ভাল উত্তর সরবরাহ করা হয়েছে তবে আমি আমার (জাভা) দৃষ্টিভঙ্গি এখানে উপস্থাপন করতে যাচ্ছি।

ডেটা এনক্যাপসুলেশনটির অর্থ সহজভাবে কোনও শ্রেণিতে লজিক্যাল গ্রুপযুক্ত ডেটা মোড়ানো এবং নিয়ন্ত্রণ করা and এটি সাধারণত অন্য কীওয়ার্ডের সাথে সম্পর্কিত - ডেটা লুকানো । এটি অ্যাক্সেস মডিফায়ার ব্যবহার করে জাভাতে অর্জন করা হয়েছে ।

একটি সাধারণ উদাহরণটি হ'ল একটি প্রাইভেট ভেরিয়েবল সংজ্ঞায়িত করা এবং গেটর এবং সেটার পদ্ধতি ব্যবহার করে এটিতে অ্যাক্সেস দেওয়া বা কোনও পদ্ধতি ব্যক্তিগত হিসাবে তৈরি করা কারণ এটি কেবলমাত্র ক্লাসের সাথে যুক্ত is এই পদ্ধতিগুলি এবং ভেরিয়েবলগুলি সম্পর্কে ব্যবহারকারীদের জানার দরকার নেই।

দ্রষ্টব্য : এটিকে ভুল বোঝাবুঝি করা উচিত নয় যে এনক্যাপসুলেশন কেবলমাত্র তথ্য গোপনের বিষয়ে। যখন আমরা এনক্যাপসুলেশন বলি, তখন গ্রুপিং বা প্যাকেজিং বা সম্পর্কিত ডেটা এবং আচরণ একসাথে বান্ডিল করার উপর জোর দেওয়া উচিত।

অন্যদিকে ডেটা অ্যাবস্ট্রাকশন হ'ল সাধারণীকরণের ধারণাটি যাতে নীচের জটিল যুক্তি ব্যবহারকারীর সামনে না আসে। জাভাতে এটি ইন্টারফেস এবং বিমূর্ত ক্লাস ব্যবহার করে অর্জিত হয় ।

উদাহরণ -

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

আরও বিশদ এখানে

এখানে চিত্র বর্ণনা লিখুন

জটিল যুক্তিটি সার্কিট বোর্ডে থাকে যা একটি টাচপ্যাডে এনপ্যাপুলেটেড থাকে এবং এটি ব্যবহারকারীর কাছে অ্যাবস্ট্রাক্ট করার জন্য একটি দুর্দান্ত ইন্টারফেস (বোতাম) সরবরাহ করা হয়।

PS: উপরের লিঙ্কগুলি আমার ব্যক্তিগত ব্লগে।


2
আপনার ব্লগ খুব ভাল !! আমার সমস্ত উফ ধারণাগুলি এখন অ্যাপ্লিকেশনগুলির সাথে সম্পূর্ণ পরিষ্কার!
মিনিগেক

2
এখন পর্যন্ত সেরা উত্তর। ধন্যবাদ.
মারিও লেভেস্ক

29
  • বিমূর্ততা আপনাকে কীভাবে এটি করে তার পরিবর্তে অবজেক্টটি কী করে তার উপর ফোকাস করতে দেয়
  • এনক্যাপসুলেশন মানে কোনও বস্তু কীভাবে কিছু করে তার অভ্যন্তরীণ বিবরণ বা যান্ত্রিক কৌশলগুলি গোপন করে।

আপনি যখন গাড়ি চালাচ্ছেন, ঠিক তেমনি আপনি জানেন যে গ্যাসের প্যাডেলটি কী করে তবে আপনি এটির পেছনের প্রক্রিয়াটি জানেন না কারণ এটি আবরণযুক্ত।

আমি সি # তে একটি উদাহরণ দিই। মনে করুন আপনার একটি পূর্ণসংখ্যা রয়েছে:

int Number = 5;
string aStrNumber = Number.ToString();

আপনি নাম্বার.স্ট্রাস্টিং () এর মতো একটি পদ্ধতি ব্যবহার করতে পারেন যা আপনাকে 5 নম্বরের চরিত্র উপস্থাপনা এবং স্ট্রিং অবজেক্টে সঞ্চয় করে। পদ্ধতিটি আপনাকে জানায় যে এটি কীভাবে এটি করে তার পরিবর্তে এটি কী করে।


আমি এটি প্রায় সংক্ষিপ্ত, নির্ভুল উত্তরের জন্য উত্সাহিত করেছি, কিন্তু তারপরে আমি আবার সেই গাড়ী রূপকটি দেখলাম যা আমাকে
ছুঁড়ে ফেলেছে

দুঃখিত বন্ধু, আমি আরও একটি ভাল ব্যাখ্যা যুক্ত করেছি।
জেসনকো

সুতরাং, সি মধ্যে ফাংশন বিমূর্তি?
রেড্ডি

ভাষা বা দৃষ্টান্ত ব্যবহার না করেই বিমূর্ততা তৈরি করা যেতে পারে। একটি সংক্ষিপ্ত উত্তর, হ্যাঁ, সি এ বিমূর্ততা থাকতে পারে কেন?
জেসনকো

17
বিমূর্তি এবং এনক্যাপসুলেশন উভয়ের আপনার সংজ্ঞা একই। এটি আমি বুঝতে পেরেছি - এটি কীভাবে করা হয় তা গোপন এবং যা করা হয় তা প্রকাশ করা হয়। আপনার গাড়ি এবং নাম্বার-টোস্ট্রিং () এর উদাহরণে, আপনি বিমূর্ততা এবং এনক্যাপসুলেশন কী তা সুনির্দিষ্টভাবে বলতে পারেন? এটি জিনিস পরিষ্কার করতে সহায়তা করবে।
সঞ্জীব কুমার ডাঙ্গি

28

এগুলি কিছুটা अस्पष्ट ধারণা যা কম্পিউটার সায়েন্স এবং প্রোগ্রামিংয়ের পক্ষে অনন্য নয়। আমি কিছু অতিরিক্ত চিন্তাভাবনা পেশ করতে চাই যা অন্যদের এই গুরুত্বপূর্ণ ধারণাটি বুঝতে সহায়তা করে।


সংক্ষিপ্ত উত্তর

এনক্যাপসুলেশন - প্রয়োজনীয় ইন্টারফেস প্রকাশ করার সময় কোনও সিস্টেমের নির্দিষ্ট অংশগুলিতে লুকানো এবং / অথবা অ্যাক্সেসকে সীমাবদ্ধ করে।

বিমূর্ততা - কংক্রিটের বাস্তবতা, নির্দিষ্ট বস্তু বা প্রকৃত উদাহরণগুলি বাদ দিয়ে নির্দিষ্ট কিছু বৈশিষ্ট্যযুক্ত কিছু বিবেচনা করা, যার ফলে জটিলতা হ্রাস পায়।

প্রধান সাদৃশ্য হ'ল এই কৌশলগুলি লক্ষ্য এবং বোধগম্যতা উন্নত করা।

মূল পার্থক্য হ'ল বিমূর্ততা জিনিসগুলিকে আরও সহজভাবে উপস্থাপনের একটি মাধ্যম (প্রায়শই প্রতিনিধিত্বকে আরও বিস্তৃতভাবে প্রযোজ্য করে তোলার জন্য), তবে এনক্যাপসুলেশনটি অন্য জিনিসগুলির সাথে কোনওভাবে যোগাযোগ করার উপায় পরিবর্তন করার পদ্ধতি।


দীর্ঘ উত্তর

encapsulation

এখানে এনকেপসুলেশনের একটি উদাহরণ যা আশাকরি জিনিসগুলি আরও স্পষ্ট করে তুলেছে:

আরডুইনো এনক্যাপসুলেশন

এখানে আমাদের একটি আরডুইনো ইউনো এবং একটি ঘেরের মধ্যে একটি আরডুইনো ইউনো রয়েছে। এনক্যাপসুলেশন সম্পর্কে কী রয়েছে তা একটি ঘের 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বর্গ।

জেভিএম

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

পার্থক্য

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


22

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

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**

4
আপনার এনক্যাপসুলেশনের উদাহরণ আসলে বিমূর্তনের জন্য একটি উদাহরণ an
হ্যাক

13

বিমূর্তি এবং এনক্যাপসুলেশন এর মধ্যে পার্থক্য।

বিমূর্তি এবং এনক্যাপসুলেশন মধ্যে পার্থক্য


অন্য কেউ পার্থক্যটি বিমূর্তিটি নকশা স্তরে, এনক্যাপসুলেশন বাস্তবায়ন স্তরে রয়েছে তা নিশ্চিত করতে পারে? যদি তাই হয় তবে এটি আমার জন্য জিনিসগুলি পরিষ্কার করে দিয়েছে!
অ্যাডাম কার্টার 11

12

বিমূর্ততা: সরল / ভিন্ন উপায়ে এমন কিছু উপস্থাপনের ধারণা, যা বোঝা ও ব্যবহার করা সহজতর বা পরিস্থিতিটির সাথে আরও প্রাসঙ্গিক।

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

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

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

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

এটি সমস্তকে বাস করার জন্য একটি সুন্দর জায়গা করে তোলে: ডি


10

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

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

এনক্যাপসুলেশন: সংঘর্ষের সংবেদনশীল ডেটা লুকিয়ে রাখার सौदा তাই এর অংশটি ব্যক্তিগত করে zing এটি বাইরে থেকে কোনও অ্যাক্সেস না দিয়ে কিছু তথ্য তার ক্লায়েন্টদের কাছে ব্যক্তিগত রাখার একটি উপায়।


2
আমি মনে করি "তথ্য গোপনীয় রাখার উপায়" তথ্য গোপন করা। এনক্যাপসুলেশন কেবল তথ্য মোড়ানো হয়, এটি ব্যক্তিগত বা সর্বজনীন হতে পারে।
কোনও বাগ

ডেটা আড়ালকরণের সাথে এনক্যাপসুলেশনকে ভুল বোঝানো হয়।
থিমস্মার্গাইন

8

আরেকটি উদাহরণ:

ধরুন আমি এইর মতো একটি পরিবর্তনীয় আয়তক্ষেত্র শ্রেণি তৈরি করেছি:

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 বোঝায়।

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


8

Abstractionএবং Encapsulationএকটি একক সাধারণ উদাহরণ ব্যবহার করে

-------------------------------------------------- -------------------------------------------------- --------------------------------

জটিল সমস্যা গণনার জন্য আমরা সবাই ক্যালকুলেটর ব্যবহার করি!

ভাবমূর্তি


2
@ নেহাচৌধুরী, আমার মনে হয় আপনি বলতে চাইছেন Your both example tell about just encapsulation, not abstraction; অ্যাবস্ট্রাকশনটির hidingপরিবর্তে এর কোনও সম্পর্ক নেইGeneralizing
রাহুল

@ রাহুল এখন, আমি মনে করি না তারা দু'জনই এমনকি এনক্যাপসুলেশন ব্যাখ্যা করে!
নেহা চৌধুরী

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

এখনও পর্যন্ত ভুল উত্তরের সমুদ্রের সেরা উত্তর
আমান

7

বাহ্যিক ক্রিয়াকলাপ দ্বারা ইচ্ছাকৃত বা দুর্ঘটনাক্রমে অপব্যবহার থেকে সুরক্ষিত কোনও নির্দিষ্ট অবজেক্টের ডেটা রোধ করে এমন একটি ব্যবস্থাকে " ডেটা এনক্যাপসুলেশন" বলা হয়

ব্যাকগ্রাউন্ডের বিবরণ বা ব্যাখ্যা না দিয়ে প্রয়োজনীয় বৈশিষ্ট্যগুলি উপস্থাপনের কাজটি অ্যাবস্ট্রাকশন হিসাবে পরিচিত


7

বিমূর্ততা: বিমূর্ততা মানে 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);
    }
}

6

স্ট্যাকের উদাহরণটি নেওয়া যাক। এটি অ্যারে বা একটি লিঙ্কযুক্ত তালিকা ব্যবহার করে প্রয়োগ করা যেতে পারে। তবে এটি যে অপারেশনগুলিকে সমর্থন করে তা হ'ল পুশ এবং পপ।

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


5

এনক্যাপসুলেশনটি এমন একটি ক্যাপসুল যা জটিল এবং তাই এনক্যাপসুলেশনটিতে জটিলতা গুটিয়ে ফেলা হয় ... যদিও বিমূর্ততা এমন কোনও বস্তুর বৈশিষ্ট্য যা অন্য বস্তুর থেকে পৃথক হয় ...

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

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

দুটোই শক্তিশালী; তবে অ্যাবস্ট্রাকশন ব্যবহারের জন্য এনক্যাপসুলেশনের চেয়ে আরও দক্ষতা প্রয়োজন এবং বড় অ্যাপ্লিকেশন / পণ্যগুলি বিমূর্ততার সাথে বেঁচে থাকতে পারে না।


"অ্যাবস্ট্রাকশন ব্যবহারের জন্য এনক্যাপসুলেশনের চেয়ে আরও দক্ষতা প্রয়োজন"? তথ্যসূত্র প্রয়োজন.
জনসয়েব

5

বিমূর্ততা --- লুকানো বাস্তবায়ন - ডিজাইনে --- ইন্টারফেস / বিমূর্ত কলস ব্যবহার করে Using

এনক্যাপসুলেশন - ডেটা লুকানো - এটি উন্নয়ন --- অ্যাক্সেস মডিফায়ার ব্যবহার করে (পাবলিক / প্রাইভেট)


4

থেকে এই

ওওপিএসে এনক্যাপসুলেশন এবং বিমূর্তনের মধ্যে পার্থক্য

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

এনক্যাপসুলেশন এবং বিমূর্তনের মধ্যে বাস্তব জীবনের পার্থক্য

এনক্যাপসুলেট মানে আড়াল করা। এনক্যাপসুলেশনকে ডেটা আড়ালকরণও বলা হয় You এনক্যাপসুলেশন মোড়ানো হয়, কেবল বৈশিষ্ট্য এবং পদ্ধতি লুকায়। এনক্যাপসুলেশনটি একক ইউনিটে কোড এবং ডেটা আড়াল করার জন্য বিশ্বের বাইরে থেকে ডেটা সুরক্ষার জন্য ব্যবহৃত হয়। ক্লাস হ'ল এনক্যাপসুলেশনের সর্বোত্তম উদাহরণ।

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

এনক্যাপসুলেশন এবং বিমূর্তনের মধ্যে প্রয়োগের পার্থক্য

  1. বিমূর্ততা ইন্টারফেস এবং বিমূর্ত শ্রেণি ব্যবহার করে প্রয়োগ করা হয় যখন এনক্যাপসুলেশন ব্যক্তিগত এবং সুরক্ষিত অ্যাক্সেস মডিফায়ার ব্যবহার করে প্রয়োগ করা হয়।

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


4

আমি সহজ পদ্ধতিতে এনক্যাপসুলেশন প্রদর্শনের চেষ্টা করব .. দেখা যাক ..

  • একক ইউনিটে ডেটা এবং ফাংশন মোড়ানো (শ্রেণি বলা হয়) কে এনক্যাপসুলেশন নামে পরিচিত। অভ্যন্তরীণ ডেটা স্ট্রাকচার এবং কোডের মতো কোনও অবজেক্ট সম্পর্কিত তথ্য এবং লুকিয়ে থাকা এনক্যাপসুলেশন।

এনক্যাপসুলেশন হ'ল -

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

এনক্যাপসুলেশন বিমূর্তি প্রয়োগ করে।

এবং বিমূর্তিটি হ'ল -

  • প্রয়োজনীয় কী দেখাচ্ছে,
  • শেষ ব্যবহারকারী থেকে ডেটা বিমূর্ত করা প্রয়োজন,

একটি উদাহরণ দেখতে দিন-

নীচের চিত্রটি "গ্রাহকের বিবরণকে একটি ডেটাবেসে অ্যাড-এড করতে হবে" এর একটি জিইউআই দেখায়।

গ্রাহক স্ক্রিন জিইউআই

চিত্রটি দেখে আমরা বলতে পারি যে আমাদের গ্রাহক শ্রেণি দরকার।

পদক্ষেপ - 1: আমার গ্রাহক শ্রেণীর কী প্রয়োজন?

অর্থাত

  • গ্রাহক কোড এবং গ্রাহকের নাম সংরক্ষণ করার জন্য 2 ভেরিয়েবল।
  • 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 - উপরের কোডটি কঠোর এবং দ্রুত।


4

নীচের অনুচ্ছেদে আমাকে বুঝতে সাহায্য করেছে যে তারা কীভাবে একে অপরের থেকে পৃথক:

ডেটা এনক্যাপসুলেশন হ'ল ডেটা বান্ডিল করার একটি প্রক্রিয়া, এবং যে ফাংশনগুলি সেগুলি ব্যবহার করে এবং ডেটা বিমূর্তিটি কেবল ইন্টারফেসগুলি প্রকাশ করে এবং ব্যবহারকারীর কাছ থেকে প্রয়োগের বিবরণগুলি গোপন করে রাখার একটি প্রক্রিয়া।

আপনি এখানে আরও পড়তে পারেন ।


3

বিমূর্ততা বা এনক্যাপসুলেশনের জন্য তথ্য গোপনের কঠোরভাবে প্রয়োজন হয় না। তথ্য উপেক্ষা করা হতে পারে, কিন্তু লুকানো হবে না।

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

বিমূর্ততা encapsulation দ্বারা সক্ষম করা হয়। যেহেতু আমরা বস্তুগুলি encapsulate করি, আমরা সেগুলি সম্পর্কে অভ্যন্তরীণ অবজেক্ট কাঠামোর সূক্ষ্ম বিবরণে ঝাঁকুনির পরিবর্তে কোনওভাবে একে অপরের সাথে সম্পর্কিত এমন জিনিস হিসাবে চিন্তা করতে পারি। বিমূর্ততা হ'ল বড় চিত্র বিবেচনা করার ক্ষমতা, সামান্য বিশদ নিয়ে উদ্বেগ থেকে সরানো।শব্দের মূলটি বিমূর্ত যা সাম্প্রদায়িক কাগজের শীর্ষে প্রদর্শিত হয়, কোনও শ্রেণীর মতো বিমূর্ত নয় যা কেবল উত্পন্ন সাবক্লাস হিসাবে ইনস্ট্যান্ট করা যেতে পারে ti

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


2
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**

2

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


2

বিমূর্তি এবং এনক্যাপসুলেশন প্রক্রিয়া উভয়ই ইন্টারফেস উত্পন্ন করে।

এনক্যাপসুলেশনের মাধ্যমে উত্পন্ন একটি ইন্টারফেস প্রয়োগের বিশদটি গোপন করে।

বিমূর্তনের মাধ্যমে উত্পন্ন ইন্টারফেস অ্যাবস্ট্রাকশনের আগের তুলনায় আরও ডেটা ধরণের ক্ষেত্রে প্রযোজ্য।


2

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 বাস্তবায়ন সরবরাহ করবে। একবার যখন আমরা কিছু কংক্রিট সত্তা লিখি তখন আমাদের অভ্যন্তরীণ রাজ্যগুলি গোপন করার সিদ্ধান্ত নেওয়া হ'ল এনক্যাপসুলেশন



1

সংক্ষেপে

বিমূর্ত ব্যবহার -> এনক্যাপসুলেশন এবং এনক্যাপসুলেশন ব্যবহার -> ডেটা লুকানো

অথবা

ডেটা আড়াল করা হ'ল এনক্যাপসুলেশনের একটি উপসেট এবং এনক্যাপসুলেশন বিমূর্তির সাবসেট set

তথ্যসূত্র: http://www.tonymarston.co.uk/php-mysql/abstration.txt


কীভাবে এনক্যাপসুলেশন ডেটা লুকানো ব্যবহার করে? Acc। টনি মার্স্টন এনক্যাপসুলেশন কেবল সত্ত্বাগুলি মোড়ানো হয় যখন লুকানোর আচরণ সম্পর্কে কিছুই বলা হয় না। যদি এনক্যাপসুলেশনটি "তথ্য গোপনের মতো একই জিনিস" হয় তবে কোনও একটি যুক্তি তৈরি করতে পারে যে "" যা কিছু ছিল তা encapsulated ছিল তাও গোপন ছিল "" এটি অবশ্যই সত্য নয়। উদাহরণস্বরূপ, যদিও তথ্য রেকর্ড স্ট্রাকচার এবং অ্যারেগুলিতে আবদ্ধ করা যেতে পারে, এই তথ্যটি সাধারণত লুকানো থাকে না (অন্য কোনও প্রক্রিয়ার মাধ্যমে লুকানো না থাকলে)।
হর্ষুল শর্মা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.