সফ্টওয়্যার জটিলতা পরিচালনা করার জন্য আমাদের কী ওও ভাষাগুলির দরকার?


209

এটি একটি খুব অ-প্রযুক্তিগত, নরম প্রশ্ন হতে চলেছে এবং আমি নিশ্চিত নই যে এটি সঠিক প্ল্যাটফর্ম কিনা। তবে আমি একজন প্রারম্ভিক সিএস ছাত্র তাই আশা করি আপনি ছেলেরা এটি সহ্য করবেন।

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

আমি এটি যেভাবে বুঝতে পারি, ওওপি হ'ল সফটওয়্যার জটিলতা পরিচালনার একটি উপায়। তবে এর নীতিগুলি নতুন বা অনন্য নয়, এগুলি ইঞ্জিনিয়ারিংয়ের সমস্ত ক্ষেত্রে এক অর্থে সর্বজনীন।

উদাহরণস্বরূপ একটি গাড়ী একটি অত্যন্ত জটিল কাঠামো যার জটিলতাটি মডিউলার এবং এনক্যাপসুলেটেড উপাদানগুলির একটি শ্রেণিবদ্ধ দ্বারা সুসংজ্ঞায়িত আচরণ এবং ইন্টারফেসের মাধ্যমে পরিচালিত হয়।

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

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


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

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

14
@ রবিডি আপনি আসলে আমার প্রশ্নটি পড়েছেন? এটি ওওকে আরও মৌলিক স্তরে বোঝার চেষ্টা করার বিষয়ে আবহাওয়া প্রশ্নবিদ্ধ করে ওও ছাড়াই সফটওয়্যার জটিলতা পরিচালনা করতে পারে। আমি ওওকে হীন করার চেষ্টা করছি না, নতুন কিছু আবিষ্কার করার চেষ্টা করছি না, আমি কেবল এটি আরও ভাল করে বোঝার চেষ্টা করছি এবং যদি প্রশ্নটি এতটাই 'স্বতঃস্ফূর্ত' হয় তবে কেন এটি জর্গের কাছ থেকে চমৎকার উত্তর পেয়েছে?
স্টেইকএক্সচেঞ্জ

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

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

উত্তর:


178

আমাকে সত্যিকারের কম তত্ত্বের উত্তর দিয়ে চেষ্টা করুন :)

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

এবং উত্তরটি হল: উত্স কোডে ওও কীভাবে প্রকাশিত হয় তার একটি মানক থাকে যাতে আপনি একই বিমূর্ততার জন্য 22 টি বিভিন্ন বাস্তবায়ন শেষ করেন না।

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

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

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

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

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


40
ক্লাসিক উদাহরণ: লুয়া। এটি স্থানীয়ভাবে ওও নয়, তবে এটি তৈরি করা যেতে পারে, তবে এর অর্থ এটি প্রায় 5 টি সমানভাবে সুপরিচিত ও ও লাইব্রেরিগুলি যা সম্পূর্ণরূপে আন্তঃযোগযোগ্য নয়।
Kroltan

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

42
@ নোকমপ্রেন্ডে অ্যাবস্ট্রাকশনগুলির মান নির্ধারণ প্রায় প্রোগ্রামিং ভাষাগুলির জন্য আক্ষরিক অর্থে is এমনকি এসেম্বলি ল্যাঙ্গুয়েজ দশ দশকের দশ দশকের বেশি দশটি হার্ডওয়্যার প্রজন্মের মতো কিছুতে পার্থক্যগুলিকে বিমূ .় করে।
ডেভিড মোলস

56
@DavidMoles আদর্শায়িত বিমূর্ত হয় আক্ষরিক কি প্রোগ্রামিং ভাষা আছে। আক্ষরিক "আক্ষরিক" ব্যবহার করার জন্য একটি নিখুঁত সুযোগটি অপচয় করবেন না!
ক্লিমেন্ট চেরলিন

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

212

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

এগুলির কোনওটিই ওওপি ধারণা নয়। এগুলি সবগুলি ওওর বাইরে রয়েছে, ওও থেকে পৃথক এবং অনেকগুলি এমনকি ওওর আগে আবিষ্কার করা হয়েছিল।

সুতরাং, যদি আপনি মনে করেন যে যে কি OO যেমন পণ্য, সব সম্পর্কে তারপর আপনার উপসংহার ঠিক হল: আপনি পদ্ধতিগত ভাষায় ঐ সব করতে পারেন, কারণ তারা OO যেমন পণ্য সঙ্গে কোন সম্পর্ক নেই

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

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

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

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

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

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

