জাভা class
এবং এর মধ্যে একটি স্পষ্ট পার্থক্য করে interface
। (আমি বিশ্বাস করি সি # তেও করে, তবে এর সাথে আমার কোনও অভিজ্ঞতা নেই)। সি ++ লেখার সময় কোনও শ্রেণি এবং ইন্টারফেসের মধ্যে কোনও ভাষা প্রয়োগ করা যায় না।
ফলস্বরূপ আমি জাভাতে একাধিক উত্তরাধিকারের অভাবের জন্য ইন্টারফেসটিকে সর্বদা কার্যকর হিসাবে দেখেছি। এ জাতীয় পার্থক্য করা C ++ এ স্বেচ্ছাসেবী এবং অর্থহীন বোধ করে।
আমি সর্বদা "সর্বাধিক সুস্পষ্ট উপায়ে জিনিস লিখুন" পদ্ধতির সাথে যাওয়ার প্রবণতা রেখেছি, সুতরাং সি ++ এ যদি জাভাতে একটি ইন্টারফেস বলা যেতে পারে যা পেয়েছি, যেমন:
class Foo {
public:
virtual void doStuff() = 0;
~Foo() = 0;
};
এবং আমি তখন সিদ্ধান্ত নিয়েছিলাম যে বেশিরভাগ প্রয়োগকারীরা Foo
সম্ভবত কিছু সাধারণ কার্যকারিতা ভাগ করে নিতে চেয়েছিলেন:
class Foo {
public:
virtual void doStuff() = 0;
~Foo() {}
protected:
// If it needs this to do its thing:
int internalHelperThing(int);
// Or if it doesn't need the this pointer:
static int someOtherHelper(int);
};
যা এটি আর জাভা অর্থে ইন্টারফেস নয়।
পরিবর্তে সি ++ এর দুটি অন্তর্নিহিত উত্তরাধিকার সমস্যার সাথে সম্পর্কিত দুটি গুরুত্বপূর্ণ ধারণা রয়েছে:
virtual
inhertianceবেস হিসাবে ব্যবহার করার সময় কোনও সদস্য ভেরিয়েবলযুক্ত শ্রেণিগুলি অতিরিক্ত স্থান দখল করতে পারে না
"বেস শ্রেণীর সাবোবজেক্টগুলির শূন্য আকার থাকতে পারে"
তাদের মধ্যে আমি যেখানেই সম্ভব # 1 এড়াতে চেষ্টা করি - এমন দৃশ্যের মুখোমুখি হওয়া বিরল যেখানে সত্যই "পরিষ্কার" নকশা। # 2 তবে "ইন্টারফেস" শব্দটি এবং সি ++ ভাষার বৈশিষ্ট্যগুলি সম্পর্কে আমার বোঝার মধ্যে একটি সূক্ষ্ম তবে গুরুত্বপূর্ণ পার্থক্য। এর ফলস্বরূপ আমি বর্তমানে (প্রায়) কখনই জিনিসগুলিকে সি ++ তে "ইন্টারফেস" হিসাবে উল্লেখ করি না এবং বেস ক্লাস এবং তাদের আকারগুলির ক্ষেত্রে কথা বলি। আমি বলব যে সি ++ "ইন্টারফেস" এর প্রসঙ্গে একটি মিসনোমার।
এটি আমার নজরে এসেছে যদিও অনেকেই এইরকম পার্থক্য করেন না।
- সি ++ এর একটি "ইন্টারফেস" এর মধ্যে (উদাঃ
protected
) অ-virtual
ফাংশনগুলির অস্তিত্বের অনুমতি দিয়ে কি আমি কোনও কিছু হারাতে চাই ? (আমার অনুভূতি হ'ল বিপরীত - ভাগ করা কোডের জন্য আরও প্রাকৃতিক অবস্থান) - "ইন্টারফেস" শব্দটি কি সি ++ এর অর্থবহ - এটি কি কেবল বিশুদ্ধ বোঝায়
virtual
বা কোনও সদস্যের ভেরিয়েবল সহ সি ++ ক্লাস বলা ভাল কি হবে?
~Foo() {}
বিমূর্ত শ্রেণিতে জনসাধারণ হ'ল (প্রায়) প্রতিটি পরিস্থিতিতে একটি ত্রুটি।
internalHelperThing
প্রায় সব ক্ষেত্রেই সিমুলেটেড করা যায়।