ওও সি পাবলিক এবং প্রাইভেট কার্যাবলির জন্য সাধারণত নামকরণের সম্মেলনগুলি কী কী? [বন্ধ]


12

সংক্ষিপ্ত প্রশ্ন
কোনও ওও সি প্রকল্পের 'পাবলিক' এবং 'ব্যক্তিগত' সদস্যদের নাম দেওয়ার কোনও সাধারণ উপায় আছে কি?

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

উদাহরণ শিরোনাম

#ifndef _MODULE_X_H_
#define _MODULE_X_H_

bool MOD_X_get_variable_x(void);
void MOD_X_set_variable_x(bool);

#endif /* _MODULE_X_H_ */

উদাহরণ উত্স

// Module Identifier: MOD_X 
#include "module_x.h"

// Private prototypes
static void mod_x_do_something_cool(void);
static void mod_x_do_something_else_cool(void);

// Private Variables
static bool var_x;

// Public Functions - Note the upper case module identifier
bool MOD_X_get_variable_x(void)      {return var_x;}
void MOD_X_set_variable_x(bool input){var_x = input;}

// Private Functions  - Note the lower case module identifier
void mod_x_do_something_cool(void){
     // Some incredibly cool sub routine 
}

void mod_x_do_something_else_cool(void){
     // Another incredibly cool sub routine 
}

2
আকর্ষণীয় বিষয়ের জন্য +1: সিতে ওও ডিজাইন বাস্তবায়িত হয়েছে! আমি হেডার ফাইলটিতে জনসাধারণের কাজগুলি এবং বেসরকারীগুলিকে .c ফাইল প্রয়োগের স্থিতিশীল ফাংশন হিসাবে ঘোষণা করার আপনার পদ্ধতির অনুসরণ করব। যদিও আপনার একটি নির্দিষ্ট নামকরণের কনভেনশন প্রয়োজন তবে আমি নিশ্চিত নই। সরকারী এবং বেসরকারী উভয় কার্যক্রমে বড় হাতের অক্ষর কেন ব্যবহার করবেন না?
জর্জিও

13
বাজরেন স্ট্রস্ট্রপ একসাথে অবজেক্ট-ওরিয়েন্টেড সি লেখার এক বিস্তৃত পদ্ধতিতে লিখেছেন ...
এন্ট

সি তে অবজেক্ট-ভিত্তিক প্রোগ্রামিংয়ের আরও একটি আকর্ষণীয় পদ্ধতির জন্য আপনি এক্সটি গ্রাফিক্সের সরঞ্জামকিটটি দেখতে পারেন, যা এক্স 11 প্রোগ্রামারদের সাথে পরিচিত। সূত্র: en.wikipedia.org/wiki/X_Toolkit_Intrinsics
sdg

@ জর্জিও: সরকারী ও বেসরকারী সদস্যদের জন্য উপরের বনাম লোয়ার কেসটির মূল বিষয়টি হ'ল কোডটি পর্যালোচনা করার সময় বা কোডটি বজায় রাখার সময় এটি কোনও নজরে অনুসন্ধান না করে যদি তার প্রকাশ্য বা বেসরকারী হয় তা এক নজরে জানতে পারে।
অ্যাডাম লুইস

@ অ্যান্ট: অবজেক্টিভ-সি আরেকটি সম্ভাবনা। আমি মনে করি এখানে মূল কথাটি হ'ল আপনি যদি সি তে প্রোগ্রামিং করেন তবে আপনি ওও ডিজাইনটি ব্যবহার করতে পারেন। অবশ্যই আমি যদি ওওপি-র ভারী ব্যবহার করি তবে আমি একটি ওও ভাষার জন্য যাই।
জর্জিও

উত্তর:


17

আমি যে কনভেনশনটি ব্যবহার করি তা হ'ল:

  • পাবলিক ফাংশন (শিরোনামের ফাইলে):

    struct Classname;
    Classname_functionname(struct Classname * me, other args...);
    
  • ব্যক্তিগত ফাংশন (প্রয়োগের ফাইলে স্থির)

    static functionname(struct Classname * me, other args...)

ক্ষেত্রে মনোনিবেশ করবেন না। মুল বক্তব্যটি হ'ল একটি উপসর্গ (এই সম্মেলনে শ্রেণীর নাম) প্রিপেন্ড করে দুটি শ্রেণি থেকে দুটি জনসাধারণের পদ্ধতিকে আলাদা করা।

তদুপরি, কীটি OO-C তোলে সেটিকে প্রথম আর্গুমেন্ট হিসাবে পাস করার উপায়।


1
+1 কোনও বড় সি বিশেষজ্ঞ নয়, তবে এটি দৃ and় এবং সঠিক দেখাচ্ছে (এমনকি এনক্যাপসুলেশন শর্তেও, যা আমি কখনই সি-এর সাথে সম্পর্কিত করি নি - এখনও অবধি)।
ইয়াম মার্কোভিচ

কিছু সংকলক দ্বারা প্রয়োগ করা শনাক্তকারী চরিত্রের সীমাগুলি সম্পর্কে সতর্ক থাকুন (উদাহরণস্বরূপ
কারওর

8

সাধারণত কনভেনশনটি হ'ল প্রাইভেট ফাংশনগুলিকে মোটেও না লাগানো হয়

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

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

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


সম্ভবত সি এর অবজেক্ট-ওরিয়েন্টেড কোডের সবচেয়ে বড় অংশটি হ'ল জিনোম প্ল্যাটফর্ম। আপনি GObject লাইব্রেরিতে কনভেনশনটি খুব সহজেই দেখতে পাবেন , এটি সর্বনিম্ন স্তরের বেস ক্লাস সরবরাহ করে । এটি মোটামুটি যা আমি উপরে বর্ণনা করি এবং জিনোমে ব্যবহৃত হয়।


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

-1

যদি কোনও প্রকৃত "শ্রেণি" উপস্থিত থাকে তবে স্ট্রাক্ট, অস্বচ্ছ ধরণের বা অনুরূপ আকারে থাকে, তবে আমি এটি অনুযায়ী নাম রেখেছি:

typedef struct classname_t classname_t; 

_T প্রত্যয় সিতে খুব সাধারণ নামকরণের কনভেনশন, যা নিজেই সি স্ট্যান্ডার্ড দ্বারা ব্যবহৃত হয়। ক্লাস / প্রকারের জন্য মূলধনপত্র ব্যবহার করা কম সাধারণ।

আপনি পরবর্তী কাজটি হ'ল সমস্ত পাবলিক ফাংশনগুলির জন্য একটি নামকরণ উপসর্গ নিয়ে আসা। সাধারণত কিছু 3 টি অক্ষরের জিনিস। "আপেল শ্রেণী" একাত্মতার সকল ফাংশন সম্ভবত নামে হবে app_set_something(), app_get_something()ইত্যাদি

তারপরে আপনি একটি ধারাবাহিক নামকরণ কনভেনশন ব্যবহার করতে চাইবেন। "কনস্ট্রাকটর" নামে করা যেতে পারে app_init()বা app_construct(), "বিনাশকারী app_clear(), app_destruct(), app_destroy()বা অনুরূপ। আপনার সব শ্রেণীর জন্য একই নামকরণ কনভেনশন ব্যবহার করুন। তারপর সেটার / সংগ্রহকারী ফাংশন জন্য একই কাজ, ইত্যাদি।

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

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


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