سي++

(تم التحويل من C++)
C++
C plus plus book.jpg
Paradigmلغة برمجة متعددة الأنماط:[1] إجرائية، كائنية التوجه، generic
Designed byبيارنه ستروستروپ
Developerبيارنه ستروستروپ
معامل بل
ISO/IEC JTC1/SC22/WG21
First appeared1983
الإصدار المستقر
ISO/IEC 14882:2003 / 2003
الإطلاق الپروڤة
Typing disciplineStatic, unsafe, nominative
OSعابر للمنصات (متعدد المنصات)
Filename extensions.h .hh .hpp .hxx .h++ .cc .cpp .cxx .c++
Website[{{#property:P856}} {{#property:P856}}]
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;
}


انظر أيضاً

الهامش

  1. ^ أ ب Stroustrup, Bjarne (1997). "1". The C++ Programming Language (Third ed.). ISBN 0201889544. OCLC 59193992. |access-date= requires |url= (help)

وصلات خارجية

هناك كتاب ، برمجة:سي بلس بلس، في معرفة الكتب.