আপনি যা বর্ণনা করছেন তা ওও।

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

অবজেক্ট ওরিয়েন্টেশন মেসেজিং (ওরফে ডায়নামিক প্রেরণ ) সম্পর্কিত। "অবজেক্ট ওরিয়েন্টেড" শব্দটি তৈরি করেছিলেন স্মলটকের মূল ডিজাইনার ডাঃ অ্যালান কে, এবং তিনি এটিকে এভাবে সংজ্ঞায়িত করেছেন :

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

আসুন এটি ভেঙে দিন:

  • বার্তাপ্রেরণ ("ভার্চুয়াল পদ্ধতি প্রেরণ", যদি আপনি স্মলটাকের সাথে পরিচিত না হন)
  • রাষ্ট্র প্রক্রিয়া হওয়া উচিত
    • স্থানীয়ভাবে ধরে রাখা
    • রক্ষিত
    • গোপন
  • সবকিছুর চরম দেরি-বাঁধাই

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

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

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

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

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

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

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

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

সুতরাং, অ্যালান কেয়ের সংজ্ঞাটি দেখার জন্য দুটি উপায় রয়েছে: আপনি যদি এটি নিজের হাতে দাঁড়িয়ে দেখেন তবে আপনি দেখতে পাবেন যে মেসেজিংটি মূলত একটি দেরী-আবদ্ধ পদ্ধতি কল এবং দেরিতে-বাঁধাই বোঝায় এনক্যাপসুলেশন, সুতরাং আমরা সিদ্ধান্ত নিতে পারি যে # 1 এবং # 2 আসলে রিডানডান্ট এবং ওও দেরি-বাঁধাই সম্পর্কে।

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

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

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

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

প্রকারভেদ এবং প্রোগ্রামিং ভাষাগুলিতে বেনজামিন পিয়ার্স যুক্তি দেয় যে অবজেক্ট-ওরিয়েন্টেশনের সংজ্ঞায়িত বৈশিষ্ট্যটি ওপেন পুনরাবৃত্তি

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

যেমন আপনি দেখতে পাচ্ছেন, যে ব্যক্তি "ওও" শব্দটি তৈরি করেছিলেন, তিনি বস্তুর উপর একটি বরং রূপক দৃষ্টিভঙ্গি রাখেন, কুকের পরিবর্তে বাস্তববাদী দৃষ্টিভঙ্গি রয়েছে, এবং পিয়ার্স খুব কঠোর গাণিতিক দৃষ্টিভঙ্গি করেছেন। তবে গুরুত্বপূর্ণ বিষয়টি হল: দার্শনিক, বাস্তববাদী এবং তাত্ত্বিক সকলেই একমত! বার্তা হ'ল ওওর এক স্তম্ভ। সময়কাল।

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


16
+100 - আমরা জিনিসগুলিতে অন্তর্নিহিত দোষ চাপি কারণ সেগুলি যথাযথভাবে ব্যবহার করা হচ্ছে না।
জেফো

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

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

28
@ ম্যাসনওহিলার জর্জ যা বলছেন তার থেকে সম্পূর্ণ বিপরীত দৃষ্টিভঙ্গি থেকে আপনি উত্তরটিতে আপনার মন্তব্যটি আরও বিশদভাবে বর্ণনা করতে পারেন?
স্টেকেক্সচেঞ্জ

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

66

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

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

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

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

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

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

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

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

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

সুতরাং আমি আপনার প্রশ্নটি ঘুরিয়ে দেব এবং আপনাকে জিজ্ঞাসা করব, ভাষাগুলি যদি এনক্যাপসুলেশন এবং পলিমারফিজমের মতো সুবিধাজনক বৈশিষ্ট্য সরবরাহ করে, তবে কেন আমরা সেগুলি ব্যবহার করব না?


13
সুতরাং মূলত পদ্ধতিগত ভাষার সাথে ওও করা সম্ভব তবে এটি একটি মানক ওও ভাষা স্বয়ংক্রিয়ভাবে ব্যবহার ও সরলকরণ করার সময় ম্যানুয়ালি জিনিসগুলি করছে things
স্টেকেক্সচেঞ্জ

6
পছন্দ করেছেন
টিম বি

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

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

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

22

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

প্রথমত, এটি লক্ষণীয় যে ওওপির কোনও একক সংজ্ঞা নেই, সুতরাং এমন লোকেরা থাকতে পারে যারা আমি ওওপি হিসাবে চিহ্নিত করছি তার সাথে একমত নন।

