একটি ইন্টারফেস এবং বিমূর্ত শ্রেণীর মধ্যে পার্থক্য কী?


1753

একটি ইন্টারফেস এবং বিমূর্ত শ্রেণীর মধ্যে পার্থক্যটি ঠিক কী?


96
এটি একটি অত্যন্ত সাধারণ সাক্ষাত্কার প্রশ্ন is এটি বিস্ময়কর যেহেতু একটি বিমূর্ত শ্রেণি অন্যান্য জিনিসের তুলনায় সমাধানগুলিতে খুব কমই ব্যবহৃত হয়। আপনার প্রশ্ন আমাকে সাফরাজকে সাহায্য করেছে।
কাত্তো

5
এই প্রশ্নের এছাড়াও সাহায্যের ইন্টারফেসগুলি ধারণা বুঝতে পারে stackoverflow.com/q/8531292/1055241
gprathour

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

2
সি ++ এর আগের দিনটিতে একটি ইন্টারফেস হল একটি শুদ্ধ বিমূর্ত বেস শ্রেণীর সমস্ত পদ্ধতি বাস্তবায়নের সাথে = 0. । আমি মনে করি ভিএমটি-র কম ইন্ডিয়ারেশন রয়েছে যখন একাধিক উত্তরাধিকার কেবল বিশুদ্ধ বিমূর্ত ঘাঁটি ব্যবহার করে তবে আমি মনে করি না যে তারা আর কীভাবে দেখায়, অনেক দীর্ঘ ছিল।
জিম

উত্তর:


2255

ইন্টারফেস

একটি ইন্টারফেস একটি চুক্তি : ইন্টারফেস লেখার ব্যক্তি বলে, " আরে, আমি সেভাবে দেখায় জিনিসগুলি গ্রহণ করি ", এবং ইন্টারফেসটি ব্যবহার করা ব্যক্তি বলে " ঠিক আছে, আমি যে ক্লাসটি লিখি সেভাবে দেখায় "।

একটি ইন্টারফেস একটি খালি শেল হয় । কেবলমাত্র পদ্ধতিগুলির স্বাক্ষর রয়েছে, যা সূচিত করে যে পদ্ধতিগুলির কোনও দেহ নেই। ইন্টারফেস কিছুই করতে পারে না। এটি কেবল একটি নিদর্শন

উদাহরণস্বরূপ (সিউডো কোড):

// I say all motor vehicles should look like this:
interface MotorVehicle
{
    void run();

    int getFuel();
}

// My team mate complies and writes vehicle looking that way
class Car implements MotorVehicle
{

    int fuel;

    void run()
    {
        print("Wrroooooooom");
    }


    int getFuel()
    {
        return this.fuel;
    }
}

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


বিমূর্ত ক্লাস

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

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

উদাহরণ স্বরূপ:

// I say all motor vehicles should look like this:
abstract class MotorVehicle
{

    int fuel;

    // They ALL have fuel, so lets implement this for everybody.
    int getFuel()
    {
         return this.fuel;
    }

    // That can be very different, force them to provide their
    // own implementation.
    abstract void run();
}

// My teammate complies and writes vehicle looking that way
class Car extends MotorVehicle
{
    void run()
    {
        print("Wrroooooooom");
    }
}

বাস্তবায়ন

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

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

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

প্রোগ্রামিংয়ের সাথে যথারীতি, অন্য ভাষায় তত্ত্ব, অনুশীলন এবং অনুশীলন রয়েছে :-)


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

187
আমি মনে করি না যে সিপিইউ খরচ হ'ল ইন্টারফেসের হাইলাইট-যোগ্য পয়েন্ট।
ড্যান লাগ

5
@ ই-সন্তুষ্ট আপনি কি দয়া করে সিপিইউ ব্যবহারের বিষয়ে আপনার বক্তব্যটি ব্যাখ্যা করতে পারেন? বিমূর্ত শ্রেণি শ্রেণি হওয়া কেন সিপিইউ ব্যবহার বাড়ায়? আপনি এখানে কী ধরণের অনুসন্ধানের কথা উল্লেখ করছেন?
গিফিক

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

23
আমি মনে করি মাঝে তুলনা interfaceএবং classথেকে Head First Javaপ্রাণবন্ত যেA class defines who you are, and an interface tells what roles you could play
LittleLittleQ

872

বিমূর্ত শ্রেণি এবং একটি ইন্টারফেসের মধ্যে মূল প্রযুক্তিগত পার্থক্যগুলি হ'ল :

  • অ্যাবস্ট্রাক্ট ক্লাসে ধ্রুবক, সদস্য, মেথড স্টাব (দেহ ব্যতীত পদ্ধতি) এবং সংজ্ঞায়িত পদ্ধতি থাকতে পারে , তবে ইন্টারফেসে কেবল ধ্রুবক এবং পদ্ধতি স্টাব থাকতে পারে

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

  • বিমূর্ত শ্রেণীর উত্তরাধিকার সূত্রে, একটি কংক্রিট শিশু শ্রেণিকে অবশ্যই বিমূর্ত পদ্ধতিগুলি সংজ্ঞায়িত করতে হবে , যেখানে একটি বিমূর্ত শ্রেণি আরেকটি বিমূর্ত শ্রেণি প্রসারিত করতে পারে এবং পিতাম শ্রেণীর বিমূর্ত পদ্ধতিগুলি সংজ্ঞায়িত করতে হবে না।

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

  • একটি শিশু শ্রেণি কেবলমাত্র একটি একক শ্রেণি (বিমূর্ত বা কংক্রিট) প্রসারিত করতে পারে, যেখানে কোনও ইন্টারফেস প্রসারিত করতে পারে বা কোনও শ্রেণি একাধিক অন্যান্য ইন্টারফেস প্রয়োগ করতে পারে ।

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


