উত্তরাধিকার, এনক্যাপসুলেশন এবং বহুমুখিতা কেন ওওপির স্তম্ভ নয়? [বন্ধ]


16

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

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

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

সোভিয়েত-পরবর্তী এবং মার্কিন যুক্তরাষ্ট্রের কলেজগুলিতে প্রোগ্রামাররা কি বিভিন্ন বিষয়ে প্রশিক্ষিত বলে মনে হচ্ছে?

মার্কিন যুক্তরাষ্ট্র / যুক্তরাজ্য প্রোগ্রামাররা কি উত্তরাধিকার, এনক্যাপসুলেশন এবং বহুমুখিতা ওওপির স্তম্ভ হিসাবে বিবেচনা করে না?


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

1
@ রবার্ট, অনেক বেশি সময় অতিবাহিত। আমি এমনকি যদি কথোপকথনের লিঙ্কটি আদৌ খুঁজে পেতে পারি তবে আমি সন্দেহ করি। তবে আমি একমত যে প্রসঙ্গটি গুরুত্বপূর্ণ। এটি কাউকে দোষ দেওয়া, বা চ্যাট আগ্রাসনের শিকার নিজেকে নির্দোষ হিসাবে উপস্থাপন করা নয়, আমি কেবল সত্যটি জানতে চাই।
পলডি

5
ভাষা. আপনি কি প্রথমে আপনার শিখা-প্রমাণ স্যুট লাগিয়েছেন?
রবার্ট হার্ভে

1
আমি বাক্যটির একমাত্র অর্থটি হ'ল "এগুলির কোনও ছাড়াই আপনার ওওপি থাকতে পারে" (সত্য, তবে কমপক্ষে এনক্যাপসুলেশনের জন্য কোনও ধারণা নেই) বা "আপনি ওওপির বাইরেও এটি ব্যবহার করতে পারেন", বা এর মতো কিছু।
এসজেউন 76

2
ইমো ওওর একটি মাত্র স্তম্ভ রয়েছে এবং এটি: "রাজ্য"। আপনার মস্তিষ্ক একবারে রাজ্যে চিন্তা করে আপনি ওও হয়ে যান।
পিটার বি

উত্তর:


40

মার্কিন যুক্তরাষ্ট্র / যুক্তরাজ্য প্রোগ্রামাররা কি উত্তরাধিকার, এনক্যাপসুলেশন এবং বহুমুখিতা ওওপির স্তম্ভ হিসাবে বিবেচিত হয় না?

এগুলিকে অনেক প্রোগ্রামার তাদের স্তম্ভ হিসাবে বিবেচনা করে এবং অনেক কলেজ ওওকে সেভাবে শিক্ষা দেয়।

দুর্ভাগ্যক্রমে, এটি একটি সংক্ষিপ্ত দৃষ্টিভঙ্গিও।

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

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

