"খাঁটি ওও ভাষা" শব্দটির আনুষ্ঠানিক সংজ্ঞা?


13

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

ডঃ অ্যালান কে, যিনি এই শব্দটি তৈরি করেছেন (কোষে বা অন্যান্য জীবিত বস্তুগুলির জৈব উপমাতে অনুপ্রেরণাটি নোট করুন) এর সাথে চিঠিপত্রের সূচনা করা বরং ন্যায়সঙ্গত হবে ।

কার্যটিতে যাওয়ার জন্য নিম্নলিখিত উপায় রয়েছে:

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

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

এটির যে কোনও সম্ভাব্য উন্নতির প্রশংসা করি। আপনি দেখতে পাচ্ছেন যে আমি সংজ্ঞাটি "অবজেক্ট" শব্দটির উপর নির্ভর করে তৈরি করেছি (প্রায়শই পুরোপুরি অবজেক্টের শ্রেণি হিসাবে উল্লেখ করা হয়)।

[Edit]

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

বিশেষ দ্রষ্টব্য

কিভাবে উত্তর দিতে হবে :

  • আপনি যদি এমন কোনও বই বা একটি রেফারেন্স নির্দিষ্ট করেন যা আপনার পরিভাষা এবং ধারণাগুলির বোঝার সমর্থন করে / ব্যাখ্যা করে (সাধারণত একটি ভাল সংজ্ঞা প্রাথমিক বা বাদে সমস্ত নির্ভরশীল ধারণাগুলি coversেকে দেয় বা রেফারেন্স করে)।
  • যদি সম্ভব হয় তবে আপনার উত্তর / সংজ্ঞার একটি ইন্টেন্টেড বিভাগটি চিহ্নিত করুন যদি তা অন্যথায় পরিষ্কার না হয় (উপরে দেখুন: 1 - ভাষার উদাহরণ অনুসারে, 2 - গাণিতিক যুক্তি, 3 - প্রযুক্তিগত বিবরণ এবং প্রোগ্রামিং দর্শন)
  • শ্রেণিবিন্যাস গুরুত্বপূর্ণ (এবং কারণ খাঁটি-ওও শব্দটি ওও-তে অন্তর্ভুক্ত রয়েছে) অন্যান্য সুপরিচিত পদ্ধতিগুলি থেকে ওও দৃষ্টান্তের উপাদানগুলি আনমিক্স করার চেষ্টা করার সময় উত্তর দেওয়ার সময় (এবং কোনও উপায়ে তাদের বিভ্রান্ত / ওভারল্যাপ করা যায় না, যেমন সাধারণত মডুলার প্রোগ্রামিংয়ের উপাদানগুলি আচ্ছাদন করা যায় / ওও প্রোগ্রামিংয়ের সাথে মূর্ত): ফাংশনাল প্রোগ্রামিং, লজিকাল প্রোগ্রামিং (বিশেষত দৃ strongly়ভাবে বিশেষজ্ঞ), অ্যাবস্ট্রাক্ট ডেটা টাইপস (এডিটি), মডুলার, মেটাপ্রোগর্মিং (জেনেরিকস এবং এলআইএসপি'র ম্যাক্রোপেক্সেশন-সময়) থেকে ওওপি আলাদা করার চেষ্টা করুন চুক্তি (যেমন আইফেল), দিক-ভিত্তিক (এও), (ঘোষিত এবং কার্যকরী শ্রেণিবিন্যাসের মধ্যে পার্থক্য এবং পাশাপাশি ডিজকস্ট্রার কাঠামোর historical তিহাসিক সংজ্ঞাগুলি স্পষ্ট)

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

সুতরাং হ্যাঁ, কেবল সংজ্ঞা নয়, ঠিক "ভাল" সংজ্ঞা দেওয়া মুশকিল। তবে আপনার অভিজ্ঞতা এবং প্রত্যক্ষ জড়িততার কারণে আমি এখানে এটি জিজ্ঞাসাবাদী।


2
ঠিক আছে, আপনি পাইথনের পক্ষে নিজের উত্তর দিয়েছেন। "না"।
PSr

2
চমৎকার প্রশ্নের জন্য +1, তবে আপনার সংস্করণটি সমস্যার কারণে কিছুটা ত্রুটিযুক্ত যে কোনও ধরণের এবং একটি বিষয় পৃথক জিনিস।
ফ্রাঙ্ক

5
@ জোয়াচিমসৌয়ার: তিনি স্কেক মেলিংলিস্টে থাকা অন্য একটি মেইলে বলেছিলেন যে "বড় ধারণাটি মেসেজিং" এবং তিনি যেহেতু একে "অবজেক্ট-ওরিয়েন্টেড" বলে অভিহিত করেছেন এবং পরিবর্তে "বার্তা-ওরিয়েন্টেড" বলা উচিত ছিল। উদাহরণস্বরূপ, এরলং হ'ল একটি সম্পূর্ণ অবজেক্ট-ভিত্তিক ভাষা যা "অবজেক্ট", "পদ্ধতি", "উত্তরাধিকার", "শ্রেণি", "প্রোটোটাইপস" বা এর মতো কিছুতে কোনও ধারণা না নিয়েই ডঃ কের সমস্ত মানদণ্ডকে মেটায় meets ।
Jörg ডব্লু মিটাগ

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

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

উত্তর:


19

ওও, অ্যালান কে-এর মতে বার্তা প্রেরণা সবই, এবং এটিই। আপনি দেখতে পাবেন যে পলিমারফিজম এবং এনক্যাপসুলেশন এর মতো গুণাগুলি আসলে বার্তা প্রেরণ থেকে প্রাপ্ত।

এখন যে অবস্থানটি বাস্তবে খুব চরম, কারণ এর মূলত অর্থ এই যে কেবলমাত্র ছোট্ট টাল্ক এবং ভাষা একই রকম যোগ্যতা অর্জন করতে পারে।

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

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

তারপরে আবার আইএমএইচও ভাষার বিশুদ্ধতা শক্তির চেয়ে দুর্বলতা। ওও কোনও সিলভার বুলেট নয়। কোনও একক দৃষ্টান্ত নেই।


2
"ওও রূপালী বুলেট নয়" এর জন্য +1।
আন্দ্রেস এফ।

1
@AndresF। নোট করুন যে ওওপির ব্যবহারিক মান পাশাপাশি প্রোগ্রামিং সম্পর্কিত অন্যান্য তাত্ত্বিক জ্ঞান আসলেই কোনও প্রশ্নের অংশ নয়। এটি একেবারেই সুস্পষ্ট যে প্রোগ্রামটি কৌশল বা তত্ত্বগুলির (এবং অন্যান্য উপায়ে) গভীরভাবে বোঝার জন্য কেউ একটি সুন্দর সফল পদ্ধতিতে কোড লিখতে পারে। ওও ভাষার অ্যাপ্লিকেশন সম্পর্কিত বৈশিষ্ট্যগুলি ইত্যাদি আলোচনা করা হয়নি,
ইয়াহেন ইয়াকিমোভিচ

@ ইয়াহেন ইয়াকিমোভিচ ওহ, আমি জানি আমি যদি উত্তরটি অফ-টপিকটি করে থাকি তবে তা আপসেট করতে পারতাম না। তবুও, আমি যে দৃ .়তার সাথে একমত তা পছন্দ করি।
আন্দ্রেস এফ।

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

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

6

আমি এটিকে একটি ভাষা হিসাবে সংজ্ঞায়িত করে এটি ব্যবহার করব যা ওওপি কনস্ট্রাক্টস এবং অন্য কিছুই ব্যবহার করে না (একইভাবে খাঁটি এফপি ভাষা অপরিবর্তনীয় ডেটা এবং অন্য কিছু না দিয়ে খাঁটি ফাংশন ব্যবহার করে)।

নির্দিষ্টভাবে:

  • আপনার প্রোগ্রামটি পরিচালনা করে এমন প্রতিটি সত্তা হ'ল প্রথম শ্রেণীর অবজেক্ট - যেমন কোনও আদিম, কোনও পয়েন্টার, কোনও অ্যারে ইত্যাদি নয় etc.
  • আপনি কেবল কোনও অবজেক্টের সাথে যা করতে পারেন তা হ'ল এটিতে একটি (সম্ভাব্য পলিমারফিক) পদ্ধতিটি কল করুন (== বার্তা প্রেরণ)। অন্য কোনও অপারেশন বিদ্যমান নেই।
  • সমস্ত ডেটা এনপ্যাপুলেটেড - অর্থাত্ কোনও পাবলিক ফিল্ড অ্যাক্সেস নয়, আপনাকে অবশ্যই কোনও অবজেক্টের পদ্ধতিগুলির মধ্য দিয়ে যেতে হবে
  • আপনার যদি প্রথম শ্রেণীর ফাংশন থাকে তবে সেগুলি অবশ্যই অবজেক্ট হতে হবে - সুতরাং আপনার মতো কিছু করা দরকারfunctionObject.call(param1,param2)
  • কোনও গ্লোবাল ভেরিয়েবলগুলি নেই - আপনি যদি এই জাতীয় কিছু চান তবে আপনার বর্তমান বৈশ্বিক পরিবেশের প্রতিনিধিত্ব করার জন্য একটি অবজেক্ট ব্যবহার করতে হবে, উদাহরণস্বরূপ environment.getValue("myThing")বা একটি ভ্যারিয়েবলটিকে কোনও শ্রেণীর বস্তুতে স্থাপন করা উচিত

দ্রষ্টব্য যে এটি এখনও বেশ কয়েকটি বিকল্প খোলা ছেড়ে দিয়েছে:

  • ক্লাস-ভিত্তিক বনাম প্রোটোটাইপ-ভিত্তিক অবজেক্ট মডেল
  • উত্তরাধিকার কীভাবে কার্যকর করা হয় (যদি তা হয়)
  • পদ্ধতিগুলিতে আপনার একক বা একাধিক প্রেরণ রয়েছে কিনা
  • আপনার বস্তুগুলি স্থিতিশীল বা গতিশীল টাইপযুক্ত কিনা
  • পদ্ধতি কলগুলির জন্য সঠিক সিনট্যাক্স (উদাহরণস্বরূপ আপনি গেটরস / সেটার ইত্যাদির জন্য কিছু সিনট্যাকটিক চিনি পেতে পারেন))

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

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

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

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

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

