প্রথম সেমিস্টারে জাভা এবং ইউএমএলের মাধ্যমে আমরা ওওপি ধারণাগুলির সাথে এনক্যাপসুলেশন, ডেটা হিডিং, মডুলারালিটি, উত্তরাধিকার ইত্যাদির সাথে পরিচিত হয়েছিল। (জাভা আমার প্রথম প্রোগ্রামিং ভাষা)
এগুলির কোনওটিই ওওপি ধারণা নয়। এগুলি সবগুলি ওওর বাইরে রয়েছে, ওও থেকে পৃথক এবং অনেকগুলি এমনকি ওওর আগে আবিষ্কার করা হয়েছিল।
সুতরাং, যদি আপনি মনে করেন যে যে কি OO যেমন পণ্য, সব সম্পর্কে তারপর আপনার উপসংহার ঠিক হল: আপনি পদ্ধতিগত ভাষায় ঐ সব করতে পারেন, কারণ তারা OO যেমন পণ্য সঙ্গে কোন সম্পর্ক নেই ।
উদাহরণস্বরূপ, মডিউলারিটির উপর একটি সেমিনাল পেপার হ'ল মডিউলগুলিতে ডেকমপোজিং সিস্টেমে ব্যবহৃত হতে হবে । সেখানে ওয়ের কোনও উল্লেখ নেই। (এটি 1972 সালে লেখা হয়েছিল, ততক্ষণে ওও ইতিমধ্যে এক দশকেরও বেশি বয়সী হয়েও এখনও একটি অস্পষ্ট কুলুঙ্গি ছিল))
যদিও ডাটা বিমূর্ততা OO যেমন পণ্য গুরুত্বপূর্ণ, এটা আরো একটি হল ফল OO যেমন পণ্য (মেসেজিং) প্রাথমিক বৈশিষ্ট্যের তুলনায় এটি একটি সংজ্ঞা বৈশিষ্ট্য। এছাড়াও, এটি মনে রাখা খুব গুরুত্বপূর্ণ যে এখানে বিভিন্ন ধরণের ডেটা বিমূর্ততা রয়েছে। আজ ব্যবহৃত দুটি অতি সাধারণ প্রকারের ডেটা বিমূর্তি (যদি আমরা "যাই হোক না কেন বিমূর্ততা অবহেলা করি", যা সম্ভবত এখনও অন্য দুটি সংযুক্তের চেয়ে বেশি ব্যবহৃত হয়) হ'ল অ্যাবস্ট্রাক্ট ডেটা টাইপ এবং অবজেক্টস । সুতরাং, শুধু বলছে "তথ্য গোপন", "encapsulation", এবং "ডাটা বিমূর্ততা" দ্বারা, আপনি OO যেমন পণ্য সম্পর্কে কিছুই বলেন, যেহেতু OO যেমন পণ্য শুধুমাত্র এক ডেটা বিমূর্ততা ফর্ম, এবং দুই মৌলিকভাবে ভিন্ন আসলে আছেন:
- অ্যাবস্ট্রাক্ট ডেটা প্রকারের সাথে বিমূর্তকরণের প্রক্রিয়াটি হ'ল টাইপ সিস্টেম ; এটি এমন টাইপ সিস্টেম যা বাস্তবায়নটি আড়াল করে। (ধরণের সিস্টেমটি অগত্যা অচল হওয়ার দরকার নেই)) অবজেক্টের সাথে প্রয়োগটি একটি প্রক্রিয়াগত ইন্টারফেসের আড়ালে লুকানো থাকে , যার জন্য প্রকারের প্রয়োজন হয় না। (উদাহরণস্বরূপ, এটি ক্লোজার দিয়ে প্রয়োগ করা যেতে পারে, যেমন ইসএমএএসক্রিপ্টে হয় done
- অ্যাবস্ট্রাক্ট ডেটা প্রকারের সাহায্যে, বিভিন্ন এডিটিগুলির উদাহরণ একে অপরের থেকে আবদ্ধ হয়, তবে একই এডিটি-র উদাহরণগুলি একে অপরের প্রতিনিধিত্ব এবং ব্যক্তিগত বাস্তবায়ন পরিদর্শন ও অ্যাক্সেস করতে পারে। অবজেক্টস সর্বদা সবকিছু থেকে encapsulated হয় । শুধুমাত্র বস্তু নিজেই তার নিজস্ব প্রতিনিধিত্ব পরিদর্শন এবং তার নিজস্ব ব্যক্তিগত বাস্তবায়ন অ্যাক্সেস করতে পারেন। অন্য কোনও অবজেক্ট , এমনকি একই ধরণের অন্যান্য অবজেক্টস নয়, একই শ্রেণীর অন্যান্য উদাহরণ, একই প্রোটোটাইপযুক্ত অন্য অবজেক্টস, অবজেক্টের ক্লোনস বা যা কিছু করতে পারে তা নয়। কিছুই না ।
এর অর্থ, যাইহোক, জাভাতে, ক্লাসগুলি বস্তু-ভিত্তিক নয়। একই শ্রেণীর দুটি উদাহরণ একে অপরের প্রতিনিধিত্ব এবং ব্যক্তিগত প্রয়োগকরণ অ্যাক্সেস করতে পারে । সুতরাং, ক্লাসগুলির উদাহরণগুলি বস্তু নয়, এগুলি প্রকৃতপক্ষে এডিটি দৃষ্টান্ত। জাভা interface
গুলি অবশ্য না অবজেক্ট ওরিয়েন্টেড তথ্য বিমূর্ততা প্রদান। সুতরাং, অন্য কথায়: কেবল ইন্টারফেসের উদাহরণগুলি জাভাতে অবজেক্টস, শ্রেণির উদাহরণগুলি নয়।
মূলত, প্রকারের জন্য, আপনি কেবল ইন্টারফেস ব্যবহার করতে পারেন। এর অর্থ প্যারামিটার ধরণের পদ্ধতি এবং কনস্ট্রাক্টর, রিটার্নের ধরণের পদ্ধতি, উদাহরণ ক্ষেত্রের ধরণ, স্ট্যাটিক ক্ষেত্রগুলি এবং স্থানীয় ক্ষেত্রগুলি, instanceof
অপারেটর বা কাস্ট অপারেটরের পক্ষে যুক্তি এবং জেনেরিক ধরণের কনস্ট্রাক্টরের জন্য আর্গুমেন্ট সবসময় ইন্টারফেস হতে হবে। কোনও ক্লাস কেবল new
অপারেটরের পরে ব্যবহার করা যেতে পারে , অন্য কোথাও নেই।
উদাহরণস্বরূপ, মড্যুলারটির জন্য আমরা প্রোগ্রামটি কেবলমাত্র অনেকগুলি ছোট ছোট প্রোগ্রামে বিভক্ত করতে পারি যা ভাল সংজ্ঞায়িত টাস্ক সম্পাদন করে যার কোড পৃথক ফাইলগুলিতে থাকে। এই প্রোগ্রামগুলি তাদের সু-সংজ্ঞায়িত ইনপুট এবং আউটপুট মাধ্যমে একে অপরের সাথে যোগাযোগ করবে। এনক্যাপসুলেশন অর্জনের জন্য ফাইলগুলি সুরক্ষিত হতে পারে (এনক্রিপ্ট করা?)। কোড পুনরায় ব্যবহারের জন্য আমরা যখনই নতুন প্রোগ্রামগুলিতে প্রয়োজন হয় তখনই কেবল সেই ফাইলগুলিতে কল করতে পারি। এই ওওপি যা যা ক্যাপচার করে তা হ'ল না আমি খুব স্পষ্ট কিছু মিস করছি?
আপনি যা বর্ণনা করছেন তা ওও।
ওও সম্পর্কে সত্যই ভাবার পক্ষে এটি একটি ভাল উপায়। আসলে, ওওর আসল উদ্ভাবকগণ মনে মনে অনেকটাই ঠিক এটাই। (অ্যালান কে আরও এক ধাপ এগিয়ে গেছে: তিনি নেটওয়ার্কের মাধ্যমে একে অপরের কাছে বার্তা প্রেরণের জন্য অনেক ছোট কম্পিউটার কল্পনা করেছিলেন।) আপনি "প্রোগ্রাম" যাকে বলে তাকে সাধারণত "অবজেক্ট" বলা হয় এবং "কল" এর পরিবর্তে আমরা সাধারণত "বার্তা প্রেরণ করি" বলে থাকি "।
অবজেক্ট ওরিয়েন্টেশন মেসেজিং (ওরফে ডায়নামিক প্রেরণ ) সম্পর্কিত। "অবজেক্ট ওরিয়েন্টেড" শব্দটি তৈরি করেছিলেন স্মলটকের মূল ডিজাইনার ডাঃ অ্যালান কে, এবং তিনি এটিকে এভাবে সংজ্ঞায়িত করেছেন :
আমার কাছে ওওপি মানে কেবল বার্তা, স্থানীয় ধরে রাখা এবং সুরক্ষা এবং রাষ্ট্র-প্রক্রিয়া লুকানো এবং চূড়ান্তভাবে দেরী-বাঁধাই সমস্ত জিনিস।
আসুন এটি ভেঙে দিন:
- বার্তাপ্রেরণ ("ভার্চুয়াল পদ্ধতি প্রেরণ", যদি আপনি স্মলটাকের সাথে পরিচিত না হন)
- রাষ্ট্র প্রক্রিয়া হওয়া উচিত
- স্থানীয়ভাবে ধরে রাখা
- রক্ষিত
- গোপন
- সবকিছুর চরম দেরি-বাঁধাই
বাস্তবায়ন অনুসারে, মেসেজিং একটি বিলম্বিত প্রক্রিয়া কল এবং যদি পদ্ধতি কলগুলি দেরীতে আবদ্ধ হয়, তবে আপনি ডিজাইনের সময় জানতে পারবেন না আপনি কী কল করতে যাচ্ছেন, তাই আপনি রাষ্ট্রের কংক্রিটের উপস্থাপনা সম্পর্কে কোনও অনুমান করতে পারবেন না। সুতরাং, সত্যিই এটি মেসেজিং সম্পর্কে, দেরী-বাঁধাই মেসেজিংয়ের একটি বাস্তবায়ন এবং এনক্যাপসুলেশন এর ফলাফল।
পরে তিনি স্পষ্ট করে বলেছিলেন যে " বড় ধারণাটি 'মেসেজিং' " এবং "বার্তা-ওরিয়েন্টেড" এর পরিবর্তে এটিকে "অবজেক্ট-ওরিয়েন্টেড" হিসাবে অভিহিত করার জন্য আফসোস করেছে কারণ "অবজেক্ট-ওরিয়েন্টেড" শব্দটি গুরুত্বহীন জিনিসটির উপর দৃষ্টি নিবদ্ধ করে (বস্তুগুলি) ) এবং সত্যই গুরুত্বপূর্ণ (মেসেজিং) থেকে বিরত থাকে:
সবাইকে স্মরণ করিয়ে দেওয়ার চেষ্টা করার জন্য যে আমি সর্বশেষ ওওপিএসএল-এ কিছু ব্যথা নিয়েছিলাম কেবল একটি মৃদু অনুস্মারক স্মরণ করিয়ে দিই যে স্মলটালক কেবল তার বাক্য গঠন বা শ্রেণিকাল লাইব্রেরিই নয়, এটি ক্লাস সম্পর্কেও নয়। আমি দুঃখিত যে আমি অনেক আগে এই বিষয়টির জন্য "অবজেক্টস" শব্দটি তৈরি করেছি কারণ এটি অনেক লোককেই কম ধারণাটিতে ফোকাস দেয় gets
বড় ধারণাটি হ'ল "মেসেজিং" - এটিই স্মলটালক / স্কেকের কর্নাল সম্পর্কে (এবং এটি এমন কিছু যা আমাদের জেরক্স পিএআরসি পর্বে কখনও পুরোপুরি সম্পন্ন হয়নি)। জাপানিদের একটি ছোট শব্দ আছে - মা - "যেটির মধ্যে রয়েছে" - সম্ভবত নিকটতম ইংরেজি সমতুল্য "আন্তঃরাজ্য"। দুর্দান্ত এবং বর্ধনশীল সিস্টেম তৈরির মূল কীটি তার অভ্যন্তরীণ বৈশিষ্ট্য এবং আচরণগুলি কী হওয়া উচিত তার চেয়ে মডিউলগুলি কীভাবে যোগাযোগ করে তা ডিজাইনের জন্য আরও অনেক কিছু। ইন্টারনেটের কথা চিন্তা করুন - বেঁচে থাকার জন্য, এটিকে (ক) বিভিন্ন ধরণের ধারণা এবং উপলব্ধির অনুমতি দিতে হবে যা কোনও একক মানের বাইরে এবং (খ) এই ধারণাগুলির মধ্যে বিভিন্ন ডিগ্রি সুরক্ষামূলক আন্তঃব্যবযোগিতার অনুমতি দিতে পারে।
(অবশ্যই, আজ, বেশিরভাগ লোকেরা এমনকি বস্তুগুলিতে নয় তবে ক্লাসগুলিতে মনোনিবেশ করে যা আরও বেশি ভুল))
রূপক হিসাবে এবং একটি প্রক্রিয়া হিসাবে উভয়ই ওয়ের কাছে মেসেজিং মৌলিক ।
আপনি যদি কাউকে বার্তা পাঠান তবে তারা জানেন না যে তারা এটি দিয়ে কী করে do শুধুমাত্র জিনিস আপনি মান্য করতে পারেন, তাদের প্রতিক্রিয়া। আপনি কী জানেন না যে তারা নিজেরাই মেসেজটি প্রক্রিয়া করেছেন (অর্থাত্ যদি বস্তুর কোনও পদ্ধতি আছে), যদি তারা বার্তাটি অন্য কারও কাছে প্রেরণ করে (প্রতিনিধি / প্রক্সিং), এমনকি যদি তারা তা বুঝতে পারে। এটিই এনক্যাপসুলেশন সম্পর্কে যা, ওও এটিই। আপনি প্রক্সিটি থেকে কোনও প্রক্সিও আলাদা করতে পারবেন না, যতক্ষণ না এটি কীভাবে আপনি এটি প্রত্যাশা করেন তা সাড়া দেয়।
"মেসেজিং" এর জন্য আরও একটি "আধুনিক" শব্দটি হ'ল "গতিশীল পদ্ধতি প্রেরণ" বা "ভার্চুয়াল পদ্ধতি কল", তবে এটি রূপকটি হারিয়ে ফেলে এবং প্রক্রিয়াটির উপর দৃষ্টি নিবদ্ধ করে।
সুতরাং, অ্যালান কেয়ের সংজ্ঞাটি দেখার জন্য দুটি উপায় রয়েছে: আপনি যদি এটি নিজের হাতে দাঁড়িয়ে দেখেন তবে আপনি দেখতে পাবেন যে মেসেজিংটি মূলত একটি দেরী-আবদ্ধ পদ্ধতি কল এবং দেরিতে-বাঁধাই বোঝায় এনক্যাপসুলেশন, সুতরাং আমরা সিদ্ধান্ত নিতে পারি যে # 1 এবং # 2 আসলে রিডানডান্ট এবং ওও দেরি-বাঁধাই সম্পর্কে।
তবে পরে তিনি স্পষ্ট করেছিলেন যে গুরুত্বপূর্ণ জিনিসটি মেসেজিং, এবং তাই আমরা এটিকে অন্য একটি কোণ থেকে দেখতে পারি: বার্তাটি দেরিতে আবদ্ধ। এখন, যদি মেসেজ করা কেবলমাত্র সম্ভব ছিল, তবে # 3 তুচ্ছভাবে সত্য হতে পারে: যদি কেবল একটি জিনিস থাকে এবং সেই জিনিসটি দেরীতে আবদ্ধ হয়, তবে সমস্ত জিনিস দেরীতে আবদ্ধ। এবং আবারও, এনক্যাপসুলেশন মেসেজিং থেকে অনুসরণ করে।
অনুরূপ পয়েন্টগুলি অন আন্ডারস্ট্যান্ডিং ডেটা বিমূর্তকরণেও করা হয়েছে, উইলিয়াম আর কুক দ্বারা পুনর্বিবেচিত এবং "অবজেক্ট" এবং "অবজেক্ট ওরিয়েন্টেড" এর সরল, আধুনিক সংজ্ঞা সম্পর্কিত তার প্রস্তাবও :
ক্রিয়াকলাপের গতিশীল প্রেরণ হ'ল বস্তুর প্রয়োজনীয় বৈশিষ্ট্য। এর অর্থ হ'ল অপারেশনটি হ'ল বস্তুর নিজস্ব গতিশীল সম্পত্তি। অপারেশনগুলি স্থিতিশীলভাবে চিহ্নিত করা যায় না, এবং কোনও প্রদত্ত অনুরোধের জবাবে কী চালানো হবে তা চালানো ব্যতীত ঠিক কী [অপারেশন] চালানো হবে তা সাধারণভাবে জানার কোনও উপায় নেই। এটি হ'ল প্রথম শ্রেণীর ফাংশনগুলির সাথে একই, যা সর্বদা গতিশীলভাবে প্রেরণ করা হয়।
স্মলটাক -২২ এ, এমনকি কোনও বস্তুও ছিল না! এখানে কেবলমাত্র বার্তা প্রবাহগুলি পার্স করা, পুনর্লিখন এবং পুনরায় সংযুক্ত হয়ে গেছে। প্রথমে পদ্ধতিগুলি এসেছে (বার্তা প্রবাহগুলি বিশ্লেষণ এবং পুনঃসূচনা করার স্ট্যান্ডার্ড উপায়), পরে অবজেক্টস এসেছিল (কিছু ব্যক্তিগত রাষ্ট্র ভাগ করে নেওয়া পদ্ধতির গোষ্ঠীকরণ)। উত্তরাধিকার অনেক পরে এসেছিল এবং ক্লাসগুলি কেবল উত্তরাধিকার সমর্থন করার উপায় হিসাবে চালু হয়েছিল। কাইয়ের গবেষণা দলটি ইতিমধ্যে প্রোটোটাইপ সম্পর্কে জানত তবে তারা সম্ভবত প্রথম স্থানে ক্লাস চালু করতে পারত না।
প্রকারভেদ এবং প্রোগ্রামিং ভাষাগুলিতে বেনজামিন পিয়ার্স যুক্তি দেয় যে অবজেক্ট-ওরিয়েন্টেশনের সংজ্ঞায়িত বৈশিষ্ট্যটি ওপেন পুনরাবৃত্তি ।
সুতরাং: অ্যালান কে এর মতে, ওও মেসেজিং সম্পর্কে। উইলিয়াম কুকের মতে ওও হ'ল ডায়নামিক মেথড প্রেরণ (যা আসলে একই জিনিস)। বেঞ্জামিন পিয়ার্সের মতে, ওও ওপেন রিকার্সিয়ান সম্পর্কে মূলত যার অর্থ আত্ম-রেফারেন্সগুলি গতিশীলভাবে সমাধান করা হয় (বা কমপক্ষে এটি সম্পর্কে চিন্তা করার উপায়), বা অন্য কথায়, মেসেজিং।
যেমন আপনি দেখতে পাচ্ছেন, যে ব্যক্তি "ওও" শব্দটি তৈরি করেছিলেন, তিনি বস্তুর উপর একটি বরং রূপক দৃষ্টিভঙ্গি রাখেন, কুকের পরিবর্তে বাস্তববাদী দৃষ্টিভঙ্গি রয়েছে, এবং পিয়ার্স খুব কঠোর গাণিতিক দৃষ্টিভঙ্গি করেছেন। তবে গুরুত্বপূর্ণ বিষয়টি হল: দার্শনিক, বাস্তববাদী এবং তাত্ত্বিক সকলেই একমত! বার্তা হ'ল ওওর এক স্তম্ভ। সময়কাল।
এখানে উত্তরাধিকারের উল্লেখ নেই! ওওর জন্য উত্তরাধিকার হ'ল প্রয়োজনীয় নয়। সাধারণভাবে, বেশিরভাগ OO ভাষাগুলির পুনরায় ব্যবহারের কিছু উপায় রয়েছে তবে এটি অবশ্যই উত্তরাধিকার হতে হবে না। উদাহরণস্বরূপ, এটি প্রতিনিধিদের কিছু ফর্মও হতে পারে। বস্তুত, অরল্যান্ডো চুক্তি সম্পর্কে আলোচনা করা প্রতিনিধিদল অবজেক্ট oiented ভাষায় নকশা স্থান মধ্যে উত্তরাধিকার এবং কিভাবে বিভিন্ন বিভিন্ন নকশা পয়েন্ট প্রতিনিধিদল এবং উত্তরাধিকার নেতৃত্ব ফরম একটি বিকল্প হিসাবে। (নোট করুন যে জাভা-র মতো উত্তরাধিকারকে সমর্থন করে এমন ভাষাগুলিতেও লোকেরা আসলে এড়াতে শেখানো হয়, আবার এটি নির্দেশ করে যে এটি ওওর জন্য প্রয়োজনীয় নয়))