123
আমি মনে করি এটি সেরা উত্তর কারণ এটি সমস্ত মূল পার্থক্য তুলে ধরে। একটি উদাহরণ সত্যই প্রয়োজন হয় না।
জোশুয়া কে

4
এবং সাধারনত ক্লাসগুলির সাহায্যে আপনি এটি থেকে কোনও অবজেক্ট ইনস্ট্যান্ট করতে পারেন বিমূর্ত ক্লাসগুলির মতো নয় যা CANNOTতাত্ক্ষণিকভাবে করা হয়।
এসএএসএম

আমি ভেবেছি এমন একটি শ্রেণি যা ইন্টারফেসটি কার্যকর করে ইন্টারফেসের সমস্ত পদ্ধতি নির্ধারণ করতে হবে?
জিয়াজি ব্যবহারকারী

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

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

141

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

এখানে চিত্র বর্ণনা লিখুন থেকে নেওয়া:

http://www.dotnetbull.com/2011/11/difference-between-abstract-class-and.html

http://www.dotnetbull.com/2011/11/ কি- is- abstract- class- in-c- net.html http://www.dotnetbull.com/2011/11/ কি- is- interface- in -c-net.html


17
আপনার বলতে হবে এটি কোন ভাষার ক্ষেত্রে প্রযোজ্য ("বিমূর্ত শ্রেণি একাধিক উত্তরাধিকারকে সমর্থন করে না" সার্বজনীন সত্য হতে অনেক দূরে)
বেন ভয়েগট

শেষ তুলনা টেবিল অনুযায়ী বিভ্রান্তিকর! ইন্টারফেসের পদ্ধতিগুলি স্থির থাকতে পারে না তবে পরিবর্তনগুলি স্থির চূড়ান্ত হয় বিমূর্ত শ্রেণিতে প্রয়োগিত পদ্ধতিগুলি
অচল

8
ইন্টারফেসের সদস্য অবশ্যই স্থির চূড়ান্ত হতে হবে। শেষ বক্তব্য ভুল।
জাওয়াদ জেব

আমি মনে করি এই উত্তরের "কার্যকারিতা" এর অর্থ "বাস্তবায়ন"। নিশ্চিত নয় যে "আচরণ" এর অর্থ - সম্ভবত "স্বাক্ষর"?
লার্শ

2
এখানে লক্ষ্যযুক্ত প্রোগ্রামিং ভাষাটি কী? সি শার্প?
পিটার মর্টেনসেন

80

এখানে একটি ব্যাখ্যা পাওয়া যাবে: http://www.developer.com/lang/php/article.php/3604111/PHP-5-OOP-Interfaces-Abstract-Class-and-the-Aadapter-Pattern.htm

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

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

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


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

1
সত্য, পিএইচপি-র জন্য এটিই আসল সেরা আনসার। তবে সাধারণ স্নিপেটের চেয়ে টেক্সট ব্লবটি পাওয়া শক্ত।
ই-সন্তুষ্ট

আপনার প্রদত্ত সংজ্ঞাগুলি থেকে তারা কেবল একটি বিবরণ ব্যতীত একই দেখাচ্ছে: এবং ইন্টারফেসটি 100% বিমূর্ত, অন্যদিকে একটি বিমূর্ত শ্রেণি আংশিক বিমূর্ত এবং কিছু পদ্ধতি বাস্তবায়ন থাকতে পারে (সম্ভবত সমস্ত পদ্ধতির প্রয়োগ থাকতে পারে?)।
jww

41

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

সহজ কথায়, আমি বলতে চাই:

ইন্টারফেস: একাধিক সম্পর্কযুক্ত অবজেক্টের দ্বারা একটি চুক্তি কার্যকর করা

বিমূর্ত শ্রেণি: একাধিক সম্পর্কিত বস্তুর মধ্যে একই বা ভিন্ন আচরণ বাস্তবায়নের জন্য

ওরাকল ডকুমেন্টেশন থেকে

বিমূর্ত ক্লাস ব্যবহার বিবেচনা করুন যদি:

  1. আপনি কয়েকটি ঘনিষ্ঠভাবে সম্পর্কিত ক্লাসের মধ্যে কোড ভাগ করতে চান।
  2. আপনি আশা করেন যে আপনার বিমূর্ত শ্রেণীর প্রসারিত ক্লাসগুলির অনেকগুলি সাধারণ পদ্ধতি বা ক্ষেত্র রয়েছে, বা পাবলিক ব্যতীত অন্য কোনও অ্যাক্সেস মডিফায়ার প্রয়োজন (যেমন সুরক্ষিত এবং ব্যক্তিগত)।
  3. আপনি অ স্থিতিশীল বা চূড়ান্ত নয় এমন ক্ষেত্রগুলি ঘোষণা করতে চান।

ইন্টারফেস ব্যবহার বিবেচনা করুন যদি:

  1. আপনি আশা করেন যে সম্পর্কযুক্ত ক্লাসগুলি আপনার ইন্টারফেসটি কার্যকর করবে। উদাহরণস্বরূপ, অনেকগুলি সম্পর্কযুক্ত অবজেক্ট Serializableইন্টারফেস প্রয়োগ করতে পারে ।
  2. আপনি কোনও নির্দিষ্ট ডেটা ধরণের আচরণ নির্দিষ্ট করতে চান তবে কে তার আচরণটি প্রয়োগ করে তা নিয়ে উদ্বিগ্ন নন।
  3. আপনি একাধিক প্রকারের উত্তরাধিকারের সুযোগ নিতে চান।

বিমূর্ত শ্রেণি প্রতিষ্ঠিত হয় "একটি" কংক্রিট শ্রেণীর সাথে সম্পর্ক relation ইন্টারফেস ক্লাস জন্য "একটি" ক্ষমতা প্রদান করে।

আপনি যদি Javaপ্রোগ্রামিং ল্যাঙ্গুয়েজ হিসাবে সন্ধান করেন তবে এখানে আরও কয়েকটি আপডেট রয়েছে:

