"ইন্টারফেসে প্রোগ্রামিং" বোঝা


30

আমি "প্রয়োগের পরিবর্তে একটি ইন্টারফেসে প্রোগ্রামিং" শব্দটিটি অনেকটা পেরিয়ে এসেছি এবং আমি মনে করি এটির অর্থ কী তা আমি বুঝতে পারি। তবে আমি নিশ্চিত করতে চাই যে আমি এটির সুবিধাগুলি বুঝতে পেরেছি এবং এটি সম্ভব বাস্তবায়ন।

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

জাভাতে একটি সাধারণ উদাহরণটি হ'ল:

List myList = new ArrayList();পরিবর্তে ArrayList myList = new ArrayList();

এ সম্পর্কে আমার দুটি প্রশ্ন রয়েছে:

  1. আমি নিশ্চিত করতে চাই যে আমি এই পদ্ধতির মূল সুবিধাটি বুঝি understand আমি মনে করি সুবিধাগুলি বেশিরভাগ নমনীয়তা। কোন বিষয়টিকে কংক্রিট বাস্তবায়ন না করে আরও উচ্চ-স্তরের রেফারেন্স হিসাবে ঘোষণা করা, বিকাশ চক্র এবং কোডজুড়ে আরও নমনীয়তা এবং বজায় রাখার মঞ্জুরি দেয়। এটা কি সঠিক? নমনীয়তা কি প্রধান উপকার?

  2. 'ইন্টারফেসে প্রোগ্রামিং' এর আরও কি উপায় আছে? বা "একটি কংক্রিট প্রয়োগের পরিবর্তে ইন্টারফেস হিসাবে পরিবর্তনশীল ঘোষণা করা" এই ধারণার একমাত্র বাস্তবায়ন?

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




1
এই উত্তরটি আপনাকে উদাহরণস্বরূপ উদাহরণস্বরূপ প্রোগ্রামারগুলি
.stackexchange.com

উত্তর:


45

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

এটি সঠিক নয় । বা কমপক্ষে, এটি সম্পূর্ণ সঠিক নয়।

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

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

আপনি যদি কোডটি বিশেষভাবে প্রয়োগের (ফ্লপি ডিস্ক এবং কমান্ড লাইন) চারপাশে ডিজাইন করেন তবে আপনি পরিবর্তনের জন্য প্রস্তুত থাকবেন না। আপনি যদি ইন্টারফেসের চারপাশে আপনার কোড ডিজাইন করে থাকেন (মুদি তালিকার ম্যানিপুলেটিং) তবে বাস্তবায়ন পরিবর্তন করতে পারে।


উত্তর করার জন্য ধন্যবাদ. আপনি যা লিখেছেন তা বিচার করে আমি মনে করি আমি বুঝতে পারি "ইন্টারফেসে প্রোগ্রামিং" এর অর্থ কী এবং এর সুবিধা কী। তবে আমার একটি প্রশ্ন আছে - এই ধারণার সর্বাধিক প্রচলিত উদাহরণ হ'ল: কোনও বস্তুর রেফারেন্স তৈরি করার সময়, রেফারেন্স টাইপটি ইন্টারফেস টাইপ করুন যা এই বস্তুটি প্রয়োগ করে (বা সুপারক্লাস এই বস্তুটি উত্তরাধিকার সূত্রে প্রাপ্ত হয়) বস্তুর ধরণ। ( একে , এর List myList = new ArrayList()পরিবর্তে ArrayList myList = new ArrayList()। (প্রশ্নটি পরবর্তী মন্তব্যে রয়েছে))
আভিভ কোহন

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

6
কোনList/ ArrayListআমি যা কিছু বলছি তা নয়। এটি Employeeকোনও কর্মচারী রেকর্ড সঞ্চয় করার জন্য আপনি যে লিঙ্কযুক্ত সারণী ব্যবহার করেন সেগুলির সেটের চেয়ে কোনও অবজেক্ট সরবরাহ করার মতো । বা গানের মাধ্যমে পুনরাবৃত্তি করার জন্য একটি ইন্টারফেস সরবরাহ করা, এবং যদি সেই গানগুলি বদলে যায়, বা কোনও সিডিতে থাকে না, বা ইন্টারনেট থেকে স্ট্রিমিং হয় না ing এগুলি গানের সিকোয়েন্স মাত্র।
টেলাস্টিন

