অবজেক্ট ওরিয়েন্টেশনের জন্য প্রয়োজনীয় বৈশিষ্ট্যগুলি কী কী?


9

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

উদাহরণস্বরূপ, নিম্নলিখিত সি কোড দেখুন:

SDL_Surface* screen = SDL_SetVideoMode( 640, 480, 16, SDL_HWSURFACE);
SDL_FreeSurface( screen );

বা কোডটি এখানে আলোচনা করা হয়েছে

এখন উপরের কোডটি উত্তরাধিকার, রানটাইম-পলিমারফিজম (?), ভার্চুয়াল ফাংশন ইত্যাদি ব্যবহার করে না তবে এটি আমার কাছে বেশ OOP বলে মনে হয়।

অবজেক্ট-ওরিয়েন্টেশন কি কেবল কোড লেখার মতো যা ক্রিয়েটিভ এবং ডেস্ট্রাকটেবল ডেটা স্ট্রাকচার যেমন অবজেক্টস, ক্লাস, স্ট্রাক্ট ইত্যাদির উপর ভিত্তি করে প্রোগ্রামিং ল্যাঙ্গুয়েজ বা লাইব্রেরির দ্বারা সরবরাহিত কোনও বিশেষ প্যাটার্ন বা বৈশিষ্ট্যগুলির প্রয়োজন হয় না ?