জাভা 8 কোনও পদ্ধতি বৈশিষ্ট্য সরবরাহ করে শ্রেণি interfaceএবং abstractশ্রেণীর মধ্যে ব্যবধান কিছুটা কমিয়েছে defaultএকটি ইন্টারফেসের কোনও পদ্ধতির জন্য বাস্তবায়ন নেই এখন আর বৈধ নয়।

আরও তথ্যের জন্য এই ডকুমেন্টেশন পৃষ্ঠা দেখুন।

কোড উদাহরণগুলি আরও ভালভাবে বোঝার জন্য এই এসই প্রশ্নটি দেখুন।

একটি ইন্টারফেস এবং একটি বিমূর্ত শ্রেণীর মধ্যে পার্থক্যটি আমি কীভাবে ব্যাখ্যা করব?


38

কিছু গুরুত্বপূর্ণ পার্থক্য:

একটি টেবিল আকারে:

পার্থক্য

জাভাপেপারস থেকে জো দ্বারা বর্ণিত হিসাবে :

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

2. জাভা ইন্টারফেসে ঘোষিত ভেরিয়েবলগুলি ডিফল্টরূপে চূড়ান্ত হয়। একটি বিমূর্ত শ্রেণিতে অ-চূড়ান্ত ভেরিয়েবল থাকতে পারে।

3. একটি জাভা ইন্টারফেসের সদস্যগুলি ডিফল্টরূপে সর্বজনীন। একটি জাভা বিমূর্ত শ্রেণিতে শ্রেণীর সদস্যদের ব্যক্তিগত স্বাদ যেমন ব্যক্তিগত, সুরক্ষিত ইত্যাদি হতে পারে have

৪. জাভা ইন্টারফেস প্রয়োগ করতে হবে মূল শব্দ "প্রয়োগসমূহ" ব্যবহার করে; একটি জাভা বিমূর্ত শ্রেণীর শব্দটি "প্রসারিত" ব্যবহার করে প্রসারিত করা উচিত।

৫.আপনার ইন্টারফেসটি কেবল অন্য জাভা ইন্টারফেসকে প্রসারিত করতে পারে, একটি বিমূর্ত শ্রেণি অন্য জাভা শ্রেণি প্রসারিত করতে পারে এবং একাধিক জাভা ইন্টারফেস প্রয়োগ করতে পারে।

A.এ জাভা ক্লাস একাধিক ইন্টারফেস বাস্তবায়ন করতে পারে তবে এটি কেবল একটি বিমূর্ত শ্রেণিকে প্রসারিত করতে পারে।

7. ইন্টারফেস একেবারে বিমূর্ত এবং তাত্ক্ষণিকভাবে স্থাপন করা যায় না; একটি জাভা বিমূর্ত শ্রেণিও তাত্ক্ষণিকভাবে চালু করা যায় না, তবে একটি প্রধান () উপস্থিত থাকলে তাকে আহ্বান করা যেতে পারে।

৮. জাভা বিমূর্ত শ্রেণীর সাথে তুলনা করার জন্য, জাভা ইন্টারফেসগুলি ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে সেটিকে বাড়তি দিকনির্দেশের প্রয়োজন হয়।


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

দয়া করে সি ++ এর জন্যও উল্লেখ করুন .. যদিও সি ++ তে কোনও কীওয়ার্ড "ইন্টারফেস" নেই, তবে এটি সাধারণত জিজ্ঞাসিত Qn Regd C ++ তেও রয়েছে।
cbinder

@ কেবাইন্ডার: সি ++ তে কোনও কীওয়ার্ড 'ইন্টারফেস' নেই। গ পার্থক্য ++ পড়ুন দয়া 1. tutorialspoint.com/cplusplus/cpp_interfaces.htm 2. tutorialspoint.com/cplusplus/cpp_interfaces.htm
softmage99

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

2
জাভা 8 এর সাথে পার্থক্যগুলি এখন কম are আপডেট হওয়া পার্থক্যগুলি এখানে দেখুন: জার্নালদেভ.com
পঙ্কজ

31

মূল কথাটি হ'ল:

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

আপনাকে ধন্যবাদ এখন আমরা একটি ভাল উচ্চ স্তরের প্রতিক্রিয়া পেয়ে কোথাও পাচ্ছি। আরও বোঝাপড়া ভিত্তিক প্রতিক্রিয়া খুঁজতে আপনাকে যে মন্তব্যগুলিতে যেতে হবে তা কতটা মজাদার।
অ্যান্ড্রু

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

26

যখন আপনি কোনও উত্তরাধিকারের শ্রেণিবিন্যাসে পলিমারফিক আচরণ সরবরাহ করতে চান, তখন বিমূর্ত ক্লাস ব্যবহার করুন।

যখন আপনি ক্লাসগুলি সম্পূর্ণরূপে সম্পর্কিত নয় এমন পলিমারফিক আচরণ চান, একটি ইন্টারফেস ব্যবহার করুন।


24

আমি 300 তলা একটি বিল্ডিং নির্মাণ করছি

বিল্ডিংয়ের ব্লুপ্রিন্ট ইন্টারফেস

  • উদাহরণস্বরূপ, সার্লেট (আমি)

বিল্ডিং 200 তলা পর্যন্ত নির্মিত - আংশিক সমাপ্ত --- বিমূর্ত

  • আংশিক বাস্তবায়ন, উদাহরণস্বরূপ, জেনেরিক এবং এইচটিটিপি সার্লেট

বিল্ডিং নির্মাণ সমাপ্ত - কংক্রিট

  • সম্পূর্ণ বাস্তবায়ন, উদাহরণস্বরূপ, নিজস্ব সার্লেট

ইন্টারফেস

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

বিমূর্ত

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

দুর্গা জবস ওয়েবসাইট থেকে নেওয়া


একটি বিমূর্ত শ্রেণীর একটি
নির্মাতা

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

18

এই প্রশ্নে আবার কাজ করা যাক:

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

