সুতরাং, আমি ভাবছি যে এই কৌশলটি বাস্তবে বাস্তবে ব্যবহৃত হয়? আমার কি এটি সর্বত্র ব্যবহার করা উচিত, বা সতর্কতার সাথে?
অবশ্যই এটি ব্যবহৃত হয়। আমি আমার প্রকল্পে এটি প্রায় প্রতিটি ক্লাসে ব্যবহার করি।
পিআইএমপিএল আইডিয়ামটি ব্যবহারের কারণগুলি:
বাইনারি সামঞ্জস্য
আপনি যখন একটি লাইব্রেরি বিকাশ করছেন, আপনি XImpl
আপনার ক্লায়েন্টের সাথে বাইনারি সামঞ্জস্যতা (যার অর্থ ক্র্যাশগুলি বোঝায়!) ভঙ্গ না করে ক্ষেত্রগুলি যুক্ত / সংশোধন করতে পারেন । X
আপনি যখন Ximpl
ক্লাসে নতুন ক্ষেত্র যুক্ত করবেন তখন ক্লাসের বাইনারি বিন্যাস পরিবর্তন হয় না , তাই ছোটখাটো সংস্করণ আপডেটে লাইব্রেরিতে নতুন কার্যকারিতা যুক্ত করা নিরাপদ।
অবশ্যই, আপনি বাইনারি সামঞ্জস্যতা ভঙ্গ করে X
/ XImpl
ছাড়াই নতুন সরকারী / বেসরকারী নন-ভার্চুয়াল পদ্ধতিগুলি যুক্ত করতে পারেন তবে এটি স্ট্যান্ডার্ড শিরোনাম / বাস্তবায়ন কৌশলটির সাথে সমান।
তথ্য গোপন করা হচ্ছে
আপনি যদি একটি গ্রন্থাগার গড়ে তুলছেন, বিশেষত মালিকানাধীন একটি, আপনার গ্রন্থাগারের পাবলিক ইন্টারফেস বাস্তবায়নের জন্য অন্যান্য গ্রন্থাগার / বাস্তবায়ন কৌশলগুলি কী ব্যবহৃত হয়েছিল তা প্রকাশ না করাই বাঞ্ছনীয়। হয় বৌদ্ধিক সম্পত্তি সংক্রান্ত কারণে, বা আপনি বিশ্বাস করেন যে ব্যবহারকারীরা প্রয়োগ সম্পর্কে বিপজ্জনক ধারণা গ্রহণ করতে প্ররোচিত হতে পারেন বা কেবল ভয়াবহ ingালাইয়ের কৌশল ব্যবহার করে এনক্যাপসুলেশনটি ভেঙে ফেলতে পারেন। পিআইএমপিএল এটি সমাধান করে / প্রশমিত করে।
সংকলনের সময়
সংকলনের সময় হ্রাস পেয়েছে, যেহেতু X
আপনি XImpl
ক্লাসে ক্ষেত্র এবং / অথবা পদ্ধতিগুলি যোগ করুন / অপসারণ করবেন (আদর্শ মানের ক্ষেত্রে ব্যক্তিগত ক্ষেত্র / পদ্ধতিগুলি যুক্ত করার মানচিত্র ) যখন কেবল উত্স (বাস্তবায়ন) ফাইলটি পুনর্নির্মাণ করা প্রয়োজন । অনুশীলনে, এটি একটি সাধারণ অপারেশন।
স্ট্যান্ডার্ড শিরোনাম / বাস্তবায়ন কৌশল (পিআইএমপিএল ব্যতীত) এর সাথে আপনি যখন নতুন ক্ষেত্র যুক্ত করেন তখন X
যে ক্লায়েন্ট কখনও বরাদ্দ করে X
(স্ট্যাক বা গাদাতে থাকে) তা পুনরায় সংযুক্ত করা দরকার, কারণ এটি অবশ্যই বরাদ্দের আকার সামঞ্জস্য করতে পারে। ঠিক আছে, প্রতিটি ক্লায়েন্ট যা কখনই এক্স বরাদ্দ করে না সেগুলি আবারও সংকলন করা দরকার, তবে এটি কেবল ওভারহেড (ক্লায়েন্টের ফলস্বরূপ কোডটি একই হবে)।
আর কী, XClient1.cpp
প্রাইভেট পদ্ধতি X::foo()
যুক্ত করা X
এবং X.h
পরিবর্তিত হওয়া সত্ত্বেও স্ট্যান্ডার্ড শিরোনাম / প্রয়োগের সাথে পৃথকীকরণ পুনরায় সংযুক্ত করা দরকার , যদিও XClient1.cpp
এ্যাঙ্ক্যাপসুলেশন কারণে সম্ভবত এই পদ্ধতিটি কল করতে পারে না! উপরের মত এটিও খাঁটি ওভারহেড এবং বাস্তব জীবনের সি ++ বিল্ড সিস্টেমগুলি কীভাবে কাজ করে তা সম্পর্কিত।
অবশ্যই, যখন আপনি কেবলমাত্র পদ্ধতিগুলির বাস্তবায়নটি সংশোধন করেন তখন পুনঃসংশোধনের প্রয়োজন হয় না (কারণ আপনি শিরোনামটি স্পর্শ করেন না), তবে এটি স্ট্যান্ডার্ড শিরোনাম / বাস্তবায়ন কৌশল হিসাবে সমান।
এই কৌশলটি এম্বেড থাকা সিস্টেমে (যেখানে পারফরম্যান্সটি খুব গুরুত্বপূর্ণ) ব্যবহার করার পরামর্শ দেওয়া হচ্ছে?
এটি নির্ভর করে আপনার টার্গেটটি কতটা শক্তিশালী। তবে এই প্রশ্নের একমাত্র উত্তর: আপনি কী অর্জন করেছেন এবং কী হারালেন তা পরিমাপ করুন এবং মূল্যায়ন করুন। এছাড়াও, এই বিষয়টিও বিবেচনা করুন যে আপনি যদি আপনার গ্রাহকদের দ্বারা এম্বেড করা সিস্টেমে ব্যবহৃত গ্রন্থাগারটি প্রকাশ না করেন তবে কেবল সংকলনের সময়ের সুবিধা প্রযোজ্য!
struct XImpl : public X
। এটি আমার কাছে আরও স্বাভাবিক অনুভূত হয়। আমি মিস করেছি এমন আরও কিছু সমস্যা আছে?