দ্বিতীয়ত, এটি মনে রাখা গুরুত্বপূর্ণ যে ওওপি প্রচলিত মডেল ডিজাইনের দ্বারা অনুপ্রাণিত হয়েছিল, তাই গাড়ি ডিজাইনের মিলগুলি কোনও কাকতালীয় নয়।

যাইহোক, এখানে কিছু উপায় রয়েছে যা আপনি বলেছেন তার চেয়ে ওওপি আরও সংক্ষিপ্ত:

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

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

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

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

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


1
ভাল উত্তর! একটি অংশের সাথে আমি একমত নই: আপনি encapsulation সম্পর্কে যে পার্থক্যটি আঁকছেন তা বৈধ নয়। এনক্যাপসুলেশনের অর্থ সর্বদা "এই ইন্টারফেসের বাইরে অ্যাক্সেস নিষিদ্ধ করা" - এটি ওওপি এবং নন-ওওপি সেটিংসের জন্য সত্য। সুতরাং এই অংশটি আসলে এমন কিছু নয় যা ওওপির পক্ষে অনন্য।
DW

@ ডিডাব্লু আমি এটি পরিষ্কার করার চেষ্টা করেছি, এটি বলেছিলাম যে এটি ওওপির পক্ষে অনন্য নয় তবে এটি এনক্যাপসুলেশন এবং বিমূর্তনের মধ্যে পার্থক্য। সাহায্য করার জন্য ধন্যবাদ!
jmite

2
ঠিক আছে. তবে সেই বিষয়ে এখানে কী লেখা আছে সে সম্পর্কে আমার এখনও আলাদা ধারণা রয়েছে। আপনি লিখেছেন যে "এখানে কিছু উপায় ওওপি আপনি যা বলেছিলেন তার চেয়ে বেশি সংখ্যক", তবে এনক্যাপসুলেশন এমন কোনও উপায় নয় যা ওওপি প্রশ্নের মধ্যে যা লেখা হয়েছিল তার চেয়ে বেশি উপেক্ষিত। এনক্যাপসুলেশন হ'ল এটি কোনও উদাহরণের মধ্যে। এবং যেখানে আপনি লিখেছেন যে "আপনি যা বর্ণনা করছেন তা ওওপি নয়, এটি বিমূর্ততা", আমি ভেবেছিলাম যে আসল প্রশ্নটি এনক্যাপসুলেশন (কেবল বিমূর্ততা নয়) বর্ণনা করার চেষ্টা করছে। আমার ধারণা আমি এই মন্তব্যটিকে একটি ভিন্ন দৃষ্টিকোণ হিসাবে ছেড়ে দেব leave আমি মনে করি উত্তরটি খুব সহায়ক!
ডিডব্লিউ

উত্তরাধিকার একটি সাধারণ বৈশিষ্ট্য, তবে বেশ কয়েকটি গুরুত্বপূর্ণ ওও ভাষাগুলির অভাব রয়েছে।
ব্র্যাড্ড সজনে

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

11

সফ্টওয়্যার জটিলতা পরিচালনা করার জন্য আমাদের কী ওও ভাষাগুলির দরকার?

এটি "প্রয়োজন" শব্দের অর্থের উপর নির্ভর করে।

যদি "প্রয়োজন" অর্থের প্রয়োজন হয়, তবে আমাদের এটির প্রয়োজন হয় না।

যদি "প্রয়োজন" এর অর্থ "শক্তিশালী সুবিধা প্রদান করে", তবে আমি বলব, "হ্যাঁ," আমরা এটি চাই।

বড় ছবি

ওও ভাষাগুলি ডেটাতে কার্যকারিতা আবদ্ধ করে।

আপনি এই বাঁধাই এড়াতে এবং ফাংশনগুলি লিখতে পারেন যা ডেটা মানগুলির কাছাকাছি যায়।

তবে তারপরে আপনি সম্ভবত ডেটা নক্ষত্রের সাথে একসাথে চলে যাবেন এবং আপনি টুপলস, রেকর্ডস বা ডেটা অভিধানের কাছাকাছি যেতে শুরু করবেন।

এবং প্রকৃতপক্ষে, এগুলিই সমস্ত পদ্ধতি কলগুলি: ডেটা সীমিত সেটগুলিতে আংশিক ফাংশন।

বৈশিষ্ট্য অনুসারে বৈশিষ্ট্যযুক্ত

ওওপি এর বৈশিষ্ট্যগুলি:

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

