আমি বিশ্বাস করি ক্যানোনিকাল সম্পর্কিত দুটি সম্পর্কিত ব্যবহার আছে: ফর্ম এবং উদাহরণ।
একটি ক্যানোনিকাল ফর্ম মানে সম্পদ একটি বিশেষ ধরনের মান বর্ণনা যে যাবে বা একাধিক উপায়ে প্রতিনিধিত্ব, এবং যারা উপায়ে হোক্ ক্যানোনিকাল ফর্ম হিসেবে নির্বাচিত করা হয়। (এই ফর্ম canonized বই এটি বাইবেল মধ্যে তৈরি মত, এবং অন্যান্য ধরনের নয়।) একটি ক্যানোনিকাল ফর্মের এটা একটা ধ্রুপদী উদাহরণ একটি হায়ারারকিকাল ফাইল সিস্টেম, যেখানে একটি ফাইল উপায়ে একটি সংখ্যা উল্লেখ করা যেতে পারে পাথ হয় :
myFile.txt # in current working dir
../conf/myFile.txt # relative to the CWD
/apps/tomcat/conf/myFile.txt # absolute path using symbolic links
/u1/local/apps/tomcat-5.5.1/conf/myFile.txt # absolute path with no symlinks
এই ফাইলটির আধ্যাত্মিক উপস্থাপনের সর্বোত্তম সংজ্ঞাটি হবে শেষ পথ। স্থানীয় বা আপেক্ষিক পাথের সাহায্যে আপনি বিশ্বব্যাপী প্রাসঙ্গিক তথ্য ছাড়াই সংস্থানটি সনাক্ত করতে পারবেন না। পরম পাথের সাহায্যে আপনি সংস্থানটি সনাক্ত করতে পারেন, তবে দুটি পাথ একই সত্তার সাথে উল্লেখ করেছেন কিনা তা বলতে পারবেন না। দুই বা ততোধিক পাথকে তাদের ক্যানোনিকাল ফর্মে রূপান্তরিত করে, আপনি উপরের সমস্তটি করতে পারবেন, এবং এটি নির্ধারণ করুন যে দুটি সংস্থান একই হয় কি না, যদি তা আপনার অ্যাপ্লিকেশনটির জন্য গুরুত্বপূর্ণ ( আলিয়াসিং সমস্যার সমাধান করুন )।
মনে রাখবেন যে কোনও উত্সের আধ্যাত্মিক রূপটি সেই নির্দিষ্ট ফর্মের কোনও গুণ নয়; ফাইল পাথের মতো প্রদত্ত প্রকারের জন্য একাধিক সম্ভাব্য ক্যানোনিকাল ফর্ম থাকতে পারে (বলুন, লিকিকোগ্রাফিকভাবে সমস্ত সম্ভাব্য পরম পাথগুলির মধ্যে প্রথম)। একটি ফর্ম কেবলমাত্র একটি নির্দিষ্ট প্রয়োগের কারণে প্রমিত রূপ হিসাবে নির্বাচিত হয় বা নির্বিচারে যাতে সবাই একই ভাষা বলতে পারে।
বস্তুগুলিকে তাদের ক্যানোনিকাল দৃষ্টান্তগুলিতে বাধ্য করা একই মূল ধারণা, তবে কোনও উত্সের একটি "সেরা" উপস্থাপনা নির্ধারণের পরিবর্তে এটি নির্বিচারে রেফারেন্স হিসাবে একই "বিষয়বস্তু" সহ শ্রেণীর উদাহরণগুলির একটি উদাহরণ বেছে নেয়, তারপরে সমস্ত রেফারেন্সকে রূপান্তর করে ts একক ক্যানোনিকাল উদাহরণ ব্যবহার করার জন্য সমান অবজেক্টগুলিতে to
এটি সময় এবং স্থান উভয়ই অনুকূল করার জন্য একটি কৌশল হিসাবে ব্যবহার করা যেতে পারে। যদি কোনও অ্যাপ্লিকেশনটিতে সমমানের অবজেক্টগুলির একাধিক উদাহরণ রয়েছে, তবে তাদের সমস্তকে নির্দিষ্ট মানের একক প্রামাণ্য উদাহরণ হিসাবে সমাধান করার জন্য বাধ্য করে আপনি এখন প্রতিটি মানের একটি ব্যতীত সমস্ত স্থান বাদ দিতে পারবেন এবং স্থানের সাশ্রয় করতে পারেন এবং সম্ভবত আপনি এখন তুলনা করতে পারবেন রেফারেন্স আইডেন্টিটি সহ এই মানগুলি (==) বস্তুর সমতা ( equals()পদ্ধতি) এর বিপরীতে ।
ক্যানোনিকাল দৃষ্টান্তগুলির সাথে পারফরম্যান্স অনুকূলকরণের একটি সর্বোত্তম উদাহরণ হ'ল একই সামগ্রীর সাথে স্ট্রিংগুলি ভেঙে ফেলা। String.intern()একই অক্ষরের ক্রমযুক্ত দুটি স্ট্রিংয়ের উপর কল করা সেই পাঠ্যের জন্য একই প্রমিত স্ট্রিং অবজেক্টটি ফেরত দেওয়ার গ্যারান্টিযুক্ত। যদি আপনি এই ক্যানোনিকালাইজারের মাধ্যমে আপনার সমস্ত স্ট্রিংগুলি পাস করেন তবে আপনি জানেন যে সমতুল্য স্ট্রিংগুলি আসলে অভিন্ন বস্তুর রেফারেন্স, অর্থাত্, এলিয়াসগুলি হয়
জাভা 5.0+ এ এনামের প্রকারগুলি নির্দিষ্ট এনাম মানটির সমস্ত উদাহরণকে ভিএম এর মধ্যে একই নীতিগত উদাহরণটি ব্যবহার করতে বাধ্য করে, এমনকি মানটি সিরিয়ালাইজড এবং ডিসরিয়ালাইজড হলেও। এজন্য আপনি if (day == Days.SUNDAY)যদি Daysএনাম টাইপ হন তবে জাভাতে দায়মুক্তি ব্যবহার করতে পারেন । নিজের ক্লাসের জন্য এটি করা অবশ্যই সম্ভব, তবে যত্ন নেয়। বিশদ এবং পরামর্শের জন্য জোশ ব্লচের কার্যকর জাভা পড়ুন ।