ইন্টারফেস কেন দরকারী?


158

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

সি # একটি দুর্দান্ত ভাষা, তবে কখনও কখনও এটি আপনাকে অনুভূতি দেয় যে প্রথম মাইক্রোসফ্ট সমস্যাটি তৈরি করে (একাধিক উত্তরাধিকারের অনুমতি দেয় না) এবং তারপরে সমাধান দেয় যা বরং ক্লান্তিকর।

এটি আমার বোঝাপড়া যা সীমিত কোডিংয়ের অভিজ্ঞতার ভিত্তিতে। আপনার ইন্টারফেস গ্রহণ কি? আপনি কত ঘন ঘন সেগুলি ব্যবহার করেন এবং কী কারণে আপনি তা করতে পারেন?


55
"যদি আমি কার্য সম্পাদন করার জন্য প্রয়োজনীয় কাজগুলির নাম এবং স্বাক্ষর মনে করতে পারি তবে তাদের প্রয়োজন নেই no" এই বিবৃতি আমাকে সন্দেহ করে তোলে যে আপনার স্ট্যাটিকালি টাইপ করা ভাষার সুবিধার জন্য আরও কিছুটা চেহারা দেওয়া উচিত ।
স্টিভেন জিউরিস

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

27
ইন্টারফেসগুলি কী জন্য ভাল তা সত্যিই বুঝতে আমার দু' বছরের বেশি সময় লেগেছে। আমার পরামর্শ: অধ্যয়ন নকশার ধরণগুলি। তাদের বেশিরভাগ ইন্টারফেসের উপর নির্ভর করে, আপনি কেন তা এত দরকারী তা তাড়াতাড়ি বুঝতে পারবেন।
অলিভার ওয়েইলার

37
আপনি বন্ধু শিখতে অনেক কিছু পেয়েছি।
কেওসপ্যান্ডিয়ন

60
@ চাওসপ্যান্ডিওন আমরা সবাই অনেক কিছু শিখতে পেয়েছি
কেনওয়ারার

উত্তর:


151

উত্তেজক শ্রেণিতে উল্লিখিত ফাংশনগুলি (ইন্টারফেসে) প্রয়োগ করা হয়েছে তা নিশ্চিত করার জন্য তারা সেখানে রয়েছে।

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

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

সি # একটি দুর্দান্ত ভাষা, তবে কিছু সময় এটি আপনাকে অনুভূতি দেয় যে প্রথম মাইক্রোসফ্ট সমস্যাটি তৈরি করে (একাধিক উত্তরাধিকারের অনুমতি দেয় না) এবং তারপরে সমাধান দেয় যা বরং এক ক্লান্তিকর।

আচ্ছা আমি তোমাকে খুশি মনে করি।

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


আমি কেবল "মাইক্রোসফ্ট একাধিক উত্তরাধিকারের অনুমতি না দিয়ে সমস্যা তৈরি করে" পড়ছিলাম এবং আমি ভেবেছিলাম এরিক লিপার্টকে সে সম্পর্কে কিছু বলার আছে।
Configurator

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

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

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

9
"1 আপনার পক্ষে ভাল লাগছে বলে আমি আনন্দিত।" এবং অন্যান্য সমস্ত জিনিস।
রবার্ট এস

235

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

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

ইন্টারফেসগুলি কার্যকর কারণ তারা এমন চুক্তি প্রদান করে যা বস্তুগুলি একে অপরের সম্পর্কে অন্য কিছু জানার দরকার না করে একসাথে কাজ করতে পারে।


4
নীচের বাম বস্তুটি আইপওয়ারপ্লাগ =) প্রয়োগ করে এমনটি মনে হচ্ছে না
স্টিভেন স্ট্রিগা

100
অভিশাপ, কিন্তু আইপিওয়ারপ্লাগ বিভিন্ন দেশে ব্যবহার করতে আমাদের একটি অ্যাডাপ্টার প্যাটার্ন ব্যবহার করতে হবে!
স্টিভেন জিউরিস

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

4
এই উত্তরটি কেবল আশ্চর্যজনক ...
মারিও গার্সিয়া

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

145