যাইহোক, এই বৈশিষ্ট্যগুলির প্রথম শ্রেণীর সমর্থন সহ কোনও অবজেক্ট ওরিয়েন্টেড ভাষার সাথে এত সহজে কোনও কিছুই ঘটে না।

তথ্যসূত্র

ওওপির প্রচুর সমালোচক রয়েছেন

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

উপসংহার

আমাদের OOP "দরকার নেই"। তবে কিছু ক্ষেত্রে ব্যবহারকারী ওওপি চান

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


10

আমি সংক্ষিপ্ত হওয়ার চেষ্টা করব

ওওর মূল নীতিটি হ'ল একক সাংগঠনিক ইউনিটে (কোনও বস্তু) ডেটা এবং আচরণের সংমিশ্রণ।

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

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

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

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


8

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

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

আমি মনে করি জটিলতা পরিচালনার জন্য ব্যবহৃত সমস্ত নীতিগুলি প্রক্রিয়াগত প্রোগ্রামিং ভাষার মাধ্যমে উপলব্ধি করা যায়।

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


7

অন্যান্য উত্তরগুলির মধ্যে কিছু উল্লেখ করা হয়নি: রাষ্ট্র।

আপনি জটিলতা পরিচালনার জন্য একটি সরঞ্জাম হিসাবে ওও সম্পর্কে কথা বলেন । জটিলতা কি? এটি একটি अस्पष्ट শব্দ। এর অর্থ কী তা আমাদের সকলের কাছেই রয়েছে, তবে এটি পিন করা আরও শক্ত। আমরা সাইক্লোমেটিক জটিলতা, অর্থাৎ কোডের মাধ্যমে রান-টাইম পাথের সংখ্যা পরিমাপ করতে পারি, তবে আমি জানি না যে আমরা যখন জটিলতা পরিচালনা করতে ওও ব্যবহার করি তখন আমরা সেই বিষয়েই কথা বলি।

আমার মনে হয় আমরা যে বিষয়ে কথা বলছি তা হ'ল রাষ্ট্র সম্পর্কিত জটিলতা।

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

লোকেরা ইতিমধ্যে এটি উল্লেখ করেছে কারণ আপনি কোডটি অ্যাক্সেস করে পরিবর্তন না করে আপনার ডেটা অভ্যন্তরীণ কাঠামো পরিবর্তন করতে পারবেন না এবং আপনি এটি 300 স্থানের পরিবর্তে এক জায়গায় (অ্যাক্সেসর পদ্ধতি) করতে চান।

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

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

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

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


5

সফ্টওয়্যার জটিলতা পরিচালনা করার জন্য আমাদের কী ওও ভাষাগুলির দরকার?

না। তবে তারা অনেক পরিস্থিতিতে সাহায্য করতে পারে।

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

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

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

আপনি অভিজ্ঞতা অর্জন করার সাথে সাথে আপনি বিভিন্ন পরিস্থিতিতে বিভিন্ন সরঞ্জাম এবং সমাধানের প্রয়োজন বোধ করবেন এবং একটি আকার সবই মানায় না।


3

পুরোপুরি সিতে লিখিত একটি খুব বড় প্রকল্পের সাথে যুক্ত এমন কেউ হিসাবে, আমি অবশ্যই বলতে পারি যে উত্তরটি একটি পরিষ্কার "না"।

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

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

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

সম্ভবত সবচেয়ে জটিল ওপেন সোর্স প্রকল্পটি বিবেচনা করুন। যথা, লিনাক্স কার্নেল। এটি পুরোপুরি সি ভাষায় রচিত। এটি মূলত রচনা সহ স্ট্যান্ডার্ড সংকলন স্তরের মডুলারিটি সরঞ্জামগুলি ব্যবহার করে করা হয়, এবং তারপরে মাঝে মাঝে যখনই রানটাইম মডুলারিটির প্রয়োজন হয় তখন ফাংশন পয়েন্টারগুলি একটি ইন্টারফেস সংজ্ঞায়িত ও প্রয়োগ করতে ব্যবহৃত হয়।

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

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

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


1
"[...] উপসংহারে বলা হয়েছে যে অবজেক্ট ওরিয়েন্টেড ভাষাগুলি সম্ভবত কেবল নবজাতক প্রোগ্রামারদের জন্যই দরকারী যারা ধারণাটি বাস্তবে কীভাবে বাস্তবায়িত হয় তা বুঝতে ব্যর্থ হন।" মজাদার. আপনার কোন ভাষাগুলি মনে আছে? আপনার কাছে এই ভাষাগুলিতে লিখিত ওপেন সোর্স প্রকল্পগুলির উদাহরণ রয়েছে যা ব্যর্থ হয়েছিল বা ব্যর্থ হয়নি?
ভিনসেন্ট সাভার্ড

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

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

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

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

