তালিকা ইন্টারফেস কি একটি ফাঁস বিমূর্ততা?


9

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


"বিগ ও" এর অর্থ কী?
তুলিনস কর্ডোভা

উত্তর:


25

আমি তাই বলব না।

একটি ফাঁস বিমূর্ততা হ'ল এটি আপনাকে বাস্তবায়ন বিশদটি মোকাবেলা করতে বাধ্য করে যা এটি বিমূর্ত করার কথা বলে। তবে কার্য সম্পাদন সবসময় বাস্তবায়নের মধ্যে পৃথক হয়, তাই আপনি যদি এটি গালি হিসাবে গণনা করেন তবে কোনও ফাঁস ছাড়াই বিমূর্ততা নেই।

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

এছাড়াও ভুলবেন না সেখানে একটি এমনকি আরো সাধারণ ইন্টারফেস যে কার্যকারিতা প্রায়শই যথেষ্ট হয় এবং আপনি কর্মক্ষমতা সম্বন্ধে অনেক অনুমানের হিসেবে তৈরি করতে প্রলুব্ধ করে না যে: Collection


9
আরও একটি সাধারণ ইন্টারফেস রয়েছে যা প্রায়শই কার্যক্ষমতায় যথেষ্ট Iterable
এমোরি

বিভিন্ন বাস্তবায়নের মধ্যে পারফরম্যান্স পার্থক্য প্রত্যাশিত। যেমন ভেক্টর এবং অ্যারেলিস্টের মধ্যে পার্থক্য রয়েছে তবে লিংকডলিস্টে গেট অপারেশনটি কেবল অদ্ভুত বলে মনে হচ্ছে।
বেড়ার কাঠ

17

সমস্ত অ-তুচ্ছ বিমূর্ততা কিছুটা অবধি ফাঁস হয়। এটি বলেছিল, আমি এখানে নিশ্চিতভাবেই প্রয়োগ করি না app :-)

বিমূর্ততা আচরণের সাথে সম্পর্কিত। আচরণ নির্দিষ্ট কর্মক্ষমতা নির্দিষ্ট না করে (যা জাভা Listদেয় না) এটি প্রয়োগের বিশদ - অর্থাত অপ্রাসঙ্গিক।

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

  1. শ্রেণি / ইন্টারফেসে এটি নথিভুক্ত করুন তালিকার উদাহরণটি অন্তর্ভুক্ত।
  2. একটি নতুন ইন্টারফেস তৈরি করুন - যেমন BinarySearchPerformantList(ইয়াক!) - যা বিভিন্ন পদ্ধতির কর্মক্ষমতা প্রয়োজনীয়তা নির্দিষ্ট করে।

বিকল্প 2 সম্ভবত ভাল বিমূর্ততা, কিন্তু অতিরিক্ত ওভারহেড সঙ্গে আসে।


1
+1 টি। প্রযুক্তিগতভাবে হ্যাঁ, একটি তালিকা একটি ফাঁস বিমূর্ততা , তবে তারপরে equalsবস্তুর তুলনা করতে ব্যবহার সম্পর্কিত জটিলতা আড়াল করার জন্য অবজেক্টটি ।
নিল

2
@ নীল আমি মনে করি এটি বিতর্কযোগ্য ... যেহেতু বিমূর্ততা কর্মক্ষমতা উল্লেখ করে না আমি মনে করি না যে এটি এই ক্ষেত্রে ব্যর্থ হচ্ছে (যেমন আমি যুক্তি দিয়েছি)। আমি বলব যে আপনি যদি পারফরম্যান্সের কথা ভাবছেন তবে আপনার আলাদা / সংকীর্ণ বিমূর্ততা প্রয়োজন। উল্লেখ করতে সম্পাদনা করবে।
ভাগানড্রয়েড

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

আমি খেলেছি অনেক কাছাকাছি বছর অপশন 2 একটি প্রকরণ বাস্তবায়ন ফেরত দিন মার্কার ইন্টারফেসগুলি ব্যবহার LinearSpaceএবং LogarithmicTimeতারপর মত শ্রেণীর প্রকাশক public class BinarySearch : ISearchStrategy<T>, LogarithmicTime। অন্যান্য ক্লাসগুলি public T find<T, S>(IList<T> list, S strategy) where S : ISearchStrategy<T>, LogarithmicTime { }পারফরম্যান্সের সীমাবদ্ধতাগুলি প্রয়োগ করতে পছন্দ করে।
লুকাস

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

4

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


1

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

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