خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را


آموزش زبان ++C : مقدمه ای بر برنامه نویسی

آموزش زبان ++C : مقدمه ای بر برنامه نویسی
نویسنده : امیر انصاری
قبل از اینکه بتوانیم اولین برنامه خود را در زبان ++C بنویسیم و اجرایش کنیم، ابتدا لازم است تا بدانیم که برنامه های ++C چگونه نوشته می شوند. تصویر زیر در یک گرافیک روش ساده انجام این کار به شما نشان می دهد :

سیستم یکپارچۀ سازمانی راهکار



آموزش زبان ++C : مقدمه ای بر برنامه نویسی
ترجمه تصویر :

  • مرحله 1 : اول باید مشکلی را که می خواهید با این برنامه حل کنید، مشخص کنید.
  • مرحله 2 : برای مشکل یک راه حل طراحی کنید.
  • مرحله 3 : برنامه ای بنویسید که راه حل شما را پیاده سازی کند.
  • مرحله 4 : برنامه نوشته شده را کامپایل کنید.
  • مرحله 5 : فایلهای مورد نیاز (برای اجرای برنامه) را به پروژه لینک بدهید.
  • مرحله 6 : برنامه خود را تست و اشکال زدایی کنید.

مرحله 1 : مشکلی را که می خواهید حل کنید، تعریف کنید.


اسم این مرحله، مرحله چه (What) می باشد، این مرحله جایی است که در آن مشخص می شود، اساساً چه کاری را می خواهیم انجام بدهیم و یا چه مشکلی را می خواهیم با این برنامه حل کنیم. رسیدن به ایده اولیه این که برنامه قرار است چه کاری را انجام بدهد، می تواند ساده ترین مرحله کار باشد، بعضی وقتها هم سخت ترین مرحله کار همین مرحله می باشد. اما از نظر مفهومی ساده ترین مرحله می باشد. تمام چیزی که نیاز خواهید داشت اینست که یک ایده داشته باشید که دقیق و مشخص تعریف شده باشد، تا بتوانید به مرحله بعدی بروید.

برای درک این مرحله چند مثال می زنیم :

  • من می خواهم برنامه ای بنویسم که به کاربر اجازه بدهد تعدادی عدد را واردش کند و سپس برنامه آنها را با هم جمع کند و میانگین آن اعداد را به کاربر نشان بدهد.
  • من می خواهم برنامه ای بنویسم که یک بازی مارپیچ دو بعدی را طراحی کند تا کاربر بتواند از بین مارپیچ ها حرکت کند.
  • من می خواهم برنامه ای بنویسم تا آمار قیمت سهام ها را از طریق یک فایل از کاربر دریافت کند و سپس پیش بینی کند که آیا قیمت سهام بالاتر خواهد رفت و یا اینکه سقوط خواهد کرد.

مرحله 2 : تعیین کنید که چگونه می خواهید مشکل را حل کنید.


نام این مرحله، مرحلۀ چطور (how) می باشد. در این مرحله شما تعیین می کنید که چطور می خواهید این مشکل را حل کنید. در واقع چگونه می خواهید مشکلی را که در مرحله 1 مطرح کرده اید، برطرف کنید. این مرحله، خیلی مهم می باشد و در اکثر مواقع مورد غفلت قرار می گیرد. مسئله اصلی اینست که برای حل هر مشکل راه های زیادی می تواند وجود داشته باشد، البته، برخی از این راه حل ها می توانند راه حل های خوبی باشند و برخی دیگر نیز می توانند راه حل های بدی باشند. اغلب، یک برنامه نویس ایده ای را دریافت می کند، سپس پشت کامپیوترش می نشیند و بلافاصله یک راه حل برای آن در نظر می گیرد و شروع به کد نویسی می کند. این روش معمولاً منجر به تولید برنامه های ضعیف و پر از خطا می گردد.

به طور معمول راه حل های خوب ویژگی های زیر را دارا می باشند :

  • آنها ساده و سر راست هستند.
  • آنها به خوبی مستند سازی شده اند، مخصوصاً برای پیش فرض های مختلف سنجیده شده اند.
  • آنها به صورت مدولار (modular) ساخته شده اند، برای همین بخش های مختلف این راه حل می تواند به راحتی در برنامه های دیگر نیز مورد استفاده قرار بگیرد و یا اینکه بدون اینکه بر سایر بخشهای برنامه تاثیری بگذارد، مورد ویرایش قرار بگیرد.
  • آنها قوی هستند، و در هنگامی که اتفاقات غیر منتظره پیش می آید می توانند با پیام های خطای مفید کاربر را مطلع کنند، و یا آن اتفاق غیر منتظره را از قبل به صورت پیش بینی شده در خود پوشش داده اند.