2

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

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

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

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

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


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

0

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

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

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


0

এটি একটি খুব ভাল প্রশ্ন এবং আমি অনুভব করি যে এখানে দেওয়া উত্তরগুলি ন্যায়বিচার করেনি, তাই আমি এগিয়ে গিয়ে আমার চিন্তা যুক্ত করব।

লক্ষ্য হল - সফটওয়্যার জটিলতা পরিচালনা । উদ্দেশ্যটি "ওও ভাষা ব্যবহার করুন" নয়।

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


যখন আমরা আসল বিশ্ব সত্তা সম্পর্কে কোডিং করি তখন সত্যিকারের বিশ্ব সত্তার ক্ষেত্রে কোডিং কোডের সুস্পষ্ট এবং সঠিক উপায় ।


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

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

সুতরাং আপনি উভয় এনক্রিপ্টড এবং ভাল এনক্যাপসুলেটেড এমন কোড লিখতে পারেন কারণ এই দুটি ভিন্ন ধারণা।

জটিলতার বাস্তবতার কাছাকাছি থাকার কারণে এনক্যাপসুলেশন জটিলতা পরিচালনা করতে সহায়তা করে।

অতএব, অবজেক্টগুলিতে প্রোগ্রাম কারণ, কোড করা আপনার পক্ষে সহজ এবং এটি আপনার এবং প্রত্যেকের পক্ষে বোঝার জন্য দ্রুত।


0

একটি জিনিস মনে রাখবেন:
ওওপি ভাষা বৈশিষ্ট্যগুলি সম্পর্কে নয়; আপনি আপনার কোডটি কীভাবে গঠন করেন তা এটি

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

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

সুতরাং, না, আমাদের ওওপি করার জন্য ওও ভাষাগুলির দরকার নেই । এটি কেবলমাত্র OOP একটি শালীন OO ভাষার সাথে করা এত সহজ


-1

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং কেবলমাত্র মডিউল + এনক্যাপসুলেশন এর চেয়ে বেশি। আপনি যেমনটি বলেছেন, অ-অবজেক্ট-ভিত্তিক (পদ্ধতিগত) ভাষায় মডিউল + এনক্যাপসুলেশন ব্যবহার করা সম্ভব। ওওপিতে কেবল এর চেয়ে বেশি কিছু জড়িত: এতে বস্তু এবং পদ্ধতি জড়িত। সুতরাং, না, এটি ওওপি ক্যাপচার করে না। দেখুন, যেমন, https://en.wikedia.org/wiki/Object-oriented_programming বা ওওপি-তে একটি ভাল পাঠ্যপুস্তকের পরিচিতি।


উত্তরের জন্য ধন্যবাদ. আপনি একটি সুপারিশ করতে পারেন?
স্টেকেক্সচেঞ্জ

-2

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

আসুন 100 ক্লাসের এমন একটি সিস্টেম কল্পনা করুন, যার মধ্যে প্রায় 20 টি ক্রিয়াকলাপ রয়েছে যা তাদের উপর সঞ্চালিত হতে পারে; এটা 2,000 ফাংশন। তবে এর মধ্যে, কেবলমাত্র 500 টি 'সেভ' এবং 'মুছুন' এর মতো সম্পূর্ণ অপারেশন, যখন 1500 অভ্যন্তরীণ ফাংশন যা কিছুটা রক্ষণাবেক্ষণ করে বা কিছুটা ইউটিলিটি ভূমিকা রাখে। বিবেচনা;

// intentionally in a non-specific language!

setName(person, name) {
    nameParts = splitPersonName(name);
    person.firstName = nameParts[0];
    person.lastName = nameParts[1];
    person.modified = true;
}

splitPersonName(name) {
    var result = [];
    result.add(name.substring(0, name.indexOf(" ")));
    result.add(name.substring(name.indexOf(" ") + 1));
    return result;
}

সুতরাং SetNameএকটি ফাংশন মানুষ কাজ করা উচিত নয় থেকে একজন ব্যক্তির কিন্তু SplitPersonNameএকটি ইউটিলিটি ব্যবহার করা ফাংশন দ্বারা ব্যক্তি।

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

এটাই publicprivateকর;

public class Person {
    public void setName(...) {...}
    private string[] splitPersonName(...) { ...}
}

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

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

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

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

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