এবং যখন আধুনিক প্রোগ্রাম ডিজাইনটি "বিশুদ্ধ ওও ফ্যাশন" তে জিনিসগুলি করার ক্ষেত্রে দুর্বল দৃষ্টিভঙ্গি নিয়েছে, বেশিরভাগ দক্ষ প্রোগ্রামাররা সম্মত হবেন যে সলিড নীতিগুলি (বা কিছু উপসেট) "অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের স্তম্ভগুলি" (যদিও তারা তারা নন-ওওপিতে ভাল প্রয়োগ করুন)। এগুলি এই শর্তাদি মোটেই কাজ করে না। পরিবর্তে তারা সফ্টওয়্যার সত্তার ধারণাগুলি (যার মধ্যে অবজেক্টগুলি এক), ইন্টারফেস (যার মধ্যে একটি সি # / জাভা / ইত্যাদি interfaceএকটি), বিমূর্ততা এবং উপ-টাইপিং (যার মধ্যে, উত্তরাধিকার এক রূপ) ব্যবহার করে use


10
একটি অপরিহার্য প্রশ্নাবলীর উত্তম উত্তর।
রবার্ট হার্ভে

3
ওওপি কি বিদ্যমান?
তুলিনাস কর্ডোভা

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

3
@ স্নোম্যান এনক্যাপসুলেশন ওও-র মধ্যেই সীমাবদ্ধ নয়। লোকেরা সর্বদা সি এবং কার্যকরী ভাষায় বিমূর্ত ডেটা প্রকার প্রয়োগ করে।
ডোভাল

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

23

tl; dr: আপনি ওও ছাড়াই উত্তরাধিকার পেতে পারেন, আপনার ওও ছাড়াই এনক্যাপসুলেশন থাকতে পারে, আপনি ওও ছাড়াই পলিমারফিজম পেতে পারেন, এমনকি ওও ছাড়াই আপনার তিনটিও থাকতে পারে। ফ্লিপসাইডে, আপনি উত্তরাধিকার ছাড়াই ওও থাকতে পারেন। এছাড়াও, বিভিন্ন ধরণের এনক্যাপসুলেশন (এডিটি-ওরিয়েন্টেড এবং ওও) রয়েছে, আইওউই সমস্ত এনক্যাপসুলেশন ওও নয়।

দীর্ঘ সংস্করণ:

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

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

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

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

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

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

(অবশ্যই, আজ, বেশিরভাগ লোকেরা এমনকি বস্তুগুলিতে নয় কিন্তু ক্লাসগুলিতে মনোনিবেশ করে যা আরও বেশি ভুল))

রূপক হিসাবে এবং একটি প্রক্রিয়া হিসাবে উভয়ই ওয়ের কাছে মেসেজিং মৌলিক

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

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

অনুরূপ পয়েন্টগুলি অন ​​আন্ডারস্ট্যান্ডিং ডেটা অ্যাবস্ট্রাকশন, উইলিয়াম আর কুক দ্বারা পুনর্বিবেচিত এবং "অবজেক্ট" এর আধুনিক সংজ্ঞা, "অবজেক্ট ওরিয়েন্টেড" এর প্রস্তাবনায়ও রয়েছে

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

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

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

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

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


আপনার কাছে "উত্তরাধিকার", "বহুবিজ্ঞান" এবং "উত্তরাধিকার" থাকতে পারে ... সেখানে কোনও জায়গায় টাইপো আছে বলে মনে করেন :)
slebetman

1
এই উত্তরটি আমাকে ইচ্ছে করে যে আমরাও 'প্রিয়' উত্তরগুলি দিতে পারতাম।
চ্যান-হো সুহ 21

অ্যালান কেয়ের সংজ্ঞা পুরানো। ওওর উত্তরাধিকার দরকার, এবং আপনি যদি সি ++ এর মতো রান-টাইম এবং কম্পাইল-টাইম বাইন্ডিং উভয়ই করতে পারেন তবে আপনি সি এর সাথেও পারফরম্যান্স পাবেন।
এরিক আলাপি

না, তাঁর সংজ্ঞাটি সঠিক। OO হওয়ার জন্য আপনার কোনও উত্তরাধিকারের প্রয়োজন নেই। প্রোটোটাইপ ভাষাগুলি সি ++ এর মতো উত্তরাধিকার ব্যবহার করে না এবং সেগুলি এখনও ওও। উত্তরাধিকার কেবল কোড পুনরায় ব্যবহার বাস্তবায়নের জন্য ব্যবহৃত হয়, এটি সর্বোত্তম উপায়ও নয়, উদাহরণস্বরূপ, আরও অনেক ভাল ভাষা রয়েছে যা মেশানো রয়েছে। বাইন্ডিংয়ের সাথে এর কোনও সম্পর্ক নেই, কারণ আপনি গতিশীল প্রেরণ করতে পারেন, এমনকি যখন আপনি ভার্চুয়াল পদ্ধতি ব্যবহার করতে পারেন তখন সি ++ তেও নয়। পারফরম্যান্স এর কোনওটির সাথে কোনও সম্পর্ক নেই, এগুলি উচ্চ স্তরের ধারণা, তাদের কোনও কার্যকারিতা নেই। প্রকৃতপক্ষে, আপনি সি তে পাস করা বার্তাটি বাস্তবায়ন করতে পারেন এবং ওও হতে পারেন
লুইজ ফিলিপ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.