আমি প্রচুর সোর্স কোড দেখতে পাচ্ছি যা সি ++ তে পিপল আইডিয়োম ব্যবহার করছে। আমি ধরে নিচ্ছি এর উদ্দেশ্যটি ব্যক্তিগত ডেটা / প্রকার / প্রয়োগকরণ গোপন করা, যাতে এটি নির্ভরতা সরিয়ে ফেলতে পারে এবং তারপরে সংকলনের সময় এবং শিরোনামকে ইস্যু অন্তর্ভুক্ত করতে পারে reduce
তবে সি ++ তে ইন্টারফেস / খাঁটি-বিমূর্ত ক্লাসগুলিরও এই ক্ষমতা রয়েছে, এগুলি ডেটা / প্রকার / বাস্তবায়ন আড়াল করতেও ব্যবহার করা যেতে পারে। এবং কোনও বস্তু তৈরি করার সময় কলারকে কেবল ইন্টারফেসটি দেখতে দেয়, আমরা ইন্টারফেসের শিরোনামে একটি কারখানা পদ্ধতি ঘোষণা করতে পারি।
তুলনাটি হ'ল:
ব্যয় :
ইন্টারফেস উপায়ের ব্যয় কম, কারণ আপনার এমনকি পাবলিক রেপার ফাংশন বাস্তবায়নের পুনরাবৃত্তি করার
void Bar::doWork() { return m_impl->doWork(); }
প্রয়োজন নেই, আপনাকে কেবল ইন্টারফেসে স্বাক্ষরটি সংজ্ঞায়িত করতে হবে।ভালভাবে বোঝা :
ইন্টারফেস প্রযুক্তি প্রতিটি সি ++ বিকাশকারী দ্বারা আরও ভাল বোঝা যায়।
পারফরম্যান্স :
ইন্টারফেস ওয়ে কর্মক্ষমতা PImpl আইডিয়ামের চেয়ে খারাপ নয়, উভয়ই অতিরিক্ত মেমরি অ্যাক্সেস। আমি ধরে নিই পারফরম্যান্স একই রকম।
আমার প্রশ্নটি বর্ণনা করার জন্য সিউডোকোডটি নীচে দেওয়া হয়েছে:
// Forward declaration can help you avoid include BarImpl header, and those included in BarImpl header.
class BarImpl;
class Bar
{
public:
// public functions
void doWork();
private:
// You don't need to compile Bar.cpp after changing the implementation in BarImpl.cpp
BarImpl* m_impl;
};
একই উদ্দেশ্য ইন্টারফেস ব্যবহার করে প্রয়োগ করা যেতে পারে:
// Bar.h
class IBar
{
public:
virtual ~IBar(){}
// public functions
virtual void doWork() = 0;
};
// to only expose the interface instead of class name to caller
IBar* createObject();
সুতরাং পিআইএমপিএল এর পয়েন্ট কি?
Impl
ক্লাসে পাবলিক ফাংশন যুক্ত করলে তা ভাঙবে নাABI
, তবে ইন্টারফেসে পাবলিক ফাংশন যুক্ত হবেABI
।