স্থির পদ্ধতি সহ স্ট্যাটিক ক্লাসগুলি কি সলিড হিসাবে বিবেচিত হয়?


27

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

যেহেতু স্থিতিশীল পদ্ধতিগুলির সাথে স্ট্যাটিক ক্লাসগুলির ( Mathশ্রেণির মতো কিছুটা ) উদাহরণ নেই, তাই আমার যদি স্থির পদ্ধতিগুলির সাথে স্ট্যাটিক ক্লাস থাকে তবে আমার সিস্টেমটি কি সলিড হিসাবে বিবেচিত হবে?


আমি মনে করি এই প্রশ্নটি দুর্দান্ত। আসুন দেখুন সম্প্রদায়ের কী প্রস্তাব দেয়।
সা Saeedদ নেমতি

1
একটি গণিত শ্রেণিতে রাষ্ট্র অন্তর্ভুক্ত নয়। সুতরাং আপনি কখনও কখনও এই ধরণের অবজেক্টগুলি সত্যই পাস করেন না। সুতরাং এটি কীভাবে প্রাসঙ্গিক তা আমি নিশ্চিত নই।
মার্টিন ইয়র্ক

আমি মনে করি না স্থির ক্লাসগুলি সত্যই খাঁটি সলিড হিসাবে বলা যেতে পারে (বেশ কয়েকটি একই কারণে ইতিমধ্যে উল্লিখিত হিসাবে) তবে আমি তাদের ডিআরওয়ির নীতিটির পক্ষে একজন দুর্দান্ত উকিল এবং হাতিয়ার হিসাবে বিবেচনা করব।
dreza

2
কেমন করে? আমার অভিজ্ঞতা থেকে, স্থির শ্রেণীর অতিরিক্ত ব্যবহারের ফলে বেশিরভাগ লোক অর্ধ কোড স্থায়ীভাবে একটি গ্লোবাল স্ট্যাটিক গড অবজেক্টকে ম্যানিপুলেট করে সর্বদা নিজেকে পুনরাবৃত্তি করে।
back2dos

1
আমার ধারণা আমি সাধারণ কোড সরবরাহের জন্য ইউটিলিটি ক্লাসের ক্ষেত্রে আরও বেশি চিন্তা করছি। আমি সম্মত তারা সহজেই এবং প্রায়শই অপব্যবহার হয় তবে এখনও মনে করি যে এই রাজ্যটি কোনও সমস্যা নয় এমন সাধারণ
কোডকে

উত্তর:


27

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

আরও গুরুত্বপূর্ণ বিষয়, স্থির ক্লাসগুলি সিল করা হয় এবং তাই উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে না। এটি আপনার প্রশ্নটিকে সি # যতদূর যেতে পারে।

আপনি বলতে পারেন যে স্ট্যাটিক ক্লাসগুলি সর্বদা এলএসপি-সম্মতিযুক্ত কারণ আপনি কখনও এমন একটি সাবক্লাস উত্পাদন করতে পারবেন না যা সেই নীতি লঙ্ঘন করবে। আপনি আরও বলতে পারেন যে স্থির ক্লাসগুলি একই কারণে কখনও এলএসপি-অনুগত হয় না।


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

VB.NET এই ক্ষেত্রে সি # এর মতো ঠিক একইভাবে আচরণ করে, যতদূর আমি জানি।


আপনি অন্যান্য নীতিগুলিতে আগ্রহী কিনা তা আপনি উল্লেখ করেননি, তবে আমি এগুলি যে কোনওভাবেই সম্পূর্ণতার জন্য অন্তর্ভুক্ত করব।

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

যেহেতু স্ট্যাটিক ক্লাসগুলি সমস্ত 5 মানদণ্ড পূরণ করে না, সেগুলি সলড নয়।


যেহেতু সলাইড হওয়ার অর্থ আমাদের সমস্ত 5 টি মাপদণ্ডকে সন্তুষ্ট করতে হবে, তার অর্থ এই নয় যে তারা সলিড নয়?
পেসারিয়ার

1
@ পেসারিয়র হ্যাঁ, তবে যদি প্রয়োজন না হয় তবে একটি ক্লাসকে সর্বদা সলিডে জুতা দেওয়ার চেষ্টা করা উচিত নয়; এটি শ্রেণীর প্রসঙ্গে নির্ভর করে। যদি এটি কোনও ইউটিলিটি ক্লাস বা অন্য কিছু হয় তবে "সলিড" না হওয়া ঠিক আছে, তবে এটি যদি সত্যিকারের ডোমেন শ্রেণীর নির্দিষ্ট ডোমেন ব্যবহার করে তবে ...
ওয়েন মোলিনা

4

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

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


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

2
@ জোজো সম্মত ক্লাসের বাইরে সংজ্ঞায়িত ফাংশনগুলিকে সমর্থন করে এমন ভাষাগুলি এই ফাংশনগুলির লজিক্যাল গ্রুপিংকে সমর্থন করে যেমন সি ++ এর নেমস্পেসগুলি।
জ্ঞান ওরফে গ্যারি বুয়েন

2

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


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