আমি প্রধান পার্থক্যগুলি উল্লেখ করব এবং বাকীগুলি ইতিমধ্যে ব্যাখ্যা করা হয়েছে:

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

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


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

"গণিতের রূপক অকেজো", আপনি কেন এমন ভাবেন?
ধনঞ্জয়

12

এটি আসলে বেশ সহজ।

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

সুতরাং একটি ইন্টারফেস কেবল "ঘোষণা" করতে পারে এবং শ্রেণীর যে আচরণটি আপনি চান তা সংজ্ঞায়িত করতে পারে না।

একটি বিমূর্ত শ্রেণি আপনাকে ক্লাসের যে আচরণ করতে চায় তা নির্ধারণ করার পাশাপাশি (বিমূর্ত পদ্ধতি ব্যবহার করে) উভয়কে সংজ্ঞায়িত করতে (সম্পূর্ণ পদ্ধতি প্রয়োগকরণ ব্যবহার করে) করতে দেয়।

এবং একটি নিয়মিত ক্লাস কেবলমাত্র আপনাকে ক্লাসের যে আচরণ / ক্রিয়াকলাপ করতে চায় তা নির্ধারণ করতে, ঘোষণা করার জন্য নয়।

ত্য জ্যজ্জকিজ,

জাভাতে, আপনি একাধিক ইন্টারফেস প্রয়োগ করতে পারেন তবে আপনি কেবল একটি (বিমূর্ত শ্রেণি বা শ্রেণি) প্রসারিত করতে পারেন ...

এর অর্থ সংজ্ঞায়িত আচরণের উত্তরাধিকার কেবলমাত্র প্রতি ক্লাসে একজনকে অনুমতি দেওয়ার মধ্যে সীমাবদ্ধ ... অর্থাৎ আপনি যদি ক্লাস এ, বি এবং সি এর কাছ থেকে নেওয়া এমন একটি ক্লাস চান তবে আপনার নিম্নলিখিতটি করা দরকার: ক্লাস এ বি বি বর্ধিত করে, ক্লাস সি প্রসারিত করে .. একাধিক উত্তরাধিকার পাওয়ার জন্য এটি প্রায় এক রাউন্ড ...

অন্যদিকে ইন্টারফেসগুলি, আপনি কেবল পারেন: ইন্টারফেস সি প্রয়োগ করে এ, বি

সুতরাং কার্যকরভাবে জাভা একাধিক উত্তরাধিকারকে কেবলমাত্র "ঘোষিত আচরণ" অর্থাৎ ইন্টারফেসগুলিতে এবং সংজ্ঞায়িত আচরণের সাথে একক উত্তরাধিকারকে সমর্থন করে .. যদি না আপনি আমার বর্ণনা মতো রাস্তা না করেন ...

আশা করি তা বোধগম্য হয়।


11

ইন্টারফেস বনাম অ্যাবস্ট্রাক্ট ক্লাসের তুলনা ভুল। পরিবর্তে অন্য দুটি তুলনা থাকতে হবে: 1) ইন্টারফেস বনাম শ্রেণি এবং 2) বিমূর্ত বনাম চূড়ান্ত শ্রেণি

ইন্টারফেস বনাম ক্লাস

ইন্টারফেস দুটি বস্তুর মধ্যে একটি চুক্তি। উদাহরণস্বরূপ, আমি একজন পোস্টম্যান এবং আপনি সরবরাহ করার প্যাকেজ। আমি আশা করি আপনি আপনার বিতরণ ঠিকানা জানতে হবে। যখন কেউ আমাকে একটি প্যাকেজ দেয়, তখন এটির সরবরাহের ঠিকানাটি জানতে হবে:

interface Package {
  String address();
}

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

class Box implements Package, Property {
  @Override
  String address() {
    return "5th Street, New York, NY";
  }
  @Override
  Human owner() {
    // this method is part of another contract
  }
}

বিমূর্ত বনাম ফাইনাল

বিমূর্ত শ্রেণি অসম্পূর্ণ বস্তুর একটি গ্রুপ। এগুলি ব্যবহার করা যাবে না, কারণ তারা কিছু অংশ মিস করে। উদাহরণস্বরূপ, আমি একটি বিমূর্ত জিপিএস-সচেতন বক্স - আমি মানচিত্রে আমার অবস্থান কীভাবে চেক করব তা আমি জানি:

abstract class GpsBox implements Package {
  @Override
  public abstract String address();
  protected Coordinates whereAmI() {
    // connect to GPS and return my current position
  }
}

এই শ্রেণিটি, যদি অন্য শ্রেণীর দ্বারা উত্তরাধিকারসূত্রে প্রাপ্ত / প্রসারিত হয় তবে এটি খুব দরকারী। তবে নিজেই - এটি অকেজো, যেহেতু এটিতে বস্তু থাকতে পারে না। বিমূর্ত ক্লাসগুলি চূড়ান্ত শ্রেণির উপাদান তৈরি করতে পারে।

ফাইনাল ক্লাস সম্পূর্ণ অবজেক্টের একটি গ্রুপ, যা ব্যবহার করা যেতে পারে, তবে পরিবর্তন করা যায় না। তারা ঠিক কীভাবে কাজ করতে হবে এবং কী করতে হবে তা জানে। উদাহরণস্বরূপ, আমি একটি বাক্স যা সর্বদা এটির নির্মাণের সময় নির্দিষ্ট ঠিকানায় যায়:

final class DirectBox implements Package {
  private final String to;
  public DirectBox(String addr) {
    this.to = addr;
  }
  @Override
  public String address() {
    return this.to;
  }
}

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

আবার বিমূর্ত শ্রেণীর সাথে ইন্টারফেসের তুলনা করা সঠিক নয়।


9

সংক্ষেপে পার্থক্যগুলি নিম্নলিখিত:

