Занятие 9
Изучение C++ — от базовых тем до объектно-ориентированного программирования (ООП)

---

**Что такое C++?**
C++ — это мощный язык программирования, который используется для разработки программного обеспечения, игр, операционных систем, встраиваемых систем и многого другого. Он сочетает в себе низкоуровневую производительность и высокоуровневые абстракции, что делает его универсальным инструментом для программистов.
Сегодня мы расскажем, как начать изучение C++ с нуля и дойти до освоения объектно-ориентированного программирования (ООП).
---

**Почему стоит выбрать C++?**
- **Производительность:** C++ позволяет писать быстрый и эффективный код.
- **Гибкость:** Вы можете работать как на низком уровне (с памятью), так и создавать сложные программы с использованием ООП.
- **Востребованность:** C++ используется в играх (Unreal Engine), робототехнике, финансовых системах, браузерах (например, Chrome) и даже в космических технологиях.
---

**План изучения C++: от базы до ООП**
#### **1. Базовые темы**
Это фундамент, без которого невозможно двигаться дальше.
- **Установка среды разработки:** Установите компилятор (например, GCC) и IDE (например, Visual Studio Code, CLion или Code::Blocks).
- **Первая программа:** Напишите "Hello, World!" и разберитесь, как работает код.
- **Переменные и типы данных:** int, float, double, char, bool.
- **Операторы:** Арифметические (+, -, *, /), логические (&&, ||, !) и сравнения (==, !=, >, <).
- **Условные конструкции:** if, else, switch-case.
- **Циклы:** for, while, do-while.
- **Массивы и строки:** Одномерные массивы, строки (std::string).
- **Функции:** Создание и вызов функций, параметры и возвращаемые значения.
Пример программы:
```cpp
#include <iostream>
using namespace std;
int main() {
cout << "Hello, World!" << endl;
return 0;
}
```
---
#### **2. Продвинутые темы**
Теперь, когда вы освоили основы, можно углубиться в более сложные концепции.
- **Указатели и ссылки:** Что такое указатели, как они работают и зачем нужны.
- **Динамическая память:** Использование new и delete для управления памятью.
- **Структуры данных:** Массивы, векторы (std::vector), списки (std::list).
- **Файловый ввод/вывод:** Работа с файлами через std::ifstream и std::ofstream.
- **Рекурсия:** Функции, которые вызывают сами себя.
Пример работы с указателями:
```cpp
int number = 42;
int* ptr = &number; // Указатель на переменную number
cout << "Value: " << *ptr << endl; // Разыменование указателя
```
---
#### **3. Объектно-ориентированное программирование (ООП)**
ООП — это парадигма программирования, которая позволяет организовывать код в виде объектов, каждый из которых имеет свои данные и поведение.
**Основные концепции ООП:**

**Классы и объекты:**
Класс — это шаблон, а объект — это экземпляр класса.
```cpp
class Car {
public:
string brand;
void honk() {
cout << "Beep!" << endl;
}
};
int main() {
Car myCar;
myCar.brand = "Toyota";
cout << myCar.brand << endl;
myCar.honk();
return 0;
}
```

**Инкапсуляция:**
Сокрытие данных с помощью модификаторов доступа (private, protected, public).
```cpp
class Person {
private:
string name;
public:
void setName(string n) { name = n; }
string getName() { return name; }
};
```

**Наследование:**
Класс может наследовать свойства и методы другого класса.
```cpp
class Vehicle {
public:
void drive() { cout << "Driving..." << endl; }
};
class Car : public Vehicle {
public:
void honk() { cout << "Beep!" << endl; }
};
```

**Полиморфизм:**
Способность объектов одного типа вести себя по-разному.
```cpp
class Animal {
public:
virtual void sound() { cout << "Animal makes a sound" << endl; }
};
class Dog : public Animal {
public:
void sound() override { cout << "Woof!" << endl; }
};
```

**Абстракция:**
Создание абстрактных классов и интерфейсов.
```cpp
class Shape {
public:
virtual void draw() = 0; // Чисто виртуальная функция
};
class Circle : public Shape {
public:
void draw() override { cout << "Drawing a circle" << endl; }
};
```
---

**Где применяется C++?**
- **Игры:** Unreal Engine, Unity (часть кода).
- **Системное программирование:** Операционные системы, драйверы.
- **Финансы:** Высокочастотный трейдинг, аналитика.
- **Научные исследования:** Моделирование, обработка данных.
- **Встраиваемые системы:** Микроконтроллеры, IoT-устройства.
---

**Интересный факт:**
C++ был создан в 1980-х годах Бьёрном Страуструпом как расширение языка C. Его название происходит от оператора инкремента (++), что символизирует улучшение языка C.
---

**Проверьте себя:**
Какие четыре основных принципа ООП вы знаете?
(Ответ: инкапсуляция, наследование, полиморфизм, абстракция.)
---

**Сохраните этот пост, чтобы составить план изучения C++!**
А если хотите узнать больше о конкретных темах или получить практические задания — пишите в комментариях!
#Программирование #Cplusplus #ООП #Образование #DIYИзучение программирования
Видео о программировании на С++ Практика 1:
Видео занятияПрактика 2:
Видео занятияПрактика 3:
Видео занятияПрактика 4:
Видео занятия Практика 5:
Видео занятия Работа с COM-портами в Linux


**Что такое COM-порт?**
COM-порт (или последовательный порт) — это интерфейс, который позволяет компьютеру обмениваться данными с внешними устройствами, такими как микроконтроллеры, модемы, принтеры и другие устройства. В Linux такие порты обычно называются **TTY-устройствами** (например, `/dev/ttyS0`, `/dev/ttyUSB0`).
Сегодня мы разберём, как работать с COM-портами в Linux, чтобы читать и отправлять данные на внешние устройства. Это полезно для программистов, работающих с встраиваемыми системами, IoT или любителями электроники.
---

**Как найти COM-порт в Linux?**

Подключите устройство к компьютеру через USB или RS-232.

Откройте терминал и выполните команду:
```bash
dmesg | grep tty
```
Эта команда покажет список доступных TTY-устройств. Например:
- `/dev/ttyS0` — это встроенный COM-порт.
- `/dev/ttyUSB0` — это USB-to-UART адаптер.

**Важно:** Убедитесь, что у вас есть права доступа к устройству. Если нет, добавьте себя в группу `dialout`:
```bash
sudo usermod -a -G dialout $USER
```
После этого перезагрузите систему.
---

**Работа с COM-портом через терминал**
#### 1. **Настройка параметров порта**
Используйте утилиту `stty` для настройки скорости передачи данных (бодрейт), количества битов данных, стоп-битов и паритета. Например:
```bash
stty -F /dev/ttyUSB0 9600 cs8 -cstopb -parity
```
Здесь:
- `9600` — скорость передачи данных (бод).
- `cs8` — 8 бит данных.
- `-cstopb` — один стоп-бит.
- `-parity` — без контроля чётности.
#### 2. **Отправка данных**
Чтобы отправить данные на устройство, используйте команду `echo`:
```bash
echo "Hello, Device!" > /dev/ttyUSB0
```
#### 3. **Чтение данных**
Для чтения данных с устройства можно использовать команду `cat`:
```bash
cat /dev/ttyUSB0
```
Однако, если данные поступают непрерывно, эта команда может быть неудобной. Вместо неё лучше использовать утилиту `screen`:
```bash
screen /dev/ttyUSB0 9600
```
Чтобы выйти из `screen`, нажмите `Ctrl+A`, затем `K`.
---

**Программирование работы с COM-портами**
Если вам нужно написать программу для работы с COM-портами, вы можете использовать язык программирования, например, Python или C++.
#### Пример на Python с использованием библиотеки `pyserial`:
Установите библиотеку:
```bash
pip install pyserial
```
Пример кода:
```python
import serial
# Открытие COM-порта
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
# Отправка данных
ser.write(b"Hello, Device!")
# Чтение данных
data = ser.readline()
print("Received:", data.decode())
# Закрытие порта
ser.close()
```
#### Пример на C++ с использованием библиотеки `termios`:
```cpp
#include <iostream>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
int main() {
int serial_port = open("/dev/ttyUSB0", O_RDWR);
if (serial_port < 0) {
std::cerr << "Error opening port" << std::endl;
return -1;
}
// Настройка параметров порта
struct termios tty;
tcgetattr(serial_port, &tty);
cfsetospeed(&tty, B9600); // Скорость передачи
cfsetispeed(&tty, B9600);
tty.c_cflag &= ~PARENB; // Без контроля чётности
tty.c_cflag &= ~CSTOPB; // Один стоп-бит
tty.c_cflag &= ~CSIZE;
tty.c_cflag |= CS8; // 8 бит данных
tcsetattr(serial_port, TCSANOW, &tty);
// Отправка данных
const char *message = "Hello, Device!\n";
write(serial_port, message, strlen(message));
// Чтение данных
char buffer[256];
int n = read(serial_port, &buffer, sizeof(buffer));
if (n > 0) {
std::cout << "Received: " << buffer << std::endl;
}
close(serial_port);
return 0;
}
```
---

**Интересный факт:**
В Linux все устройства представлены как файлы в директории `/dev`. Это означает, что вы можете работать с COM-портами так же, как с обычными файлами: читать, писать и управлять ими через стандартные системные вызовы.
---

**Проверьте себя:**
Какая команда используется для просмотра подключённых COM-портов в Linux?
(Ответ: `dmesg | grep tty`.)
---

**Сохраните этот пост, чтобы всегда иметь под рукой инструкцию по работе с COM-портами в Linux!**
А если хотите узнать больше о взаимодействии с устройствами или программировании — пишите в комментариях!
#Linux #COMпорт #Программирование #DIY #ОбразованиеРабота с COM портами в Linux:
Ссылка Программирование UART AVR C :
Ссылка #минусинск #длядетей #робототехника #робототехникадлядетей
Нет комментариев