আমি স্ট্যাটিক টাইপ চেকিংয়ের বড় ফ্যান। এটি আপনাকে এই জাতীয় মূর্খ ভুল করতে বাধা দেয়:
// java code
Adult a = new Adult();
a.setAge("Roger"); //static type checker would complain
a.setName(42); //and here too
তবে এটি আপনাকে বোকা ভুলগুলি থেকে আটকাতে পারে না:
Adult a = new Adult();
// obviously you've mixed up these fields, but type checker won't complain
a.setAge(150); // nobody's ever lived this old
a.setWeight(42); // a 42lb adult would have serious health issues
সমস্যাটি তখন আসে যখন আপনি স্পষ্টতই বিভিন্ন ধরণের তথ্যের প্রতিনিধিত্ব করতে একই ধরণের ব্যবহার করছেন। আমি ভাবছিলাম এটির একটি ভাল সমাধান Integer
ক্লাসটি প্রসারিত করা হবে , কেবল ব্যবসায়ের যুক্তি ত্রুটিগুলি রোধ করার জন্য, তবে কার্যকারিতা যুক্ত করবেন না। উদাহরণ স্বরূপ:
class Age extends Integer{};
class Pounds extends Integer{};
class Adult{
...
public void setAge(Age age){..}
public void setWeight(Pounds pounds){...}
}
Adult a = new Adult();
a.setAge(new Age(42));
a.setWeight(new Pounds(150));
এটি কি ভাল অনুশীলন হিসাবে বিবেচিত হয়? বা এই জাতীয় একটি সীমাবদ্ধ নকশা নিয়ে রাস্তায় অপ্রত্যাশিত ইঞ্জিনিয়ারিং সমস্যা আছে?
new Age(...)
অবজেক্টটি ঘোষণা করলে আপনি Weight
অন্য কোনও স্থানে ভেরিয়েবলকে ভুলভাবে এটি নির্ধারণ করতে পারবেন না । এটি এমন জায়গাগুলির সংখ্যা হ্রাস করে যেখানে ভুল হতে পারে।
a.SetAge( new Age(150) )
এখনও সংকলন করবে না ?