ইন্টারফেস এবং বিমূর্ত শ্রেণীর মধ্যে সিন্ট্যাক্টিকাল পার্থক্য :

  1. পদ্ধতি এবং একটি বিমূর্ত শ্রেণীর সদস্যদের যে কোনও দৃশ্যমানতা থাকতে পারে। একটি ইন্টারফেসের সমস্ত পদ্ধতি অবশ্যই সর্বজনীন হতে হবে । // জাভা 9 থেকে আর সত্য হয় না
  2. একটি বিমূর্ত শ্রেণীর একটি কংক্রিট শিশু শ্রেণীর সমস্ত বিমূর্ত পদ্ধতি সংজ্ঞায়িত করতে হবে। একটি বিমূর্ত শিশু শ্রেণিতে বিমূর্ত পদ্ধতি থাকতে পারে। একটি ইন্টারফেস অন্য ইন্টারফেস প্রয়োজন ব্যাপ্ত পিতা বা মাতা ইন্টারফেস থেকে উত্তরাধিকারসূত্রে পদ্ধতি জন্য ডিফল্ট বাস্তবায়ন না প্রদান।
  3. একটি শিশু শ্রেণি কেবল একটি একক শ্রেণি বাড়িয়ে দিতে পারে। একটি ইন্টারফেস একাধিক ইন্টারফেস প্রসারিত করতে পারে। একটি শ্রেণি একাধিক ইন্টারফেস বাস্তবায়ন করতে পারে।
  4. একটি শিশু শ্রেণি একই বা কম সীমাবদ্ধ দৃশ্যমানতার সাথে বিমূর্ত পদ্ধতিগুলি সংজ্ঞায়িত করতে পারে, অন্যদিকে ইন্টারফেস প্রয়োগকারী শ্রেণিকে অবশ্যই সমস্ত ইন্টারফেসের পদ্ধতি জনসাধারণ হিসাবে সংজ্ঞায়িত করতে হবে।
  5. অ্যাবস্ট্রাক্ট ক্লাসে কনস্ট্রাক্টর থাকতে পারে তবে ইন্টারফেস নয় ।
  6. জাভা 9 এর ইন্টারফেসগুলিতে ব্যক্তিগত স্ট্যাটিক পদ্ধতি রয়েছে।

ইন্টারফেসে এখন:

public static- সমর্থিত
public abstract- সমর্থিত
public default- সমর্থিত
private static- সমর্থিত
private abstract- সংকলন ত্রুটি
private default- সংকলন ত্রুটি
private- সমর্থিত


8

পার্থক্যটি হ'ল এক ব্যক্তি একাধিক উত্তরাধিকারে অংশ নিতে পারে এবং অন্যটি পারে না।

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

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

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

দেখুন কেন জাভা ইন্টারফেসগুলিতে স্থির চূড়ান্ত পরিবর্তনশীলগুলিকে কেবল চুক্তি করার উদ্দেশ্যে তৈরি করার অনুমতি দেয়?


1
যদিও এটি একটি গুরুত্বপূর্ণ পার্থক্য, এটি কেবলমাত্র তফাত নয়।
গোবিন্দ পরমার

7

ইন্টারফেস: বাঁক (বাম দিকে ঘুরুন, ডান দিকে ঘুরুন)

বিমূর্ত শ্রেণি: চাকা

শ্রেণি: স্টিয়ারিং হুইল, চাকা থেকে প্রাপ্ত, ইন্টারফেস টার্নটি প্রকাশ করে

একটি হ'ল আচরণকে শ্রেণিবদ্ধ করার জন্য যা বিভিন্ন ধরণের জিনিস জুড়ে দেওয়া যেতে পারে, অন্যটি জিনিসগুলির একটি অ্যান্টোলজির মডেলিংয়ের জন্য।


6

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

নিম্নলিখিত উদাহরণগুলি এটি দেখায়।

জাভাতে বিমূর্ত শ্রেণি:

abstract class animals
{
    // They all love to eat. So let's implement them for everybody
    void eat()
    {
        System.out.println("Eating...");
    }
    // The make different sounds. They will provide their own implementation.
    abstract void sound();
}

class dog extends animals
{
    void sound()
    {
        System.out.println("Woof Woof");
    }
}

class cat extends animals
{
    void sound()
    {
        System.out.println("Meoww");
    }
}

জাভাতে ইন্টারফেসের একটি বাস্তবায়ন নিম্নলিখিত:

interface Shape
{
    void display();
    double area();
}

class Rectangle implements Shape 
{
    int length, width;
    Rectangle(int length, int width)
    {
        this.length = length;
        this.width = width;
    }
    @Override
    public void display() 
    {
        System.out.println("****\n* *\n* *\n****"); 
    }
    @Override
    public double area() 
    {
        return (double)(length*width);
    }
} 

class Circle implements Shape 
{
    double pi = 3.14;
    int radius;
    Circle(int radius)
    {
        this.radius = radius;
    }
    @Override
    public void display() 
    {
        System.out.println("O"); // :P
    }
    @Override
    public double area() 
    { 
        return (double)((pi*radius*radius)/2);
    }
}

সংক্ষেপে কয়েকটি গুরুত্বপূর্ণ মূল বিষয়:

  1. জাভা ইন্টারফেসে ঘোষিত ভেরিয়েবলগুলি ডিফল্টরূপে চূড়ান্ত হয়। বিমূর্ত শ্রেণিতে অ-চূড়ান্ত ভেরিয়েবল থাকতে পারে।

  2. জাভা ইন্টারফেসে ঘোষিত ভেরিয়েবলগুলি ডিফল্ট স্থিতিশীল। বিমূর্ত শ্রেণিতে অ স্থির ভেরিয়েবল থাকতে পারে।

  3. একটি জাভা ইন্টারফেসের সদস্যরা ডিফল্টরূপে সর্বজনীন। একটি জাভা বিমূর্ত শ্রেণিতে শ্রেণীর সদস্যদের ব্যক্তিগত স্বাদ যেমন ব্যক্তিগত, সুরক্ষিত ইত্যাদি হতে পারে have


