12. Основные понятия ООП: инкапсуляция, наследование, полиморфизм.
Понятие объекта. Категории объектов. Отношения между объектами. Понятие класса. Отношения между классами. Понятие домена.
Основные понятия ООП
Инкапсуляция
Определение
Инкапсуляция — это процесс сокрытия деталей реализации объекта и предоставления интерфейса для взаимодействия с ним.
Пример
Объекты содержат приватные данные и публичные методы для работы с этими данными.
class BankAccount { private: double balance; public: void deposit(double amount) { balance += amount; } double getBalance() const { return balance; } };
Наследование
Определение
Наследование позволяет создавать новый класс на основе существующего, унаследуя его свойства и методы.
Пример
Создание класса
SavingsAccount
, который наследует отBankAccount
.
class BankAccount { protected: double balance; public: void deposit(double amount) { balance += amount; } double getBalance() const { return balance; } }; class SavingsAccount : public BankAccount { private: double interestRate; public: void applyInterest() { balance += balance * interestRate; } };
Полиморфизм
Определение
Полиморфизм позволяет объектам разного типа быть обработанными через один интерфейс.
Пример
Использование виртуальных функций и указателей на базовый класс для вызова переопределенных методов производных классов.
class Shape { public: virtual void draw() const { std::cout << "Drawing Shape" << std::endl; } }; class Circle : public Shape { public: void draw() const override { std::cout << "Drawing Circle" << std::endl; } }; Shape* shape = new Circle(); shape->draw(); // Вывод: Drawing Circle
Понятие объекта
Определение
Объект — это экземпляр класса, который содержит данные и методы для работы с этими данными.
Пример
Создание объекта класса
BankAccount
.
BankAccount myAccount; myAccount.deposit(100.0); std::cout << myAccount.getBalance(); // Вывод: 100.0
Категории объектов
Активные объекты
Объекты, которые могут инициировать действия самостоятельно, например, потоки или процессы.
Пассивные объекты
Объекты, которые выполняют действия только по запросу, например, обычные данные или структуры.
Абстрактные объекты
Объекты, которые не имеют конкретной реализации и предназначены для предоставления интерфейса, например, абстрактные классы и интерфейсы.
Отношения между объектами
Ассоциация
Простое отношение между объектами, которое показывает, что один объект знает о другом.
class Person { private: std::string name; public: Person(std::string n) : name(n) {} std::string getName() const { return name; } }; class Car { private: Person owner; public: Car(Person p) : owner(p) {} std::string getOwnerName() const { return owner.getName(); } };
Агрегация
"Has-a" отношение, где один объект является частью другого, но может существовать отдельно.
class Engine { public: void start() { std::cout << "Engine started" << std::endl; } }; class Car { private: Engine engine; public: void start() { engine.start(); std::cout << "Car started" << std::endl; } };
Композиция
Сильная форма агрегации, где жизнь одного объекта зависит от другого.
class Engine { public: void start() { std::cout << "Engine started" << std::endl; } }; class Car { private: Engine* engine; public: Car() { engine = new Engine(); } ~Car() { delete engine; } void start() { engine->start(); std::cout << "Car started" << std::endl; } };
Наследование
Отношение "is-a", где один класс является расширением другого.
Понятие класса
Определение
Класс — это шаблон для создания объектов, который определяет их данные и методы.
Пример
Определение класса
BankAccount
.
class BankAccount { private: double balance; public: void deposit(double amount) { balance += amount; } double getBalance() const { return balance; } };
Отношения между классами
Наследование
Класс может наследовать свойства и методы другого класса.
Агрегация и композиция
Классы могут содержать объекты других классов в качестве своих членов.
Ассоциация
Классы могут иметь ссылки или указатели на объекты других классов.
Понятие домена
Определение
Домен — это область предметной области, которую охватывает программное обеспечение или система.
Пример
В банковской системе домен может включать учетные записи, транзакции, клиентов и т.д.
class Account { private: std::string accountNumber; double balance; public: Account(std::string number, double initialBalance) : accountNumber(number), balance(initialBalance) {} // Методы для управления учетной записью };
Last updated