ফাংশনের স্বাক্ষর প্রদান ব্যতীত, তারা কিছুই করে না। যদি আমি কার্য সম্পাদন করার জন্য প্রয়োজনীয় ফাংশনগুলির নাম এবং স্বাক্ষর মনে করতে পারি তবে তাদের প্রয়োজন নেই

ইন্টারফেসের বিন্দুটি আপনাকে কোন পদ্ধতিটি প্রয়োগ করতে হবে তা মনে রাখতে সহায়তা করে না, এটি একটি চুক্তি সংজ্ঞায়িত করার জন্য এখানে । ইন foreach P.Brian.Mackey উদাহরণ (যা দেখা যাচ্ছে ভুল হতে , কিন্তু আমরা পরোয়া করি না), IEnumerable এর মধ্যে একটি চুক্তি সংজ্ঞায়িত foreach এবং কোন গণনীয় জিনিস। এতে বলা হয়েছে: "আপনি যে কেউ হন, যতক্ষণ আপনি চুক্তিতে লেগে থাকুন (বাস্তবায়ন কার্যকর করুন), আমি আপনাকে প্রতিশ্রুতি দিচ্ছি যে আমি আপনার সমস্ত উপাদানগুলিতে পুনরাবৃত্তি করব"। এবং, এটি দুর্দান্ত (একটি গতিবিহীন ভাষার জন্য)।

ইন্টারফেসের জন্য ধন্যবাদ আপনি দুটি শ্রেণীর মধ্যে খুব কম সংযোগ অর্জন করতে পারেন।



"হাঁসের টাইপিং" শব্দটি ব্যবহার করা আমার পছন্দ নয় কারণ এর অর্থ বিভিন্ন লোকের কাছে বিভিন্ন জিনিস। আমরা "ফোরচ" লুপের জন্য প্যাটার্ন মিলটি ব্যবহার করি কারণ এটি যখন নকশা করা হয়েছিল তখন অনুমিত <T> অনুপলব্ধ ছিল। আমরা লিনকুই-র জন্য প্যাটার্ন ম্যাচিং ব্যবহার করি কারণ সি # টাইপ সিস্টেমটি আমাদের প্রয়োজনীয় "মোনাড প্যাটার্ন" ক্যাপচার করতে খুব দূর্বল; আপনার হাস্কেল টাইপ সিস্টেমের মতো কিছু দরকার।
এরিক লিপার্ট

@ এরিক: "প্যাটার্ন ম্যাচিং" এর কি একই সমস্যা নেই? যখন আমি এটি শুনি তখন আমার মনে হয় এফ # / স্কালা / হাস্কেল। তবে আমার ধারণা এটি হাঁসের টাইপিংয়ের চেয়ে বিস্তৃত ধারণা।
ড্যানিয়েল

@ ড্যানিয়েল: হ্যাঁ, আমি মনে করি এটি হয়েছে। এর ছয়টি দেড় ডজনের মধ্যে অন্যটি আমি অনুমান করি!
এরিক লিপার্ট

36

ইন্টারফেসগুলি হ'ল ডিকোপলড কনস্ট্রাক্টস বজায় রাখার সেরা উপায়।

পরীক্ষা লেখার সময় আপনি দেখতে পাবেন যে কংক্রিটের ক্লাসগুলি আপনার পরীক্ষার পরিবেশে কাজ করবে না।

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

সমাধান? আপনার ডেটা অ্যাক্সেস পরিষেবাটির জন্য একটি ইন্টারফেস ব্যবহার করুন এবং সেই ইন্টারফেসটিকে মোক করুন যাতে আপনি আপনার শ্রেণিকে ইউনিট হিসাবে পরীক্ষা করতে পারেন।

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


2
শুনতে শুনতে! পলিমারফিজমের মতো অন্যান্য সমস্যা সমাধানের জন্য ইন্টারফেসগুলি আবিষ্কার করা হয়েছিল। যাইহোক, আমার জন্য, নির্ভরতা ইঞ্জেকশন প্যাটার্নটি প্রয়োগ করার সময় এগুলি তাদের নিজস্ব হয়।
অ্যান্ডি

29

