জাভাতে "ক্যানোনিকাল ফর্ম" বা "ক্যানোনিকাল প্রতিনিধিত্ব" শব্দটির অর্থ কী?


90

আমি প্রায়শই এই শব্দটি ব্যবহৃত হচ্ছে শুনেছি, তবে আমি কখনই এটি বুঝতে পারি নি।

এর অর্থ কী, এবং কেউ কি কিছু উদাহরণ দিতে পারেন / আমাকে কয়েকটি লিঙ্কে নির্দেশ করতে পারেন?

সম্পাদনা: উত্তরের জন্য প্রত্যেককে ধন্যবাদ। আপনি কি আমাকে বলতে পারেন কীভাবে কার্যকর জাভাতে বর্ণিত হিসাবে প্রান্তিক উপস্থাপনা সমান () পারফরম্যান্সে কার্যকর?

উত্তর:


56

উইকিপিডিয়া ক্যানোনিকালাইজেশন শব্দটিকে নির্দেশ করে ।

একাধিক সম্ভাব্য প্রতিনিধিত্বকে "স্ট্যান্ডার্ড" ক্যানোনিকাল উপস্থাপনায় রূপান্তর করার একটি প্রক্রিয়া। এটি সমতার জন্য বিভিন্ন উপস্থাপনের তুলনা, স্বতন্ত্র ডাটা স্ট্রাকচারের সংখ্যা গণনা করা, বারবার গণনাগুলি বাদ দিয়ে বিভিন্ন অ্যালগরিদমের কার্যকারিতা উন্নত করতে বা অর্থবোধক বাছাইয়ের আদেশ চাপিয়ে দেওয়া সম্ভব করার জন্য এটি করা যেতে পারে।

ইউনিকোড উদাহরণ আমার কাছে সবচেয়ে ইন্দ্রিয় তৈরি করেছেন:

ইউনিকোড স্ট্যান্ডার্ডে চলক দৈর্ঘ্যের এনকোডিংগুলি, বিশেষত ইউটিএফ -8, বেশিরভাগ সাধারণ চরিত্রের জন্য একাধিক সম্ভাব্য এনকোডিং থাকে। এটি স্ট্রিংয়ের বৈধতা আরও জটিল করে তোলে, যেহেতু প্রতিটি স্ট্রিং বর্ণের প্রতিটি সম্ভাব্য এনকোডিং বিবেচনা করা উচিত। একটি সফ্টওয়্যার বাস্তবায়ন যা সমস্ত চরিত্রের এনকোডিংগুলিকে বিবেচনা করে না তা অ্যাপ্লিকেশন ডিজাইনে অবৈধ হিসাবে বিবেচিত স্ট্রিংগুলি গ্রহণের ঝুঁকি নিয়ে চলেছে, যা বাগগুলি তৈরি করতে বা আক্রমণকে অনুমতি দিতে পারে। সমাধানটি হ'ল প্রতিটি চরিত্রের জন্য একটি একক এনকোডিংয়ের অনুমতি দেওয়া। ক্যানোনিকালাইজেশন হ'ল প্রতিটি স্ট্রিং ক্যারেক্টারকে এর একক অনুমোদিত এনকোডিংয়ে অনুবাদ করার প্রক্রিয়া। সফ্টওয়্যারটির একটি স্ট্রিং ক্যানোনিকালাইজড হয়েছে কিনা তা নির্ধারণের জন্য একটি বিকল্প এবং তারপরে যদি তা না হয় তবে তা প্রত্যাখ্যান করুন। এই ক্ষেত্রে, একটি ক্লায়েন্ট / সার্ভার প্রসঙ্গে, ক্যানোনিকালাইজেশন ক্লায়েন্টের দায়িত্ব হবে।

সংক্ষেপে, ডেটা জন্য উপস্থাপনের একটি স্ট্যান্ডার্ড ফর্ম। এই ফর্মটি থেকে আপনি আপনার যে কোনও উপস্থাপনের প্রয়োজন তা রূপান্তর করতে পারেন।


64

আমি বিশ্বাস করি ক্যানোনিকাল সম্পর্কিত দুটি সম্পর্কিত ব্যবহার আছে: ফর্ম এবং উদাহরণ।

