زبان ماشين، زبان اسمبلي و زبان سطح بالا
برنامهنويس دستورات خود را ميتواند در انواع متفاوتي از زبانهاي برنامهنويسي بنويسد. تعدادي از اين زبانها به صورت مستقيم توسط كامپيوتر درك ميشوند و تعداد ديگري نياز به ترجمه دارند تا قابل فهم براي كامپيوتر شوند. امروزه صدها زبان كامپيوتري مورد استفاده ميباشند، كه ميتوان آنها را به سه دسته تقسيم كرد:
1- زبان ماشين (
Machine Languages
)
2- زبان اسمبلي (
Assembly Languages
)
3- زبانهاي سطح بالا (
High-Level Languages
)
هر كامپيوتري ميتواند بطور مستقيم فقط زبان ماشين خود را درك كند. زبان ماشين، زبان ذاتي و منحصر بفرد يك كامپيوتر ميباشد و به هنگام طراحي سختافزار كامپيوتر تعريف ميشود. زبان ماشين عموماً شامل رشتهاي از اعداد است و موجب ميشود كه كامپيوتر عمليات اصلي را كه در ارتباط با خود است درهر بار راهاندازي اجرا نمايد. زبان ماشين، وابسته به ماشين ميباشد (زبان ماشين يك دستگاه فقط بر روي همان نوع از ماشين اجرا ميشود). درك زبان ماشين براي انسان طاقت فرسا و بسيار مشكل است. براي مثال ميتوانيد به زبان ماشين كه در قسمت زير آورده شده توجه كنيد، اين برنامه اضافه كار را بر مبناي حقوق محاسبه و نتيجه بدست آمده را در
grosspay
ذخيره ميكند.
+1300042774
+1400593419
+1200274027
زمانيكه كامپيوترها مورد استفاده عموم قرار گرفتند، مشخص شد برنامهنويسي زبان ماشين براي بسياري از برنامهنويسان خسته كننده و ملالتآور است. در عوض، بكار بردن رشتهاي از اعداد كه كامپيوتر بتواند بصورت مستقيم آنرا درك كند، برنامهنويسان از عبارات كوتاه شده زبان انگليسي براي فهماندن عمليات ابتدايي به كامپيوتر استفاده كردند. اين عبارات مخفف شده شبيه زبان انگليسي، مبناي زبان اسمبلي هستند. برنامههاي مترجم بنام اسمبلر مشهور ميباشند كه زبان اسمبلي را بزبان ماشين ترجمه ميكنند. قطعه برنامهاي كه در قسمت پايين آورده شده همان عمليات بالا را انجام ميدهد منتهي با استفاده از زبان اسمبلي كه نسبت به زبان ماشين از وضوح (قابل فهم) بيشتري برخوردار است.
LOAD BASEPAY
ADD OVERPAY
STORE GROSSPAY
اگر چه اين كد براي انسان از وضوح بيشتري برخوردار است اما براي كامپيوتر تا زماني كه به زبان ماشين ترجمه نشود معني ندارد. زبان اسمبلي باعث افزايش سرعت برنامهنويسي شد اما هنوز هم مستلزم دستورات فراواني براي انجام يك عمل ساده بود. براي افزايش سرعت برنامهنويسي زبانهاي سطح بالا توسعه پيدا كردند. كه با استفاده از يك عبارت ميتوانند وظايف و اعمال وسيعتري را انجام دهند. برنامههاي مترجم كه وظيفه تبديل زبانهاي سطح بالا به زبان ماشين را برعهده دارند كامپايلر ناميده ميشوند. زبانهاي سطح بالا اين امكان را به برنامهنويس ميدهند كه دستورات مورد نياز خود را تقريباً مانند زبان انگليسي و عمليات رياضي را به صورت روزمره بنويسد.
grossPay = basePay + overTimePay
واضح است كه زبانهاي سطح بالا نسبت به زبانهاي ماشين يا اسمبلي از محبوبيت بيشتري در نزد برنامهنويسان برخوردارند. ويژوال بيسيك به صورت وسيع مورد استفاده ميباشد و از جمله زبانهاي سطح بالا به شمار ميآيد. عمل كامپايل كردن زبان سطح بالا به زبان ماشين ميتواند وقت زيادي از كامپيوتر را بگيرد. برنامههاي مفسر (
Interpreter
) توسعه يافته ميتوانند به صورت مستقيم برنامههاي زبانهاي سطح بالا را بدون نياز به كامپايل به زبان ماشين تبديل كنند. اگر چه برنامههاي مفسر نسبت به برنامههاي كامپايلر آهستهتر عمل ميكنند، اما برنامههاي مفسر فوراً شروع به فعاليت ميكنند بدون اينكه تأخيرهاي ذاتي از عمل كامپايل را در خود داشته باشند.
8-1 تاريخچه
C
و
C++
زبان
C++
توسعه يافته زبان
C
است که از دو زبان برنامهنويسي قبلي، بنامهاي
BCPL
و
B
منشعب شده است. زبان
BCPL
در سال
1967
توسط
Martin Richards
بعنوان زباني براي نوشتن نرمافزار سيستمهاي عامل و کامپايلرها طراحي شده بود.آقاي
Ken Thompson
بسياري از ويژگيهاي زبان
B
خود را از
BCPL
اقتباس کرد و از
B
براي ايجاد نسخههاي اوليه سيستم عامل
UNIX
در آزمايشگاهاي
Bell
در سال
1970
بر کامپيوتر
DEC PDP-7
استفاده شد. هر دو زبان
BCPL
و
B
از نوع زبانهاي بدون نوع
(typeless)
هستند، به اين معني که هر ايتم داده يک "کلمه" در حافظه اشغال ميکند و مسئوليت رسيدگي به دادها به عهده برنامه نويس خواهد بود.
زبان
C
از زبان
B
و توسط
Dennis Ritchie
در آزمايشگاهاي شرکت
Bell
توسعه يافت و براي اولين بار بر روي کامپيوتر
DEC PDP-11
در سال
1972
پياده سازي گرديد. زبان
C
از مفاهيم اساسي
BCPL
و
B
سود ميبرد در حاليکه داراي قابليت تعريف نوع داده
(data type)
و ويژگيهاي ديگر بود. زبان
C
در بدو شروع بکار بطور گستردهاي بعنوان زبان توسعهدهنده سيستم عامل
UNIX
بکار گرفته شد. امروزه، اکثر سيستمهاي عامل توسط زبانهاي
C
يا
C++
يا ترکيبي از هر دو نوشته شدهاند. هم اکنون
C
بر روي بيشتر کامپيوتر پيدا ميشود. زبان
C
، زبان مستقل از سختافزار است. اگر در زمان طراحي دقت کافي بخرج داده شود، ميتوان برنامههاي
C
را که از قابليت حمل
(portable)
برخودار هستند بر روي اکثر کامپيوترها به اجرا در آورد.
در اواخر دهه
1970
، زبان
C
توسعه پيدا کرد و بنامهاي "
C
تجاري"،"
C
کلاسيک"، و "
Keringhan and Ritchie C
" معروف شد. کتاب "زبان برنامهنويسي
C
" که توسط انتشارات
Prentice-Hall
در سال
1978
منتشر شد تاثير بسيار زيادي در گسترش اين زبان بازي کرد.
بکارگيري زبان
C
بر روي مجموعه وسيعي از انواع کامپيوترها (گاهي اوقات از اين مطلب بعنوان
platform
ياد ميشود) موجب شده تا نسخههاي متعدي از آن بوجود آيد (متاسفانه). با اينکه اين نسخهها شبيه هم بودند، اما گاهي اوقات عدم سازگاري مابين آنها رخ ميداد. اين عدم سازگاري يکي از جديترين مشکلات برنامهنويساني بود که ميخواستند برنامههاي قابل حملي بنويسند که بر روي چندين پلاتفرم به اجرا درآيد. در چنين وضعيتي وجود يک نسخه استاندارد
C
احساس گرديد. در سال
1983
، کميته استاندارد
X3J11
که تحت نظارت کميته ملي استاندارد کامپيوتر و پردازش اطلاعات آمريکا
(ANSCIP)
بوجود آمده بود، يک تعريف غير مبهم از زبان مستقل از ماشين ارائه کرد. در سال
1989
، استاندارد رشد پيدا کرده بود و
ANSI
با همراهي
ISO
زبان
C
را در سرتاسر جهان استاندارد کردند. مستند استاندارد در سال
1990
منتشر شد و از آن بعنوان
ANSI/ISO 9899:1990
ياد ميشود. ويرايش دوم کتاب "زبان برنامهنويسي
C
" در سال
1988
، چاپ و به نام
ANSI C
، ناميده شد که هم اکنون در سرتاسر جهان بکار گرفته ميشود.
قابليت حمل
بدليل اينکه زبان
C++
استاندارد شده است، مستقل از سخت افزار است و بطرز گسترده اي در دسترس مي باشد، غالبا برنامههاي نوشته شده به زبان
C++
را ميتوان با کمي اصلاح و حتي بدون هيچ گونه تغييري، بر روي انواع مختلفي از سيستمهاي کامپيوتري به اجرا در آورد.
زبان
C++
بسط يافته زبان
C
است،که توسط
Bjarne Stroustryp
در اوايل
1980
و در آزمايشگاههاي
Bell
ابداع گرديد. زبان
C++
حاوي برخي از ويژگيهاي
C
است، اما مهمترين ويژگي و قابليت اين زبان در برنامهنويسي شيگرا بودن آن است.
اين ويژگي، انقلابي در جامعه نرمافزاري بوجود آورد. در چنين حالتي توليد نرمافزار بسرعت، با دقت و اقتصاديتر صورت ميگيرد. شيها کامپونتهاي نرمافزاري با قابليت استفاده مجدد هستند که ايتمهاي حقيقي در دنيا را مدل سازي ميکنند. توسعه دهندهگان نرمافزار به اين نتيجه رسيدهاند که بهره گيري از روش مدولار و طراحي شيگرا و پياده سازي به اين روشها ميتواند در بهرهوري گروههاي توسعهدهنده نرمافزاري در مقايسه با تکنيکهاي متداول قديميتر، همانند برنامهنويسي ساختيافته بسيار موثر باشد. درک برنامههاي شيگرا، اصلاح و تغيير آنها راحتر است.
زبانهاي شيگراي متعددي تا بدين روز پديد آمدهاند، زبانهاي همانند
Smalltalk
، که توسط
PARC
ابداع شده است. زبان
Smalltalk
يک زبان شيگراي محض است، که هر چيزي در آن يک شي ميباشد. از سوي ديگر
C++
از جمله زبانهاي هيبريد ميباشد، به اين معني که ميتوان در اين زبان برنامهاي نوشت که شبيه
C
يا شيگرا باشد، يا اينکه ترکيبي از هر دو حالت را در بر گيرد.
9-1 كتابخانه استاندارد
C++
برنامههاي
C++
متشكل از قسمتهاي بنام كلاسها و توابع هستند. ميتوانيد برحسب نياز هر قسمت را به فرم يك برنامه
C++
برنامهنويسي كنيد. با اين همه, اكثر برنامهنويسان
C++
از مزيت كلكسيونهاي غني از كلاسها و توابع در كتابخانه استاندارد
C++
بهره ميبرند. از اينرو, واقعاً دو بخش آموزشي در جهان
C++
وجود دارد. بخش اول يادگيري خود زبان
C++
است و بخش دوم نحوه استفاده از كلاسها و توابع موجود در كتابخانه استاندارد
C++
. در سرتاسر اين كتاب در ارتباط با تعدادي از اين كلاسها و توابع صحبت خواهيم كرد. خواندن كتاب
The Standard C Library
, نوشته
PJ.Plauger
را براي كساني كه ميخواهند درك عميقي از توابع كتابخانه
ANSI C
كه در برگيرنده
C++
نيز ميباشد و در آن مطالبي در زمينه نحوه پيادهسازي و نحوه استفاده از اين توابع در ايجاد كدهاي قابل حمل وجود دارد, توصيه ميكنيم. معمولاً كتابخانههاي استاندارد توسط سازندگان كامپايلر تدارك ديده ميشوند. البته كتابخانههاي كلاس با مقاصد خاص نيز وجود دارند كه توسط سازندگان مستقل نرمافزار تهيه ميشوند.
مهندسي نرمافزار
از روش «ساخت- بلوكي» در ايجاد برنامهها استفاده كنيد. از اختراع مجدد چرخ اجتناب كنيد. تا حد امكان از قسمتهاي موجود استفاده كنيد. به اين روش, استفاده مجدد از نرمافزار ميگويند, كه يكي از اهداف برنامهنويسي شيگرا ميباشد.
مهندسي نرمافزار
به هنگام برنامهنويسي در
C++
, از بلوكهاي زير استفاده خواهيد كرد: كلاسها و توابع موجود در كتابخانه استاندارد
C++
, كلاسها و توابعي كه خودتان ايجاد ميكنيد، كلاسها و توابعي كه در كتابخانههاي ديگر وجود دارند.
در كل كتاب با نكاتي در ارتباط با مهندسي نرمافزار مشاهده خواهيد كرد كه به توصيف مفاهيم موثر در بهبود معماري و كيفيت سيستم نرمافزاري ميپردازند. همچنين به برجسته كردن نكات ديگري شامل برنامهنويسي ايدهآل (براي كمك به شما در نوشتن برنامههايي كه واضح بوده, درك آنها آسانتر باشد, نگهداري و استفاده راحتتري داشته باشند و بتوان خطاهاي آنها را به راحتي يافته و اصلاح كرد), خطاهاي برنامهنويسي (مشكلاتي كه بايد براي اجتناب از آنها هوشيار باشيد), كارايي (تكنيكهاي برنامهنويسي كه سبب اجراي سريعتر و مصرف كمتر حافظه ميشوند), قابليت حمل (تكنيكهايي كه به كمك آنها ميتوان برنامههايي نوشت كه با كمي تغيير يا هيچ تغييري, بر روي انواع كامپيوترها اجرا شوند) و اجتناب از خطا (تكنيكهاي حذف خطا از برنامهها و روش نوشتن برنامههاي بدون خطا از همان ابتداي كار) است. تمام اين نكات فقط نقش راهنما و هدايتكننده دارند.
يكي از مزايا ايجاد توابع و كلاسهاي متلعق بخود اين است كه دقيقاً از نحوه عملكرد آنها مطلع هستيم و ميتوانيم به بررسي كد
C++
آنها بپردازيم. عيب اين روش در زمانبر بودن و پيچيدگي است كه در طراحي, توسعه و نگهداري توابع و تلاشهاي جديد بوجود ميآيد.
كارائي
با استفاده از توابع و كلاسهاي كتابخانه استاندارد
C++
, بجاي نوشتن نسخههايي از آنها, ميتوانيد كارايي برنامه را افزايش دهيد چرا كه آنها بدقت و با توجه به كارايي نوشته شدهاند. همچنين اين تكنيك زمان توسعه و ايجاد برنامه را كوتاهتر ميسازد.
قابليت حمل
قابليت حمل با استفاده از توابع و كلاسهاي كتابخانه استاندارد
C++
بجاي نوشتن توابع و كلاسهاي متعلق به خود, قابليت حمل برنامه افزايش و بهبود مييابد چرا كه اين توابع و كلاسهاي در هر پيادهسازي
C++
وجود دارند.