অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে "ইন্টারফেস" এর সংজ্ঞা কী?


108

ঠিক আছে, আমার এক বন্ধু প্রোগ্রামিংয়ে "ইন্টারফেস" বলতে কী বোঝায় তা পিছনে পিছনে যায়।

একটি "ইন্টারফেস" এর সেরা বর্ণনা কি।

আমার কাছে ইন্টারফেসটি কোনও শ্রেণীর একটি নীলনকশা, এটি কি সেরা সংজ্ঞা?


1
: কোনো প্রতারিত, কিন্তু এটা আলোর একটি অনেক এই প্রশ্ন উপর sheds stackoverflow.com/questions/444245/...
rmeador

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

উত্তর:


179

একটি ইন্টারফেস বিকাশের আরও বেশি বোঝা এবং বিভ্রান্তিকর শর্তগুলির মধ্যে একটি।

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

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

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

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

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

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

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


আমি অবজেক্টিভ-সি-তে একটি বই পড়ছি এবং আমার কাছে মনে হয় যে লেখকরা "প্রোটোকল" এবং "ইন্টারফেস" শব্দটি আন্তঃবিন্যভাবে ব্যবহার করেন। "প্রোটোকল" এবং "ইন্টারফেস" একই জিনিস বা আমি কি কিছু হারিয়ে ফেলছি তা বলা কি সঠিক?
ফাজলিনী

1
আমি "ইন্টারফেস" জন্য "প্রোটোকল" শব্দটি ব্যবহার করব না। "প্রোটোকল" শব্দটি কীভাবে কর্ম সম্পাদন করা হয় সে সম্পর্কে একটি স্তরের বিশদ বোঝায়। "ইন্টারফেস" সত্যিকার অর্থে খাঁটি ইংরেজী সংজ্ঞা সহ একটি দুর্দান্ত শব্দ যা এটি ঠিক কী তা বর্ণনা করে describes
ওসিডিএভ

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

166

নিম্নলিখিত পরিস্থিতি বিবেচনা করুন:

আপনি যখন একটি জম্বি হঠাৎ আপনার উপর আক্রমণ করেন তখন আপনি একটি বিশাল, খালি ঘরটির মাঝখানে থাকেন।

আপনার কাছে কোনও অস্ত্র নেই।

ভাগ্যক্রমে, সহযাত্রী একজন মানুষ ঘরের দরজায় দাঁড়িয়ে আছেন।

"দ্রুত!" তুমি ওকে চেঁচিয়ে দাও। "আমাকে এমন কিছু ছুঁড়ে ফেলুন যার সাথে আমি জম্বিটিকে আঘাত করতে পারি!"

এখন বিবেচনা করুন:
আপনি আপনার বন্ধু কী টস করতে পছন্দ করবেন তা ঠিক উল্লেখ করেননি (বা আপনার যত্নও নেই) ;
... তবে যতক্ষণ না:

  • এটা তোলে এর কিছু যে করতে ক্ষতিগ্রস্থ করা (তিনি আপনাকে সোফা শিরসঁচালন করা যাবে না)

  • এটি এমন কিছু যা আপনি ধরে রাখতে পারেন (আসুন আশা করি তিনি কোনও শুরিকেন টস করেননি)

  • এটি এমন কিছু যা আপনি জুম্বির মস্তিষ্ককে আটকানোর জন্য ব্যবহার করতে পারেন (এটি বালিশ এবং এরকম নিয়ম করে)

আপনি বেসবল ব্যাট বা হাতুড়ি পান কিনা তা বিবেচ্য নয় -
যতক্ষণ না এটি আপনার তিনটি শর্ত প্রয়োগ করে, আপনি ভাল।

এটি যোগ করা:

আপনি যখন একটি ইন্টারফেস লেখেন, আপনি মূলত: "আমার এমন কিছু দরকার যা ..."


13
আসলে, একটি বালিশ এখনও কাজ করবে। আপনি এটি সঙ্গে জম্বি আঘাত করতে পারেন। জোম্বির মস্তিষ্ককে বাশিত করুন ... ভাল এটি পারফরম্যান্সের প্রশ্ন, যা কখনই ইন্টারফেসের অংশ হয় না।
meustrus

35

ইন্টারফেস হ'ল একটি চুক্তি যা আপনার প্রয়োগ বা ব্যবহারকারী হয় তার উপর নির্ভর করে আপনাকে মেনে চলতে হবে বা দেওয়া উচিত।


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

