رفتن به مطلب
جامعه‌ی برنامه‌نویسان مُدرن ایران
کامبیز اسدزاده

معرفی زبان ++C و مزیت آن نسبت به دیگر زبان‌های برنامه‌نویسی

پست های پیشنهاد شده

خلاصه تعریفی از زبان برنامه نویسی سی پلاس پلاس (C++)

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

  • زبان C++ طراحی شده‌است تا یک زبان عمومی با کنترل نوع ایستا و همانند C قابل حمل و پربازده باشد.
  • زبان C++ طراحی شده‌است تا مستقیماً و بصورت جامع از چندین شیوه برنامه‌نویسی (برنامه‌نویسی ساخت‌یافته، برنامه‌نویسی شی‌گرا، انتزاع داده، و برنامه‌نویسی جنریک)
  • زبان C++ طراحی شده‌ است تا به برنامه‌نویس امکان انتخاب دهد حتی اگر این انتخاب اشتباه باشد.
  • زبان C++ طراحی شده‌ است تا حداکثر تطابق با C وجود داشته باشد و یک انتقال راحت از C را ممکن سازد.
  • زبان C++ از بکاربردن ویژگی‌های خاص که مانع از عمومی شدن است خودداری می‌نماید.
  • زبان C++ از ویژگی‌هایی که بکار برده نمی‌شوند استفاده نمی‌کند.
  • زبان C++ طراحی شده‌است تا بدون یک محیط پیچیده عمل نماید.

کتابخانه ها چه چیزی هستند و در این زبان چگونه است؟ به مجموعه‌های یکپارچه‌ای از کلاس‌های پیاده سازی شده (به صورت فایل‌های سرآیند با پیاده سازی‌های کد یا اشیای زبان ماشین) که برای برنامه نویسی به کار می‌روند، یک کتابخانه C++ گفته می‌شود و قدرت اصلی این زبان در امکان به کارگیری کتابخانه‌های آماده می‌باشد برای مثال کتابخانه‌های بزرگ C++ مانند STL ، MFC ، Qt ، wxWidgets ، Boost و … مجموعه قدرتمندی برای تولید برنامه در این زبان ایجاد کرده‌اند.

لیستی از این کتابخانه های همراه با توضیحات در لینک زیر آمده است : A list of open source C++ libraries - cppreference.com

لیست کامل انواع کامپایلر ها : List of compilers - Wikipedia

ویژگی های جدید در ویرایش 11، 14 و ۱۷ چیست؟

 زبان C++11 (معروف به C++0x) یک نسخه استاندارد از زبان C++ است که در ۱۲ آگوست ۲۰۱۱ منتشر و توسط ISO جایگزین C++03 شد این نسخه دارای نشان ISO/IEC 14882:2011 می باشد و در تاریخ ۱۸ آگوست ۲۰۱۴ نسخه جدید آن یعنی C++14 منتشر و جایگزین C++11 شد.

امکانات اضافه شده به هسته C++ : یکی از وظایف کمیته استاندارد سازی توسعه هسته زبان است.در توسعه فعلی چندین بخش از زبان بهبود یافته ,که شامل چند نخی (multithreading) , پشتیبانی از بنامه نویسی عمومی ,مقدار دهی اولیه یکنواخت و پیشرفت عملکرد می باشد.

ویژگی های هسته زبان و تغییرات آن به چهار بخش کلی دسته بندی شداند :

1. پیشرفت در عملکرد زمان اجرا (Run-Time)
2. پیشرفت در عملکرد زمان ساخت (Build-Time)
3. پیشرفت در ویژگی ها (قابلیت استفاده)
4. و قابلیت های جدید

ویرایش C++‎‎‎‎‎‎‎‎‎‎‎ 14 بر روی اشکال زدایی و بهبودهای جزیی استاندارد قبلی یعنی C++‎‎‎‎‎‎‎‎‎‎‎11 تمرکز کرده است ؛ این زبان در تاریخ ۱۵ می ۲۰۱۳ منتشر و در ۱۵ آگوست ۲۰۱۴ بعد از رای گیری و انجام تغییراتی جزیی استاندارد این زبان منتشر شد. بدلیل این که عموماً تاریخ انتشار این زبان بطور قابل ملاحظه‌ای دیر هنگام بوده است به C++‎‎‎‎‎‎‎‎‎‎‎14 گاهی C++‎‎‎‎‎‎‎‎‎‎‎1y نیز گفته می‌شود. همانند استاندارد C++‎‎‎‎‎‎‎‎‎‎‎11 که به آن C++‎‎‎‎‎‎‎‎‎‎‎0x گفته می‌شده و قرار بر این بوده که قبل از ۲۰۱۰ منتشر شود (البته تا سال ۲۰۱۱ انتشار به تعویق افتاد).


گرچه تمامی کامپایلر ها درحال کاربروی C++‎‎‎‎‎‎‎‎‎‎‎14 هستند اما هنوز تمامی آن ها ازC++‎‎‎‎‎‎‎‎‎‎‎ 14 پشتیبانی نمی‌کنند.
در C++‎‎‎‎‎‎‎‎‎‎‎11 و C++‎‎‎‎‎‎‎‎‎‎‎14 توابع جدیدی به هسته اصلی زبان و کتابخانه استاندارد آن اضافه شده است که شامل بسیاری از کتابخانه های C++‎‎‎‎‎‎‎‎‎‎‎TR1 به استسنای کتابخانه ی توابع ریاضی ویژه میباشد.

ویژگی‌های اضافه شده کتابخانه در ویرایش ۱۱

  • std::move
  • std::forward
  • std::to_string
  • type traits
  • smart pointers
  • std::chrono
  • tuples
  • std::tie
  • std::array
  • unordered containers
  • std::make_shared
  • memory model

ویژگی‌های اضافه شده به زبان در ویرایش ۱۱

  • move semantics
  • variadic templates
  • rvalue references
  • initializer lists
  • static assertions
  • auto
  • lambda expressions
  • decltype
  • template aliases
  • nullptr
  • strongly-typed enums
  • attributes
  • constexpr
  • delegating constructors
  • user-defined literals
  • explicit virtual overrides
  • final specifier
  • default functions
  • deleted functions
  • range-based for loops
  • special member functions for move semantics
  • converting constructors
  • explicit conversion functions
  • inline-namespaces
  • non-static data member initializers
  • right angle brackets

ویژگی‌های اضافه شده به کتابخانه در ویرایش ۱۴

  • user-defined literals for standard library types
  • compile-time integer sequences
  • std::make_unique

 

ویژگی‌های اضافه شده به زبان در ویرایش ۱۴

  • binary literals
  • generic lambda expressions
  • lambda capture initializers
  • return type deduction
  • decltype(auto)
  • relaxing constraints on constexpr functions
  • variable templates

ویژکی‌های اضافه شده به کتابخانه در ویرایش ۱۷

  • std::variant
  • std::optional
  • std::any
  • std::string_view
  • std::invoke
  • std::apply
  • splicing for maps and sets

ویژگی‌های اضافه شده به زبان در ویرایش ۱۷

  • template argument deduction for class templates
  • declaring non-type template parameters with auto
  • folding expressions
  • new rules for auto deduction from braced-init-list
  • constexpr lambda
  • lambda capture this by value
  • inline variables
  • nested namespaces
  • structured bindings
  • selection statements with initializer
  • constexpr if
  • utf-8 character literals
  • direct-list-initialization of enums

کتابخانه های استاندارد چیست و در نسخه ی جدید C++‎‎‎‎‎‎‎‎‎‎‎11 چگونه در دسترس هستند؟


در زبان برنامه نویسی C++ کتابخانه استاندارد سی++ مجموعه‌ای از کلاس‌ها و رویه‌ها است که در هسته زبان نوشته شده‌اند و قسمتی از استاندارد ISO سی++ می‌باشند.
در سال ۱۹۹۸ استاندارد C++ شامل دو بخش هسته زبان و کتابخانه استاندارد C++ است. این کتابخانه شامل بیشتر بخش‌های STL و کتابخانه استاندارد C است. بیشتر کتابخانه‌های C++ در استاندارد وجود ندارند و یا استفاده از تعریف قابلیت پیوند کتابخانه‌ها را می‌توان در زبان‌هایی مانند فرترن، C، پاسکال، بیسیک نوشته شوند. البته با توجه به ویژگی‌های کامپایلر مشخص خواهد شد که کدام زبان را می‌توان استفاده نمود.


کتابخانه استاندارد C++ شامل کتابخانه استاندارد C با یک سری تغییرات برای بهبود عملکرد است. بخش بزرگ بعدی این کتابخانه STL است. STL شامل ابزار بسیار قدرتمندی مانند نگه‌دارنده‌ها (مانند vector و list)، تکرارکننده‌ها (اشاره‌گرهای عمومی شده) برای شبیه‌سازی دسترسی مانند آرایه الگوریتم‌هایی برای جستجو و مرتب‌سازی در آنها وجود دارند. نقشه‌ها (نقشه‌های چندگانه) (آرایه شرکت‌پذیر) و مجموعه‌ها (مجموعه‌های چندگانه) واسط‌های عمومی فراهم می‌سازند. در نتیجه با استفاده از قالب تابع، الگوریتم‌های جنریک با هر نگه‌دارنده و دارای تکرارکننده عمل نماید. همانند C ویژگی‌های کتابخانه را می‌توان با استفاده از شبه دستور include# شامل یک سرآیند استاندارد اضافه نمود. C دارای ۶۹ کتابخانه استاندارد است که ۱۹ تا از آنها نامناسب تشخیص داده شده‌اند.


استفاده از کتابخانه استاندارد - مانند std::vector یا std::string به جای آرایه‌های C موجب ایجاد برنامه‌های مطمئن‌ تر شده‌ است.
STL در آغاز محصولی جداگانه از HP و سپس SGL پیش از ادغام در کتابخانه استاندارد C++ بوده‌است. استاندارد عبارت STL را بکار نمی‌برد بلکه آن را بخشی از کتابخانه می‌داند اما مردم هنوز هم آن را برای جداسازی بخش‌های مختلف کتابخانه با این نام بکار می‌برند. (جریان‌های ورودی/خروجی، جهانی‌سازی، تشخیص، زیرمجموعه کتابخانه C)