4

তথাকথিত ওও ভাষাগুলি সম্পর্কে আলোচনা বরাবরই মস্তিষ্ক-ধোয়া দিকের দিকে কিছুটা ছিল। অর্থাৎ,

"কেউ আমাকে বলেছে যে ভাষা X হল ওও, সুতরাং ভাষা এক্স এর সাথে সমান হয় তবে যে ভাষার এক্স ভাষার বৈশিষ্ট্যগুলির অভাব রয়েছে সেগুলি সম্ভবত ওও হতে পারে না And এবং কারণ আমি ভাষা কোডে আমার কোড লিখছি, আমি যা করি তা সবই ওও। "

অবজেক্ট-ওরিয়েন্টেড ডিজাইন শব্দটি 3 টি বিষয়ে ফুটিয়ে তোলে:

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

1) খাঁটি প্রোগ্রাম ডিজাইন, এটি কোনও প্রোগ্রামিং ভাষায় অর্জন করা যায়। তবে কিছু ভাষার সহায়ক বৈশিষ্ট্য যেমন শ্রেণি / কাঠামো এবং ব্যক্তিগত কীওয়ার্ড রয়েছে।

২) মূলত প্রোগ্রাম ডিজাইন, যদিও ভাষা সমর্থন ব্যতীত সম্পূর্ণরূপে অর্জন করা যায় না, যেহেতু আপনার দুর্ঘটনাজনিত ব্যবহারের বিরুদ্ধে সুরক্ষার জন্য ব্যক্তিগত / স্ট্যাটিকের মতো ভাষা পদ্ধতি দরকার।

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

