সেরা অনুশীলন: শ্রেণি সংজ্ঞা মধ্যে পাবলিক / সুরক্ষিত / ব্যক্তিগত আদেশ?


94

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

উ: 1) পাবলিক পদ্ধতি 2) ব্যক্তিগত পদ্ধতি 3) পাবলিক ওয়ার্স 4) প্রাইভেট ওয়ার্স

খ: ১) পাবলিক ওয়ার্স ২) প্রাইভেট ওয়ার্স ৩) পাবলিক মেথড ৪) প্রাইভেট পদ্ধতি

সি: ১) পাবলিক ওয়ার্স ২) পাবলিক মেথড ৩) প্রাইভেট মেথড ৪) প্রাইভেট ওয়ার্স

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

আমি জানি যে এটি ফিনিকী তবে আমি কেবলই অবাক হয়েছি: এর জন্য সর্বোত্তম অনুশীলনগুলি কী কী?

PS: না আমি সিসি # ব্যবহার করি না। আমি জানি. আমি লুডিটাইট


9
সি # ব্যবহার না করে কোনও সমস্যা নেই। আমি পেশাদার বিকাশকারী হিসাবে আমার সমস্ত বছর সি সি এর কোনও সেলাই লিখিনি। কাজের জন্য উপযুক্ত ভাষাটি ব্যবহার করুন, এবং যে কেউ আলাদা কিছু বলতে পারেন যেখানে তারা যেতে পারেন!
ইথার

উত্তর:


146

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


10
আমি ভাগ্য ভাল যোগ করেছেন: getters / setters শেষ। এটি ক্লাসগুলি আমার কাছে কম ভারী বোধ করতে সহায়তা করে।
ডিন জে

4
সদস্যের ভেরিয়েবলের ঠিক পরে, শীর্ষে নির্মাণকারী ors ওওপি-তে, কার্যকর করা বস্তুর তাত্ক্ষণিক দিয়ে শুরু হয়।
আসফ

6
পাঠককে কোডের চারপাশে খুব বেশি লাফিয়ে ফেলার কারণ হতে পারে পাঠককে ব্যক্তিগত পদ্ধতির সমস্ত কৌতুকপূর্ণ বিবরণ পড়তে বাধ্য করার সাথে ভারসাম্য বজায় রাখা দরকার। সংবাদপত্রের রূপক সম্ভবত ভুল বোঝাবুঝি হয়েছে যে আপনার সার্বজনীন পদ্ধতিগুলি আপনার শ্রেণিটি কী করে তা বিস্তৃতভাবে উপস্থাপন করা উচিত এবং আপনার ব্যক্তিগত পদ্ধতিগুলি বিশদ সরবরাহ করে (প্রায় কোনও পাদটীটের মতো যা আপনার প্রয়োজন হলে উল্লেখ করতে পারেন)।
কেনি হাং

4
আমি বিভ্রান্ত আপনি বলেছেন: (প্রথমে কনস্ট্যান্ট, তারপরে প্রাইভেট সদস্য) । ঠিক আছে. জনগনের সদস্যরা তখন কোথায় যাবে?
মধু

4
@ মধু তারা কনস্ট্যান্ট এবং ব্যক্তিগত সদস্যদের ঠিক পরে চলে যাবেন। সুতরাং এটি নিম্নলিখিত ক্রমে হবে: কনস্ট্যান্ট, ব্যক্তিগত সদস্য, পাবলিক সদস্য।
পিয়েরে গিললেট

49

ধারাবাহিক হওয়া সেরা অনুশীলন ।

ব্যক্তিগতভাবে, আমি publicপ্রথমে protectedপদ্ধতিগুলি পরে, পদ্ধতি অনুসরণ করে, পদ্ধতিগুলি অনুসরণ করা পছন্দ করি private। সদস্যের ডেটা সাধারণভাবে সর্বদা ব্যক্তিগত বা সুরক্ষিত হওয়া উচিত, যদি না এটির না হওয়ার কোনও উপযুক্ত কারণ না থাকে।

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

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


