ماهو أصل و تاريخ لغة لغة السي بلس بلس C++ ؟
ماهو أصل و تاريخ لغة لغة السي بلس بلس C++ ؟
لمحة تاريخية عن لغة السي بلس بلس
لغة C++ هي لغة برمجة عالية المستوى للأغراض العامة تم تطويرها في عام 1979 بواسطة Bjarne Stroustrup في مختبرات AT & T Bell.
تم إنشاء لغة C++ كإصدار متقدم للغة البرمجة C. بحيث قام بتوسيع بعض ميزات لغة C وإضافة ميزات جديدة بما في ذلك الكلاسات والكائنات، والتحقق من النوع، ومعالجة الاستثناءات، والوراثة ، وتعدد الأشكال، وما إلى ذلك إلى لغة C.
من خلال السنوات ، تلقت اللغة العديد من التحديثات المهمة لتبقى على اتصال مع لغات البرمجة الحديثة. على الرغم من أن لغة C++ قد تم إنشاؤها منذ عقود مضت، إلا أنها تستخدم على نطاق واسع لتطوير العديد من البرامج حتى اليوم.
بعض اللغات البرمجة التي تم تطويرها قبل C++
قبل الحديث عن تاريخ C++، دعونا نلقي نظرة على لغات البرمجة التي تم تطويرها قبل C++. قبل ظهور لغة البرمجة C++، تم تطوير العديد من لغات البرمجة المختلفة.
إليكم 5 لغات برمجة التي تم تطويرها قبل C++.
لغة Algol طورت من قبل International Group في سنة 1960
لغة Basic Combined Programming Language طورت من قبل Martin Richards في سنة 1967
لغة B طورت من قبل Ken Thompson في سنة 1970
لغة C طورت من قبل Dennis Ritchie في سنة 1972
لغة K&R C طورت من قبل Brian Kernighan & Dennis Ritchie في سنة 1978
لغة C++ طورت من قبل Bjarne Stroustrup في سنة 1980
أصل إسم لغة "C++"
سنلقي نظرة على تاريخ إسم لغة C++. فأثناء تطوير هذه اللغة تمت إقتراح في البداية لغة C++ (C plus plus) بإسم "new C". ثم تمت إعادة تسميتها إلى "C with Classes"، مما يعني أنها كانت مجموعة شاملة من لغة C المعروفة. ثم تمت إعادة التسمية النهائية للغة في عام 1983 بواسطة Rick Mascitti إلى "C++". يأتي ++ في C++ من لغة C. في لغة C، تعني ++ زيادة المتغير بمقدار 1. لذا، تعني C++ تقريبًا "واحد أكثر من C".
تناول Bjarne Stroustrup أصل إسم "C++" في مقدمة كتابه "لغة برمجة C++"، قائلًا إن إسم "C++" مستوحى من كتاب جورج أورويل ألف وتسعمائة وأربعة وثمانون. عندما سُئل Rick Mascitti عن التسمية في عام 1992، أشار إلى أن الاسم أُعطي بطريقة فكاهية. لم يعتقد أبدًا أن "C++" سيصبح الاسم الرسمي للغة.
فلسفة و فكرة لغة C++
تصميم وتطوير فكرة و فلسفة لغة البرمجة C++ كان في سنة C++ (1994) بواسطة Bjarne Stroustrup
فيما يلي بعض النقاط لفلسفة C++:
يجب أن يكون للمبرمج الحرية في اختيار نموذج البرمجة الخاص به (البرمجة الإجرائية، البرمجة الكائنية، البرمجة العامة، وتجريد البيانات)
يجب أن تكون اللغة متوافقة مع لغة C. ويجب ألا يكون الانتقال من لغة C إلى لغة C++ أمرًا صعبًا.
يجب أن يتم بناء كل ميزة في اللغة للغرض العام. لا ينبغي أن تكون الميزات خاصة بالمنصة.
يجب أن تكون اللغة مصممة للعمل بدون بيئة برمجة معقدة (يمكن كتابة كود C++ على مفكرة بسيطة).
يجب أن تكون اللغة مكتوبة بشكل ثابت ولأغراض عامة. يجب أن تكون قابلة للنقل مثل لغة C، أي أن الكود المكتوب على أحد أجهزة الكمبيوتر يجب أن يكون قابلاً للاستخدام على كمبيوتر آخر مع الحاجة إلى تغيير طفيف أو عدم الحاجة إلى أي تغيير في الكود.
يجب أن تعطي اللغة الخيار للمبرمجين للقيام باختيارهم الخاص (الاختيار من بين أنواع مختلفة من المتغيرات، وتخصيص وإلغاء تخصيص الذاكرة حسب احتياجات البرنامج، وما إلى ذلك)، حتى لو كان ذلك يزيد من احتمال أن يختار المبرمج بشكل غير صحيح.
يجب ألا تؤدي اللغة إلى إبطاء البرنامج أو استهلاك المساحة (overhead) للميزات غير المستخدمة في التعليمات البرمجية.
يجب ألا تكون هناك لغة تحت C++، باستثناء لغة التجميع.
فكرة الواجهات interfaces في لغة C++
الواجهة عبارة عن بنية برمجة تصف سلوك كلاس ما في لغة C++ دون تحديد تطبيق محدد لتلك الكلاس . على سبيل المثال، إذا كان لدينا كلاس Car و كلاس Scooter، فيجب أن يكون لكل كلاس من هذه الكلاس إجراء (وظيفة) LightsOn(). نظرًا لأن كلا الكلاسين تشتركان في نفس الإجراء، فيمكننا إنشاء واجهة لتقليل التعليمات البرمجية وتحسين كفاءة البرنامج. ولكن كيفية تشغيل الأضواء ستعتمد على تنفيذ الدالة LightsOn() في كل كلاس . بمعنى آخر، سيكون لكلا الكلاسين كلاس أصل تحتوي على الدالة LightsOn() بداخلها. ولكن سيتم شرح التفاصيل المحددة لكيفية تشغيل الأضواء في الوحدات المعنية.
إليك بعض أهم جوانب الواجهات :
يجب أن تكون الواجهة سهلة الفهم
لا ينبغي أن تكون عرضة للأخطاء
ينبغي أن تشجع الاستخدام الفعال للبرنامج
تنقل الواجهات والكلاسات المجردة نفس الفكرة بشكل أو بآخر. ولهذا السبب يتم تنفيذ الواجهات في C++ باستخدام الكلاسات المجردة. يسمى الكلاس ذات الدالة الافتراضية البحتة pure virtual بالكلاس المجرد في لغة c++. يمكننا إنشاء دالة افتراضية عن طريق كتابة "= 0" في إعلان الدالة .
ملاحظة: من المهم ملاحظة أن الكلاسات المجردة وتجريد البيانات في C++ هما مفهومان منفصلان. يتم إستخدام تجريد البيانات لفصل البيانات الأساسية عن تقنيات تنفيذها.
إليك هذا المثال لفهم تنفيذ كلاس مجردة:
class Cuboid
{
public:
virtual float calculateVolume() = 0;
// A pure virtual function
private:
float length;
float width;
float height;
};
لقد قمنا بالتصريح عن دالة افتراضية countVolume() داخل الكلاس Cuboid. ولهذا السبب، أصبح كلاس المكعبات كلاس مجرد. الغرض من هذا الكلاس المجرد هو أن تكون بمثابة فئة أساسية مناسبة للكلاسات الأخرى. يمكن الآن للكلاسات التي ترث كلاس المكعب أن تحدد (وتنفذ) دالة countVolume() حسب حاجتها.
ماهي أهمية الواجهات في لغة C++
يتم استخدام الواجهة أو الكلاس المجرد كلاس أساسي للكلاسات الأخرى التي ترث الكلاس المجرد. فهو يوفر دالة عامة للكلاس حتى تتمكن الكلاسات الأخرى من استخدام الدوال الافتراضية للكلاس بسهولة.
دعنا نأخذ مثالا لفهم أهمية الواجهات.
#include <iostream>
using namespace std;
// Interface class
class Shape {
public:
float dimension = 10;
// pure virtual function
virtual float findVolume() = 0;
};
// Derived class 1
class Sphere: public Shape {
public:
float findVolume() {
float volume = 4.0 * 3.14 * dimension * dimension * dimension / 3.0;
return volume;
}
};
// Derived class 2
class Cube: public Shape {
public:
float findVolume() {
float volume = dimension * dimension * dimension;
return volume;
}
};
int main() {
Sphere s1;
Cube c1;
cout << "The volume of sphere of radius 10 is: " << s1.findVolume() << endl;
cout << "The volume of cube of side length 10 is: " << c1.findVolume() << endl;
return 0;
}
مخرجات البرنامج:
The volume of sphere of radius 10 is: 4186.67
The volume of cube of side length 10 is: 1000
في المثال أعلاه، قمنا بإنشاء كلاس مجرد يسمى الشكل Shape .نظرًا لاختلاف صيغ حساب حجم المكعب والكرة، فقد أنشأنا دالة افتراضية تسمى findVolume() في كلاس الشكل.ثم استخدمنا هذه الدالة الافتراضية في الكلاسات المشتقة (الكرة والمكعب) لحساب أحجام الأشكال المعنية. ساعدتا كلاس الواجهة الذي أنشأناه على تجنب تكرار التعليمات البرمجية وتوفير وقتنا أيضًا.
القواعد المتعلقة بالواجهات:
يجب أن نحتفظ بقواعد معينة في أذهاننا أثناء العمل مع الواجهات في لغة C++ :
لا يمكن تعريف دالة افتراضية ، بل يمكن الإعلان عنها فقط.
يمكننا فقط تخصيص القيمة 0 لدالة افتراضية.
ستعمل الكلاس المشتق ككلاس مجرد إذا لم تتمكن من تنفيذ الدالة الافتراضية للكلاس الأساسي.
لا يمكننا إنشاء كائن لكلاس مجرد.
يمكننا إنشاء مؤشر لكلاس مشتق بمرجع لكلاس الأساسي(المجرد).
تفاااعل أكثر ننشر أكثر يا شبااااب كلمة طيبة
تعليقات
إرسال تعليق