এখন, আমরা উপরের দিকে নজর দিলে আমরা দেখতে পারি যে ও ও প্রোগ্রামগুলি লেখার জন্য আপনার সবেমাত্র কোনও ভাষা বৈশিষ্ট্য প্রয়োজন। বৈশিষ্ট্যগুলি এটিকে আরও সহজ করে তোলে।

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

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

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

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


আপনি কীভাবে আপনার সংজ্ঞাটি থেকে আলাদা হতে পারেন তা বোঝাতে পারেন, যেমন অ্যাবস্ট্রাক্ট ডেটা ধরণের মডুলার প্রোগ্রামিং? আমি মনে করি আপনি সঠিক পথে আছেন, তবে আমি এখনও ট্রেন দেখতে পাচ্ছি না!
Jörg ডব্লু মিটাগ

@ জার্গডব্লিউমিত্যাগ এটি প্রয়োজনীয়ভাবে আলাদা নয়, traditionalতিহ্যবাহী এডিটি: গুলি সঠিকভাবে এনক্যাপসুলেশন, সেটার / গেটারস, এটির উত্তরাধিকারী করার পদ্ধতি ইত্যাদির সাহায্যে অবজেক্ট ওরিয়েন্টেড ডিজাইন ব্যবহার করে রচনা করা যেতে পারে তবে ও ও ডিজাইনের ক্ষেত্রেও এগুলি লেখা যেতে পারে। ->

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

