পলিমরফিজ্ম
আপনি যতক্ষণ getType()
না এটি ব্যবহার করেন বা ব্যবহার করেন না ততক্ষণ আপনি বহুকর্ম ব্যবহার করছেন না।
আমি বুঝতে পারছি যে আপনার কী ধরণের তা জানা দরকার। তবে যে কাজ আপনি করতে চান তা জানতে পেরে ক্লাসে আসলেই চাপ দেওয়া উচিত। তারপরে আপনি এটি কখন করবেন তা বলুন।
কার্যবিধি কোড তথ্য পায় তারপর সিদ্ধান্ত নেয়। অবজেক্ট-ওরিয়েন্টেড কোড বস্তুগুলিকে জিনিস করতে বলে।
- অ্যালেক শার্প
এই নীতিটি বলা হয় বলা হয় , জিজ্ঞাসা করবেন না । এটি অনুসরণ করা আপনাকে চারপাশের টাইপের মতো বিশদ ছড়িয়ে না দেওয়া এবং তাদের উপর কাজ করে এমন যুক্তি তৈরি করতে সহায়তা করে। এটি একটি ক্লাস ভিতরে ভিতরে পরিণত হয়। সেই আচরণটি ক্লাসের মধ্যে রাখা আরও ভাল যাতে শ্রেণি পরিবর্তিত হলে এটি পরিবর্তন করতে পারে।
encapsulation
আপনি আমাকে বলতে পারবেন যে অন্য কোনও আকারের আর প্রয়োজন হবে না তবে আমি আপনাকে বিশ্বাস করি না এবং আপনারও করা উচিত নয়।
এনক্যাপসুলেশন অনুসরণ করার একটি দুর্দান্ত প্রভাব এটি হ'ল নতুন প্রকার যুক্ত করা সহজ কারণ তাদের বিবরণটি কোডটিতে ছড়িয়ে পড়ে না যেখানে তারা প্রদর্শিত হয় if
এবং switch
যুক্তি দেয়। একটি নতুন ধরণের কোড সমস্ত এক জায়গায় থাকা উচিত।
এক প্রকার অজ্ঞান সংঘর্ষ সনাক্তকরণ সিস্টেম
আসুন আমি আপনাকে দেখাতে পারি যে আমি কীভাবে সংঘর্ষ সনাক্তকরণ সিস্টেমটি ডিজাইন করব যা পারফরম্যান্ট এবং প্রকারের বিষয়ে চিন্তা না করে কোনও 2 ডি আকারের সাথে কাজ করে।
বলুন যে আপনি আঁকার কথা ছিল। সহজ মনে হচ্ছে। এটি সমস্ত চেনাশোনা। সংঘর্ষগুলি বোঝে এমন একটি বৃত্ত শ্রেণি তৈরি করা লোভনীয়। সমস্যাটি হ'ল এটি আমাদের চিন্তাভাবনার এক লাইনে প্রেরণ করে যা যখন আমাদের 1000 টি বৃত্তের প্রয়োজন হয় তখন বিচ্ছিন্ন হয়ে যায়।
আমাদের চেনাশোনাগুলি সম্পর্কে চিন্তা করা উচিত নয়। আমাদের পিক্সেল সম্পর্কে চিন্তা করা উচিত।
যদি আমি আপনাকে বলেছিলাম যে এই ছেলেদের আঁকতে আপনি একই কোডটি ব্যবহার করেন তারা হ'ল তারা স্পর্শ করার সময় বা এমনকি ব্যবহারকারী কোনটি ক্লিক করছে তা সনাক্ত করতে আপনি ব্যবহার করতে পারেন
এখানে আমি প্রতিটি চেনাশোনা একটি অনন্য রঙ দিয়ে আঁকলাম (যদি আপনার চোখ কালো বর্ণরেখা দেখতে যথেষ্ট ভাল হয় তবে কেবল তা উপেক্ষা করুন)। এর অর্থ এই লুকানো চিত্রের প্রতিটি পিক্সেল এটি কী আঁকে তার পিছনে maps একটি হ্যাশম্যাপ সেই সুন্দরভাবে যত্ন করে। আপনি আসলে এইভাবে পলিমারফিজম করতে পারেন।
এই চিত্রটি আপনাকে কখনই ব্যবহারকারীর কাছে দেখাতে হবে না। আপনি এটি একই কোডটি দিয়ে তৈরি করেন যা প্রথমটি আঁকে। ঠিক বিভিন্ন রঙের সাথে।
যখন ব্যবহারকারী একটি চেনাশোনাতে ক্লিক করে আমি ঠিক জানি কোন বৃত্তটি কারণ কেবলমাত্র একটি বৃত্তই সেই রঙ।
যখন আমি অন্যটির উপরে একটি বৃত্ত আঁকাম আমি দ্রুত প্রতি পিক্সেলটি সেটে ফেলে দিয়ে ওভাররাইট করতে যাচ্ছি read যখন আমি প্রতিটি বৃত্তের সেট পয়েন্টগুলি সম্পন্ন করেছি তখন এটির সংঘর্ষ হয়েছিল এবং এখন সংঘর্ষের বিষয়টি জানাতে আমাকে কেবল একবার ফোন করতে হবে।
একটি নতুন প্রকার: আয়তক্ষেত্রগুলি
এগুলি সমস্তই চেনাশোনাগুলির সাথে করা হয়েছিল তবে আমি আপনাকে জিজ্ঞাসা করছি: এটি আয়তক্ষেত্রগুলির সাথে কোনও আলাদা কাজ করবে?
কোনও বৃত্ত জ্ঞান সনাক্তকরণ সিস্টেমে ফাঁস হয়নি। এটি ব্যাসার্ধ, পরিধি বা কেন্দ্র বিন্দু সম্পর্কে চিন্তা করে না। এটি পিক্সেল এবং রঙ সম্পর্কে যত্নশীল।
এই সংঘর্ষের সিস্টেমটির একমাত্র অংশ যা পৃথক আকারের নীচে ঠেলাঠেলি করা দরকার এটি একটি অনন্য রঙ। শেপগুলি ছাড়াও শেপগুলি কেবল তাদের শেপগুলি আঁকার বিষয়ে ভাবতে পারে। যাইহোক তারা ভাল কি এটি।
এখন যখন আপনি সংঘর্ষের যুক্তি লেখেন তখন আপনার কী উপ-প্রকার রয়েছে তা যত্নশীল হন না। আপনি এটি সংঘর্ষের জন্য বলুন এবং এটি আপনাকে আঁকার ভান করে এমন আকৃতির নীচে এটি কী বলেছিল তা বলে দেয়। টাইপ জানার দরকার নেই। এবং এর অর্থ আপনি অন্যান্য ক্লাসে কোডটি আপডেট না করে নিজের পছন্দমতো উপ-প্রকার যোগ করতে পারেন।
বাস্তবায়ন পছন্দ
সত্যিই, এটি কোনও অনন্য রঙ হওয়ার দরকার নেই। এটি প্রকৃত অবজেক্ট রেফারেন্স হতে পারে এবং ইন্ডিয়ারেশনের একটি স্তর বাঁচাতে পারে। কিন্তু এই উত্তরটি আঁকলে সেগুলি এত সুন্দর লাগবে না।
এটি কেবল একটি বাস্তবায়নের উদাহরণ। অন্যদের অবশ্যই আছে। এটি দেখানোর জন্য যা বোঝানো হয়েছিল তা হ'ল কাছাকাছি আপনি এই আকারের সাব টাইপগুলিকে তাদের একক দায়িত্বের সাথে পুরোপুরি আরও ভালভাবে কাজ করতে দেয়। সম্ভবত দ্রুত এবং কম মেমরি নিবিড় সমাধান রয়েছে তবে তারা যদি আমাকে চারপাশের সাব টাইপগুলি সম্পর্কে জ্ঞান ছড়িয়ে দিতে বাধ্য করে তবে আমি এগুলি পারফরম্যান্স লাভের সাথেও ব্যবহার করতে ঘৃণা করব। আমার স্পষ্টভাবে তাদের প্রয়োজন না হলে আমি সেগুলি ব্যবহার করব না।
ডাবল প্রেরণ
এখনও অবধি আমি ডাবল প্রেরণকে সম্পূর্ণ উপেক্ষা করেছি । আমি পেরেছি বলেই পেরেছি। এতক্ষণ পর্যন্ত যে সংঘর্ষের যুক্তি যত্ন করে না যে কোন দুটি ধরণের সংঘর্ষ আপনার প্রয়োজন হবে না। আপনার যদি এটির প্রয়োজন না হয় তবে এটি ব্যবহার করবেন না। যদি আপনি মনে করেন যে আপনার এটির প্রয়োজন হতে পারে তবে আপনি যতক্ষণ পারেন তা মোকাবেলা বন্ধ করুন। এই মনোভাবকে YAGNI বলা হয় ।
যদি আপনি স্থির করেন যে আপনাকে সত্যিই বিভিন্ন ধরণের সংঘর্ষের প্রয়োজন হয় তবে আপনার নিজের জিজ্ঞাসা করুন যে এন শেপ সাবটাইপগুলিতে সত্যিই এন 2 ধরণের সংঘর্ষের প্রয়োজন আছে। এখন পর্যন্ত আমি অন্য আকারের সাব টাইপ যুক্ত করা সহজ করার জন্য সত্যিই কঠোর পরিশ্রম করেছি। আমি এটি ডাবল প্রেরণ প্রয়োগের মাধ্যমে এটি নষ্ট করতে চাই না যা চেনাশোনাগুলি বিদ্যমান তা চেনাশোনাগুলিকে বাধ্য করে।
যাইহোক সেখানে কত ধরণের সংঘর্ষ হয়? সামান্য অনুমান (বিপজ্জনক জিনিস) ইলাস্টিক সংঘর্ষ (বাউন্সি), অস্বচ্ছল (চটচটে), উদ্যমী (বিস্ফোরক), এবং ধ্বংসাত্মক (ক্ষতিকারক) আবিষ্কার করে। আরও কিছু হতে পারে তবে এটি যদি এন 2 এর চেয়ে কম হয় তবে আমাদের সংঘর্ষগুলি ডিজাইন করতে দেয় না।
এর অর্থ যখন আমার টর্পেডো এমন কিছু আঘাত করে যা ক্ষতি গ্রহণ করে তা জানার দরকার নেই যে এটি কোনও স্পেস শিপকে আঘাত করে hit এটি কেবল এটিই বলতে হবে, "হা হা! আপনি ক্ষতির 5 পয়েন্ট নিয়েছিলেন।"
যে জিনিসগুলির ক্ষতি হয় সেগুলি ক্ষতির বার্তা গ্রহণ করে এমন ক্ষতিকারক বার্তাগুলি প্রেরণ করে। অন্য আকারকে নতুন আকৃতি সম্পর্কে কিছু না জানিয়ে আপনি নতুন আকার যুক্ত করতে পারেন সেভাবে হয়ে গেছে। আপনি কেবল নতুন ধরণের সংঘর্ষের চারদিকে ছড়িয়ে পড়েছেন।
স্পেস শিপটি "হা হা! আপনি 100 পয়েন্টের ক্ষতির ক্ষতি করে নিয়েছিলেন" টর্পে ফেরত পাঠাতে পারেন। পাশাপাশি "আপনি এখন আমার ঝাঁকুনিতে আটকে গেছেন"। এবং টর্পটি "ঠিক আছে, আমি আমার সম্পর্কে ভুলে যাচ্ছি" এর জন্য ফিরে পাঠাতে পারে।
কোন মুহুর্তে হয় প্রতিটি সঠিক কি জানেন না। সংঘর্ষের ইন্টারফেসের মাধ্যমে কীভাবে একে অপরের সাথে কথা বলতে হয় তা তারা জানে।
এখন নিশ্চিত, ডাবল প্রেরণ আপনাকে এর থেকে আরও ঘনিষ্ঠভাবে নিয়ন্ত্রণ করতে দেয় তবে আপনি কি সত্যিই এটি চান ?
আপনি যদি দয়া করে কমপক্ষে কোনও আকারের ধরণের সংঘর্ষকে গ্রহণ করেন এবং আসল আকার বাস্তবায়নে নয় তবে বিমূর্ততার মাধ্যমে ডাবল প্রেরণ করার বিষয়ে ভাবুন। এছাড়াও, সংঘর্ষের আচরণ এমন একটি বিষয় যা আপনি নির্ভরতা হিসাবে ইনজেকশন করতে পারেন এবং সেই নির্ভরতার প্রতিনিধিত্ব করতে পারেন।
কর্মক্ষমতা
অভিনয় সর্বদা সমালোচনামূলক। তবে এর অর্থ এই নয় যে এটি সর্বদা একটি সমস্যা। টেস্ট পারফরম্যান্স। শুধু অনুমান করবেন না। পারফরম্যান্সের নামে অন্য যে কোনও কিছুকে ত্যাগ করার পরে সাধারণত কোনওভাবেই পারফরম্যান্ট কোড হয় না।