মূলধারার শক্তিশালী স্ট্যাটিক ওওপি ভাষাগুলি আদি উত্তরাধিকার সূত্রে বাধা দেয় কেন?


53

কেন এটি ঠিক আছে এবং বেশিরভাগই প্রত্যাশিত:

abstract type Shape
{
   abstract number Area();
}

concrete type Triangle : Shape
{
   concrete number Area()
   {
      //...
   }
}

... যদিও এটি ঠিক নেই এবং কেউ অভিযোগ করেন না:

concrete type Name : string
{
}

concrete type Index : int
{
}

concrete type Quantity : int
{
}

আমার অনুপ্রেরণা সংকলন-সময় নির্ভুলতা যাচাইকরণের জন্য টাইপ সিস্টেমের ব্যবহারকে সর্বাধিকীকরণ করছে।

দ্রষ্টব্য: হ্যাঁ, আমি পড়েছি এই এবং মোড়ানো একটি হল hacky কাজ প্রায়।


1
মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
maple_shaft

এই প্রশ্নে আমারও অনুরূপ প্রেরণা ছিল , আপনি এটি আকর্ষণীয় বলে মনে করতে পারেন।
default.kramer

আমি কোন উত্তর "আপনি উত্তরাধিকার চাই না" ধারণা নিশ্চিত যোগ করার জন্য যাচ্ছিলেন, এবং যে মোড়ানো হয় করব পরামর্শ খুব শক্তিশালী, আপনি অন্তর্নিহিত বা স্পষ্ট ঢালাই (অথবা ব্যর্থতা) আপনার চাই এর যেটা দান সহ, বিশেষ করে জে আই টি JIT optimisations সঙ্গে যাইহোক যাইহোক প্রায় একই কর্মক্ষমতা পান, তবে আপনি এই উত্তরের সাথে লিঙ্ক করেছেন :-) আমি কেবল যুক্ত করব, ভাষাগুলি ফরোয়ার্ডিং বৈশিষ্ট্যগুলি / পদ্ধতিগুলির জন্য প্রয়োজনীয় বয়লারপ্লেট কোড হ্রাস করার জন্য বৈশিষ্ট্যগুলি যুক্ত করা বিশেষত যদি কেবলমাত্র একক মান থাকে তবে এটি ভাল হবে।
মার্ক হারড

উত্তর:


83

আমি ধরে নিচ্ছি আপনি জাভা এবং সি # এর মতো ভাষার কথা ভাবছেন?

সেই ভাষাগুলিতে আদিম (যেমন int) মূলত পারফরম্যান্সের জন্য একটি আপস। তারা বস্তুর সমস্ত বৈশিষ্ট্য সমর্থন করে না, তবে এগুলি দ্রুত এবং কম ওহেডযুক্ত।

উত্তরাধিকারকে সমর্থন করার জন্য অবজেক্টগুলির জন্য, প্রতিটি দৃষ্টান্তটি রানটাইমের সময় "জেনে" নেওয়া উচিত এটি কোন শ্রেণীর উদাহরণ। অন্যথায় ওভাররাইড পদ্ধতিগুলি রানটাইমের সময় সমাধান করা যায় না। বস্তুর জন্য এর অর্থ উদাহরণস্বরূপ ডেটা ক্লাস অবজেক্টের একটি পয়েন্টারের সাথে মেমরিতে সংরক্ষণ করা হয়। যদি এই জাতীয় তথ্যগুলি আদিম মানগুলির সাথেও সংরক্ষণ করা উচিত হয় তবে মেমরির প্রয়োজনীয়তাগুলি বেলুন করে। একটি 16 বিট পূর্ণসংখ্যার মানটির জন্য 16 টি বিট এবং অতিরিক্তভাবে 32 বা 64 বিট মেমরির জন্য তার শ্রেণীর পয়েন্টারের জন্য প্রয়োজন।

