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

STL امكانات هائلة .. ولكن مهجورة,

مغلقرائج
بدأه Abdullah.Alshammeri في 16 يوليو 2006 · 58 رد · 6,203 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ,

اليوم قرأت كثيرا عن هذا الموضوع وقلت اعرضه هنا .. للدعاية له لانه فعلا مفيد .

===========

دائما ما تمر علي STL .. لكن لا اهتم بها لانها عقيمة ,,, ومعقدة حسبما كنت اتصور ,

والسبب في ذلك انه نادرا ما قرأت عنها في منتدياتنا العربية .

اذا كنت مبرمج فيجوال بيسك ... فستشتاق للبيسك .. اذا رأيت ( فضاعة strings) في لغة السي .

لان اغلب المبتدئين في السي .. لايجيدون كثيرا التعامل مع المؤشرات التي هي القلب النابض للسلاسل النصية .

وبالتالي .. دائما ما يحدث flowover .. لانه وببساطة حجم النص صار اكبر من حجم المصفوفة .

بالتالي يجب ان تكون حريصا جدا على مسألة حجز ذاكرة مناسبة للمصفوفة ..

بمعنى أنك ستستخدم new - delete ...

لنفرض أنك عبقري مؤشرات .. فلتة في المصفوفات . . .

هل هذا يعني العقدة انحلت مع النصوص في السي ...!!

لا اظن .

اريدك تنشئ مصفوفة نصية ديناميكية (مصفوفة مؤشرات).. تحمل نص .

وتنشئ مصفوفة مؤشرات اخرى ايضا .

اريدك تضيف النص الموجود في المصفوفة الاولى على الثانية .

اريدك ان تدمج ماتحتويه المصفوفتين .

اريدك ان تستخدم في ذلك الدوال strcopy واخواتها ..

او ان تنشئ انت بنفسك تلك الدوال .

اريدك ان تعترف وتقول "" الامر متعب " "

هو فعلا متعب . شئنا أم ابينا .

طبعا الحل هو باستخدام STL وهي مكتبة ممتازة تحتوي على عدة اقسام .. كل قسم اروع من الاخر .

مثلا يكفي أن نكتب

string s;
string s1("arab");
string s2("team");

s = s1 + s2;
s += s2;

الامر رائع

اكيد ان الاغلبية هنا يعرفون لهذه المكتبة .

لكن السؤال لماذا لا يستخدمها احد ..

والاغلبية لازالوا على strcopy ..

لا اعرف ..

===============

نترك strings

--

ايضا في STL يوجد خدمات اخرى جميلة ,,

مثلا list -Vectors ....

,وايضا الـstack الرائع ... والذي يذكرني "بالمُطَبَّق :D"

خلصت .....

===============

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#2

الـ STL فعلا عقيمة و معقدة .. و قليلة حياء ايضا!!

هعل معقولة .. ان النصوص (الـ string) المدعوم من قبل ابسط basic interpreter (مفسر بيسك) من السبعينات, يتطلب كل هذا التعقيد الموجود في std::string؟

جرب ان تستخدم الـ string بشكل خاطئ .. و ستحصل على رسالة خطأ معقدة جدا لا تستطيع تفسير معناها, و لا الومك على ذلك, فحتى العديد من المحترفين لايستطيعون فك شفرة هذا النوع من الـ error messeges.

طبعا اذا خيرتني بين strcpy و بين std::string فطبعا سأختار std::string و لكن هذا لا يعني ان الـ STL جيدة, بل يعني ان هناك ما هو اسوأ منها!

الـ string و الـ vector و الـ stack و غيرها, كلها ستكون اشياء بسيطة اذا كان عندك شيء واحد: dynamic arrays

و هو بدوره بسيط جدا (نسبيا) و لكنه غير موجود في الـ C++‎

#3

بالفعل، هي مكتبة رائعة جدّا جدّا...

استكشفت أجزاء منها قبل فترة، وأعجبني جدّا طريقى عملها، خاصة بنى البيانات الجاهزة، والرائعة، لكن صراحة لا أعرف السبب الذي جعلني اتركها، ربما لأنها غير مدعومة من جميع المترجمات...

شكرا للشمري على فتح هذا الموضوع.

عفوا ما شفت رد حسّان :)

شو حسّان ، الظاهر بتكره السي++ وكل ما له علاقة بها. :)

جربت هذه المكتبة كما قلت وكانت رائعة، لكنني آنذاك لم أضع لها فخًّا وامتحنها فيه...

على كلّ فتحتم شهيتي لدراستها والتعمّق فيها...

وسنناقشها معا...إن شاء الله.

لكن مبدأئّا كنت سعيد جدّا جدّا عندما تعرفت عليها!.