ইন্টারফেসগুলি (স্ট্যাটিক) বহুমুখীতার মেরুদণ্ড! ইন্টারফেসটি কি গুরুত্বপূর্ণ। উত্তরাধিকার ইন্টারফেস ছাড়া কাজ করবে না, কারণ সাবক্লাসগুলি মূলত পিতামাতার ইতিমধ্যে বাস্তবায়িত ইন্টারফেসের উত্তরাধিকারী হয়।

আপনি কত ঘন ঘন সেগুলি ব্যবহার করেন এবং আপনাকে কী করে তা ??

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

একই ডেটাতে অপারেশন করতে বিভিন্ন অ্যালগরিদম প্রয়োজন? একটি ইন্টারফেস ব্যবহার করুন ( কৌশল প্যাটার্ন দেখুন )!

আপনি কি বিভিন্ন তালিকা বাস্তবায়ন ব্যবহার করতে চান? একটি ইন্টারফেসের বিরুদ্ধে কোড এবং কলারের বাস্তবায়নের বিষয়ে চিন্তা করার দরকার নেই!

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


1
পলিমার্ফির কথা কখনও শুনেনি, মানে বহুত্ববাদ?
স্টিভেন জিউরিস

1
বলা হচ্ছে, মাইক্রোসফ্ট যদি একাধিক উত্তরাধিকার প্রথম স্থানে মঞ্জুর করে, তবে ইন্টারফেসের অস্তিত্বের কোনও কারণ থাকত না
পঙ্কজ উপাধ্যায়

10
@ পঙ্কজ উপাধ্যায়: একাধিক উত্তরাধিকার এবং ইন্টারফেস দুটি পৃথক জুতা। আপনার যদি বিবিধ আচরণের সাথে দুটি সম্পর্কযুক্ত ক্লাসের ইন্টারফেসের প্রয়োজন হয়? আপনি একাধিক উত্তরাধিকারসূত্রে এটি সমাধান করতে পারবেন না। আপনার এটিকে যাইহোক আলাদাভাবে বাস্তবায়ন করতে হবে। এবং তারপরে বহুত্বপূর্ণ আচরণ প্রদানের জন্য আপনার ইন্টারফেসটি বর্ণনা করার জন্য কিছু দরকার। একাধিক উত্তরাধিকার হ'ল একটি অন্ধ গলি যা অনেক ক্ষেত্রেই হাঁটতে পারে এবং যত তাড়াতাড়ি বা পরে নিজেকে পায়ে আটকানো খুব সহজ।
ফ্যালকন

1
সরল করতে দেয় যদি আমার ইন্টারফেস দুটি ক্রিয়াকলাপ প্রদর্শন এবং মন্তব্য প্রয়োগ করে এবং আমার একটি শ্রেণি রয়েছে যা সেগুলি প্রয়োগ করে। তবে কেন আমি ইন্টারফেসটি সরিয়ে ফাংশনগুলি সরাসরি ব্যবহার করব না। আমি যা বলছি তা হ'ল তারা কেবল আপনাকে যে ক্রিয়াকলাপগুলি প্রয়োগ করতে হবে তার নাম সরবরাহ করে। কেউ যদি সেই ফাংশনগুলি মনে করতে পারে তবে কেন একটি ইন্টারফেস তৈরি করুন
পঙ্কজ উপাধ্যায়

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

12

আপনি সম্ভবত foreachএটি একটি দুর্দান্ত দরকারী পুনরাবৃত্তি সরঞ্জাম হিসাবে ব্যবহার করেছেন এবং পেয়েছেন। আপনি কি জানতেন যে এটির কাজ করার জন্য একটি ইন্টারফেসের দরকার আছে, গুণনীয় ?

এটি অবশ্যই একটি ইন্টারফেসের উপযোগিতার সাথে কথা বলার একটি কংক্রিট কেস।


5
: আসলে, foreach IEnumerable প্রয়োজন হয় না msdn.microsoft.com/en-us/library/9yb8xew9%28VS.80%29.aspx
ম্যাট এইচ

1
আমি এটি সমস্ত অধ্যয়ন করেছি কিন্তু এটি অন্য হাতে কান ধরে রাখার মতো। যদি একাধিক উত্তরাধিকারের অনুমতি দেওয়া হয় তবে ইন্টারফেসটি অনেক পছন্দ ছিল।
পঙ্কজ উপাধ্যায়