2
OOP সাধারণত অবজেক্টগুলির প্রয়োজন হয় । তবে বেশিরভাগ ভাষায় OOP দেখায় এমন কোড লেখা সম্ভব (আমি সন্দেহ করি আপনি বলতে পারেন "এই
সমাবেশটি

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

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

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

এই সংজ্ঞাটি ব্যবহার করে এবং ভাষার সাথে (দুটি কোডের নমুনা নয়) এর সাথে তুলনা করার ক্ষেত্রে কী ভুল ? en.wikipedia.org/wiki/...
S.Lott

উত্তর:


11

অ্যালান কেয়ের মতে, যিনি "অবজেক্ট অরিয়েন্টেড" শব্দটি আবিষ্কার করেছিলেন,

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

মেসেজিং (যেমন স্মল্টাল্কে প্রয়োগ করা হয়েছে) বহুবর্ষের তুলনায় তুলনামূলক ধারণা, তবে আরও শক্তিশালী (কমপক্ষে C ++ বা জাভা দ্বারা সমর্থিত বহুপ্রকারের তুলনায়)। এটি সমস্ত ভাষায় করা যেতে পারে, তবে ভাষাটি সরাসরি সমর্থন না করে বরং যন্ত্রণাদায়ক। মূলত এর অর্থ হ'ল বস্তুগুলি একে অপরের সাথে যে কোনও কিছু বার্তা প্রেরণ করতে পারে, amd প্রতিক্রিয়া জানাতে পারে তবে তারা তাদের প্রাপ্ত বার্তাগুলিতে চায় want মেসেজিংকে পুরোপুরি সমর্থন করার জন্য, উত্স কোডে গণনা না করে বার্তাগুলির জন্য বস্তুগুলির নমনীয়ভাবে প্রতিক্রিয়া জানার একটি উপায় থাকতে হবে (যা মূলত পদ্ধতি / ফাংশন সংজ্ঞাগুলি কী করে)।

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

সমস্ত জিনিসের দেরি-বাঁধাই - একটি স্লাইডিং স্কেল যার উপর সি সত্যিকার অর্থে কে এর দৃষ্টি থেকে অনেক দূরে (যেমন সি ++, যখন জাভা অনেক বেশি কাছাকাছি)। নকল হতে পারে (সিওএম দেখুন), তবে এটি ব্যবহারে ব্যথা হবে।

খেয়াল করুন কীভাবে কী উত্তরাধিকারের কথা উল্লেখ করে না । একই ইমেলটিতে তিনি লিখেছিলেন

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


4
ঠিক কীভাবে জাভা এবং সি # সি ++ এর চেয়ে দেরি-বাঁধাইয়ের কাছাকাছি?
ফ্রেডওভারফ্লো

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

5

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

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

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

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

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


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

4

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

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


2

আমি যখন ছাত্র ছিলাম তখন আমাকে শিখানো হয়েছিল যে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং তিনটি স্তম্ভের উপরে দাঁড়িয়েছে:

  • encapsulation ,
  • বহুবর্ষ , এবং
  • উত্তরাধিকার

কোনও ভাষাকে অবজেক্ট-ওরিয়েন্টেড ভাষা হিসাবে বিবেচনা করার জন্য এই বৈশিষ্ট্যগুলিকে সমর্থন করতে হবে।

নোট করুন যে এটি সিনট্যাক্সের চেয়ে বৈশিষ্ট্যের একটি সেট বর্ণনা করে । সুতরাং, আপনি লিখতে হবে কিনা

type obj; // or type obj = new type;
obj.func(arg);

অথবা

type* ptr = create_type();
func(ptr, arg); 

কিছু যায় আসে না।

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


2
এই "স্তম্ভগুলি" শেখানো সম্ভবত বিশ্বের ভালোর চেয়ে বেশি ক্ষতি করেছে। এনক্যাপসুলেশন ভাল, তবে এটি প্রায়।
টিডামাররা

1
: তারা এই তালিকায় আছেন, তাই তারা ব্যাপকভাবে গৃহীত হবে বলে মনে হচ্ছে en.wikipedia.org/wiki/...
S.Lott

পলিমॉर्फিজম এবং উত্তরাধিকার কেন খারাপ তা আপনি ব্যাখ্যা করতে পারেন?
ম্যাথট্যাক

@ ম্যাথট্যাক: আপনি কি আমার সাথে কথা বলছেন ? কারণ আমি অবশ্যই তা বলে নি।
এসবিআই

1
@ মিসিংনো: দৃষ্টান্তটির পার্থক্যটি গুরুত্বপূর্ণ হিসাবে বিবেচনা করার জন্য কিছু দৃষ্টান্তের জন্য কিছু অনন্য হতে হবে না। কাঠামোগত প্রোগ্রামিংয়ের জন্য ফাংশনগুলি অনন্য হতে হবে বলে এনক্যাপসুলেশনকে আর ওওপির পক্ষে অনন্য হতে হবে না।
এসবিআই

2

আপনি যে কোনও শালীন সাধারণ উদ্দেশ্যমূলক ভাষায় ওও করতে পারেন।

এটা সহজ একটি "OO যেমন পণ্য" ভাষায় এটা করতে, কারণ আপনি কথ্য নির্মান প্রাপ্তিসাধ্য আছে এবং ভালো কিছু করার জন্য অবলম্বন করতে হবে না সি OO যেমন পণ্য - যা সম্ভব, কিন্তু ভয়ঙ্কর।

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


2

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

ওও ভাষাগুলির সাথে যুক্ত দুটি আরও বড় বৈশিষ্ট্য অ ওও ভাষা দ্বারা সরবরাহ করা হয়েছে:

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

1

অবজেক্ট ওরিয়েন্টেশন হিসাবে সংজ্ঞায়িত করা হয়

উইকিপিডিয়া এন্ট্রি পরীক্ষা করে দেখুন। এগুলি সেই বৈশিষ্ট্যগুলি যা কোনও ভাষার অবশ্যই অবজেক্ট ওরিয়েন্টেড হিসাবে সংজ্ঞায়িত করার জন্য সরবরাহ করতে পারে।

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

আপনার শেষ প্রশ্ন সম্পর্কিত উত্তর সম্ভবত। হ্যাঁ. অবজেক্ট অরিয়েন্টেড মূলত কেবলমাত্র বস্তুর উপর পদ্ধতিগুলিতে অভিনয় করা এবং objects অবজেক্টগুলিকে পরামিতি হিসাবে পাস করা।


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