#4

STL مكتبة رائعة بل إنها أفضل مكتبة تعاملت معها على الإطلاق .

وهي تستمد قوتها من قوة الــ template في ++C ولهذا السبب تكون رسائل الخطأ فيها ضخمة !!!!

لكن ما يميزها عن باقي المكتبات هو تركيبتها وأساس التعامل بين مكوناتها . فهي تنقسم إلى ثلاثة أقسام :

1)Container : وهو الوعاء اللي يحوي البيانات ويحتوي على دواله الخاصة به .

2) Algorithm : وهي مجموعة من الدوال تأدي وظائف معينة .

3) iterator : وهي الوسيط الذي يتم التخاطب بين Container وبين Algorithm وهو بالعربي ( مؤشر ) لكن مغلف بالــ OOP

طبعا كل قسم له أنواع وكل نوع له أقسام ...... :o

وإذا تبون أتوسع وأعطي دروس ما عندي مانع بس بس إذا تبون ;)

#5
اقتباس
وإذا تبون أتوسع وأعطي دروس ما عندي مانع بس بس إذا تبون

هذه ما تحتاج سؤال .. : ),, امطرنا بكل ما تعترفه .. ولو على شكل نقاط ونحن نتكفل بالاسئلة :)

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#6

ال STL دى حكاية! مكتبة رهيبة تتيح لك إمكانيات كتيرة جدا و فى نفس الوقت فعالة جدا و سريعة, و من أكتر الحاجات اللى بستفيد منها هى vector, map, string, algorithm أرجو وضع الشرح لهذه الأشياء حتى تعم الفائدة لأن فعلا فائدتها كبيرة و لكن للأسف أنا معنديش وقت الأيام دى خالص و مش حعرف أكتب شرح مفصل عنها!.

#7

لو تم بناء هذه المكتبـة على شكل شجرة وراثيـة مثل الجافا لكان أفضل ........... مكتبة STL مكتبة غبيـة للغـاية .......وبإمكان أي طالب يتعلم الخوارزميات وهياكل البيانات أن يبني أفضل منها ......... أن أكره هذه المكتبـة لأنها لم تستعـمل تقنيات البرمجـة الشيئيـة بشكل جيد ولم يتم تطبيق أنماط التصميم إلا بشكل أحمق

#8

يبدو أن هناك خلاف حول هذه المكتبة، طيب ممكن المعارضين يسردوا سلبياتها؟

ثم بعد ذلك الملؤيدون يظهرون ايجابياتها؟

سيكون موضوع ثري جدًّا؟,

#9

كنت أحب هذه المكتبـة حتى تعلمت لغات مثل الجافا والسي شارب .... أدركت أن هذه المكتبات فقيرة ولا تقدم لك أي رفاهيـة أو مساعدة مطلقاً....

السلبيات حسب نظري:

1) استخدام القوالب مما سيجعل خطأ وحيد منك يصدر مئات الأخطاء لا تعلم كيف تصححها حتى لو كان هذا الخطأ مجرد نسيان للفاصلة المنقوطـة.

2) غير مبنيـة كائنات هذه المكتبـة على شكل شجرة وراثيـة فنحن لا نجد مثلاً كلاس اسمـه Object ... مما لا يسمح لك بتوسعـة هذه المكتبـة.. مما جعل منشؤ هذه المكتبـة يعتمدون على القوالب حتى تكون مثلاً الـ stack صالحـة لجميع الأنـواع.

3) عدم استخدام أنماط التصميم البرمجيـة إلا فيما ندر ... فنحن لا نجد كلاسات تغطي على الأنماط الأساسيـة مثل الـ int و float ....

4) طول وقت الترجمـة حينما نستعـمل بعض هذه الكلاسات.

5) أنا أشعر أن برامجي ستصبح أثقل وأبطئ حينما استخدم هذه المكتبات الغبيـة .. مجرد شعـور وليس حقيقـة .

6) المكتبة فقيرة ولا تقدم لك الكثير ... ليست مثل مكتبات الجافا والسي شارب ، في تلك المكتبات تجد كلاسات خاصـة بالرسم بينما هـنا لا نجدها مع أنه لا يوجد أي صعوبات تقنيـة تحـول دون فعل ذلك حتى مع اختلاف أنظمـة التشغيل ، كان بالإمكان الاتفاق على الواجهـات وترك أمور المعالجـة وكيفية الرسم لكل نظام تشغيل ... أيضاً وكما قلت سابقاً ليس بإمكانك توسيع المكتبة بالشكل المطلوب.

هـناك بعض السلبيات الأخرى ......... بالنسبة للإيجابيات فأتركها لمن هـو معجب بهذه المكتبـة ...

#10

