অ-ওওপি দৃষ্টান্তগুলি কি এনক্যাপসুলেশনের মতো ধারণাগুলি সমর্থন করে?


12

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ ধারণা হ'ল এনক্যাপসুলেশন। যাইহোক, ইদানীং সফ্টওয়্যার জগতটি ফাংশনাল প্রোগ্রামিংয়ের মতো অন্যান্য দৃষ্টান্তের পক্ষে ঝুঁকছে seems

এটি আমাকে ভাবতে বাধ্য করে, এনক্যাপসুলেশন এবং অন্যান্য ওওপি টিনেটগুলির কী? তারা ভুল আছে?

এটি কি ওওপি ভুল প্রয়োগ করা হয়? উদাহরণস্বরূপ অ্যালান কে OOPSLA'97 মূল বক্তব্যটিতে বলেছিলেন: "আমি অবজেক্ট-ওরিয়েন্টড শব্দটি আবিষ্কার করেছি এবং আমি আপনাকে বলতে পারি যে আমার সি ++ নেই" "

জো আর্মস্ট্রং - "অবজেক্টগুলি অবিভাজ্য ইউনিটগুলিতে ফাংশন এবং ডেটা স্ট্রাকচারকে এক সাথে আবদ্ধ করে I আমি মনে করি এটি একটি মৌলিক ত্রুটি, কারণ ফাংশন এবং ডেটা স্ট্রাকচার সম্পূর্ণ ভিন্ন বিশ্বের অন্তর্ভুক্ত" "




2
আমি বলব যে প্রশ্নটির প্রথমে এটি পরিষ্কার করা দরকার যে এনক্যাপসুলেশন বলতে কী বোঝায় এবং ভাষার পক্ষে এটি সমর্থন করার অর্থ কী।
Euphoric

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

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

উত্তর:


15

আমি মনে করি আপনি এখানে যে ফাঁদটি পড়েছিলেন তা ভাবছে যে কোনও প্রোগ্রামিং প্যারাডিজমের একটি দৃ definition় সংজ্ঞা আছে (কাঠামোগত, অবজেক্ট-ওরিয়েন্টেড, ক্রিয়ামূলক, ইত্যাদি।)

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

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

এটি কি ওওপি ভুল প্রয়োগ করা হয়?

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

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


10

যাইহোক, ইদানীং সফ্টওয়্যার জগতটি ফাংশনাল প্রোগ্রামিংয়ের মতো অন্যান্য দৃষ্টান্তের পক্ষে ঝুঁকছে seems

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

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

এটি আমাকে ভাবতে বাধ্য করে, এনক্যাপসুলেশন এবং অন্যান্য ওওপি টিনেটগুলির কী? তারা ভুল আছে?

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

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

এটি কি ওওপি ভুল প্রয়োগ করা হয়? উদাহরণস্বরূপ অ্যালান কে OOPSLA'97 মূল বক্তব্যটিতে বলেছিলেন: "আমি অবজেক্ট-ওরিয়েন্টড শব্দটি আবিষ্কার করেছি এবং আমি আপনাকে বলতে পারি যে আমার সি ++ নেই" "

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

জো আর্মস্ট্রং - "অবজেক্টগুলি অবিভাজ্য ইউনিটগুলিতে ফাংশন এবং ডেটা স্ট্রাকচারকে এক সাথে আবদ্ধ করে I আমি মনে করি এটি একটি মৌলিক ত্রুটি, কারণ ফাংশন এবং ডেটা স্ট্রাকচার সম্পূর্ণ ভিন্ন বিশ্বের অন্তর্ভুক্ত" "

আমি অনুমান করি এরলং এর উদ্ভাবকের কিছু ভাল যুক্তি রয়েছে তবে তার নিজস্ব দৃষ্টিভঙ্গিও রয়েছে তাই তাকে তার মতামত দেওয়া উচিত এবং আপনার নিজের তৈরি করা উচিত। আরও অনেক বিশেষজ্ঞ রয়েছেন যা সম্পর্কে এটির আলাদা ধারণা রয়েছে।


1
আমি নিশ্চিত নই যে ওও জিইউআই-র পক্ষে বিশেষত আরও ভাল, ওও এবং জিইউআই একই সময়ে উত্থিত হয়েছিল। ম্যাকার্থি / জাভাস্ক্রিপ্টের জন্য +1 যদিও;)
জে কে।

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

1
@AndresF। এটি একটি দুর্দান্ত পড়া। আমি কিছু সময় পেলে সেই কাগজটি বিশদভাবে নিয়ে যাওয়ার পরিকল্পনা করি।
রবার্ট হার্ভে

4

অবশ্যই:

struct Foo
{
    string bar;
    int bux;
}