চিতাবাঘ স্কিকপিবিএইচ, আমি পুরোপুরি একমত ... এটাই বোঝা যায়! আমি অনুমান করি যে এর মধ্যে, ভের বা ফুনাক্স অগ্রাধিকার গ্রহণ করবে কিনা তা নিয়ে আমি বিভ্রান্ত হয়ে পড়েছি। ধন্যবাদ!
টেম্পেমেম

12
আমি একমত নই যে সর্বোত্তম অনুশীলনটি ধারাবাহিক হতে হবে। ধারাবাহিকভাবে অপঠনযোগ্য, অবিশ্বাস্য কোডটি লেখার অনেকগুলি উপায় রয়েছে।
জেসন

4
@ জেসন এটিকে বলার মতো যে আপনি রাস্তার পাশে থাকা ভাল অনুশীলন নয় কারণ আপনার এখনও দুর্ঘটনা ঘটতে পারে।
রেক্স এম

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

4
@ রেক্স এম: না, আমি যা বলেছি তা আপনার ব্যাখ্যার সাথে মোটেই সমান নয়। আমার বক্তব্যটি হ'ল নিছক ধারাবাহিক হওয়া এই ক্ষেত্রে দৃ argument় যুক্তি নয়। কিছু ক্ষেত্রে ধারাবাহিকতা ভাল (যেমন, ধনুর্বন্ধনী স্থাপন) of কিন্তু এখানে পছন্দগুলি আসলে কোডের পঠনযোগ্যতাকে প্রভাবিত করে। সুতরাং, ধারাবাহিকতার চেয়ে শক্তিশালী একটি যুক্তি প্রয়োজন।
জেসন

9

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

সুতরাং আমার ক্লাসগুলি প্রায়শই এরকম দেখাচ্ছে:

class MyClass {
    public string Method(int a) {
        return HelperMethodA(a) + HelperMethodB(this.SomeStringMember);
    }

