منتديات البرنس مازن :lol!: :lol!: ◔̯◔Prince Mazen
السيرة الذاتية
عدم الموضـوع في حد زاتـــوا مــوضــوع
http://ahmedmazen9.sudanforums.net/



عــارفيــن قمـــة المــفاجئة هـي شـنو

حــاجـــه غريــبه انـــك تلقى الاسهم دي

ومـــا تنـــزل تحت وتـعرف الحاصل شنــو

↓↓↓

↓↓↓

↓↓↓

↓↓↓

↓↓↓

↓↓↓

↓↓↓
(◕ ◡ ◕) (◕ ◡ ◕) (◕ ◡ ◕) (◕ ◡ ◕)

نــزلـــت خيرا" 1000 اهلا" وسهلا" بيك

يلا نقولـك الحاصل شـنو بس سريـــع يلا

سجل في المنتدي ده http://ahmedmazen9.sudanforums.net/

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

☼▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬☼
]
☼▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬☼
منتديات البرنس مازن :lol!: :lol!: ◔̯◔Prince Mazen
السيرة الذاتية
عدم الموضـوع في حد زاتـــوا مــوضــوع
http://ahmedmazen9.sudanforums.net/



عــارفيــن قمـــة المــفاجئة هـي شـنو

حــاجـــه غريــبه انـــك تلقى الاسهم دي

ومـــا تنـــزل تحت وتـعرف الحاصل شنــو

↓↓↓

↓↓↓

↓↓↓

↓↓↓

↓↓↓

↓↓↓

↓↓↓
(◕ ◡ ◕) (◕ ◡ ◕) (◕ ◡ ◕) (◕ ◡ ◕)

نــزلـــت خيرا" 1000 اهلا" وسهلا" بيك

يلا نقولـك الحاصل شـنو بس سريـــع يلا

سجل في المنتدي ده http://ahmedmazen9.sudanforums.net/

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

☼▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬☼
]
☼▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬☼
منتديات البرنس مازن :lol!: :lol!: ◔̯◔Prince Mazen
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

منتديات البرنس مازن :lol!: :lol!: ◔̯◔Prince Mazen

يضم كل ما يحتاجه الشاب العربي {☺☺☺برامج .العاب. اغاني .ازياء .موضة . منوعات ☺☺} برامج .العاب. اغاني .ازياء .موضة . منوعات
 
الرئيسيةأحدث الصورالتسجيلدخول

 

 تعرف لغة سي++

اذهب الى الأسفل 
كاتب الموضوعرسالة
Admin
ملك
ملك
Admin


المساهمات : 17
تاريخ التسجيل : 31/01/2013
العمر : 34

تعرف لغة سي++ Empty
مُساهمةموضوع: تعرف لغة سي++   تعرف لغة سي++ Icon_minitimeالخميس يناير 31, 2013 6:39 am

ي++ (تنطق: سي بلس بلس) (بالإنجليزية: ++C) هي لغة برمجة كائنية متعددة الاستخدام. يعتبرها الكثيرون اللغة الأفضل لتصميم التطبيقات ذات الواجهات المعقدة، وللتعامل مع البنية الصلبة للحاسوب وذلك لسرعتها في التنفيذ والتي لا تختلف كثيرًا عن السي[1]، ولأنها من لغات البرمجة عالية المستوى، وفي نفس الوقت قريبة من لغة التجميع ذات المستوى المنخفض؛ حيث يمكن إضافة كود من لغة التجميع وإدراجه في الملف المصدري للسي++، كما أنها توفر تعامل أكثر تعقيدًا مع البيانات. يعتبرها البعض اللغة البرمجية التي تُعرف البرمجة الحقيقية.[2] كما أنها تعد لغة برمجة إجرائية (يمكن كتابة برنامج يحتوي على إجراءات وتوابع فقط) وذلك لأنها في الأصل مشتقة من لغة سي الإجرائية، إلا أن بيارن ستروستروب طورها لتدعم أيضا البرمجة كائنية التوجه، حيث البرنامج المكتوب عبارة عن أصناف أو كائنات لها أدواتها الخاصة وقدراتها المستقلة، مما أدى إلى ظهور تقنية التعدد التعدد الكائني والتوريث.

