শ্রেণিভিত্তিক নয় এমন বস্তু-ভিত্তিক প্রোগ্রামিং ভাষা কি বিদ্যমান?


44

ক্লাসের দৃষ্টান্তের ভিত্তিতে এমন কোনও অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজ রয়েছে কি?


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

4
@ কাইলবেন: "ওরিয়েন্টেড" হ'ল একটি অনাবৃত for আপনি বস্তু-ভিত্তিক আচরণে গ্লাসজোন সি করতে পারেন। আপনি সেভাবে ওরিয়েন্টেড হওয়ার দিকে লক্ষ্য রাখতে পারবেন না।
ডেভিড থর্নলি

উত্তর:


74

আমি যতদূর জানি, স্বতন্ত্র মূল ভাষা যা প্রোটোটাইপের উপর ভিত্তি করে "শ্রেণী-মুক্ত" দৃষ্টান্ত আবিষ্কার করেছিল । এটি ইতিমধ্যে ১৯৮০ এর দশকে (একটি পরীক্ষামূলক পর্যায়ে) বিদ্যমান ছিল এবং স্মলটালকের প্রোটোটাইপ প্যাটার্নের মার্জিত ব্যবহারকে চূড়ান্ত দিকে ঠেলে দেয় , যেমন শ্রেণিগুলি সম্পূর্ণরূপে নির্মূল হয়।

এটি আমার পরিচিত অন্যান্য সমস্ত "ক্লাস-মুক্ত" ওও ভাষাগুলিকে প্রভাবিত করেছে:

  • সর্বাধিক সুস্পষ্টভাবে জাভাস্ক্রিপ্ট,
  • ধ্রুপদী প্রোগ্রামিং ভাষা এবং পরিবেশ Squeak (যা স্মার্টটকের শীর্ষে নির্মিত)
  • বহু-দৃষ্টান্তের স্ক্রিপ্টের ভাষা লুয়া

2
@ অ্যাডাম: স্ট্যাটিক টাইপিং ছাড়াই, সব কি কেবল সিনট্যাকটিক চিনি নয়?
কেভিন cline

5
@DeadMG OO যেমন পণ্য ভাষা এক যা আপনি OO যেমন পণ্য ধারনা বাস্তবায়ন করতে সক্ষম হবেন কিন্তু এক যা এটা আপনার জন্য :) করে নয়
পাযত্র Dobrogost

