-
فرشید پوشنده
1405/05/22
-
22 مرداد 1405
بازگشت به: آموزش برنامه نویسی c++ سی پلاس پلاس
۰.۴ — آشنایی با توسعه در C++
مقدمه
پیش از آنکه بتوانیم اولین برنامه C++ خود را بنویسیم و اجرا کنیم، باید درک دقیقتری از فرآیند توسعه برنامههای C++ داشته باشیم. در ادامه، مراحل سادهشده این فرآیند را بررسی میکنیم.
فرآیند توسعه نرمافزار
گام ۱: تعریف مسئلهای که میخواهید حل کنید
این مرحله، مرحله «چه» (What) است. در اینجا باید مشخص کنید که قصد دارید چه مسئلهای را حل کنید. ایدهپردازی اولیه برای برنامهای که میخواهید بنویسید، میتواند سادهترین یا دشوارترین مرحله باشد. اما از نظر مفهومی، سادهترین مرحله است. تنها چیزی که نیاز دارید، یک ایده بهخوبی تعریفشده است و برای مرحله بعدی آماده هستید.
چند مثال:
«میخواهم برنامهای بنویسم که به من امکان دهد اعداد زیادی وارد کنم و سپس میانگین آنها را محاسبه کند.»
«میخواهم برنامهای بنویسم که یک پیچوخم (ماز) دوبعدی تولید کند و به کاربر امکان حرکت در آن را بدهد. اگر کاربر به انتها برسد، برنده میشود.»
«میخواهم برنامهای بنویسم که فایلی از قیمتهای سهام را بخواند و پیشبینی کند که سهام افزایش یا کاهش خواهد یافت.»
گام ۲: تعیین روش حل مسئله
این مرحله، مرحله «چگونه» (How) است. در اینجا باید مشخص کنید که چگونه میخواهید مسئلهای را که در گام اول شناسایی کردهاید، حل کنید. این مرحله اغلب در توسعه نرمافزار نادیده گرفته میشود. اصل ماجرا این است که راههای زیادی برای حل یک مسئله وجود دارد — با این حال، برخی از این راهحلها خوب هستند و برخی بد. اغلب، یک برنامهنویس ایدهای به ذهنش میرسد، مینشیند و بلافاصله شروع به کدنویسی میکند. این رویکرد معمولاً راهحلی تولید میکند که در دسته «بد» قرار میگیرد.
به طور معمول، راهحلهای خوب ویژگیهای زیر را دارند:
ساده و مستقیم هستند (نه بیش از حد پیچیده یا گیجکننده).
بهخوبی مستندسازی شدهاند (به ویژه در مورد مفروضات یا محدودیتها).
به صورت ماژولار ساخته شدهاند، به طوری که بخشها قابل استفاده مجدد یا تغییر بعدی باشند بدون اینکه بر سایر بخشهای برنامه تأثیر بگذارند.
در صورت بروز اتفاق غیرمنتظره، میتوانند بهخوبی بازیابی شوند یا پیامهای خطای مفیدی ارائه دهند.
وقتی مینشینید و بلافاصله شروع به کدنویسی میکنید، معمولاً فکر میکنید «میخواهم کاری انجام دهم»، بنابراین راهحلی را پیادهسازی میکنید که شما را سریعترین به هدف میرساند. این میتواند منجر به برنامههایی شود که شکننده (Fragile) هستند، تغییر یا گسترش آنها بعداً دشوار است یا باگ (Bug)های زیادی دارند. باگ (Bug) به هر نوع خطای برنامهنویسی گفته میشود که مانع از عملکرد صحیح برنامه میشود.
یک نکته جالب:
اصطلاح «باگ» اولین بار توسط توماس ادیسون در دهه ۱۸۷۰ استفاده شد! با این حال، این اصطلاح در دهه ۱۹۴۰ زمانی که مهندسان یک حشره (Moth) واقعی را در سختافزار یک کامپیوتر اولیه پیدا کردند که باعث اتصال کوتاه (Short Circuit) شده بود، رواج یافت. هم دفترچه گزارش خطا و هم خود حشره، اکنون بخشی از موزه تاریخ آمریکا هستند.
مطالعات مختلف نشان دادهاند که در سیستمهای نرمافزاری پیچیده، تنها ۱۰ تا ۴۰ درصد از زمان یک برنامهنویس صرف نوشتن برنامه اولیه میشود. ۶۰ تا ۹۰ درصد باقیمانده صرف نگهداری (Maintenance) میشود که میتواند شامل اشکالزدایی (رفع باگها)، بهروزرسانیها برای سازگاری با تغییرات محیط (مانند اجرا روی نسخه جدید سیستمعامل)، بهبودها (تغییرات جزئی برای بهبود قابلیت استفاده یا توانایی) یا بهبودهای داخلی (برای افزایش قابلیت اطمینان یا نگهداری) باشد.
در نتیجه، ارزش دارد که کمی زمان اضافی در ابتدا (قبل از شروع کدنویسی) صرف کنید تا به بهترین روش حل مسئله، مفروضاتی که در نظر میگیرید و برنامهریزی برای آینده فکر کنید تا در آینده زمان و دردسر زیادی را برای خود ذخیره کنید.
در درسهای آینده، بیشتر در مورد نحوه طراحی مؤثر راهحلها برای مسائل صحبت خواهیم کرد.
گام ۳: نوشتن برنامه
برای نوشتن برنامه به دو چیز نیاز داریم:
اول: نیاز به دانش یک زبان برنامهنویسی داریم — دقیقاً هدف این آموزشها همین است!
دوم: به یک ویرایشگر متن (Text Editor) برای نوشتن و ذخیره برنامههای C++ خود نیاز داریم. مجموعه دستورات C++ که در ویرایشگر متن وارد میکنیم، کد منبع (Source Code) برنامه نامیده میشود (که اغلب به اختصار کد (Code) نامیده میشود). امکان نوشتن برنامه با هر ویرایشگر متنی که میخواهید وجود دارد، حتی چیزی به سادگی Notepad ویندوز یا vi و pico در یونیکس.
یک برنامه تایپشده در یک ویرایشگر متن ساده به شکل زیر خواهد بود:
#include <iostream>
int main()
{
std::cout << "Here is some text.";
return 0;
}
با این حال، ما به شدت توصیه میکنیم از ویرایشگری استفاده کنید که مخصوص برنامهنویسی طراحی شده است (به نام ویرایشگر کد (Code Editor)). نگران نباشید اگر هنوز یکی را ندارید. به زودی نحوه نصب یک ویرایشگر کد را پوشش خواهیم داد.
یک ویرایشگر استاندارد طراحیشده برای کدنویسی، ویژگیهایی دارد که برنامهنویسی را بسیار آسانتر میکند، از جمله:
شمارهگذاری خطوط (Line Numbering): شمارهگذاری خطوط زمانی مفید است که کامپایلر به ما خطا میدهد، زیرا یک خطای معمولی کامپایلر بیان میکند: «کد خطا/پیام خاص، خط ۶۴». بدون ویرایشگری که شماره خطوط را نشان دهد، پیدا کردن خط ۶۴ میتواند بسیار دشوار باشد.
برجستهسازی و رنگآمیزی نحو (Syntax Highlighting): برجستهسازی و رنگآمیزی نحو، رنگ بخشهای مختلف برنامه شما را تغییر میدهد تا شناسایی اجزای مختلف برنامه آسانتر شود.
فونت با عرض ثابت و بدون ابهام (Fixed-Width or Monospace Font): فونتهای غیربرنامهنویسی اغلب تشخیص بین عدد ۰ و حرف O، یا بین عدد ۱، حرف l (L کوچک) و حرف I (i بزرگ) را دشوار میکنند. یک فونت خوب برنامهنویسی اطمینان میدهد که این نمادها از نظر بصری متمایز هستند تا بهطور تصادفی یکی به جای دیگری استفاده نشود. همه ویرایشگرهای کد باید این قابلیت را بهطور پیشفرض فعال داشته باشند، اما یک ویرایشگر متن استاندارد ممکن است نداشته باشد. استفاده از فونت با عرض ثابت (که در آن همه نمادها عرض یکسانی دارند) قالببندی و مرتبسازی صحیح کد را آسانتر میکند.
در اینجا نمونهای از یک برنامه C++ با شمارهگذاری خطوط، برجستهسازی نحو و فونت با عرض ثابت آورده شده است:
1 #include <iostream>
2
3 int main()
4 {
5 std::cout << "Here is some text.";
6 return 0;
7 }
توجه کنید که چقدر درک این نسخه نسبت به نسخه بدون برجستهسازی آسانتر است. کد منبعی که در این آموزشها نشان میدهیم، هم شمارهگذاری خطوط و هم برجستهسازی نحو دارد تا دنبال کردن کد آسانتر باشد.
نکته: ابزارهای جالبی مانند Coding Font و Programming Fonts وجود دارند که به شما امکان میدهند فونتهای کدنویسی مختلف را مقایسه کنید و ببینید کدام یک را بیشتر دوست دارید.
برای خوانندگان پیشرفته:
از آنجایی که کد منبع با استفاده از کاراکترهای ASCII نوشته میشود، زبانهای برنامهنویسی تا حدی از هنر ASCII برای نمایش مفاهیم ریاضی استفاده میکنند. برای مثال، علامت ≠ بخشی از مجموعه کاراکترهای ASCII نیست، بنابراین زبانهای برنامهنویسی معمولاً از != برای نمایش نابرابری ریاضی استفاده میکنند.
برخی از فونتهای برنامهنویسی، مانند Fira Code، از لیگچر (Ligature) برای ترکیب چنین «آثاری» به یک کاراکتر واحد استفاده میکنند. برای مثال، به جای نمایش !=، Fira Code علامت ≠ را نمایش میدهد (با همان عرض نسخه دوکاراکتری). برخی افراد این را خواناتر میدانند، برخی دیگر ترجیح میدهند به تفسیر تحتاللفظیتری از کاراکترهای اصلی پایبند باشند.
فایلهای کد منبع
بسیاری از برنامههای ساده C++ فقط یک فایل کد منبع دارند، اما برنامههای پیچیده C++ میتوانند صدها یا حتی هزاران فایل کد منبع داشته باشند.
هر فایل کد منبع در برنامه شما باید روی دیسک ذخیره شود، بنابراین هر فایل کد منبع به یک نام فایل (Filename) نیاز دارد. C++ هیچ الزامی برای نامگذاری فایلها ندارد. با این حال، استاندارد عملی (De Facto) این است که اولین/اصلیترین فایل کد منبع ایجادشده برای یک برنامه، main.cpp نامیده شود. نام فایل (main) تشخیص اینکه کدام فایل کد منبع اصلی است را آسان میکند، و پسوند .cpp نشان میدهد که فایل، یک فایل کد منبع C++ است.
ممکن است گاهی اوقات اولین/اصلیترین فایل کد منبع را به نام برنامه (مثلاً calculator.cpp، poker.cpp) ببینید. همچنین ممکن است گاهی اوقات پسوندهای دیگری (مانند .cc یا .cxx) را ببینید.
بهترین روش: اولین/اصلیترین فایل کد منبع را در هر برنامه main.cpp نامگذاری کنید. این کار تشخیص اینکه کدام فایل کد منبع اصلی است را آسان میکند.
مراحل بعدی
هنگامی که برنامه خود را نوشتید، مراحل بعدی عبارتند از:
تبدیل کد منبع به چیزی که قابل اجرا باشد (کامپایل و لینک).
اجرای برنامه و بررسی اینکه آیا به درستی کار میکند یا خیر.
این مراحل (گامهای ۴ تا ۷) را در درس بعدی به تفصیل بررسی خواهیم کرد.
خلاصه درس
فرآیند توسعه نرمافزار شامل ۷ گام اصلی است: تعریف مسئله، تعیین روش حل، نوشتن برنامه، کامپایل، لینک، اجرا و آزمایش.
گام ۱ (تعریف مسئله) : مشخص کنید چه مسئلهای را میخواهید حل کنید.
گام ۲ (تعیین روش حل) : مشخص کنید چگونه میخواهید مسئله را حل کنید. این مرحله اغلب نادیده گرفته میشود اما بسیار مهم است.
راهحلهای خوب باید ساده، مستند، ماژولار و مقاوم در برابر خطا باشند.
باگ به هر نوع خطای برنامهنویسی گفته میشود.
۶۰ تا ۹۰ درصد زمان برنامهنویسان صرف نگهداری نرمافزار میشود، نه نوشتن کد جدید.
گام ۳ (نوشتن برنامه) : نیاز به دانش زبان برنامهنویسی و یک ویرایشگر کد دارید.
ویرایشگرهای کد دارای ویژگیهای مفیدی مانند شمارهگذاری خطوط، برجستهسازی نحو و فونت با عرض ثابت هستند.
اولین/اصلیترین فایل کد منبع را معمولاً main.cpp نامگذاری میکنند.