@ লন্ডিন: জার্গডব্লিউমিতাগের অন্য উত্তরের মন্তব্য হিসাবে পোস্ট করা কাগজে এডিটি এবং ওওর মধ্যে একটি (আইএমও) আকর্ষণীয় তুলনা রয়েছে।
জর্জিও

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

2

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

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

  • একটি অবজেক্ট কিছু রাষ্ট্র ধারণ করে এবং সেই রাজ্যে কিছু ফাংশন সরবরাহ করে।

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

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


2
আমি এ জাতীয় পার্থক্যের দরকার দেখছি না। তবে দ্বিতীয়ত, তাদের একই পরিচয় রয়েছে যা অন্য কোনও বস্তুর ঠিকানা / রেফারেন্স তুলনা করে। ঠিকানার সাথে তুলনা করে আপনি একই রাষ্ট্রের সাথে দুটি অবজেক্টকে আলাদা করে বলতে পারবেন না এটি নতুন থেকে অনেক দূরের এবং সমস্ত বস্তুর ক্ষেত্রে প্রযোজ্য।
ডেডএমজি

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

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

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

2
@ কনরাডরুডল্ফ: বর্ণবাদীদের সাথে সিনট্যাক্সের বিষয়ে যত্নশীল এমন প্রোগ্রামারদের তুলনা করে এমনকি নামটির দ্বারা এই সাইটের কোনও নির্দিষ্ট ব্যবহারকারীর কথা উল্লেখ করে আমার মন্তব্যটি লেখার সময় সেই অনুচ্ছেদটি খুব আলাদা পড়েছিল read
Jörg ডব্লু মিটাগ

0

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

এমনকি ভাষাটির কতটা পরিবর্তন, এমনকি বস্তুর কাঠামোর মধ্যেও বন্ধ রয়েছে তা নিয়ে প্রশ্ন রয়েছে। জাভাতে আপনি স্ট্রিং বা ক্লাসের মতো কিছু ক্লাসের জন্য নতুন সাবক্ল্যাসগুলি সংজ্ঞায়িত করতে পারবেন না।

কোন ভাষা শুদ্ধ? মাঠে আসা একমাত্র প্রার্থী হলেন ছোট্ট টাল্ক।


রুবি কি খাঁটি ওও ভাষা নয়?
zxcdw

2
@zxcdw (এবং ডিজায়ার): এটি ঠিক সমস্যা: কারও "খাঁটি ওও" এর আনুষ্ঠানিক সংজ্ঞা নেই, সুতরাং কেউই এই প্রশ্নের একটি নির্দিষ্ট উত্তর দিতে পারে না।
জোছিম সউর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.