ইন্টারফেস
এমন কোনও সরঞ্জামের উদ্দেশ্য বুঝতে অসুবিধা যা আপনার সমস্যার সমাধান করে। আমি প্রোগ্রামিং শুরু করার পরে কিছুক্ষণ ইন্টারফেস বুঝতে পারি নি। আমরা কী করব তা আমি বুঝতে পেরেছি তবে কেন আপনি এটি ব্যবহার করতে চান তা আমি জানতাম না।
এখানে সমস্যাটি রয়েছে - আপনি কী করতে চান তা আপনি জানেন তবে এটি করার একাধিক উপায় রয়েছে বা আপনি কীভাবে এটি পরে করবেন তা পরিবর্তন করতে পারেন। আপনি যদি ক্লুলেস ম্যানেজারের ভূমিকায় অভিনয় করতে পারেন তবে এটি চমৎকার হবে - কিছু আদেশ বার্ক করুন এবং এটি কীভাবে সম্পন্ন হয়েছে তা যত্ন না করেই আপনার ফলাফল পেতে চান।
বলুন আপনার একটি ছোট্ট ওয়েবসাইট আছে এবং আপনি আপনার ব্যবহারকারীদের সমস্ত তথ্য সিএসভি ফাইলে সংরক্ষণ করেন। সর্বাধিক পরিশীলিত সমাধান নয়, তবে এটি আপনার মায়ের ব্যবহারকারীর বিবরণ সঞ্চয় করতে যথেষ্ট কাজ করে। পরে, আপনার সাইটটি বন্ধ হয়ে যায় এবং আপনার 10,000 জন ব্যবহারকারী রয়েছে। হতে পারে এটি একটি সঠিক ডাটাবেস ব্যবহার করার সময়।
আপনি যদি প্রথমে চালাক হন তবে আপনি এই আগতটি দেখতে পেতেন এবং সরাসরি সিএসভিতে সংরক্ষণ করার জন্য কলগুলি করেন নি। পরিবর্তে আপনি এটি করার জন্য আপনার কী প্রয়োজন তা ভেবে দেখবেন, এটি কীভাবে কার্যকর করা হয়েছিল। যাক store()
এবং retrieve()
। আপনি একটি করতে Persister
জন্য বিমূর্ত পদ্ধতি ইন্টারফেস store()
এবং retrieve()
একটি তৈরি CsvPersister
উপশ্রেণী যে আসলে ঐ পদ্ধতি প্রয়োগ করা হয়।
পরবর্তীতে, আপনি এমন একটি তৈরি করতে পারেন DbPersister
যা আপনার সিএসভি শ্রেণিটি কীভাবে করেছিল তার থেকে আলাদাভাবে প্রকৃত স্টোরেজ এবং ডেটা পুনরুদ্ধার কার্যকর করে।
দুর্দান্ত জিনিসটি হল, আপনাকে এখন যা করতে হবে তা হ'ল পরিবর্তন
Persister* prst = new CsvPersister();
প্রতি
Persister* prst = new DbPersister();
এবং তারপরে আপনার কাজ শেষ। আপনার কলগুলি prst.store()
এবং prst.retrieve()
এখনও সব কাজ করবে, সেগুলি কেবল "পর্দার আড়ালে" আলাদাভাবে পরিচালিত হয়।
এখন, আপনাকে এখনও সিভিএস এবং ডিবি বাস্তবায়ন তৈরি করতে হয়েছিল, সুতরাং আপনি এখনও বস হওয়ার বিলাসিতা অনুভব করতে পারেন নি। আপনি যখন অন্য কেউ তৈরি করেছেন এমন ইন্টারফেস ব্যবহার করছেন তখন আসল উপকারগুলি স্পষ্ট হয়। যদি অন্য কেউ তৈরির জন্য যথেষ্ট সদয় হন CsvPersister()
এবং DbPersister()
ইতিমধ্যে আপনাকে কেবল একটি বাছাই করতে হবে এবং প্রয়োজনীয় পদ্ধতিগুলি কল করতে হবে। আপনি যদি পরে অন্যটি ব্যবহার করার সিদ্ধান্ত নেন বা অন্য প্রকল্পে, আপনি কীভাবে এটি কাজ করে তা ইতিমধ্যে আপনি জানেন।
আমি আমার সি ++ তে সত্যই মরিচা, তাই আমি কিছু জেনেরিক প্রোগ্রামিং উদাহরণ ব্যবহার করব। ইন্টারফেসগুলি কীভাবে আপনার জীবনকে সহজ করে তোলে তার একটি দুর্দান্ত উদাহরণ হ'ল পাত্রে।
আপনি থাকতে পারে Array
, LinkedList
, BinaryTree
, ইত্যাদি সব উপশ্রেণী Container
যা মত পদ্ধতি আছে insert()
, find()
, delete()
।
এখন কোনও লিঙ্কযুক্ত তালিকার মাঝখানে কিছু যুক্ত করার সময়, আপনাকে লিঙ্কযুক্ত তালিকাটি কী তাও জানতে হবে না। আপনি কেবল কল করুন myLinkedList->insert(4)
এবং এটি যাদুকরীভাবে তালিকাটির মাধ্যমে পুনরাবৃত্তি করে এবং এটি সেখানে আটকে দেয়। এমনকি যদি আপনি জানেন যে কোনও লিঙ্কযুক্ত তালিকাগুলি কীভাবে কাজ করে (যা আপনার সত্যিকারের উচিত) তবে আপনাকে এর নির্দিষ্ট ফাংশনগুলি সন্ধান করতে হবে না, কারণ আপনি সম্ভবত ইতিমধ্যে জানেন যে তারা এর Container
আগে কোনও আলাদা ব্যবহার করা থেকে কী ।
বিমূর্ত ক্লাস
সারাংশ শ্রেণীর চমত্কার ইন্টারফেসগুলি মতই (ভাল টেকনিক্যালি ইন্টারফেসগুলি হয় বিমূর্ত ক্লাস I গড় বেস ক্লাস যে তাদের পদ্ধতির কিছু fleshed করেছেন, কিন্তু এখানে।
বলুন আপনি একটি গেম তৈরি করছেন এবং শত্রুরা যখন খেলোয়াড়ের আকর্ষণীয় দূরত্বের মধ্যে থাকে তখন আপনাকে সনাক্ত করতে হবে। আপনি একটি বেস ক্লাস তৈরি করতে পারেন Enemy
যার একটি পদ্ধতি রয়েছে inRange()
। শত্রুদের সম্পর্কে অনেকগুলি ভিন্ন হলেও, তাদের পরিসীমাটি পরীক্ষা করার জন্য ব্যবহৃত পদ্ধতিটি সামঞ্জস্যপূর্ণ। সুতরাং আপনার Enemy
বর্গের পরিসীমা চেক করার জন্য একটি শিখরিত পদ্ধতি থাকবে, তবে শত্রু প্রকারের মধ্যে কোনও মিল নেই এমন অন্যান্য জিনিসের জন্য বিশুদ্ধ ভার্চুয়াল পদ্ধতি।
এটি সম্পর্কে দুর্দান্ত জিনিসটি হ'ল যদি আপনি পরিসীমা সনাক্তকরণ কোডটি গণ্ডগোল করে বা এটি টুইট করতে চান, আপনাকে কেবল এটি একটি জায়গায় পরিবর্তন করতে হবে।
অবশ্যই ইন্টারফেস এবং বিমূর্ত বেস ক্লাসগুলির জন্য আরও অনেক কারণ রয়েছে তবে আপনি সেগুলি কেন ব্যবহার করতে পারেন সেগুলির কয়েকটি কারণ।
Singletons
আমি তাদের মাঝে মাঝে ব্যবহার করি এবং আমি তাদের দ্বারা কখনও পোড়া হইনি। এটি অন্য জাতির অভিজ্ঞতার ভিত্তিতে তারা আমার জীবনকে এক পর্যায়ে নষ্ট করবে না তা বলার অপেক্ষা রাখে না।
আরও কিছু অভিজ্ঞ এবং সতর্ক লোকদের কাছ থেকে এখানে বৈশ্বিক রাষ্ট্র সম্পর্কে একটি ভাল আলোচনা রয়েছে:
গ্লোবাল স্টেট এত খারাপ কেন?