গো-এর মতো ভাষার উপর ক্লাসিক ওওপির সুবিধা


13

আমি ভাষা নকশা এবং "আদর্শ" প্রোগ্রামিং ভাষার জন্য কী উপাদানগুলির প্রয়োজনীয়তার বিষয়ে অনেক চিন্তাভাবনা করেছি এবং গুগলের গো অধ্যয়ন আমাকে অন্যথায় সাধারণ জ্ঞানের উপর প্রশ্নবিদ্ধ করেছিল।

বিশেষতঃ গো-র কাছে মনে হয় অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের সমস্ত আকর্ষণীয় উপকারিতা আসলে কোনও অবজেক্ট ওরিয়েন্টেড ভাষার কাঠামো না করেই রয়েছে । এখানে কোনও শ্রেণি নেই, কেবল কাঠামো রয়েছে; কোনও শ্রেণি / কাঠামোর উত্তরাধিকার নেই - কেবল কাঠামো এম্বেডিং। এখানে কোন শ্রেণিবিন্যাস নেই, কোনও পিতামাতার ক্লাস নেই, স্পষ্ট ইন্টারফেস বাস্তবায়ন নেই। পরিবর্তে, টাইপ ingালাইয়ের নিয়মগুলি হাঁস-টাইপিংয়ের মতোই আলগা সিস্টেমের উপর ভিত্তি করে তৈরি করা হয়, যদি কোনও কাঠামো "পাঠক" বা "অনুরোধ" বা "এনকোডিং" এর প্রয়োজনীয় উপাদানগুলি প্রয়োগ করে, তবে আপনি এটি কাস্ট করতে পারেন এবং এটি ব্যবহার করতে পারেন এক হিসাবে.

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

এডিআইটি
"অপ্রচলিত" প্রশ্নটি সরান যা পাঠকদের মনে হয় অতিরিক্ত মাত্রায় ঝুলিয়ে দেওয়া হয়েছে এবং এতে ক্ষুব্ধ হয়েছেন।

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


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

1
আপনি যখন ওওপির জন্য গুগল মারা গেছেন তখন কিছু আকর্ষণীয় পঠন রয়েছে । আমি সুপারিশ করি
ওয়েপ

ওওপিতে এমন একটি সামান্য মান রয়েছে যে এটি আপনার সময় নষ্ট করার মতো নয়।
এসকে-যুক্তি

1
আমি আগের মন্তব্যে একমত হয়েছি ওওপি-তে খুব বেশি মনোনিবেশ করি না। OOP ছাড়াও C ++ বা জাভা বোঝায় না। Lt.org.org এ অডিট পড়ার চেষ্টা করুন
অ্যান্ড্রেসচেইনার্ট

সি ++, জাভা এবং সি # কোনও "ক্লাসিক" ওওপি ভাষা নয়। যদি কোনও ক্লাসিক ওওপি ভাষা থাকে তবে আমি মনে করি এটি ছোট্ট টাল্ক।
কেভিন ক্লাইন

উত্তর:


16

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

এই বৈশিষ্ট্যগুলি সরবরাহ করে এমন অনেক ভাষার ক্লাস ধারণার অ্যানালগ নেই - উদাহরণস্বরূপ জাভাস্ক্রিপ্ট এবং কমন লিস্প। জাভা-জাতীয় ভাষার দ্বারা সরবরাহকৃত বাস্তবায়ন (শ্রেণিভিত্তিক, একক উত্তরাধিকার, ইন্টারফেস, টাইপ-ভিত্তিক প্রেরণ সহ) কেবলমাত্র সম্ভাবনার মধ্যে একটি এবং এটি সর্বোত্তম নয় not