4

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

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

সারসংক্ষেপ

  1. একটি ইন্টারফেস এমন একটি চুক্তি সংজ্ঞা দেয় যা কিছু বাস্তবায়ন আপনার জন্য পূরণ করবে

  2. একটি বিমূর্ত শ্রেণি একটি ডিফল্ট আচরণ সরবরাহ করে যা আপনার প্রয়োগটি পুনরায় ব্যবহার করতে পারে।

বিকল্প সারসংক্ষেপ

  1. একটি ইন্টারফেস হ'ল পাবলিক এপিআই সংজ্ঞায়িত করার জন্য
  2. একটি বিমূর্ত শ্রেণি অভ্যন্তরীণ ব্যবহারের জন্য, এবং এসপিআইগুলি সংজ্ঞায়িত করার জন্য

বাস্তবায়ন বিবরণ গোপন করার গুরুত্বের উপর

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

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

ইন্টারফেস এবং কংক্রিট শ্রেণীর মাঝে একটি বিমূর্ত শ্রেণি মাঝখানে থাকে। এটি বাস্তবায়নগুলি সাধারণ বা বিরক্তিকর কোডটি ভাগ করে নেওয়ার ক্ষেত্রে সহায়তা করার কথা রয়েছে। উদাহরণস্বরূপ, আকারের উপর ভিত্তি AbstractCollectionকরে বেসিক বাস্তবায়নগুলি isEmpty0 হয়, পুনরাবৃত্তি হিসাবে এবং পুনরায় হিসাবে containsতুলনা করা, ইত্যাদি on এটি বাস্তবায়নগুলি তাদের মধ্যে পার্থক্যপূর্ণ যে গুরুত্বপূর্ণ অংশগুলিতে ফোকাস করতে দেয়: কীভাবে আসলে ডেটা সংরক্ষণ এবং পুনরুদ্ধার করতে হয় toaddAlladd

এসপিআই বনাম এপিআই

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

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

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

কোনও এপিআই-তে পদ্ধতি যুক্ত করা সহজ, এপিআই-র সমস্ত বিদ্যমান ব্যবহারকারী এখনও সংকলন করবে। এসপিআইতে পদ্ধতি যুক্ত করা শক্ত, যেহেতু প্রতিটি পরিষেবা সরবরাহকারীকে (কংক্রিট বাস্তবায়ন) নতুন পদ্ধতিগুলি প্রয়োগ করতে হবে। ইন্টারফেসগুলি যদি এসপিআই সংজ্ঞায়িত করতে ব্যবহৃত হয়, যখনই এসপিআই চুক্তি পরিবর্তিত হয় কোনও সরবরাহকারীকে একটি নতুন সংস্করণ প্রকাশ করতে হবে। যদি এর পরিবর্তে অ্যাবস্ট্রাক্ট ক্লাস ব্যবহার করা হয় তবে নতুন পদ্ধতিগুলি হয় বিদ্যমান বিমূর্ত পদ্ধতিগুলির ক্ষেত্রে বা খালি throw not implemented exceptionস্টাব হিসাবে সংজ্ঞায়িত করা যেতে পারে , যা কমপক্ষে কোনও পরিষেবা বাস্তবায়নের একটি পুরানো সংস্করণকে এখনও সংকলন ও চালনার অনুমতি দেয়।

জাভা 8 এবং ডিফল্ট পদ্ধতিতে একটি নোট

যদিও জাভা 8 ইন্টারফেসের জন্য ডিফল্ট পদ্ধতি প্রবর্তন করেছে, যা ইন্টারফেস এবং বিমূর্ত শ্রেণীর মধ্যে লাইনকে আরও ঝাপসা করে তোলে, এটি বাস্তবায়ন কোডটি পুনরায় ব্যবহার করতে পারে না, তবে এটি একটি API এবং এসপিআই হিসাবে পরিবেশনকারী ইন্টারফেসগুলিকে পরিবর্তন করা সহজতর করে তোলে (বা বিমূর্ত শ্রেণীর পরিবর্তে এসপিআই সংজ্ঞায়নের জন্য ভুলভাবে ব্যবহৃত হয়)।

কোনটি ব্যবহার করবেন?

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

একটি তাত্পর্য: অন্য উপায় প্রায়শই প্রায়শই ভুলভাবে করা হয়: কোনও জিনিস ব্যবহার করার সময় , সর্বদা আপনার প্রয়োজন এমন সর্বাধিক জেনেরিক শ্রেণি / ইন্টারফেসটি ব্যবহার করার চেষ্টা করুন। অন্য কথায়, আপনার ভেরিয়েবলগুলি হিসাবে ঘোষণা করবেন না ArrayList theList = new ArrayList(), যদি না আপনি এটির অ্যারের তালিকার উপর নির্ভরযোগ্যভাবে নির্ভর করেন এবং অন্য কোনও ধরণের তালিকা এটি আপনার জন্য কাটবে না। List theList = new ArrayListপরিবর্তে ব্যবহার করুন, বা এমনকি এটি Collection theCollection = new ArrayListযদি এটি একটি তালিকা এবং অন্য কোনও ধরণের সংগ্রহের পক্ষে আসলে কিছু আসে যায় না তা এমনকি ।


4

আসল প্রশ্নের উত্তরটি সত্যই নয়, তবে একবারের মধ্যে পার্থক্যের উত্তর পাওয়া গেলে আপনি কখন ব্যবহার করতে পারবেন প্রতিটি দ্বিধা: ইন্টারফেস বা বিমূর্ত শ্রেণি কখন ব্যবহার করবেন? দু'জন কখন ব্যবহার করবেন?

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


3