2
ইন্টারফেসগুলি একাধিক উত্তরাধিকার, এমন কিছু যা প্রায়শই ভুলে যায়। তবে তারা আচরণ এবং রাষ্ট্রের একাধিক উত্তরাধিকারের অনুমতি দেয় না। Mixins বা বৈশিষ্ট্যগুলো আচরণ একাধিক উত্তরাধিকার দিই, কিন্তু ভাগ করা হয়নি রাষ্ট্র যা সমস্যা কারণ: en.wikipedia.org/wiki/Mixin
ম্যাট এইচ

@ পঙ্কজ, অফটোপিক, তবে আমি যদি আপনার মাতৃভাষাটি জিজ্ঞাসা করি তবে আপনি কি আপত্তি করবেন? "অন্য হাতে কান ধরে রাখা" একটি দুর্দান্ত মূর্খতা এবং আমি কৌতূহলী হয়েছিলাম সেখান থেকে।
কেভিন

3
@Iceman। LOL .... আমি ভারত থেকে এসেছি। এবং এখানে এটি একটি সাধারণ প্রতিমা যা সহজ কাজগুলি করা সহজভাবে প্রতিফলিত করে।
পঙ্কজ উপাধ্যায়

11

ইন্টারফেসগুলি কোডিং অবজেক্টগুলিতে যেমন কোনও প্লাগটি ঘরের তারের হয়। আপনি কি আপনার ঘরের ওয়্যারিংয়ের সাথে সরাসরি আপনার রেডিওটি সোল্ডার করতে পারেন? আপনার ভ্যাকুয়াম ক্লিনার সম্পর্কে কীভাবে? অবশ্যই না. এতে প্লাগ এবং এটির সাথে খাপ খায় এমন আপনার ঘর এবং তার থেকে পাওয়ার প্রয়োজন এমন ডিভাইসের মধ্যে "ইন্টারফেস" তৈরি করে। আপনার ঘরের ওয়্যারিংয়ের জন্য ডিভাইসটি ত্রি-দীর্ঘায়িত গ্রাউন্ড প্লাগ ব্যবহার করা ছাড়া অন্য কিছুই জানতে হবে এবং 120VAC <= 15A এ বৈদ্যুতিক শক্তি প্রয়োজন। বিপরীতে, ডিভাইসটির আপনার ঘর কীভাবে ওয়্যার্ড করা হয়েছে তার কোনও তীরবিহীন জ্ঞানের প্রয়োজন নেই, অন্যথায় এতে এক বা একাধিক তিন-দীর্ঘায়িত আউটলেট রয়েছে যা 120VAC <= 15A সরবরাহ করে convenient

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

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


7

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

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

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

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

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

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


6

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

আমি একমত নই যে একাধিক উত্তরাধিকার তার নিজের ব্যথার সেট নিয়ে আসার আগেই আমরা বিতর্ক করার আগেও ইন্টারফেস হওয়ার চেয়ে একাধিক উত্তরাধিকার উত্তম। পলিমারফিজম এবং কোড পুনরায় ব্যবহার সক্ষম করার জন্য ইন্টারফেসগুলি একটি মৌলিক সরঞ্জাম, এর জন্য আর কী প্রয়োজন?


5

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

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

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

আমি সিস্টেম.কম্পোনেন্টমোডেল নেমস্পেস ব্যবহার করে প্লাগইন পরিবেশ লেখার সাথে ব্যাপকভাবে ইন্টারফেস ব্যবহার করেছি। তারা বেশ কাজে আসে।


1
খুব ভাল লাগিয়ে! আমি অনুমান করছি আপনি আমার বিমূর্ত ক্লাস সম্পর্কে নিবন্ধ পছন্দ করবেন। বিমূর্ততা সবকিছু
স্টিভেন জিউরিস

5

আমি বলতে পারি যে আমি এটির সাথে সম্পর্কিত। আমি প্রথম যখন ওও এবং সি # সম্পর্কে শিখতে শুরু করি তখন আমিও ইন্টারফেস পেতাম না। ঠিক আছে. আমাদের কেবলমাত্র এমন কিছু উপায়ে আসা দরকার যা আপনাকে ইন্টারফেসের সুবিধার জন্য প্রশংসা করবে make

