কীভাবে ওওপি “অবজেক্টস” এবং “ক্লাস” সমাবেশের ভাষার ক্ষেত্রে মেমোরিতে সংগঠিত করা হয়?


13

স্মৃতিতে কীভাবে বস্তুগুলি সংগঠিত হয়?

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

তবে অবজেক্টগুলি আরও জটিল কাঠামো। তারা কিভাবে সংগঠিত হয়? প্রতিটি বস্তুর কি পদ্ধতির "লিঙ্ক" রয়েছে এবং সেই পদ্ধতিতে নিজের ঠিকানাটি পাস করে?

এই বিষয়টির একটি ভাল ব্যাখ্যা দেখে দুর্দান্ত লাগবে।

UPD। আমি প্রশ্নটি আরও নির্ভুল করে তুলেছি এবং আমি মূলত ভাষাগুলি স্ট্যাটিকালি টাইপ করতে আগ্রহী।


4
এটি বিভিন্ন ভাষার মধ্যে বিশেষত গতিময় টাইপ করা এবং স্ট্যাটিকালি টাইপ করা ভাষার মধ্যে বিভিন্নভাবে পরিবর্তিত হতে পারে। আপনি যে প্রশ্নটি সবচেয়ে বেশি আগ্রহী সেগুলি কী আপনি নিজের প্রশ্নকে সংকীর্ণ করতে পারেন?
বার্ট ভ্যান ইনজেন শেনাও

আমি প্রশ্নটি আপডেট করেছি, তাই ডাইনামিকালি টাইপ করা ভাষাগুলি বোঝা শক্ত বলে আমি মনে করি।
নিকোলাই গোলুব

উত্তর:


17

যদি কোনও গতিশীল প্রেরণ (পলিমারফিজম) না থাকে, তবে "পদ্ধতি" কেবল সুগারযুক্ত ফাংশন, সম্ভবত একটি অন্তর্নিহিত অতিরিক্ত পরামিতি সহ। তদনুসারে, বহুগুণীয় আচরণবিহীন ক্লাসগুলির উদাহরণ 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)। এটি আসলে উপরের কৌশলটির একটি সাধারণীকরণ।


5

প্রবাদটির অর্থে এটির উত্তর "যদি আপনি কোনও লোককে একটি মাছ দেন তবে আপনি তাকে একদিনের জন্য খাওয়ান, আপনি যদি তাকে মাছের শিখিয়ে থাকেন তবে আপনি তাকে আজীবন খাওয়াবেন" কারণ আপনার প্রশ্নটি খুব বিস্তৃত

1. গবেষণা মুক্ত তথ্য উত্স

গুগল "এসেম্বলি অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং" এর জন্য বিভিন্ন বিভিন্ন প্রাসঙ্গিক সংস্থান তালিকাবদ্ধ করে।

উদাহরণস্বরূপ , অ্যাসেম্বলিতে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং, ইথান জে এলড্রিজ, ১৫ ই ডিসেম্বর, ২০১১ তৃতীয় লিঙ্ক হিসাবে এসেছিল এবং দেখতে সুন্দর দেখাচ্ছে

2. বিদ্যমান হাতে লিখিত কোড থেকে শিখুন

আপনি দেখতে পারেন কীভাবে ওওপি-র সাথে স্পষ্টভাবে ঘোষিত উদাহরণ সহ কয়েকটি জনপ্রিয় অ্যাসেম্বলি ভাষার সাথে লিখিত উত্স কোডগুলি অধ্যয়ন করে works

৩. সংকলক দ্বারা উত্পাদিত কোড নিদর্শনগুলি থেকে শিখুন

আপনি দেখতে পারেন যে এটি আপনার পছন্দের ওওপি সংকলক দ্বারা উত্পাদিত মধ্যবর্তী সংসদীয় ভাষা ফাইলগুলি অধ্যয়ন করে কীভাবে কাজ করে। সি ++ এবং ফ্রিপ্যাস্কল উভয় সংকলকই কনফিগার করা যেতে পারে যাতে আপনি দেখতে পারেন যে উচ্চ স্তরের ওওপি কোডটিকে অ্যাসেম্বলি ভাষার কোডে প্রতিলিপিটি কেমন দেখাচ্ছে

৪. আপনার সাধারণ জ্ঞান দিয়ে ধাঁধাটি সমাধান করুন

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

নিজেকে জিজ্ঞাসা করুন: "আমি কীভাবে এটি বাস্তবায়ন করব?"

আপনার মনের মধ্যে ব্যাকগ্রাউন্ড-চিন্তা প্রক্রিয়াটি বেশ কয়েক দিন পরে চলার পরে এবং বেশ কয়েকটি কাগজ খসড়া ডিজাইন ফেলে দেওয়ার পরে আপনি দেখতে পাবেন যে সমাধান আপনি নিয়ে এসেছেন ঠিক তেমনই অন্য প্রোগ্রামাররা যে সমাধানটি নিয়ে এসেছেন এবং ইতিমধ্যে এটি প্রয়োগ করেছেন


এখন আমার উত্তর মতামত ভিত্তিক, ওপির প্রশ্নের সরাসরি উত্তর দেয় না এবং প্রবীণ উচ্চ-প্রতিনিধি ব্যবহারকারীরা নির্দ্বিধায় আমাকে নিচে নামাতে পারেন

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