با سلام

پیرو سوالی که امشب یه خانم محترم از بنده پرسیدند لازم دونستم یک سری توضیحات رو در قالب یک پست منتشر کنم.

سوال ایشون این بود که :

سلام
میخاستم منو در مورد ساخت یک برنامه کامل با سی پلاس راهنمایی کنید
برای مثال
یک نرم افزار مدیریت کتاب برای کتابخانه
چطوری چنین نرم افزاری با سی پلاس بسازیم تا دیگران درکامپیوترشون نصبش کنن و استفاده کنن
و مثل بقیه ظاهر زیبایی هم داشته باشه
من سی پلاس بلدم ولی فقط درکنسول کارکردم
ممنون میشم راهنمایی کنید
سپاس

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

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

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

این توی همه جا هست مثلا توی بازی هم همینطوره یعنی از اولی که بازی میاد بالا تا اخرش که بازی رو به هر روشی میبندیم داره این حلقه مدام اجرا میشه.

پس این که چطور یک برنامه باز میمونه برامون مشخص شد.

اگر از یک نگاه کلی تر بخوایم نگاه کنیم کلا برنامه به نظر من سه تا قسمت اصلی داره یکی ورودی یکی کاری که باید با ورودی انجام بشه تا خروجی تولید بشه یکی خروجی ، البته شاید این رو جاهای دیگه توی نمودار یا اشکال تمیز و قشنگ دیده باشیم ولی من قصد دارم درکی که از این مطلب دارم رو براتون بگم.

ورودی :

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

توی برنامه‌های با رابط کاربری هم به همین شکل هست قضیه یعنی برنامه منتظره تا رویدادی رو دریافت کنه تا کارش رو انجام بده و البته توی برنامه‌های صنعتی هم به همین شکل هست و معمولا حلقه اصی برنامه همون حلقه اصلی رابط کاربری هست اگر برنامه رابط کاربری داشته باشه اگر هم نداشته باشه نیازه یک حلقه دیگه براش ایجاد بشه مثلا توی برنامه‌ها سرور حلقه اصلی وجود داره ولی دیگه رابط کاربری وجود نداره و توی سرور میشه یکی از رویداد هایی که به برنامه وارد میشه رو درخواست کاربر دونست مثلا درخواست http که دریافت میشه یا مثلا توی برنامه صنعتی دیتا داره از سنسور دریافت میشه.

کار :

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

خروجی :

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

 

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

و اما در پاسخ به خانمی که سول کرده بودند.

برای ایجاد برنامه با رابط کاربری با سی پلاس پلاس میتونید از فریم‌ورک و کتابخانه‌های موجود استفاده کنید من چند تایی رو نام می‌برم و توضیحات کوتاهی در موردشون میدم :

  • Qt یک فریمورک کامل که علاوه به gui قابلیت‌های دیگه ای از جمله کتابخانه های نتورک و سخت افزار و ... رو هم در اختیار شما قرار میده
  • WXWidget یک کتابخانه برای ایجاد رابط کاربری گرافیکی که خیلی استفاده نداره ولی این به معنی بد بودنش نیست
  • GTK یک کتابخانه برای ایجاد رابط گرافیکی که استیم برای توسعه کلاینتش ازش استفاده کرده اگر اشتباه نکنم ولی نسبت به کیوت استفاده کمتری داره

شاید کتابخانه‌های دیگری هم باشند ولی اونقدری کاربرد ندارند دو مهره اصلی این حوزه Qt و GTK هستند که البته تا جایی که من میدونم و دیدم کیوت به صورت گسترده تری استفاده شده تقریبا همه نرم‌افزار های بزرگ با اون نوشته شدند.

برای یادگیریش هم کتاب فارسی و هم دوره ویدئویی هست با جستجو میتونید پیدا کنید کار سختی نیست .

سوالی بود در خدمتم.