অ্যাবস্ট্রাক্ট ডেটা টাইপ এবং অবজেক্টের মধ্যে পার্থক্য কী?


11

প্রোগ্রামার্স.এস.এর একটি উত্তর কুকের একটি নিবন্ধকে চিহ্নিত করেছে ( অবজেক্টগুলি এডিটি নয় ) বলছে

  • বস্তুগুলি বীজগণিত হিসাবে না, কোনও ধরণের মানগুলির উপরে একটি বৈশিষ্ট্যযুক্ত ফাংশনের মতো আচরণ করে। বস্তুগুলি বিমূর্ততা প্রকারের পরিবর্তে পদ্ধতিগত বিমূর্ত ব্যবহার করে

  • এডিটি সাধারণত একটি প্রোগ্রামে একটি অনন্য বাস্তবায়ন থাকে। যখন কারও ভাষাতে মডিউল থাকে, তখন এটিডিটির একাধিক বাস্তবায়ন সম্ভব হয় তবে তারা সাধারণত আন্তঃসংযোগ করতে পারে না।

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

এছাড়াও, অ্যালড্রিচের কাগজ আন্তঃব্যবহারের শক্তি: কেন বস্তুগুলি অনিবার্য ¹ পরামর্শ দেয়

কুকের সংজ্ঞা মূলত গতিশীল প্রেরণটিকে অবজেক্টের সর্বাধিক গুরুত্বপূর্ণ বৈশিষ্ট্য হিসাবে চিহ্নিত করে

সঙ্গে সম্মত এই এবং অ্যালান কে সঙ্গে যখন তিনি বলেন

আমার কাছে ওওপি মানে কেবল বার্তা, স্থানীয় ধারণ এবং সুরক্ষা এবং রাষ্ট্র-প্রক্রিয়া লুকানো এবং চূড়ান্তভাবে দেরী-বাঁধাই সমস্ত জিনিস inding

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

আমার প্রশ্নগুলি হয়

  1. আমি কি এটা বলতে পারি যে চরিত্রগত ফাংশনগুলি কোনও বস্তুর মূল বৈশিষ্ট্য নয় এবং ফ্রাঙ্ক শিয়েরার ভুল হয়েছে?

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

  3. নির্ভরতা বিপরীত নীতি ধারণাটি কি এডিটি এবং অবজেক্টের মধ্যে পার্থক্যের সাথে সম্পর্কিত? ( উইকিপিডিয়া পৃষ্ঠা বা দ্য টকিং অবজেক্টস: মেসেজ-ওরিয়েন্টেড প্রোগ্রামিং সম্পর্কিত একটি টেল দেখুন ) যদিও আমি ধারণায় নতুন, তবে আমি বুঝতে পারি যে এটিতে একটি প্রোগ্রামের "স্তরগুলি" এর মধ্যে ইন্টারফেস যুক্ত করা রয়েছে (উইকিপিডিয়া পৃষ্ঠার চিত্রটি দেখুন)।

  4. আপনি যদি চান তবে দয়া করে অবজেক্টস এবং এডিটিগুলির মধ্যে পার্থক্যের অন্য কোনও উদাহরণ / স্পষ্টতা সরবরাহ করুন।

¹ এই কাগজটি (২০১৩ সালে প্রকাশিত) সহজ পাঠযোগ্য এবং জাভার উদাহরণ সহ কুকের ২০০৯ এর পেপারের সংক্ষিপ্তসার রয়েছে। আমি কমপক্ষে এটি স্কিমিং করার অত্যন্ত পরামর্শ দিচ্ছি, এই প্রশ্নের উত্তর দেওয়ার জন্য নয়, তবে এটি একটি ভাল কাগজ।


5
আকর্ষণীয়, তবে দয়া করে প্রতি পোস্টে একটি প্রশ্নের মধ্যে নিজেকে সীমাবদ্ধ রাখার চেষ্টা করুন।
রাফেল

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

উত্তর:


8

গুগল একটি উত্তরের সাথে একটি অনুরূপ প্রশ্ন উত্থাপন করেছে যা আমার মনে হয় খুব ভাল। আমি এটি নীচে উদ্ধৃত করেছি।

এখানে আরও একটি পার্থক্য লুকিয়ে আছে যা আমি লিঙ্কিত কুক প্রবন্ধে ব্যাখ্যা করা হয়েছে।

বিমূর্তি বাস্তবায়নের একমাত্র উপায় নয়। সবকিছুই একটি বস্তু নয়। অবজেক্টস এমন কিছু বাস্তবায়ন করে যা কিছু লোক প্রক্রিয়াকরণের ডেটা বিমূর্ততা বলে। বিমূর্ত ডেটা প্রকার বিমূর্ততার একটি পৃথক রূপ প্রয়োগ করে।

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

interface IntSet {
  void unionWith(IntSet s);
  ...
}

এখন ইন্টারসেটের দুটি বাস্তবায়ন বিবেচনা করুন, একটি বলুন যা তালিকার দ্বারা সমর্থিত এবং একটি যা আরও কার্যকর বাইনারি গাছের কাঠামোর দ্বারা সমর্থিত:

