Кінець? Що далі?

  Юрій  | 

  Оновл. 1 Лип 2021  | 

 139

Вітаю! Ви повністю пройшли основну частину туторіалу по мові С++! Ви круті! Ви отримали необхідну базу/фундамент знань в програмуванні і, зокрема, в програмуванні на мові С++. Тепер ви вже повинні вирішити самостійно, в чому саме ви хочете розвиватися далі. Напрямків є багато, ми розглянемо основні з них.

Структури даних і алгоритми

Структури даних — це набір даних і методів для доступу і маніпулювання цими даними. Найбільш поширеною структурою даних в програмуванні є масив, який містить список послідовних елементів одного типу. Ви можете маніпулювати цими даними, використовуючи індексацію масиву для отримання прямого доступу до елементів масиву (і їх подальшої зміни). Ми вже раніше розглядали стек, як структуру даних, а також методи push() і pop() для маніпулювання цими даними.

Алгоритм — це послідовність операцій для маніпулювання даними з метою отримання певного результату. Наприклад, коли ви переглядаєте масив, щоб знайти середнє значення, ви виконуєте алгоритм. Бінарний пошук — це алгоритм, який дозволяє визначити, чи існує вказане значення у відсортованому масиві. Методи сортування (такі як сортування методом вибору або бульбашкове сортування) — це алгоритми, які сортують набори даних.

У програмуванні структури даних і алгоритми мають одну і ту ж мету: вони є інструментами, які дозволяють в рази збільшити швидкість написання і ефективність виконання вашого коду (за умови, що ви навчилися правильно користуватися цими інструментами).

Доброю новиною є те, що більшість зі структур даних і алгоритмів, які вам знадобляться, вже реалізовані в Стандартній бібліотеці С++ (std::array, std::vector, std::stack, std::string, std::sort() і т.д.). Ваша ціль — навчитися ефективно їх використовувати. Крім того, ви можете спробувати реалізувати їх самостійно з нуля.

Стандартна бібліотека C++

Основна частина Стандартної бібліотеки C++ — це структури даних і алгоритми. Однак є й інший функціонал, який ви можете використовувати: числові (математичні) бібліотеки, підпрограми вводу/виводу, функції для управління локалізацією, регулярні вирази, багатопотоковість і т.д. Кожен новий реліз версії мови C++ (який відбувається кожні 3 роки) додає новий функціонал в Стандартну бібліотеку С++. Вам не обов’язково знати, як це все працює, але вам потрібно хоча б знати, що вже є в наявності. Таким чином, в разі потреби, вам не доведеться вигадувати свої велосипеди.

Додатки з графічним інтерфейсом

Ми мали справу тільки з консольними додатками, оскільки вони прості, кросплатформні і не вимагають установки додаткового програмного забезпечення. На відміну від багатьох сучасних мов програмування, мова C++ не має вбудованого функціоналу для створення додатків з графічним інтерфейсом. Для цього вам потрібно буде підключати додаткові бібліотеки. Популярними варіантами є Qt, wxWidgets, SDL і SFML. Якщо ви хочете працювати з 3D-графікою, то вам потрібно буде розбиратися з OpenGL.

Графічні додатки працюють не так, як консольні. У консольному додатку виконання коду починається послідовно з першого рядка функції main(), зазвичай зупиняючись тільки для користувацького вводу. У графічному додатку виконання коду теж починається з першого рядка функції main(): створення робочого вікна, заповнення його графікою, віджетами, а потім нескінченний цикл з очікуванням взаємодії користувача з вікном (через натискання на кнопку миші або на клавішу клавіатури). Цей нескінченний цикл називається циклом подій, а коли відбувається клік миші або натискання на клавішу клавіатури, то подія, що відбулася, направляється в функцію(ї), яка обробляє цей тип події. Це називається обробкою подій. Як тільки подія оброблена, цикл подій продовжує своє виконання, очікуючи наступного користувацького вводу.

TCP/IP. Мережеве програмування

Зараз більшість всіх програм підключаються до мережі Інтернет, до зовнішнього сервера або до хмари. Будь-яка програма, яка вимагає наявності облікового запису і входу в систему, підключається до сервера і аутентифікує користувача. Багато програм підключаються до служби оновлень (для перевірки того, чи доступне оновлення). Соціальні мережі використовують Інтернет, щоб користувачі могли спілкуватися один з одним. І таких прикладів десятки.