একটি ক্যানোনিকাল ফর্ম মানে সম্পদ একটি বিশেষ ধরনের মান বর্ণনা যে যাবে বা একাধিক উপায়ে প্রতিনিধিত্ব, এবং যারা উপায়ে হোক্ ক্যানোনিকাল ফর্ম হিসেবে নির্বাচিত করা হয়। (এই ফর্ম 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এনাম টাইপ হন তবে জাভাতে দায়মুক্তি ব্যবহার করতে পারেন । নিজের ক্লাসের জন্য এটি করা অবশ্যই সম্ভব, তবে যত্ন নেয়। বিশদ এবং পরামর্শের জন্য জোশ ব্লচের কার্যকর জাভা পড়ুন ।


31

"ক্যানোনিকাল ফর্ম / প্রতিনিধিত্ব" বোঝার জন্য একটি ভাল উদাহরণ হ'ল "বুলিয়ান" এর এক্সএমএল স্কিমা ডাটাটাইপ সংজ্ঞাটি দেখুন:

  • বুলিয়ান "লেক্সিকাল উপস্থাপনা" এর মধ্যে একটি হতে পারে: {true, false, 1, 0}তবে
  • "আধ্যাত্মিক উপস্থাপনা" কেবল এর মধ্যে একটি হতে পারে {true, false}

এটি, সংক্ষেপে, এর অর্থ

  • "true"এবং "1"ক্যানোনিকাল repr এ ম্যাপ করুন। "true"এবং
  • "false"এবং "0"ক্যানোনাসিয়াল রিপ্রাইজে ম্যাপ করুন।"false"

দেখতে বুলিয়ান-এর জন্য W3 XML স্কিমা ডাটাটাইপ সংজ্ঞা


28

"ক্যানোনিকাল" শব্দটি "স্ট্যান্ডার্ড" বা "স্বাভাবিক" এর প্রতিশব্দ মাত্র। এর কোনও জাভা-নির্দিষ্ট অর্থ নেই।


4
প্রমিত বা স্বাভাবিক আইএমওর চেয়ে ক্যানোনিকালটির আরও অর্থ সমৃদ্ধ।
স্কুইড

20

সাধারণতা হারানো ছাড়াই সবচেয়ে সহজ এবং সবচেয়ে গুরুত্বপূর্ণ আকারে হ্রাস পেয়েছে


5

এটি মনে রাখার একটি সহজ উপায় isতাত্ত্বিক চেনাশোনাগুলিতে যেভাবে "ক্যানোনিকাল" ব্যবহার করা হয় তা হ'ল ক্যানোনিকাল সত্যটি আসল সত্য তাই যদি দু'জন লোক এটি আবিষ্কার করে তবে তারা একই সত্য খুঁজে পেয়েছে। ক্যানোনিকাল উদাহরণ সঙ্গে একই। যদি আপনি ভাবেন যে আপনি তাদের মধ্যে দুটি (অর্থাত্ a.equals(b)) পেয়েছেন আপনার কাছে সত্যই কেবল একটি (অর্থাত্ a == b) রয়েছে। সুতরাং সাম্যতা ক্যানোনিকাল অবজেক্টের ক্ষেত্রে পরিচয় বোঝায়।

এখন তুলনার জন্য। আপনার এখন ব্যবহার a==b বা পছন্দনীয় পছন্দ রয়েছে a.equals(b), যেহেতু তারা ক্যানোনিকাল উদাহরণের ক্ষেত্রে একই উত্তর তৈরি করবে তবে a == বি হল রেফারেন্সের তুলনা (জেভিএম দুটি সংখ্যাকে অত্যন্ত দ্রুত তুলনা করতে পারে কারণ তারা তুলনায় মাত্র দুটি 32 বিট নিদর্শন রয়েছে প্রতিa.equals(b) যা পদ্ধতি কল এবং আরো ওভারহেড জড়িত।


2

আরেকটি ভাল উদাহরণ হতে পারে: আপনার কাছে এমন একটি শ্রেণি রয়েছে যা কার্তেসিয়ান (এক্স, ওয়াই, জেড), গোলাকার (আর, থেটা, ফাই) এবং নলাকার স্থানাঙ্ক (আর, ফাই, জেড) ব্যবহার সমর্থন করে। সাম্য প্রতিষ্ঠার উদ্দেশ্যে (সমান পদ্ধতি), আপনি সম্ভবত সমস্ত উপস্থাপনাগুলি আপনার নির্বাচনের একটি "ক্যানোনিকাল" উপস্থাপনায় রূপান্তর করতে চান, যেমন গোলাকার স্থানাঙ্ক। (অথবা হতে পারে আপনি সাধারণভাবে এটি করতে চান - যেমন একটি অভ্যন্তরীণ উপস্থাপনা ব্যবহার করুন)) আমি একজন বিশেষজ্ঞ নই, তবে এটি আমার পক্ষে সম্ভবত একটি ভাল দৃ concrete় উদাহরণ হিসাবে ঘটেছে।


0

ক্যানোনিকাল উপস্থাপনা মানে চরিত্রটি বিভিন্ন স্টাইলে দেখুন উদাহরণস্বরূপ আমি যদি একটি চিঠি লিখি তবে এর অর্থ অন্য কোনও ব্যক্তি ভিন্ন স্টাইলে এ বর্ণটি লিখতে পারে :)