السلبيات يعرفها اي واحد تعامل مع Java او C#‎

جرب تعلم الجافا و التعامل مع الـ Collections فيها. ثم حاول العودة الى التعامل مع الـ STL. ستشعر بان الـ STL فعلا غبية جدا.

اولا, الـ syntax مزعج جدا و قبيح. و بشكل عام غير مريح (هههه ترهم بيت شعري).

هناك فقر في العمليات اللتي تستطيع ان تقوم بها. لا اتذكر مثال معين بالضبط, لكني كلما اردت استخدام vector مثلا اجد ان هناك عمليات بسيطة اريد القيام بها على الـ vector و لكني لا استطيع لانه لا توجد في واجهة الـ vector ما يسهل لي القيام بما اريده.

يعني كما قلت, كل ما تقوم به الـ STL تقريبا يمكن الاستعاضة عنه فقط بـ dynamic array.

#11

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

بصراحه انا دايما احب اتابع المناقشات خاصة في لغة السي والسي بلس ... وانا من النوع كسول لا ارد ولا اكتب كسووول كسووول مره ...

ولكن اجبرت هالمره ارد

اولا اشكر الاخ الشمري .... حبيت اوصل معلومه ... ليس لمدح او لغرض انما للابلاغ

اخي الشمري .... يثني عليك 3 مختصين في مجال الحاسب يراقبون مواضيعك وانا منهم .. الجيده ... الا انك انفعالي !!!!! من دون زعل

الاخ Sultan_Althibity انا اول واحد ارتاح لما اشوف مناقشاتك .... يعني تقدر تقول انت من النوع ( ثقه )

بس اسمح لي اقول لك شي بس لا تزعل ... امانه لا تزعل ... وش انت حتى تحكم على مكتبة بقولك غبيه ؟؟

هذي كتبت على ايدي محترفين عرفو اللغة قبل ما تعرف 5 *5 ههههههههههههههههههههههه اعرف انك بتعصب

بس هالزمن يقول لك لا تجامل ابكش .. وخير المكبش الطيبين ..

اسمع بقول لك شي مهم .... اعرف بتقول قل حياه ..بس كمل واقرأ كلامي لكي تفهم المقصود وش السبب اني كتبت هذا الكلام

((( دروسك .. مقالاتك ... بسيطه جدااا جدااا ... يعني كلها ابتدائية ...ممكن تكون متوسطه .. ))

اها كلامي كذا مو مقبول !!!! طيب هل صاحب المكتبة يرضا كلامك .... ؟؟؟ فكر !!! هل يرضي كلامك مبرمج المكتبة ...

هل عملت مكتبة .... ؟؟؟؟ B) اعتقد وصلت المعلومه

الاخ hasan_aljudy اسمح اصارحك امام الجمهور .... اعرف انها طريقه مو حلوه ..بس معليش تقبلها بروح رياضيه .... الكثير متابع مواضيعك .. وردورك ... ما انت الا انسان ... ردينق و لتل انفورميشن .... يعني وش سويت وش اخر التطورات الي صدمت المبرمجين بها ههههههه اعتقد نو ثنق ... فلا تحكم وتقول غبيه ومدري شنو وsyntax مزعج وقبيح ... في اي مصطلح يكتب هذا في لغات البرمجة .... ؟؟؟؟؟ لا استطيع اقول اعمالك تدل على انك مبرمج محترف ولو 15%

بصراحه انا احسد 3 اشخاص انحرج منهم الا انهم بزعلون مني ... اعرف شكو انا حتى يهمهم انا .... بس من دون مجامله ... مقالتهم ردودهم انفعالتهم وربي دكاتره .في الاحترام .. فعلا قمه في الاسلوب ... والردود

احمد غريب

محمد عبدالعزيز

إسماعيل ابراهيم

....

واتمنا للجميع التوفيق .....

#12
اقتباس
وش انت حتى تحكم على مكتبة بقولك غبيه ؟؟

هذي كتبت على ايدي محترفين عرفو اللغة قبل ما تعرف 5 *5 ههههههههههههههههههههههه

محترفين على عيني و راسي .. و لكن هذا لا يعني انهم يستطيعون كتابة مكتبات جيدة .. ولا حتى تصميم لغة جيدة.

هناك الكثير من الهكرز المحترفين اللذين يستطيعون اكتشاف الثغرات و كتابة برامج بالاسمبلي تقوم باشياء عجيبة غريبة و بسرعة رهيبة, و لكنهم لا يستطيعون صنع برنامج تطبيقي يفيد المستخدمين العاديين.