Мережа (в широкому сенсі цього слова) — це підключення вашої програми до інших програм на вашому комп’ютері або на інших комп’ютерах, підключених до мережі, для обміну інформацією. Робота в мережі є потужним інструментом. У минулому, якщо ви хотіли змінити роботу вашого застосунку, вам доводилося випускати і поширювати оновлення цього застосунку. Тепер же ви можете просто оновити інформацію десь на сервері, і всі екземпляри вашої програми зможуть автоматично використовувати ці зміни.

У мові C++ є окремі бібліотеки для роботи з мережевим програмуванням (наприклад, бібліотека Asio).

Багатопотоковість

До цього моменту всі програми, які ми розглядали, виконувалися послідовно. Тільки після завершення виконання одного завдання, починало виконуватися наступне. Якщо з яких-небудь причин (наприклад, якщо від користувача був потрібний ввід, а він нічого не вводив) виконання завдання гальмувалося, то і виконання цілої програми також припинялося. У теорії, для невеликих тривіальних програм — це ще ок, але на практиці (з реальними додатками) — це майже завжди погано. Уявіть, що ваша програма не може обробити користувацький ввід, тому що вона зайнята виведенням чого-небудь на екран, або, наприклад, виконання програми призупинилося через передачу даних з одного вузла програми в інший.

На щастя, є така річ, як багатопотоковість, яка дозволяє програмам виконувати відразу кілька завдань одночасно. Аналогічно тому, як ви можете йти і розмовляти по телефону, так і багатопотоковість дозволяє програмі «розділити» свою увагу на виконання відразу декількох завдань паралельно один одному. Наприклад, деякі графічні додатки (такі, як веб-браузери) поміщають рендеринг картинки в окремий потік, щоб оновлення екрану не блокувало інші речі (наприклад, обробку користувацького вводу).

Багатопотоковість — річ потужна, але переходити до її вивчення варто хоча б з мінімальним досвідом роботи з мережевим програмуванням або з графічними додатками.

aCode. Що далі?

Якщо хтось не знає, то уроки по С++, розміщені на aCode, є адаптованим перекладом уроків по С++ на Ravesli, а ті, в свою чергу, є адаптованим перекладом уроків по С++ на LearnCpp.com.

Україномовного контенту в мережі Інтернет не так вже і багато, а корисного україномовного контенту (ще й по програмуванню) взагалі “як кіт наплакав”, тому я вирішив (в межах своїх можливостей) внести свій вклад в розвиток не тільки програмування в Україні, але і поширення україномовного контенту в мережі Інтернет. Адже це замкнуте коло, коли контенту на українській мало і, навіть, україномовні користувачі відразу шукають контент на російській мові, або взагалі на англійській — за рахунок об’єму інформації, корисної інформації там в сотні разів більше. Я не проти цього і не проти російської чи англійської мов, я за розвиток української.

Зараз же, для тих користувачів, які планують далі вивчати С++, я можу порекомендувати наступні уроки на ресурсі Ravesli:

   Практичні завдання по С++. 70+ вправ з різними рівнями складності для виконання. Тут ви зможете гарненько попрактикуватися, починаючи вже з першої частини. (aCode)

   Покрокове створення графічної гри на С++ з використанням бібліотеки MFC. Починайте з першого уроку і продовжуйте створювати з нуля гру “SameGame”.

   Уроки по графічній бібліотеці SFML. На цих уроках розбираються тонкощі роботи з графічною бібліотекою SFML в мові С++, починаючи зі вступу і установки SFML.

   Уроки по Qt5. Розглядається кросплатформний фреймворк Qt5, його функціонал і можливості. Починайте з установки QtCreator.

   Уроки по OpenGL. Покроково розглядається функціонал OpenGL і робота з 3D-графікою в C++, а в кінці створюється крута графічна гра “Breakout”.

Як бачите, є куди рухатися. На вищеперерахованих уроках розглядаються конкретні фреймворки і бібліотеки, а також створюються повноцінні проекти/ігри. Пройшовши вказані уроки і повторивши все, що на них розглядається, ви отримаєте не тільки теорію зі знаннями, але і практичний досвід з проектами в портфоліо.

Примітка: На aCode розміщені тільки практичні завдання по C++, інші вищевказані теми я не планую перекладати українською, тому переходьте на Ravesli і вивчайте! Якщо ви хочете отримати .pdf-версію уроків по С++ (російською мовою), то ви можете придбати її тут.

P.S. Запрошую до співпраці авторів та людей, які мають практичний досвід в програмуванні і бажання долучитися до розвитку проекту aCode. Для зв’язку зі мною пишіть в Telegram —  yura_v1.

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (1 оцінок, середня: 5,00 з 5)
Loading...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *