সম্পূর্ণ অপরিবর্তনীয়তা এবং অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং


43

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

পরিবর্তনীয় এবং অপরিবর্তনীয় উভয় বস্তু তাদের নিজস্ব সুবিধার এবং অসুবিধাগুলির পুরো তালিকা নিয়ে আসে bring

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

আমার প্রশ্ন হয়: না সম্পূর্ণ (! এসআইসি) কোন বস্তুর -ie অপরিবর্তনীয়তা একবার এটি created- একটি গলি প্রেক্ষাপটে কোন মানে হয়েছে পরিবর্তন ঘটান করতে পারেন?

এই জাতীয় মডেলের ডিজাইন বা বাস্তবায়ন কি আছে?

মূলত, (সম্পূর্ণ) অপরিবর্তনীয়তা এবং ওওপি বিপরীত বা অরথোগোনাল?

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


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

4
মিউটিবিলিটি সি # এবং জাভার মতো ওওপি ভাষার সম্পত্তি নয়, অপরিবর্তনীয়তাও নয়। আপনি ক্লাসটি লেখার মাধ্যমে পরিবর্তন বা অপরিবর্তনীয়তা নির্দিষ্ট করে দিন।
রবার্ট হার্ভে

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

2
@ মিশেলটি প্রশ্নটি নির্দিষ্ট জিনিসগুলিকে পরিবর্তনীয় করে তোলার বিষয়ে নয়, এটি সমস্ত কিছুকে অপরিবর্তনীয় করে তোলার বিষয়ে।

উত্তর:


43

ওওপি এবং অপরিবর্তনীয়তা একে অপরের প্রায় সম্পূর্ণ orthogonal। তবে, জরুরী প্রোগ্রামিং এবং অপরিবর্তনীয়তা নয়।

ওওপি দুটি মূল বৈশিষ্ট্য দ্বারা সংক্ষিপ্ত করা যেতে পারে:

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

  • ডায়নামিক ডিসপ্যাচ : আমি যখন কোনও বস্তুতে কোনও পদ্ধতিতে কল করি তখন সঞ্চালিত পদ্ধতিটি রান সময়টিতে সমাধান হয়ে যায়। (যেমন শ্রেণিভিত্তিক ওওপি- sizeতে , আমি IListউদাহরণে কোনও পদ্ধতিতে কল করতে পারি , তবে কলটি কোনও LinkedListশ্রেণিতে প্রয়োগের ক্ষেত্রে সমাধান হতে পারে )। পলিমারফিক আচরণের অনুমতি দেওয়ার একটি উপায় ডায়নামিক প্রেরণ।

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

একটি অপরিহার্য প্রোগ্রামে স্টেটমেন্ট থাকে যা ক্রমান্বয়ে সম্পাদিত হয়। একটি বিবৃতি প্রোগ্রামের অবস্থা পরিবর্তন করার মত পার্শ্ব প্রতিক্রিয়া আছে। অপরিবর্তনীয়তার সাথে, রাষ্ট্র পরিবর্তন করা যায় না (অবশ্যই, একটি নতুন রাষ্ট্র তৈরি করা যেতে পারে)। অতএব, অপরিহার্য প্রোগ্রামিং মূলত অপরিবর্তনীয়তার সাথে বেমানান।