عندك مثلا اللينكس, كتبوه محترفين و يعرفون شغلهم تمام, ما قلنا شيء, لكنهم صنعوا نظامهم ينفعهم هم (الهاكرز) و لا ينفع المستخدم العادي, و هذا الامر ظل لفترة طويلة الى ان جاء آخرون يحاولون تطوير النظام كي يكون صالح للاستخدام من قبل الجميع.

اذا سلمت لك بأن اللذين صمموا الـ STL محترفون, فهذا لا يعني ان الـ STL جيد, بل هو فقير و ردئ جدا.

اقتباس
الاخ hasan_aljudy اسمح اصارحك امام الجمهور .... اعرف انها طريقه مو حلوه ..بس معليش تقبلها بروح رياضيه .... الكثير متابع مواضيعك .. وردورك ... ما انت الا انسان ... ردينق و لتل انفورميشن .... يعني وش سويت وش اخر التطورات الي صدمت المبرمجين بها ههههههه اعتقد نو ثنق ... فلا تحكم وتقول غبيه ومدري شنو وsyntax مزعج وقبيح ... في اي مصطلح يكتب هذا في لغات البرمجة .... ؟؟؟؟؟ لا استطيع اقول اعمالك تدل على انك مبرمج محترف ولو 15%

يا سيدي .. انا لم ادعي غير ذلك.

#13
اقتباس
بس اسمح لي اقول لك شي بس لا تزعل ... امانه لا تزعل ... وش انت حتى تحكم على مكتبة بقولك غبيه ؟؟

هذي كتبت على ايدي محترفين عرفو اللغة قبل ما تعرف 5 *5 ههههههههههههههههههههههه اعرف انك بتعصب

لا أعتقد أن السي بلس بلس أصبحت قياسيـة وظهرت مكتباتها إلا بعـدما ابتدأت بالفعل تعلم 5 *5 وربما حتى وصلت للتفاضل والتكامل في ذلك الوقت .......... بالنسبة لمقولة "وش أنت حتى تحكم ....." أنا لست سوى مبرمج مبتدئ تعرف على المكتبات الحقيقيـة في السي شارب والجافا ووجدت أن مكتبة STL مكتبة فقيرة للغـاية ومصممـة بشكل لا يناسب قدرة السي بلس بلس ، وهي لا تناسبني أيضاً حينما أريد كتابة برنامج ولا أرتاح لها وهذا السبب الأهـم..... بالنسبة لاحتراف من كتب المكتبات ، فربما أنهـم من النوع الذي يكره البرمجـة الشيئيـة وهذا واضح من طريقة تصميمهـم للمكتبـة .. الكثير من المبرمجين لا يفقهـون أساليب البرمجـة الشيئيـة حتى المحترفين منهـم.

اقتباس
اسمع بقول لك شي مهم .... اعرف بتقول قل حياه ..بس كمل واقرأ كلامي لكي تفهم المقصود وش السبب اني كتبت هذا الكلام

