কেন অনেক হাঁস-টাইপযুক্ত গতিশীল প্রোগ্রামিং ভাষা প্রোটোটাইপ-ভিত্তিক ওওপির পরিবর্তে শ্রেণিভিত্তিক পদ্ধতির ব্যবহার করবে?


23

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

প্রশ্ন 1) গতিশীল ভাষায় ক্লাসের প্রয়োজন কী? কোনও শ্রেণিটিকে প্রোটোটাইপ-পদ্ধতিতে না করে কেবল কোনও বস্তু ব্যবহারের পরিবর্তে কোনও শ্রেণিকে কোনও ধরণের "টেম্পলেট" হিসাবে ব্যবহার করার জন্য কেন ভাষাটি তৈরি করা হয়েছে?

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

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


9
অনেক প্রোগ্রামার নতুন কিছু শিখতে বিরক্ত হতে চান না। (এটি খুব বিদেশী এবং "কঠিন")। অতএব সেই সমস্ত শ্রেণিভিত্তিক গ্রন্থাগার এবং ভাষা যা তাদের সংকলন করে।
থমাস এডিং

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

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

3
প্রথম প্রথম জিনিস: জাভাস্ক্রিপ্ট নিজেই classপরবর্তী ECMAScript মান (ECMAScript 6) হিসাবে মূলশব্দটিকে সমর্থন করে । জাভাস্ক্রিপ্টে ক্লাসগুলির জন্য সমর্থন দীর্ঘদিনের জন্য পরিকল্পনা করা হয়েছে। এখন এটি কীসের জন্য - ক্লাসগুলি কেবল সিনট্যাকটিক চিনি, একই ধরণের অবজেক্টগুলির জন্য মডেল সম্পর্কে যুক্তিযুক্ত an এটি জেএসে এই উপায় এবং পাইথন এবং অন্যান্য গতিশীল ভাষায় এটি।
বেনজামিন গ্রুয়েনবাউম

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

উত্তর:


12

প্রশ্ন 1) গতিশীল ভাষায় ক্লাসের কী প্রয়োজন? কোনও শ্রেণিকে প্রোটোটাইপ-পদ্ধতিতে না করে কেবল কোনও বস্তু ব্যবহারের পরিবর্তে কোনও শ্রেণিকে কোনও ধরণের "টেম্পলেট" হিসাবে ব্যবহার করার জন্য কেন ভাষাটি তৈরি করা হয়েছে?

প্রথম ওও ভাষা (যদিও এটি "ওও" বলা হত না) সিমুলার উত্তরাধিকার ছিল না। উত্তরাধিকার সিমুলা-67 in এ যুক্ত হয়েছিল এবং এটি ক্লাসের উপর ভিত্তি করে তৈরি হয়েছিল।

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

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

স্মার্টটাক -৪৪-এর পরে, অ্যালান কে অনুভূত করেছিলেন যে স্মলটালক ভুল পথে এগিয়ে চলেছে এবং ওও যা যা করণীয় তা বাস্তবে প্রতিনিধিত্ব করে না, এবং তিনি প্রস্তাব দিয়েছিলেন যে দলটি স্মার্টটাককে ত্যাগ করবে এবং নতুন করে শুরু করবে, তবে সে ছাড়িয়ে গেল। এভাবেই স্মলটালক-76 76, স্মলটালক -৮০ (গবেষকদের কাছে প্রকাশিত স্মার্টটাকের প্রথম সংস্করণ) এবং শেষ পর্যন্ত স্মার্টটাক -২০ ভি ২.০ (বাণিজ্যিকভাবে প্রকাশিত হওয়ার প্রথম সংস্করণ এবং সংস্করণ যা এএনএসআই স্মল্টালকের ভিত্তিতে পরিণত হয়েছিল) অনুসরণ করেছে ।

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