এটি এখন ঘটেছিল যে ওওপি historতিহাসিকভাবে সবসময়ই আবশ্যক প্রোগ্রামিংয়ের সাথে সংযুক্ত ছিল (সিমুলা আলগোলের উপর ভিত্তি করে), এবং সমস্ত মূলধারার ওওপি ভাষায় আবশ্যকীয় শিকড় রয়েছে (সি ++, জাভা, সি #,… সবগুলি মূল সি তে অন্তর্ভুক্ত)। এটি বোঝায় না যে ওওপি নিজেই অপরিহার্য বা পরিবর্তনযোগ্য হবে, এর অর্থ এই যে এই ভাষাগুলির দ্বারা ওওপি বাস্তবায়ন পারস্পরিক পরিবর্তনকে মঞ্জুরি দেয়।


2
বিশেষত দুটি মূল বৈশিষ্ট্যের সংজ্ঞা দেওয়ার জন্য আপনাকে অনেক ধন্যবাদ।
হাইপারবোরিয়াস

ডায়নামিক ডিসপ্যাচ ওওপির মূল বৈশিষ্ট্য নয়। উভয়ই সত্যই এনক্যাপসুলেশন নয় (যেমন আপনি ইতিমধ্যে স্বীকার করেছেন)।
-তে মনিকাকে আঘাত করা বন্ধ করুন

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

2
"অবজেক্টগুলি পদ্ধতি এবং ডেটারের একটি জুড়ি" করত। আপনার কেবলমাত্র এমন কিছু যা অপরিবর্তনীয়তার সাথে কিছুই করার নেই।
-তে মনিকাকে আঘাত করা বন্ধ করুন

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

25

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

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

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

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


17

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

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

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

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


ধন্যবাদ. আপনি দয়া করে আপনার শেষ অনুচ্ছেদটি কিছুটা বিশদভাবে বর্ণনা করতে পারেন ("সুস্পষ্ট" কিছুটা বিষয়গত হতে পারে)।
হাইপারবোরিয়াস

ইতিমধ্যে করেছেন ....
রবার্ট হার্ভে

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

3
@ রবার্টহার্ভে আপনি বলেছেন যে আপনার পরিবর্তন হতে হবে কারণ আপনাকে লুপ করতে হবে (অন্যথায় আপনাকে পুনরাবৃত্তি ব্যবহার করতে হবে)। আমি দু'বছর আগে হাস্কেল ব্যবহার শুরু করার আগে ভেবেছিলাম আমারও পরিবর্তনশীল পরিবর্তনশীল দরকার needed আমি কেবল বলছি "লুপ" (মানচিত্র, ভাঁজ, ফিল্টার ইত্যাদি) এর অন্যান্য উপায় রয়েছে। একবার আপনি টেবিলটি লুপিংয়ের পরে, অন্য কেন আপনার পরিবর্তনীয় ভেরিয়েবলগুলির প্রয়োজন হবে?
cimmanon

1
@ রবার্টহার্ভে তবে প্রোগ্রামিং ভাষার মূল বক্তব্য: আপনার কাছে যা উন্মোচিত হয়েছে এবং যা হুডের নীচে ঘটছে তা নয়। পরেরটি হ'ল অ্যাপ্লিকেশন বিকাশকারী নয়, সংকলক বা দোভাষীর দায়িত্ব। অন্যথায় এসেম্বলারের কাছে ফিরে আসুন।
হাইপারবোরিয়াস

5

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

পরিবর্তনীয় বা অপরিবর্তনীয় প্রকারের বস্তুগুলি ব্যবহার করে এনক্যাপসুলেট মান ব্যবহার করা সম্ভব হলেও, নিম্নলিখিত শর্তগুলির মধ্যে একটি যদি কমপক্ষে প্রয়োগ হয় তবে কোনও বস্তু কেবলমাত্র মান হিসাবে আচরণ করতে পারে:

  1. অবজেক্টের কোনও রেফারেন্স কখনও এমন কোনও কিছুর সংস্পর্শে আসে না যা এতে রাজ্যকে আবৃত করে রাখতে পারে।

  2. কমপক্ষে কোনও অবজেক্টের রেফারেন্সের ধারক এমন সমস্ত ব্যবহার জানেন যা কোনও অতিরিক্ত রেফারেন্স রাখতে পারে।

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

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

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


4

সি # তে কিছু ধরণের স্ট্রিংয়ের মতো অপরিবর্তনীয়।

এটি আরও মনে করে যে পছন্দটি দৃ strongly়ভাবে বিবেচনা করা হয়েছে।

নিশ্চিতভাবেই যদি আপনি সেই ধরণের কয়েকশো বার বার সংশোধন করতে চান তবে তা অপরিবর্তনীয় ধরণের ব্যবহারের দাবিতে কার্য সম্পাদন করছে। এই কারণেই এই ক্ষেত্রে StringBuilderক্লাসের পরিবর্তে ক্লাসটি ব্যবহার করার পরামর্শ দেওয়া হচ্ছে string

আমি একজন প্রোফাইলারের সাথে একটি পরীক্ষা করেছি এবং অপরিবর্তনীয় টাইপটি ব্যবহার করা সত্যই বেশি সিপিইউ এবং র‌্যামের চাহিদা।

এটি 4,000 অক্ষরের একটি স্ট্রিংয়ে কেবল একটি অক্ষর পরিবর্তনের জন্য আপনাকে র‌্যামের অন্য একটি অঞ্চলে প্রতি চরকে অনুলিপি করতে হবে তা বিবেচনা করাও স্বজ্ঞাত।


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

@ ডেলানান আমি আরও মনে করি যে উত্তরের শেষ অনুচ্ছেদটি বাস্তবায়ন সম্পর্কিত বিস্তারিত (ইম) পরিবর্তনের চেয়ে বেশি।
হাইপারবোরিয়াস

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

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

1
@ স্পষ্টত হ্যাঁ, একটি string(traditional তিহ্যবাহী উপস্থাপনা) পরিবর্তনের মতো ধীর না হলেও পড়া ধীরে ধীরে হবে । একটি "স্ট্রিং" (আমি যে প্রতিনিধিত্বের বিষয়ে কথা বলছি) 1000 পরিবর্তনের পরে ঠিক নতুনভাবে তৈরি স্ট্রিংয়ের মতো হবে (মডুলোর সামগ্রীগুলি); এক্স ক্রিয়াকলাপের পরে কোনও কার্যকর বা ব্যাপকভাবে ব্যবহৃত ধ্রুবক ডেটা কাঠামো মানকে হ্রাস করে না। স্মৃতি বিভাজন কোনও গুরুতর সমস্যা নয় (আপনার অনেক বরাদ্দ রয়েছে, হ্যাঁ, তবে আধুনিক আবর্জনা সংগ্রহকারীদের মধ্যে টুকরো টুকরো টুকরো

0

একটি বড় কারণের জন্য, ওওপি বা অন্যান্য বিষয়গুলিতে সমস্ত কিছুর সম্পূর্ণ অপরিবর্তনীয়তা খুব একটা বোঝায় না:

প্রতিটি দরকারী প্রোগ্রামের পার্শ্ব প্রতিক্রিয়া রয়েছে।

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

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

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


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

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

7
-1। এটি ভুল। আপনি মিউটেশনের সাথে বিভ্রান্তিকর পার্শ্ব প্রতিক্রিয়াগুলি ব্যবহার করছেন এবং কার্যত ভাষা দ্বারা প্রায়শই একইরকম আচরণ করা হলেও এগুলি আলাদা। প্রতিটি দরকারী প্রোগ্রামের পার্শ্ব প্রতিক্রিয়া রয়েছে; প্রতিটি দরকারী প্রোগ্রামের রূপান্তর হয় না।
মাইকেল শ

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


-2

আমি মনে করি এটি OOP- এর আপনার সংজ্ঞাটি কোনও বার্তা-পাসিং শৈলী ব্যবহার করে কিনা তার উপর নির্ভর করে।

খাঁটি ফাংশনগুলিকে কোনও কিছুই রূপান্তর করতে হবে না কারণ তারা নতুন মানের সাথে আপনি যে ভেরিয়েবল সঞ্চয় করতে পারবেন তা ফেরত দেয়।

var brandNewVariable = pureFunction(foo);

বার্তা প্রেরণ শৈলীর সাথে, আপনি কোনও অবজেক্টকে নতুন ভেরিয়েবলে আপনার কী নতুন ডেটা সংরক্ষণ করা উচিত তা জিজ্ঞাসা করার পরিবর্তে নতুন ডেটা সঞ্চয় করতে বলে tell

sameOldObject.changeMe(foo);

বাইরের পরিবর্তে অবজেক্টের অভ্যন্তরে বেঁচে থাকার জন্য এর পদ্ধতিগুলি খাঁটি ফাংশন তৈরি করে অবজেক্ট থাকা এবং সেগুলিকে পরিবর্তিত না করা সম্ভব।

var brandNewVariable = nonMutatingObject.askMe(foo);

তবে বার্তা উত্তরণ শৈলী এবং অপরিবর্তনীয় বস্তুগুলির মিশ্রণ সম্ভব নয়।

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