Лекції Технопарку. 1 семестр. З/З++

Ми продовжуємо наші щотижневі публікації навчальних матеріалів Технопарку. Попередні лекції були присвячені web-технологій, а також алгоритмам і структурам даних. У третьому блоці лекцій розповідається про мови С та С++.

Лекція 1. Мова С. Основи організації та використання оперативної і сверхоперативной пам'яті

Лекція починається з введення в мову З: розповідається про історію його появи, особливості, переваги та недоліки, про сфери застосування. Описуються основи препроцессорной обробки, розглядаються питання управління пам'яттю (моделі управління пам'яттю, області видимості об'єктів зберігання) і продуктивність програм на мові С. Обговорюється зв'язування об'єктів зберігання та їх ініціалізація. Потім розповідається про класи пам'яті в мові С. Наступна частина лекції присвячена проблематиці покажчиків, а також роботи з одновимірними масивами. На закінчення розглядається стандарт POSIX і питання переносимості.


Лекція 2. Додаткові питання організації та використання оперативної і сверхоперативной пам'яті

Лекція починається з розгляду багатовимірних масивів. На прикладі двовимірного масиву показується ефективний обхід. Розбирається приклад задачі про множенні матриць, обговорюються вектори векторів. Далі розглядається ряд питань, присвячених вказівниками:
  • покажчики і двовимірні масиви;
  • сумісність покажчиків;
  • покажчики на масиви і константные покажчики;
  • покажчики і квалификатор restrict.
Потім розповідається про використання функцій стосовно до багатовимірних масивів, про масивах змінної довжини. Далі обговорюється вирівнювання і упаковка змінних складових типів, в тому числі реорганізація структур даних. Розглядається оптимізація завантаження кеш-пам'яті: асиметрія умов, вбудовування функцій. Заключна частина лекції присвячена системним аспектів виділення та звільнення пам'яті. Зокрема, розповідається про чотирьох частинах структури пам'яті даних.



Лекція 3. Спеціальні питання інкапсуляції

Інкапсуляція — один з трьох базових принципів об'єктно-орієнтованого проектування. В першу чергу описується, що являє собою інкапсуляція. Дається визначення класу, розбирається його складу, перераховуються існуючі види класів. Докладно розглядаються об'єкти класу, в тому числі константные, атрибути і методи класу, бітові поля і вкладені класи. Далі описуються різні види методів класу (статичні і нестатические, вбудовані, константные, нестійкі), а також покажчики на них. Потім розглядаються так звані дружні класи та функції. Ближче до кінця лекції розповідається про класи-об'єднання, анонімні і безіменні об'єднання, бітові поля у визначенні класів. Фінальна частина лекції присвячена конструкторам і деструкторам.



Лекція 4. Спеціальні питання успадкування та поліморфізму. Множинне і віртуальне спадкування. Динамічна ідентифікація типів (RTTI)