11
"অগত্যা সেরাটি নয়" এর জন্য +1। অ্যালান কেয়ের উদ্ধৃতি দিয়ে: "আমি অবজেক্ট-ওরিয়েন্টড শব্দটি উদ্ভাবন করেছি এবং আমি আপনাকে বলতে পারি যে আমার মনে সি ++ ছিল না।" (তার কাছে সি # এবং / অথবা
জাভাও ছিল না

1
@ এর মাধ্যমে আমি এটি দেখেছি যে এজেন্ট-সিস্টেমগুলি (এরলং কীভাবে কাজ করে তার অনুরূপ) ওওপি-র জন্য অ্যালান কেয়ের অন্তর্নিহিত উদ্দেশ্যটির আরও নিকটবর্তী।
কোডেক্সআর্কানিয়াম

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

হ্যাঁ, আমি যা বোঝাতে চেয়েছি তা হল এটির জাভা অর্থে ক্লাস নেই
Andrea

5

এই নতুন দৃষ্টান্তটি উপস্থাপন করে যে সরলতা উপস্থাপন করার জন্য আপনার কী সুবিধা ছেড়ে দিতে হবে?

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

এই জাতীয় ব্যবস্থা কি ওওপির ধারণাটি অচল করে দেয়?

না আপনি যতক্ষণ না প্রোগ্রামের নির্দেশাবলী, বা বিধিবিধানের একটি ঘোষিত সেট, বা ক্র্যাকসিডিং সিরিজের ক্রিয়াকলাপের পরিবর্তে 'জিনিসগুলি যে জিনিসগুলি করেন' এর শর্তে তৈরি করতে পারেন ... বাস্তবায়নের কোনও বিষয় নেই। তেমনি, টাইপ সিস্টেম পরিবর্তন করা কোনও সাধারণ ওও নীতিকে অকার্যকর করে না।

আপনি এখনও বেস ধরণের উপর কাজ করতে পারেন এবং এর প্রকৃত প্রকারের বিষয়ে যত্ন নেই। আপনি এখনও ধরণের পরিবর্তন না করে প্রসারিত করতে পারেন। আপনি এখনও একটি ধরণের কেবল একটি কাজ করতে পারেন। আপনি এখনও সূক্ষ্ম দানযুক্ত ইন্টারফেস সরবরাহ করতে পারেন। আপনি এখনও আপনার ধরণের বিমূর্ততা সরবরাহ করতে পারেন।

কোনও ভাষা কীভাবে এটি অনুমোদন করে তা বাস্তবিক বিবেচনা করে না।


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

4

আমি মনে করি ওওপি সম্পর্কে আপনার ধারণাটি কিছুটা বন্ধ off

আমি 'অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং' শব্দটি উদ্ভাবন করেছি এবং এই {জাভা এবং সি ++ mind আমার মনে নেই।
- অ্যালান কে

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

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

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


2
প্রশ্ন ধারণার সাথে সম্পর্কিত, পদটি প্রয়োজনীয় নয়। আপনি যদি শ্রেণি শ্রেণিবিন্যাসের ধারণা এবং এর সাথে আগত সমস্ত ট্রিমিংয়ের কথা উল্লেখ করতে "OOP" এর চেয়ে আরও ভাল নাম নিয়ে আসতে পারেন তবে আমরা তার পরিবর্তে এটি ব্যবহার করতে পারি।
টাইলার

@ ইয়লার: আপনি কমপক্ষে দুটি প্রশ্নকে একটিতে বিভ্রান্ত করছেন। একটি, কাঠামোগত সাব টাইপিং নমিনিটিভ সাব টাইপিংয়ের চেয়ে ভাল কিনা। অন্যটি মূলত: রচনা উত্তরাধিকারের চেয়ে ভাল কিনা। এই প্রশ্নগুলি পারস্পরিক orthogonal হয়। আমি মনে করি শেষ পর্যন্ত "সেরা" ভাষাটি আপনার পক্ষে এই পছন্দটি করে না। আমি অনুমান করতে পারি যে গো এর বিভিন্ন সমস্যার একটি সহজ সেট রয়েছে তবে আমরা দেখতে পাব যে গুগল এই বৈশিষ্ট্যগুলিকে "পিছনে" যুক্ত করেছে কিনা।
back2dos

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

1

OOP অপ্রচলিত নয়।

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

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


1
আমার মনে হয়: অনেক জায়গায় গালাগালি করা। আসলে কোনও সুবিধা নয়।
AndreasSchainert

@ আন্দ্রেয়াস শাইনার্ট কেন এটি সুবিধা হবে না?
সাইমন বার্গোট

কারণ রায় দেওয়ার জন্য আপনার জানা উচিত অন্যথায় 1 বিকল্পটি সমানভাবে ভাল। এটি আ অভ্যাসের বিষয়, লোকেরা তাদের আরামদায়ক অঞ্চলে থাকতে পছন্দ করে এবং এটি স্থবিরতার দিকে নিয়ে যায়।
AndreasScheinert

@ আন্ড্রেয়াসচেইনার্ট কাজের জন্য সঠিক সরঞ্জামটি ব্যবহার করুন। ওপ সমস্ত
দৃষ্টিকোণের

1

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

আপনি তর্ক করতে পারেন যে এটি কেবল স্পষ্টভাবে উল্লেখ করে বনামের একটি ঘটনা, যা "নতুন দৃষ্টান্ত" এর মতো কিছুই নয় এবং সত্যিই আরও সুবিধাজনক।

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