। নেট মধ্যে ইন্টারফেসের জন্য "আমি" উপসর্গ নামকরণের পিছনে যুক্তি কী?


10

আমি জানি যে "আমি" সম্মেলনটি COM সাল থেকে প্রায় শুরু হয়েছে, তবে আমি কখনই বুঝতে পারি নি যে এটি কেন অন্যান্য নামকরণের কনভেনশনের আগে পুনর্বিবেচনা করা হয়নি। নেট হয়েছে।

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

আমি এটিও ভেবেছিলাম এটি হতে পারে যাতে আপনি একই নামের সাথে ইন্টারফেসের একটি প্রাথমিক প্রয়োগ করতে পারেন, উদাহরণস্বরূপ Messageউত্তরাধিকার সূত্রে প্রাপ্ত IMessage, তবে .NET গ্রন্থাগারগুলির বেশিরভাগই "বেস" শব্দটি শেষে (উদাহরণস্বরূপ System.Collections.ReadOnlyCollectionBase) যুক্ত করার জন্য গেছে - এবং এটি আরও অর্থবোধ তৈরি করে।

সিওএম ইন্টারপকে অন্য একটি সম্ভাব্য কারণ বলে মনে হচ্ছে - তবে এটি যে উত্সাহিত রেপার ক্লাসগুলি তৈরি করে তা পুরোপুরি মূর্তিমানিক N নেট, তাই আমি সন্দেহ করি যে এটি একটি নান্দনিক বিবেচনা ছিল।

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


1
এগুলি পূরণ করার জন্য আপনি ইন্টারফেসের উত্তরাধিকারী হন না, বড় পার্থক্য।
ড্যানিয়েল লিটল

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

@ লাভিনস্কি ইন। নেট IListএকটি সিকোয়েন্সড, কনটেইগাস কালেকশন, এলোমেলো অ্যাক্সেসের জন্য একটি সাধারণ শব্দ, যেখানে ক্রমবর্ধমানList , নিয়মিত, এলোমেলো অ্যাক্সেস, ক্রমবর্ধমান সংগ্রহ। আমার মনে হয় এফ # এর সাথে আলিয়াস Listকরার ক্ষেত্রে এটি সঠিক ছিল ResizeArray; এটি অবশ্যই আরও অনেক বর্ণনামূলক নাম। IListতারপর হতে পারে List, যাতে এটি কারণ হয় না বলে মনে হয় না।
রে মিয়াসাকা

2
আইবেসবেল এবং আইবেসবেলবেস বেসবালবেস এবং বেসবালবেসবেসের চেয়ে আমার কাছে আরও বোধগম্য করে (নির্বিকার উদাহরণ, আমি জানি: ডি)
ই-এমইই

@ ই-এমইই সমান নির্বুদ্ধি আইআইআরসি হবে যা আইআরসি চ্যাট প্রোটোকলের ইন্টারফেস বা "যদি আমি সঠিকভাবে মনে করি" এর সংক্ষিপ্ত বিবরণ হতে পারে।
রে মিয়াসাকা

উত্তর:


12

আমি মনে করি যখন উপসর্গগুলি কার্যকর হয় তবে এটি কেবলমাত্র একমাত্র ক্ষেত্রে হতে পারে।

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

public sealed class ActivityCollection : List<Activity>, 
    IList<Activity>, ICollection<Activity>, IEnumerable<Activity>, 
    IList, ICollection, IEnumerable

সংজ্ঞাটি দেখতে যদি এটি বোঝা শক্ত হবে

public sealed class ActivityCollection : ListClass<Activity>, 
    List<Activity>, Collection<Activity>, Enumerable<Activity>, 
    List, Collection, Enumerable

আর কীভাবে ফোন করবে ListClass? স্পষ্টতই এটি কেবল ListBaseতার নিজস্বভাবে ব্যবহারযোগ্য because
সুতরাং, আমাদের হয় এমন একটি সমস্যার সমাধান করতে হবে যা আমরা সদ্য উদ্ভাবিত করেছি, বা একটি উপসর্গকে রূপান্তর করতে হবে যা ক্লাসগুলি ইন্টারফেস থেকে পৃথক করে, যা নেট ফ্রেমওয়ার্ক ডিজাইনাররা করেছিলেন।

এছাড়াও, ব্যক্তিগতভাবে আমি এটি দরকারী মনে করি যখন আমি পদ্ধতি স্বাক্ষর থেকে বলতে পারি যে এটি ইন্টারফেসের সাথে কাজ করে।

public void PrintLines (IEnumerable<string> source)

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

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

যাইহোক, শুধুমাত্র ইন্টারফেসের .NET টাইপ সিস্টেমে উপসর্গ রয়েছে। জেনেরিক ধরণের পরামিতিগুলি সম্পর্কে ভুলবেন না:

public delegate TResult Func<in T, out TResult>(
    T arg
)

ক্লাস এবং অন্য ধরণের ধরণের মধ্যে পার্থক্য করতে সক্ষম হওয়া এটি অত্যন্ত কার্যকর যখন এটি অন্য পরিস্থিতি।


2
আপনি সহজেই বুঝতে পারবেন যে "প্রথম শ্রেণি উত্তরাধিকার, দ্বিতীয় শ্রেণি এবং পরবর্তীটি হল ইন্টারফেস" knowing
সা Saeedদ নেমতি

3
এটি একটি কলুষিত কারণ বলে মনে হচ্ছে। জাভা কেবল তালিকা নির্মল কীওয়ার্ড ব্যবহার করে একটি বিট আরো সুন্দরভাবে এটা মীমাংসিত হয়েছে বলে মনে হয়: class Dog extends Mammal implements MailmanChaser। @ সাeedদ আপনার এমন একটি ক্লাস থাকতে পারে যা কোনও কিছুর উত্তরাধিকার সূত্রে পায় না, সুতরাং তালিকার প্রথম প্রকারটি আসলে বেস ক্লাসের পরিবর্তে একটি ইন্টারফেস।
রেই মিয়াসাকা

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

6

আমি আপনার কিছু অনুপস্থিত মনে করি না, এটি কেবল একটি historicalতিহাসিক অভ্যাস।

আমি আপনার সাথেও একমত হয়েছি এবং ক্ষুদ্র ও মাঝারি প্রকল্পগুলিতে কোনও ক্ষতিকারক প্রভাব ছাড়াই 'আমি' বাদ দিয়েছি।


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

2

আমি মনে করি ইন্টারফেস এবং ক্লাস সম্পর্কে মাইক্রোসফ্টের নামকরণের গাইডলাইনগুলির একমাত্র কারণ হ'ল, কখনও কখনও আপনার ইন্টারফেসের নাম এবং এটি প্রয়োগকারী শ্রেণীর মধ্যে দ্বন্দ্ব হয় have এটি আবার ফিরে যায় যে ইন্টারফেসগুলি আসলে কঙ্কাল, মাংস নয়, বাস্তবায়নকারী শ্রেণি আসলে মাংস (নীলনকশা বুঝতে পেরে)। সুতরাং, আইনিমাল কেবলমাত্র একটি প্রাণীর কী থাকতে হবে তা বর্ণনা করছে , যখন প্রাণী আপনাকে বলতে পারে যে এটি কী আছে

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

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


এর AnimalInterfaceবদলে কী হয়েছে AnimalBase? এটি কোনও বেস ক্লাস নয়, এটি একটি ইন্টারফেস।
স্কট হুইটলক

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

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