আপনি কি বলতে পারবেন যে "একটি ইন্টারফেসে প্রোগ্রামিং, কোনও প্রয়োগের জন্য নয়" এমন একটি নীতি যা বিমূর্তি ওও নীতির প্রকাশ করে?
আভিভ কোহন

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

19

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

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

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

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

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


এটি একটি ভাল পয়েন্ট, এবং আমি এটি নির্দিষ্ট প্রসঙ্গে অনেক শুনেছি।
টেলাস্টিন

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

এটি যদি সঠিক হয় তবে আমার প্রশ্নের চেয়ে- 'কংক্রিট-ক্লাসের রেফারেন্সের চেয়ে ইন্টারফেস রেফারেন্স ব্যবহার করা' সাধারণ উদাহরণ ছাড়াও 'ইন্টারফেসে প্রোগ্রামিং'-এর আরও কি কি নিদর্শন রয়েছে?
আভিভ কোহন

2
@ অ্যাভিভকোহান এই উত্তরে কিছুটা দেরি করলেও এর একটি দৃ concrete় উদাহরণ হ'ল ওয়ার্ল্ড ওয়াইড ওয়েব। ব্রাউজার যুদ্ধের সময় (IE 4 যুগ) ওয়েব সাইটগুলি কোনও স্পেসিফিকেশন যা বলেছিল তার দিকে নয় বরং কিছু ব্রাউজারের (নেটস্কেপ বা আইই) গতিবিধিতে লেখা হয়েছিল। এটি মূলত ইন্টারফেসের পরিবর্তে বাস্তবায়নের জন্য প্রোগ্রামিং করছিল।
সেবাস্তিয়ান রেডল

9

আমি কেবল আমার ব্যক্তিগত অভিজ্ঞতা সম্পর্কে বলতে পারি, কারণ এটি আমাকে কখনও আনুষ্ঠানিকভাবে শেখানো হয়নি।

আপনার প্রথম পয়েন্টটি সঠিক। অর্জিত নমনীয়তাটি ঘটনাক্রমে কংক্রিট শ্রেণীর প্রয়োগের বিশদটি অনুরোধ করতে সক্ষম না হওয়া থেকে আসে যেখানে তাদের প্রার্থনা করা উচিত নয়।

উদাহরণস্বরূপ, একটি ILoggerইন্টারফেস বিবেচনা করুন যা বর্তমানে একটি কংক্রিট LogToEmailLoggerশ্রেণি হিসাবে প্রয়োগ করা হয়েছে । LogToEmailLoggerবর্গ সব অনাবৃত ILoggerপদ্ধতি ও বৈশিষ্ট্য, কিন্তু একটি বাস্তবায়ন-নির্দিষ্ট সম্পত্তি আছে ঘটবে sysAdminEmail

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

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

এই অর্থে, একটি ইন্টারফেসের কোডিং কোডিং আলগা করুন

আপনার দ্বিতীয় বিষয় সম্পর্কে: আমি একটি ইন্টারফেসে কোডিংয়ের জন্য অন্য কারণটি দেখেছি কোডের জটিলতা হ্রাস করা।

উদাহরণস্বরূপ, কল্পনা আমি নিম্নলিখিত ইন্টারফেসগুলি একটি গেম আছে I2DRenderable, I3DRenderable, IUpdateable। একক গেমের উপাদানগুলির জন্য 2 ডি এবং 3 ডি উভয়ই উপস্থাপনযোগ্য সামগ্রী থাকা অস্বাভাবিক নয়। অন্যান্য উপাদানগুলি কেবলমাত্র 2 ডি এবং অন্যেরা কেবল 3 ডি হতে পারে।

যদি 2 ডি রেন্ডারিং একটি মডিউল দ্বারা করা হয়, তবে এটি I2DRenderableএর সংগ্রহ বজায় রাখার জন্য এটি অর্থবোধ করে। এর সংগ্রহে থাকা অবজেক্টগুলিও I3DRenderableবা IUpdatebleঅন্য মডিউলগুলি অবজেক্টগুলির সেই দিকগুলির চিকিত্সা করার জন্য দায়বদ্ধ হবে তা বিবেচ্য নয়।