بیشتر کامپایلرها کتابخانه استاندارد و STL را پیاده‌سازی می‌نماید. پیاده‌سازی‌های مستقلی نیز همانند STLport نیر وجود دارند. پروژه‌های دیگر نیز پیاده‌سازی‌های خود را از STL با توجه به اهداف خود بوجود می‌آورند.
روش جدیدی جناب بیجارن در نظر گرفته که کتابخانه های استاندارد C++ علاوه بر اینکه توسط خود کامپایلر ها در دسترس و قابل استفاده هستش بلکه توسط کتابخانه STL و Boost نیز می توان دسترسی به مجموع عظیمی از کتابخانه ها استاندارد ISO داشت.


ساختار فایل ها در این زبان چگونه است؟ در رابطه با ساختار برنامه های نوشته شده توسط C++ بدانید که منظور از ساختار در اینجا انواع فایل های موجود در زبان C++ است، در این رابطه باید اینگونه اشاره کنیم که در این زبان ما می توانیم از فایل های زیر برای برنامه نویسی استفاده کنیم.

 

نکته قابل توجه: زمانی که زبان برنامه نویسی C++ در دوران اول خود قرار داشت بسیاری از سیستم ها قادر به پشتیبانی از انواع فایل سیستم ها نبودند، بنابراین بعدا ها پیشنهاد شد از فایل سیستم هایی با همان قابلیت همراه با ویژگی حمل پذیری در تمامی سیستم ها ایجاد شوند که در ادامه به انواع مختلف آن ها اشاره خواهیم کرد.

 

  • فایل با پسوند .c این فایل منبعی برای کد هایی از نوع زبان C هستند.
  • فایل با پسوند .c++ منبعی برای کد هایی از نوع زبان C و C++ هستند ضعف این نوع فایل در قابل حمل نبودن و عدم شناسایی توسط فایل سیستم ها می باشد. (منسوخ شده)
  • فایل با پسوند .cxx منبعی برای کد هایی از نوع زبان C و C++‎‎‎‎‎‎‎‎‎‎‎ هستند با تفاوت اینکه نسبت به فایل .c++ قابل حمل تر است. (منسوخ شده)
  • فایل با پسوند .cpp منبعی برای کد هایی از نوع زبان C و C++ هستند یعنی در هر دو نیز قابل استفاده می باشند. این پسوند با تمامی سیستم ها سازگاری دارد و بسیار رایج است. (پشنهاد شده)
  • فایل با پسوند .hxx معمولا فایل با عنوان (هدر/سرصفحه) یاد می شوند و معمولا فقط حاوی اعلان ها می‌باشند.  (منسوخ شده)
  • فایل با پسوند .hpp معمولا فایل با عنوان (هدر/سرصفحه) یاد می شوند و معمولا فقط حاوی اعلان ها می‌باشند. این فرمت توسط مارس دیجیتال استفاده می شود. همچنین بورلند و دیگر کامپایلر های سی++ از آن پشتیبانی می‌کنند. ممکن است در این فایل متغیر ها، ثوابت و توایعی که در فایل سورس اصلی به آن ها اشاره شده است اعلام شود.
  • فایل با پسوند .h معمولا فایل با عنوان (هدر / سر صفحه) یاد می‌شوند و معمولا فقط حاوی اعلان ها می‌باشند این نوع بسیار رایج است و تقریبا با تمامی سیستم ها سازگاری دارد. (پشنهاد شده)
  • فایل با پسوند .hh در این زبان : فایل با عنوان (هدر / سر صفحه) یاد می شوند و معمولا فقط حاوی اعلان ها می‌باشند.
  • فایل با پسوند .h++ در این زبان : این نوع فایل ها معمولا فایل با عنوان (هدر/ سرصفحه) یاد می شوند و معمولاً فقط حاوی اعلان ها میباشند. ضعف این نوع فایل در قابل حمل نبودن و عدم شناسایی توسط فایل سیستم ها می‌باشد. (منسوخ شده)

نکته : معمولا روش استفاده از این فایل ها به صورت جفت می باشد. برای مثال استفاده از فایل هدر .h++ همراه با سورس .c++ فراهم می شود. فایل  .cxx همراه با .hh و فایل های .cpp و .hpp و در نهایت فایل .c و .h باهم دیگر مورد استفاده قرار می‌گیرند. اما در این میان استاندارد ترین و پر کاربرد ترین آن ها که از لحاظ قابل حمل بودن هم از طرف کمیته استاندارد سازی ISOCPP قابل تایید هستند فایل های .cpp و .c و یا .h و .hpp هستند که در بین این دو رایجترین آن ها .h و .cpp می‌باشند.

یک فایل هدر با پسوند (.h, .hpp و ...) می‌تواند شامل محتوای زیر باشد:

  • تعریف کلاس
  • تعریف توابع درون خطی (Inline)
  • اعلام تابع
  • اعلام شیء

مثال:

#ifndef CPPFILES_H
#define CPPFILES_H
  
extern int status;
   
class CPPFiles
   
{
   
  public:
      CPPFiles();
      void myFunction();
      inline int safe(int i);
  };
   
#endif // CPPFILES_H   

یک فایل منبع - سورس با پسوند (.c, .hpp، .cxx و ...) می‌تواند شامل محتوای زیر باشد:

  • تعریف کلاس
  • تعریف توابع 
  • اعلام شیء

مثال : 

#include "cppfiles.h"
   
int status = 1;
   
CPPFiles::CPPFiles()
{   
}
   
void CPPFiles::myFunction() {  
//Do somthing...
}
   
int CPPFiles::safe(/*@Param*/)
{
return /*Somthing...*/;  
}

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


چرا و چه زمانی باید از فایل های h. و چه زمانی از فایل های cpp. استفاده کنیم؟ در پاسخ باید اینگونه اشاره کنیم که در زبان C++ برای راحتی کار به خاطر پیچیده بودن کد نویسی امکان این وجود دارد که ما توابع ، کلاس ها و تعاریف رو در فایل جدا گانه ای مثل هدر فایل یا همان .h بنویسیم و برای اجرا عملیات و صدا زدن از فایل های .cpp استفاده کنیم البته این اجبار نیست ! شما می توانید در فایل .h و یا فایل .cpp به تنهایی برنامه رو اجرا کنید که معمولا در مثال های کوچک و کوتاه از یک نوع فایل استفاده می شود ولی بسته به نیاز و پیچیدپی در پروژه بهتر است استفاده از امکاناتی که این زبان در اختیار ما می گذارد به حد اکثر برسانیم.


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

 

چگونه C++ می‌تواند در لایه های زیرین و بالا مورد استفاده قرار بگیرد؟

پاسخ این سوال بسیار واضح است، زیرا این زبان به عنوان سطح بالا اما با قابلیت مانور در سطوح پایین نیز مورد استفاده قرار بگیرد. به عنوان مثال حتی می‌توان توسط آن کد های اسمبلی نوشت و دستورات C که معمولا در لایه های زیرین به صورت سیستمی از آن ها میتوان استفاده کرد.


آیا سیستم عامل ها و نرم افزار های مطرح دنیا توسط این زبان نوشته شده اند؟ دلیل آن چیست؟

همانگونه که مشخص است بسیاری از سیستم عامل ها از ابتدا توسط خانواده اسمبل ، C نوشته شده اند که به صورت زیر به تعدادی از آن ها اشاره می‌کنیم :

  • DragonFlyBSD,FreeBSD,OpenBSD,NetBSD
  • HP-UX
  • Centos,Debian,Fedora,OpenSUSE,RedHat,Ubuntu
  • OSX,iOS,Darwin
  • OracleSolaris,OpenIndiana
  • Cygwin
  • Android
  • Windows Phone
  • BlackBerry
  • WindowsXP,Vista,7,8,10

دلیل آن که از زبان هایی مانند C/C++ رای نوشتن سیستم عامل استفاده میشود قابلیت های مهم آن است به عنوان مثال : پرفرمنس بالا ، مستقل از سکو ، زبان مادر بودن و عدم وابستگی آن به زبان های دیگر، ارتباط با سخت افزار و تمامی دیوایس ها، مدیریت هوشمندانه و همچنین آزادانه برنامه نویسی کردن، دسترسی به لیست عظیمی از کتابخانه ها که می‌توان توسط آن ها هر چیزی را در این زمینه خلق کرد.

انواع سخت افزار هایی که این زبان پشتیبانی می‌کند :

مدل ماشین هایی که پشتیبانی می‌شود : PowerPC , Oracle,Fujitsu,Sun, IBM,Freescale , AMD,Intel

مدل پردازنده ها :

  • Athlon,Atom,Core,Core2,Corei3/i5/i7,Opteron,Pentium,Phenom,Sempron,Turion,etc
  • Itanium,Itanium2,Itanium29000/9100/9300,etc
  • PowerPC,POWER1/2/3/4/5/6/7,G1,G2,G3,G4,G5,etc
  • UltraSPARCI/II/III/IV/T1/T2,SPARCT3/T4,etc

 

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

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

کنسول های بازی مانند PlayStation که همینک نسخه 4 آن در بازار موجود است دارای پردازنده ای بر پایه Power PC میباشد با سخت افزار بسیار قدرتمند توسط سیستم عاملی بی نقص بر پایه FreeBSD توسط C/C++ توسعه داده شده است.
و در رابطه با دیگر کنسول هایی مانند Xbox One نیز همچنین میتوان ذکر کرد که این دو مورد مطرح ترین و داغترین بازار کنسول های بازی را در صنعت بازی همراه با پلتفرم PC دارند.


بنابراین صنعت بازی سازی و هوش مصنوعی تماما بر پایه قدرتمندترین زبان توسعه می یابد چرا که استفاده از موتور های گرافیکی مانند Unreal Engine و یا سیستم های پردازشی 3 بعدی مانند OpenGL و Direct X توسط این زبان توسعه داده می‌شوند تا بازی سازان بستری را فراهم نمایند تا دنیای پیش روی بازی کننده را به واقعیت نزدیکتر نمایند.


همچنین در رابطه با این صنعت میتوان به صنعت نرم افزار های مهندسی و سخت افزار های مناسب ذکر کرد مانند محصولات Autodesk که نرم افزار های قدرتمندی چون Autocad , 3dsmax و .. را برای صنعت مهندسی فراهم نموده اند و سخت افزار های قدرتمندی مانند محصولات NVIDIA و AMD ATI نیز کتابخانه های توسعه را برای زبان C/C++ منتشر کرده اند و حتی میتوان به Intel اشاره نمود که برای توسعه سیستم نرم افزاری در محصولات آن زبان  C/C++ را پیشنهاد نموده و کتابخانه های لازم را فراهم کرده اند که حال در نظر بگیریم چنین سخت افزار ها در سازمان های بسیار کاربردی مانند NASA قابل استفاده است که حجم عظیمی از اطلاعات را پردازش میکنند.


