Call super
কল সুপার হল কিছু অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ভাষার একটি কোড গন্ধ বা অ্যান্টি-প্যাটার্ন। কল সুপার একটি নকশা প্যাটার্ন যেখানে একটি নির্দিষ্ট শ্রেণী নির্ধারণ করে যে একটি উদ্ভূত উপশ্রেণীতে, ব্যবহারকারীকে একটি পদ্ধতি ওভাররাইড করতে হবে এবং একটি নির্দিষ্ট বিন্দুতে ওভাররাইড করা ফাংশনটি নিজেই কল করতে হবে। ওভাররাইড পদ্ধতিটি ইচ্ছাকৃতভাবে অসম্পূর্ণ হতে পারে এবং নির্ধারিত পদ্ধতিতে এর কার্যকারিতা বাড়ানোর জন্য ওভাররাইডিং পদ্ধতির উপর নির্ভরশীল হতে পারে। যাইহোক, ভাষা নিজেই এই আহ্বানের উপর নির্ধারিত সমস্ত শর্ত প্রয়োগ করতে সক্ষম নাও হতে পারে যা এটিকে একটি অ্যান্টি-প্যাটার্ন করে তোলে। অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং-এ, ব্যবহারকারীরা সাবক্লাসে একটি সুপারক্লাসের বৈশিষ্ট্য এবং আচরণ উত্তরাধিকার সূত্রে পেতে পারেন। একটি সাবক্লাস তার সুপারক্লাসের পদ্ধতিগুলিকে অগ্রাহ্য করতে পারে, সুপারক্লাসের বাস্তবায়নের জন্য পদ্ধতির নিজস্ব প্রয়োগকে প্রতিস্থাপন করে। কখনও কখনও ওভাররাইডিং পদ্ধতি সুপারক্লাসের সংশ্লিষ্ট কার্যকারিতাকে সম্পূর্ণরূপে প্রতিস্থাপন করবে, অন্য ক্ষেত্রে সুপারক্লাসের পদ্ধতিটি এখনও ওভাররাইডিং পদ্ধতি থেকে কল করা আবশ্যক। অতএব, বেশিরভাগ প্রোগ্রামিং ভাষাগুলির জন্য প্রয়োজন যে একটি ওভাররাইডিং পদ্ধতিটি কার্যকর করার জন্য অবশ্যই সুপারক্লাসের উপর স্পষ্টভাবে ওভাররাইড পদ্ধতিটি কল করতে হবে। কল সুপার অ্যান্টি-প্যাটার্ন একটি নির্দিষ্ট শ্রেণী থেকে একটি সাবক্লাস বের করার জন্য একটি ইন্টারফেস বা কাঠামোর ব্যবহারকারীদের উপর নির্ভর করে, একটি নির্দিষ্ট পদ্ধতিকে ওভাররাইড করে এবং ওভাররাইডিং পদ্ধতি থেকে মূল পদ্ধতিকে কল করার জন্য ওভাররাইড পদ্ধতির প্রয়োজন হয়ঃ এটি প্রায়শই প্রয়োজন হয়, যেহেতু সুপারক্লাসকে সঠিকভাবে কাজ করার জন্য শ্রেণী বা কাঠামোর জন্য কিছু সেটআপ কাজ সম্পাদন করতে হবে, অথবা যেহেতু সুপারক্লাসের প্রধান কাজ (যা এই পদ্ধতি দ্বারা সম্পাদিত হয়) শুধুমাত্র সাবক্লাস দ্বারা বর্ধিত হয়। অ্যান্টি-প্যাটার্ন হল পিতামাতাকে কল করা। বাস্তব কোডে এমন অনেক উদাহরণ রয়েছে যেখানে উপশ্রেণীর পদ্ধতিটি এখনও সুপারক্লাসের কার্যকারিতা চাইতে পারে, সাধারণত যেখানে এটি শুধুমাত্র মূল কার্যকারিতা বৃদ্ধি করে। কার্যকারিতা সম্পূর্ণরূপে প্রতিস্থাপন করা সত্ত্বেও যদি এটি এখনও প্যারেন্ট ক্লাসকে কল করতে হয়, তবে অ্যান্টি-প্যাটার্ন উপস্থিত থাকে। এই সমস্যাগুলি সমাধানের জন্য একটি ভাল পদ্ধতি হল টেমপ্লেট পদ্ধতির প্যাটার্ন ব্যবহার করা, যেখানে সুপারক্লাসে একটি বিশুদ্ধ বিমূর্ত পদ্ধতি অন্তর্ভুক্ত থাকে যা অবশ্যই সাবক্লাস দ্বারা প্রয়োগ করা উচিত এবং মূল পদ্ধতিটিকে সেই পদ্ধতি বলা উচিতঃ ভাষার বৈচিত্র্য প্রোগ্রামগুলিতে এই অ্যান্টি-প্যাটার্নের উপস্থিতি সাধারণত কারণ কয়েকটি প্রোগ্রামিং ভাষা চুক্তিগতভাবে নিশ্চিত করার জন্য একটি বৈশিষ্ট্য সরবরাহ করে যে একটি সুপার পদ্ধতি একটি উদ্ভূত শ্রেণী থেকে ডাকা হয়। একটি ভাষা যার এই বৈশিষ্ট্যটি রয়েছে, বেশ আমূল ফ্যাশনে, সেটি হল বিটা। এই বৈশিষ্ট্যটি জাভা এবং সি + +-এর মতো সীমিত উপায়ে পাওয়া যায়, যেখানে একটি চাইল্ড ক্লাস কনস্ট্রাক্টর সর্বদা প্যারেন্ট ক্লাস কনস্ট্রাক্টরকে কল করে। যে ভাষাগুলি পদ্ধতির আগে এবং পরে সমর্থন করে, যেমন কমন লিস্প (বিশেষত কমন লিস্প অবজেক্ট সিস্টেম), এই অ্যান্টি-প্যাটার্ন এড়ানোর জন্য একটি ভিন্ন উপায় প্রদান করে। সাবক্লাসের প্রোগ্রামার সুপারক্লাসের পদ্ধতিকে অগ্রাহ্য করার পরিবর্তে একটি অতিরিক্ত পদ্ধতি সরবরাহ করতে পারেন যা সুপারক্লাসের পদ্ধতির আগে বা পরে কার্যকর করা হবে। এছাড়াও, সুপারক্লাসের প্রোগ্রামার সাবক্লাসের ক্রিয়াকলাপের পাশাপাশি কার্যকর হওয়ার নিশ্চয়তা দেওয়া পদ্ধতিগুলির আগে, পরে এবং আশেপাশে নির্দিষ্ট করতে পারেন। উদাহরণস্বরূপ ধরুন একটি ভিডিও ভাড়া দোকানের তালিকা সম্পর্কে একটি প্রতিবেদন তৈরি করার জন্য একটি শ্রেণী রয়েছে। প্রতিটি নির্দিষ্ট দোকানে বর্তমানে উপলব্ধ ভিডিওগুলি ট্যাবুলেট করার একটি ভিন্ন উপায় রয়েছে, তবে চূড়ান্ত প্রতিবেদন তৈরির অ্যালগরিদম সমস্ত স্টোরের জন্য একই। একটি কাঠামো যা কল সুপার অ্যান্টি-প্যাটার্ন ব্যবহার করে তা নিম্নলিখিত বিমূর্ত শ্রেণী প্রদান করতে পারে (সি #-এ): বিমূর্ত শ্রেণী রিপোর্ট জেনারেটর {পাবলিক ভার্চ্যুয়াল রিপোর্ট ক্রিয়েট রিপোর্ট () {// জেনারেল রিপোর্ট অবজেক্ট তৈরি করুন//. নতুন রিপোর্ট ফেরত দিন (.);} এই শ্রেণীর একজন ব্যবহারকারী এই ধরনের একটি উপশ্রেণী প্রয়োগ করবেন বলে আশা করা হচ্ছেঃ শ্রেণী কংক্রিট রিপোর্ট জেনারেটরঃ রিপোর্ট জেনারেটর {পাবলিক ওভাররাইড রিপোর্ট ক্রিয়েট রিপোর্ট () {// স্টোর-নির্দিষ্ট উপায়ে ট্যাবুলেট ডেটা/////এই শ্রেণীর নকশার জন্য প্যারেন্ট ক্রিয়েট রিপোর্ট () ফাংশনকে ওভাররাইড ফাংশনের// শেষে কল করা প্রয়োজন। কিন্তু মনে রাখবেন যে এই লাইনটি সহজেই বাদ দেওয়া যেতে পারে, অথবা// ফিরে আসা রিপোর্টটি কলের পরে আরও সংশোধন করা যেতে পারে, যা ক্লাস ডিজাইন// এবং সম্ভবত কোম্পানি-ব্যাপী রিপোর্টের বিন্যাসও লঙ্ঘন করে। রিটার্ন base.CreateReport ();} একটি পছন্দসই ইন্টারফেস দেখতে এই রকমঃ বিমূর্ত শ্রেণী রিপোর্টজেনেরেটর {পাবলিক রিপোর্ট ক্রিয়েটরিপোর্ট () {ট্যাবুলেট ();// সাধারণ রিপোর্ট অবজেক্ট তৈরি করুন//. নতুন রিপোর্ট ফেরত দিন (.);} সুরক্ষিত বিমূর্ত অকার্যকর ট্যাবুলেট ();} একটি বাস্তবায়ন এই শ্রেণীকে এভাবে ওভাররাইড করবেঃ শ্রেণী কংক্রিটরিপোর্টজেনেরেটরঃ রিপোর্টজেনেরেটর {সংরক্ষিত অকার্যকর ট্যাবুলেট () {// ট্যাবুলেট ডেটা স্টোর-নির্দিষ্ট উপায়ে//।