মেসেজ পাসিং হ'ল একটি অবজেক্টের অন্য কিছু (বা সম্ভাব্য নিজেই) কিছু পাওয়ার জন্য ওও কোডের প্রয়োজনীয়তা হ্যান্ডল করার একটি ভিন্ন উপায়।
বেশিরভাগ আধুনিক ভাষাগুলিতে যে সি ++ পদ্ধতির থেকে অবতরণ হয় আমরা সেই পদ্ধতি কল দিয়েই করি। এক্ষেত্রে কথিত অবজেক্টটি (তার শ্রেণি সংজ্ঞার মাধ্যমে) কোন পদ্ধতিটি এটি গ্রহণ করে তার একটি বড় তালিকা রেখে দেয় এবং তারপরে কলিং অবজেক্টের কোডার কেবল কলটি লিখবে:
public void doSomething ( String input )
...
other_object.dosomething ( local )
স্ট্যাটিকালি টাইপ করা ভাষার জন্য কম্পাইলার তারপরে যাকে বলা হচ্ছে তার প্রকারটি পরীক্ষা করে পরীক্ষা পদ্ধতিটি ঘোষিত হয়েছে তা নিশ্চিত করতে পারে। গতিসম্পন্ন টাইপ করা ভাষার জন্য এটি রানটাইম সময়ে চালিত হয়।
তবে সংক্ষেপে যা হয় তা হ'ল ভেরিয়েবলগুলির একটি বান্ডিল কোডের একটি নির্দিষ্ট ব্লকে প্রেরণ করা হয়।
বার্তা পাস হচ্ছে
পদ্ধতির পরিবর্তে বার্তাগুলি পাস করার ভাষায় (যেমন উদ্দেশ্য সি) সেখানে পুনরুদ্ধারকারী রয়েছে, তবে মূলত তাদের সংজ্ঞা দেওয়ার এবং তাদের কল করার পদ্ধতির দিকটি অনেকটা একই। পার্থক্যটি হ্যান্ডল করার পদ্ধতি is
কে একটি বার্তা পাস ভাষায় কম্পাইলার পারে চেক করুন যে রিসিভার যে আপনার ডেকেছে বিদ্যমান, কিন্তু সবচেয়ে খারাপ তা একটি সতর্কবার্তা পপ আপ এটা নিশ্চিত নয় যে তার বলার আছে হবে। এটি কারণ চলমান সময়ে যা ঘটবে তা হ'ল গ্রাহক অবজেক্টের কোডের একটি ব্লককে ভেরিয়েবলের বান্ডিল এবং যে কলটি আপনি কল করতে চান তার স্বাক্ষর উভয়কেই বলা হবে। কোডের সেই ব্লকটি তখন রিসিভারের সন্ধান করে এবং কল করে। তবে যদি রিসিভারটি না থাকে তবে কোডটি কেবল একটি ডিফল্ট মান প্রদান করবে।
ফলস্বরূপ সি ++ / জাভা থেকে সরানোর সময় একটির অদ্ভুততা পাওয়া যায় -> উদ্দেশ্য সি বুঝতে পারে যে আপনি যে কোনও কম্পাইল-টাইম টাইপের উপরে ঘোষণা করা হয়নি এমন কোনও জিনিসে "পদ্ধতি বলতে পারেন", এবং এমনকি এটির উপস্থিতি নেই didn't রান-টাইম টাইপ ... এবং যে কলটি ব্যতিক্রম ছুঁড়ে ফেলার ফলস্বরূপ ফল দেয় না তবে প্রকৃতপক্ষে ফলাফলটি পাস হয়ে যায়।
এই পদ্ধতির সুবিধাগুলি হ'ল এটি সাবক্লাস হায়ারাকিকে সমতল করে এবং ইন্টারফেস / একাধিক উত্তরাধিকার / হাঁসের ধরণের প্রয়োজনগুলির বেশিরভাগ এড়িয়ে চলে। এটি বস্তুকে ডিফল্ট আচরণ সংজ্ঞায়িত করার অনুমতি দেয় যখন তাদের কোনও রিসিভার নেই এমন কিছু করার কথা জিজ্ঞাসা করা হয় (সাধারণত "যদি আমি এটি না করি তবে অনুরোধটি এই অন্য অবজেক্টে প্রেরণ করুন")। এটি কলব্যাকগুলির সাথে লিঙ্কিংকে সহজতর করতে পারে (যেমন ইউআই উপাদান এবং সময়সীমার ইভেন্টগুলির জন্য) বিশেষত জাভা হিসাবে স্ট্যাটিকালি টাইপ করা ভাষাগুলিতে (যাতে আপনি অভ্যন্তরীণ শ্রেণিতে "অ্যাকশনপ্রফোর্ড" পদ্ধতিটি কল করার পরিবর্তে রিসিভারটিকে "রানটেষ্ট" বোতামটি কল করতে পারেন) "রানটেষ্টবটনলাইজনার" যা আপনাকে কল করে)।
তবে এটি বিকাশকারী কর্তৃক অতিরিক্ত চেকিংয়ের প্রয়োজনীয়তার জন্য ব্যয় হবে বলে মনে হয় যে তারা যে কলটি করছেন বলে মনে করছেন তারা সঠিক বস্তুটির সাথে সঠিক টাইপ সহ সঠিক পরামিতিগুলি যথাযথভাবে প্রেরণ করছে, কারণ সংকলকটি এটি না পারে আপনাকে সতর্ক করে দিন এবং এটি রানটাইমের সময় পুরোপুরি ভালভাবে চলবে (কেবলমাত্র একটি ডিফল্ট প্রতিক্রিয়া ফিরিয়ে দেবে)। অতিরিক্ত চেহারা-পরামিতি এবং প্যারামিটার পাসিং থেকে বিতর্কিত পারফরম্যান্সও রয়েছে।
এই দিনগুলিতে গতিশীলভাবে টাইপ করা ভাষাগুলি কম সমস্যার সাথে ওও কেটে যাওয়া বার্তার অনেক সুবিধা দিতে পারে।