3
সত্য। একটি ইন্টারফেস একটি "পদ্ধতি স্বাক্ষর চুক্তি", যার অর্থ এটি প্রদত্ত পদ্ধতিগুলি বাস্তবায়নের গ্যারান্টিযুক্ত। এটি কোনও প্রদত্ত পদ্ধতিতে এটি করে কিনা তার কোনও গ্যারান্টি দেয় না।
এরিক ফানকেনবাশ

হুবহু, আপনার এই সংজ্ঞাটি আরও ব্যাখ্যা দেওয়া উচিত। তবে একটি ইন্টারফেস দুটি অংশের মধ্যে একটি চুক্তি। চুক্তি অনুসারে কোড .... +1
matiasnj

18

আমি মনে করি না "ব্লুপ্রিন্ট" ব্যবহার করার জন্য একটি ভাল শব্দ। একটি ব্লুপ্রিন্ট আপনাকে কিছু কীভাবে তৈরি করবেন তা জানায়। একটি ইন্টারফেস বিশেষভাবে আপনাকে কোনও কিছু কীভাবে তৈরি করবেন তা বলা এড়ানো যায়।

একটি ইন্টারফেস সংজ্ঞা দেয় আপনি কীভাবে কোনও শ্রেণীর সাথে ইন্টারেক্ট করতে পারবেন, অর্থাত্ এটি কী পদ্ধতি সমর্থন করে।


1
আমি বিশ্বাস করি যে অনুরোধকারী একটি সংজ্ঞা কি এবং এটি কী নয় তা জিজ্ঞাসা করেছিল। :)
ইউজিন কুলেশভ

7

আমার কাছে ইন্টারফেসটি কোনও শ্রেণীর একটি নীলনকশা, এটি কি সেরা সংজ্ঞা?

না। একটি ব্লুপ্রিন্টে সাধারণত অভ্যন্তরীণ অন্তর্ভুক্ত থাকে। তবে একটি ইন্টারফেসটি ক্লাসের বাইরের অংশে যা দৃশ্যমান তা সম্পর্কে নিখুঁতভাবে হয় ... বা আরও সঠিকভাবে, ক্লাসগুলির একটি পরিবার যা ইন্টারফেসটি বাস্তবায়ন করে।

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


6

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

সি # কোডের এই অংশটি এখানে বিবেচনা করুন:

using System;

public interface IGenerate
{
    int Generate();
}

// Dependencies
public class KnownNumber : IGenerate
{
    public int Generate() 
    {
        return 5;
    }   
}

public class SecretNumber : IGenerate
{
    public int Generate()
    {
        return new Random().Next(0, 10);
    }
}

// What you care about
class Game
{
    public Game(IGenerate generator) 
    {
        Console.WriteLine(generator.Generate())
    }
}

new Game(new SecretNumber());
new Game(new KnownNumber());

গেম শ্রেণীর জন্য একটি গোপন নম্বর প্রয়োজন। এটি পরীক্ষার খাতিরে, আপনি একটি গোপন নম্বর হিসাবে কী ব্যবহৃত হবে তা ইনজেকশন করতে চান (এই নীতিটি নিয়ন্ত্রণের বিপরীতে বলা হয়)।

গেম ক্লাসটি আসলে এলোমেলো সংখ্যাটি কী তৈরি করবে সে সম্পর্কে "মুক্তমনা" হতে চায়, অতএব এটি তার নির্মাতাকে "এমন কোনও কিছুর জন্য জিজ্ঞাসা করবে, যার একটি জেনারেট পদ্ধতি রয়েছে"।

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

এখানে আমি লক্ষ্য করেছি যে আপনি যে নীলনকশাটি ব্যবহার করেছেন:

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

এটি সমস্ত কয়েকটি ওও ভাষার ভাষার স্থিতিশীল প্রকৃতির কারণে ঘটেছে, কারণ এটি জাভা বা সি # এর ক্ষেত্রে। অন্যদিকে পাইথনে, অন্য একটি পদ্ধতি ব্যবহৃত হয়:

import random

# Dependencies
class KnownNumber(object):
    def generate(self):
        return 5

class SecretNumber(object):
    def generate(self):
        return random.randint(0,10)

# What you care about
class SecretGame(object):
    def __init__(self, number_generator):
        number = number_generator.generate()
        print number

এখানে, কোনও ক্লাসই ইন্টারফেস প্রয়োগ করে না। পাইথন সে সম্পর্কে কোন চিন্তা করে না, কারণ SecretGameক্লাসটি কেবল যা কিছু বস্তুটি পাস হয়েছে তা কল করার চেষ্টা করবে the যদি তা না হয়: KAPUTT! এই ভুলটি সংকলনের সময় দেখা যাবে না, তবে রানটাইমের সময়, সম্ভবত যখন আপনার প্রোগ্রামটি ইতিমধ্যে স্থাপন করা এবং চলছে। সি # এর কাছাকাছি আসার আগে আপনাকে আপনাকে অবহিত করবে।

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