class ListIntSet implements IntSet {
  void unionWith(IntSet s){ ... }
} 
class BSTIntSet implements IntSet {
  void unionWith(IntSet s){ ... }
}

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

এডিটিগুলির সাথে এটির তুলনা করুন, যেখানে আপনি স্বাক্ষর বা শিরোনাম ফাইলে নীচের মতো আরও কিছু লিখতে পারেন:

typedef struct IntSetStruct *IntSetType;
void union(IntSetType s1, IntSetType s2);

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

struct IntSetStruct {
 int value;
 struct IntSetStruct* left;
 struct IntSetStruct* right;
}

void union(IntSetType s1, IntSetType s2){ ... }

ইউনিয়ন এখন এস 1 এবং এস 2 উভয়েরই কংক্রিট উপস্থাপনা জানে তাই এটি কার্যকর প্রয়োগের জন্য এটি কাজে লাগাতে পারে। আমরা কার্যকরভাবে প্রয়োগিত একটি তালিকাও লিখতে পারি এবং এর পরিবর্তে এর সাথে লিঙ্ক করতে বেছে নিতে পারি।

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

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

আমি এটিতে একটি উদাহরণ যুক্ত করতে চাই।

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

LIST_MODULE_SINGLY_LINKED এডিটি নামক একটি তালিকা মডিউল যা তৈরি করে তার একটি মূল বিষয় হ'ল মডিউলটির ফাংশনগুলি (উদাহরণস্বরূপ list_getListHead ()) ধরে নেয় যে ডেটা ইনপুট হচ্ছে LIST_MODULE_SINGLY_LINKED এর কনস্ট্রাক্টর দ্বারা তৈরি করা হয়েছে, কোনও "সমতুল্যের বিপরীতে" "একটি তালিকার বাস্তবায়ন (উদাঃ LIST_MODULE_DYNAMIC_ARRAY)। এর অর্থ হ'ল LIST_MODULE_SINGLY_LINKED এর ফাংশনগুলি তাদের প্রয়োগের ক্ষেত্রে একটি নির্দিষ্ট প্রতিনিধিত্ব (যেমন এককভাবে সংযুক্ত তালিকা) ধরে নিতে পারে।

LIST_MODULE_SINGLY_LINKED LIST_MODULE_DYNAMIC_ARRAY এর সাথে ইন্টার-অপারেটিং করতে পারে না কারণ আমরা তৈরি করা ডেটা ফিড করতে পারি না, LIST_MODULE_DYNAMIC_ARRAY এর কনস্ট্রাক্টরের সাথে LIST_MODULE_SINGLY_LINKED পর্যবেক্ষকের কাছে বলে থাকি কারণ কেবলমাত্র অ্যাসোসিয়েশনস-এর জন্য অ্যাসোসিয়েশন হিসাবে প্রতিনিধিত্ব করা হয়েছে।

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

এডিটি এবং অবজেক্টের তুলনা করা

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

  • সাধারণত প্রকাশের সমস্যাটি "আমার কি প্রচুর উপস্থাপনা আছে?" শর্তে বিবেচনা করা হয়? বনাম। "আমার কি কয়েকটি উপস্থাপনা সহ প্রচুর ফাংশন আছে"। প্রথম ক্ষেত্রে একজনকে উপস্থাপনের মাধ্যমে কোডটি সংগঠিত করা উচিত (যেমনটি খুব সাধারণভাবে জাভাতে দেখা যায়)। দ্বিতীয় ক্ষেত্রে কারও দ্বারা ফাংশন দ্বারা কোডটি সংগঠিত করা উচিত (যেমন একক জেনেরিক ফাংশনটি একাধিক উপস্থাপনা পরিচালনা করে)।

  • যদি আপনি প্রতিনিধিত্ব করে আপনার কোডটি সংগঠিত করেন, তবে, আপনি যদি অতিরিক্ত কার্যকারিতা যুক্ত করতে চান তবে আপনাকে অবজেক্টের প্রতিটি উপস্থাপনায় কার্যকারিতা যুক্ত করতে বাধ্য করতে হবে; এই অর্থে কার্যকারিতা যুক্ত করা "যুক্ত" নয় " আপনি যদি কোডটি কার্যকারিতা অনুসারে সংগঠিত করেন, তবে, আপনি যদি অতিরিক্ত উপস্থাপনা যুক্ত করতে চান - আপনাকে প্রতিটি বস্তুর উপস্থাপনা যুক্ত করতে বাধ্য করা হবে; এই অর্থে "অ্যাডিটিভ" নয় উপস্থাপনা যুক্ত করুন।

বস্তুর উপর ADT এর সুবিধা

  • কার্যকারিতা যুক্ত করা যুক্তিযুক্ত

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

