Реализация на языке C++: различия между версиями

Материал из LERNADO: Информатика и техники
Нет описания правки
 
(не показано 5 промежуточных версий этого же участника)
Строка 1: Строка 1:
<iframe key="lernbase" level="video" path="videos/embed/hfJRLJ7u7n5fHoXqgXAJ5a?subtitle=ru&amp;muted=1&amp;title=0" width="800" height="600" allowfullscreen="true"/>
<iframe key="lernbase" level="video" path="videos/embed/hfJRLJ7u7n5fHoXqgXAJ5a?subtitle=ru&amp;muted=1&amp;title=0" width="800" height="600" allowfullscreen="true"/>
== Краткое содержание лекции ==
=== Введение в объектно-ориентированное программирование (ООП) ===
*  ООП - это парадигма программирования, поэтому полная ее реализация в каком-то одном языке невозможна.
*  Каждый язык реализует ООП с теми или иными допущениями.
*  Ключевые языки: C++, Python, JavaScript.
*  В курсе будут рассмотрены C++ и Python.
=== Основные понятия ООП ===
*  '''Объект (экземпляр):''' Имеет внешнюю сторону (методы и свойства) и внутреннее состояние (данные).
*  '''Методы экземпляра:''' Действия, которые можно выполнять с объектом.
*  '''Свойства экземпляра:''' Характеристики объекта (цвет, вкус и т.д.).
*  Внутреннее состояние описывается '''данными экземпляра''' (переменными).
*  Экземпляры одного класса обязательно имеют одинаковые методы и свойства.
=== Реализация классов в C++ ===
*  Каждому классу можно сопоставить набор переменных, составляющих данные экземпляра.
*  Используется класс-ориентированный подход, при котором сначала описывается класс, а затем создаются экземпляры этого класса.
*  Каждый класс обычно реализуется в двух файлах:
**  файл <code>myclass.h</code> содержит описание класса;
**  файл <code>meclass.cpp</code> исходные тексты функций, реализующих методы экземпляра.
*  Создавая новый класс, мы создаем новый тип данных.
*  Функция и метод - это разные вещи: метод = действие, функция = способ реализации метода.
*  В C++ экземпляр, с которым ведется работа, задается указателем <code>this</code>.
*  Функция-член класса, реализующая метод экземпляра, может иметь и другие параметры, помимо <code>this</code>.
*  При объявлении функции параметр <code>this</code> не записывается.
*  Жизненный цикл объекта состоит из 5 этапов: создание, инициализация, использование, деинициализация, уничтожение.
** Для создания объекта используется метод <code>operator new</code>;
** для инициализации объекта используется метод-конструктор;
** для деинициализации объекта используется метод-деструктор;
** для уничтожения объекта используется метод <code>operator delete</code>.
*  Инициализация присваивает начальные значения.
*  Деинициализация освобождает ресурсы, связанные с переменной (например, закрытие открытого файла).
*  Создание переменной в основном включает в себя выделение памяти.
*  Уничтожение объекта включает в себя освобождение памяти.
*  Создание экземпляра и инициализация - это отдельные этапы.
*  Создание экземпляра почти всегда выполняется стандартным способом.
*  Программировать операторы <code>new</code> и <code>delete</code> вручную редко бывает необходимо.
*  Метод, который инициализирует переменную, называется конструктором.
*  Имя метода-конструктора всегда совпадает с именем класса.
*  Конструктор умолчания используется при создании переменной без указания параметров.
*  Конструктор копирования вызывается, когда создается копия переменной того же типа.
*  Деинициализация переменной выполняется функцией, называемой деструктором.
*  Имя деструктора начинается со знака тильды (~) за которым следует имя класса, и у него никогда не бывает параметров.
*  Ни конструкторы, ни деструкторы не имеют возвращаемых значений.
*  Деструкторы следует объявлять с ключевым словом <code>virtual</code>.
*  Необходимо объявить функцию присваивания <code>operator=</code>.
*  Оператор присваивания вызывается во время простого присваивания (X = Y), где X и Y имеют один и тот же тип.
*  Присваивание отличается от инициализации.
*  Четыре функции должны присутствовать в каждом классе C++ по историческим причинам:
** конструктор умолчания;
** конструктор копирования;
** деструктор;
** оператор присваивания.
=== Инкапсуляция ===
*  Инкапсуляция означает, что данные экземпляра/состояние объекта могут быть изменены только путем вызова его методов.
*  Ключевое слово <code>private</code>: все, что следует за ним, может быть изменено только изнутри методов экземпляра.
*  Ключевое слово <code>public</code>: все, что следует за ним, доступно любым способом.
=== Свойства в C++ ===
*  Общепринятой реализации свойств в C++ не существует.
*  Свойства экземпляра используются, но реализация варьируется в разных библиотеках (например, Qt имеет один способ, другие библиотеки - другой).
*  Самый простой способ реализовать свойство: написать функцию, которая возвращает значение свойства.

Текущая версия от 23:02, 4 марта 2026

Краткое содержание лекции

Введение в объектно-ориентированное программирование (ООП)

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