মেমরির ওভারহেড ছাড়াও, আপনি পাটিগণিত অপারেটরের মতো আদিমগুলিতে সাধারণ ক্রিয়াকে ওভাররাইড করতে সক্ষম হবেন বলেও আশা করবেন। সাবটিপিং ছাড়াই, অপারেটরগুলির মতো +একটি সাধারণ মেশিন কোড নির্দেশে সংকলন করা যায়। যদি এটি ওভাররাইড করা যায় তবে রানটাইমের সময় আপনাকে পদ্ধতিগুলি সমাধান করতে হবে, এটি আরও অনেক ব্যয়বহুল অপারেশন। (আপনি হয়ত জানেন যে সি # অপারেটর ওভারলোডিংকে সমর্থন করে - তবে এটি একই নয় Ope অপারেটর ওভারলোডিং সংকলনের সময়ে সমাধান করা হয়, তাই কোনও ডিফল্ট রানটাইম পেনাল্টি নেই))

স্ট্রিংগুলি আদিম নয় তবে তারা মেমরিতে কীভাবে উপস্থাপিত হয় সেগুলিতে তারা এখনও "বিশেষ"। উদাহরণস্বরূপ তারা "ইন্টার্নড", যার অর্থ দুটি স্ট্রিং লিটারাল যা সমান হয় একই রেফারেন্সটিতে অনুকূলিত হতে পারে। স্ট্রিংয়ের উদাহরণগুলিও ক্লাসের উপর নজর রাখে যদি এটি সম্ভব হয় না (বা কমপক্ষে অনেক কম কার্যকর)।

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

ভাষা স্মলটক করে (আমি বিশ্বাস করি) পূর্ণসংখ্যার subclassing অনুমতি দেয়। তবে যখন জাভা ডিজাইন করা হয়েছিল, তখন স্মার্টটাককে খুব ধীর বলে বিবেচনা করা হত এবং সমস্ত কিছুকে একটি বস্তু হওয়ার ওভারহেডকে অন্যতম প্রধান কারণ হিসাবে বিবেচনা করা হত। জাভা আরও ভাল পারফরম্যান্স পেতে কিছু কমনীয়তা এবং ধারণাগত বিশুদ্ধতা ত্যাগ করেছিল।


12
@ ডেন: stringসিল করা হয়েছে কারণ এটি পরিবর্তনীয় আচরণের জন্য ডিজাইন করা হয়েছে। যদি কেউ স্ট্রিং থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে তবে পারস্পরিক পরিবর্তনযোগ্য স্ট্রিং তৈরি করা সম্ভব হবে, যা এটি সত্যই ত্রুটির প্রবণ করে তুলবে। .NET ফ্রেমওয়ার্ক নিজেই অন্তর্ভুক্ত প্রচুর কোড, এর কোনও পার্শ্ব-প্রতিক্রিয়া নেই এমন স্ট্রিংয়ের উপর নির্ভর করে। এখানেও দেখুন, আপনাকে একই কথা বলেছে: quora.com/Why-String-class-in-C-is-a-sesel-class
ডক ব্রাউন

5
@DocBrown এই হল কারণ Stringচিহ্নিত করা হয় finalজাভা হিসাবে ভাল।
দেব

47
"যখন জাভা ডিজাইন করা হয়েছিল, তখন স্মার্টটাককে খুব ধীর বলে মনে করা হত […]। আরও ভাল পারফরম্যান্স পেতে জাভা কিছু কমনীয়তা এবং ধারণাগত বিশুদ্ধতা ত্যাগ করেছিল।" - হাস্যকরভাবে, অবশ্যই, জাভা বাস্তবে সেই পারফরম্যান্স অর্জন করতে পারেনি যতক্ষণ না সান স্মার্টটাক ভিএম প্রযুক্তিতে অ্যাক্সেস পেতে একটি স্মলটাল্ক সংস্থা কিনেছিল কারণ সনের নিজস্ব জেভিএম কুকুর ধীর ছিল এবং হটস্পট জেভিএমকে ছেড়ে দিয়েছে, যা সামান্য পরিবর্তিত স্মলটাক ভিএম ছিল।
Jörg ডব্লু মিটাগ

3
@underscore_d: উত্তরটি আপনাকে লিঙ্ক খুব স্পষ্টভাবে বলে যে, C♯ নেই না আদিম ধরনের আছে। অবশ্যই, এমন কিছু প্ল্যাটফর্ম যার জন্য সি'র প্রয়োগ রয়েছে সেখানে আদিম প্রকার থাকতে পারে বা নাও থাকতে পারে, তবে এর অর্থ এই নয় যে সি ♯ এর আদিম ধরণের রয়েছে। উদাহরণস্বরূপ, সিবিএর জন্য রুবীর একটি বাস্তবায়ন রয়েছে, এবং সিএলআইয়ের আদিম প্রকার রয়েছে, তবে এর অর্থ এই নয় যে রুবির আদিম ধরণের রয়েছে। বাস্তবায়ন প্ল্যাটফর্মের আদিম ধরণের মানচিত্রের মাধ্যমে মানের ধরণগুলি প্রয়োগ করতে বা নাও বেছে নিতে পারে তবে এটি একটি ব্যক্তিগত অভ্যন্তরীণ বাস্তবায়ন বিশদ এবং এই অংশটির অংশ নয়।
Jörg ডব্লু মিটাগ

10
এটি সব বিমূর্ততা সম্পর্কে। আমাদের মাথা পরিষ্কার রাখতে হবে, অন্যথায় আমরা আজেবাজেই শেষ করব। উদাহরণস্বরূপ: C♯ .NET এ প্রয়োগ করা হয়। .NET উইন্ডোজ এনটি প্রয়োগ করা হয়। উইন্ডোজ এনটি এক্স 86 এ প্রয়োগ করা হয়েছে। x86 সিলিকন ডাই অক্সাইডে প্রয়োগ করা হয়। SiO₂ স্রেফ বালি। সুতরাং, stringসি মধ্যে একটি শুধু বালি হয়? না, অবশ্যই না, stringসি-এ-তে একটি সি-সি-পি-ই বলে a এটি কীভাবে কার্যকর করা হয় তা অপ্রাসঙ্গিক। সি এর একটি স্থানীয় প্রয়োগ বাইট অ্যারে হিসাবে স্ট্রিংগুলি প্রয়োগ করবে, একটি ইসমাস্ক্রিপ্ট বাস্তবায়ন তাদেরকে String
ইসমাস্ক্রিপ্ট

20

কিছু ভাষার প্রস্তাব যা সাবক্লাসিং নয়, তা সাব টাইপিং । উদাহরণস্বরূপ, অ্যাডা আপনাকে উদ্ভূত প্রকার বা সাব টাইপগুলি তৈরি করতে দেয় । আদা প্রোগ্রামিং / ধরণ সিস্টেম অধ্যায় সব বিস্তারিত বুঝতে পড়া মূল্য। আপনি মানগুলির সীমাটি সীমাবদ্ধ করতে পারেন, যা আপনি বেশিরভাগ সময় চান:

 type Angle is range -10 .. 10;
 type Hours is range 0 .. 23; 

আপনি উভয় প্রকারের পূর্ণসংখ্যা হিসাবে ব্যবহার করতে পারেন যদি আপনি তাদের স্পষ্টভাবে রূপান্তর করেন। এও নোট করুন যে আপনি ব্যাপ্তিগুলি কাঠামোগত সমতুল্য হয়ে গেলেও (প্রকারের নাম দ্বারা পরীক্ষা করা হয়) অন্যটির স্থানে একটি ব্যবহার করতে পারবেন না

 type Reference is Integer;
 type Count is Integer;

উপরের ধরণের মানগুলি একই পরিমাণের প্রতিনিধিত্ব করলেও এটি বেমানান।

(তবে আপনি চেক না করা_ রূপান্তর ব্যবহার করতে পারেন; আমি আপনাকে যা বলেছি লোকেদের বলবেন না)


2
আসলে, আমি মনে করি এটি শব্দার্থবিজ্ঞানের বিষয়ে আরও বেশি। সূচকের প্রত্যাশিত একটি পরিমাণ ব্যবহার করার পরে আশা করা যায় যে একটি সংকলন সময় ত্রুটি
ঘটবে

@ মারজানভেনেমা এটি করে এবং যুক্তি ত্রুটিগুলি সনাক্ত করার উদ্দেশ্যে এটি করা হয়।
coredump

আমার বক্তব্যটি হ'ল যেখানে আপনি শব্দার্থক চান সেখানে সমস্ত ক্ষেত্রেই আপনার রেঞ্জের প্রয়োজন হয় না। আপনার তখন এমনটি হবে type Index is -MAXINT..MAXINT;যা আমার জন্য কোনওভাবে কিছু করে না কারণ সমস্ত পূর্ণসংখ্যাটি বৈধ হবে? সুতরাং কোন ধরণের ত্রুটিটি যদি আমি সূচকে একটি কোণটি পাস করতে পারি তবে যাচাই করা আছে তা যদি সমস্ত ব্যাপ্তি হয়?
মার্জন ভেনেমা

1
@ মারজানভেনেমা তার দ্বিতীয় উদাহরণে উভয় প্রকারের পূর্ণসংখ্যার উপপ্রকার। তবে, আপনি যদি কোনও ক্রিয়া ঘোষণা করেন যা একটি গণনা গ্রহণ করে, আপনি একটি রেফারেন্স পাস করতে পারবেন না কারণ টাইপ চেকিং নামের সমতুল্যের উপর ভিত্তি করে , যা "যাচাই করা সমস্তগুলিই রেঞ্জগুলি" এর বিপরীত। এটি পূর্ণসংখ্যার মধ্যে সীমাবদ্ধ নয়, আপনি অঙ্কিত প্রকার বা রেকর্ড ব্যবহার করতে পারেন। ( সংরক্ষণাগার.এডিক.
coredump

1
@ মারজান কেন ট্যাগিং টাইপগুলি বেশ শক্তিশালী হতে পারে তার একটি দুর্দান্ত উদাহরণ ওসিএমেলে জর্গ বাস্তবায়নের বিষয়ে এরিক লিপার্টের সিরিজে পাওয়া যেতে পারে । এটি করার ফলে সংকলকটি প্রচুর বাগ ধরতে সক্ষম করে - অন্যদিকে আপনি যদি স্পষ্টভাবে ধরণের রূপান্তর করতে চান তবে এটি বৈশিষ্ট্যটিকে অকেজো বলে মনে হচ্ছে .. এটি অর্থে শব্দটি কোনও ব্যক্তির আইড টাইপকে কেবলমাত্র একটি ব্যক্তিগত আইডি টাইপকে নির্ধারিত করতে সক্ষম হবে না doesn't কারণ তাদের উভয় একই অন্তর্নিহিত টাইপ আছে।
ভু

16

আমি মনে করি এটি খুব ভাল একটি এক্স / ওয়াই প্রশ্ন হতে পারে। মুখ্য বিষয়গুলি, প্রশ্ন থেকে ...

আমার অনুপ্রেরণা সংকলন-সময় নির্ভুলতা যাচাইকরণের জন্য টাইপ সিস্টেমের ব্যবহারকে সর্বাধিকীকরণ করছে।

... এবং আপনার মন্তব্য থেকে বিস্তারিত:

আমি নিখুঁতভাবে অন্যের জন্য একটি বিকল্প করতে সক্ষম হতে চাই না।

মাফ করবেন যদি আমি কিছু মিস করছি তবে ... তবে এগুলি যদি আপনার লক্ষ্য হয় তবে পৃথিবীতে কেন আপনি উত্তরাধিকারের কথা বলছেন? অন্তর্নিহিত বিকল্প বদল হ'ল ... যেমন ... এটি সম্পূর্ণ জিনিস। ইয়াকান, লিসকভ সাবস্টিটিউশন নীতি?

বাস্তবে আপনি যা চান বলে মনে করছেন তা হ'ল শক্তিশালী টাইপেইডফের ধারণা - যার মাধ্যমে কিছু 'উদাহরণস্বরূপ intপরিসর এবং উপস্থাপনার ক্ষেত্রে তবে এটি এমন প্রেক্ষাপটে প্রতিস্থাপন করা যায় না যা একটি intবিপরীত প্রত্যাশা করে expect আমি এই পদটিতে এবং আপনার পছন্দসই ভাষা (গুলি) যা কিছু কল করতে পারে তার জন্য অনুসন্ধানের পরামর্শ দেব। আবার এটি আক্ষরিক অর্থে উত্তরাধিকারের বিপরীত।

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

এখানে আরও যুক্ত সমস্যা রয়েছে যে যদি কেউ ইন্টের কাছ থেকে উত্তরাধিকার সূত্রে সক্ষম হয় তবে আপনার কাছে "ইনট এক্স = ওয়াই + 2" (যেখানে ওয়াই ডেরিভেটেড ক্লাস) এর মতো নিষ্পাপ কোড থাকবে যা এখন ডেটাবেসে লগ লিখবে, একটি URL খুলবে এবং কোনওভাবে এলভিসকে পুনরুত্থিত করুন। আদিম ধরণেরগুলি নিরাপদ এবং কম-বেশি গ্যারান্টিযুক্ত, ভাল-সংজ্ঞায়িত আচরণ সহ বলে মনে করা হয়।

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

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


4

ভার্চুয়াল প্রেরণ 8 এর সাথে উত্তরাধিকারের অনুমতি দেওয়ার জন্য যা অ্যাপ্লিকেশন ডিজাইনে প্রায়শই বেশ আকাঙ্ক্ষিত হিসাবে বিবেচিত হয়), একজনের রানটাইম টাইপের তথ্য প্রয়োজন। প্রতিটি বস্তুর জন্য, অবজেক্টের ধরণের সম্পর্কিত কিছু ডেটা সংরক্ষণ করতে হবে। একটি আদিম, প্রতি সংজ্ঞা, এই তথ্যের অভাব রয়েছে।

দুটি (পরিচালিত, একটি ভিএম চালিত) মূলধারার ওওপি ভাষাতে আদিম বৈশিষ্ট্য রয়েছে: সি # এবং জাভা। অনেক অন্যান্য ভাষায় না প্রথম স্থানে প্রিমিটিভের থাকে বা / তাদের অনুমতি তাদের ব্যবহার করার জন্য অনুরূপ যুক্তি ব্যবহার করুন।

অভিনেত্রীগণ পারফরম্যান্সের জন্য একটি আপস। প্রতিটি বস্তুর জন্য আপনাকে এর অবজেক্ট শিরোলেখের জন্য স্থান প্রয়োজন (জাভাতে, সাধারণত *৪-বিট ভিএমএসে 2 * 8 বাইট), এর ক্ষেত্রগুলি, এবং শেষ প্যাডিং (হটস্পটে প্রতিটি বস্তুর একাধিক বাইট রয়েছে যা এর একাধিক 8)। সুতরাং কোনও intঅবজেক্টের জন্য কমপক্ষে 24 বাইট মেমরির প্রয়োজন হবে কেবল 4 বাইটের পরিবর্তে (জাভাতে)।

সুতরাং, কর্মক্ষমতা উন্নত করতে আদিম ধরণের যুক্ত করা হয়েছিল। তারা সম্পূর্ণ অনেক সহজ করে তোলে। a + bউভয়ই সাব টাইপ হলে কী বোঝায় int? সঠিক সংযোজন চয়ন করতে কোনও প্রকার বিপর্যয় যুক্ত করতে হবে। এর অর্থ ভার্চুয়াল প্রেরণ। সংযোজনের জন্য খুব সাধারণ অপকোড ব্যবহার করার ক্ষমতা থাকা অনেক বেশি, দ্রুত এবং সংকলন-সময় অনুকূলিতকরণের জন্য অনুমতি দেয়।

Stringঅন্য মামলা। জাভা এবং সি # উভয়ই Stringএকটি বস্তু। তবে সি # তে এটি সিলড এবং জাভাতে এটি চূড়ান্ত। যেহেতু জাভা এবং সি # স্ট্যান্ডার্ড লাইব্রেরি উভয়ই Stringঅপরিবর্তনীয় হতে হবে এবং সেগুলি সাবক্লাসিং করা এই অপরিবর্তনীয়তাটিকে ভেঙে ফেলবে।

জাভার ক্ষেত্রে, ভিএম আরও ভাল পারফরম্যান্সের অনুমতি দিয়ে ইন্টার্ন স্ট্রিংগুলি এবং "পুল" করতে পারে (এবং করে)। এটি কেবল তখনই কার্যকর হয় যখন স্ট্রিংস সত্যিকার অর্থে পরিবর্তনযোগ্য।

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


1
এই উত্তর হ'ল ... সংকীর্ণ। to allow inheritance, one needs runtime type information.মিথ্যা। For every object, some data regarding the type of the object has to be stored.মিথ্যা। There are two mainstream OOP languages that feature primitives: C# and Java.কী, সি ++ এখন মূলধারার নয়? আমি এটা ব্যবহার করব যতটা আমার খণ্ডন রানটাইম টাইপ তথ্য নেই একটি সি ++ পরিভাষা। এটি ব্যবহার না করা dynamic_castবা একেবারে প্রয়োজন নেই typeid। আর এমনকি যদি RTTI এর উপর, উত্তরাধিকার শুধুমাত্র পরিমাণ হ্রাস করা যদি একটি বর্গ হয়েছে virtualপদ্ধতি যা পদ্ধতির প্রতি বর্গ টেবিল উদাহরণস্বরূপ প্রতি ইঙ্গিত করা আবশ্যক
underscore_d

1
সি ++ এ উত্তরাধিকার পুরোপুরি আলাদা আলাদা তখন কোনও ভিএম-তে চালানো ভাষাগুলিতে কাজ করে। ভার্চুয়াল প্রেরণের জন্য আরটিটিআই দরকার, এটি এমন কিছু যা স্পষ্টতই সি ++ এর অংশ ছিল না। ভার্চুয়াল প্রেরণ ব্যতীত উত্তরাধিকার খুব সীমিত এবং আমিও নিশ্চিত নই যে আপনার এটি ভার্চুয়াল প্রেরণের সাথে উত্তরাধিকারের সাথে তুলনা করা উচিত। তদ্ব্যতীত, "অবজেক্ট" এর ধারণাটি সি ++ তে খুব আলাদা তবে এটি সি # বা জাভাতে। আপনি ঠিক বলেছেন, এমন কিছু জিনিস রয়েছে যা আমি আরও ভাল বলতে পারি, তবে টিবিএইচ বেশিরভাগ জড়িত পয়েন্টগুলিতে gettingুকে পড়লে তাড়াতাড়ি ভাষার নকশায় একটি বই লিখতে পারে।
21

3
এছাড়াও, সি ++ এ "ভার্চুয়াল প্রেরণের জন্য আরটিটিআই প্রয়োজন" এমনটি নয়। আবার, শুধুমাত্র dynamic_castএবং এটি typeinfoপ্রয়োজন। ভার্চুয়াল প্রেরণটি ব্যবহারিকভাবে বস্তুর কংক্রিট শ্রেণীর জন্য ভিটিবেলের একটি পয়েন্টার ব্যবহার করে প্রয়োগ করা হয়, সুতরাং সঠিক ফাংশনগুলি বলা যেতে পারে, তবে এটি আরটিটিআই-র অন্তর্নিহিত টাইপ এবং সম্পর্কের বিশদ প্রয়োজন হয় না। সমস্ত সংকলকটি জানতে হবে যে কোনও অবজেক্টের ক্লাস বহুমুখী কিনা এবং যদি তাই হয় তবে উদাহরণটির ভিপিটিআর কি। এক জাভাস্ক্রিপ্টে গার্বেজ কম্পাইল করতে পারেন কার্যত সঙ্গে ক্লাস প্রেষিত -fno-rtti
আন্ডারস্কোর_ডে

2
এটি অন্যভাবে অন্যদিকে, আরটিটিআইয়ের জন্য ভার্চুয়াল প্রেরণ প্রয়োজন requires আক্ষরিক -C ++ dynamic_castভার্চুয়াল প্রেরণ ছাড়া ক্লাসে অনুমতি দেয় না । বাস্তবায়নের কারণটি হ'ল আরটিটিআই সাধারণত একটি ভেটেবলের গোপন সদস্য হিসাবে প্রয়োগ করা হয়।
এমসাল্টারগুলি

1
@ মাইলসআরআউট সি ++ এর ওওপি-র জন্য একটি ভাষার প্রয়োজনীয় সমস্ত কিছুই রয়েছে, অন্তত কিছুটা নতুন মান। যে কেউ তর্ক করতে পারে যে পুরানো সি ++ মানের কিছু OOP ভাষার জন্য প্রয়োজনীয় জিনিসগুলির অভাব রয়েছে, তবে এটি একটি প্রসারিত। সি ++ একটি উচ্চ স্তরের ওওপি ভাষা নয়, কারণ এটি কিছু জিনিসের উপর আরও সরাসরি, নিম্ন স্তরের নিয়ন্ত্রণের অনুমতি দেয় তবে তা ওওপিটিকে অনুমতি দেয়। (উচ্চ স্তরের / নিম্ন স্তরের বিমূর্ততার ক্ষেত্রে , অন্যান্য ভাষা যেমন পরিচালিত লোকেরা সিস্টেমের আরও বেশি বিমূর্ত করে সি +++ এর পরে তাদের বিমূর্ততা বেশি)।
বহুবিবাহ

4

মূলধারার শক্তিশালী স্ট্যাটিক ওওপি ভাষায়, সাব-টাইপিংকে প্রাথমিকভাবে কোনও প্রকারকে প্রসারিত করার এবং টাইপের বর্তমান পদ্ধতিগুলিকে ওভাররাইড করার উপায় হিসাবে দেখা হয়।

এটি করতে, 'অবজেক্টস' তাদের ধরণের একটি পয়েন্টার ধারণ করে। এটি একটি ওভারহেড: কোনও পদ্ধতিতে কোড যা Shapeপ্রথমে উদাহরণ ব্যবহার করে সেটিকে Area()কল করার সঠিক পদ্ধতিটি জানার আগে সেই উদাহরণের ধরণের তথ্য অ্যাক্সেস করতে হবে।

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

সুতরাং উত্তর:

মূলধারার শক্তিশালী স্ট্যাটিক ওওপি ভাষাগুলি আদি উত্তরাধিকার সূত্রে বাধা দেয় কেন?

হল:

  • চাহিদা কম ছিল
  • এবং এটি ভাষাটিকে খুব ধীর করে দিত
  • সাবটাইপিংকে প্রাথমিকভাবে আরও ভাল (ব্যবহারকারী-সংজ্ঞায়িত) স্ট্যাটিক টাইপ চেকিংয়ের উপায়ের চেয়ে প্রকার প্রসারিত করার উপায় হিসাবে দেখা হত।

তবে, আমরা সেই ভাষাগুলি পেতে শুরু করি যা অন্যান্য 'টাইপ' এর পরে ভেরিয়েবলের বৈশিষ্ট্যের ভিত্তিতে স্থির চেক করার অনুমতি দেয়, উদাহরণস্বরূপ F # এর "মাত্রা" এবং "ইউনিট" রয়েছে যাতে আপনি উদাহরণস্বরূপ কোনও অঞ্চলে একটি দৈর্ঘ্য যুক্ত করতে পারবেন না ।

এমন কিছু ভাষা রয়েছে যা 'ব্যবহারকারী-সংজ্ঞায়িত প্রকারের' মঞ্জুরি দেয় যা কোনও প্রকারের কী পরিবর্তন করে (বা বিনিময়) করে না, তবে কেবল স্থির প্রকারের পরীক্ষায় সহায়তা করে; coredump এর উত্তর দেখুন।


দুর্ভাগ্যক্রমে ভুল নামকরণ করা হলেও পরিমাপের F # ইউনিট একটি দুর্দান্ত বৈশিষ্ট্য। এছাড়াও এটি কেবল সংকলন-সময়, তাই অতি দরকারী নয় যেমন একটি সংকলিত নুগেট প্যাকেজ গ্রহণ করার সময়। সঠিক দিক, যদিও।
ডেন

এটি সম্ভবত আকর্ষণীয় যে "মাত্রা" "'টাইপ' ব্যতীত অন্য কোনও সম্পত্তি" নয়, এটি আপনার ব্যবহারের চেয়ে ধনী ধরণের ধরণের ধরণের মাত্র নয়।
পোরগলজম্প

3

আমি এখানে কিছু উপেক্ষা করছি কিনা তা নিশ্চিত নই, তবে উত্তরটি বরং সহজ:

  1. আদিমগুলির সংজ্ঞাটি হ'ল: আদিম মানগুলি বস্তু নয়, আদিম ধরণগুলি বস্তুর প্রকার নয়, আদিম বস্তু ব্যবস্থার অংশ নয়।
  2. উত্তরাধিকার হ'ল অবজেক্ট সিস্টেমের একটি বৈশিষ্ট্য।
  3. কিন্তু , আদিমরা উত্তরাধিকারে অংশ নিতে পারে না

উল্লেখ্য সত্যিই মাত্র দুটি শক্তিশালী স্ট্যাটিক গলি ভাষা যা এমনকি আছে প্রিমিটিভের, আমি যতদূর জানি: জাভা এবং সি ++। (প্রকৃতপক্ষে, আমি পরবর্তীকালের সম্পর্কেও নিশ্চিত নই, আমি সি ++ সম্পর্কে খুব বেশি জানি না এবং অনুসন্ধানে কী খুঁজে পেয়েছিলাম তা বিভ্রান্তিকর ছিল))

সি ++ এ, আদিমগণ মূলত সি এর উত্তরাধিকারসূত্রে প্রাপ্ত একটি উত্তরাধিকার (শুল্কযুক্ত উদ্দেশ্য) তাই তারা অবজেক্ট সিস্টেমে অংশ নেয় না (এবং এভাবে উত্তরাধিকার) কারণ সি এর কোনও অবজেক্ট সিস্টেম বা উত্তরাধিকার নেই।

জাভাতে, আদিমতাগুলি কর্মক্ষমতা উন্নত করার জন্য একটি বিভ্রান্তিকর চেষ্টার ফলাফল। প্রিমিটিভগুলিও সিস্টেমে একমাত্র মান ধরণের, বাস্তবে জাভাতে মূল্য প্রকারগুলি লেখা অসম্ভব এবং বস্তুর পক্ষে মূল্য প্রকারের পক্ষে এটি অসম্ভব। সুতরাং, আদিম ব্যক্তিরা অবজেক্ট সিস্টেমে অংশ নেয় না এবং এইভাবে "উত্তরাধিকার" ধারণাটিও বোঝা যায় না, এমনকি যদি আপনি তাদের কাছ থেকে উত্তরাধিকারী হন তবে আপনি "বজায় রাখতে সক্ষম হবেন না" মান-অন্তরীপ "। এই যেমন C♯ যা থেকে ভিন্ন করে মান প্রকার (আছে structগুলি), যা তা সত্ত্বেও বস্তু।

আরেকটি বিষয় হ'ল উত্তরাধিকার সূত্রে সক্ষম হওয়া না আদৌ আদিমদের কাছে অনন্য নয়। সি-তে, স্পষ্টতই structউত্তরাধিকার সূত্রে উত্তরাধিকার সূত্রে প্রাপ্ত System.Objectএবং interfaceএর প্রয়োগ করতে পারে তবে তারা classএস বা এস দ্বারা উত্তরাধিকারসূত্রে বা উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে না struct। এছাড়াও, sealed classএগুলি উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে না। জাভাতে, এর final classথেকে উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে না।

tl; dr :

মূলধারার শক্তিশালী স্ট্যাটিক ওওপি ভাষাগুলি আদি উত্তরাধিকার সূত্রে বাধা দেয় কেন?

  1. আদিম বস্তু ব্যবস্থার অংশ নয় (সংজ্ঞা অনুসারে, তারা থাকলে তারা আদিম হবে না), উত্তরাধিকারের ধারণাটি বস্তু ব্যবস্থার সাথে আবদ্ধ থাকে, আদিম উত্তরাধিকার শর্তাবলী একটি দ্বন্দ্ব
  2. আদিমগুলি অনন্য নয়, প্রচুর অন্যান্য ধরণেরও উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে না ( finalবা sealedজাভা বা সি, structসি-তে, case classস্কালায় এস)

3
এহম ... আমি জানি এটি "সি শার্প" উচ্চারিত হয়েছে, তবে, এএইচএম
মিঃ লিস্টার

আমি মনে করি আপনি সি ++ দিক থেকে বেশ ভুল করেছেন। এটি মোটেও খাঁটি ওও ভাষা নয়। ডিফল্টরূপে ক্লাসের পদ্ধতিগুলি নয় virtual, যার অর্থ তারা এলএসপিকে মান্য করে না। উদাহরণস্বরূপ std::stringআদিম নয়, তবে এটি কেবলমাত্র অন্য একটি মান হিসাবে আচরণ করে। এই জাতীয় মান শব্দার্থবিদ্যা বেশ সাধারণ, সি ++ এর সম্পূর্ণ এসটিএল অংশ এটি ধরে নেয়।
এমএসএলটাররা

2
'জাভাতে, আদিমরা পারফরম্যান্সের উন্নতির জন্য একটি ভ্রান্ত পথচেষ্টার ফলাফল।' আমি মনে করি আপনার ব্যবহারকারীর প্রসারণযোগ্য অবজেক্টের ধরণের হিসাবে আদিম প্রয়োগগুলি সম্পাদন করার পারফরম্যান্সের তীব্রতা সম্পর্কে আপনার কোনও ধারণা নেই। জাভাতে এই সিদ্ধান্ত উভয় ইচ্ছাকৃত এবং সুপ্রতিষ্ঠিত। intআপনার প্রতিটি ব্যবহারের জন্য মেমরি বরাদ্দ করার কথা ভাবুন । প্রতিটি বরাদ্দ 100ns প্লাস আবর্জনা সংগ্রহের ওভারহেডের অর্ডার নেয়। দুটি আদিম intগুলি যোগ করে একক সিপিইউ চক্রের সাথে তুলনা করুন । ভাষার ডিজাইনাররা যদি অন্যথায় সিদ্ধান্ত নিয়ে থাকে তবে আপনার জাভা কোডগুলি ক্রল হবে।
cmaster

1
@ মাস্টার: স্কালায় আদিম নেই এবং এর সংখ্যাগত পারফরম্যান্স জাভা-এর মতোই exactly কারণ, ভাল, এটি JVM আদিম intগুলি মধ্যে পূর্ণসংখ্যা সংকলন করে , তাই তারা ঠিক একই সঞ্চালন করে। (স্কালা-নেটিভ তাদের আদিম মেশিন রেজিস্টারে সংকলন করে, স্কালা.জেএস তাদের আদিম ECMAScript গুলিগুলিতে সংকলন করে Number)) রুবির আদিম সংখ্যা নেই, তবে YARV এবং রুবিনিয়াস আদিম মেশিন পূর্ণসংখ্যার সাথে পূর্ণসংখ্যার সংকলন করে, JRuby তাদের JVM আদিম সেগুলিতে সংকলন করে long। খুব সুন্দর প্রতিটি লিস্প, ছোট্টকল, বা রুবি বাস্তবায়ন ভিএম-তে আদিম ব্যবহার করে । সেখানেই পারফরম্যান্স অপ্টিমাইজেশন ...
জার্গ ডব্লু মিটাগ

1
… সম্পর্কিত: সংকলকটিতে, ভাষা নয়।
Jörg ডব্লু মিটাগ

