Эксперт C++: курс профессионального программирования на примерах С++17 и С++20. 2 изд

Эксперт C++: курс профессионального программирования на примерах С++17 и С++20. 2 изд

Эксперт C++: курс профессионального программирования на примерах С++17 и С++20. 2 изд
Автор: Асатрян Джон, Ву Шунь Ян, Григорян Вардан, Тигранян Аракс, Ханн Антонио Гуэрра
Дата выхода: 2023
Издательство: Самиздат
Количество страниц: 482
Размер файла: 11.8 MB
Тип файла: PDF
Добавил: codelibs
 Проверить на вирусы

Часть 1: Под капотом программирования C++....7

1. Сборка приложения C++ ....7

Сборка приложений на C++ ....7

Предварительная обработка....8

Использование модулей ....10

Компиляция....11

Анализ синтаксиса....12

Оптимизация ....12

Генерация машинного кода ....13

Компоновка ....13

Связывание библиотек ....17

Низкоуровневое программирование на C++ ....18

Функции....18

Рекурсия ....20

Данные и память ....24

Виртуальная память ....25

Адресация ....27

Типы данных ....28

Указатели ....29

Стек и куча ....33

Поток управления ....36

Замена условных обозначений указателями функций ....37

Детали ООП ....38

Высокоуровневые детали объектов ....41

Работа с классами ....44

Инициализация, уничтожение, копирование и перемещение ....44

Взаимосвязь классов ....47

Агрегация и композиция ....47

Наследование ....48

Резюме ....48

2. За пределами программирования объектно- ориентированного подхода ....49

Введение в ООП и объектную модель C++ ....50

Понимание объектов ....50

Низкоуровневые детали объектов ....51

Высокоуровневые детали объектов ....53

Объектная модель C++ ....54

Состояния ....58

Идентичность ....58

Поведение ....59

Подобие классу ....60

Работа с классами ....62

Классы с точки зрения компилятора ....63

Инициализация и уничтожение ....66

Копирование объектов ....67

Перемещение объектов ....71

Ссылка на значение lvalue ....72

Ссылка на значение rvalue ....72

Замечания по перегрузке операторов ....74

Инкапсуляция и публичный интерфейс ....76

Отношения классов ....79

Агрегация и композиция ....79

Под капотом наследования и полиморфизма ....80

Наследование ....80

Наследование с точки зрения компилятора ....82

Композиция против наследования ....85

Защищенное наследование ....86

Полиморфизм ....89

Виртуальные функции под капотом ....90

Классические шаблоны проектирования ....93

Составной шаблон ....95

Шаблон декоратора ....100

Принципы проектирования ....105

Единая ответственность ....105

Принцип открытости-закрытости ....107

Принцип замещения Лисковой ....109

Принцип разделения интерфейсов ....111

Принцип инверсии зависимостей ....112

Больше UML в разработке проектов ....113

Диаграмма последовательности ....114

Резюме ....118

3. Понимание и проектирование шаблонов ....119

Мотивация для использования шаблонов ....120

Шаблоны функций ....121

Синтаксис ....121

Экземпляр ....122

Исключение или дедукция....123

Специализация и перегрузка ....123

Шаблоны классов....124

Синтаксис ....125

Инстанцирование ....125

Явное инстанцирование ....126

Неявное инстанцирование ....127

Специализация ....128

Понимание вариативных шаблонов ....131

Синтаксис ....132

Примеры ....133

Объяснение параметров и аргументов шаблона ....134

Параметры шаблона ....134

Параметр шаблона не относящийся к типу ....134

Параметр шаблона типа ....135

Шаблонный параметр шаблона ....136

Шаблонные аргументы ....138

Аргументы шаблона, не относящиеся к типу ....138

Шаблоны аргумента типа....139

Шаблонные аргументы шаблона ....139

Аргументы шаблона по умолчанию ....139

Реализация признаков типа ....141

Оптимизация алгоритмов с помощью признаков ....142

TMP и его применение (Метепрограммирование) ....145

Итог ....145

Вопросы ....146

4. Метапрограммирование шаблонов ....147

Возвращение к основам (программирование во время компиляции с использованием шаблонов) ....148

Оценка во время компиляции с помощью constexpr....156

Конструкторы, определяемые постоянными выражениями (constexpr) ....158

SFINAE И enable_if<> ....162

Ошибка подстановки аргументов ....163

Отключение шаблонов с помощью enable_if<> ....165

Признаки типа ....169

isFundamental ....173

isArithmetic ....174

isScalar ....174

IsConst ....176

isVolatile ....177

isPolymorphic ....177

isAbstract ....178

Is_signed ....179

5. Управление памятью и Умные указатели ....180

Понимание памяти компьютера....181

Проектирование запоминающего устройства ....182