يتجنب الكثير من المبرمجين السي++ نظراً لشهرتها كلغة برمجة معقدة. وقد أدى ذلك إلى استخدام الكثيرين للغات أخرى مثل فيجوال بيسك ودلفي وجافا وسي شارب. الأخيرتان هما مجرد تسهيل (وليس تطوير) للغة سي++، وبدا في وقت معين أن لغات مثل جافا سوف تستولي على سوق البرمجيات التجارية من سي++ مع هجرة عدد كبير من مبرمجي السي++ إلى جافا وسي شارب، إلا أنه سرعان ما أدرك المبرمجون أن السي++ هي السبيل الوحيد لإنتاج برامج تجارية قوية وسريعة وتؤدي المطلوب منها بكفاءة وبأقل عدد من الأخطاء.[ادعاء غير موثق منذ 556 يوماً]

bounce flower flower flower flower
التاريخ

طور بيارن ستروستروب (Bjarne Stroustrup) خلال عمله في مختبرات بيل لغة سي++ في الثمانينيات كتحسين للغة سي. تشمل سي++ جميع مزايا السي مع تعديلات طفيفة، بالإضافة إلى مزايا البرمجة الكائنية. تسهّل لغة سي++ الأسلوب المُهيكل والمنهجي لعملية تصميم البرامج، وتعتمد على الكائنات بنيةً أساسية لتشكيل البرامج. كما هو الحال مع لغة سي، فإن سي++ لغة متعددة الاستخدامات، إلا أنها مناسبة لبرامج أنظمة التشغيل. وتكتب معظم أجزاء أنظمة التشغيل وبرامج مساعدة أنظمة التشغيل باستخدامها سي++ ومنها نظام جنو/لينكس.

يجدر بالذكر أن سي++ المستخدمة الآن، أعقد بكثير من تصميم ستروستروب الأولي في ثمانينيات القرن العشرين[3]، ويرجع ذلك إلى التطوير المتلاحق التي شهدته، والاهتمام من قبل المبرمجين. ولعلى أهم تطوير ساهم بتعقيدها هو كتابة ألكسندر ستيبانوف في التسعينيات لمكتبة القوالب القياسية.
المعايير
السنة معيار سي++ الاسم الشائع
٢٠١١ ISO/IEC 14882:2011 C++11
٢٠٠٧ ISO/IEC TR 19768:2007 C++TR1
٢٠٠٣ ISO/IEC 14882:2003 C++03
١٩٩٨ ISO/IEC 14882:1998 C++98
فلسفة اللغة

في كتاب " تصميم وتطوير لغة سي ++ " (1994) وصف المؤلف بيارن ستروستروب بعض القوانين التي استخدمها لصياغة وتصميم لغة سي ++ :

لغة سي ++ صممت لتكون مكتوبة بشكل ثابت وأهداف عامة للغة التي تكون فعّآلة وقابلة للنقل مثل لغة سي.
لغة سي ++ صممت لتدعم بشكل مباشر أنماط برمجية متعددة (البرمجة الإجرائية، تجريد البيانات، البرمجة الكائنية والبرمجة العامة).
لغة سي ++ صممت لتعطي المبرمج الخيار حتى ولو كان اختيار المبرمج غير صحيح.
لغة سي ++ صممت لتكون متوافقة مع لغة سي قدر الإمكان وبالتالي توفير انتقال سلس منها إلى لغة سي.
لغة سي ++ تتجنب المميزات التي لها منصة محددة أو غير عامة.
لغة سي ++ لا تتعرض للمميزات التي لا يتم استخدامها على " مبدأ عدم النقل ".
لغة سي ++ صممت لتؤدي وظيفتها بدون وجود بيئة برمجية متطورة داخل طراز الكائن في لغة سي ++.

الجديد في اللغة

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

بما أن السي++ تطوير للسي، فالبرمجة فيها تبدو قريبة إلى السي إذا لم تستخدم فيها البرمجة الكائنية. وبطبيعة الحال، شمل تطوير السي++ بعض التعديلات على كتابة البرنامج. فمثلاً هذا برنامج يطبع عبارة "Hello World"، ومن ثم يغلق.

#include<iostream>
using namespace std;

int main() {

cout << "Hello World!" << endl;

return 0;
}