4
প্রকৃতপক্ষে, সিমুলা (১৯ Small০) এবং স্মলটালক-(১ (পাশাপাশি স্মার্টটাক -২২) উভয়েরই ক্লাস ছিল না, যা প্রায় তিন দশক পরে স্বতঃকে পূর্বাভাস দেয়। ক্লাসগুলি কেবল সিমুলা-67 and এবং স্মার্টটাক-74৪ এ যুক্ত করা হয়েছিল (এবং অ্যালান কে এগুলি একটি ভুল, বা আরও স্পষ্টভাবে একটি প্রয়োজনীয় মন্দ হিসাবে বিবেচনা করেছিল)।
Jörg ডব্লু মিটাগ

2
@ কেভিঙ্কলাইন: আপনি কী ভিত্তি করছেন তা নিশ্চিত নয়; ওও এবং স্ট্যাটিক টাইপিং সম্পূর্ণরূপে অর্থেগোনাল।
পল বিগগার

2
সিমুলা ছাড়াও (যা ক্লাসের দৃষ্টান্তটি নিয়েছিল) স্বাদগুলি এমআইটি-তে 1979 সালে চালু হয়েছিল এবং এটি সিএলওএসের পূর্বসূর ছিল, যার দু'জনেই স্বাবলম্বী।
ম্যাথু ফ্লিন

32

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


2
যে কোনও ইসমাস্ক্রিপ্ট বৈকল্পিক প্রোটোটাইপ দৃষ্টান্ত ব্যবহার করে।
zzzzBov

ভাল, প্রায় কোনও বৈকল্পিক। অ্যাকশনস্ক্রিপ্ট (ফ্ল্যাশ ভাষা) ক্লাস ব্যবহার করে, যদিও অন্তর্নিহিত ভিএম প্রোটোটাইপের ক্ষেত্রে এটি প্রয়োগ করতে পারে।
mjfgates

@ এমজেফগেটস, অ্যাকশনসক্রিপট ২ টি ইসমাস্ক্রিপ্ট ভিত্তিক ছিল এবং জাভাস্ক্রিপ্টের সাথে অনেক মিল ছিল। অ্যাকশনস্ক্রিপ্ট 3 এ থেকে সরে যাচ্ছে, তবে এখনও এটির গতিশীল প্রকৃতি রয়েছে। আপনি শক্তিশালী / দুর্বল টাইপ করতে পারেন যে কোনও পরিবর্তনশীল যেহেতু মূলত সবকিছুই একটি অবজেক্ট।
J_A_X

13

বিশ্বের সর্বাধিক জনপ্রিয় অবজেক্ট-ভিত্তিক প্রোগ্রামিং ভাষার ক্লাস নেই, এটি জাভাস্ক্রিপ্ট বলে এবং এটি প্রোটোটাইপ ভিত্তিক: http://en.wikedia.org/wiki/Pototype-based_programming


11
"বিশ্বের সর্বাধিক জনপ্রিয় অবজেক্ট ভিত্তিক প্রোগ্রামিং ভাষা"? আমি এই দাবির বিষয়ে মোটেও নিশ্চিত নই।
টমাস ওয়ানস

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

1
জাভাস্ক্রিপ্ট অবশ্যই বিশ্বের সর্বাধিক ব্যবহৃত প্রোগ্রামিং ল্যাঙ্গুয়েজগুলির মধ্যে একটি, তবে আমি আশা করব যে বেশিরভাগ ব্যবহারগুলি বেশিরভাগ দিক-ভিত্তিক প্রোগ্রামিং (কলব্যাকস? এজেএক্স? ইভেন্ট হ্যান্ডলার?) এর সাথে সম্ভবত পুরানো আবশ্যকীয় বা পদ্ধতিগত হতে হবে expect এবং সেখানে, তাই জাভাস্ক্রিপ্টকে 'সর্বাধিক জনপ্রিয় ওওপি ভাষা' বলা যথেষ্ট ন্যায়সঙ্গত নয়।
tdammers

9
এর জনপ্রিয়তার গুণাগুণ নিয়ে আলোচনার পক্ষপাত করতে আমি সর্বব্যাপীও বলব।
অ্যান্টনি পেগ্রাম

3
@ স্টারগাজের 12১২: আমি ভাষার ধর্মাবলম্বী হতে পছন্দ করি না তবে তিনি দাবি করেন যে "বিশ্বের সর্বাধিক জনপ্রিয় অবজেক্ট-ভিত্তিক প্রোগ্রামিং ভাষা [সম্পাদনা: জাভাস্ক্রিপ্ট] এর ক্লাস নেই"। এটি দুটি দাবির সমাধান হতে পারে: "জাভাস্ক্রিপ্ট সর্বাধিক জনপ্রিয় অবজেক্ট ভিত্তিক প্রোগ্রামিং ভাষা" এবং "জাভাস্ক্রিপ্টের ক্লাস নেই"; উভয়ই, আমি একমত
মিথ্যা রায়ান

6

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

এটি বলেছিল যে বেশিরভাগ ওও ভাষা ক্লাস-ভিত্তিক শিবিরে দৃly়ভাবে রয়েছে। তবে তারপরেও এমন আইডিয়া রয়েছে যা লাইনটি অস্পষ্ট করে তোলে: ডোমেন-চালিত নকশায় প্রায়শই এমন সিস্টেমে বাড়ে যেগুলিতে নির্দিষ্ট বস্তুর পরিচয় স্থিতিক শ্রেণীর ডায়াগ্রামের চেয়ে অনেক বেশি গুরুত্বপূর্ণ এবং সজ্জকরা একই শ্রেণি বা ইন্টারফেসের অবজেক্টগুলিকে খুব সামঞ্জস্য রাখার অনুমতি দেয় বিভিন্ন আচরণ


6

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

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

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


5

১৯৫৫ সালের সংশোধন অনুসারে আডা অবজেক্ট-ওরিয়েন্টেড, তবে অন্যান্য অনেক OO ভাষার মতো এটি অবজেক্ট-ওরিয়েন্টেড টাইপস এবং মডিউলগুলিকে "ক্লাস" নামক একক কনস্ট্রাক্টের সাথে একত্রিত করে না। কোনও ধরণের "শ্রেণি ফু" হিসাবে ঘোষণার পরিবর্তে এবং সম্পর্কিত সম্পর্কিত সমস্ত ঘোষণা ক্লাস ঘোষণার ভিতরে রাখার পরিবর্তে আপনি একটি প্যাকেজ ঘোষণা করেন recordএবং প্যাকেজের ভিতরে টাইপ (ক হিসাবে ) এবং অন্যান্য জিনিস ঘোষণা করেন । এটি উল্লেখ করা অন্যান্য কয়েকটি ভাষার যেভাবে "শ্রেণি-মুক্ত" নয়, জিনিসগুলি সংগঠিত করার এটি কিছুটা আলাদা উপায়।

অ্যাডা 95 এর অবজেক্ট-ভিত্তিক বৈশিষ্ট্যগুলি ভাষার বিদ্যমান 1983 সংস্করণে যুক্ত করা হয়েছিল; এটি উত্তরাধিকার এবং অন্যান্য সমর্থনের জন্য বিদ্যমান রেকর্ড এবং প্যাকেজ নির্মাণগুলি প্রসারিত করেছে।



@ নিককো: প্রতিটি বস্তু-কেন্দ্রিক ভাষায়, এবং পাইথন এবং সিএলওএসে (সাধারণ লিস্প) মোটামুটিভাবে স্পষ্টরূপে পর্দার আড়ালে এটি ঘটে।
মার্সিন

5

আইও হ'ল আরেকটি প্রোটোটাইপ-ভিত্তিক অবজেক্ট-ভিত্তিক ভাষা। এটি ইতিমধ্যে অন্যান্য উত্তরে ইতিমধ্যে উল্লিখিত কয়েকটি ভাষা থেকে অনুপ্রেরণা তৈরি করে।

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


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