এটি অপ্টিক্যাল চরিত্রের প্রস্তাবনা ফিল্ড অনুসারে



0

ক্যানোনিকাল ফর্ম সম্পর্কে ওপির প্রশ্নসমূহ এবং equalsপদ্ধতিটির কার্যকারিতা কীভাবে উন্নত করতে পারে সে সম্পর্কে কার্যকর জাভাতে প্রদত্ত উদাহরণকে বাড়িয়ে উভয়ের উত্তর দেওয়া যেতে পারে।

নিম্নলিখিত শ্রেণীর বিবেচনা করুন:

public final class CaseInsensitiveString {

  private final String s;

  public CaseInsensitiveString(String s) {
    this.s = Objects.requireNonNull(s);
  }

  @Override 
  public boolean equals(Object o) {
    return o instanceof CaseInsensitiveString && ((CaseInsensitiveString) o).s.equalsIgnoreCase(s);
  }
}

equalsএই উদাহরণে পদ্ধতি ব্যবহার করে খরচ যোগ করেনি Stringএর equalsIgnoreCaseপদ্ধতি। যেমন লেখাটিতে উল্লেখ করা হয়েছে

সমেত পদ্ধতিটি আরও ব্যয়বহুল নন-মানসম্পন্ন তুলনার পরিবর্তে ক্যানোনিকাল ফর্মের তুলনায় সস্তা সঠিক তুলনা করতে পারে তাই আপনি ক্ষেত্রের একটি প্রমিত রূপ সংরক্ষণ করতে চাইতে পারেন।

জোশুয়া ব্লচ যখন ক্যানোনিকাল ফর্ম বলছেন তখন তার অর্থ কী ? ঠিক আছে, আমি মনে করি ডোনালের সংক্ষিপ্ত উত্তরটি খুব উপযুক্ত। আমরা উদাহরণের মধ্যে অন্তর্নিহিত Stringক্ষেত্রটি CaseInsensitiveStringএকটি স্ট্যান্ডার্ড উপায়ে, সম্ভবত বড় হাতের আকারে সঞ্চয় করতে পারি String। এখন, আপনি এই উল্লেখ করতে পারেন ক্যানোনিকাল ফর্ম এর CaseInsensitiveString, তার বড় হাতের বৈকল্পিক, এবং আপনার সস্তা মূল্যায়ন সঞ্চালন equalshashcodeপদ্ধতি।


0

আরডিবিএমএসে গ্রন্থের ডেটা;
আরডিবিএমএসের একটি ডেটার "নরমালাইজেশন" বা "সাধারণ ফর্ম" হিসাবে ভাবেন। একই তথ্য বিভিন্ন টেবিলগুলিতে বিদ্যমান, একটি অনন্য শনাক্তকারীকে উপস্থাপন করে এবং এটি বিভিন্ন টেবিলগুলিতে ম্যাপ করে।
অথবা
গ্রাফ ডাটাবেসে এমন একটি উপাত্তের একক রূপটি ভাবেন যা বহু ট্রিপলে উপস্থাপন করে।

এর বড় সুবিধা হ'ল ডিএমএল (ডেটা ম্যানিপুলেশন) আরও কার্যকর করা যেহেতু আপনি অনেকের পরিবর্তে কেবলমাত্র একটি মান সন্নিবেশ করতে (সন্নিবেশ / আপডেট) করতে পারবেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.