Реализация на языке C++
Материал из LERNADO: Информатика и техники
Краткое содержание лекции
Введение в объектно-ориентированное программирование (ООП)
- ООП - это парадигма программирования, поэтому полная ее реализация в каком-то одном языке невозможна.
- Каждый язык реализует ООП с теми или иными допущениями.
- Ключевые языки: C++, Python, JavaScript.
- В курсе будут рассмотрены C++ и Python.
Основные понятия ООП
- Объект (экземпляр): Имеет внешнюю сторону (методы и свойства) и внутреннее состояние (данные).
- Методы экземпляра: Действия, которые можно выполнять с объектом.
- Свойства экземпляра: Характеристики объекта (цвет, вкус и т.д.).
- Внутреннее состояние описывается данными экземпляра (переменными).
- Экземпляры одного класса обязательно имеют одинаковые методы и свойства.
Реализация классов в C++
- Каждому классу можно сопоставить набор переменных, составляющих данные экземпляра.
- Используется класс-ориентированный подход, при котором сначала описывается класс, а затем создаются экземпляры этого класса.
- Каждый класс обычно реализуется в двух файлах:
- файл
myclass.hсодержит описание класса; - файл
meclass.cppисходные тексты функций, реализующих методы экземпляра.
- файл
- Создавая новый класс, мы создаем новый тип данных.
- Функция и метод - это разные вещи: метод = действие, функция = способ реализации метода.
- В C++ экземпляр, с которым ведется работа, задается указателем
this. - Функция-член класса, реализующая метод экземпляра, может иметь и другие параметры, помимо
this. - При объявлении функции параметр
thisне записывается. - Жизненный цикл объекта состоит из 5 этапов: создание, инициализация, использование, деинициализация, уничтожение.
- Для создания объекта используется метод
operator new; - для инициализации объекта используется метод-конструктор;
- для деинициализации объекта используется метод-деструктор;
- для уничтожения объекта используется метод
operator delete.
- Для создания объекта используется метод
- Инициализация присваивает начальные значения.
- Деинициализация освобождает ресурсы, связанные с переменной (например, закрытие открытого файла).
- Создание переменной в основном включает в себя выделение памяти.
- Уничтожение объекта включает в себя освобождение памяти.
- Создание экземпляра и инициализация - это отдельные этапы.
- Создание экземпляра почти всегда выполняется стандартным способом.
- Программировать операторы
newиdeleteвручную редко бывает необходимо. - Метод, который инициализирует переменную, называется конструктором.
- Имя метода-конструктора всегда совпадает с именем класса.
- Конструктор умолчания используется при создании переменной без указания параметров.
- Конструктор копирования вызывается, когда создается копия переменной того же типа.
- Деинициализация переменной выполняется функцией, называемой деструктором.
- Имя деструктора начинается со знака тильды (~) за которым следует имя класса, и у него никогда не бывает параметров.
- Ни конструкторы, ни деструкторы не имеют возвращаемых значений.
- Деструкторы следует объявлять с ключевым словом
virtual. - Необходимо объявить функцию присваивания
operator=. - Оператор присваивания вызывается во время простого присваивания (X = Y), где X и Y имеют один и тот же тип.
- Присваивание отличается от инициализации.
- Четыре функции должны присутствовать в каждом классе C++ по историческим причинам:
- конструктор умолчания;
- конструктор копирования;
- деструктор;
- оператор присваивания.
Инкапсуляция
- Инкапсуляция означает, что данные экземпляра/состояние объекта могут быть изменены только путем вызова его методов.
- Ключевое слово `private`: все, что следует за ним, может быть изменено только изнутри методов экземпляра.
- Ключевое слово `public`: все, что следует за ним, доступно любым способом.
Свойства в C++
- Общепринятой реализации свойств в C++ не существует.
- Свойства экземпляра используются, но реализация варьируется в разных библиотеках (например, Qt имеет один способ, другие библиотеки - другой).
- Самый простой способ реализовать свойство: написать функцию, которая возвращает значение свойства.