'বিমূর্ততার স্তর' এবং 'ইন্ডিয়ারেশনের স্তর' এর মধ্যে পার্থক্য কী?


38

উভয় পদটি আদান-প্রদানযোগ্যভাবে ব্যবহার করা যায় কিনা তা আমি নিশ্চিত নই। কম্পিউটার কম্পিউটারে কিছু শিক্ষাগত পার্থক্য থাকতে পারে যা প্রতিদিনের প্রোগ্রামিংয়ের জন্য প্রাসঙ্গিক নয়? অথবা আমি উভয় শব্দটি ভুল না করে বিনিময়যোগ্যভাবে ব্যবহার করতে পারি? সম্ভবত এটি যে প্রসঙ্গে আমি উভয় পদ ব্যবহার করি তার উপর নির্ভর করে?

সম্পাদনা: যে কারণে আমি উভয় পদই সম্ভবত বিনিময়যোগ্য খুঁজে পাচ্ছি তা অ্যাবস্ট্রাকশন স্তর সম্পর্কে উইকিপিডিয়া এন্ট্রি । সেখানে আপনি ডেভিড হুইলারের উদ্ধৃতি খুঁজে পেতে পারেন 'কম্পিউটার বিজ্ঞানের সমস্ত সমস্যা ইন্ডিয়ারেশনের অন্য স্তরের দ্বারা সমাধান করা যেতে পারে।'


7
... ইন্ডিয়ারেশনের অনেক স্তরের সমস্যা বাদে!
ম্যাসন হুইলার

@ ম্যাসনওহিলার: আপনি আর একটি যোগ করতে পারেন, অপ্রত্যক্ষেত্রের অপ্রত্যক্ষার স্বল্প মাত্রা…
জন পুরী

সি ++ আপনাকে ইন্ডিয়ারেশনের একটি স্তর ছাড়াই বিমূর্ততার একটি স্তর যুক্ত করতে দেয়, সুতরাং সেগুলি একই বোঝাতে পারে না।
ফ্রেডওভারফ্লো 18

উত্তর:


30

বিমূর্তকরণ সরলকরণের সাথেসম্পর্কিত হয়, স্থানের সাথে ইন্ডিয়ারেশন ডিল করে।

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

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


2
এখন পর্যন্ত +1 সেরা উত্তর! একটি লিখতে যাচ্ছিল তবে এইটি আমার মনে যা ছিল তা যথেষ্ট কাছে।
নিউটোপিয়ান

27

বিমূর্ততা indirection ব্যবহার করে প্রয়োগ করা হয়।

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

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


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

আপনি কি আরও ভাল উদাহরণ দিতে পারেন যা অনুপ্রেরণা তবে বিমূর্ত নয়?
মিঃ কোডার

1
অবশ্যই একটি ভুল উদাহরণ
মর্গ।

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

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

9

প্রথমে শর্তগুলির জন্য যথাযথ সংজ্ঞা চেষ্টা করতে দিন:

  1. বিমূর্ততার স্তরটির অর্থ:

     a) there is large number of positions which use abstraction
          (layer = all the positions together)
     b) each position is hiding some complex stuff, but allows invoking it 
          using only simple code. 
         (abstraction == one-to-one mapping between simple code and complex code)
    
  2. অন্যদিকে দিকনির্দেশের স্তরটির অর্থ:

      a) you're counting levels
      b) indirection==there are several steps before you can reach or access the data
      c) level of indirection is just how many steps it takes to access the data
    

আপনি যতক্ষণ ব্যবহার করবেন এই দুটি জিনিসই একই জিনিসটিকে বোঝাতে পারে:

  a) step = going from simple code to complex code. 

7

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


ভার্চুয়াল ফাংশনগুলির সাথে ফাংশনগুলির পয়েন্টার হিসাবে মডেল করা হচ্ছে?
ক্যালেথ

7

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

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

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

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

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


1

পয়েন্টার থেকে একটি পয়েন্টার একটি পয়েন্টার একটি পয়েন্টার একটি পয়েন্টার থেকে ইন্টি ইন যাও ছয় ইন্ডিরিশন স্তর আছে, তবে বিমূর্ততার কোন স্তর নেই।


0

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

সুতরাং বিমূর্ততা প্রয়োগের বিশদটি গোপন করে যেখানে নির্দেশনা কেবল "পরোক্ষ" ইন্টারফেস সরবরাহ করে যার মাধ্যমে কিছু অ্যাক্সেস করতে পারে।

বিমূর্ততা হ'ল যখন আপনার কী লুকানো হচ্ছে তা বোঝার দরকার নেই, যেখানে আপনি ইন্ডিয়ারেশন দিয়ে যা করছেন।


-1

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


3
এই কিছু তৈরি পয়েন্ট উপর সারগর্ভ যোগ করার জন্য বলে মনে হচ্ছে না এবং পূর্বে 7 টি উত্তর ব্যাখ্যা
মশা

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