উত্তর:
সাধারণভাবে, একটি মোড়কের ক্লাসটি এমন কোনও শ্রেণি যা অন্য শ্রেণি বা উপাদানগুলির কার্যকারিতা "মোড়ক" বা "এনপ্যাপুলেট করে"। অন্তর্নিহিত শ্রেণি বা উপাদান প্রয়োগ থেকে বিমূর্ততার একটি স্তর সরবরাহ করে এগুলি কার্যকর; উদাহরণস্বরূপ, COM উপাদানগুলি মোড়ানো মোড়কের ক্লাসগুলি কলিং কোডটিকে বিরক্ত না করে COM উপাদানটি আহ্বানের প্রক্রিয়া পরিচালনা করতে পারে। তারা জড়িত সংখ্যার ইন্টারফেস পয়েন্টগুলি হ্রাস করে অন্তর্নিহিত অবজেক্টের ব্যবহারকে সহজ করতে পারে; প্রায়শই, এটি অন্তর্নিহিত উপাদানগুলির আরও সুরক্ষিত ব্যবহারের জন্য তৈরি করে।
এটির মতো যা শোনাচ্ছে: একটি শ্রেণি যা অন্য শ্রেণীর বা এপিআইয়ের কার্যকারিতা একটি "সরল বা নিছক আলাদা" এপিআইতে "মোড়ানো"।
মোড়কের ক্লাসগুলি আদিম ধরণের জিনিসগুলি হিসাবে ব্যবহার করার একটি উপায় সরবরাহ করে। প্রতিটি আদিম জন্য, আমাদের একটি র্যাপার ক্লাস যেমন,
int Integer
byte Byte
পূর্ণসংখ্যা এবং বাইট আদিম অভ্যন্তরীণ এবং বাইটের মোড়কের ক্লাস। এমন সময় / সীমাবদ্ধতা রয়েছে যখন আপনাকে আদিম পদার্থ হিসাবে ব্যবহার করতে হবে তাই মোড়ক ক্লাসগুলি বক্সিং / আনবক্সিং নামে পরিচিত একটি প্রক্রিয়া সরবরাহ করে।
নিম্নলিখিত উদাহরণটি দ্বারা ধারণাটি ভালভাবে বোঝা যায়
double d = 135.0 d;
Double doubleWrapper = new Double(d);
int integerValue = doubleWrapper.intValue();
byte byteValue = doubleWrapper.byteValue();
string stringValue = doubleWrapper.stringValue();
সুতরাং এই উপায়, আমরা অন্যান্য আদিম ধরণের রূপান্তর করতে র্যাপার শ্রেণির ধরণটি ব্যবহার করতে পারি। এই ধরণের রূপান্তরটি যখন আপনি কোনও আদিম ধরণের রূপান্তর করতে প্রয়োজন হয় এবং অন্য আদিম জিনিসগুলি পেতে তাদের ব্যবহার করতে পারেন this এই পদ্ধতির জন্য আপনাকে একটি বড় কোড লিখতে হবে। যাইহোক, সাধারণ কাস্টিং কৌশল দ্বারা একই অর্জন করা যেতে পারে যেহেতু নীচের মতো কোড স্নিপেট অর্জন করা যেতে পারে
double d = 135.0;
int integerValue = (int) d ;
যদিও দ্বিগুণ মান স্পষ্টভাবে পূর্ণসংখ্যার মানতে রূপান্তরিত হয় একে ডাউনকাস্টিং হিসাবেও ডাকা হয়।
একটি মোড়কের ক্লাসে অন্য ক্লাসটি আবশ্যকভাবে প্রয়োজন হয় না। এটি একটি API ক্লাস মোড়ানোর কার্যকারিতা হতে পারে যেমন একটি dll ফাইল।
উদাহরণস্বরূপ, এটি একটি ডেল র্যাপার ক্লাস তৈরি করা খুব কার্যকর হতে পারে যা সমস্ত ডিএল ইনিশিয়ালাইজেশন এবং ক্লিনআপের যত্ন নেয় এবং ক্লাসের পদ্ধতিগুলি তৈরি করে যা ফাংশন পয়েন্টারগুলিকে উদাহরণস্বরূপ তৈরি করে eg GetProcAddress()
।
চিয়ার্স!
একটি মোড়কের ক্লাস এমন একটি শ্রেণি যা তার নামের মতো অন্য কোনও কিছুকে "মোড়ানো" করে।
এর আরও আনুষ্ঠানিক সংজ্ঞাটি এমন একটি শ্রেণি হবে যা অ্যাডাপ্টার প্যাটার্নটি প্রয়োগ করে । এটি আপনাকে এপিআইয়ের একটি সেটকে আরও ব্যবহারযোগ্য, পঠনযোগ্য ফর্মে রূপান্তর করতে দেয়। উদাহরণস্বরূপ, সি # তে, আপনি যদি দেশীয় উইন্ডোজ এপিআই ব্যবহার করতে চান, এটি এটিকে এমন একটি শ্রেণিতে আবৃত করতে সহায়তা করে যা। নেট নকশা নির্দেশিকাগুলির সাথে সামঞ্জস্য করে।
বেশ কয়েকটি ডিজাইনের নিদর্শন রয়েছে যা র্যাপার ক্লাস বলা যেতে পারে।
" প্রক্সি, ডেকরেটার, অ্যাডাপ্টার এবং ব্রিজ প্যাটার্নগুলি কীভাবে পৃথক হয়? " এর আমার উত্তর দেখুন ?
এটি উল্লেখ করাও মূল্যবান হতে পারে যে কিছু পরিবেশে, র্যাপার ক্লাসগুলি যা করতে পারে তার অনেকগুলি দিক দ্বারা প্রতিস্থাপন করা হচ্ছে।
সম্পাদনা করুন:
সাধারণত একটি মোড়ক র্যাপ্পি কীভাবে তা প্রসারিত করতে চলেছে, র্যাপ্পি বাস্তবায়নের বিষয়ে উদ্বিগ্ন না হয়ে, অন্যথায় মোড়কে থাকা শ্রেণীর প্রসারিত করার তুলনায় মোড়কের কোনও লাভ নেই। একটি সাধারণ উদাহরণ হ'ল সময়সীমার তথ্য বা অন্য কোনও পরিষেবা ইন্টারফেসের চারপাশে লগিং কার্যকারিতা যুক্ত করা, এটি সেই ইন্টারফেসের প্রতিটি প্রয়োগে যুক্ত করার বিপরীতে।
এরপরে এটি অ্যাসপেক্ট প্রোগ্রামিংয়ের জন্য আদর্শ উদাহরণ হিসাবে শেষ হয়। ইন্টারফেস ফাংশনটি ফাংশন দিয়ে যাওয়ার পরিবর্তে এবং বয়লারপ্লেট লগিং যুক্ত করার পরিবর্তে দিকনির্ধারণের প্রোগ্রামিংয়ে আপনি পয়েন্টকুটটি সংজ্ঞায়িত করেন যা পদ্ধতিগুলির জন্য একধরনের নিয়মিত অভিব্যক্তি, এবং তারপরে বা সমস্ত পদ্ধতির সাথে ম্যাচের আগে বা তার চারপাশে যে পদ্ধতিগুলি কার্যকর করতে চান তা ঘোষণা করুন পয়েন্টকুট এটি সম্ভবত সঠিকভাবে বলা যায় যে আসপ প্রোগ্রামিং হ'ল ডেকরেটর প্যাটার্নের এক ধরণের ব্যবহার, যা র্যাপার ক্লাসগুলির জন্যও ব্যবহার করা যেতে পারে তবে উভয় প্রযুক্তিরই অন্যান্য ব্যবহার রয়েছে।
মোড়ক ক্লাস এমন একটি শ্রেণি যা অন্য শ্রেণিকে আবৃত করে এবং ক্লায়েন্ট এবং আসল ক্লাসের মোড়কের বিমূর্ততা সরবরাহ করে।
একটি মোড়কের ক্লাস সাধারণত একটি শ্রেণি যা একটি ব্যক্তিগত সম্পত্তি হিসাবে একটি বিষয় আছে has মোড়ক প্রাইভেট অবজেক্টের এপিআই প্রয়োগ করে এবং তাই এটি আর্গুমেন্ট হিসাবে পাস করা যেতে পারে যেখানে ব্যক্তিগত অবজেক্টটি object
বলুন যে আপনার কাছে একটি সংগ্রহ রয়েছে এবং আপনি যখন কোনও বস্তু এতে যুক্ত করা হয় তখন আপনি কোনও প্রকারের অনুবাদ ব্যবহার করতে চান - আপনি একটি র্যাপার ক্লাস লেখেন যাতে সংগ্রহের সমস্ত পদ্ধতি রয়েছে। যখন অ্যাড () বলা হয়, মোড়কগুলি ব্যক্তিগত সংগ্রহগুলিতে কেবল তাদের পাস করার পরিবর্তে তর্কগুলি অনুবাদ করে।
সংগ্রহটি যে কোনও স্থানে ব্যবহার করা যেতে পারে, এবং ব্যক্তিগত অবজেক্টটিতে এখনও এটি ব্যবহার করে এবং পড়তে পারা যায়।
একটি মোড়কের ক্লাস এমন একটি ক্লাস যা ক্লায়েন্ট এবং আসল ক্লাসের মোড়কের মধ্যবর্তী দিক এবং বিমূর্ততার একটি স্তর যুক্ত করতে অন্য শ্রেণিকে মোড়ানোর জন্য ব্যবহৃত হয়।
মোড়কের ক্লাসটি একটি আদিম ডেটা ধরণের চারপাশে একটি মোড়ক। এটি তাদের সম্পর্কিত বর্গের উদাহরণগুলিতে আদিম ডেটা উপস্থাপন করে যেমন একটি বুলিয়ান ডেটা টাইপ বুলিয়ান শ্রেণীর উদাহরণ হিসাবে উপস্থাপন করা যেতে পারে। জাভাতে আদিম মোড়কের ক্লাসগুলির সবগুলিই অপরিবর্তনীয় অর্থাৎ একবার মুদ্রার শ্রেণীর উদাহরণের জন্য একটি মান নির্ধারিত হয়ে গেলে আর পরিবর্তন করা যায় না।
জাভা প্রোগ্রামিং প্রতিটি আদিম তথ্য প্রকারের জন্য মোড়কের ক্লাস সরবরাহ করে, একটি আদিম তথ্য প্রকারকে র্যাপার শ্রেণির সাথে সম্পর্কিত করে রূপান্তর করতে।
প্রোগ্রামারদের একটি মৌলিক প্রয়োজনীয়তা পূরণের জন্য মোড়ক ক্লাসগুলি অস্তিত্ব লাভ করেছিল - যেমন যেখানে কেবলমাত্র অবজেক্টের অনুমতি রয়েছে সেখানে আদিম মান ব্যবহার করা। তাদের নাম অনুসারে মোড়ক ক্লাসগুলি একটি আদিম মানেরকে ঘিরে রাখে এবং মানটিকে কোনও অবজেক্টে ধরে রাখে। সুতরাং, সেই সমস্ত জায়গাগুলিতে যেখানে আদিমদের অনুমতি দেওয়া হয়নি - যেমন জেনেরিকস, হ্যাশম্যাপ-কি, অ্যারেলিস্টস ইত্যাদি - প্রোগ্রামারগুলির কাছে এখন তাদের প্রাসঙ্গিক মোড়কের ধরণের হিসাবে এই আদিম মানগুলি সরবরাহ করার বিকল্প রয়েছে।
এছাড়াও এই মোড়কের ধরণের প্রিমিটিভ টাইপ থেকে অনুরূপ র্যাপার প্রকার এবং পিছনে এবং স্ট্রিংস থেকে মোড়কের ধরণের এবং পিছনে রূপান্তর করার জন্য অনেকগুলি ইউটিলিটি পদ্ধতি রয়েছে।
আমি আমার ব্লগে মোড়কের ক্লাস সম্পর্কিত একটি বিস্তারিত নিবন্ধ লিখেছি যা গভীরভাবে র্যাপারের ধরণের ধারণাটি ব্যাখ্যা করে - http://www.javabrahman.com/corejava/java-wrapper-classes-tutorial-with-example/ (প্রকাশ - এই ব্লগটি আমার মালিকানাধীন)
আমি বর্তমানে আমার প্রকল্পের জন্য একটি র্যাপার ক্লাস ব্যবহার করেছি এবং আমি প্রাপ্ত মূল বেনিফিটগুলি (বিষয়টির ব্যাখ্যাকে প্রশস্ত করতে কেবল একটি একক উপকার):
ব্যতিক্রম হ্যান্ডলিং: আমার প্রধান বর্গটি, যে অন্য শ্রেণীর মোড়ক রয়েছে, এমন পদ্ধতি রয়েছে যা যদি ঘটে থাকে তবে ব্যতিক্রম ছুঁড়ে মারছে, তাই আমি একটি মোড়কের ক্লাস তৈরি করেছি যা ব্যতিক্রমগুলি পরিচালনা করে এবং ততক্ষনে তাদের লগ করে। সুতরাং, আমার মূল সুযোগে, ব্যতিক্রম হ্যান্ডলিং নেই। আমি কেবল একটি পদ্ধতি কল করি এবং কিছু করি।
সহজ ব্যবহার: আমি সহজেই বস্তুটি শুরু করতে পারি। সাধারণত ধাপের ধাপটি প্রচুর পদক্ষেপে নির্মিত হয়।
কোড পঠনযোগ্যতা: অন্য প্রোগ্রামার যখন আমার কোড খুলবে, কোডটি খুব পরিষ্কার এবং ম্যানিপুলেট করা সহজ মনে হবে।
বিবরণ গোপন করা: আপনি যদি এমন কোনও ক্লাস তৈরি করে যা অন্য কোনও প্রোগ্রামার ব্যবহার করছে, তবে আপনি "ত্রুটি পরিচালনা, ব্যতিক্রম হ্যান্ডলিং, লগিং বার্তাগুলি এবং ইত্যাদি ..." এর মতো বিশদটি গুটিয়ে রাখতে পারেন যাতে প্রোগ্রামারটিকে পরিচালনা করতে না হয় বিশৃঙ্খলা, কেবল সহজভাবে পদ্ধতিগুলি ব্যবহার করে।
একটি মোড়কের ক্লাস এমন একটি শ্রেণি যা কোনও কিছু রাখা এবং এর সাথে কিছু কার্যকারিতা যুক্ত করার একমাত্র উদ্দেশ্য পরিবেশন করে। জাভাতে যেহেতু আদিম (যেমন অন্তর্নিহিত, ভাসমান, চর ...) বস্তু নয় তাই আপনি যদি তাদের সাথে একটির মতো আচরণ করতে চান তবে আপনাকে একটি র্যাপার ক্লাস ব্যবহার করতে হবে। ধরুন আপনি কীটের একটি ভেক্টর তৈরি করতে চান, সমস্যাটি একটি ভেক্টর কেবলমাত্র বস্তুগুলিকে আদিম নয় holds সুতরাং আপনি যা করবেন তা হ'ল সমস্ত ইন্টিজ একটি পূর্ণসংখ্যার মোড়কে রাখুন এবং এটি ব্যবহার করুন। উদাহরণ:
int number = 5;
Integer numberWrapped = new Integer(number);
//now you have the int in an object.
//and this is how to access the int value that is being wrapped.
int again = numberWrapped.intValue();
একটি মোড়ক ক্লাস যা বিভিন্ন প্ল্যাটফর্মের মধ্যে দুটি পৃথক অ্যাপ্লিকেশন মধ্যে যোগাযোগ করতে ব্যবহৃত হয়