وقتی می نشینید و بلافاصله شروع به کد نویسی می کنید، تفکر شما معمولاً اینست که "باید این کار را انجام بدهم". بنابراین طبیعی است که دنبال سریعترین راه حل ممکن بروید. نتیجه این می شود که معمولاً این گونه برنامه ها بسیار شکننده خواهند شد، توسعه آنها نیز سخت می باشد و در ضمن معمولاً باگ های زیادی هم در این گونه برنامه ها وجود خواهد داشت.

مطالعات نشان داده است که تنها 20 درصد از زمان یک برنامه نویس، صرف نوشتن کدهای اولیه می شود. و 80 درصد باقیمانده صرف اشکال زدایی (debugging)، نگهداری (maintaining) و افزودن ویژگی های جدید به برنامه می شود. در نتیجه، ارزشش را دارد که برای پیدا کردن بهترین راه حل ممکن، زمان بیشتری را صرف کنید، و حتماً هم این کار را قبل از شروع کد نویسی انجام بدهید. همچنین می توانید مفروضات مساله را کمی وسیع تر بگیرید و فرضهای دیگری را هم از جانب خودتان مطرح کنید، پیشاپیش هم به توسعه این نرم افزار در آینده فکر کنید. این تفکرات اولیه در آینده در زمان و انرژی شما، صرفه جویی بسیار بالایی را منجر خواهد شد و در ضمن کارآمدی برنامه را نیز به مراتب افزایش خواهد داد.

ما در مورد نحوه ایجاد راه حل های خوب در آینده و در طی این دوره بیشتر صحبت خواهیم کرد.

مرحلۀ 3 : برنامه را بنویسید


برای نوشتن برنامه ها، ما به دو چیز نیاز خواهیم داشت : اولی دانشی در مورد زبان برنامه نویسی مورد استفاده می باشد که در این دورۀ آموزشی این دانش را کسب خواهیم کرد. دوم، یک ویرایشگر برای نوشتن کدها می باشد. شما می توانید برنامه های خود را با هر ویرایشگر متنی بنویسید، حتی می توانید این کار را با برنامه ساده notepad در ویندوز و یا معادل آن برنامه های vi یا pico در سیستم عامل یونیکس بنویسید. با این حال، ما به شدت توصیه می کنیم که حتما این کار را با ویرایشگرهای مخصوص این کار انجام بدهید. اگر ویرایشگر مخصوص برنامه نویسی ++C را ندارید، هیچ نگرانی نداشته باشید، ما در این دوره آموزشی در مورد آن نیز صحبت خواهیم کرد.

نرم افزار های ویرایشگر مخصوص برنامه نویسی، ویژگی هایی دارند که برنامه نویسی را آسان تر و لذت بخش تر می کنند، برخی این از این ویژگی ها شامل موارد زیر می باشند :

  1. شماره خط : شماره گذاری خط در زمانی که کامپایلر خطایی می دهد بسیار مهم است. معمولاً وقتی کامپایلری در هنگام ترجمه یک برنامه با خطا مواجه شود، شماره خطی که خطا در آن اتفاق افتاده است را ارائه می دهد (مثلا : error, line 64). اگر ویرایشگر شما، شماره خط ها را نشان ندهد، پیدا کردن خطی که در آن خطا اتفاق افتاده است می تواند یک کار عذاب آور باشد.

  2. متمایر کردن کدها با رنگ آمیزی : این ویژگی به شما این امکان را می دهد تا بتوانید بخش های مختلف کدهای خود را واضح تر ببینید و بهتر درک کنید.

  3. فونت یکنواخت و غیر مبهم (unambiguous font) : معمولاً برای زبان های برنامه نویسی فونت های خاص و بدون ابهامی را در ویرایشگر های کد، تعبیه می کنند. مثلاً در فونت های معمولی تفکیک بین عدد 0 و حرف O شاید کار آسانی نباشد. یا تفکیک بین عدد 1 و حرف l نیز می تواند همین مشکل را داشته باشد. در یک فونت مخصوص برنامه نویسی که خوب طراحی شده باشد، معمولاً تفکیک بین این گونه موارد ساده می باشد و احتمال اینکه برنامه نویس ها یکی را با دیگری اشتباه بگیرند، طبیعتاً کمتر است.

فایل های برنامه ++C شما معمولاً به شکل name.cpp ایجاد می شوند. name در واقع نام فایل برنامه شما می باشد که اسم مناسبی را برایش در نظر می گیرید و cpp نیز، پسوند کدهای برنامه نویسی به زبان ++C می باشد. پسوند cpp. به کامپایلر می گوید که این فایل حاوی کدهای نوشته شده به زبان ++C می باشد. همچنین توجه داشته باشید که برنامه های بزرگتر و پیچیده تر طبیعتاً تعداد فایل های cpp. بیشتری دارند، بسته به بزرگی نرم افزار، ممکن است تا صدها فایل cpp. نیز در یک برنامه بزرگ یافت شود. برنامه هایی که در دوره آموزشی با هم خواهیم نوشت معمولا تنها یک فایل cpp. خواهند داشت.