তালিকা হিসাবে রেন্ডারেবল অবজেক্টগুলিকে স্টোর করা I2DRenderableরেন্ডারিং ক্লাসের জটিলতা কম রাখে। 3 ডি রেন্ডারিং এবং আপডেট লজিক এর উদ্বেগের কোনটি নয় এবং তাই এর শিশুদের সেই দিকগুলি অবহেলা করতে পারে এবং এড়ানো উচিত ignored

এই অর্থে, একটি ইন্টারফেসে কোডিং উদ্বেগকে বিচ্ছিন্ন করে জটিলতা কম রাখে ।


4

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

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

এটি তখন আপনাকে তার অভ্যন্তরীণ কোডটি রিফ্যাক্টর করার জন্য নমনীয়তা সরবরাহ করে যখন তার ইন্টারফেসের উপর নির্ভর করে অন্যান্য সমস্ত জিনিস না বলে।

এর অর্থ হল যে আপনার কোডটি আরও স্থিতিশীল হওয়া উচিত be ইন্টারফেসের সাথে লেগে থাকার পরে আপনার অন্য লোকের কোড ভঙ্গ করা উচিত নয়। যখন আপনাকে সত্যিই ইন্টারফেসটি পরিবর্তন করতে হবে তখন আপনি এপিআইয়ের একটি নতুন বড় সংস্করণ (1.abc থেকে 2.xyz) প্রকাশ করতে পারবেন যা ইঙ্গিত দেয় যে নতুন সংস্করণের ইন্টারফেসে কিছু পরিবর্তন রয়েছে।

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


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

4

একটি বাস্তব বিশ্বের উপমা সাহায্য করতে পারে:

একটি ইন্টারফেসে একটি মেইন বিদ্যুৎ প্লাগ।
হ্যাঁ; আপনার টিভি, রেডিও, ভ্যাকুয়াম ক্লিনার, ওয়াশিং মেশিন ইত্যাদি থেকে পাওয়ার কর্ডের শেষে যে তিন পিনযুক্ত জিনিসটি রয়েছে

যে কোনও সরঞ্জামের একটি প্রধান প্লাগ রয়েছে (যেমন "মাইনস প্লাগ রয়েছে" ইন্টারফেস প্রয়োগ করে) ঠিক একইভাবে চিকিত্সা করা যেতে পারে ; এগুলি সমস্ত প্রাচীরের সকেটে প্লাগ ইন করা যায় এবং সেই সকেট থেকে শক্তি আঁকতে পারে।

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

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


1

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

সফ্টওয়্যার আর্কিটেকচারে প্রাকৃতিক সীমানার বিস্তৃত রয়েছে। সাধারণ উদাহরণ অন্তর্ভুক্ত

  • ক্লায়েন্ট এবং সার্ভার প্রক্রিয়াগুলির মধ্যে নেটওয়ার্কের সীমানা
  • কোনও অ্যাপ্লিকেশন এবং তৃতীয় পক্ষের লাইব্রেরির মধ্যে এপিআই সীমানা
  • প্রোগ্রামের মধ্যে বিভিন্ন ব্যবসায়িক ডোমেনগুলির মধ্যে অভ্যন্তরীণ কোডের সীমা

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

এর পরিণতিগুলি হ'ল:

  • বাহ্যিক উপাদানগুলি স্পেসিফিকেশনটি প্রয়োগ করার সাথে সাথে তার আদান-প্রদান করা যেতে পারে
  • সঠিক আচরণকে বৈধতা দেওয়ার জন্য ইউনিট পরীক্ষার জন্য প্রাকৃতিক পয়েন্ট
  • ইন্টিগ্রেশন টেস্টগুলি গুরুত্বপূর্ণ হয়ে উঠেছে - স্পেসিফিকেশনটি কি অস্পষ্ট ছিল?
  • একজন বিকাশকারী হিসাবে কোনও নির্দিষ্ট কাজ নিয়ে কাজ করার সময় আপনার উদ্বেগের একটি ছোট্ট বিশ্ব থাকে

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

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