এডিটিগুলির ওপরে অবজেক্টগুলির সুবিধা

  • সংযোজনে উপস্থাপনা যুক্ত করা

  • অবজেক্টগুলি আন্তঃ-পরিচালনা করতে পারে

  • কোনও অবজেক্টের প্রাক / পোস্টের শর্তাদি নির্দিষ্ট করা এবং এডিটিগুলির ক্ষেত্রে এটি একসাথে চেইন করা সম্ভব। এই ক্ষেত্রে, অবজেক্টগুলির সুবিধাগুলি হ'ল (১) ইন্টারফেস পরিবর্তন না করে উপস্থাপনা পরিবর্তন করা সহজ এবং (২) অবজেক্ট আন্তঃচালিত হতে পারে। যাইহোক, এটি ক্ষুদ্রাকৃতির অর্থে ওওপির উদ্দেশ্যকে পরাস্ত করে। (বিভাগ "অলান কে এর ওওপি সংস্করণ দেখুন)

ডায়নামিক প্রেরণটি ওওপির কী to

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

জাভাতে, ক্লাসগুলি এডিটি হয়। যাইহোক, ইন্টারফেসের মাধ্যমে প্রয়োগ করা একটি শ্রেণি এটি প্রয়োগ করে an

সংযোজন: অলান কে এর ওওপি সংস্করণ

অ্যালান কে স্পষ্টভাবে "বীজগণিতের পরিবার" হিসাবে অবজেক্টগুলিকে উল্লেখ করেছেন এবং কুক পরামর্শ দিয়েছেন যে একটি ADT একটি বীজগণিত। সুতরাং কেয়ার সম্ভবত বোঝানো হয়েছে যে কোনও বস্তু এডিটিগুলির একটি পরিবার। যে, একটি অবজেক্ট সমস্ত শ্রেণীর সংগ্রহ যা জাভা ইন্টারফেসটি সন্তুষ্ট করে of

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

সংক্ষেপে, কাদের কাছে বস্তুর মূল ধারণাটি নয় যে তারা বীজগণিতের পরিবার (যেমন কুকের দ্বারা জোর দেওয়া হয়েছে)। বরং কে'এর মূল ধারণাটি ছিল এমন একটি মডেল প্রয়োগ করা যা বৃহত্তর (একটি নেটওয়ার্কের কম্পিউটারে) ছোট (কোনও প্রোগ্রামের বস্তু) এ কাজ করে।

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

সম্পাদন করা: আমি গলি এলান কে সংজ্ঞা খুব, খুব ভাল উদ্ভাস পাওয়া এখানে


3

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


2

আমি সর্বদা এটি এইভাবে বুঝতে পেরেছিলাম:

  1. একটি এডিটি হ'ল একটি ইন্টারফেস: এটি কেবল পদ্ধতিগুলির সংগ্রহ এবং তাদের প্রকারের স্বাক্ষর, সম্ভবত প্রাক-ও পোস্ট শর্তাদি।

  2. কোনও শ্রেণি এডিটিতে নির্দিষ্ট পদ্ধতিগুলির জন্য প্রকৃত বাস্তবায়ন দিয়ে এক বা একাধিক এডিটি বাস্তবায়ন করতে পারে ।

  3. কোনও অবজেক্ট একটি শ্রেণীর উদাহরণ , কোনও অন-স্ট্যাটিক ভেরিয়েবলের নিজস্ব অনুলিপি সহ।

এটি সম্ভব যে সাহিত্যে, পার্থক্যগুলি আলাদা, তবে এটি কম্পিউটার বিজ্ঞানে আপনি শুনতে পাবেন এমন "স্ট্যান্ডার্ড" পরিভাষা।

উদাহরণস্বরূপ, জাভাতে, Collectionএটি একটি এডিটি, ArrayListএকটি শ্রেণি, এবং আপনি অপারেটরের ArrayListসাথে কোনও বস্তু তৈরি করতে পারেন new

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


1
একটি কার্যকরী-প্রোগ্রামিং দৃষ্টিকোণ থেকে, ADTs এর কি নির্দিষ্ট সীমাবদ্ধতা নেই যা সাধারণভাবে ক্লাসগুলিতে নেই?
রাফেল

@ রাফেল কি পছন্দ?
jmite

1
এটি ADT- র একটি সাধারণ দৃষ্টিভঙ্গি এবং এটি একটি যুক্তিসঙ্গত আনুমানিক। যাইহোক, আমি এটি বুঝতে পেরেছি, পিএল সাহিত্যে বিবেচিত এডিটি এবং আনুষ্ঠানিকভাবে সংজ্ঞায়িত হিসাবে আসলে আরও কিছু সুনির্দিষ্ট অর্থ রয়েছে। একটি এডিটি হ'ল এক ধরণের ডেটা স্ট্রাকচারের স্পেসিফিকেশন: এটি কীভাবে প্রয়োগ করা হয় বা কীভাবে ডেটা উপস্থাপন করা হয় তা নয়, তবে এর ইন্টারফেস (কী ধরণের অপারেশন সম্পাদন করা যায়?) এবং সেই প্রতিটি অপারেশনের আচরণ / শব্দার্থিকতা। সুতরাং এটি কেবল জাভা ইন্টারফেস নয় (টাইপ-স্বাক্ষরযুক্ত পদ্ধতির তালিকা), তবে তাদের আচরণের একটি বিশদকরণও।
DW

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

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