کاربرد این زبان در زمینه وب چگونه است ؟

در زمینه وب خود C++ به صورت مستقیم وارد طراحی صفحات وب نمی‌شود لذا که هدف از آن طراحی وب نیست البته لازم بذکر است کتابخانه های زیادی برای این کار موجود است ولی در لایه های کمی پایینتر استفاده از این زبان امریست طبیعی برای مثال وب سایت های بسیار بزرگی مانند Google , Facebook و غیره وجود دارد که هسته آن را توسط این زبان پیاده سازی نموده اند تا در لایه های بالاتر عملیات پردازش در حد پاس کردن به لایه زیرین و پردازش توسط C++ صورت بگیرد تا سرعت انتقال اطلاعات به صورت بسیار چشمگیری افزایش می یابد که میتوان به برخی از آن ها اشاره کرد که در نهایت منجر به مدیریت منابع و کاهش فشار سرور میشود.


وب سایت Facebook را در نظر بگیرید چندی پیش بود که به دلیل افزایش کاربران و حجم اطلاعات آن فشاری که بر روی سرور های این شرکت آمده بود بسیار بالا بود و برای بهبودی آن نیازمند هزینه و افزایش تجهیزات سخت افزاری داشت که با نوشتن کامپایلری برای PHP توسط C++ توانست این مشکل را برطرف نماید و نیازی برای افزایش سخت افزار و هزینه های کلان برای به روز رسانی سرور ها نشد دلیل استفاده و بهینه سازی توسط C++ بود که نام آن HipHop میباشد.


در رابطه با دیگر سیستم های وب سایت نیز میتوان اینگونه اشاره کرد که در لایه های زیرین استفاده های بسیاری از این زبان میشود به عنوان مثال کتابخانه های قدرتمندی از طرف Google با نام V8 ارائه داده شده است.


سوال: من تاکنون در محیط کنسول با C++ برنامه نویسی کرده ام چگونه می‌توان برنامه های گرافیکی دارای رابط کاربری مدرن طراحی کرد ؟ روش استفاده و پیشنهادات چیست ؟ متاسفانه امروزه در کشور ما به دلیل عدم به روز بودن نظام آموزشی در رشته کامپیوتری و شاخه برنامه نویسی دانشجویان و برنامه نویسانی که فارغ التحصیل میشوند معمولا با زبان های C++ در حد محیط های Console و محیط توسعه TurboC و یا IDE معروف Visual Studio آشنا هستندکه متاسفانه باید به این نکته اشاره کنیم هیچ یک از نرم افزار های قدرتمند و سیتسم هایی که در موارد بالا ذکر شده در این محیط ها طراحی و توسعه داده نشده اند.

این زبان آزادانه برنامه نویسی کردن را برای برنامه نویس فراهم میکند ولی متاسفانه شرکت هایی که توسط IDE های خود سیاست های محدود کننده خود را با نام کتابخانه برای C++ تزریق میکنند باعث گمراهی توسعه دهندگان و عدم شناخت صحیح از این زبان شده اند که در زیر به آن ها اشاره خواهیم کرد.

اگر دقت کنیم در محیط های توسعه Visual Studio پروژه هایی که برای C++ در نظر گرفته شده است تحت کتابخانه های MS میباشد که تماما از API های مختص ویندوز در آن ها استفاده میشود و برنامه نویس هر چیزی را که خلق کند در انحصار مایکروسافت و سیستم عامل Windows منتشر کرده است! ولی هدف این زبان این نیست! هدف این است که به صورت ازادانه و بدون محدودیت باید برنامه نویسی کرد بنابراین مقدمات و همچنین کتابخانه های بسیار زیادی که به صورت استاندارد معرفی شده اند برای این زبان وجود دارد که می‌توانید در هر بستر سخت افزاری با هر نوع سیستم عاملی از آن استفاده کنید.

حال چگونه باید طراحی رابط کاربری را انجام دهیم؟

برای طراحی رابط گرافیکی ابتدا باید ذهن خود را از محیط VS و همچنین کنسول کنار بکشید لذا برای این کار کتابخانه های مخصوصی در نظر گرفته شده است به صورت زیر :

  • FLTK
  • nana
  • WxWidgets
  • OWLNext
  • GTK+
  • glibmm
  • gtkmm
  • goocanvasmm
  • libglademm
  • libgnomecanvasmm
  • webkitgtk
  • flowcanvas
  • evince
  • Qt
  • libdbusmenu-qt

توسط این کتابخانه های می توان محیط های کاربری را فراهم نمود که در این میان دو کتابخانه wXwidgets و Qt بسیار قدرتمند عمل کرده اند که بین این دو نیز Qt با قدرت بسیار زیادی از رقیب خود یعنی wXwdidget پیشی گرفته است و معمولا پروژه هایی که در آن رابط کاربری خلاقانه (Creative) و مدرن مطرح است حرف از Qt به میان خواهد آمد.

در رابطه با آموزش برای کتابخانه wxWidgets به این لینک مراجعه نمایید | همچنین در رابطه با آموزش های مربوط به Qt به این لینک مراجعه نمایید.

دانش کافی برای کار با این زبان چیست ؟

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

پیشنهادات ما استفاده از مقالات خارجی و منابع رسمی میباشد که رسمی ترین آن ها: http://en.cppreference.com/w/ و http://www.cplusplus.com خواهند بود. لینک ها و منابع بسیار زیادی هستند که اساتید و کاربران حرفه ای میتوانند به آن ها در این تاپیک اشاره نمایند.

بازار کار این زبان در ایران چگونه است ؟

متاسفانه راحتی کار با زبان های دیگری که در ایران مطرح است به قدری این زبان را کم رنگ و غیر قابل استفاده نموده که هر برنامه نویسی که در زبان های غیر مرتبط با C++ فعالیت می‌کند چنین میپندارد که بازار کار این زبان مخصوصا در کشور ما مرده است ! و این زبان به طور کلی منسوخ گردیده است که در واقع چنین نیست این از نظر و دیدگاه برنامه نویسانی است که هیچ شناختی در رابطه با این زبان را ندارند ، بنابراین توصیه ما تحقیق این زبان برای پی بردن به ویژگی های آن خواهد بود.

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

معمولاً در ایران پیش به سوی تولید نرم افزار های حسابداری و چنین موارد میروند به صورت خودمانی مثالی میزنم اگر فکر می‌کنید کار با بانک اطلاعاتی سخت است و هیچ نررم افزار حسابداری یا مشابه با این زبان نوشته نمی‌شود دلیل آن بی حوصله بودن برنامه نویس و یا عدم شناخت برنامه نویس از وجود کتابخانه های مربوط به این زبان استب برای مثال بر اساس تجربه ذکر می‌کنم کار با دیتابیس تحت کتابخانه های MySQL و دیگر درایو های دیتابیس بسیار شیرین و آسان است دسترسی به منابع سخت افزاری و همچنین مدیریت و گزارش گیری و سازگاری برنامه های تولید شده تحت این زبان بسیار دل انگیز است.


در نهایت در رابطه با ارزش و هزینه برنامه های تولید شده توسط این زبان را باید بگوییم ارزش آن بسیار بالاتر از برنامه های نوشته شده توسط زبان های دیگر خواهد بود لذا قابلیت هایی را که می‌توان فراهم کرد با ویژگی های خاصی که خواهد داشت قیمت نهایی پروژه را میتواند بر اساس سلیقه برنامه نویس یا توسعه دهنده افزایش دهد.

اشاره ای بر انواع موتور های دیتابیس که توسط C++ پشتیبانی می‌شوند :
  • SQL
  • SQLite
  • MySQL
  • Sybase Adaptive Server
  • SQL Server
  • Oracle
  • PostgreSQL
  • IBASE : Borland
  • IBM DB2

آیا با C++ می‌توان برنامه های موبایلی مانند Android , iOS و غیره را تولید کرد ؟

همانطور که می‌دانید امروزه صنعت توسعه نرم افزار در بازار کار تبلت و موبایل بسیار پیشرفت کرده و با سرعت بالایی رو به پیشرفت است بنا براین در این میان فناوری Cross Platform بودن نیز مطرح است. اگر نیاز است برنامه ای را تولید کنیم که در Android قابل اجرا باشد می‌بایست توسط زبان هایی مانند Java آن را توسعه دهیم و یا اگر نیاز است برای iOS برنامه ای را منتشر کنیم نیاز است با زبان Objective-C آشنا باشیم و همچنین محیط Xcode که مختص بستر های Apple است و شما بدون داشتن سیستم Apple تحت سیستم عامل مک نخواهید توانست این ایده را پیاده سازی نمایید، یا برای طراحی و ساخت برنامه های blackberry نیز باید با C++ آشنا باشید و در رابطه با دیگر موارد مانند Windows Phone همچنین است که یاد گیری تمامی این موارد برای خود زحماتی را خواهد داشت بنابراین برای خلاصی از این همه پیچ و خم تنها کافیست با C++ آشنا باشید که توسط کتابخانه های قدرتمندی مانند Qt می‌توانید برنامه خود را برای تمامی این پلتفرم ها منتشر نمایید که باید چنین ذکر کنیم که توسط C++ چیزی در دنیای برنامه نویسی غیر ممکن نیست.

حال چگونه توسط C++ می‌توان همه این موارد را فراهم کرد؟ آیا قرار است برای هر کدام مجددا برنامه نویسی و طراحی شود؟ آیا قابلیت هایی که محیط های مخصوص آن دارند را توسط C++ می‌توان فراهم کرد ؟

پاسخ این سوال اینگونه خواهد بود ، زبان C++ یک زبان خود مختار و مادر است بنا براین چرا که نه ؟! به راحتی و با انتخاب کتابخانه مورد نظر خود می‌توانید اقدام به طراحی و تولید برنامه های Cross Platform کنید برای مثال شما می‌توانید با انتخای یکی از کتابخانه های طراحی مانند Qt اقدام به طراحی و کد نویسی نموده و کافی است با کامپایل برنامه نوشته شده در سیتم عامل های مربوطه آن ها را منتشر نمایید.
هیچ نیازی نخواهد بود برای هر سیستم عامل مجددا کد نویسی و طراحی کنید لذا یک بار کد نویسی کافی است و زمان بسیار زیادی برای تمرکز بر روی مواردی همچون رفع باگ و توسعه برنامه شما در تمامی محیط ها به صورت یکباره خواهد بود.


