নেমস্পেস + একটি ক্লাসে স্থির পদ্ধতি বনাম ফাংশন


290

আসুন আমি বলি যে আমার আছে, বা লিখতে যাচ্ছি সম্পর্কিত ফাংশনগুলির একটি সেট। যাক তারা গণিত সম্পর্কিত। সাংগঠনিকভাবে, আমার উচিত:

  1. এই ফাংশনগুলি লিখুন এবং সেগুলি আমার MyMathনামের জায়গায় রেখে দিন এবং তাদের মাধ্যমে উল্লেখ করুনMyMath::XYZ()
  2. বলা ক্লাস তৈরি করুন MyMathএবং এই পদ্ধতিগুলি স্থির করুন এবং একইভাবে উল্লেখ করুনMyMath::XYZ()

আমি কেন আমার সফ্টওয়্যারটি সংগঠিত করার মাধ্যম হিসাবে একে অপরকে বেছে নেব?


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

21
@ রোম: আপনি "পুরানো প্রোগ্রামার" সম্পর্কে ঠিক বলেছেন, তবে "পুরানো সংকলক" সম্পর্কে ভুল। নেমস্পেসগুলি যথাযথভাবে অনন্তকাল থেকে সংকলিত হয়েছে (আমি তাদের সাথে ভিজ্যুয়াল সি ++ 6 এর সাথে কাজ করেছি, 1998 সালের ডেটিং!)। "ক্লাস সহ সি" হিসাবে, এই ফোরামের কিছু লোক এমনকি তখনও জন্মগ্রহণ করেনি: এটি একটি স্ট্যান্ডার্ড এবং বিস্তৃত সি ++ বৈশিষ্ট্য এড়ানোর জন্য যুক্তি হিসাবে ব্যবহার করা একটি মিথ্যাচার। উপসংহারে, কেবলমাত্র অপ্রচলিত সি ++ সংকলকগণ নেমস্পেসগুলি সমর্থন করে না। সে যুক্তিটি ব্যবহার না করার অজুহাত হিসাবে ব্যবহার করবেন না।
প্যার্সেবল

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

13
@ রোম: বর্তমান ক্ষেত্রে, প্রশ্ন লেখকের পছন্দ রয়েছে, সুতরাং স্পষ্টতই, তার / তার সংকলকগুলির মধ্যে কোনওই নামস্পেস কোডটি সংকলন করতে ব্যর্থ হয়। এবং এটি যেহেতু সি ++ সম্পর্কিত একটি প্রশ্ন, তাই প্রয়োজনে সমস্যার জন্য নাম স্থান এবং আরটিটিআই সমাধান সহ একটি সি ++ উত্তর দেওয়া উচিত। কোনও সি উত্তর, বা সি-ক্লাস-সহ-অপ্রচলিত-সংকলকগুলির উত্তর দেওয়া বিষয়টির বাইরে।
পেরেসেবল

2
"কেবল আমার 0 .02" - আপনি সুনির্দিষ্ট সি ++ সংকলকগুলির কোনও প্রমাণ সরবরাহ করেছেন যা নেমস্পেস সমর্থন করে না। "কিছু প্রাচীন সংকলক এম্বেডড ওয়ার্ল্ডে এখনও ব্যবহৃত হচ্ছে" - এটি নির্বোধ; "এম্বেডড ওয়ার্ল্ড" সি ++ নেমস্পেসের চেয়ে সাম্প্রতিকতম বিকাশ। "সি ক্লাস সহ ক্লাস" চালু হয়েছিল 1979 সালে, যে কোনও কিছুতে সি কোড এম্বেড করার আগে অনেক আগে। "আমি কেবল এটিই দেখিয়ে দিচ্ছি যে এই জাতীয় প্রবণতা বিদ্যমান" - এমনটি থাকলেও, এই প্রশ্নের সাথে এর কোনও যোগসূত্র নেই।
জিম বাল্টার

উত্তর:


243

ডিফল্টরূপে, নেমস্পিড ফাংশনগুলি ব্যবহার করুন।

ক্লাসগুলি অবজেক্ট তৈরি করতে হয়, নেমস্পেসগুলি প্রতিস্থাপন করতে নয়।

