উত্তরাধিকার ছাড়া কোনও ওও ভাষা আছে কি?


22

আজ একটি কোড পর্যালোচনা চলাকালীন, আমার এক সহকর্মী আকর্ষণীয় কিছু বলেছেন:

prototypeযখন আপনার উত্তরাধিকার প্রয়োজন তখনই কার্যকর - এবং কখনই উত্তরাধিকারের কোনও ভাল ধারণা পাওয়া যায় ?

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

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


7
আপনার সহকর্মী আপনাকে বিপথগামী করেছে। prototypeএছাড়াও আপনি পাবলিক পদ্ধতি এবং বৈশিষ্ট্য যে দৃষ্টান্ত মধ্যে ভাগ করা উচিত আছে জন্য দরকারী। এছাড়া দরকারী কারণ এটি আপনি সঠিকভাবে ব্যবহার করার অনুমতি দেয় instanceofজাভাস্ক্রিপ্ট মধ্যে অপারেটর: if (foo instanceof Foo) { ...
গ্রেগ বার্গার্ট

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

6
রচনাটিকে প্রাধান্য দেওয়ার অর্থ এই নয় যে উত্তরাধিকার সম্পূর্ণভাবে ত্যাগ করা ভাল ধারণা।
কালেব

5
বাস্তবায়নের উত্তরাধিকার ছাড়াই জাভা দেখুন : "গুগল গো এমন একটি ভাষার উদাহরণ যা ওওপি থাকাকালীন বাস্তবায়ন উত্তরাধিকারকে ছাড়িয়ে যায় ..."
gnat

1
@ গ্রেগবার্গার্ড্ট একই সাথে একটি ফ্যাক্টরি ফাংশন সম্পন্ন করা যেতে পারে যা ফাংশন সম্বলিত কোনও বস্তু ফেরত দেয় (বন্ধে ব্যক্তিগত ডেটা সংরক্ষণ করে)। new, thisএবং prototypeসমস্ত সাধারণ আইএমও ব্যবহারের জন্য মাইনফিল্ড much
বেনিয়ামিন হজসন 21

উত্তর:


18

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের সংজ্ঞা প্রশ্নকে একপাশে রেখে প্রশ্নটি একটি হয়ে যায় "এমন ভাষা কি আছে যা কেবল রচনা ব্যবহার করে এবং উত্তরাধিকারের জন্য কোন সরঞ্জাম নেই?"

এর উত্তরটি বেশ সহজভাবে "হ্যাঁ"। চলতে চলতে, উত্তরাধিকার করার কোনও উপায় নেই যেহেতু একজন ক্লাসিকভাবে এটিকে ভাবেন। একটি অন্য অবজেক্টে একটি বস্তুকে এম্বেড করতে পারে এবং সেই বস্তুটি প্রসারিত করতে পারে। থেকে অবজেক্ট Desoriented ভাষা ( GitHub আয়না ):

type Person struct {
        Name string
}

func (p *Person) Intro() string {
        return p.Name
}

type Woman struct {
        Person
}

func (w *Woman) Intro() string {
        return "Mrs. " + w.Person.Intro()
}

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

এ সম্পর্কে আরও GoLang টিউটোরিয়ালে দেখা যায় : উত্তরাধিকারী এবং গো মধ্যে সাবক্লাসিং - বা এর কাছাকাছি মিল

সুতরাং হ্যাঁ, উত্তরাধিকার ছাড়াই কোনও OO ভাষা পাওয়া সম্ভব এবং এর একটিও বিদ্যমান।

গো-এর মধ্যে এটি এম্বেডিং হিসাবে পরিচিত এবং ঘেরযুক্ত কাঠামোগুলি এমবেডেড ক্ষেত্রগুলি এবং ফাংশনগুলিতে অ্যাক্সেস করার ক্ষমতা দেয় যেমন এটিতে রয়েছে - তবে এটি একটি সাবক্লাস নয়। নকশার দর্শনটি গো এফএকিউতে পাওয়া যাবে : কোনও ধরণের উত্তরাধিকার কেন নেই?


সি typedefও এর ব্যবহার সম্পর্কেও কেউ মন্তব্য করতে পারে struct...
cwallenpoole

@ cwallenpoole সেখানে আসলে একই ধরণের ধারণা রয়েছে, যদিও আমি সিটিকে অবজেক্ট ওরিয়েন্টেড ভাষা বলতে দ্বিধা করব।

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

@ কেওয়ালেনপুল এবং আমরা উত্তরাধিকার কী এবং অবজেক্ট ওরিয়েন্টেশন কী তা নির্ধারণ করতে শুরু করি। কিন্তু এটা হয় তার ঠিক সমস্যাটি সম্পর্কে চিন্তা অন্যভাবে সম্ভব। জিনিসটি হ'ল উত্তরাধিকার হ'ল বেশিরভাগ সি ++ এবং জাভা প্রগ্রেমারগুলি বর্ধনের কথা ভাবেন ... তবে অন্য মডেলগুলিও রয়েছে। উত্তরাধিকার ছাড়াই এক্সটেনশন: 1 , 2 , 3 ভাল পঠিত।

"অবজেক্ট ডিজঅ্যারেন্টেড ল্যাঙ্গুয়েজ" -র লিঙ্কটি এই মুহূর্তে একটি পুনর্নির্দেশ লুপের মধ্যে আটকে আছে তবে আমি এখানে নিবন্ধটি পেয়েছি: github.com/nu7hatch/areyoufuckingcoding.me/blob/master/content/… । ধন্যবাদ!
ম্যাট ব্রাউন 13

7

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

এটি মাইক্রোসফ্ট অফিস এবং অন্যান্য ভিবিএ-সক্ষম হোস্টগুলিতে (যেমন অটোক্যাড, সেজ 300 ইআরপি, ইত্যাদি), এমনকি ভিবি 6 এর এম্বেড করা - অ্যাপ্লিকেশনগুলির জন্য ভিজ্যুয়াল বেসিক - এমনকি ভিবিএর বর্ণনার মতো পড়তে পারে। "বেসিক" এর "এ" যাইহোক "সর্ব-উদ্দেশ্য" এর জন্য দাঁড়িয়েছে, সুতরাং "সাধারণ-উদ্দেশ্য" অংশ রয়েছে there's

ভিবি / / ভিবিএর ক্লাস (এবং সেইজন্য অবজেক্টস), পদ্ধতি এবং ইন্টারফেস রয়েছে - আপনি ISomethingকোনও ক্লাস মডিউলে একটি ইন্টারফেসটিকে এভাবে সংজ্ঞায়িত করতে পারেন:

Option Explicit

Public Sub DoSomething()
End Sub

এবং তারপরে আরও একটি ক্লাস রয়েছে যা এটি করে:

Option Explicit
Implements ISomething

Private Sub ISomething_DoSomething()
    'implementation here
End Sub

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

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

যদি গো শ্রেণীর উত্তরাধিকার না করে এবং তবুও ওওপি ভাষা হয় তবে আমি দেখতে পাচ্ছি না কেন ভিবি 6 / ভিবিএকেও ওওপি ভাষা হিসাবে বিবেচনা করা যায় না।</PreemptiveResponseToVBAHatersThatWillSayItIsNotAnOOPLanguage>


1
পরিষ্কার বলতে গেলে ওপি আধুনিক ভাষা সম্পর্কে জিজ্ঞাসা করেছিলেন । =;) -
রাবারডাক

@ রাবারডাক # বার্ন!
ম্যাথিউ গুইন্ডন

0

আপনি ব্যক্তিগত / সুরক্ষিত ব্যবহারের মাধ্যমে এবং "পিআইএমপিএল" বা "বেসরকারী বাস্তবায়ন" কৌশলগুলির আধুনিক ব্যবহারের মাধ্যমে সংকলক নির্বাচনী উত্তরাধিকার প্রয়োগ করতে পারেন।

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

জাভাস্ক্রিপ্টে প্রাইভেট সদস্য ফাংশনগুলির জন্য তাত্ক্ষণিক অনুসন্ধানে একই জাতীয় নীতি রয়েছে, যদিও আপনার কোডটি যদি কেউ এটিকে ব্যবহার করতে পারেন তবে তা দেখতে পারেন: http://www.crockford.com/javascript/private.html

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