پیشنهاد ما در رابطه نحوه شروع برای یادگیری و آشنایی با زبان و انواع کتابخانه ها به صورت زیر است:
  • قبل از هر چیز هدف خود را در رابطه با منابع مشخص نمایید، اگر زبان انگلیسی شما خوب است می‌توانید در همین قدم اول از منابع رسمی و استاندارد که بی نقص هستند استفاده کنید.
  • سعی کنید اگر قرار است این زبان را یاد بگیرید عملا با آن درگیر شوید.
  • از مقدمات برنامه نویسی شروع کنید و حتما در رابطه با تاریخچه زبان و اهداف آن تحقیق کنید.
  • شرکت و سازمان های بزرگ و موفق را الگو قرار دهید.
  • اگر هدف شما سریع رسیدن به پول بدون در نظر داشتن کیفیت و اهداف بزرگ از پروژه هستش به هیچ عنوان سراغ این زبان نروید زیرا C++‎‎‎‎‎‎‎‎‎‎‎ برنامه نویس حرفه ای را میطلبد نه برنام نویس راحت طلب.
  • برای برنامه نویسی بهتر C++ نسخه های C++‎‎‎‎‎‎‎‎‎‎‎11 و 14 آن را بیاموزید.
  • برای استفاده و کار با کتابخانه های این زبان بهتر است کتابخانه های داخلی مانند STL را بیاموزیم چرا که کتابخانه های پیشفرض آن مهم است.
  • در رابطه با کتابخانه های عمومی Boost,Qt,STL مناسبترین گزینه میباشند.
  • برای توسعه هرچه بیشتر پروژه و استفاده از انواع قابلیت ها توسط این زبان میبایست از کتابخانه های دیگر استفاده کنیم که در این میان در رابطه با بخش طراحی و رابط کاربریQt، GTK, MFC, SDL , wxWiddgets مناسب است که پیشنهاد ما در میان این لیست (Qt) خواهد بود که تحت آن میتوان مدرنترین طراحی ها را خلق نمود.
  • برای کار با شبکه کتابخانه های Poco, Qt, RakNet, ReplicaNet, SDL موجود هستند و در بین اینها Poco بهترین گزینه میتواند باشد.
  • برای کار با 3D بعدی کتابخانه مخصوص OpenGL یا باز همان Qt را که بر پایه موتور OpenGL است پیشنهاد میکنیم و یا می‌توانید از کتابخانه های مخصوص DirectX و OpenGL به صورت تخصصی استفاده کنید.
  • در رابطه با 2D نیز از OpenGL، Direct2D, GDI و GDI+ میتوان استفاده کرد.
  • در مورد Sound از کتابخانه های مطرح OpenAL, Fmod و Bass استفاده کنید.
  • در مورد بحث فیزیک کتابخانه های Nvidia Physix, Nvidia Apex, Bullet, Box2D, ODE, Open Dynamics
  • در رابطه با هوش مصنوعی کتابخانه های OpenAI, FEAR, OpenSteer, PathLib مطرح هستند.
  • برای کار با پردازش تصویری OpenCV, OpenNI پیشنهاد میشود.
  •     برای کار با پردازش موازی OpenCL, OpenML, CUDA مناسب است.
  •     برای اسکریپت نویسی Lua, LuaPlus, Phyton
  •     برای کار با ورودی ها از OpenInput, Qt, SDL, SFML می‌توان استفاده کرد.
  •     برای بازی سازی کتابخانه های Unreal Engine, OGRE, Irrlicht, KGE مناسب هستند که در بین اینها Unreal Engine بسیار قدرتمند عمل می‌کند.
  •     برای طراحی و اجرای وب سایت کتابخانه های WebKit, ClearSilver, Teng مناسب هستند.

لازم بذکر است این ها نمونه کتابخانه هایی هستند که برنامه نویس بر اساس سلیقه و ویژگی های موجود در کتابخانه می‌تواند انتخاب و از آن استفاده نماید و همچنین به این نکته اشاره کنیم معمولا کتالبخانه های عمومی برای اجرای پروژه های معمولی پاسخگو هستند برای مثال با انتخاب Qt می‌توانید یک نرم افزار خوب را با تمام قابلیت ها تولید کنید. و هزاران کتابخانه برای اهداف خاص که توسط اشخاص ، شرکت ها و سازمان های مختلف ارائه می‌شوند.

نقل قول