আমাকে দুটি পদ্ধতির চেষ্টা করতে দিন। এবং সাধারণীকরণের জন্য আমাকে ক্ষমা করুন।

চেষ্টা করুন 1

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

আপনি কি জিজ্ঞাসা করেছেন: "আরে, আপনি কি যুক্তরাষ্ট্রে জন্মগ্রহণ করেছিলেন?" এটি উত্তরাধিকার।

বা আপনি কি জিজ্ঞাসা করছেন: "আরে, আপনি কি ইংরেজী বলেন"? এটি ইন্টারফেস।

আপনি যদি এটি কী করে সে সম্পর্কে যত্নশীল হন তবে আপনি ইন্টারফেসে নির্ভর করতে পারেন। যদি আপনি কী সে সম্পর্কে যত্নশীল হন তবে আপনি উত্তরাধিকারের উপর নির্ভর করেন।

উত্তরাধিকারের উপর নির্ভর করা ঠিক আছে। আপনার যদি এমন একজনের প্রয়োজন হয় যিনি ইংরেজি কথা বলতে চান, চা পছন্দ করেন এবং সকার পছন্দ করেন তবে আপনি ব্রিট চেয়ে আরও ভালভাবে পরিবেশন করবেন। :)

চেষ্টা করুন 2

ঠিক আছে, আসুন অন্য একটি উদাহরণ চেষ্টা করুন।

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

public abstract class SuperDatabaseHelper
{
   void Connect (string User, string Password)
}

public abstract class HiperDatabaseHelper
{
   void Connect (string Password, string User)
}

একাধিক উত্তরাধিকার, আপনি বলছেন? উপরের কেস দিয়ে এটি চেষ্টা করুন। আপনি পারবেন না। কোন সংযোগ পদ্ধতিতে আপনি কল করার চেষ্টা করছেন তা সংকলকটি জানতে পারবে না।

interface ISuperDatabaseHelper
{
  void Connect (string User, string Password)
}

interface IHiperDatabaseHelper
{
   void Connect (string Password, string User)
}

এখন, আমরা এমন কিছু কাজ করতে পারি - কমপক্ষে সি # তে - যেখানে আমরা স্পষ্টভাবে ইন্টারফেস প্রয়োগ করতে পারি।

public class MyDatabaseHelper : ISuperDatabaseHelper, IHiperDatabaseHelper
{
   IHiperDataBaseHelper.Connect(string Password, string User)
   {
      //
   }

   ISuperDataBaseHelper.Connect(string User, string Password)
   {
      //
   }

}

উপসংহার

উদাহরণগুলি সর্বোত্তম নয়, তবে আমি মনে করি এটি পয়েন্টটি অতিক্রম করে।

আপনি কেবল যখন "ইন্টারফেস" এর প্রয়োজনীয়তা অনুভব করবেন তখনই পাবেন। তাদের অবধি আপনি ভাববেন যে তারা আপনার পক্ষে নয়।


প্রথম চেষ্টাটি আমার ভোটটি দিয়েছে।
osundblad

1
আমি এখন থেকে আমেরিকান বনাম ইংলিশ স্পিকার উপমাটি পুরোপুরি ব্যবহার করছি। চমৎকার.
ব্রায়ান বোয়েচার

সহজ পদ্ধতিতে ব্যাখ্যা করা হয়েছে! ফ্যান্টাস্টিক।
আইমল খান

4

দুটি বড় কারণ রয়েছে:

  1. একাধিক উত্তরাধিকারের অভাব। আপনি একটি বেস শ্রেণি থেকে উত্তরাধিকারী হতে পারেন এবং যে কোনও সংখ্যক ইন্টারফেস প্রয়োগ করতে পারেন। .NET- এ একাধিক উত্তরাধিকার "করার" একমাত্র উপায়।
  2. সিওএম আন্তঃযোগিতা "পুরানো" প্রযুক্তিগুলির দ্বারা যে কোনও কিছু ব্যবহার করার প্রয়োজন হবে তার ইন্টারফেস সংজ্ঞায়িত করা প্রয়োজন।

পয়েন্ট 1 হ'ল মাইক্রোসফ্ট বিকাশকারীরা নিজেরাই বিকাশের কারণ এবং কারণ
পঙ্কজ উপাধ্যায়

1
@ পঙ্কজা আসলে, তারা জাভা থেকে ইন্টারফেস ধারণাটি নিয়েছিল (সি # এর বৈশিষ্ট্যগুলির একটি ভাল অংশের মতো)।
অলিভার ওয়েইলার

3

ইন্টারফেসের ব্যবহার একটি সিস্টেমকে ডিকপলড রাখতে সহায়তা করে এবং এভাবে চুল্লি, পরিবর্তন এবং পুনরায় চালিত করা সহজ। এটি অবজেক্ট-ভিত্তিক গোঁড়া সম্পর্কে একটি মূল ধারণা এবং আমি যখন সি ++ গুরুরা "খাঁটি বিমূর্ত শ্রেণি" তৈরি করে যা ইন্টারফেসের সাথে সমান সমান হয় তখন এটি সম্পর্কে আমি প্রথম জানতে পারি।


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

3

নিজের দ্বারা ইন্টারফেসগুলি খুব কার্যকর নয়। কংক্রিট ক্লাস দ্বারা প্রয়োগ করা যখন আপনি দেখতে পাবেন যে এটি এক বা একাধিক বাস্তবায়ন আপনি নমনীয়তা দেয়। বোনাসটি হ'ল ইন্টারফেসটি ব্যবহার করে অবজেক্টের প্রকৃত বাস্তবায়নের বিশদটি কীভাবে যায় তা জানা দরকার না - এটিকে এনক্যাপসুলেশন বলে called


2

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

এছাড়াও তারা ওয়েবসার্চগুলিতে খুব উপযোগী যেখানে আপনি ক্লায়েন্টকে কোনও ক্লাস কী করে তা জানাতে চান (যাতে তারা এটি গ্রাস করতে পারে) তবে তাদের আসল কোডটি দিতে চান না।


2

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


1

একটি বাস্তব বিশ্বের বাস্তবায়ন:

ইন্টারফেস প্রকার হিসাবে আপনি কোনও বস্তু নিক্ষেপ করতে পারেন:

IHelper h = (IHelper)o;
h.HelperMethod();

আপনি একটি ইন্টারফেসের একটি তালিকা তৈরি করতে পারেন

List<IHelper> HelperList = new List<IHelper>();

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


0

ইন্টারফেসগুলি ক্লাসে আপনার সিস্টেমটি বিতরণ করে এমন কিছু ধরণের বার্তা বোঝার (এবং সাবস্ক্রাইব করার) জন্য একটি পদ্ধতি সরবরাহ করে প্লাগইন-স্টাইলের মডুলারিলিটিকে leণ দেয়। আমি বিস্তারিত জানাব।

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

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

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

উদাহরণস্বরূপ, আপনি প্রতিস্থাপন করতে পারেন ...

Me.PublishDate.Clear()
Me.Subject.Clear()
Me.Body.Clear()

...সঙ্গে:

For Each ctl As IClear In Me.Controls.OfType(Of IClear)()
    ctl.Clear()
Next

যা কার্যকরভাবে অনেকটা শোনাচ্ছে:

শোনো, শোনো! যারা ক্লিয়ারিং বোঝে তারা কি Clearএখনই দয়া করে !

এইভাবে, আমরা প্রোগ্রামগতভাবে প্রতিটি বিষয় নিজেরাই পরিষ্কার করতে এড়াতে পারি। ভবিষ্যতে যখন ক্লিয়ারযোগ্য আইটেম যুক্ত করা হয় তখন তারা কোনও অতিরিক্ত কোড ছাড়াই সাড়া দেয়।


0

নিম্নলিখিত সিউডোকোড:

class MyClass{

    private MyInterface = new MyInterfaceImplementationB();

    // Code using Thingy 

}

interface MyInterface{

    myMethod();

}

class MyInterfaceImplementationA{ myMethod(){ // method implementation A } }

class MyInterfaceImplementationB{ myMethod(){ // method implementation B } }

class MyInterfaceImplementationC{ myMethod(){ // method implementation C } }

শেষ ক্লাসগুলি সম্পূর্ণ আলাদা বাস্তবায়ন হতে পারে।

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

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

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