Реализация на языке 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 имеет один способ, другие библиотеки - другой).
  • Самый простой способ реализовать свойство: написать функцию, которая возвращает значение свойства.