Понимание компьютерной памяти с точки зрения высшего уровня ....184

Регистры....185

Кэш-память....188

Основная память ....190

Постоянное хранение ....191

Основы управления памятью ....192

Пример управления памятью....192

Использование умных указателей ....195

Использование идиомы RAII ....196

std::unique_ptr ....199

std::shared_ptr и std::weak_ptr ....199

Сбор мусора ....202

Использование аллокаторов ....205

Типы аллокаторов ....206

Часть 2: Разработка надежных и эффективных приложений ....213

6. Копаемся в структурах данных и алгоритмах в STL ....214

Последовательные структуры данных....214

Контейнеры STL....220

Использование std::vector и std::list ....220

Использование адаптеров для контейнеров ....224

Итерирование контейнеров ....226

Концепции и итераторы ....229

Понимание концепций ....229

Использование итераторов в C++20 ....230

Графы и деревья ....235

Деревья ....235

Графы ....237

Хеш-таблицы ....238

Алгоритмы ....240

Алгоритмы поиска ....240

Сортировка ....241

7. Продвинутые структуры данных....242

B-деревья ....244

Поиск ....247

Вставка ....250

Удаление ....254

Детали реализации std::unordered_map ....258

Как std::unordered_map организует хранение элементов и как элементы вставляются или ищутся в них std::unordered_map....259

Хэш-функции и стратегии, которые используются для их реализации ....261

Выбор цифр ....261

Скложение ....262

Использование модуля ....262

Столкновения и способы их устранения ....263

Кучи и их применение ....264

Расширенные списки ....273

Списки пропусков ....273

Списки XOR ....278

Резюме....280

8. Функциональное программирование ....281

Функциональное программирование раскрыто ....282

Использование диапазонов....285

Функции первого и высшего порядка ....288

Зачем использовать функциональное программирование? ....291

Принципы функционального программирования ....293

Чистые функции ....294

Сложение....296

Более глубокое изучение рекурсии ....297

Рекурсия головы ....299

Хвостовая рекурсия....299

Метапрограммирование в функциональном C++....300

9. Параллелизм и многопоточность ....304

Понимание параллелизма и многопоточности ....305

Процессы ....307

Проблемы с процессами ....314

Потоки ....315

Работа с потоками ....318

Ожидание потока ....319

Использование std::jthread ....322

Передача аргументов в функцию потока ....325

Управление потоками и обмен данными ....325

Совместное использование данных ....327

Защита общих данных с помощью мьютекса ....328

Избегание тупиковых ситуаций ....329

Проектирование параллельного кода ....329

Знакомство с корутинами ....332

10. Проектирование структур параллельных данных....335

Безопастность потоков....336

Параллельные структуры данных на основе блокировки ....337

Потокобезопасный шаблон синглтонов ....337

Синхронизированные счетчики ....341

Параллельные стеки ....343

Не требующие блокировки параллельные структуры данных ....345

Использование атомарных типов ....345

Операции над атомарными типами ....347

Стеки без блокировок ....349

Очередь без блокировки....352

Хэшевые таблицы без блокировки ....354

Набор без блокировки ....355

Больше операций на атомиках....357

11. Проектирование приложений готовых к производству....358

Шаблоны проектирования....359

Singleton ....360

Factory ....360

Адаптер ....360

Композит ....361

Обозреватель ....362

Команда ....362

Применение шаблонов проектирования ....363

Проблема ....363

Использование проектирования, ориентированного на домен ....363

Пример реального проекта ....364

12. Внедрение шаблонов проектирования в приложениях на C++ ....373

Паттерны проектирования в разработке игр ....374

Шаблон синглтон ....374

Factory ....376

Flyway....377

Шаблоны проектирования в приложениях с интенсивным использованием данных ....378

Шаблон прокси....379

Шаблон декоратора ....382

Шаблон итератора ....385

Модели проектирования в корпоративных приложениях ....385

SOA ....386

13. Сети и безопасность ....387

Введение в сети, модель OSI и сетевое программирование с использованием сокетов ....388

Модель OSI....388

Сетевые приложения под капотом ....390

Программирование сетевых приложений с использованием сокетов ....391

Понимание сетевых протоколов ....392

Проектирование эхо-сервера ....395

Защита приложений....398

Защита сетевых приложений ....400

14. Отладка и тестирование ....402

Понимание первопричины проблемы ....403

Обзор RCA ....403

Профилактика лучше, чем лечение - хорошее поведение при кодировании ....405

Проблема неинициализированной переменной ....405

Побочные эффекты при использовании сложных выражений ....405

Смешанные задачи со знаками и без знаков....405

Порядок оценки проблемы ....406

Проверка во время компиляции и проверка во время выполнения ....406

Избегайте утечек памяти ....407

Отладка программ ....408