আপনি কী বলতে যাচ্ছেন তা আমি জানি: "তবে এটি আচরণেরও সংযোজন করে না!" ওয়েল, আমি এটি নিয়ে জো আর্মস্ট্রংয়ের সাথে রয়েছি: আপনি প্রথম শ্রেণির কোনও জিনিস প্রয়োজন না করেই পুরো প্রোগ্রাম বা অপারেটিং সিস্টেম লিখতে পারেন। লিনাক্স এটি প্রমাণ করে।

জাভাস্ক্রিপ্ট প্রোগ্রামাররা নিয়মিতভাবে ক্লাস নয় , ফাংশন এবং ক্লোজারে রাষ্ট্র এবং আচরণকে সজ্জিত করে


3
আপনি কেবল চা চামচ দিয়ে ময়লার পাহাড় বেলতে পারেন। তবে যে কেউ দাবি করে যে এটি করার সর্বোত্তম উপায় এটি সন্দেহের সাথে দেখা উচিত।
ইওফোরিক

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

2
@jk। অবশ্যই. সি একটি সাজানোর, তাই।
রবার্ট হার্ভে

1
প্রকৃতপক্ষে এটি সাজানোর
জে কে।

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

2

এখানে মূল বিষয়টি হ'ল এনক্যাপসুলেশনটি কঠোরভাবে সংজ্ঞায়িত ধারণা নয় বা কেন এটি কার্যকর। কিছু গবেষণা করা দেখায় যে লোকেরা কীভাবে এনক্যাপসুলেশন দেখেন তা অত্যন্ত মতামতযুক্ত এবং প্রচুর লোক এটিকে বিমূর্তির সাথে বিভ্রান্ত করে।

আপনি যে প্রথম সংজ্ঞাটি সন্ধান করতে যাচ্ছেন তা হ'ল

এনক্যাপসুলেশন এমন একটি ধারণা যা ডেটা ম্যানিপুলেট করে এমন ডেটা এবং ফাংশনগুলিকে এক সাথে আবদ্ধ করে ...

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

তবে আমি যুক্তি দেব যে এটি encapsulation এর মূল উদ্দেশ্য নয়, যেমন এই সংজ্ঞাটি অব্যাহত রয়েছে:

..., এবং এটি উভয়ই বাইরের হস্তক্ষেপ এবং অপব্যবহার থেকে সুরক্ষিত রাখে।

উইকিপিডিয়াও এতে একমত :

অবজেক্টের কিছু উপাদানগুলিতে সরাসরি অ্যাক্সেস সীমাবদ্ধ করার জন্য একটি ভাষা প্রক্রিয়া।

তবে এখন, আমাদের জিজ্ঞাসা করতে হবে "হস্তক্ষেপ এবং অপব্যবহার" বলতে কী বোঝায় এবং কেন ডেটাতে সরাসরি অ্যাক্সেস সীমাবদ্ধ করা উচিত। আমি বিশ্বাস করি যে এর দুটি কারণ রয়েছে।

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

তবে অপরিবর্তনীয় ভাষা সম্পর্কে কী? এটিতে পরিবর্তনশীলদের পরিবর্তন করার সমস্যা নেই। এটি এখানে দ্বিতীয় ইস্যুতে আসে: বাইন্ডিং ফাংশন এবং ডেটা সেই ডেটাটিকে বৈধ রাখার অনুমতি দেয়। কল্পনা করুন যে আপনার জন্য স্থাবর কাঠামো রয়েছে Email। এই কাঠামোর একক stringক্ষেত্র রয়েছে। আমাদের প্রয়োজনীয়তা রয়েছে যে যদি আপনার ধরণের মান Emailথাকে তবে সেই ক্ষেত্রটির বৈধ ঠিকানা রয়েছে। ওওপির এনক্যাপসুলেশনে, এই ক্ষেত্রটি ঘোষণা করে private, কেবলমাত্র Getপদ্ধতি সরবরাহ এবং থাকার মাধ্যমে এটি সহজেই করা হয়constructor methodস্ট্রিংয়ে পাস করা বৈধ ঠিকানা হলেই এটি সফল হয়। ক্লোজারের সাথে একই জিনিস। এখন, অপরিবর্তনীয় ভাষার জন্য এটির প্রয়োজন হবে যে কাঠামো কেবল নির্দিষ্ট ফাংশনের মাধ্যমেই আরম্ভ করা যেতে পারে এবং এই জাতীয় ফাংশন ব্যর্থ হতে পারে। এবং আমি এমন কোনও ভাষা সম্পর্কে অবগত নই যা সেই মানদণ্ডের সাথে খাপ খায় (সম্ভবত মন্তব্যে কেউ আমাকে আলোকিত করতে পারে)।

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

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