আমি কোনও অবজেক্টের ধারণাটি বুঝতে পারি এবং একটি জাভা প্রোগ্রামার হিসাবে আমি অনুভব করি যে ওও দৃষ্টান্তটি প্রাকৃতিকভাবে আমার কাছে প্রাকৃতিকভাবে আসে।
তবে সম্প্রতি আমি নিজেকে ভাবতে দেখেছি:
এক সেকেন্ড অপেক্ষা করুন, স্থির শ্রেণি ব্যবহারের উপর কোনও বস্তু ব্যবহারের (যথাযথ এনক্যাপসুলেশন এবং ওও অনুশীলন সহ) আসলে ব্যবহারিক সুবিধা কী?
আমি কোনও বস্তু ব্যবহারের দুটি সুবিধা সম্পর্কে ভাবতে পারি (উভয়ই তাৎপর্যপূর্ণ এবং শক্তিশালী):
পলিমারফিজম: রানটাইম চলাকালীন আপনাকে গতিশীল এবং নমনীয়ভাবে কার্যকারিতা অদলবদল করতে দেয়। এছাড়াও সহজেই নতুন কার্যকারিতা 'যন্ত্রাংশ' এবং সিস্টেমে বিকল্প যুক্ত করতে দেয়। উদাহরণস্বরূপ, যদি কোনও
Car
শ্রেণিEngine
অবজেক্টগুলির সাথে কাজ করার জন্য নকশাকৃত হয় এবং আপনি গাড়িটি যে সিস্টেমে ব্যবহার করতে পারেন তার জন্য একটি নতুন ইঞ্জিন যুক্ত করতে চান, আপনি একটি নতুনEngine
উপক্লাস তৈরি করতে পারেন এবং কেবল এই শ্রেণীর কোনও অবজেক্টকে অবজেক্টে পাসCar
করতে পারেন to সম্পর্কে কিছু পরিবর্তনCar
। এবং রানটাইমের সময় আপনি এটি করার সিদ্ধান্ত নিতে পারেন।'চারপাশে কার্যকারিতা পাস' করতে সক্ষম হওয়া: আপনি সিস্টেমের চারপাশে কোনও বস্তুকে গতিময়ভাবে পাস করতে পারেন।
কিন্তু স্থির শ্রেণীর চেয়ে বেশি কোনও কিছুর সুবিধা রয়েছে?
প্রায়শই যখন আমি কোনও সিস্টেমে নতুন 'যন্ত্রাংশ' যুক্ত করি, তখন আমি একটি নতুন শ্রেণি তৈরি করে এবং এটি থেকে অবজেক্টগুলি ইনস্ট্যান্ট করেই করি।
তবে সম্প্রতি যখন আমি থেমেছি এবং এটি সম্পর্কে চিন্তাভাবনা করেছি, তখন বুঝতে পেরেছিলাম যে একটি স্থির শ্রেণি যেখানে আমি সাধারণত কোনও বস্তু ব্যবহার করি সেখানে প্রচুর স্থানে একটি অবজেক্টের মতোই একই কাজ করবে।
উদাহরণস্বরূপ, আমি আমার অ্যাপে একটি সেভ / লোড-ফাইল প্রক্রিয়া যুক্ত করার কাজ করছি।
কোনও অবজেক্টের সাথে কোডিং কলিং লাইনটি দেখতে পাবেন: Thing thing = fileLoader.load(file);
একটি স্ট্যাটিক বর্গ সহ, এটি দেখতে এটির মতো হবে: Thing thing = FileLoader.load(file);
পার্থক্য কি?
প্রায়শই আমি যখন কোনও সাধারণ-পুরাতন স্ট্যাটিক-শ্রেণীর ঠিক একই রকম আচরণ করি তখন কোনও বস্তুকে তদন্ত করার কারণ সম্পর্কে আমি ভাবতে পারি না। তবে ওও সিস্টেমে স্থির ক্লাসগুলি মোটামুটি বিরল। সুতরাং আমি অবশ্যই কিছু মিস করছি।
আমি তালিকাভুক্ত দুটি থেকে অন্য বস্তুর আরও কি সুবিধা আছে? দয়া করে ব্যাখ্যা করুন.
সম্পাদনা: স্পষ্ট করা। কার্যকারিতা অদলবদল করার সময়, বা চারপাশের ডেটা পাস করার সময় আমি খুব দরকারী জিনিসগুলি পাই। উদাহরণস্বরূপ আমি একটি অ্যাপ লিখেছি যা সুর তৈরি করে mel MelodyGenerator
বেশ কয়েকটি সাবক্লাস ছিল যা আলাদাভাবে সুর তৈরি করে এবং এই শ্রেণীর অবজেক্টগুলি বিনিময়যোগ্য (কৌশল প্যাটার্ন) ছিল।
সুরগুলিও বস্তু ছিল, যেহেতু এগুলি চারপাশে পাস করা কার্যকর। তীর এবং আঁশ ছিল।
কিন্তু সিস্টেমের 'স্ট্যাটিক' অংশগুলির কী - যেগুলি প্রায় পাস হবে না? উদাহরণস্বরূপ - একটি 'সেভ ফাইল' প্রক্রিয়া। আমি কেন এটি কোনও স্থিতিক শ্রেণিতে নয়, কোনও বস্তুতে প্রয়োগ করব?
FileLoader
সকেট থেকে পড়া একটি জন্য আপনার অদলবদল প্রয়োজন যখন কি হবে ? নাকি পরীক্ষার জন্য একটি উপহাস? বা একটি জিপ ফাইল খুলবে?
System.Math
ইন। নেট এমন একটি উদাহরণ যা স্থির শ্রেণীর হিসাবে অনেক বেশি অর্থবোধ করে: এটি আপনাকে কখনই বদলাতে বা উপহাস করার দরকার পড়বে না এবং অপারেশনগুলির কোনওটিকেই যৌক্তিকভাবে উদাহরণের অংশ হিসাবে তৈরি করা যায়নি। আপনার 'সঞ্চয়' উদাহরণটি এই বিলটির সাথে খাপ খায় বলে আমি সত্যিই মনে করি না।
Thing
?