زبان هاي برنامه نويسي
برنامهنويس دستورات خود را ميتواند در انواع متفاوتي از زبانهاي برنامهنويسي بنويسد. تعدادي از اين زبانها به صورت مستقيم توسط كامپيوتر درك ميشوند و تعداد ديگري نياز به ترجمه دارند تا قابل فهم براي كامپيوتر شوند. امروزه صدها زبان كامپيوتري مورد استفاده ميباشند، كه ميتوان آنها را به سه دسته تقسيم كرد:
هر كامپيوتري ميتواند بطور مستقيم فقط زبان ماشين خود را درك كند. زبان ماشين، زبان ذاتي و منحصر بفرد يك كامپيوتر ميباشد و به هنگام طراحي سختافزار كامپيوتر تعريف ميشود. زبان ماشين عموماً شامل رشتهاي از اعداد است و موجب ميشود كه كامپيوتر عمليات اصلي را كه در ارتباط با خود است درهر بار راهاندازي اجرا نمايد. زبان ماشين، وابسته به ماشين ميباشد (زبان ماشين يك دستگاه فقط بر روي همان نوع از ماشين اجرا ميشود). درك زبان ماشين براي انسان طاقت فرسا و بسيار مشكل است. براي مثال ميتوانيد به زبان ماشين كه در قسمت زير آورده شده توجه كنيد، اين برنامه اضافه كار را بر مبناي حقوق محاسبه و نتيجه بدست آمده را در grosspay ذخيره ميكند.
زمانيكه كامپيوترها مورد استفاده عموم قرار گرفتند، مشخص شد برنامهنويسي زبان ماشين براي بسياري از برنامهنويسان خسته كننده و ملالتآور است. در عوض، بكار بردن رشتهاي از اعداد كه كامپيوتر بتواند بصورت مستقيم آنرا درك كند، برنامهنويسان از عبارات كوتاه شده زبان انگليسي براي فهماندن عمليات ابتدايي به كامپيوتر استفاده كردند. اين عبارات مخفف شده شبيه زبان انگليسي، مبناي زبان اسمبلي هستند. برنامههاي مترجم بنام اسمبلر مشهور ميباشند كه زبان اسمبلي را بزبان ماشين ترجمه ميكنند. قطعه برنامهاي كه در قسمت پايين آورده شده همان عمليات بالا را انجام ميدهد منتهي با استفاده از زبان اسمبلي كه نسبت به زبان ماشين از وضوح (قابل فهم) بيشتري برخوردار است.
اگر چه اين كد براي انسان از وضوح بيشتري برخوردار است اما براي كامپيوتر تا زماني كه به زبان ماشين ترجمه نشود معني ندارد. زبان اسمبلي باعث افزايش سرعت برنامهنويسي شد اما هنوز هم مستلزم دستورات فراواني براي انجام يك عمل ساده بود. براي افزايش سرعت برنامهنويسي زبانهاي سطح بالا توسعه پيدا كردند. كه با استفاده از يك عبارت ميتوانند وظايف و اعمال وسيعتري را انجام دهند. برنامههاي مترجم كه وظيفه تبديل زبانهاي سطح بالا به زبان ماشين را برعهده دارند كامپايلر ناميده ميشوند. زبانهاي سطح بالا اين امكان را به برنامهنويس ميدهند كه دستورات مورد نياز خود را تقريباً مانند زبان انگليسي و عمليات رياضي را به صورت روزمره بنويسد.
واضح است كه زبانهاي سطح بالا نسبت به زبانهاي ماشين يا اسمبلي از محبوبيت بيشتري در نزد برنامهنويسان برخوردارند. ويژوال بيسيك به صورت وسيع مورد استفاده ميباشد و از جمله زبانهاي سطح بالا به شمار ميآيد. عمل كامپايل كردن زبان سطح بالا به زبان ماشين ميتواند وقت زيادي از كامپيوتر را بگيرد. برنامههاي مفسر ( Interpreter ) توسعه يافته ميتوانند به صورت مستقيم برنامههاي زبانهاي سطح بالا را بدون نياز به كامپايل به زبان ماشين تبديل كنند. اگر چه برنامههاي مفسر نسبت به برنامههاي كامپايلر آهستهتر عمل ميكنند، اما برنامههاي مفسر فوراً شروع به فعاليت ميكنند بدون اينكه تأخيرهاي ذاتي از عمل كامپايل را در خود داشته باشند.
زبان 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)[1] بوجود آمده بود، يک تعريف غير مبهم از زبان مستقل از ماشين ارائه کرد. در سال 1989 ، استاندارد رشد پيدا کرده بود و ANSI با همراهي ISO[2] زبان C را در سرتاسر جهان استاندارد کردند. مستند استاندارد در سال 1990 منتشر شد و از آن بعنوان ANSI/ISO 9899:1990 ياد ميشود. ويرايش دوم کتاب "زبان برنامهنويسي C " در سال 1988 ، چاپ و به نام ANSI C ، ناميده شد که هم اکنون در سرتاسر جهان بکار گرفته ميشود.
بدليل اينکه زبان C++ استاندارد شده است، مستقل از سخت افزار است و بطرز گسترده اي در دسترس مي باشد، غالبا برنامههاي نوشته شده به زبان C++ را ميتوان با کمي اصلاح و حتي بدون هيچ گونه تغييري، بر روي انواع مختلفي از سيستمهاي کامپيوتري به اجرا در آورد.
زبان C++ بسط يافته زبان C است،که توسط Bjarne Stroustryp در اوايل 1980 و در آزمايشگاههاي Bell ابداع گرديد. زبان C++ حاوي برخي از ويژگيهاي C است، اما مهمترين ويژگي و قابليت اين زبان در برنامهنويسي شيگرا بودن آن است.
اين ويژگي، انقلابي در جامعه نرمافزاري بوجود آورد. در چنين حالتي توليد نرمافزار بسرعت، با دقت و اقتصاديتر صورت ميگيرد. شيها کامپونتهاي نرمافزاري با قابليت استفاده مجدد هستند که ايتمهاي حقيقي در دنيا را مدل سازي ميکنند. توسعه دهندهگان نرمافزار به اين نتيجه رسيدهاند که بهره گيري از روش مدولار و طراحي شيگرا و پياده سازي به اين روشها ميتواند در بهرهوري گروههاي توسعهدهنده نرمافزاري در مقايسه با تکنيکهاي متداول قديميتر، همانند برنامهنويسي ساختيافته بسيار موثر باشد. درک برنامههاي شيگرا، اصلاح و تغيير آنها راحتر است.
زبانهاي شيگراي متعددي تا بدين روز پديد آمدهاند، زبانهاي همانند Smalltalk ، که توسط PARC[3] ابداع شده است. زبان 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++ وجود دارند.
[1] American NationalStandards Committee on Computers and Information Processing (X3)
[2] International Standards Organization
[3]
Xerox’s