উত্তরাধিকার দুটি উদ্দেশ্যে ব্যবহৃত হয়:

  • কোনও বস্তুকে প্যারেন্ট-টাইপ ডেটা সদস্য এবং পদ্ধতি বাস্তবায়নকে তার নিজের হিসাবে বিবেচনা করার অনুমতি দেওয়ার জন্য।

  • কোড দ্বারা এক ধরণের অবজেক্টের রেফারেন্সকে অনুমতি দেওয়ার জন্য যা সুপার টাইপ অবজেক্টের রেফারেন্স আশা করে।

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

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

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


3

গুরুত্বপূর্ণ দিক:

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

সুবিধা:

  • এটি এক ধরণের চুক্তি যা সমস্ত সাবক্লাসকে একই শ্রেণিবদ্ধ বা মানক চালিয়ে যেতে বাধ্য করে forces
  • যদি বিভিন্ন বাস্তবায়ন একই রকম হয় এবং সাধারণ ব্যবহার বা স্থিতি ব্যবহার করে তবে বিমূর্ত শ্রেণিটি ব্যবহার করা ভাল।
  • যদি আমরা একটি বিমূর্ত শ্রেণিতে একটি নতুন পদ্ধতি যুক্ত করি তবে আমাদের কাছে ডিফল্ট বাস্তবায়ন সরবরাহ করার বিকল্প রয়েছে এবং সুতরাং বিদ্যমান সমস্ত কোড সঠিকভাবে কাজ করতে পারে।
  • এটি ইন্টারফেসের চেয়ে দ্রুত কার্যকরকরণের অনুমতি দেয় (
  • এটি আঁটসাঁট এবং আলগাভাবে মিলনের জন্য ব্যবহার করতে পারেন।

এখানে বিশদ সন্ধান করুন ... http://praDPatkari.wordpress.com/2014/11/20/interface-and-abstract-class-in-c-oops/


3

এটির সংক্ষিপ্ততমতম উপায়টি interfaceহ'ল:

  1. সম্পূর্ণ বিমূর্ত, পদ্ধতি defaultএবং staticপদ্ধতি বাদে ; যদিও এর পদ্ধতি defaultএবং staticপদ্ধতির সংজ্ঞা (পদ্ধতি স্বাক্ষর + বাস্তবায়ন) রয়েছে তবে এটি অন্যান্য পদ্ধতির জন্য কেবল ঘোষণাপত্র (পদ্ধতি স্বাক্ষর) রয়েছে।
  2. ক্লাসের তুলনায় ল্যাক্সার নিয়মের সাপেক্ষে (একটি শ্রেণি একাধিক interfaceগুলি প্রয়োগ করতে পারে , এবং একটি interfaceএকাধিক interfaceগুলি থেকে উত্তরাধিকারী হতে পারে )। সমস্ত ভেরিয়েবল সুস্পষ্টভাবে ধ্রুবক হিসাবে নির্ধারিত হোক public static finalনা কেন। সমস্ত সদস্য নিখুঁতভাবে publicনির্দিষ্ট, না যেমন নির্দিষ্ট করা হয় whether
  3. সাধারণত গ্যারান্টি হিসাবে ব্যবহৃত হয় যে বাস্তবায়নকারী শ্রেণীর নির্দিষ্ট বৈশিষ্ট্য থাকবে এবং / অথবা একই ইন্টারফেস প্রয়োগকারী অন্য কোনও শ্রেণীর সাথে সামঞ্জস্যপূর্ণ।

এদিকে, একটি abstractশ্রেণি হ'ল:

  1. এক বা একাধিক abstractপদ্ধতির প্রবণতা সহ পুরোপুরি বিমূর্ত থেকে পুরোপুরি বাস্তবায়িত হওয়া যে কোনও জায়গায় । ঘোষণা হিসাবে চিহ্নিত হিসাবে ঘোষণা এবং সংজ্ঞা উভয়ই থাকতে পারে abstract
  2. একটি পূর্ণাঙ্গ শ্রেণি, এবং অন্যান্য শ্রেণি পরিচালনা করে এমন নিয়মের অধীন (কেবলমাত্র একটি শ্রেণীর উত্তরাধিকারী হতে পারে) এই শর্তে যে এটি তাত্ক্ষণিকভাবে চালু করা যায় না (কারণ এটি সম্পূর্ণরূপে বাস্তবায়িত হওয়ার কোনও গ্যারান্টি নেই)। অ-ধ্রুব সদস্য ভেরিয়েবল থাকতে পারে। সদস্য প্রবেশাধিকার নিয়ন্ত্রণ বাস্তবায়ন পারেন হিসাবে সদস্যদের সীমাবদ্ধ protected, privateঅথবা ব্যক্তিগত প্যাকেজ (অনির্দিষ্ট)।
  3. সাধারণত একাধিক সাবক্লাস দ্বারা ভাগ করা যায় বাস্তবায়নের পরিমাণ সরবরাহ করতে বা প্রোগ্রামার সরবরাহ করতে সক্ষম হিসাবে বাস্তবায়নের পরিমাণ সরবরাহ করতে সাধারণত ব্যবহৃত হয়।

অথবা, যদি আমরা এটি একটি বাক্যে সমস্ত সিদ্ধ করতে চাই: একটি interfaceবাস্তবায়নকারী শ্রেণীর যা থাকে , তবে একটি abstractশ্রেণি যা সাবক্লাস হয়


3

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


3

একটি সরল কিন্তু সুস্পষ্ট উত্তর দেওয়ার জন্য, এটি প্রসঙ্গটি সেট করতে সহায়তা করে: আপনি যখন সম্পূর্ণ বাস্তবায়ন সরবরাহ করতে চান না তখন আপনি উভয়ই ব্যবহার করেন।

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


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

যেমনটি আমি বলেছিলাম পার্থক্য কী তা শেখার পর্যায়ে কারও কাছে এটি একটি "সাধারণ তবে স্পষ্ট উত্তর" বোঝানো হয়েছিল। এর মতো কারও পক্ষে এই ধরণের ব্যতিক্রম সম্পর্কে জানার কোনও লাভ নেই, এটি কেবল খুব বিভ্রান্তিকর হবে।
ব্যবহারকারী 3775501

3

বাস্তব বাস্তবায়নের পক্ষে বিমূর্ত শ্রেণি এবং ইন্টারফেসের মধ্যে পার্থক্য।

ইন্টারফেস : এটি একটি কীওয়ার্ড এবং এটি কোনও টেমপ্লেটের টেমপ্লেট বা নীল প্রিন্ট সংজ্ঞায়িত করতে ব্যবহৃত হয় এবং এটি সমস্ত উপ শ্রেণিগুলিকে একই প্রোটোটাইপ অনুসরণ করতে বাধ্য করে, বাস্তবায়ন হিসাবে, সমস্ত উপ শ্রেণিগুলি কার্যকারিতা বাস্তবায়নের জন্য নিখরচায় এটি প্রয়োজন

অন্য কিছু ব্যবহারের ক্ষেত্রে যেখানে আমাদের ইন্টারফেস ব্যবহার করা উচিত।

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

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

বিমূর্ত শ্রেণির উদাহরণ:

 public abstract class DesireCar
  {

 //It is an abstract method that defines the prototype.
     public abstract void Color();

  // It is a default implementation of a Wheel method as all the desire cars have the same no. of wheels.   
 // and hence no need to define this in all the sub classes in this way it saves the code duplicasy     

  public void Wheel() {          

               Console.WriteLine("Car has four wheel");
                }
           }


    **Here is the sub classes:**

     public class DesireCar1 : DesireCar
        {
            public override void Color()
            {
                Console.WriteLine("This is a red color Desire car");
            }
        }

        public class DesireCar2 : DesireCar
        {
            public override void Color()
            {
                Console.WriteLine("This is a red white Desire car");
            }
        }

ইন্টারফেস উদাহরণ:

  public interface IShape
        {
          // Defines the prototype(template) 
            void Draw();
        }


  // All the sub classes follow the same template but implementation can be different.

    public class Circle : IShape
    {
        public void Draw()
        {
            Console.WriteLine("This is a Circle");
        }
    }

    public class Rectangle : IShape
    {
        public void Draw()
        {
            Console.WriteLine("This is a Rectangle");
        }
    }

3

আপনি ইন্টারফেস এবং বিমূর্ত শ্রেণীর মধ্যে স্পষ্ট পার্থক্য খুঁজে পেতে পারেন

ইন্টারফেস

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

বিমূর্ত শ্রেণি

  • বিমূর্ত শ্রেণিতে বিমূর্ত এবং অ-বিমূর্ত পদ্ধতি রয়েছে।

  • বিমূর্ত শ্রেণীর উত্তরাধিকার সূত্রে যখন ব্যবহারকারীরা সমস্ত পদ্ধতি প্রয়োগ করতে বাধ্য করেন না।

  • আদিম এবং অ-আদিম সহ সব ধরণের ভেরিয়েবল রয়েছে

  • বিমূর্ত কীওয়ার্ড ব্যবহার করে ঘোষণা করুন।

  • পদ্ধতি এবং একটি বিমূর্ত শ্রেণীর সদস্যদের যে কোনও দৃশ্যমানতার সাথে সংজ্ঞায়িত করা যায়।

  • একটি শিশু শ্রেণি কেবলমাত্র একটি একক শ্রেণি (বিমূর্ত বা কংক্রিট) প্রসারিত করতে পারে।


2

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

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

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


2

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


1

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

তবে একটি বিমূর্ত শ্রেণিতে কেবল সংজ্ঞা সহ একটি বিমূর্ত পদ্ধতি থাকতে হবে, তবে অন্যান্য পদ্ধতিগুলি বাস্তবায়নের সাথে সাথে বিমূর্ত শ্রেণিতেও হতে পারে ...


1

ইন্টারফেস এবং বিমূর্ত শ্রেণীর মধ্যে আমাদের বিভিন্ন কাঠামোগত / সিনট্যাক্টিকাল পার্থক্য রয়েছে। আরও কিছু পার্থক্য রয়েছে

[1] পরিস্থিতি ভিত্তিক পার্থক্য :

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

ইন্টারফেসটি ব্যবহার করতে হবে যখন আমরা নিশ্চিত থাকি যে আর কোনও বিমূর্ত পদ্ধতি সরবরাহ করা বাকি নেই। তারপরে কেবল একটি ইন্টারফেস প্রকাশিত হয়।

[২] ধারণাগত পার্থক্য :

"যদি ভবিষ্যতে আমাদের আরও বিমূর্ত পদ্ধতি সরবরাহ করতে হবে" যদি আপনি এটি বিমূর্ত শ্রেণি তৈরি করেন এবং যদি এটি ইন্টারফেস না করে।

(জাভা 1.7 অবধি সবচেয়ে উপযুক্ত এবং বৈধ)


1

সাধারণত আনুষঙ্গিক শ্রেণি পেরিফেরাল সংযোজন করার জন্য ব্যবহৃত হয় তবে কোনও কিছুর মূল অংশের জন্য ব্যবহৃত হয়।

আপনি যখন যানবাহনের জন্য বেস টাইপ তৈরি করতে চান তখন আপনাকে বিমূর্ত শ্রেণি ব্যবহার করা উচিত তবে আপনি যদি কিছু কার্যকারিতা বা সম্পত্তি যুক্ত করতে চান যা যানবাহনের বেস ধারণার অংশ নয় আপনার ইন্টারফেস ব্যবহার করা উচিত, উদাহরণস্বরূপ আপনি "ToJSON ()" ফাংশন যুক্ত করতে চান ।

ইন্টারফেসের বিমূর্ত শ্রেণীর চেয়ে বিমূর্ত বিস্তৃত থাকে। আপনি এটি পাস করার যুক্তিগুলিতে দেখতে পারেন this এই উদাহরণটি দেখুন:

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

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

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