سي++
Paradigm | لغة برمجة متعددة الأنماط:[1] إجرائية، كائنية التوجه، generic |
---|---|
Designed by | بيارنه ستروستروپ |
Developer | بيارنه ستروستروپ معامل بل ISO/IEC JTC1/SC22/WG21 |
First appeared | 1983 |
الإصدار المستقر | ISO/IEC 14882:2003
/ 2003 |
الإطلاق الپروڤة | |
Typing discipline | Static, unsafe, nominative |
OS | عابر للمنصات (متعدد المنصات) |
Filename extensions | .h .hh .hpp .hxx .h++ .cc .cpp .cxx .c++ |
Major implementations | |
Borland C++ Builder, GCC, Intel C++ Compiler, Microsoft Visual C++, Sun Studio, Turbo C++, Comeau C/C++, clang | |
اللهجات | |
ISO/IEC C++ 1998, ISO/IEC C++ 2003 | |
Influenced by | |
C, سيميولا, Ada 83, ALGOL 68, CLU, ML[1] | |
Influenced | |
Perl, LPC, Lua, Pike, Ada 95, جاڤا, PHP, D, C99, C#, Aikido, Falcon | |
|
سي بلس بلس ++C هي لغة برمجة للإستخدامات العامة، تعتبر لغة السي++ لغة برمجة كائنية. والتي يعتبرها الكثيرون اللغة الأفضل لتصميم التطبيقات ذات الواجهة الكبيرة. و لغة السي بلس بلس ++C من لغات البرمجة العالية المستوي و في نفس الوقت قريبة من لغة التجميع ذات المستوي المحدود. وهي لغة ناشئة من لغة C الذي قام بتطويرها بيارن ستروستروب إلي ++C.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
تاريخ
طور بيارنه ستروستروپ (Bjarne Stroustrup), والذي كان يعمل في مختبرات بيل, لغة السي++ في الثمانينات كتحسين للغة السي، تشمل السي++ جميع مزايا السي بالأضافة إلى مزايا البرمجة الكائنية، تسهّل لغة ++C الأسلوب المهيكل والمنهجي لعملية تصميم البرامج، وتعتمد على الكائنات كبنية أساسية لتشكيل البرامج.
ومثلها مثل لغة السي، فان السي++ هي لغة متعددة الاستخدامات إلا أنها مناسبة لبرامج أنظمة التشغيل. وتكتب معظم أجزاء أنظمة التشغيل وبرامج مساعدة أنظمة التشغيل باستخدام السي++ ومنها نظام جنو/لينكس.
ويتجنب الكثير من المبرمجين لغة السي++ و السي نظراً لشهرتهما كلغات برمجة معقدة. و قد أدى ذلك إلى استخدام الكثيرين للغات مثل فيجوال بيسك و ديلفي ثم جاڤا و سي شارب والأخيرتين هما مجرد تسهيل (و ليس تطوير) للغة السي++ وبدا في وقت معين أن لغات مثل الجاڤا سوف تستولي على سوق البرمجيات التجارية من السي++ مع هجرة عدد كبير من مبرمجى السى++ إلى جافا و سي شارب، إلا أنه سرعان ما أدرك المبرمجون أن السي++ هي السبيل الوحيد لانتاج برامج تجارية قوية وسريعة وتؤدى المطلوب منها بكفاءة وبأقل عدد من الأخطاء.
بين السي و السي++
- تدعم السي++ السي بشكل كامل (نظريا أو هذا ما تقوله الشركات المنتجة للمترجمات) وعمليا يمكن لمعظم برامج السى أن تترجم بواسطة مترجمات سى++ و لهذا تسمى هذه المترجمات بمترجمات سي/سي++. - إلا أن الأمر لا يخلو من بعض المشاكل غير المتوقعة، مثلا قد يحدث أن تسمى متغيراً باسم new وهي كلمة محجوزة في سي++ وليست محجوزة في سي.
الجديد في سي++
لغات برمجة | |
لغات كائنية | |
سي++ ++C |
سي شارپ #C |
دلفي (لغة برمجة) Delphi |
ادا 95 Ada |
جاڤا Java |
سمولتوك Smalltalk |
روبي Ruby |
اوبجكت پاسكال Object Pascal |
لغات تقليدية | |
بيسيك Basic |
سي C |
باسكال Pascal |
كوبول COBOL |
فورتران FORTRAN |
أسمبلي Assembly |
لغات وظيفية | |
ليسپ Lisp |
پرولوگ Prolog |
پايثون Python |
پاريس Paris |
هندسة برامج | |
الاضافة الأهم التى أتت بها السى++ عن السى هى بالطبع اليرمجه عن طريق الكائنات. حيث تعتمد السى على البرمجة الاجرائية و التى كانت كافية في وقتها. الا أن بظهور أنظمة التشغيل ذات الواجهة الرسومية انتقل معظم المبرمجين إلى البرمجة بالكائنات . الا أن السى مازالت تستخدم في برمجة الويندوز.
وهذا بالاضافة إلى بضعة اضافات أخرى مثل :
- مكتبات جديدة لأداء مهام الادخال و الاخراج تعتمد على الكائنات.
- كلمة iniline التى تضمن الاجراء الفرعى في الأساسى بدلا من استدعائه.
- استخدام الاشاره // لتضمين الملاحظات بطول سطر واحد.
سبب صعوبتها
ربما تعود أسباب صعوبة لغتى السى و السى++ لأسباب تاريخية أكثر منها واقعية و هو ما يردده المبرمجين المعتادين على استخدام السى++ و هذا يعود بنا إلى أصل لغة السى وهي لغة السي بي إل CPL والتي اشتهرت بشدة تعقيدها مما تسبب في ابتعاد المبرمجين عنها فتم تطويرها وتبسيطها إلى لغة سميت BCPL ولم تلقى الكثير من النجاح ولكنها تطوت إلى لغة البي B وعندما أرادوا تطويرها سموها سى( وهذا هو أصل تسمية السي)، وبالطبع ورثت السي++ خصائص لغة سي. الا أنه لا يمكن انكار أن مفاهيم مثل المؤشرات pointers ، والاشارات هى مفاهيم مربكة للمبرمج المبتدىء، بالضافة إلى مفاهيم التوارث Inheritance وتعدد الشكل polymorphism و القوالب Templates التى تربك حتى المبرمجين المحترفين. و كذلك لا تقدم سى++ الحماية الكافية للمبرمج كى لا يقع في أخطاء التشغيل التى قد تتسبب في توقف الحاسوب عن العمل. كيف؟
في لغة الفيجوال بيسك مثلا عندما تحدد مصفوفة بحجم 20 عنصرا مثلا كالأتي:
Dim A(20) As Integer
ثم تحاول معالجة العنصر رقم 21 مثلا فسوف يبادرك محرك الفيجوال بيسك برسالة خطأ و يتوقف برنامجك. أما في السى++ فاذا عرفت مصفوفة بنفس الحجم : int a[20] // integer a from 0-19 not from 0-20 و عندما تحاول الوصول إلى العنصر رقم عشرين مثلا تكون قد تعديت حدود المصفوفة إلى جزء من الذاكرة ربما تكون مخصصة لبرنامج أخر أو معلومات حساسة لنظام التشغيل. و المشكلة الأخرى التى تربك الكثيرون أن أول عنصر بالمصفوفة هو 0 و ليس 1 و حجمها 20 أى أن العنصر الأخير هو 19 و ليس 20 مثل البيسك.
سبب قوتها
المعروف أنه كلما اقتربت لغة البرمجة من لغة الحاسوب (Machine Code) كلما زادت قوتها و ما يمكن أن تفعله بها وفي الوقت نفسه كلما زادت صعوبتها وتعقيداتها، وفي السابق كان المبرمجون يضطرون إلى كتابة برامج معينة بلغة التجميع (أسمبلي) لأنها كانت اللغة الأقرب للحاسوب الا أن ذلك كان أمرا في غاية التعقيد و الصعوبة. و مع ظهور أنظمة التشغيل بدءا بيونكس بدأت بإستخدام لغة سي بدل من لغة أسمبلي في تطوير برامجها، وبظهور مبدأ البرمجة الكائنية التوجه، وإزدياد حجم البرامج المستخدمة وعدم كون سرعة تطبيق البرمجيات قضية حرجة، وإنتشار فكرة إعادة إستخدام البرمجيات بشكل كبير مع مبدأ البرمجة الكائنية التوجه، أصبحت السى++ بديلا جيدا للغات سابقة من ضمنها لغة التجميع ولغة سي وغيرها من اللغات التقليدية يريح المبرمجين من عنائها و في الوقت نفسه لا تدفع بالمبرمج إلى تقديم التنازلات التى تتطلبها لغات مثل بيسك و كوبول و باسكال و غيرها. و رغم أن السى و السى++ هما في النهاية لغات عالية المستوى الا انه قد تم تصنيفهم كلغات متوسطة بين اللغات العالية المستوى مثل بيسك و كوبول و لغة التجميع و تسمى ب لغات متوسطة المستوى Intermediate Language و تم اعتبار السى كمستوى ثالث بين مستوى رابع و مستوى ثانى ( لغة التجميع أو أسمبلي) . ويتطرف بعض المبرمجين أكثر من ذلك ويصفون السي والسي++ بأنها لغة تجميع نقالة Portable Assembly. يضاف إلى ذلك أن هذه اللغة تدعم برمجة كائنية التوجه مما يجعلها قابلة لللإستخدام لكائنية التوجهية أو عدمها والذي يجعلها لغة مرنة وذات شعبية لها جماهيرها الواسعة من المبرمجين المحبين للغة السي أو المبرمجين الذين اعتادوا على لغات برمجة قائمة على كائنية التوجه مثل لفة الجافا.
أمثلة
مثال Hello, World بالسي++
#include <iostream> int main () { std::cout << "Hello, world!" << std::endl; return 0; }
انظر أيضاً
- The C++ Programming Language
- C++0x, the planned new standard for C++
- Comparison of integrated development environments for C/C++
- مقارنة لغات البرمجة
- List of C++ compilers
- List of C++ template libraries
- Comparison of Java and C++
الهامش
وصلات خارجية