# OO Approach
SecretGame(SecretNumber())
SecretGame(KnownNumber())

# Functional Approach

# Dependencies
class SecretGame(object):
    def __init__(self, generate):
        number =  generate()
        print number

SecretGame(lambda: random.randint(0,10))
SecretGame(lambda: 5)

একটি ল্যাম্বডা কেবল একটি ফাংশন, এটি "লাইনে আপনি যেমন যান" হিসাবে ঘোষণা করা হয়েছিল। একজন প্রতিনিধি সি # তে ঠিক একই রকম:

class Game
{
    public Game(Func<int> generate) 
    {
        Console.WriteLine(generate())
    }
}    

new Game(() => 5);
new Game(() => new Random().Next(0, 10));

পার্শ্ব নোট: পরবর্তী উদাহরণগুলি জাভা The পর্যন্ত এর মতো সম্ভব ছিল না There সেখানে, ইন্টারফেসগুলি আপনার আচরণটি নির্দিষ্ট করার একমাত্র উপায় ছিল। যাইহোক, জাভা 8 ল্যামডা এক্সপ্রেশন চালু তাই C # এর উদাহরণ খুব সহজেই (জাভা কাজে রূপান্তরিত হতে পারে Func<int>হয়ে java.util.function.IntSupplierএবং =>হয়ে ->)।


4

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

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


2

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


2

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


1

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

ক্লাসের পদ্ধতিগুলিতে কী উপলব্ধ থাকতে হবে তার জন্য লোকেরা সাধারণত এটি "চুক্তি" হিসাবে বর্ণনা করে।

এটি একেবারে একটি নীলনকশা নয়, যেহেতু এটি বাস্তবায়নও নির্ধারণ করবে। একটি পূর্ণ শ্রেণীর সংজ্ঞাটিকে একটি নীলনকশা বলা যেতে পারে।


1

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

  • নিশ্চিত হয়ে নিন যে ইন্টারফেসের সমস্ত সদস্য উদ্ভূত শ্রেণিতে প্রয়োগ করা হয়েছে (এমনকি যদি এটি কেবল একটি ব্যতিক্রম ছুঁড়ে ফেলেছে)
  • কলার থেকে ক্লাস নিজেই বিমূর্ত করুন (ইন্টারফেসে একটি শ্রেণীর উদাহরণ ফেলুন, এবং প্রকৃত উদ্ভূত শ্রেণীর IS কী তা প্রয়োজন ছাড়াই এটির সাথে ইন্টারঅ্যাক্ট করুন)

আরও তথ্যের জন্য, এই দেখুন http://msdn.microsoft.com/en-us/library/ms173156.aspx


1

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

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

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


1

উপরে হিসাবে, "চুক্তি" এবং "প্রোটোকল" প্রতিশব্দ যথাযথ।

ইন্টারফেসটি এমন কোনও পদ্ধতি এবং বৈশিষ্ট্য নিয়ে গঠিত যা আপনি শ্রেণীর দ্বারা প্রকাশের প্রত্যাশা করতে পারেন।

সুতরাং যদি কোনও শ্রেণি ইন্টারফেসটি Cheetos Bagপ্রয়োগ করে তবে Chip Bagআপনার Cheetos Bagঅন্যের মতো ঠিক আচরণ করার আশা করা উচিত Chip Bag। (এটি .attemptToOpenWithoutSpillingEverywhere()পদ্ধতিটি প্রকাশ করা ইত্যাদি)


1

প্রচলিত সংজ্ঞা - একটি ইন্টারফেস হ'ল একটি চুক্তি যা সেই পদ্ধতিগুলি নির্দিষ্ট করে যা শ্রেণি দ্বারা এটি প্রয়োগ করা প্রয়োজন।

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

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

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

http://www.quora.com/Why-does-Java-allow-static-final-variables-in-interfaces-when-they-are-only-intended-to-be-contracts


0

একটি সীমানা যেখানে দুটি সিস্টেম যোগাযোগ করে।

ইন্টারফেসগুলি হ'ল কয়েকটি ওও ভাষা কীভাবে অ্যাডহক পলিমারফিজম অর্জন করে । অ্যাডহক পলিমারফিজম হ'ল বিভিন্ন ধরণের একই নামের সাথে ক্রিয়াকলাপ।


0

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

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