একটি "বৈশিষ্ট্য হিংসা" কোড কী এবং কেন এটি একটি কোড গন্ধ হিসাবে বিবেচিত হয়?


53

এই প্রশ্নটিতে ওপি ভাবাবেগ en র্ষা কোড কী তা সংশোধন করার বিষয়ে আলোচনা করে O আমি যেখানে এই নিফটি বাক্যাংশটি উদ্ধৃত করে দেখেছি তার আরেকটি উদাহরণ হ'ল প্রোগ্রামার্স.এসইতে সম্প্রতি দেওয়া একটি উত্তর in যদিও আমি একটি ড্রপ করেনি মন্তব্য করে উত্তর তথ্য চাইছে আমি ভেবেছিলাম এটা Q & A- নিম্নলিখিত বুঝতে কি শব্দটি দ্বারা বোঝানো হয় প্রোগ্রামারদের সাধারণ সাহায্যের would বৈশিষ্ট্য দ্বেষ । আপনি যদি যথাযথ মনে করেন তবে অতিরিক্ত ট্যাগগুলি সম্পাদনা করতে নির্দ্বিধায় অনুভব করুন।


উত্তর:


88

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

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

প্রথম পরিস্থিতি নিয়ে সমস্যা এবং এটি একটি কোড গন্ধ হিসাবে বিবেচিত হয়, কারণ এটি এনক্যাপসুলেশনটি ভেঙে দেয়।

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


7
+1, যদিও আপনার উদাহরণটি বাস্তবসম্মত নয়, কারণ একটি কার্যকর আয়তক্ষেত্র শ্রেণি সাধারণত প্রস্থ এবং উচ্চতার ক্ষেত্রগুলি প্রকাশ করে।
ডক ব্রাউন

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

2
@ ডকব্রাউন একটি টরাস, শঙ্কু বা গোলকের পৃষ্ঠে আঁকা একটি আয়তক্ষেত্রটি কল্পনা করুন। যদি আমার আকৃতি আঁকার লাইব্রেরি এমন বস্তু উত্পাদন করে যা এই জাতীয় প্রসঙ্গে সঠিক ফলাফল তৈরি করতে সক্ষম হয়, তবে আপনি তাদের নিজের ক্ষেত্রগুলি গণনা করতে না রেখে মূর্খ হবেন - কোনও প্রসঙ্গে in
ব্রুস

1
@OskarN .: সংজ্ঞা আমরা ফাংশন যে বিষয়ে কথা বলছি করা হয় না। এগুলি স্পষ্টতই প্রয়োজন হয় যদি অন্য শ্রেণিগুলি বারবার তাদের পুনরায় প্রয়োগ করে।
অ্যারোনআউট

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

1

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

এই ধরনের ক্লাসগুলি এখনও কিছু অভ্যন্তরীণ যুক্তি ধরে রাখতে পারে তবে প্রায়শই সেগুলি ধারক হিসাবে ব্যবহৃত হয়:

class YourUid {
 public:
  YourUid(int id_in_workplace_, int id_in_living_place_, DB* FBI_database, int id_in_FBI_database);
  bool IsInvalidWorker() const { return id_in_workplace == consts::invalid_id_in_workplace; }
  bool CanMessWith() const { return !FBI_database_.is_cool(id_in_FBI_database_); }
  int id_in_workplace;
  int id_in_living_place;
 private:
  int id_in_FBI_database_;
  const DB* FBI_database_;
};

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

দীর্ঘ পরামিতি তালিকা। প্রদত্ত পদ্ধতিতে আপনার প্রয়োজনীয় প্যারামিটারের সংখ্যা সীমাবদ্ধ করুন বা পরামিতিগুলিকে একত্রিত করতে কোনও অবজেক্ট ব্যবহার করুন।


1
এই প্রশ্ন জিজ্ঞাসা উত্তর কিভাবে?
gnat

@gnat দ্য প্রশ্নটি কেন এটি "কোড গন্ধ" হিসাবে বিবেচিত হয় about জাভলেট মন্তব্যগুলিতে প্রশ্নযুক্ত খুব সাধারণ ধারণা নিয়ে একটি এ দেয়। আমার অনুশীলন থেকে "কোড গন্ধ" আলাদা করার জন্য আমার উত্তরটি 2 সেন্ট is
রিগা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.