((( دروسك .. مقالاتك ... بسيطه جدااا جدااا ... يعني كلها ابتدائية ...ممكن تكون متوسطه .. ))

اها كلامي كذا مو مقبول !!!! طيب هل صاحب المكتبة يرضا كلامك .... ؟؟؟ فكر !!! هل يرضي كلامك مبرمج المكتبة ...

هل عملت مكتبة .... ؟؟؟؟ اعتقد وصلت المعلومه

نعـم أنا مبتدئ ، وسأظل مبتدئ أمـام هذا البحر الجبار من علوم الحاسب الآلي ........ بالنسبة للدروس والمقالات التي أكتبها فهي ليست دليل على مقدار علمي يا أخي العـزيز ( هل أنا فارغ الوقت حتى أكتب عـن كل ما أتعلمـه)............... بالنسبة "هل قد سويت مكتبة ؟" ، نعـم أثناء تعلمي للخـوارزميات وهياكل البيانات ولكنها ضاعت أثناء فرمتـة الجهاز وسبب كتابتي لها هـو ما شاهدته في السي شارب والجـافا .

====================\

ملاحظـة شخصية لك: ردك لم تكتبـه على أساس مناقشة مكتبة STL ، بل على أساس أننا مبتدئين لا نفهـم ........ أخي swsws إذا كنت جربت المكتبـة فلماذا لا تكتب تجربتك عـنها بدلاً من الحديث عـن مستوانا العلمي

#14

ما رأيكم نعمل منافسة لنرى من يستطيع كتابة مكتبة افضل من STL؟

على الأقل عدد محدود من Collection Classes

على الأقل .. فقط dynamic array

اعتقد (و بشدة) اننا سنخرج بشيء عملي و مفيد اكثر من الـ STL في التطبيقات اللتي تحتاج string و vector

#15
اقتباس
ما رأيكم نعمل منافسة لنرى من يستطيع كتابة مكتبة افضل من STL؟

على الأقل عدد محدود من Collection Classes

على الأقل .. فقط dynamic array

اعتقد (و بشدة) اننا سنخرج بشيء عملي و مفيد اكثر من الـ STL في التطبيقات اللتي تحتاج string و vector

ولله فكرة جميلة يا أخى و أنا أول المشاركين. لكن كيف سيتم الحكم إذا كانت أحسن من ال STL ولا لأ؟ و هل تقصد بقولك Collection Classes أن المكتبة ستكون للجافا ؟

#16

ما شاء الله عليكم المناقشة سخنت

والظاهر هايكون فى نتيجة

انا متحمس صراحة علشان اشوف اية امكانياتكم

كان نفسى اشارك بس انا لسة فى البداية ولسة مقابلتش المكتبة دى اصلا

بس انا واقف فى المدرجات بشجع ومستنى اشوف نتيجة جامدة وامكانياتكم بصراحة

.....................................

واحب اقول للاخ swsws

انى زعلان من التحليل بتاعك مش انة صح ولا خطا ولكن ..

من نصح اخاة امام الناس فلقد فضحة

..................................

وشكرا

محارب بلا زمان

.................................................................................................................................................................................................

untitled6yk.png
#17

أخ swsws ، لا أدري ما الداعي لكل كلامك...

يعني فلان مبتدئ، فلان مش عارف شو..

نحن هنا لدراسة البرمجة، وفي هذا الموضوع لتحليل مكتبةSTL لا نحلل شخصيات وفقاً للردود.

نعم يا swsws انت لم تسئ اليّ مباشرة، لكن كلامك أقرب الى الشتم عندما تتهجم على زملائي وهذا ما ارفضه وبشدة حتى لو امتدحتني مليون مرّة..

ما الداعي للتجريح؟؟!!

حسان وسلطان من أعمدة المنتدى وخبراء وإن لم يدّعوا!

صراحة قرأت ردك أكثر من مرة ولم أفهم الداعي ... يعني لماذا هذا الرد؟

ارجو أن تميّز عزيزي بين الحد الفاصل بين الجرأة والوقاحة،

والحد الفاصل بين الثقة بالنفس والغرور,

والحد الفاصل بين النصيحة والإهانة!

#18

---------------------------------------------------------------------------

بخصوص المكتبة، STL، من أكبر سلبياتها أنها مبنية على قوالب، ولو بنيَت على كائنات واشتقاق لكانت أفضل.

إذن ما رأيكم أن ندخل إلى النقاش مكتبة Collection Classes الخاصة بـ MFC سيما وهي منافس كبير للـSTL ، وهي تتكون من ثلاث مباني اساسية Array,List,Map ولها نسخة تعتمد أيضا على القوالب وأخرى بدون قوالب!!

تم تعديل هذه المشاركة بواسطة إسماعيل ابراهيم في 17 يوليو 2006 في 08:59

#19

لم أكن أعلم أن مكتبات mfc لديها هذه الإمكانات ... خاصة وأن هذه الـ Collectios بالإمكان استخدامها في تطبيقات الويندوز أو غيره ... بحثت عـن المجموعات Collection التي بدون قوالب ، ولكن لم أجدها .. وجدت الأخرى التي بقوالب ولا أدري إذا كانت طريقة الاستخدام هي نفسها في المجموعات التي بدون قوالب .

أنظر إلى هذا المثال لم أستطع تنفيذه بسبب مشاكل في الربط (ولكن الترجمـة صحيحـة) ولست في مزاج لتصليح مثل هذه الأخطاء اللعينـة ، أنظر:

#include <afx.h>
#include <afxtempl.h>
#include <iostream>
#include <cmath>



class Integer: public CObject
{
	int integer;
public:
	Integer(int a): integer(a){}
	int &getInteger() { return integer;}
	void setInteger( int integer) { this->integer=integer; }
};

class CStack: public CTypedPtrList<CObList,Integer*>
{
public:
	void Push(Integer* integer)
	{
		AddHead(integer);
	}
	Integer* Pop()
	{
		return RemoveHead();
	}

};

int main()
{
	CStack *a=new CStack;
	for(int i=0; i< 20;i++)
		a->Push(new Integer(rand()%500));

	for(i=0; i< 20; i++)
		std::cout << i << ":\t" << a->Pop() << std::endl;

	return 0;
}

لا أدري عـن بقية إمكانات المكتبـة ، ولكن كان من الأفضل مثلاً أن يدخلوا في مثل هذه الـ collection بعض المفاهيـم الأخـرى مثل ملكيـة العـناصر داخل المجمـوعـة لم يتم إضافتها وبعض المفاهيـم الأخرى...

لدي سؤال: هل هـناك فرق بين الحاويات Container في السي بلس بلس والمجمـوعات Collection أم أن الأمر اختلاف في المصطلحات فقط؟

#20

لو فعلا اريد بناء مكتبة وانا قادر على ذلك .. اول ما سأقوم به اني سأستغني عن Template .

لانها تعقد syntax دون فائدة كبيرة .

لكن أنا معجب بSTL رغم تعقيدها الظاهري .. والسبب ,,

انها ستغنيني .. عن كتابة اكواد وخوارزميات .. احتاج لاتقانها شهور .

نرجع للفكرة .. تصميم مكتبة افضل من stl .. ممكن لو ركزنا في البداية على strings فقط .. سننجح .

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#21

إن شاء الله راح أبدء بالدروس قريباً وصدقوني راح كثير من الأعضاء راح يغير رأيه

وتذكروا المثل الشعبي " اللي ما يعرف الصقر يشويه " :D

بس قبل أناقش السلبيات مع الأخ Sultan_Althibity حبيت أذكر المبادئ اللي بنيت عليها الـــSTL عشان نعرف أسباب عدم دعم مميزات ودعم مميزات ترى بأنها عيوب وإذا عرف السبب بطل العجب

المبادئ :

1) أن تكون Standard بين جميع الكمبايلرات