2

জোশুয়া ব্লচ "কার্যকর জাভা" এর উত্তরাধিকারের জন্য সুস্পষ্টভাবে নকশা করার বা এটি নিষিদ্ধ করার পরামর্শ দেয়। আদিম শ্রেণিগুলি উত্তরাধিকারের জন্য নকশাকৃত নয় কারণ এগুলি অপরিবর্তনীয় বলে ডিজাইন করা হয়েছে এবং উত্তরাধিকারের ফলে সাবক্লাসগুলিতে এটি পরিবর্তিত হতে পারে, সুতরাং লিসকোভ নীতিটি ভেঙে যায় এবং এটি অনেকগুলি বাগের উত্স হবে।

যাইহোক, কেন এই একটি হল hacky কার্যসংক্রান্ত? উত্তরাধিকারের তুলনায় আপনার সত্যিকারের রচনা পছন্দ করা উচিত। কারণটি যদি আপনার কোনও বিন্দুর চেয়ে পারফরম্যান্স হয় এবং আপনার প্রশ্নের উত্তর হ'ল জাভাতে সমস্ত বৈশিষ্ট্য স্থাপন করা সম্ভব নয় কারণ কোনও বৈশিষ্ট্য যুক্ত করার সমস্ত ভিন্ন দিক বিশ্লেষণ করতে সময় লাগে। উদাহরণস্বরূপ জাভা 1.5 এর আগে জেনেরিকস ছিল না।

আপনার যদি অনেক ধৈর্য থাকে তবে আপনি ভাগ্যবান কারণ জাভাতে মান ক্লাস যুক্ত করার পরিকল্পনা রয়েছে যা আপনাকে আপনার মান শ্রেণি তৈরি করতে সহায়তা করবে যা আপনাকে কার্যকারিতা বাড়াতে সহায়তা করবে এবং একই সাথে এটি আপনাকে আরও নমনীয়তা দেবে।


2

অ্যাবস্ট্রাক্ট স্তরে, আপনি নিজের পছন্দমতো যে কোনও ভাষা ডিজাইন করছেন এমন ভাষাতে অন্তর্ভুক্ত করতে পারেন।

বাস্তবায়ন স্তরে, এটি অনিবার্য যে those বিষয়গুলির কয়েকটি কার্যকর করা সহজ হবে, কিছু জটিল হবে, কিছুকে দ্রুত করা যায়, কিছু ধীর হতে বাধ্য bound এটির জন্য অ্যাকাউন্ট করতে ডিজাইনারদের প্রায়শই কঠোর সিদ্ধান্ত এবং আপস করতে হয়।

বাস্তবায়ন স্তরে, আমরা একটি ভেরিয়েবল অ্যাক্সেসের জন্য দ্রুততম উপায়গুলির মধ্যে একটি হ'ল এর ঠিকানাটি সন্ধান করা এবং সেই ঠিকানার বিষয়বস্তু লোড করা। ঠিকানাগুলি থেকে ডেটা লোড করার জন্য বেশিরভাগ সিপিইউতে সুনির্দিষ্ট নির্দেশাবলী রয়েছে এবং সেই নির্দেশাবলীর সাধারণত তাদের জানতে হবে যে তাদের কতগুলি বাইট লোড করতে হবে (এক, দুই, চার, আট, ইত্যাদি) এবং তারা যে ডেটা লোড করবেন তা কোথায় রাখবেন (একক নিবন্ধক, নিবন্ধন জোড়া, বর্ধিত রেজিস্টার, অন্যান্য মেমরি ইত্যাদি)। একটি ভেরিয়েবলের আকার জেনে কম্পাইলার ঠিক বুঝতে পারে যে চলকটির ব্যবহারের জন্য কোন নির্দেশ নির্গত করতে হয়। কোনও ভেরিয়েবলের আকার না জেনে সংকলকটির আরও জটিল এবং সম্ভবত ধীর গতির কিছু অবলম্বন করা দরকার।

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

বাস্তবায়ন স্তরে, পূর্বনির্ধারিত আকারের পরিবর্তনশীলটির জন্য অজানা আকারের উদাহরণ ধরে রাখার সহজ উপায় নেই এবং আপনি সাধারণত দক্ষ বলতে চাইলে এমনভাবে প্রবেশ করা যেতে পারে। তবে জিনিসগুলিকে সামান্য দিকে ঘুরিয়ে দেওয়ার এবং ভেরিয়েবলটি অবজেক্টটি সংরক্ষণ না করে ব্যবহার করার উপায় রয়েছে তবে অবজেক্টটি সনাক্ত করতে এবং সেই বস্তুকে অন্য কোথাও সংরক্ষণ করতে দেওয়া যায়। এই উপায়টি একটি রেফারেন্স (যেমন মেমরিের ঠিকানা) - অতিরিক্ত মাত্রার ইন্ডিয়ারেশন যা নিশ্চিত করে যে কোনও ভেরিয়েবলকে কেবল কোনও ধরণের নির্দিষ্ট আকারের তথ্য রাখা দরকার, যতক্ষণ না আমরা সেই তথ্যের মাধ্যমে অবজেক্টটি খুঁজে পাই। এটি অর্জনের জন্য, আমাদের কেবল ঠিকানা (স্থির আকার) লোড করতে হবে এবং তারপরে আমরা অবজেক্টের সেই অফসেটগুলি বৈধ বলে ব্যবহার করে যথাযথভাবে কাজ করতে পারি, এমনকি যদি সেই অবজেক্টের অফসেটগুলিতে আমরা না জানি তবে আরও ডেটা থাকে। আমরা তা করতে পারি কারণ আমরা ডন '

