الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Name Space ام Static Class ؟؟

بدأه Ferrum في 26 يوليو 2009 · 12 رد · 1,893 مشاهدة · في قسم المواضيع الهامة في قسم السي /سي++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

في كتاب Large-Scale C++ Software Design

لبرمجة الأنظمة الكبيرة و التعرف على افضل طرق البرمجة و اكثرها سرعة

لا يستخدم الكاتب الـ namespace ابدا لتغطية المتغيرات الخاصة بأحد المبرمجين (مثلا) او احد المكتبات او لتغطية الدوال إنما يستخدم static class لعمل نفس الوظيفة بالظبط!!

الصراحة فكرة ما خطرت على بالي من قبل و هذا مثال على تغطية بعض المتغيرات باستخدام static class بدال الـ namespace

لاحظ ان الـ default constructor يكون private عشان تضمن ما تنشء أي كائن إنما تستخدم الـ class مجرد كمكتبة للدوال

و أيضا كل الدوال تكون static و إلا ما تقدر تستخدمها خارج الclass لأنك اصلا ما تقدر تنشء كائن من هذا الـ class

class HussainLib
{
	HussainLib();

public:
	static float PI()
	{ return 3.14; }

	static int add(int x, int y)
	{ return x + y; } 

	static float hussain_constant()
	{ return 465564695.558575; }
};

و جذي طبعا تنادي الدوال بكل بساطة

float PI = HussainLib::PI();
int addition = HussainLib::add(5, 2);
float scientific = HussainLib::hussain_constant();

انا الصراحة بالنسبة لي احسن من الـ namesapce لأني مو متعود عليها أبدا :)

آرائكم

تم تعديل هذه المشاركة بواسطة Ferrum في 26 يوليو 2009 في 08:55

:::كوت بو 6:::

IDE : Microsoft Visual Studio 2005 Pro

#2

هذه طريقة الجافا في كتابة هذا النوع من الـ Functions و أو ما تسمّيها بالـ Methods .

مثللك تماماً .. أفضّل هذه الطريقة , لمعزّة خاص للغة الجافا .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3

وعليكــم السـلام ورحمة الله وبركاتـه..

عندما تبرمج بسي++ فأنت قد تبرمج للمستخدم النهائي End-User وتقوم بعمل Application وهنا لن تهم الطريقة المستخدمه كثيرا فكلا الطريقتين تؤديان للهدف ..

الإحتمال الأخر وهو أن تبرمج للمبرمج :) مثلا كتابة Library لكي يستخدمها المبرمجين ،،فالsyntax التالي ClassName::FunctionName مزعج قليلا لمستخدم الكلاس وبما يفضل أن تكتب الدالة داخل الnamespace و تكتب في برنامجك

; using namespace YourNS

ويستدعي الدالة مباشره ...

وربما لا :) ، بعض الأمور أحيانا قد لا تعرف أيهما أفضل الا بعد التجربه ..

طريقة أخرى عند بناء الLibrary وخاصه في حال كان عدد الدوال كبير هو أن تضعها في ملف dll ، وتجعل برنامجك يرتبط بالdll وقت التشغيل .. والإستدعاء يكون بالطريقة الإعتادية ،،

تشكر على مشاركاتنا الموضوع ، بانتظار المزيد :) ...

بالتوفيق :) .

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#4

العفو اخوي :)

استخدام الـ dll مفيد في حالة ان برنامجك كبير و تخطط انك تنزل له تحديثات للمستخدم عن طريق تغيير الـ dll

اما البرامج البسيطة مثل ما قلت namespace او static class كافي عليها

:::كوت بو 6:::

IDE : Microsoft Visual Studio 2005 Pro

#5

السلام عليكم ...

الـ namespaces أسهل و أفضل لدي :)

#6

أنا عن نفسي أفضل الstatic class و لكن لا يعجني ال:: :lol:

مصري في بلاد الفرنجة.

قريباً اقرأ مقالاتي على It-scoop

#7
اقتباس
أنا عن نفسي أفضل الstatic class و لكن لا يعجني ال:: laugh.gif

!!!!

الـ :: ستستخدمها في كلا الحالتين, namespace أو static class.

عن نفسي أفضل الـ namespace,,!

SAFETY TIP : Always delete what you new, and free what you malloc, never mix new with free or malloc with delete.

#8
MoHammaD_93 كتب:
!!!!

الـ :: ستستخدمها في كلا الحالتين, namespace أو static class.

عن نفسي أفضل الـ namespace,,!

في الnamespace يمكنك عملك using namespace xxx في بداية الملف

مصري في بلاد الفرنجة.

قريباً اقرأ مقالاتي على It-scoop

#9

السلام عليكم ...

عن نفسي لا أحب إساءة استخدام الـ class في غير الغرض الأصلي, و هو تعريف أنواع جديدة...

هناك ميزة أخرى للـ namespace و هي في حالة الـ operators overloading ... كما في المثال التالي... يعتبر هذا الشيء syntax sugar لا أكثر و لكنه أفضل بكل تأكيد ...

std::vector<int> list;

boost::assign::operator +=(list, 5);

using namespace boost::assign;

list += 5;

كما تلاحظ استدعينا في المرة الأولى المعامل =+ الذي قامت المكتبة assign بتعريفه للـ vector كدالة, و هو ما يشوه استعمالها الذي أوجد أصلاً لتسهيل مهمة إضافة العناصر,

بينما عندما قمنا بالتصريح عن الـ namespace بعد ذلك استطعنا استخدام =+ مباشرة :)

تحياتي ...

#10
اقتباس
في الnamespace يمكنك عملك using namespace xxx في بداية الملف

اهمممممم,, وهل يوجد مبرمج سي++ لا يعلم ذلك..!؟

SAFETY TIP : Always delete what you new, and free what you malloc, never mix new with free or malloc with delete.

#11
MoHammaD_93 كتب:
اهمممممم,, وهل يوجد مبرمج سي++ لا يعلم ذلك..!؟

سؤالك هو ما دل على عكس ذلك.

مصري في بلاد الفرنجة.

قريباً اقرأ مقالاتي على It-scoop

#12

لاحظ أن عمل Initialization لـ متغير static موجود في الـ class سيكون شيئا كهذا..

class A
{
public:
	 static int var;
};

int A::var = 8;

بينما في الـ namespace ستقوم بذلك مباشرة عند تعريف المتغير

والسلام عليكم

SAFETY TIP : Always delete what you new, and free what you malloc, never mix new with free or malloc with delete.

#13
اقتباس
بينما في الـ namespace ستقوم بذلك مباشرة عند تعريف المتغير

جيد .. بسبب عدم قدرتنا على تهيئة المتغيّر الستاتيكي بقيمة داخل الكلاس كما في اللغات الأخرى لا أستخدم هذه الطريقة في السي بلس .. ولكن كما قلت , أرى أن استخدام Class أفضل , وذلك لأني سأجبر المستخدم على المناداة بالاعتماد على الكلاس , وبالتالي , سيصبح البرنامج أكثر وضوحاً من ناحية القراءة , ونبتعد عن أي احتمال لحدوث تضارب Conflict بين أسماء الدوال الذي قد يحصل لو استخدمنا using namespace .

مثال الاخ خالد حول operator , يقتل جمال class ويجبرنا على استخدام namespace .. مثال جيد من الاخ خالد .

لكن لايجب أن نختلف كثيراً على هذه النقطة أيضاً :D

تم تعديل هذه المشاركة بواسطة الشمري في 28 يوليو 2009 في 12:38

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

مواضيع مشابهة