2) السرعة والفاعلية في الأداء

3) إختصار إعادة كتابة الكود وأن تكون توسعة للغة نفسها

4) دعم الــ generic programming و ال Metaprogramming بدون اللتأثير على السرعة والأداء

ونبدأ النقاش

اقتباس
1) استخدام القوالب مما سيجعل خطأ وحيد منك يصدر مئات الأخطاء لا تعلم كيف تصححها حتى لو كان هذا الخطأ مجرد نسيان للفاصلة المنقوطـة.

هذا الخطأ يحدث دائما لكل مبرمج وفي كل لغة دائما حتى عندما تكتب بلغة C او ++C او حتى Java حينما تنسى فاصلة منقوطة وتستمر في الكتابة - إذا إفترضنا أن Editor لن ينبهك - عند أول Compile للملف ستجد مئات

الأخطاء لكن عند الذهاب إلى أول خطأ ستحل جميع المشاكل فهذا ليس شأن STL بل هو شأن الــ Compiler نفسه لكن لو قلت لي إن رسائل الخطأ تكون كبيرة ومبهمة فمعك الحق .

اقتباس
2) غير مبنيـة كائنات هذه المكتبـة على شكل شجرة وراثيـة فنحن لا نجد مثلاً كلاس اسمـه Object ... مما لا يسمح لك بتوسعـة هذه المكتبـة.. مما جعل منشؤ هذه المكتبـة يعتمدون على القوالب حتى تكون مثلاً الـ stack صالحـة

لجميع الأنـواع.

المكتبة تبنى على إمكانيات اللغة . وفي لغة ++C لا يوجد نوع إسمه Object فبتكون المكتبة محصورة فقط على الأنواع المعرفة من قبل المبرمج أو من قبل المكتبة وهذا لا ينفع وليس من مبادئ المكتبة فسيتم اللجوء إلى ال virtual

method ولن يكون هناك inline function وهذا بحد ذاته نقص في الأداء.

فالمكتبة بنيت على أساس تفضيل السرعة وهناك عدة جوانب تثبت ذلك :

1) لا يوجد في المكتبة شئ إسمه virtual method وجل دالها inline

2) إنه لا يوجد range check في class vector في [] operator ولكن إذا أراد المبرمج أن يشيك فتوجد method تسمى at بها تشييك على المدى

.

.

.

إلخ

اقتباس
3) عدم استخدام أنماط التصميم البرمجيـة إلا فيما ندر ... فنحن لا نجد كلاسات تغطي على الأنماط الأساسيـة مثل الـ int و float ....

في هذه أوافقك الرأي لكن قد يكون السبب أنها إعتمدت في بنائها ليس على مبدأ الوراثة .

اقتباس
4) طول وقت الترجمـة حينما نستعـمل بعض هذه الكلاسات.

أنت بين خيارين طول وقت الترجمة أم طول وقت تنفيذ الكود فأختر لنفسك أين منهما . ;)

اقتباس
5) أنا أشعر أن برامجي ستصبح أثقل وأبطئ حينما استخدم هذه المكتبات الغبيـة .. مجرد شعـور وليس حقيقـة .

ساورني نفس الشعور عند بداية تعاملي مع المكتبة لكن بعد أن فهمت أغلبها زال ذلك الشعور . :P