বিমূর্ত স্তরে, এই পদ্ধতিটি আপনাকে একটি (ক এর উল্লেখ) তথ্য পরিবর্তন না stringকরে কোনও objectপরিবর্তনশীল হিসাবে সংরক্ষণ করতে দেয় string। সকল প্রকারের মতো এটি কাজ করা ঠিক আছে এবং আপনি এটিও অনেক দিক থেকে মার্জিত বলতে পারেন।

তবুও, বাস্তবায়ন স্তরে, অতিরিক্ত নির্দেশের অতিরিক্ত স্তরে আরও নির্দেশাবলী জড়িত থাকে এবং বেশিরভাগ আর্কিটেকচারে এটি প্রতিটি অ্যাক্সেসকে কিছুটা ধীর করে তোলে। আপনি যদি আপনার ভাষাতে কিছু সাধারণভাবে ব্যবহৃত ধরণের অতিরিক্ত নির্দেশনা (রেফারেন্স) না রাখেন এমন ভাষাতে অন্তর্ভুক্ত করেন তবে আপনি কোনও প্রোগ্রামের বাইরে সংকলকটিকে আরও কার্য সম্পাদন করতে পারবেন s তবে সেই স্তরটির ইন্ডিয়ারেশানটি সরিয়ে, সংকলক আপনাকে আর কোনও মেমরির নিরাপদ উপায়ে টাইপ করতে দেয় না। কারণ আপনি যদি আপনার টাইপের সাথে আরও ডেটা সদস্য যুক্ত করেন এবং আপনি আরও সাধারণ ধরণের দায়িত্ব অর্পণ করেন তবে লক্ষ্য পরিবর্তকের জন্য বরাদ্দকৃত জায়গাতে ফিট না করে এমন কোনও অতিরিক্ত ডেটা সদস্য কেটে ফেলা হবে।


1

সাধারণভাবে

কোনও শ্রেণি যদি বিমূর্ত (রূপক: ছিদ্র (গুলি) সহ একটি বাক্স) থাকে তবে "গর্ত (গুলি) পূরণ" করার জন্য এটি ঠিক আছে (এমন কি কিছু ব্যবহারযোগ্য!) তাই, আমরা বিমূর্ত ক্লাসগুলি সাবক্লাস করি।

কোনও শ্রেণি যদি কংক্রিট হয় (রূপক: একটি বাক্স পূর্ণ) তবে বিদ্যমানটি পরিবর্তন করা ঠিক হবে না কারণ এটি যদি পূর্ণ হয় তবে এটি পূর্ণ। আমাদের বাক্সের ভিতরে আরও কিছু যুক্ত করার জায়গা নেই, এ কারণেই আমাদের সাবক্লাস কংক্রিটের ক্লাস করা উচিত নয়।

আদিম সঙ্গে

প্রাইমেটিভগুলি নকশার ভিত্তিতে কংক্রিট ক্লাস। তারা এমন কিছু উপস্থাপন করে যা সুপরিচিত, পুরোপুরি সুনির্দিষ্ট (আমি কোনও বিমূর্ত কিছু দিয়ে কোনও আদিম ধরণ দেখিনি, অন্যথায় এটি আর কোনও আদিম নয়) এবং সিস্টেমের মাধ্যমে ব্যাপকভাবে ব্যবহৃত হয়। একটি আদিম ধরণের সাবক্লাসকে অনুমতি দেওয়া এবং অন্যদের কাছে আপনার নিজস্ব বাস্তবায়ন সরবরাহ করা যা আদিমদের নকশা করা আচরণের উপর নির্ভর করে প্রচুর পার্শ্ব-প্রতিক্রিয়া এবং বিশাল ক্ষতির কারণ হতে পারে!



লিঙ্কটি একটি আকর্ষণীয় ডিজাইনের মতামত। আমার জন্য আরও চিন্তাভাবনা করা দরকার।
ডেন

1

সাধারণত উত্তরাধিকার হ'ল শব্দার্থক শব্দগুলি আপনি চান না কারণ আপনি যে কোনও প্রকারের আশা করা যায় সেখানে আপনার বিশেষ ধরণের স্থান পরিবর্তন করতে পারবেন না। আপনার উদাহরণ থেকে ধার নিতে, একটি Quantity + Indexঅর্থহীনভাবে কোনও ধারণা দেয় না, সুতরাং উত্তরাধিকারের সম্পর্কটি ভুল সম্পর্ক।

তবে বেশ কয়েকটি ভাষায় একটি মান ধরণের ধারণা রয়েছে যা আপনি যে ধরনের সম্পর্কের বর্ণনা দিচ্ছেন তা প্রকাশ করে। স্কেলা একটি উদাহরণ। একটি মান ধরণের অন্তর্নিহিত উপস্থাপনা হিসাবে আদিম ব্যবহার করে তবে বাইরের দিকে আলাদা শ্রেণি পরিচয় এবং ক্রিয়াকলাপ রয়েছে। এটি আদিম ধরণের প্রসারিত করার প্রভাব ফেলেছে, তবে এটি উত্তরাধিকার সম্পর্কের পরিবর্তে আরও একটি রচনা।

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