На початку лекції обговорюються ініціалізація без конструктора, конструктори за замовчуванням, конструктори з параметрами, закриті і захищені конструктори. Далі розповідається про механізми почленной ініціалізації і присвоювання, про конструктори копіювання, операції перетворення, а також про деструкторах, в тому числі віртуальних. Обговорюється ідіома RAII (Resource acquisition is initialization), явний виклик деструкторів та список ініціалізації в конструкторі. Розповідається про перенесення в мові С++11, у тому числі про семантику і конструкторі перенесення. Далі обговорюються такі базові принципи ООП, як спадкування (раннє та пізнє зв'язування, базові і похідні класи) і поліморфізм (захищені і закриті члени класу, перевантаження та перекриття членів класу). Потім йдеться про виклик конструкторів і деструкторів похідних класів, списку ініціалізації при спадкуванні, віртуальні функції та абстрактних класах. Розповідається про віртуальному і множинне спадкування. На завершення лекції обговорюються такі питання, як динамічна ідентифікація типів часу виконання (RTTI) та операції приведення типів, продуктивність і безпеку поліморфізму і засобів підтримки RTTI.



Лекція 5. Шаблони класів і методів. Обробка виняткових ситуацій. Узагальнене і безпечне програмування

На початку лекції дається визначення шаблонів класів та розглядаються їх параметри. Пояснюється механізм конкретизації шаблонів класів. Розповідається про методи шаблонів, про дружні об'єктах в шаблонах, про статичних членів, про спеціалізації шаблонів, в тому числі про повну і часткову. В якості прикладу метапрограммирования розглядається рекурсивне визначення шаблонів. Пояснюється суть нової ідіоми, SFINAE (Substitution failure is not an error), у тому числі стосовно до інтроспекції часу компіляції. Солідна частина лекції присвячена всіляких характеристиках типів. Розповідається про технології обробки виняткових ситуацій. Наступний блок присвячений безпечного програмування: безпеки класів, методів, конструкторів і деструкторів, критеріям безпеки й нейтральності коду. В кінці лекції обговорюються різні винятки в стандартній бібліотеці.



Лекція 6. Практичне введення в STL. Функціональне програмування в С++

Спочатку розповідається про історію створення стандартної бібліотеки шаблонів (STL): передумови, про призначення STL та гарантії продуктивності. Далі детально розповідається про всі компоненти, що входять до складу STL:
  • послідовних контейнерах (векторах, деках, списках);
  • впорядкованих асоціативних контейнерах (множинах і мультимножествах, отображениях і мультиотображениях);
  • послідовних алгоритмах;
  • алгоритмах впорядкування;
  • алгоритмах на числах;
  • копіюють, предикатних алгоритмах;
  • алгоритмах, які працюють на місці;
  • алгоритми сортування.
Розглядаються відносини порівняння в алгоритмах, зворотні відносини, операції над множинами та хипами. Потім йдеться про итераторах STL, про їх видах (у тому числі про итераторах вставки і потокових итераторах), про підтримуваних итераторами діапазонах і операціях. Ближче до кінця лекції обговорюються стандартні функціональні об'єкти STL і їх базові класи. Дається інформація про адаптерах (контейнерних, функціональних). В кінці порушується питання застосування контейнерів у STL.



Лекція 7. Практичне введення в Boost

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



Лекція 8. Принципи та шаблони об'єктно-орієнтованого проектування. Базові шаблони, шаблони GoF

Лекція відкривається тривалим обговоренням цілей, проблем і принципів об'єктно-орієнтованого проектування. Далі розповідається про шаблони проектування: що це таке, які бувають види шаблонів, які їх переваги. Розглядаються базові шаблони і їх реалізації:
  • спадкування і композиція;
  • делегування;
  • незмінні об'єкти;
  • інтерфейс.
Після цього розбираються три групи шаблонів GoF. Породжують шаблони:
  • абстрактна фабрика;
  • будівельник;
  • фабричний метод;
  • прототип;
  • клас з єдиним екземпляром.
Структурні шаблони:
  • адаптер;
  • декоратор;
  • міст;
  • компонувальник;
  • фасад;
  • пристосуванець;
  • заступник.
Поведінкові шаблони:
  • інтерпретатор;
  • команда;
  • ланцюжок відповідальності;
  • ітератор;
  • зберігач;
  • стан;
  • спостерігач;
  • стратегія;
  • посередник;
  • відвідувач;
  • шаблонний метод.
І на закінчення розповідається про засади S. O. L. I. D.



Лекція 9. Идиоматика мови С++. Основи рефакторінгу і якість вихідного коду. Стандарти кодування та методологія розробки

Завершальна лекція в рамках даного курсу. Спочатку дається визначення терміна «ідіома мови програмування». Розповідається про ідіомах процедурного програмування, про об'єктно-орієнтованих ідіомах. Обговорюються методи управління пам'яттю, що відносяться до ідіомам підвищеного рівня складності:
  • контекстно-залежна перевантаження індексування;
  • «автоматична» збірка сміття і підрахунок посилань;
  • управління пам'яттю заміною операцій new і delete;
  • ідіома «конверт/лист» і делегований поліморфізм.
Наступна частина лекції присвячена рефакторінгу та статичного аналізу вихідного коду: даються визначення, розповідається про можливе застосування, розглядаються переваги, недоліки та супутні ризики. Далі розбираються типові анти-шаблони, «брудні техніки», логіко-семантичні помилки. Обговорюються питання оптимізації програм з точки зору продуктивності, розміру об'єктного коду та обсягу пам'яті даних. Потім розглядається поняття «якісного», описуються функціональні та структурні показники якості коду. Розповідається про моделі та фактори якості, в тому числі про моделі МакКола. Далі йдеться про складності коду як про атрибут якості, про способи управління складністю і про вплив на неї модульності. Потім розглядаються поняття «технічного боргу», стандарти та стилі коду, методології промислової розробки (правила організації і способи запису, коментування і документування, життєвий цикл розробки ПЗ, його моделі). І на завершення курсу дається огляд SWEBoK (Software engineering body of knowledge).



Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.