অবজেক্ট ওরিয়েন্টড কোডে

স্কট মায়ার্স এই বিষয়টিতে তার কার্যকরী সি ++ বইয়ের জন্য একটি সম্পূর্ণ আইটেম লিখেছিলেন, "সদস্যবিহীন অ-বন্ধু ফাংশনকে সদস্য ফাংশনগুলিতে পছন্দ করুন"। হার্ব সাটারের একটি নিবন্ধে আমি এই নীতির একটি অনলাইন রেফারেন্স পেয়েছি:http://www.gotw.ca/gotw/084.htm

জেনে রাখা গুরুত্বপূর্ণ বিষয়টি হ'ল: C ++ ফাংশনগুলিতে একই নামস্থানে কোনও শ্রেণিটি সেই শ্রেণীর ইন্টারফেসের অন্তর্গত (কারণ) ফাংশন কলগুলি সমাধান করার সময় এডিএল those ফাংশনগুলি অনুসন্ধান করবে)।

নেমস্পিড ফাংশনগুলি, "বন্ধু হিসাবে ঘোষণা না করা" না করে ক্লাসের ইন্টার্নালগুলির অ্যাক্সেস নেই, যেখানে স্থির পদ্ধতি রয়েছে।

এর অর্থ হ'ল উদাহরণস্বরূপ, আপনার শ্রেণি বজায় রাখার সময়, আপনার শ্রেণির অভ্যন্তরীণ পরিবর্তনগুলি প্রয়োজন হলে, স্থিতিশীলগুলি সহ আপনাকে এর সমস্ত পদ্ধতিতে পার্শ্ব প্রতিক্রিয়াগুলি অনুসন্ধান করতে হবে।

এক্সটেনশন আই

একটি শ্রেণীর ইন্টারফেসে কোড যুক্ত করা হচ্ছে।

সি # তে, আপনি কোনও ক্লাসে অ্যাক্সেস না থাকলেও আপনি পদ্ধতিতে যুক্ত করতে পারেন। তবে সি ++ এ এটি অসম্ভব।

তবে, এখনও সি ++ তে, আপনি এখনও একটি নেমস্পিড ফাংশন যোগ করতে পারেন এমনকি এমন কেউ আপনার জন্য লেখা ক্লাসেও।

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

এক্সটেনশন II

পূর্ববর্তী পয়েন্টের একটি পার্শ্ব-প্রতিক্রিয়া, একাধিক শিরোনামে স্থির পদ্ধতিগুলি ঘোষণা করা অসম্ভব। প্রতিটি পদ্ধতি একই ক্লাসে ঘোষণা করতে হবে।

নেমস্পেসের জন্য, একই নেমস্পেসের ফাংশনগুলি একাধিক শিরোনামে ঘোষিত হতে পারে (প্রায়-মানক অদলবদল ফাংশন এটির সেরা উদাহরণ)।

এক্সটেনশন III

একটি নেমস্পেসের মূল শীতলতা হ'ল কিছু কোডে আপনি এর উল্লেখ এড়াতে পারবেন, যদি আপনি "ব্যবহার করে" কীওয়ার্ডটি ব্যবহার করেন:

#include <string>
#include <vector>

// Etc.
{
   using namespace std ;
   // Now, everything from std is accessible without qualification
   string s ; // Ok
   vector v ; // Ok
}

string ss ; // COMPILATION ERROR
vector vv ; // COMPILATION ERROR

এবং আপনি "দূষণ" কে এক শ্রেণিতে সীমাবদ্ধও করতে পারেন:

#include <string>
#include <vector>

{
   using std::string ;
   string s ; // Ok
   vector v ; // COMPILATION ERROR
}

string ss ; // COMPILATION ERROR
vector vv ; // COMPILATION ERROR

প্রায়-স্ট্যান্ডার্ড অদলবদ্যা আইডিয়ামটি সঠিকভাবে ব্যবহারের জন্য এই "প্যাটার্ন" বাধ্যতামূলক।

এবং ক্লাসে স্থির পদ্ধতিগুলির সাথে এটি করা অসম্ভব।

