আমি কেন রাজ্য ছাড়াই এতগুলি তাত্ক্ষণিক ক্লাস দেখছি?


18

আমি সি ++ এবং জাভা বিশ্বের অনেকগুলি তাত্ক্ষণিক ক্লাস দেখছি যার কোনও রাজ্য নেই।

লোকেরা কেন এটি করে তা আমি সত্যিই বুঝতে পারি না, তারা কেবল সি ++ এ ফ্রি ফাংশন সহ একটি নেমস্পেস বা জাভাতে একটি প্রাইভেট কনস্ট্রাক্টর এবং একটি ক্লাসিক পদ্ধতি সহ একটি ক্লাস ব্যবহার করতে পারে।

আমি কেবলমাত্র সুবিধাটিই ভাবতে পারি তা হ'ল আপনি যদি পরে সিদ্ধান্ত নেন যে আপনি নির্দিষ্ট পরিস্থিতিতে অন্যরকম প্রয়োগ করতে চান তবে আপনার বেশিরভাগ কোড পরিবর্তন করতে হবে না। কিন্তু তা কি অকাল ডিজাইনের ঘটনা নয়? এটি / পরে যথাযথ হয়ে উঠলে এটি একটি শ্রেণিতে পরিণত হতে পারে।

আমি কি এই ভুল হয়ে যাচ্ছি? আমি যদি সবকিছুকে বস্তুগুলিতে (অর্থাত্ তাত্ক্ষণিক ক্লাসে) না রাখি তবে এটি কী ওপ হয় না? তাহলে কেন সি ++ এবং জাভার স্ট্যান্ডার্ড লাইব্রেরিতে এতগুলি ইউটিলিটি নেমস্পেস এবং ক্লাস রয়েছে?

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


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

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

@ ফুটবল: হ্যাঁ, এটি সাধারণ common stackoverflow.com/questions/4692845/…
হোং লং

আপনি কি উদাহরণস্বরূপ ক্লাস বিবেচনা করেন? স্টেটম্যানেজারে রাজ্য নেই?
user470365

উত্তর:


22

আমি সি ++ এবং জাভা বিশ্বের অনেকগুলি তাত্ক্ষণিক ক্লাস দেখছি যার কোনও রাজ্য নেই।

তাদের নিজস্ব আইভার ছাড়াই ক্লাস তৈরির কিছু সম্ভাব্য কারণ:

  • রাজ্য একটি সুপারক্লাসে থাকতে পারে বা থাকতে পারে।

  • শ্রেণি কিছু ইন্টারফেস প্রয়োগ করে এবং তাত্ক্ষণিক হওয়া দরকার যাতে উদাহরণগুলি অন্য বস্তুর কাছে প্রেরণ করা যায়।

  • ক্লাসটি সাবক্ল্যাসড করার উদ্দেশ্যে রয়েছে।

  • গ্রুপ সম্পর্কিত কার্যাবলীর সহজ উপায়। (হ্যাঁ, এটি করার আরও ভাল বা ভিন্ন উপায় হতে পারে))

আমি কি এই ভুল হয়ে যাচ্ছি? আমি যদি সবকিছুকে বস্তুগুলিতে (অর্থাত্ তাত্ক্ষণিক ক্লাসে) না রাখি তবে এটি কী ওপ হয় না?

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


4

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

আমি কেবল উল্লেখ করতে চাই যে ইউটিলিটি ক্লাসগুলির অপব্যবহার অবশ্যই একটি ওও অ্যান্টি-প্যাটার্ন হতে পারে ( c2wiki এর বিবরণ দেখুন )। এই উদ্ধৃতিটি এটিকে সুন্দরভাবে বর্ণনা করেছে:

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

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


2

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

যাই হোক না কেন, এই ক্লাসগুলি কেবলমাত্র একক পাত্রে সম্পর্কিত পদ্ধতিগুলি একত্রে গোষ্ঠীভুক্ত করে, এমন পদ্ধতিগুলি যাতে সঠিকভাবে কাজ করার জন্য কোনও বস্তুর তাত্পর্য প্রয়োজন হয় না। এই জাতীয় শ্রেণীর উদাহরণ হ'ল SINE এবং COSINE (এবং অন্যান্য গণিত) ফাংশন সমেত একটি ম্যাথ শ্রেণি।


2

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


0

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

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

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

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