اقتباس
6) المكتبة فقيرة ولا تقدم لك الكثير ... ليست مثل مكتبات الجافا والسي شارب ، في تلك المكتبات تجد كلاسات خاصـة بالرسم بينما هـنا لا نجدها مع أنه لا يوجد أي صعوبات تقنيـة تحـول دون فعل ذلك حتى مع اختلاف أنظمـة التشغيل ، كان

بالإمكان الاتفاق على الواجهـات وترك أمور المعالجـة وكيفية الرسم لكل نظام تشغيل ...

لو تعلم عدد السنوات اللي أجتمعوا فيها ليخرجوا هذه المكتبة بدون الفيجول كان عذرتهم فكيف تطالب بالفيجول

وإدخال الفيجول بيدخلنا في متاهه جديده وأنواع جديدة مثل Event وغيرها من الخرابيط :^)

وأخيراً

اقتباس
أيضاً وكما قلت سابقاً ليس بإمكانك توسيع المكتبة بالشكل المطلوب.

شفت ++mysql وكيف أصبحت أسهل بعد كتابتها بال STL حتى إنك تقدر تمر على جدول كامل مع الشروط اللي تحطها وكأنك تمر على عناصر vector

وأيضا شفت sgi كيف وسعت المكتبة وأدخلت لها الthread و الmutux وغيرها

ولو كان في وقت لكان فصلت أكثر لكن موعدنا مع الدروس إن شاء الله ;)

تم تعديل هذه المشاركة بواسطة b.m.s في 17 يوليو 2006 في 12:21

#22

معلش عايز أفهم حاجة يعنى إيه "المكتبة غير مبنية على شجرة وراثية" ؟؟

#23
اقتباس
لدي سؤال: هل هـناك فرق بين الحاويات Container في السي بلس بلس والمجمـوعات Collection أم أن الأمر اختلاف في المصطلحات فقط؟

على حد علمي مصطلحات فقط :o

اقتباس
لو فعلا اريد بناء مكتبة وانا قادر على ذلك .. اول ما سأقوم به اني سأستغني عن Template .

لانها تعقد syntax دون فائدة كبيرة .

ال NET. إتجهت إلى ال template وال MFC أيضا كذلك وانتم تريدون الهروب

اقتباس
لكن أنا معجب بSTL رغم تعقيدها الظاهري.

الظاهري صح ;)

اقتباس
نرجع للفكرة .. تصميم مكتبة افضل من stl .. ممكن لو ركزنا في البداية على strings فقط .. سننجح .

على الأقل يجب أن تعرفوا العيوب الحقيقة للSTL عشان ما تغلطوا وتطيحون فيها هذه من جهة

ومن جهة ثانية كلمة أفضل كلمة مطاطية لأن لها أكثر من تفسير

أقضل من ناحية السرعة

أقضل من ناحية الفاعلية

أقضل من ناحية الآمان

أقضل من ناحية الراحة في البرمجة

أقضل من ناحية التوسع

أقضل من ناحية .....

أقضل من ناحية .....

أقضل من ناحية .....

أقضل من ناحية .....

تم تعديل هذه المشاركة بواسطة b.m.s في 17 يوليو 2006 في 12:51

#24

ما فائدة الـ STL إذا كانت لا تستخدم تعدد الأوجـه (أحد المبادئ الأساسية للبرمجـة الشيئيـة) لأننا لا نجد كلمة virtual .. كما قلت فأنا أعتقد أن من كتب هذه المكتبة متعقد من البرمجـة الشيئيـة ( أتذكر أن من كتب هذه المكتبة هـو شخص واحد فقط وليس عدة أشخاص حسبما قرأت)...

=======

السي بلس بلس بالفعل تعاني من أساليب البرمجـة الهيكليـة ، أغلب المبرمجين يركزون على قضية سرعـة الكـود وأنه لا بد أن يكون سريعاً إلى أقصى حد ..... حتى كلمة virtual لا يتم استخدامها ... البرمجـة الشيئيـة أتت حتى تجعل مشروعـك مصمم بشكل رائع ومرتب وسهل التعـديل فيه ، وليس لكي تزيده سرعـة في التنفيذ ..... في بعض الحالات فإن ترتيب المشروع يؤثر على سرعـة الكـود ، ولذلك فإن الفرق بين البرامج بين السي والسي بلس بلس في قضية الأداء لا يتجاوز 10% ....

====================

هذا موقع لأحد الكتب الرائعـة في مجال الخوارزميات وهياكل البيانات ، وهذا الكتاب عبارة عـن منهج يقدمـه المؤلف في أحد جامعات أمريكا في 38 محاضرة فقط ، في الوقت الذي تقدم فيه الجامعات العربيـة مواضيع اللينكد ليست وتعريفاً واحد للخوارزميات وكثيراً من الستاك والكيو وقليلاً من التري وثلاث خوارزميات ترتيب (ليس في المنهج خوارزمية بحث) في أكثر من 40 محاضرة :lol: :