این پُست به روز رسانی خواهد شد...

 

  • تشکر شده 3

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
مهمان
این موضوع برای عدم ارسال قفل گردیده است.

  • کاربران آنلاین در این صفحه   0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

  • مطالب مشابه

    • توسط کامبیز اسدزاده
      آیا این واقعاً امکان‌پذیر است؟
      پاسخ :  بله!
      من می‌دانم که ممکن است این مبحث تحت سی++ بسیار پیچیده و یک کار بیهوده‌ای باشد! اما واقعیت مساله این است که تا چیزی رو خودتون ندیدین و انجامش ندادین با حرف و حدیث بقیه باورش نکنید!
      من قبلاً در مورد اینکه تحت ++C وب‌سایت میشه طراحی کرد یا خیر تحقیقاتی انجام داده بودم، از لحاظ امکان بودنش جواب مثبت بود اما اینکه به راحتی طراحی تحت Php یا دیگر زبان‌های برنامه‌نویسی باشه خیر! خُب طبیعیه چون شما بسیار راحت یه اسکریپت رو می‌نویسی و روی سرور اجراش می‌کنی و سایت شما به خوبی و خوشی بالا میاد!
      ممکن است در همین قسمت از موضوع شما به این نتیجه رسیده باشید که خُب نیازی به ادامه‌ی بحث نداریم! وقتی کار سختیه پس منطقی نیست و شما احتمالاً دیوانه‌ای!!! 😁
      واقعیت جریان این است بر خلاف آن چیزی که تصور کرده‌ایم طراحی وب‌سایت با سی‌پلاس‌پلاس نه تنها بسیار راحت است بلکه بسیار هم جذاب خواهد بود! اما در نگاه اول ممکن است یک سری محدودیت‌هارا داشته باشد که همه‌ی این موارد با کمی تعمل و بررسی قابل حل هستند به قدری که وقتی درگیر این جریان باشید شیفته‌ی آن خواهید شد.
       
      مزایای یک وب‌سایت تحت سی‌پلاس‌پلاس نسبت به دیگر زبان‌های رایج
      سرعت خارق‌العاده و غیر قابل مقایسه با زبان‌های رایج امنیت بهتر کد‌های شما مدیریت ساده‌تر و انعطاف‌پذیری بالا مصرف بسیار بهینه‌ و غیر قابل تصور از منابع سرور دسترسی نامحدود به کتابخانه‌ها عدم محدودیت در دسترسی به برنامه‌نویسی سطح پایین عدم محدودیت در استفاده از توابع سیستم‌عامل عدم محدودیت در مدیریت سیستم و هر ویژگی‌ دیگری که در زبان‌های اسکریپتی اگر به آن نیاز داشته باشید مجبور هستید تا به صورت اکستنشن آن را تحت سی‌پلاس‌پلاس باز نویسی کنید. سیستم راه‌انداز وب‌سرور چگونه است؟
      در هر سروری CGI به شما امکان این را می‌دهد که بتوانید تحت پروتکل‌های استاندارد برنامه‌های تحت وب را اجرا کنید. شما می‌توانید تحت آن و یا موارد دیگری مانند FatCGI و WSGI و دیگر موارد بهینه شده‌ی آن برنامه‌ی تحت وب را بر روی سرور خود اجرا کنید.
       
      طراحی قالب هماهنگی با HTML, JavaScript, Css در سی‌پلاس‌پلاس چگونه خواهد بود؟
      همه‌ی گزینه‌های مربوط به وب را شما بدون هیچ محدودیتی در اختیار خواهید داشت. شما هیچ محدودیتی در استفاده از ویژگی‌های HTML5 یا CSS3 و یا JavaScript و دیگر فریمورک‌ها و کتابخانه‌های کارآمدی چون Angular.JS را نخواهید داشت. بنابراین از نظر طراحی رابط یک وب‌سایت همانند دیگر زبان‌های رایج می‌توانید روی آن حساب کنید.
       
      طراحی هسته و بک‌اِند وب‌سایت چگونه خواهد بود؟
      همانند زبان‌ها و فریمورک‌های رایج تحت وب شما در سی‌پلاس‌پلاس می‌توانید هسته‌ی وب‌سایت یا سیستم وب‌سایت خود را تحت استاندارد سی‌پلاس‌پلاس و هر کتابخانه‌ای که می‌پسندید و یا به آن تسلط دارید پیاده سازی کنید! به شرطی که قابلیت‌های آن کتابخانه پاسخگوی نیاز‌های شما باشد.
      با این حساب شما می‌توانید حتی سیستم مدیریت محتوای (CMS) خود را طراحی کنید! 😧
      بله سیستم مدیریت محتوا تحت سی‌پلاس‌پلاس! کاملاً جدی هستیم 🙂
      قبل از هر چیز یک مزیت بسیار بزرگی که یک CMS تحت سی‌پلاس‌پلاس می‌تواند داشته باشد مصرف بهینه از منابع سرور خواهد بود. برای مثال در یک مقایسه‌ی‌ ساده و آزمایشی نتیجه‌ی بسیار جالبی ارائه شده است.
      همانطور که می‌دانید Wordpress به عنوان یک سیستم مدیریت محتوای (بلاگ) شناخته شده و تحت Php توسعه‌ یافته است. نسخه‌ی سریعتر و بهینه‌تر آن با نام Ghost تحت Node.JS توسعه یافته است که ما نسخه‌ی توسعه‌ یافته‌ی آن را با یک عمل مشابه در C++1z مورد بررسی قرار داده ایم که نتایج آن بسیار جالب است!
      مصرف حافظه‌
      سیستم مدیریت محتوای Jaguar ۳۵۰۰ درخواست در هر ثانیه 3.6 مگابایت سیستم مدیریت محتوای Ghost 100 درخواست در ثانیه 120 مگابایت پشتیبانی از پایگاه‌های داده
      به لطف کتابخانه‌های عظیم سی‌پلاس‌پلاس امکان مدیریت یک وب‌سایت تحت پایگاه‌های داده مختلفی ممکن است. برای مثال تحت Qt شما می‌توانید به رایجترین درایور‌های بانک‌اطلاعاتی دسترسی داشته و سیستم خود را به آن‌ها مجهز کنید.
      نکته: احتمالاً در برنامه‌نویسی با نود جی‌اس و پی‌اچ‌پی شناختی با کتابخانه‌های OpenSSL, Libcurl و موارد این چنینی داشته اید! کتابخانه‌های فوق عضو لیست کتابخانه‌های C و  ++C هستند. بنابراین شما علاوه بر دسترسی مستقیم بر آن‌ها به هزاران و شاید میلیون‌ها کتابخانه در دنیا سی‌پلاس‌پلاس خواهید داشت.
       
      نمونه‌ی اولیه اما شوق‌آور برای اثبات امکان طراحی وب‌سایت تحت سی‌پلاس‌پلاس
      چندی پیش من تصمیم گرفتم تا سیستم وب‌سایتی را تحت Php7 برای یکی از استارت‌آپ‌ها طراحی و پیاده سازی کنم که در این پست به آن اشاره شده است. از آن‌جایی که به لطف کتابخانه‌ی Qt برنامه‌های سمت کاربر را توسط سی‌پلاس‌پلاس پیاده سازی کرده بودم به این فکر افتادم چرا سمت سرور و بخش وب‌سایت هم با آن هماهنگ نشود!؟
      اینگونه هماهنگی بین برنامه‌ها و پرفرمنس همه‌ی آن‌ها بسیار افزایش خواهد یافت در اولین نگاه این تفکر بسیار ناشیانه و بسیار ناممکن بود! تنها روشی که به کار گرفته بودم ارسال اطلاعات از طرف کاربر به سمت سرور و مدیریت آن‌ها تحت معماری Restful Api بود که در قالب JSon آن‌ها را تجزیه و مدیریت می‌کردم. با کمی تحقیق در مورد ویژگی‌های سمت وب  تحت Fast-CGI, uWSGI, DJango, ClearSilver و موارد مرتبط با آن‌ها سعی کردم تا صفحه‌ی بسیار ساده‌ای از HTML را توسط سی‌پلاس‌پلاس هندل کنم. این کار نتایج بسیار موفقیت آمیزی را در بر داشت تا نتیجه‌ی آن تبدیل به یک پروژه‌ی سیستم مدیریت محتوا تحت ++C شد.
      من پروژه‌ای با نام مفهومی Jaguar که نام پروژه‌ی قبلی تحت Php بود را در محیط Qt Creator با C++17 و کتابخانه‌ی Qt باز سازی کرده و هسته‌ی اولیه‌ی آن را برای اجرای چند صفحه از یک وب‌سایت، احراز حویت، بازخوانی و نمایش لیستی از خبر‌ها و مدیریت متا تگ‌ها و آدرس صفحات مربوط به هر صفحه را ایجاد کردم.
      سعی کرده ام در کمترین زمان ممکن برای آزمایش یک سری ویژگی‌های اولیه از یک وب‌سایت آن‌ها را مورد بررسی قرار بدم که عبارتند از هماهنگی با فریم‌ورک‌های طراحی مانند BootStrap و یا Angular.JS که خوشبختانه همه‌چیز بسیار خوب در کنار همدیگه کار می‌کنند. هسته‌ی سیستم به صورت جدا و معماری طراحی آن بر پایه‌ی MVC مورد آزمایش قرار گرفته است.
      در زیر تصاویری از صفحات تولید شده تحت سیستم‌ مدیریت محتوای ساخته شده با سی‌پلاس‌پلاس را مشاهده می‌کنید. 😉







      همه چیز در قدم‌های اول قرار دارد و با توجه به سادگی تولید وب سایت بر خلاف تصوری که داشتیم بسیار توسعه و جای پیشرفت خواهد داشت. بخشی از نمونه کد‌های این سیستم به صورت زیر آورده شده است تا ذهنیتی برای توسعه‌دهندگان ارائه شود:
      تکه کُد زیر عمل ارسال اطلاعات و تمامی لینک‌های مربوط به بوت استرپ را برای سمت HTML ارائه می‌کند که در قالب استاندارد جدید C++17 آورده شده است:
      auto bootstrapCss = bootStrapLib.find("css"); if(bootstrapCss != bootStrapLib.end()) { c->setStash("BootstrapCss", bootstrapCss->second.c_str()); std::cout << "Found " << bootstrapCss->first << " " << bootstrapCss->second << '\n'; } کد مربوط به سمت قالب به صورت زیر خواهد بود:
      <!-- Bootstrap core css --> <link href="{{BootstrapCss}}" rel="stylesheet"> نتیجه‌ی فوق در صورتی که CDN بر روی لوکال تنظیم شده باشد از روی کد‌های کامپایل شده و یا استاتیک فراخوانی خواهد شد. در غیر اینصورت از روی یکی از سرور‌های CDN فراخوانی می‌شوند.
      نحوه‌ی ارسال متغیر از سمت سی‌پلاس‌پلاس به قالب بسیار ساده است! بسیار ساده از Php و یا Node.JS می‌باشد. با در نظر گرفتن ارسال اطلاعات از سمت سی‌پلاس‌پلاس به سمت رابط کاربری کافی است نام متغیر‌ها را در قالب خود اعمال کنید.
      {% for post in news %} <div class="blog-post"> <h2 class="blog-post-title"><a href="news/{{post.uri}}">{{post.title}}</a></h2> <p class="blog-post-meta">{{post.date}} by <a href="#">{{post.author}}</a></p> <p>{{post.announcement|safe}}</p> </div><!-- /.blog-post --> {% endfor %}</div> این ساختار بر پایه‌ی ساختار Angular.JS و DJango پیاده سازی شده است که به طور کامل پشتیبانی می‌شود.
      فعال سازی فناوری Angular.JS بر روی این سیستم جهت طراحی قالب تنها با دو دستور ساده اعمال می‌شود:
      <!-- Link to AngularJS --> <script src= "{{AngularJs}}"></script> <!-- Enable AngularJS Engine --> {{AngularJsSync|safe}} این دستورات در هسته‌ی سیستم مدیریت محتوا در کلاسی با نام Template پردازش و در نهایت به سمت HTML هندل می‌شوند.
      بخشی از دستورات سمت هسته در سی‌پلاس‌پلاس ۱۷ برای مثال ارسال عنوان صفحه به صورت زیر است:
      std::optional<std::string> LoadListTemplate::getTitle() const { if (isset(title)) { return title; } else { return std::nullopt; } } سمت HTML کافی است دستور فوق را در نظر بگیریم:
      <title>{{title}}</title> این‌ها مثال‌هایی از مراحل توسعه‌ی این سیستم است که می‌دانم آنچنان گسترده نیست، اما برای ثابت کردن طراحی و توسعه‌ی وب‌سایت تحت سی‌پلاس‌پلاس مثال‌های روشنی هستند.
       
      موفق و سربلند باشید!
      اطلاعیه‌های مربوط به این پروژه احتمالاً در کانال‌ها و گروه‌ تلگرامی و همین مرجع بازگو و در اختیار شما قرار بگیره.
    • توسط کامبیز اسدزاده
      با سلام،
      همانطور که می‌دانید سیستم‌‌های مدیریت محتوا به عنوان سیستم پویا برای مدیریت محتوای یک وب‌سایت بسیار مفید هستند. حال آنکه یک سیستم مدیریت محتوا فراتر از یک سیستم نرم‌افزاری جهت مدیرین محتوای وب‌سایت توسعه یابد بسیار مفید خواهد بود.
       
      قابلیت‌ها و ویژگی‌ها
      با استفاده از سیستم مدیریت محتوای جگوار (Jaguar) ما می‌توانیم برای مشتریان خود یک سیستم مدیریت چند منظوره با قابلیت‌های کاملاً پویا ارائه دهیم که هر استارتاپی می‌تواند کسب‌و‌کار خود را تحت آن توسعه دهد. این سیستم دارای قابلیت‌های چند سکویی و چند منظوره می‌باشد که یکی از قابلیت‌های برجسته‌ی آن پشتیبانی از سیستم چند زبانه می‌باشد. این سیستم در پلتفرم‌های وب، موبایل و دسکتاپ توسعه داده شده است.
      عنوان: پروژه‌ی جگوار (Jaguar) توضیحات: سیستم مدیریت محتوای چند منظوره و پیشرفته زبان‌ها و فناوری‌های استفاده شده: زبان‌های Php7, JavaScript, CSS3, HTML5 فریم وُرک‌ و کتابخانه‌ها: کتابخانه‌ی JQuery , Angular.JS, BootStrap4 نوع پروژه: تجاری (انحصاری شرکتِ Dotwaves LLC) نویسندگان: کامبیز اسدزاده وضعیت: در حال توسعه حق چاپ و تکثیر: شرکت دات‌ویوز این محصول بر پایه موتور جِنسیس توسعه داده شده است.
      برخی از تصاویر مرتبط با این محصول:








    • توسط کامبیز اسدزاده
      با سلام،
      در این پست من قصد دارم به چند ویژگی استاندارد 1z اشاره کنم که به شما اجازه میده تا کُد تمیزتر، ساده‌تر و خواناتری را ایجاد کنید. توسعه زبان‌های برنامه‌نویسی روز به روز بیشتر شده و سی++ به عنوان یک زبان پیچیده نیاز به این داره تا کاربران رو از لحاظ سادگی و مدرنیزه شدن سینتکس دلگرم کنه.
      در استاندارد جدید ۱۷ من برخی از ویژگی‌ها رو معرفی می‌کنم که در تمیز نوشتن و ساده نوشتن تاثیر بسیاری دارند.
      ویژگی ساختار‌های پیوندی
      این ویژگی یکی از ویژگی‌های جدید سی++ است که امکان پیوند شدن نام‌های مشخص و زیر اشیاء المنت‌های اولیه را می‌دهد. به عبارت ساده‌تر می‌توان گفت که، ساختار‌های پیوندی (Structured Bindings) این توانایی را برای ما می‌دهد تا متغیر‌های چند گانه از یک ساختار (struct) یا tuple را به هم دیگر متصل کنیم.
      *مهمترین هدف Structured Bindings در نسخه‌ی ۱۷ ساده سازی و راحتی درک کد می‌باشد.
      سینتکس این ویژگی به صورت زیر است:
      auto ref-operator(optional)[identifier-list] = expression; // Or auto ref-operator(optional)[identifier-list]{expression}; // Or auto ref-operator(optional)[identifier-list](expression); اجازه دهید تا ما با استفاده ازیک مثال مزایای استفاده از ساختار‌های پیوندی را با کمک tuple ببینیم:
      در نسخه‌ی ۹۸ سی‌پلاس‌پلاس:
      #include <iostream> using namespace std; // Creating a structure named Point struct Point { int x; int y; }; // Driver code int main() { Point p = {1, 2}; int x_coord = p.x; int y_coord = p.y; cout << "X Coordinate : " << x_coord << endl; cout << "Y Coordinate : " << y_coord << endl; return 0; } در نسخه‌ی ۱۱ و ۱۴ سی‌پلاس‌پلاس:
      #include <iostream> #include <tuple> using namespace std; // Creating a structure named Point struct Point { int x, y; // Default Constructor Point() : x(0), y(0) { } // Parameterized Constructor for Init List Point(int x, int y) : x(x), y(y) { } auto operator()() { // returns a tuple to make it work with std::tie return make_tuple(x, y); } }; // Driver code int main() { Point p = {1, 2}; int x_coord, y_coord; tie(x_coord, y_coord) = p(); cout << "X Coordinate : " << x_coord << endl; cout << "Y Coordinate : " << y_coord << endl; return 0; }   در نسخه‌‌ی ۱۷ سی‌پلاس‌پلاس:
      #include <iostream> using namespace std; struct Point { int x; int y; }; // Driver code int main( ) { Point p = { 1,2 }; // Structure binding auto[ x_coord, y_coord ] = p; cout << "X Coordinate : " << x_coord << endl; cout << "Y Coordinate : " << y_coord << endl; return 0; } ویژگی عبارت شرطی و حلقه‌ی جدید
      نسخه‌های جدید از دستورات شرطی switch و if در سی‌پلاس‌پلاس به صورت زیر هستند:
      if (init; condition) و switch (init; condition) قبلاً شما باید به صورت زیر یک دستور شرطی را پیاده سازی می‌کردید:
      { auto val = GetValue(); if (condition(val)) // on success else // on false... } در این قالب مشخص است که val یک محدوده‌ی جداگانه و احتمال نشتی دارد. در نسخه‌ی جدید آن را می‌توان به صورت زیر ساده تر و خواناتر نوشت:
      if (auto val = GetValue(); condition(val)) // on success else // on false... در این نسخه val فقط در داخل حوزه‌ی if و else قابل مشاهده است، بنابراین در این صورت امکان نشتی نخواهد داشت. شرط ممکن است هر نوع شرط باشد و فقط وابسته به val مقدار true/false را بر نمی‌گرداند.
      خُب، چرا این نسخه مفید خواهد بود؟
      فرض کنید قرار است در داخل یک رشته چند چیز را جستجو کنید:
      const std::string myString = "My Hello World Wow"; const auto it = myString.find("Hello"); if (it != std::string::npos) std::cout << it << " Hello\n" const auto it2 = myString.find("World"); if (it2 != std::string::npos) std::cout << it2 << " World\n" ما یا باید نام‌های مختلفی را برای it استفاده کنیم و یا باید آن‌ها را در داخل دامنه‌ی جداگانه قرار دهیم. مانند مثال زیر:
      { const auto it = myString.find("Hello"); if (it != std::string::npos) std::cout << it << " Hello\n" } { const auto it = myString.find("World"); if (it != std::string::npos) std::cout << it << " World\n" } عبارت شرطی جدید if یک دامنه اضافی را فقط در یک خط ایجاد می‌کند:
      if (const auto it = myString.find("Hello"); it != std::string::npos) std::cout << it << " Hello\n"; if (const auto it = myString.find("World"); it != std::string::npos) std::cout << it << " World\n"; همانطور که قبلاً ذکر شد متغیر تعریف شده در عبارت if نیز در بلوک else قابل مشاهده است. بنابراین شما می‌توانید آن را به صورت زیر نیز بنویسید:
      if (const auto it = myString.find("World"); it != std::string::npos) std::cout << it << " World\n"; else std::cout << it << " not found!!\n"; همچنین شما در استاندارد جدید می‌توانید از ويژگی پیوند ساختاری در عبارت شرطی نیز استفاده کنید که قالب آن به صورت زیر است:
      // better together: structured bindings + if initializer if (auto [iter, succeeded] = mymap.insert(value); succeeded) { use(iter); // ok // ... } // iter and succeeded are destroyed here ویژگی Variadic Templates
      در نسخه‌ی ۱۱ ما ویژگی‌ خوبی به نام قالب‌های متنوع یا همان (Variadic Templates) داریم که بسیار عالی است، مخصوصاً وقتی که می‌خواهید با تعداد نامحدود یا متغیر با توابع کار کنید. برای مثال در نسخه‌های قبل از ۱۱ ما مجبور بودیم تا چندین تابع را با ورودی‌های مختلف پیاده سازی کنیم تا بتوانیم به نتیجه‌ی مربوطه برسیم.
      در حال حاضر این ویژگی هنوز هم نیازمند افزودن کد‌های می‌باشد مخصوصاً اگر می‌خواهید تابعی از نوع بازگشتی پیاده سازی کنید. مانند مثال زیر:
      auto SumCpp11(){ return 0; } template<typename T1, typename... T> auto SumCpp11(T1 s, T... ts){ return s + SumCpp11(ts...); } در نسخه‌ی جدید سی++۱۷ ما می‌توانیم این را بسیار ساده تر بنویسیم:
      template<typename ...Args> auto sum(Args ...args) { return (args + ... + 0); } و یا حتی ساده تر...
      template<typename ...Args> auto sum2(Args ...args) { return (args + ...); } این تابع فوق‌العاده است! ورودی‌های متغیر با نوع بازگشتی یکی از پر کاربرد‌ترین توابعی است که در نسخه‌های قبل پیاده سازی آن پیچیده بود.
      ویژگی متغیر‌های درون خطی (Inline variables)
      در قبل از سی++۱۷ ما می‌توانستیم از کلمه‌ی کلیدی inline جهت بهینه‌سازی در زمان کامپال برای توابع استفاده کنیم. حال در نسخه‌ی ۱۷ قابلیت تعریف inline برای متغیر‌ها نیز فراهم شده.
      فرض کنید قرار است متغیری را تعریف کنیم که به صورت ایستا و عمومی مورد استفاده قرار بگیرد. در قبل از نسخه‌ی ۱۷ تعریف آن به این صورت که متغیر در فایل هدر و سورس اعلان و تعریف شوند:
      #ifndef MYCLASS_H #define MYCLASS_H class MyClass { public: MyClass(); static const int myVariable; }; #endif // MYCLASS_H فایل سورس
      #include "myclass.h" MyClass::MyClass() { } const int MyClass::myVariable = 17; و در نهایت تابع و فایل main:
      #include <iostream> #include "myclass.h" int main() { std::cout << "My global variable is : " << MyClass::myVariable << std::endl; return 0; } در استاندارد جدید تعریف تابع در همان زمان اعلان به صورت ایستا و عمومی امکان پذیر شده است. برای مثال:
      #ifndef MYCLASS_H #define MYCLASS_H class MyClass { public: MyClass(); inline static const int myVariable = 17; }; #endif // MYCLASS_H همین تعریف برای اعلان متغیر از نوع ایستا و عمومی کافی است. این کار باعث می‌شود نیازی برای تعریف مقدار متعیر در فایل سورس نباشد.
      مثال‌های دیگر :
      struct MyClass { static const int sValue; }; inline int const MyClass::sValue = 777; و یا ساده تر از آن به شکل زیر:
      struct MyClass { inline static const int sValue = 777; };  
    • توسط کامبیز اسدزاده
      با سلام،
      با توجه به سوالات مکرر برخی از کاربران و خصوصاً دانشجویان جدید، تصمیم گرفته شد تا توضیحاتی درباره‌ی نحوه‌ی یادگیری برنامه‌نویسی با سی‌پلاس‌پلاس بیان شود.
       
      مقدمه
      در حال حاضر بیش از سه دهه است که از ساخت و معرفی زبان برنامه‌نویسی ++C می‌گذرد. در رابطه با آن‌ که هدف از ایجاد این زبان چه چیزی بوده و مزایای آن نسبت به زبان‌های دیگر چه چیزی است را می‌توانید در این تاپیک را مطالعه کنید. اما بسیاری از افراد علاقه‌مند به زبان‌های برنامه‌نویسی تمایل بسیاری دارند تا در برنامه‌نویسی با این زبان به درجه مطلوب و درواقع (حرفه‌ای) برسند. قبل از هر چیز باید مواردی را در نظر داشته باشیم که یاد گیری زبان‌های برنامه‌نویسی به خودی خود کافی نیست! مخصوصاً زبان‌‌های C و ++C مستلزم پیش‌نیاز‌های تخصصی بسیاری هستند که در روند تولید، توسعه، تجزیه و تحلیل رفتار کامپایلر و سیستم‌عامل بسیار مهم است.
       
      در ادامه ما به سوالاتی که معمولاً توسط تازه‌کاران پرسیده شده است پاسخ داده ایم:
      قبل از رسیدن به پاسخ سوالات خود به این نکته حتماً توجه کنید که زبان‌های برنامه‌نویسی بسیاری وجود دارد که ممکن است بدون داشتن اطلاعات تخصصی در رابطه با سیستم‌عامل، کامپایلر، انواع معماری‌های سیستمی و غیره موفق به یادگیری آن‌ها شوید. اما در این میان زبان سی++ چنین ویژگی‌ای ندارد (کاربر را به چالش می‌کشد) و شما باید قبل از زبان به عنوان پیش نیازات یادگیری و درک آن از مباحث مهندسی نرم‌افزار، سیستم‌عامل (ساختار و معماری آن)، ساختار و معماری کامپایلر‌ها و رفتار‌های آن‌ها، سخت‌افزار و نوع معماری پردازنده‌ها و موارد این چنین آشنا شوید. کاملاً روشن است که یادگیری چنین مباحثی سنگین بوده و بدون شک شما باید در حوزه‌ی مهندسی کامپیوتر به خصوص نرم‌افزار کسب علم نمایید.
       
      ابعاد علمی و اقتصادی کار با ++C/C در ایران
      متاسفانه اکثر ما ملتی هستیم، تَنبَل و حاضر برای لُقمه‌ی آماده 😋 بنابراین بازار کار در ایران به گونه‌ای است که بیشتر شرکت‌ها و افراد توسعه دهنده به سراغ زبان‌های ساده‌تر و در دسترس‌تر (بی دردسر) می‌روند. غافل از آن که یک برنامه‌ی تولید شده توسط سی++ بسیار سریع، جذاب، قدرتمند و انعطاف‌پذیر تر است. تمامی مساله در اینجا تمام نمی‌شود، چرا که شاید در سال‌های اخیر وضعیت تقریباً فرق کرده و به کمک اطلاع رسانی‌های اساتید و دوستان حرفه‌ای ما در این زمینه این اطلاع رسانی به خوبی صورت گرفته و توسعه دهنده‌ها از قابلیت‌ها پنهان این زبان آگاه شده اند. شرکت‌ها و گروه‌های برنامه‌نویسی بسیاری به دنبال برنامه‌نویس‌های سی++ و کیوت هستند که این امر نشان دهنده‌ی این است که نسبت به سال‌های گذشته پیشرفت و آگاهی جامعه در این حوزه منطقی تر و بهتر شده است.
      بنابراین، بهتر است قبل از هرچیز در نظر داشته باشید که هدف از این تاپیک، این نیست که اثبات کنیم یک زبان نسبت به زبان دیگر برتری دارد. هدف اصلی ما این است به واقعیت‌هایی اشاره کنیم که غیر منطقی نیستند. چرا که واقعاً کارفرمایانی وجود دارند که نیازمند به برنامه‌نویسانی هستند که تخصص خوبی در زبان‌های برنامه‌نویسی دیگری مانند سی و سی++ دارند. متاسفانه در کشور ما اینگونه است که به ازای مثلاً هر ۱۰۰ نفر سی‌شارپ کار یا زبان‌های دیگر ۱ نفر سمت سی++ می‌رود! و این روند برای توسعه صنعت نرم‌افزاری کشور که بسیاری از کارفرمایان به آن نیاز دارند ضربه‌ی سختی وارد می‌کند.
      توجه داشته باشید که هدف از این توضیحات چنین نیست که بعد از خواندن این مطالب زبان برنامه‌نویسی مورد علاقه‌ی خود را کنار گذاشته و به سمت سی++ بروید، خیر! تمامی زبان‌ها به عنوان ابزار‌های کاری شما در یک جعبه‌ی ابزار هستند و هر زبانی حوزه‌ی کاربردی خودش را دارد. بنابراین قبل از اینکه شما تصمیم بگیرید که چه زبانی را یاد خواهید گرفت باید حوزه‌ی کاری وعلاقه‌ی خودتان را مشخص کنید سپس وارد تحقیق و بحث و نظر خواهی راجع به آن زبان نمایید. بنابراین مقایسه‌ی زبان طبق این قانون کاملاً کار اشتباه و بچه‌گانه است.
      متاسفانه به خاطر تفکرات اشتباه و معرفی‌های غیر منطقی و  غیر علمی برنامه‌نویسان کشور ما که ممکن است حتی خودِ شما هم چنین تصور کنید، در رابطه با سایر زبان‌ها مانند سی++ بسیاری از کارفرمایان نیازمند چنین برنامه‌نویسانی هستند که در کشور ما واقعاً نیاز است. توجه داشته باشید که انتخاب درست این نیست که چون همه سراغ سی‌شارپ می‌روند و چون تمامی آگهی‌ها استخدامی مرتبط با سی‌شارپ است پس فقط باید این زبان را یاد گرفت و تمام! خیر چنین تفکری اشتباه است و ضربه‌ی بسیار بزرگی در صنعت و دانش آینده‌ی کشور خواهد زد.
          *نکته‌ی مهم و جالبی که وجود دارد این است که در خارج از کشور بیشترین دست‌مُزد متعلق به برنامه‌نویسان سی++ می‌باشد. در کشور ما برنامه‌نویسان این زبان دست‌مُزد مناسبی می‌توانند بگیرند اما به هیچ عنوان قابل مقایسه با دستمزد‌های خارج از کشور نیست (اما خارج از بحث اقتصادی حال حاضر ممکن است قابل تأمل باشد).
      نکاتی در این میان وجود دارد که باید به آن‌ها اشاره کرد:
      متاسفانه در کشور ما بسیاری از برنامه‌نویسان چه مبتدی چه حرفه‌ای اینطور تصور می‌کنند که تولید محصول نرم‌افزاری یعنی برنامه‌نویسی یک نرم‌افزار که قرار است به بانک اطلاعاتی متصل شده و کار‌هایی مانند ثبت و ویرایش اطلاعات و در نهایت گزارش گیری و دیگر عملیات ممکن را انجام دهد! این تفکر به شدت اشتباه است! بسیاری از بانک‌ها و شرکت‌های صنعتی و اقتصادی مهم کشور نیازمند برنامه‌نویسان سی++ هستند تا بتوانند در بحث بانکی برای توسعه دستگاه‌های پرداخت مانند Pos و ATM از این زبان‌ و برنامه‌نویسان بهره‌ ببرند. در صنایع بزرگ خودرو سازی یا پرس و دیگر موارد نرم‌افزار‌های مورد نیاز است تا با سرعت بسیار و بدون محدودی پلتفرمی پاسخگوی یک چرخه‌ی تولید باشند تا بتواند یک شرکت بزرگ را مدیریت و آن را بهینه کند. در بسیاری از حوزه‌های صنعتی کشور شرکت‌های غول‌پیکر در زمینه‌ی تولیدات انبوه و سنگین که توسط ماشین‌آلات صورت میگیرد به دنبال برنامه‌نویسان سی و سی++ هستند که ممکن است به صورت معرف یا آشنا با آن‌ها مواجه و استخدام شوید. شرکت‌های سخت‌افزاری و استارت‌آپ‌هایی که در حوزه‌ی الکترونیک و سخت‌افزار فعالیت می‌کنند به دنبال برنامه‌نویسیان سی++ هستند تا بتوانند در حوزه‌ی کاری خود اهداف خود را توسعه و شما را به عنوان مهره‌ای مفید پیش ببرند. شرکت‌های توسعه‌دهنده‌ی موبایل و خطوط تولیدی تلفن‌های همراه داخلی گسترش یافته و به شدت نیازمند برنامه‌نویسان سی++ هستند که برخی از آن‌ها مبادلات بین‌المللی نیز دارند. در بخش حوزه‌ی شهر سازی، مدیرت شهر و همچنین راه‌‌‌داری شرکت‌هایی هستند که برای تولید سیستم‌های مدیریتی مانند مدیریت راه‌ها و تردد‌های خودرو و یا مدیریت ترافیک و موارد این چنینی به دنبال برنامه‌نویسان سی++ هستند. بسیاری از شرکت‌ها و حتی تیم‌های توسعه بر روی پلتفرم‌های iOS و Android به صورت تخصصی  سفارشی سازی و حتی ساخت و توسعه‌ی اپلیکیشن‌های ایرانی تمرکز دارند که جدیداً به لطف آگاهی از فریم‌وُرک‌هایی مانند Qt به سمت این حوزه آمده و نیازمند سی++ کاران هستند. شرکت‌های بازی‌سازی کشور ما که این سال‌ها با پیشرفت‌های خوبی مواجه شده‌اند به دنبال برنامه‌نویسان سی++ هستند که بتوانند در این صنعت برای فرهنگ‌سازی و توسعه صنعت بازی سازی جلو بروند. بسیاری از شرکت‌های پنهان وجود دارد که به صورت بسیار مخفیانه در صنایع سه‌بعدی و پیشرفته‌ در حال فعالیت‌ هستند که محصولات خود را نه در ایران بلکه در خارج از آن آمریکا و دیگر کشور‌های اروپایی به فروش می‌رسانند که به سفارش آن‌ها بوده است. با دید سطحی به این مسائل نباید نگاه کنید، اگر آگهی‌های استخدامی نمیبینید به خاطر این است که این زبان کار کُن می خواهد نه تَنبل! بنابراین شما باید به سراغ آن بروید چرا که بسیاری از شرکت‌های بین‌المللی فعالیت‌های بزرگی انجام می‌دهند که هیچوقت از آن‌ها خبر ندارید و به صورت کاملاً سفارشی و حساسیت کامل به دنبال برنامه‌نویسان این زبان هستند (چون می‌دانند یک سی++ کار هدفمند و با دید بازتری به توسعه نگاه می‌کند). چنین شرکت‌ها معمولاً استخدام را به صورت رابطه‌ای انجام می‌دهند و تعداشان هم کم نیست. ما می‌دانیم که شاید شما با دیدگاه اینکه حتماً باید نرم‌افزار‌های کاربردی تولید کنید به قضیه نگاه می‌کنید، خوشبختانه فریم‌ورک‌ کیوت به قدری قدرتمند و پُخته شده است که می‌توان هر محصول کاربردی در هر زمینه‌ای را تولید کرد که از کارایی بسیار بهتری نسبت به دات نت بهره‌مند است. در حوزه‌ی امنیت، شبکه و موارد این چنینی شرکت‌های بزرگ و Isp‌ها نیازمند این زبان هستند. نکته‌ی قابل توجه این که، اگر در کشور ما از چند صد هزار نفر برنامه‌نویس سی‌شارپ کار یک برنامه‌نویس سی++ کار وجود داشته باشد باید امیدوار باشیم که همان درصد محدود و ناچیز راه درستی را رفته‌اند! البته دلایل بسیاری وجود دارد که موجب می‌شود شرکت‌ها از روی ناچاری به سراغ برنامه‌نویسان دیگر بروند، که من شخصاً آن را تجربه کرده ام ! در بسیاری از پروژه‌ها که به عنوان مشاور فنی در آن‌ها شرکت کرده بودیم متوجه آن شدیم شرکت‌ها به خاطر عدم وجود برنامه‌نویس سی++ برای ادامه‌ی چرخه‌ی تولید خود مجبوراً سراغ برنامه‌نویس‌های دیگر زبان‌ها می‌روند. این امر به خاطر این است که واقعاً درصد تعداد برنامه‌نویسان این زبان نسبت به زبان‌های دیگر به خاطر (راحت طلبی) و شاید عدم آگاهی از این زبان دور هستند. برخی از سوالاتی که علاقه‌مندان به این حوزه می‌پرسند در ادامه آمده است:
      من یک دانشجو هستم و رشته‌ی تحصیلی من کامپیوتر است، به برنامه‌نویسی با ++C علاقه دارم از کجا باید شروع کنم؟
      اگر شما به قصدِ حرفه‌ای شدن دنبال یادگیری این زبان هستید، همانطور که اشاره‌ای شد مباحث پیش نیاز برای یادگیری این زبان مهم هستند و برای درک هرچه بیشتر این زبان بهتر است دانش خوبی در زمینه‌ی تجزیه و تحلیل رفتار کامپایلر داشته باشید. علاوه بر این برای آشنایی با کامپایلر رفتار سیستم‌عامل و واکنش‌های کامپایلری در سیستم‌عامل‌های متفاوت بسیار مهم است. به عنوان مثال کامپایلر GCC بر روی ایستگاه‌های یونیکس تعبیه شده و برای خود قوانین و استاندارد‌هایی را دارد. در کنار آن کامپایلر MSVC نوعی کامپایلر اختصاصی تحت ویندوز است که متناسب با ساختار و معماری ویندوز رفتار می‌کند.
      من یک دانشجو هستم اما متاسفانه رشته‌ی تحصیلی من کامپیوتر نیست، به برنامه‌نویسی با ++C علاقه دارم از کجا باید شروع کنم؟
      این کار کمی دشوار است، در مرحله‌ی اول پیشنهاد ما این است که سراغ زبان‌های برنامه‌نویسی دیگری بروید که نیازی نداشته باشد شما درگیر درک کامپایلر یا رفتار‌های سیستم‌عاملی شوید. اما به هر حال اگر شما به هر نحوی می‌خواهید این زبان را یاد بگیرید چاره‌ی کار تلاش مستمر و حوصله است. متاسفانه سی‌پلاس‌پلاس ذاتی مرموز دارد و آن این است که اگر بتوانید به آن مسلط شوید یک زبان با وفا و قدرتمندی خواهد بود که در هر زمینه‌ای به نیاز‌های شما پاسخگو خواهد شد. اما اگر به هر دلیلی نتوانید با این زبان دوست شوید به طور بسیار مرموزی اعصابتان را به هم خواهد ریخت 🙂 که البته طبیعی است چون سی++ تحت کامپایلر‌های خود دستِ برنامه‌نویس را آزاد گذاشته و شما هستید که انتخاب می‌کنید کُد شما به چه شیوه‌ای با توجه به هدف چگونه عمل کند. 
      چقدر زمان لازم است تا من این زبان برنامه‌نویسی را یاد بگیرم؟
      با توجه به ساختار زبان و رفتار‌های کامپایلر می‌توان گفت به قدری دامنه‌ی سی++ گسترده است که تنها راه حل ممکن برای رسیدن به یک وضعیت مطلوب از دانش مرتبط با آن باید زمان مشخصی در نظر گرفته شود. ممکن است شما بتوانید در بازه‌ی ۱ الی ۳ ماه مباحث مقدماتی این زبان را درک کنید. اما توجه داشته باشید پیش‌نیازات آن نیز نیازمند تحقیق، تجربه عملی و نتیجه‌گیری تئوری و علمی هستند. با توجه به اینکه شما (سریع، هوشمند با گیرایی بالا باشید) می‌توانید در کمتر از ۶ ماه به یک پایداری تقریباً قابل قبول در حد مقدماتی این زبان برسید. استاندارد زبان را درک کنید و نحوه‌ی برقراری ارتباط با کتابخانه‌های پیشفرض STL و غیره را تجربه کنید. برای کسب دانش و افزایش آن به میزان متوسط و به بالا نیازمند تلاش بسیار بیشتری خواهید بود که باید در قالب پروژه‌های عملی و واقعی صورت گیرد. متاسفانه سی++ به دلیل گسترده‌ بودن چنان پیچیدگی‌هایی را دارد که تنها می‌توان در موقع برنامه‌نویسی به صورت عملی (بر روی پروژه‌های واقعی) آن را تجربه کرد.
      آیا ارزش دارد من این زبان را یاد بگیرم؟ فرصت من کم است و می‌خواهم سریعاً به درآمد زایی برسم
      اگر شما به عنوان یک برنامه‌نویس متوسط و به بالا به این زبان تسلط دارید، و حداقل می‌توانید با یکی از کتابخانه‌های خوب آن ارتباط برقرار کنید باید به شما تبریک گفت. وقت آن است که با کتابخانه‌های قدرتمند این زبان وارد عمل شوید. کتابخانه‌هایی مانند Boost، Poco، Qt و غیره از سری کتابخانه‌هایی می‌باشد که امکانات بسیاری را در اختیار شما علاقه‌مندان این زبان قرار می‌دهند تا بتوانید در کمترین زمان ممکن به نیاز‌های خود دسترسی داشته و آن را پیاده سازی کنید.
      توجه داشته باشید که لازمه‌ی طراحی و توسعه یک محصول مفید (قابل قبول) در قالب MVP (کمینه محصول پذیرفتنی) مستلزم داشتن دانش طراحی محصول نیز می‌باشد. اما همه چیز اینگونه خلاصه نشده است و شما برای اینکه بتوانید یک محصول واقعاً قابل قبول را پیاده سازی کنید مسلماً باید آن را مجهز به قابلیت‌های دیگری مانند منابع ذخیره‌ داده و یا سرویس‌ها و ماژول‌هایی کنید که بتواند به عنوان یک محصول کاربردی روی آن حساب کرد. کاملاً روشن است که علاوه بر پیش‌نیازاتی که به آن‌ها در بالا اشاره شده است، داشتن دانش در رابطه با SQL، معماری وب سرویس‌ها و ساختار Api ها، طراحی رابط کاربری تحتِ Xml، QML، JavaScript و حتی شبکه و اینترنت نیاز خواهد بود.
      با توجه به این موارد اگر بخواهید محصولی را بسازید که طبق استاندارد‌ آن را توسعه و تولید کنید باید ابزار‌ها و موارد پیشنهادی زیر را در اختیار داشته و به تک به تک آن‌ها مسلط باشید:
      یک محیط توسعه یکپارچه‌ی نرم‌افزار مانند Qt Creator، Xcode یا Visual Studio (پیشنهاد ما Qt Creator است). پلتفرم توسعه (سیستم‌عاملی) که قرار است محیط توسعه‌ی یکپارچه خود را بر روی آن نصب و شروع به برنامه‌نویسی کنید را مشخص نمایید. اگر شما کاربر ویندوز هستید باید محیط توسعه‌ی یکپارچه‌ی شما مجهز به کامپایلر MSVC و یا نسخه‌ی پورت شده‌ی GCC یعنی MinGW باشد. اگر شما کاربر مک‌او‌اِس هستید به صورت پیشفرض با نصب محیط توسعه کامپایلر Clang بر روی آن تعبیه خواهد شد. البته می‌توانید به صورت سفارشی از کامپایلر GCC نیز استفاده کنید. در صورتی که کاربر لینوکس هستید کامپایلر GCC به صورت پیشفرض بر روی محیط توسعه‌‌ی شما تعبیه خواهد شد. بر اساس پیشنهاد ما جهت محیط توسعه‌ کتابخانه‌ی Qt نیز پیشنهاد می‌شود (دلیل آن این است که این کتابخانه به شما کمک می‌کند تا بتوانید رابط کاربری نرم‌افزار (محصول) خود را پیاده سازی کنید). اگر هدف شما طراحی یک محصول استانداردی است که از شکل و ظاهر آن‌چنانی برخوردارد نیست بهتر است از ماژول‌های پیشفرض Qt مانند Qt Widget برای طراحی آن استفاده کنید. این کار بسیار ساده است و نیازی برای داشتن دانش در رابطه با حوزه‌های JavaScript و QML ندارد. البته می‌توانید با ترکیب CSS طراحی رابط کاربری برنامه‌ی خود را بهبود ببخشید. بعد از این موارد نیاز است که شما هدف توسعه‌ی خود را مشخص کنید، اینکه می‌خواهید توسعه دهنده‌ی چه پلتفرمی باشید؟ تولید کننده برنامه‌های دسکتاپ بر روی ویندوز؟ یا لینوکس و مک؟ یا همه‌ی آن‌ها؟ خوشبختانه با توجه به قابلیت‌های ذاتی سی++ و کیوت شما می‌توانید برنامه‌ی خود را تنها با داشتن محیط توسعه‌ی خود بر روی پلتفرم مورد نظر خود کامپایل و خروجی بگیرید (البته به شرط اینکه از سرویس‌های اختصاصی سیستم‌عاملی) استفاده نکرده باشید. اگر مشتاق آن هستید که برای پلتفرم‌های موبایل مانند آی‌او‌اس یا اندروید برنامه تولید کنید، قضیه کمی گسترده تر خواهد شد و حتماً باید ملزوماتی که در ابتدای مقاله به آن اشاره شده است را در نظر داشته باشید. برای مثال تولید یک اپلیکیشن آی‌او‌اس مستلزم آن است که شما علاوه بر داشتن دانش سی++ در رابطه با معماری و ساختار و همچنین قوانین سیستم‌های مرتبط با اپل را اطلاعات کافی داشته باشید. در اندروید نیز این چنین است. اگر شما تازه کار هستید پیشنهاد می‌کنیم هدف خود را فعلاً محدود بر یک پلتفرم خاص کنید، برای مثال توسعه محصول بر روی ویندوز برای آغاز کار بسیار مناسب است. در نهایت شما محصول خود را با آزمایش وخطا‌های بسیاری می‌توانید تولید و با توجه به مستنداتی که در همین مرجع ارائه شده است می‌توانید مستقر و برای کاربر مورد نظر ارائه دهید.  برای اینکه بدانید مزایای این زبان در چیست و چه کتابخانه‌هایی می‌توانند مفید باشد و برخی از سوالات احتمالی که ممکن است به ذهن شما برسد این بخش را مطالعه کنید. برای نحوه‌ی شروع کار با Qt این بخش را مطالعه کنید. جهت نحوه‌ی نصب و راه اندازی محیط توسعه این بخش را مطالعه کنید.
    • توسط veria.kurdish
      سلام خدمت اساتید محترم.
      اصولا وقتی پروژه ای تحت زبان C++ و  در محیط Qt تحویل بگیریم، باید به چه صورتی پروژه رو تحلیل کنیم که کلاس های مرتبط با پروژه رو در Qt پیدا کرده و شروع به سازماندهی و طراحی برنامه کنیم؟ 
      مشکل اصلی من پیدا کردن کلاس مرتبط با پروژه هست. ممنون میشم از اساتید با ذکر مثالی راهنمایی فرمایید.
×