    string HelperMethodA(int a) { // returns some string }

    string HelperMethodB(string s) { // returns some string }

    public bool Equals(MyClass other) { return MyClass.Equals(this, other); }

    public static bool Equals(MyClass left, MyClass right) { // return some bool }

    public double SomeCalculation(double x, double y) {
        if(x < 0) throw new ArgumentOutOfRangeException("x");
        return DoSomeCalculation(x, y); 
    }

    const double aConstant;
    const double anotherConstant;
    double DoSomeCalculation(double x, double y) {
        return Math.Pow(aConstant, x) * Math.Sin(y) 
            + this.SomeDoubleMember * anotherConstant;
    }       
}

9

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

কোনও শ্রেণীর ব্যবহারের জন্য প্রয়োগের বিবরণটি দেখতে হবে না, তবে শ্রেণি নকশাটি ভালভাবে করা হয় না।


3

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

সি # তে আমি রিশার্পারকে স্বয়ংক্রিয়ভাবে জিনিসগুলি সংগঠিত করতে দিই না।


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

2

এটি আমার আদেশ হবে

  1. স্ট্যাটিক ভেরিয়েবল
  2. স্থির পদ্ধতি
  3. পাবলিক ভেরিয়েবল
  4. সুরক্ষিত চলক
  5. প্রাইভেট ভেরিয়েবল
  6. নির্মাতারা
  7. পাবলিক পদ্ধতি
  8. সুরক্ষিত পদ্ধতি
  9. ব্যক্তিগত পদ্ধতি

আমি নিম্নলিখিত নিয়ম ব্যবহার:

  • কোনও কিছুর আগে স্থির
  • পদ্ধতির আগে কনস্ট্রাক্টরের আগে ভেরিয়েবল (আমি কনস্ট্রাক্টরগুলিকে পদ্ধতির শ্রেণিতে বিবেচনা করি)
  • ব্যক্তিগত আগে ব্যক্তিগত সুরক্ষিত আগে

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


আপনাকে বরকমডলে ধন্যবাদ ... এটি আকর্ষণীয়! আপনি কনস্ট্রাক্টরের আগে 4 এবং 5 রাখবেন। আমি অবশ্যই সে সম্পর্কে
ভাবব

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

2

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

যদিও আমি মাঝে মাঝে সদস্যদের মত গোষ্ঠী করি (গ্রাহক ও সেটটার) আমি সাধারণত একটি গ্রুপের মধ্যে সদস্যদের স্থানীয়ভাবে বর্ণিত তালিকা পছন্দ করি যাতে তারা আরও সহজেই অবস্থিত হতে পারে।

আমি উল্লম্বভাবে ডেটা / ফাংশনগুলি সারিবদ্ধ করতে চাই। আমি পর্যাপ্ত ডানদিকে ট্যাব / স্পেস রাখছি যাতে সমস্ত নাম একই কলামে সারিবদ্ধ হয়।


4
আরে - আমার নিজের হৃদয়ের পরে 'ট্যাব-স্পেসার'! :-) আমি মানসিক বাধ্য নয় uls সৎ আমি নই!
টেম্পেমেম

1

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

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

সুতরাং, এটি যদি সিঙ্গেলটন হয় তবে আমি শব্দার্থবিজ্ঞান (স্ট্যাটিক গেটইন্সট্যান্স () শ্রেণিটি প্রথম রেখেছি।

যদি এটি একটি কংক্রিটের কারখানা হয় তবে আমি getNew () ফাংশন এবং নিবন্ধকরণ / ফাংশনগুলিকে প্রথমে রাখি।

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

ফাংশনগুলি অনুসরণ করা হয় তারপরে:

  1. লজিকাল কল-অর্ডার (উদাঃ সূচনা (), প্রাকপ্রসেস (), প্রক্রিয়া (), পোস্টপ্রসেস ()), বা
  2. সম্পর্কিত ফাংশন একসাথে (যেমন অ্যাকসেসর, ইউটিলিটিস, ম্যানিপুলেটর ইত্যাদি),

ক্লাসটি মূলত কিছু ফাংশন সহ একটি ডেটা স্টোর বা কয়েকটি ডেটা সদস্য সহ ফাংশন সরবরাহকারী কিনা তা নির্ভর করে depending


0

কিছু সম্পাদক, যেমন ইক্লিপস এবং এর বংশধরদের, বর্ণমালা অনুসারে বা পৃষ্ঠায় যেমন বার্তা এবং পদ্ধতিগুলি রূপরেখি দর্শনতে আপনাকে পুনরায় সাজানোর অনুমতি দেয়।


0

সুরক্ষিত এবং বেসরকারী দ্বারা অনুসরণ করা সর্বসাধারণের ক্রমটি আমার কাছে আরও পঠনযোগ্য, কেবলমাত্র শিরোনাম ফাইলটির শীর্ষে মন্তব্যগুলিতে শ্রেণীর যুক্তি বর্ণনা করা ভাল এবং ফাংশন কল অর্ডারগুলি কী শ্রেণীর ডোজ এবং অভ্যন্তরে কীভাবে অ্যালগরিদম ব্যবহার করে তা বোঝার জন্য function

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

#ifndef TEMPLATE_H
#define TEMPLATE_H


class ClassName
{
    Q_OBJECT
    Q_PROPERTY(qreal startValue READ startValue WRITE setStartValue)
    Q_ENUMS(MyEnum)

public:

    enum MyEnum {
        Hello = 0x0,
        World = 0x1
    };

    // constructors

    explicit ClassName(QObject *parent = Q_NULLPTR);
    ~ClassName();

    // getter and setters of member variables

    // public functions (normal & virtual) -> orderby logic

public slots:

signals:

protected:

    // protected functions it's rule followed like public functions


private slots:

private:

    // methods

    // members

};

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