আমার (স্বীকৃতভাবে সীমাবদ্ধ) ক্লোজারের মতো ক্রিয়ামূলক প্রোগ্রামিং ভাষাগুলির সংস্পর্শ থেকে, মনে হয় যে ডেটাগুলির এনক্যাপুলেশনের একটি কম গুরুত্বপূর্ণ ভূমিকা আছে। সাধারণত বিভিন্ন নেটিভ ধরণের যেমন মানচিত্র বা সেট হ'ল বস্তুর উপর উপাত্ত উপস্থাপনের পছন্দসই মুদ্রা। তদ্ব্যতীত, যে তথ্য সাধারণত অপরিবর্তনীয়।
উদাহরণস্বরূপ, বিষয়টি সম্পর্কে এক সাক্ষাত্কারে ক্লোজার খ্যাতি রিচ হিকির আরও বিখ্যাত উক্তিগুলির একটি :
ফোগাস: এই ধারণার অনুসরণ করে - কিছু মানুষ ক্লোজুর তার ধরণের ডেটা-লুকানো এনক্যাপসুলেশনে নিযুক্ত না হওয়ার বিষয়টি দেখে অবাক হয়। আপনি কেন ডেটা-লুকিয়ে রাখার সিদ্ধান্ত নিয়েছিলেন?
হিকি: আসুন পরিষ্কার হয়ে নিন যে ক্লোজুর অ্যাবস্ট্রাকশনগুলিতে প্রোগ্রামিংকে জোর দিয়েছিলেন। যদিও এক পর্যায়ে, কারও কাছে ডেটা অ্যাক্সেস থাকা দরকার। এবং যদি আপনার "ব্যক্তিগত" ধারণা থাকে তবে আপনার অধিকার এবং আস্থার সাথে সম্পর্কিত ধারণা প্রয়োজন। এবং এটি পুরো টন জটিলতা এবং সামান্য মূল্য যুক্ত করে, একটি সিস্টেমে অনড়তা তৈরি করে এবং প্রায়শই জিনিসগুলিকে এমন জায়গায় বাস করতে বাধ্য করে যা তাদের উচিত নয়। এটি অন্যান্য হেরে যা ঘটে যখন সাধারণ তথ্য ক্লাসে রাখা হয় তখন ঘটে। ডেটা অপরিবর্তনীয় যে পরিমাণে অ্যাক্সেস প্রদানের ফলে সামান্য ক্ষতি হয় তা ছাড়া অন্য কেউ পরিবর্তিত হতে পারে এমন কোনও কিছুর উপর নির্ভর করতে পারে। ঠিক আছে, ঠিক আছে, মানুষ বাস্তব জীবনে সর্বদা এটি করে এবং যখন জিনিসগুলি পরিবর্তিত হয়, তখন তারা খাপ খায়। এবং যদি তারা যুক্তিযুক্ত হয়, তারা জানে যে তারা যখন এমন কোনও কিছুর উপর ভিত্তি করে কোনও সিদ্ধান্ত নেয় যা পরিবর্তিত হতে পারে যে ভবিষ্যতে তাদের খাপ খাইয়ে নিতে পারে। সুতরাং, এটি একটি ঝুঁকি ব্যবস্থাপনার সিদ্ধান্ত, আমি মনে করি যে প্রোগ্রামাররা নিখরচায় থাকা উচিত। যদি লোকেদের বিমূর্তিতে প্রোগ্রাম করার ইচ্ছা প্রকাশ করার এবং প্রয়োগের বিবরণে বিবাহের বিষয়ে সতর্ক থাকার সংবেদনশীলতা না থাকে তবে তারা কখনই ভাল প্রোগ্রামার হতে পারবেন না।
ওও বিশ্ব থেকে আগত, এটি বছরের পর বছর ধরে শিখেছি এমন কিছু সংযুক্ত নীতিগুলিকে জটিল করে তুলবে। এর মধ্যে কয়েকটি হ'ল নামকরণের জন্য ইনফরমেশন হাইডিং, লিমিটার অফ ডিমিটার এবং ইউনিফর্ম অ্যাক্সেস নীতি অন্তর্ভুক্ত রয়েছে। সাধারণ থ্রেড যা এনক্যাপসুলেশন আমাদেরকে অন্যদের কী স্পর্শ করা উচিত এবং কী স্পর্শ করা উচিত নয় তা জানতে একটি API নির্ধারণ করতে দেয়। সংক্ষেপে, একটি চুক্তি তৈরি করা যা কোনও কোডের রক্ষণাবেক্ষণকারীকে অবাধে পরিবর্তন এবং রিফ্যাক্টরিংগুলি ভোক্তার কোডে কীভাবে বাগ প্রবর্তন করতে পারে (উদ্বোধন / বন্ধ নীতি) সম্পর্কে চিন্তা না করেই অবাধে পরিবর্তন এবং পুনঃসংশোধন করতে দেয়। এটি অন্যান্য প্রোগ্রামারদের সেই ডেটা পেতে বা তৈরি করতে কোন সরঞ্জামগুলি ব্যবহার করতে পারে তা জানার জন্য একটি পরিষ্কার, কিউরেটেড ইন্টারফেস সরবরাহ করে।
যখন ডেটা সরাসরি অ্যাক্সেস করার অনুমতি দেওয়া হয়, তখন সেই API চুক্তিটি ভেঙে যায় এবং সমস্ত এনক্যাপসুলেশন সুবিধা চলে যায় বলে মনে হয়। এছাড়াও, কঠোরভাবে অপরিবর্তনীয় ডেটা ডোমেন-নির্দিষ্ট কাঠামোগুলি (অবজেক্টস, স্ট্রাক্টস, রেকর্ডস) কে রাষ্ট্রের প্রতিনিধিত্ব করার অর্থে এবং সেই রাজ্যে সম্পাদন করা যেতে পারে এমন ক্রিয়াকলাপগুলির সেট হিসাবে খুব কম দরকারী বলে মনে হয়।
কোনও কোডবেজের আকার এত বড় হয় যে এপিআইগুলি সংজ্ঞায়িত করা দরকার এবং প্রচুর বিকাশকারীরা সিস্টেমের নির্দিষ্ট অংশগুলির সাথে কাজ করার সাথে জড়িত থাকার সময় এই সমস্যাগুলি কীভাবে কার্যকরী কোডবেসগুলি সমাধান করে? এই পরিস্থিতিটির এমন কোনও উদাহরণ রয়েছে যা প্রমাণ করে যে এই ধরণের কোডবেসে কীভাবে এটি পরিচালনা করা হয়?
Also, strictly immutable data seems to make passing around domain-specific structures (objects, structs, records) much less useful in the sense of representing a state and the set of actions that can be performed on that state.
আসলে তা না. একমাত্র যেটি পরিবর্তন হয় তা হল পরিবর্তনগুলি একটি নতুন অবজেক্টে শেষ হয়। কোড সম্পর্কে যুক্তি এলেই এটি একটি বিশাল জয় is চারপাশে পরিবর্তনীয় বস্তুগুলি পাস করার অর্থ কে তাদের কে রূপান্তর করতে পারে তার ট্র্যাক রাখা, একটি সমস্যা যা কোডের আকারের সাথে স্কেল করে।