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

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

"কিন্তু যদি গ্রাহক সত্যিই একটি বিস্তারিত স্পেসিফিকেশন প্রদান করেন?"

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

"তাহলে আমরা এই সব থেকে কি উপসংহার করব?"

"পণ্যের অভ্যন্তরীণ কাঠামোটি এমনভাবে বজায় রাখতে হবে যা ন্যূনতম পুনরায় কাজ করার সাথে বড় (এবং ছোট) পরিবর্তনগুলিকে অনুমতি দেবে।"

"তুমি এটা কিভাবে করলে?"

"আমরা ইতিমধ্যেই কথা বলেছি যে কিভাবে একটি প্রোগ্রাম একে অপরের সাথে ইন্টারঅ্যাক্ট করে এমন বস্তুগুলি নিয়ে গঠিত। আসুন বোর্ডে আমাদের প্রোগ্রামের সমস্ত বস্তুর প্রতিনিধিত্ব করতে মোটা বিন্দু ব্যবহার করি। আমরা প্রতিটি অবজেক্ট (ডট) থেকে সমস্ত বস্তুতে তীর আঁকব। (বিন্দু) যার সাথে এটি ইন্টারঅ্যাক্ট করে।"

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

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

একই 'শ্রম বিভাজন' নীতি, কিন্তু বড় পরিসরে?

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

"যদি তারা ভাল নির্বাচিত হয়। এবং যদি তারা ভালভাবে নির্বাচিত না হয়?"

'তাহলে পরিবর্তন করার জন্য আপনি দ্রুত " উইগল রুম " ফুরিয়ে যাবেন এবং পুরো সিস্টেমটিকে পুনরায় কাজ করতে হবে। এটা সময়ে সময়ে ঘটে। আমরা ভবিষ্যতের ভবিষ্যদ্বাণী করতে পারি না, তবে প্রোগ্রামটি পুনঃলিখন করার সংখ্যা আমরা কমিয়ে আনতে পারি।"

"ঠিক আছে। আমি প্রোগ্রামটিকে এভাবে ভাগ করার সুবিধা দেখছি, কিন্তু ওওপি ছবিতে কীভাবে আসে?"

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

"এবং এই অংশগুলির অভ্যন্তরীণ কাঠামো লুকিয়ে রাখা, এবং তারা কীভাবে অন্যান্য অংশগুলির সাথে যোগাযোগ করে তা কঠোরভাবে সীমিত করা - এটি এনক্যাপসুলেশন , তাই না?"

"ঠিক আছে। এনক্যাপসুলেশন এবং অ্যাবস্ট্রাকশন হল ওওপির মূল ভিত্তি। একটি ভাল প্রোগ্রামের এই দুটি নীতি অবশ্যই মেনে চলতে হবে। পরে আমরা অন্যান্য নীতিগুলির দিকে নজর দেব এবং তাদের সুবিধাগুলি বুঝতে পারব।"

"ভাল জিনিস. আমি অপেক্ষা করতে পারি না!"