مرحله 4 : کامپایل کردن برنامه (Compiling)


برای اینکه بتوانیم برنامه را کامپایل (ترجمه به زبان ماشین) کنیم، نیاز به نرم افزاری با نام کامپایلر (compiler) داریم. کامپایلر دو کار اصلی زیر را انجام می دهد :

  1. برنامه شما را بررسی می کند تا ببیند آیا قوانین برنامه نویسی ++C را رعایت کرده اید یا خیر. اگر شما اشتباهی کرده باشید، کامپایلر خطایی تولید می کند و شما را راهنمایی می کند تا خطای مربوطه را بیابید و برطرفش کنید.

  2. هر کدام از فایلهای برنامه نویسی شما را به زبان ماشین (machine language) ترجمه می کند و به ازاء هر فایل ترجمه شده یک فایل که با نام object file شناخته می شود، ایجاد خواهد کرد. فایلهای اشیاء (Object files) معمولا به صورت name.o یا name.obj نامگذاری می شوند و قسمت name در واقع همان نام فایل شما که به صورت name.cpp ایجاد کرده اید، می باشد. به عنوان مثال اگر برنامه شما دارای 5 فایل cpp باشد، کامپایلر 5 فایل object file خواهد ساخت.

آموزش زبان ++C : مقدمه ای بر برنامه نویسی
صرفاً برای اطلاعات بیشتر:

اکثر سیستم عامل های مبتنی بر Linux و MaxOS دارای یک کامپایلر داخلی زبان ++C با نام ++g می باشند. برای اینکه یک فایل را با استفاده از کامپایلر ++g ترجمه کنیم، دستور خط فرمان زیر را مورد استفاده قرار می دهیم :

g++ -c file1.cpp file2.cpp file3.cpp


طی این پروسه کامپایل فایل های file1.o, file2.o, و file3.o ایجاد خواهند شد. معنای c- در این دستور یعنی برنامه ++g فقط فایل ها را کامپایل کند و فایل های شیء o. یا همان object files را بسازد.


کامپایلر های دیگری برای سیستم عامل های لینوکس (Linux) ، ویندوز (Windows) و سایر سیستم عامل ها موجود می باشند. در مورد کامپایلر ها در آموزش های بعدی توضیحات تکمیلی را ارائه خواهیم کرد.

برای پروژه های پیچیده و بزرگ، در برخی محیط های توسعه از یک فایل با نام makefile استفاده می کنند، در واقع makefile یک فایل می باشد که به کامپایلر می گوید، چه فایل هایی را ترجمه کند. موضوع Makefiles یک بحث پیشرفته می باشد و کتابهایی کاملی در مورد آن نوشته شده است. خوشبختانه نیازی نیست تا در مورد آن نگران باشید و در اینجا به پیچیدگی های آن نخواهیم پرداخت.

مرحله 5 : لینک دادن (Linking)


مرحله لینک دادن (Linking) فرآیندی است که طی آن فایلهای شیء (object files) توسط کامپایلر دریافت می شوند و در نهایت همه آنها به یک فایل اجرایی که توسط سیستم عامل قابل اجرا کردن باشد، تبدیل می شوند. این کار توسط برنامه ای با نام لینکر (linker) صورت می پذیرد.

آموزش زبان ++C : مقدمه ای بر برنامه نویسی
برنامه linker علاوه بر اینکه فایلهای شیء شما را به یکدیگر پیوند می دهد، همچنین به صورت هوشمند سایر فایل هایی را که در کتابخانه های مورد استفاده توسط شما وجود داشته اند به برنامه نهایی پیوند می دهد. به عنوان مثال ممکن است از کتابخانه های استاندارد ++C که با نام C++ standard library شناخته می شود، و یا از کتابخانه های دیگری مانند کتابخانه های کار با گرافیک و صدا، در برنامه تان استفاده کرده باشید.

زبان ++C خودش نسبتاً کوچک و ساده می باشد. اگر چه، همراه با زبان ++C یک کتابخانه بزرگ از کدهای مختلف نیز ارائه می شود که می توانید از آن کدها در برنامه های خود به آسانی استفاده کنید. برای مثال اگر می خواهید متنی را در مانیتور نمایش بدهید می توانید از کتابخانه کدهای آماده در ++C به راحتی جهت این منظور بهره ببرید. اگر چه استفاده از این کتابخانه های کد اختیاری می باشد و شما الزامی به بهره بردن از آنها ندارید، اما با توجه به قدرت فوق العاده آنها و اینکه کدهای آماده زیادی را در اختیار برنامه نویسان قرار می دهند، معمولا همه برنامه نویس ها از این کتابخانه های کد آماده بهره مند می شوند.

وقتی برنامه linker کارش را انجام داد و فایل های شیء (object files) را به هم پیوند داد، و فایل اجرایی اصلی برنامه را ایجاد کرد، شما دیگر برنامه تان تکمیل شده است و می توانید فایل اجرایی را به کاربر بدهید تا از آن بهره مند شود.

صرفاً برای اطلاعات بیشتر : برای لینک دادن فایل ها در سیستم عامل لینوکس (Linux) و یا سیستم عامل MacOS ما از برنامه ++g با استفاده از دستور زیر استفاده می کنیم.

g++ -o prog file1.o file2.o file3.o


قسمت o- به کامپایلر ++g می گوید تا فایل های شیء مربوطه را به هم پیوند بدهد و در نهایت آنها را به یک فایل اجرایی با نام prog تبدیل کند.

ضمن اینکه مراحل کامپایل کردن و لینک دادن را می توانستید به صورت خلاصه و فقط در یک مرحله با دستور زیر نیز انجام بدهید، تا دیگر مجبور نباشید یکبار فایل های شیء را بسازید و بار دیگر آنها به هم لینک بدهید :

g++ -o prog file1.cpp file2.cpp file3.cpp


این دستور مراحل کامپایل و لینک کردن را با هم ترکیب می کند و به طور مستقیم یک فایل اجرایی با نام prog تولید می کند.

مرحله 6 : آزمایش و اشکال زدایی (Testing and Debugging)


این بخش سرگرم کننده می باشد، یا امیدواریم که برایتان سرگرم کننده باشد! شما می توانید فایل اجرایی ایجاد شده را اجرا کنید و خروجی برنامه تان را ببینید. آن را تست کنید و اگر هم نیاز به رفع اشکالی داشت، اشکال مربوطه را برطرف کنید. در مورد اشکال زدایی (debugging) بزودی توضیحات بیشتری را ارائه خواهیم داد.

توجه داشته باشید که مراحل 3 ، 4 ، 5 و 6 همه شامل استفاده از نرم افزارهای دیگری بودند. اگر چه هر کدام از این مراحل را می توانید با نرم افزارهای جداگانه ای انجام بدهید، اما بسته های نرم افزاری آماده ای با نام IDE که مخفف integrated development environment می باشد، وجود دارند که یک محیط یکپارچه برای توسعه، تست و کامپایل کردن برنامه در اختیار شما قرار می دهند. اساساً در نرم افزارهای IDE همه این مراحل به سادگی و با رابط گرافیکی در اختیار شما قرار می گیرند. در IDE ها شما یک محیط برای کدنویسی در اختیار خواهید داشت که خطهای موجود در کدهای شما را شماره گذاری می کنند و متن کدها را با رنگ های مختلف متمایز می کنند. در داخل IDE ها هم کامپایلر و هم لینکر موجود می باشد. IDE به صورت اتوماتیک فایل های شما را کامپایل می کند، آنها را به هم لینک می دهد و فایل اجرایی خروجی را نیز برای شما می سازد. حتی اگر برنامه شما شامل صدها فایل cpp باشد، بدون نیاز به مشخص کردن تک تک این فایل ها برای کامپایلر صرفا با کلیک یک دکمه تمامی این کارها توسط IDE صورت می پذیرد. حتی وقتی که نیاز به بررسی خط به خط کدهای خود جهت اشکال زدایی داشته باشید، می توانید از ابزارهای debugger موجود در IDE بهره مند شوید. علاوه بر آن IDE ها معمولاً یکسری امکانات اضافی بیشتر نیز در اختیار برنامه نویسان قرار می دهند، به عنوان مثال تکمیل اتوماتیک کدها، ارائه راهنمایی بیشتر در مورد خطاها و ... .

در درس بعدی در مورد IDE ها بیشتر خواهیم دانست.

برای مشاهده فهرست آموزش های این دوره آموزشی بر روی لینک زیر کلیک کنید :


آموزش قبلی : آموزش زبان ++C : مقدمه ای بر زبان های C و ++C

آموزش بعدی : آموزش زبان ++C : محیط توسعه یکپارچه (IDE)



نمایش دیدگاه ها (0 دیدگاه)

دیدگاه خود را ثبت کنید:

انتخاب تصویر ویرایش حذف
توجه! حداکثر حجم مجاز برای تصویر 500 کیلوبایت می باشد.