http://www.brpreiss.com/books/opus4/html/

المهـم في هذ الكتاب أنه يقدم لك مكتبـة عظيمـة في نهاية المنهـج الدراسي ، أفضل من الـ STL بمئات المرات .. وهي مصممـة بطريقة رائعـة وأنا أنصح الجميع بقراءة هذا الكتاب ....

سأشرح أساسيات هذه المكتبة بشكل سريع للغـاية جداً:

المكتبة الموجودة في الكتاب تفترض أن الأب الأساسي ومصدر كل الكلاسات هـو الكلاس Object ، وهـو بالطبع ADT ويوفر لك العـمليات الأساسيـة .

الكلاس Wrapper : هذا تيمبلت كلاس ، أي كلاس يستخدم القوالب وفائدته أنه يقوم بالتغطيـة على الأنماط الأساسية مثل int وجعلها كأنها كائنـات وهـو يوفر هذه الخدمات إلى جميع الأنماط الأساسية بالإضافة إلى std::string .

الحاويات Container :

في الكتاب شرح كبير عـنها وهـو يقسمها على كل إلى نوعين:

الحاويات المباشرة: هذه الحاويات لا تملك نسخـة عـن عـناصرها بل تملك مؤشرات فقط إلى عـناصرها.

الحاويات غير المباشرة: تملك نسخـة كاملة عـن عـناصرها ، وليس مؤشرات .

هـناك إشكالية أيضاً بشأن الحاويات ، هل تملك حاوية عـناصرها ، إذا كان لدي ستاك مثلاً ، وأردت تدمير هذه الستاك فهل من حقها أن تدمر عـناصرها ... هذه القضية واضحـة في الحاويات غير المباشرة لأنها تملك نسخ عـن العـناصر الأصليـة ولكن ماذا عـن الحاويات المباشرة التي تمتلك مؤشرات فقط ، الكتاب يقترح حل هذه المشكلة عـن جعل الكلاس Container يرث من كلاس آخر (مستقل عـن الشجرة الوراثية اسمه Ownership ) هذا الكلاس الأب توجد لديه دالة ، تقول أنتي أيتها الحاوية تمتلكين عـناصرك بشكل افتراضي وإذا أردتي عدم امتلاكها فاستدعـي الدالة الفلانيـة ........ حتى نفهـم بشكل أفضل أنظر إلى المقطع الكـودي التالي لدالة الهـدم لكلاس اسمـه stack . الدالة Visit

~stack()
{
	if (IsOwner)
		مر على جميع العـناصر وألغيها
	else
		اخرج من دون فعل أي شيء بالعـناصر
}

هـناك أمر مهـم يوجد دالة خاصة في جميع الحاويات اسمها Accept ستتعرف على فائدتها الآن.

المتفقد Vistor :

هذا الكلاس لا ينتمي إلى الشجرة الوراثيـة ... ويوجد له دالتين فقط الأولى هي visit ووظيفتها ووظيفتها أنها تستقبل بارامتر من النوع Object وتعـمل فيه ما تحدده أنت لاحقاً والثانيـة هي IsDone وهي تعيد قيمـة من النوع bool .

العلاقة بين الحاوية والمتفقد Vistor هي كالتالي ... يتم تمرير الكلاس Vistor بكامله إلى الدالة Accept في الحاوية .. وتقوم الحاوية بدورها باستدعاء الدالة visit من الكلاس Vistor وتمرر كل عـنصر من عـناصرها إلى هذه الدالة حتى تفعل ما هـو مناسب فيها .... الآن IsDone تحدد متى يتم الانتهاء ، أو عـند تمرير جميع العـناصر... أنظر:

void SomeContainer::Accept (Visitor& visitor) const

	for each Object i in this container
		visitor.Visit (i);

الكلاس Vistor كلاس مجرد .. وعليك أنت أن تعيد تعريف الدالتين IsDone و visit ، إذا أردنا الطباعـة نستخدم التالي:

class PrintingVisitor : public Visitor
{
public:
	void Visit (object& object)
		{ cout << object; }
};

وبواسطـة سحر تعدد الأوجـه فإننا نستطيع تمرير هذا الكلاس بكل أريحيـة إلى الدالة Accept في الحاوية.

أستطيع الاستمرار في التحدث عـن هذه المكتبـة لمن يريد .. والميزات التي تضطلع بها...

#25

يا ريت حد يفهمنى إزاى ال STL مش مستخدمة البرمجة الشيئية و كلها كلاسات وارثة من بعض!!

هذا الموضوع مغلق.

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