আকর্ষণীয়ভাবে যথেষ্ট, অ্যালান কেয়ের বর্তমান ভাষা প্রোটোটাইপ প্রতিনিধি উপর ভিত্তি করে।


"... অ্যালান কেয়ের বর্তমান ভাষা ..." কোনটি ...?
জাভিয়ের

@ জাভিয়ার: আমি মনে করি না এর কোনও নাম আছে এবং সিস্টেমটির নাম পরিবর্তন হতে থাকে।
জার্গ ডব্লু মিট্টাগ

পরের বার কেউ ওওর জন্য প্রয়োজনীয় হিসাবে উত্তরাধিকার তালিকাভুক্ত করার জন্য এটির উত্তম উত্তর হতে হবে :)
আরে

1
@ আইএক্সএক্স: অ্যালান কে তার ধারণাগুলি নিয়ে কাজ করার জন্য ভিউপয়েন্টস রিসার্চ ইনস্টিটিউট প্রতিষ্ঠা করেছিলেন । দুর্ভাগ্যক্রমে, তথ্য সত্যই ওয়েবসাইটে ছড়িয়ে ছিটিয়ে রয়েছে।
Jörg W Mittag

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

23

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

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

শ্রেণিভিত্তিক ভাষাগুলি পছন্দ করা হওয়ার অন্য কারণও রয়েছে: এগুলি দক্ষ কোডে সংকলন করা সহজ। সর্বাধিক দক্ষ জাভাস্ক্রিপ্ট ভিএমগুলি কার্যকরভাবে জাভাস্ক্রিপ্ট অবজেক্টের ধরণগুলি যেমন তাদের পদ্ধতি এবং প্রোটোটাইপ পরিবর্তন হিসাবে প্রতিনিধিত্ব করতে ক্লাস তৈরি করে। কেন করা হচ্ছে তার যৌক্তিকতার জন্য ভি 8 এর বাস্তবায়নের এই বিবরণটি দেখুন ।


4
তোমার শেষ অনুচ্ছেদ আসলে তুমি কি বলছ সঠিক বিপরীত সমর্থন করে: V8 প্রমাণ যে আপনার না অর্ডার দক্ষ শ্রেণী ভিত্তিক কোড কম্পাইল করার ভাষা ক্লাস প্রয়োজন।
জার্গ ডব্লু মিট্টাগ

4
হ্যাঁ, আপনার এগুলির দরকার নেই - তবে সত্য যে ভি 8 (এবং সম্ভবত স্বয়ং, যদিও আমি সেই ব্যবস্থার নকশা সম্পর্কে খুব বেশি পড়িনি) কার্যকরভাবে ভার্চুয়াল ক্লাস তৈরি করে তার অর্থ যে স্থানীয় ভাষা ব্যবহার করে এমন ভাষা থেকে শুরু হওয়া প্রায় অবশ্যই সহজ, এবং সম্ভবত কোডটি সংকলনে কম সময় ব্যয় করার জন্য জেআইটির দরকার পড়ে শেষ হবে।
জুলাই

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

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

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

3

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

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

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

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


1

আমার কাছে ওওপি মানে কেবল বার্তা, স্থানীয় ধরে রাখা এবং সুরক্ষা এবং রাষ্ট্র-প্রক্রিয়া লুকানো এবং চূড়ান্ত দেরি-সমস্ত বিষয়কে আবদ্ধ করা - অ্যালান কে

সুতরাং তিনি এখানে যা বলছেন তা হ'ল ওও সমস্ত বার্তাগুলির প্রতিক্রিয়াযুক্ত কালো বাক্স তৈরি করা। একটি উপায়েই REST হ'ল চূড়ান্ত ওও সিস্টেম এটি ক্রিয়া (যেমন একটি বার্তা) এবং সংস্থানগুলি ব্যবহার করে (অর্থাত একটি অস্বচ্ছ বাক্স যা কিছু ডেটা ধারণ করে)।

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

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