فنلاحظ أن لم يعد يلحق بعد المكتبة الامتداد .h، كما أنها ضمت مكتبات أخرى عدة. فمكتبة iostream لم تكن موجود في السي، كما يظهر بوضوح تقنية الحقل المصرح (بالإنكليزية: Declarative Region) باستخدام الـ namespace، حيث يجعل المتغيرات والوظائف موجودة في مكان مخصص من الملفات المصدرية، وليست مصرحًا بشكل عام داخل الملف المصدري، مما يقلل عدد الأخطاء ويسمح بتسمية المتغيرات والوظائف والكائنات بنفس الاسم، واستخدامها حسب الحاجة عن طريق الكلمة المفتاحية using. مع أن بعض المصرفات تتجاهلها، إلا أن سي++ المعياري يوجب جعل وظيفة الـ main ترجع متغيرًا من نوع عدد صحيح، ولذلك يتوجب إرجاع return 0 إليها. كما أن التطوير يتضمن العديد من التعديلات الطفيفة على خصائص السي الموروثة، لكن التطويرات الأهم، يضل الجديد الذي جاءت به السي++.
مضاعفة الوظائف

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

#include <iostream>
using namespace std;

int multiply(int x, int y) { // الوظيفة الأولى
return x*y;
}

double multiply(double x, double y) { // الوظيفة الأخرى
return x*y;
}

int main() {

int A = 10, B = 2;
double Y = 11.5, Z = 2.5;

cout<<multiply(A,B)<<"\n"; // سيستخدم تلقيائيا الوظيفة الأولى لأن المتغيرات المدخلة من نوع عدد صحيح وتكون النتيجة 10*2 = 20
cout<<multiply(Y,Z)<<"\n"; // وتكون النتيجة 11.5*2.5 = 28.75 double سيستخدم تلقيائيا الوظيفة الأخرى لأن المتغيرات المدخلة أعداد من نوع

return 0;
}


العمليات في السي++

السي++ يوفر أكثر من 35 عملية، وتغطي العمليات الحسابية الأساسية، والمقارنات، والعمليات المنطقية وغيرها. يمكن أن تكون متزايدة لمحددات نوع البيانات، مع استثناءات قليلة مثل (. و*.) فضلا عن الرمز الثلاثي وهذه الرموز أيضا جزءا أساسيا من العديد من تقنيات البرمجة السي++ ، مثل مؤشرات الذكية.التزايد لا يغيير أسبقية العمليات الحسابية التي تنطوي على الرموز، ولا يغير من عدد المعاملات التي تستخدم الرموز (أي المعامل ولكن قد لا يمكن تجاهلها من قبل الرمز، على الرغم من أنه سيتم تقييمها قبل التنفيذ). الرموز المتزايدة "& &"و "| |" تفقد خاصية التقييم قصير المدى.
الحقل المصرح

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

#include <iostream>
using namespace std;

namespace Square {
height = 1;
width = 1;
}

namespace Rectangular {
height = 1;
width = 2;
}

int returnArea(int x, int y) {
return x*y;
}

int main() {

cout<<"Square area is: ";
using namespace Square;
cout<<returnArea(height, width)<<".";

cout<<"\n\nRectangular area is: ";
using namespace Rectangular;
cout<<returnArea(height, width)<<".";

return 0;
}


بين السي والسي++

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

سبب صعوبتها

ربما تعود أسباب صعوبة لغتي السي والسي++ لأسباب تاريخية أكثر منها واقعية وهو ما يردده المبرمجين المعتادين على استخدام السي++ وهذا يعود بنا إلى أصل لغة السي وهي لغة السي بي ال 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 مثل البيسك والباسكال.
التطور المستقبلي

لا تزال لغة سي++ تواصل تطورها. فهناك نسخة جديدة من سي++ قيد التطوير سميت مبدئيًا بـ C++0x (تنطق سي بلس بلس أُوْهْ إكس)[1]، وقد صدرت في مارس 2009، يشير العمل الحالي بأنّ سي++ سيواصل الاستفادة من طبيعته متعددة المثال. boost مجموعة تعمل للاستفادة إلى أبعد الحدود من سي++ في شكله الحالي. هم يتوسّعون كثيرا في سي++ من حيث الوظيفية والقدرات وينصحون أيضا لجنة معايير سي++ التي تعمل فيها الميزّات حسنا والتي تحتاج التحسين.
الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://mazen1102.rigala.net
 
تعرف لغة سي++
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
منتديات البرنس مازن :lol!: :lol!: ◔̯◔Prince Mazen :: الفئة الأولى :: تقنية معلومات-
انتقل الى: