যদি কোনও গতিশীল প্রেরণ (পলিমারফিজম) না থাকে, তবে "পদ্ধতি" কেবল সুগারযুক্ত ফাংশন, সম্ভবত একটি অন্তর্নিহিত অতিরিক্ত পরামিতি সহ। তদনুসারে, বহুগুণীয় আচরণবিহীন ক্লাসগুলির উদাহরণ struct
কোড জেনারেশনের উদ্দেশ্যে মূলত সি এস।
স্ট্যাটিক টাইপ সিস্টেমে ধ্রুপদী গতিশীল প্রেরণের জন্য মূলত একটি প্রধান কৌশল: ভিটিবেল। প্রতিটি উদাহরণ একটি অতিরিক্ত পয়েন্টার পায় যা তার ধরণের (এর সীমাবদ্ধ উপস্থাপনা) বোঝায়, সবচেয়ে গুরুত্বপূর্ণভাবে vtable: ফাংশন পয়েন্টারগুলির একটি অ্যারে, প্রতি পদ্ধতিতে একটি। যেহেতু প্রতিটি ধরণের (উত্তরাধিকার শৃঙ্খলে) সম্পূর্ণ পদ্ধতির সম্পূর্ণ সেটটি সংকলন সময়ে জানা যায়, তাই পদ্ধতিগুলির জন্য একের পর এক সূচকগুলি (0..N) নির্ধারণ করা যায় এবং এতে ফাংশন পয়েন্টারটি অনুসন্ধান করে পদ্ধতিগুলির জন্য অনুরোধ করতে পারেন এই সূচকটি ব্যবহার করে ভেটেবল (আবার অতিরিক্ত পরামিতি হিসাবে উদাহরণটি রেফারেন্সটি পাস করা হবে)।
আরও গতিশীল শ্রেণিবদ্ধ ভাষার জন্য, সাধারণত ক্লাসগুলি নিজেরাই প্রথম শ্রেণীর অবজেক্ট এবং প্রতিটি বস্তুর পরিবর্তে এর শ্রেণি অবজেক্টের রেফারেন্স থাকে। ক্লাস অবজেক্ট, পরিবর্তে কিছু ভাষা নির্ভর পদ্ধতিতে পদ্ধতিগুলির মালিক হয় (রুবিতে, পদ্ধতিগুলি বস্তু মডেলের মূল অংশ, পাইথনে তারা কেবল চারপাশে ছোট ছোট মোড়কযুক্ত ফাংশন অবজেক্ট)। ক্লাসগুলি সাধারণত তাদের সুপারক্লাসের (রেডিও) রেফারেন্সগুলি সঞ্চয় করে এবং উত্তরাধিকার সূত্রে প্রাপ্ত পদ্ধতিগুলি অনুসন্ধানের জন্য এই শ্রেণিগুলিতে রূপান্তর করে যা রূপান্তরকে সহায়তা করে যা পদ্ধতিগুলিকে যুক্ত করে এবং পরিবর্তিত করে।
আরও অনেক সিস্টেম রয়েছে যা ক্লাসের ভিত্তিতে নয়, তবে এগুলির মধ্যে উল্লেখযোগ্য পার্থক্য রয়েছে, সুতরাং আমি কেবল একটি আকর্ষণীয় নকশার বিকল্পটি বেছে নেব: যখন আপনি প্রোগ্রামের যে কোনও জায়গায় ইচ্ছামত সমস্ত প্রকারে নতুন (সেট) পদ্ধতি যুক্ত করতে পারবেন ( উদাহরণস্বরূপ, হাস্কেল-এ টাইপ ক্লাস এবং জং এর বৈশিষ্ট্য), সংকলনের সময় পদ্ধতিগুলির সম্পূর্ণ সেটটি জানা যায়নি। এটি সমাধানের জন্য, কেউ বৈশিষ্ট্য অনুসারে একটি vtable তৈরি করে এবং যখন বৈশিষ্ট্য প্রয়োগের প্রয়োজন হয় তখন এগুলি পাশ করে দেয়। এটি হচ্ছে কোড এর মতো:
void needs_a_trait(SomeTrait &x) { x.method2(1); }
ConcreteType x = ...;
needs_a_trait(x);
এটিতে সংকলিত হয়:
functionpointer SomeTrait_ConcreteType_vtable[] = { &method1, &method2, ... };
void needs_a_trait(void *x, functionpointer vtable[]) { vtable[1](x, 1); }
ConcreteType x = ...;
needs_a_trait(x, SomeTrait_ConcreteType_vtable);
এর অর্থ হ'ল ভিটেবল তথ্যটি বস্তুটিতে এম্বেড করা হয়নি। আপনি যদি এমন কোনও "বৈশিষ্ট্যের উদাহরণ" উল্লেখ করতে চান যা সঠিকভাবে আচরণ করবে যখন উদাহরণস্বরূপ, ডেটা স্ট্রাকচারে সঞ্চিত যা বিভিন্ন ধরণের থাকে, কোনও ফ্যাট পয়েন্টার তৈরি করতে পারে (instance_pointer, trait_vtable)
। এটি আসলে উপরের কৌশলটির একটি সাধারণীকরণ।