সুতরাং, সি ++ নেমস্পেসগুলির নিজস্ব শব্দার্থবিজ্ঞান রয়েছে।

তবে এটি আরও এগিয়ে গেছে, যেহেতু আপনি উত্তরাধিকারের মতো একইভাবে নেমস্পেসগুলি একত্রিত করতে পারেন।

উদাহরণস্বরূপ, যদি আপনার AAA ফাংশন সহ নেমস্পেস A থাকে তবে একটি ফাংশন BBB সহ একটি নেমস্পেস বি, আপনি একটি নেমস্পেস সি ঘোষণা করতে পারেন এবং কীওয়ার্ডটি ব্যবহার করে এই নেমস্পেসে AAA এবং BBB আনতে পারেন।

উপসংহার

নেমস্পেসেস নেমস্পেসের জন্য। ক্লাস ক্লাস জন্য হয়।

সি ++ ডিজাইন করা হয়েছিল যাতে প্রতিটি ধারণাগুলি আলাদা হয় এবং বিভিন্ন সমস্যার সমাধান হিসাবে বিভিন্ন ক্ষেত্রে ভিন্নভাবে ব্যবহৃত হয়।

যখন আপনার নামের জায়গাগুলি প্রয়োজন তখন ক্লাস ব্যবহার করবেন না।

এবং আপনার ক্ষেত্রে, আপনার নামের স্থান দরকার need


এই উত্তরটি থ্রেডগুলিতেও প্রয়োগ করা যেতে পারে, অর্থাত থ্রেডের জন্য স্থির পদ্ধতির চেয়ে নেমস্পেস ব্যবহার করা কি ভাল?
দ্যাশি

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

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

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

পার্সেবলের উত্তরটি গ্রহণযোগ্য হওয়া উচিত! প্রায় মান swap 'র জন্য শুধু একটা আরো লিঙ্ক (এর) মাধ্যমে নামস্থান + + ADL -> stackoverflow.com/questions/6380862/...
Gob00st

54

এমন অনেক লোক আছেন যারা আমার সাথে একমত নন, কিন্তু আমি এটি এটি দেখি:

একটি শ্রেণি মূলত একটি নির্দিষ্ট ধরণের অবজেক্টের সংজ্ঞা। স্ট্যাটিক পদ্ধতিতে এমন ক্রিয়াকলাপগুলি সংজ্ঞায়িত করা উচিত যা নিবিড়ভাবে object বস্তুর সংজ্ঞায় আবদ্ধ।

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

উদাহরণস্বরূপ, আপনার ক্ষেত্রে নিজেকে জিজ্ঞাসা করুন, "মাই ম্যাথ কী?" যদি MyMathকোনও ধরণের অবজেক্টকে সংজ্ঞায়িত না করা হয়, তবে আমি বলব: এটিকে কোনও শ্রেণি তৈরি করবেন না।

তবে আমি যেমন বলেছি, আমি জানি যে প্রচুর লোক রয়েছেন (যারা তীব্রভাবে) এ সম্পর্কে আমার সাথে একমত নন (বিশেষত জাভা এবং সি # বিকাশকারী)।


3
আপনার এ সম্পর্কে খুব খাঁটি দৃষ্টিভঙ্গি রয়েছে। তবে ব্যবহারিকভাবে বলতে গেলে, typedef
অবিচলিত

56
এটি জাভে এবং সি # লোকের পছন্দ নেই।
মার্টিন ইয়র্ক

7
@ shog9। আপনি পাশাপাশি ফাংশন টেম্প্লেটিজ করতে পারেন!
মার্টিন ইয়র্ক

6
@ ড্যান: সম্ভবতঃ গণিতের রুটিনগুলির একটি প্রয়োজন এবং বিভিন্ন বাস্তবায়ন "প্লাগ ইন" সমর্থন করতে চেয়েছিলেন।
শোগ 9

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

18
  • আপনার যদি স্ট্যাটিক ডেটা প্রয়োজন হয়, স্থির পদ্ধতি ব্যবহার করুন।
  • যদি সেগুলি টেম্পলেট ফাংশন হয় এবং আপনি সমস্ত ফাংশনগুলির জন্য একসাথে টেম্পলেট প্যারামিটারগুলির একটি সেট নির্দিষ্ট করতে সক্ষম হতে চান তবে কোনও টেম্পলেট শ্রেণিতে স্থির পদ্ধতি ব্যবহার করুন।

অন্যথায়, নেমস্পিড ফাংশন ব্যবহার করুন।


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

template<typename T, int decimalPlaces>
class MyMath
{
   // routines operate on datatype T, preserving at least decimalPlaces precision
};

// math routines for manufacturing calculations
typedef MyMath<double, 4> CAMMath;
// math routines for on-screen displays
typedef MyMath<float, 2> PreviewMath;

যদি আপনার এটির প্রয়োজন না হয়, তবে যেকোন উপায়ে একটি নেমস্পেস ব্যবহার করুন।


2
তথাকথিত স্ট্যাটিক ডেটা নেমস্পেসের বাস্তবায়ন ফাইলে নেমস্পেস লেভেলের ডেটা হতে পারে, এটি কাপলিংকে আরও কমিয়ে দেয় কারণ এটি শিরোনামে দেখাতে হবে না।
মট্টি

স্ট্যাটিক ডেটা নেমস্পেস-স্কোপ গ্লোবালগুলির চেয়ে ভাল।
কোপপ্রো

@coppro। এগুলি এলোমেলো গ্লোবালগুলি থেকে বিবর্তনমূলক শৃঙ্খলে কমপক্ষে এক ধাপ উপরে রয়েছে কারণ তাদের ব্যক্তিগত করা যেতে পারে (তবে অন্যথায় সম্মত হবে)।
মার্টিন ইয়র্ক

@Motti: OTOH, আপনি যদি চান হেডারের (ইনলাইন / টেমপ্লেট ফাংশন), তুমি এটা সম্পর্কে কুশ্রী হচ্ছে ফিরে করুন।
শোগ 9

1
আকর্ষণীয় উদাহরণ, templateযুক্তি পুনরাবৃত্তি এড়াতে শর্টহ্যান্ড হিসাবে একটি ক্লাস ব্যবহার করে !
আন্ডারস্কোর_ডি

13

আপনার একটি নেমস্পেস ব্যবহার করা উচিত, কারণ একটি শ্রেণীর চেয়ে নেমস্পেসের অনেক সুবিধা রয়েছে:

  • আপনাকে একই শিরোনামে সমস্ত কিছু সংজ্ঞায়িত করতে হবে না
  • শিরোনামে আপনার সমস্ত বাস্তবায়ন প্রকাশ করার দরকার নেই
  • আপনি usingকোনও শ্রেণীর সদস্য করতে পারবেন না ; আপনি usingএকটি নাম স্থান সদস্য করতে পারেন
  • আপনি পারবেন না using class, যদিও using namespaceএটি প্রায়শই ভাল ধারণা নয়
  • একটি ক্লাস ব্যবহার করে বোঝা যায় যে সত্যই যখন কিছুই নেই তখন সেখানে তৈরি করতে কিছু বস্তু রয়েছে

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


3
"আপনাকে শিরোনামে আপনার সমস্ত বাস্তবায়ন প্রকাশ করার দরকার নেই" আপনি যখন ক্লাস ব্যবহার করবেন তখনই করবেন না।
ভানুয়ান

আরও বেশি: আপনি যদি নেমস্পেস ব্যবহার করছেন তবে আপনি শিরোনামে আপনার সমস্ত বাস্তবায়ন প্রকাশ করতে পারবেন না (আপনি চিহ্নগুলির একাধিক সংজ্ঞা দিয়ে শেষ করবেন)। ইনলাইন ক্লাস-সদস্য ফাংশন আপনাকে এটি করতে দেয়।
ভানুয়ান

1
@ ভানুয়ান: আপনি শিরোনামে নাম স্থান প্রয়োগ করতে পারেন implement inlineওডিআর সন্তুষ্ট করতে কেবল কীওয়ার্ডটি ব্যবহার করুন ।
টমাস এডিং

@ থমাসেডিংয়ের দরকার নেই! = পারেন
ভানুয়ান

3
@ ভানুয়ান: কেবলমাত্র একটি জিনিস ব্যবহারের সময় সংকলক দ্বারা গ্যারান্টিযুক্ত inlineএবং এটি কোনও ফাংশনের শরীরে "অন্তর্ভুক্ত" নয় is এর আসল (এবং মান দ্বারা গ্যারান্টিযুক্ত) উদ্দেশ্য inlineহ'ল একাধিক সংজ্ঞা প্রতিরোধ করা। সি ++ এর জন্য "একটি সংজ্ঞা বিধি" সম্পর্কে পড়ুন। এছাড়াও, ওডিআর সমস্যাগুলির পরিবর্তে প্রম্পম্পাইল্ড শিরোনাম সংক্রান্ত সমস্যার কারণে সংযুক্ত এসও প্রশ্নটি সংকলন করা হয়নি।
টমাস এডিং

3

আমি নেমস্পেসগুলি অগ্রাধিকার দেব, সেই পদ্ধতিতে আপনার কাছে প্রয়োগের ফাইলের একটি বেনামে নেমস্পেসে ব্যক্তিগত ডেটা থাকতে পারে (সুতরাং এটি privateসদস্যদের বিপরীতে শিরোনামে দেখাতে হবে না )। আরেকটি সুবিধা হ'ল usingআপনার নামস্থান দ্বারা পদ্ধতিগুলির ক্লায়েন্টগুলি নির্দিষ্টকরণ থেকে বেরিয়ে যেতে পারেMyMath::


2
ক্লাস সহ বাস্তবায়ন ফাইলে একটি বেনামে নেমস্পেসে আপনার ব্যক্তিগত ডেটা থাকতে পারে। নিশ্চিত না যে আমি আপনার যুক্তি অনুসরণ করি।
প্যাট্রিক জনমেয়ার

0

শ্রেণি ব্যবহারের আরও একটি কারণ - অ্যাক্সেস স্পেসিফায়ার ব্যবহার করার বিকল্প। এরপরে আপনি আপনার পাবলিক স্ট্যাটিক পদ্ধতিটি ছোট ছোট ব্যক্তিগত পদ্ধতিতে ভাঙতে পারেন। পাবলিক পদ্ধতিতে একাধিক বেসরকারী পদ্ধতি কল করতে পারে।


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

2
ব্যক্তিগত পদ্ধতিগুলি হ'ল আইএমও, কার্যকারিতাটি বাস্তবায়নে (সিপিপি ফাইল) আড়াল করার চেয়ে নিকৃষ্টতর এবং কখনও কখনও এটি শিরোনাম ফাইলে প্রকাশ না করে। দয়া করে আপনার উত্তরে এবং আপনি ব্যক্তিগত সদস্যদের কেন ব্যবহার করতে পছন্দ করবেন সে সম্পর্কে এটি বিশদ বর্ণনা করুন । ততক্ষণে -১।
নন-সংক্ষিপ্ত বিবরণ 23

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

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

আপনি .cppযদি টেমপ্লেট ব্যবহার করতে চান তবে আপনি এটি কোনও ফাইলে রাখতে পারবেন না ।
Yay295

0

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


"[জিনিসপত্র সংরক্ষণ করা] বাস্তবায়ন ফাইলের বেনামে থাকা নেমস্পেসে [ক্লাসের মধ্যে রাখার চেয়ে এটি একটি বৃহত্তর সুযোগ" - না, এটি নয়। যে ক্ষেত্রে সদস্যদের সুবিধাযুক্ত অ্যাক্সেসের প্রয়োজন নেই, বেনামে নাম-গতির জিনিসগুলি তার চেয়ে বেশি ব্যক্তিগতprivate: । এবং অনেক ক্ষেত্রে যেখানে সুবিধাগুলি অ্যাক্সেসের প্রয়োজন বলে মনে হয়, সেগুলি প্রমাণ করা যায়। সর্বাধিক 'ব্যক্তিগত' ফাংশন হ'ল শিরোনামে উপস্থিত হয় না। private:পদ্ধতিগুলি কখনই এই সুবিধা উপভোগ করতে পারে না।
আন্ডারস্কোর_ডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.