Инструменты для отладки программ на C/C++ ....408

Обзор GDB....409

Примеры GDB ....410

Установка точек останова и проверка значений переменных ....411

Практические стратегии отладки ....415

Статический и динамический анализ ....416

Статический анализ ....416

Динамический анализ ....416

Тестирование, TDD и BDD ....418

Модульное тестирование ....418

TDD ....419

BDD ....420

15. Разработка крупномасштабных приложений....422

Внедрение крупномасштабной, кроссплатформенной организации проектов....423

Организация крупномасштабных, кроссплатформенных проектов на C++ ....423

Масштабный кроссплатформенный проект на C++ ....424

Лучшие практики и стратегии управления крупномасштабным кроссплатформенным проектом на C++ ....426

Горизонтальное и вертикальное масштабирование ....427

Горизонтальное масштабирование ....427

Вертикальное масштабирование ....428

Масштабирование приложений на C++ ....429

Горизонтальное масштабирование в C++ ....429

Вертикальное масштабирование в C++ ....429

Проектирование приложений, требующих больших объемов данных ....430

Основная функция ....432

16. Понимание и использование C++ в задачах машинного обучения ....435

Введение в искусственный интеллект ....435

Компьютерное зрение....436

НЛП ....438

Рассуждения о знаниях ....439

ML....440

Понимание ML ....441

Разработка алгоритма, который учится ....442

Категории ML ....444

Приложения ML ....446

Нейронные сети....447

Кластеризация....448

Регрессионный анализ ....449

Регрессионный анализ ....450

C++ и ML ....452

17. Использование C++ в науке о данных ....453

Введение в науку о данных ....454

Пример на C++ ....455

Сбор и обработка данных ....457

Пример на C++ ....458

Очистка и обработка данных ....460

Пример на C++ ....461

Применение алгоритмов машинного обучения ....463

Пример на C++ ....464

Визуализация данных ....466

Пример на C++ ....466

Резюме ....468

18. Разработка и внедрение системы анализа данных ....469

Использование и обработка статистических данных ....470

Пример на C++ ....471

Работа с табличными и прямоугольными данными ....473

Пример на C++ ....474

Полная стратегия проектирования трубопроводов ETL ....476

Пример на C++ ....477

Резюме ....480

Добро пожаловать в Expert C++! Если вы опытный разработчик на C++, желающий повысить свою квалификацию и раскрыть весь потенциал C++20, вы пришли по адресу.В этом экспертном руководстве мы тщательно продумали путь обучения, чтобы дать вам передовые методы программирования и практические знания, которые выходят за рамки традиционного объектно-ориентированного программирования. Если вы хотите разрабатывать высокопроизводительные приложения, работать с передовыми структурами данных или освоить многопоточность и параллелизм, эта книга станет вашим незаменимым помощником.

Мы расскажем вам о тонкостях проектирования шаблонов, включая мощную сферу метапрограммирования шаблонов. Управление памятью и умные указатели станут вашими союзниками, и вы с уверенностью возьметесь за сложные проекты. Окунитесь в царство структур данных, используя контейнеры стандартной библиотеки шаблонов (STL), а затем расширьте границы с помощью продвинутых структур данных в C++. Откройте для себя элегантность функционального программирования и тонкости параллелизма и многопоточности, а также научитесь проектировать параллельные структуры данных.

По мере продвижения мы будем вести вас через процесс создания готовых к работе приложений, внедрения основных моделей проектирования, понимания принципов работы сети и безопасности. Кульминацией книги станет ваше просвещение в области отладки и тестирования, а затем глубокое изучение проектирования крупномасштабных приложений.

Независимо от того, хотите ли вы разрабатывать программное обеспечение корпоративного уровня или передовые проекты, эта книга призвана помочь вам стать опытным программистом на C++. Так что не теряйте времени и отправляйтесь в это преображающее путешествие.

Счастливого программирования!

Для кого эта книга.

Основная целевая аудитория - опытные разработчики на C++, желающие повысить свою квалификацию и создавать приложения профессионального уровня. Если вы хотите освоить сложные концепции программирования, повысить производительность приложений или изучить передовые методы, эта книга станет ценным источником информации на вашем пути.

Вторичная целевая аудитория охватывает инженеров-программистов и студентов, изучающих компьютерные науки и заинтересованных в изучении передовых методов программирования на C++ и открытии реальных приложений этого языка. Изучив содержание этой книги, вы сможете расширить свои знания и развить практический опыт в использовании языка C++ для решения различных проектов и задач.Независимо от вашего образования и уровня опыта, «Эксперт C++» призван наделить вас ценными знаниями и практическими навыками, которые помогут вам стать опытным и умелым программистом на C++.


Похожее:

Список отзывов:

Нет отзывов к книге.