Реализация на языке C++: различия между версиями
Материал из LERNADO: Информатика и техники
Нет описания правки |
|||
| (не показаны 4 промежуточные версии этого же участника) | |||
| Строка 3: | Строка 3: | ||
== Краткое содержание лекции == | == Краткое содержание лекции == | ||
=== Введение в объектно-ориентированное программирование (ООП) === | |||
* ООП - это парадигма программирования, поэтому полная ее реализация в каком-то одном языке невозможна. | * ООП - это парадигма программирования, поэтому полная ее реализация в каком-то одном языке невозможна. | ||
| Строка 10: | Строка 10: | ||
* В курсе будут рассмотрены C++ и Python. | * В курсе будут рассмотрены C++ и Python. | ||
=== Основные понятия ООП === | |||
* | * '''Объект (экземпляр):''' Имеет внешнюю сторону (методы и свойства) и внутреннее состояние (данные). | ||
* | * '''Методы экземпляра:''' Действия, которые можно выполнять с объектом. | ||
* | * '''Свойства экземпляра:''' Характеристики объекта (цвет, вкус и т.д.). | ||
* Внутреннее состояние описывается | * Внутреннее состояние описывается '''данными экземпляра''' (переменными). | ||
* Экземпляры одного класса обязательно имеют одинаковые методы и свойства. | * Экземпляры одного класса обязательно имеют одинаковые методы и свойства. | ||
=== Реализация классов в C++ === | |||
* Каждому классу можно сопоставить набор переменных, составляющих данные экземпляра. | * Каждому классу можно сопоставить набор переменных, составляющих данные экземпляра. | ||
* Используется класс-ориентированный подход, при котором сначала описывается класс, а затем создаются экземпляры этого класса. | * Используется класс-ориентированный подход, при котором сначала описывается класс, а затем создаются экземпляры этого класса. | ||
* Каждый класс обычно реализуется в двух файлах: | * Каждый класс обычно реализуется в двух файлах: | ||
** файл | ** файл <code>myclass.h</code> содержит описание класса; | ||
** файл | ** файл <code>meclass.cpp</code> исходные тексты функций, реализующих методы экземпляра. | ||
* Создавая новый класс, мы создаем новый тип данных. | * Создавая новый класс, мы создаем новый тип данных. | ||
* Функция и метод - это разные вещи: метод = действие, функция = способ реализации метода. | * Функция и метод - это разные вещи: метод = действие, функция = способ реализации метода. | ||
* В C++ экземпляр, с которым ведется работа, задается указателем | * В C++ экземпляр, с которым ведется работа, задается указателем <code>this</code>. | ||
* Функция-член класса, реализующая метод экземпляра, может иметь и другие параметры, помимо | * Функция-член класса, реализующая метод экземпляра, может иметь и другие параметры, помимо <code>this</code>. | ||
* При объявлении функции параметр | * При объявлении функции параметр <code>this</code> не записывается. | ||
* Жизненный цикл объекта состоит из 5 этапов: создание, инициализация, использование, деинициализация, уничтожение. | * Жизненный цикл объекта состоит из 5 этапов: создание, инициализация, использование, деинициализация, уничтожение. | ||
** Для создания объекта используется метод | ** Для создания объекта используется метод <code>operator new</code>; | ||
** для инициализации объекта используется метод-конструктор; | ** для инициализации объекта используется метод-конструктор; | ||
** для деинициализации объекта используется метод-деструктор; | ** для деинициализации объекта используется метод-деструктор; | ||
** для уничтожения объекта используется метод | ** для уничтожения объекта используется метод <code>operator delete</code>. | ||
* Инициализация присваивает начальные значения. | * Инициализация присваивает начальные значения. | ||
* Деинициализация освобождает ресурсы, связанные с переменной (например, закрытие открытого файла). | * Деинициализация освобождает ресурсы, связанные с переменной (например, закрытие открытого файла). | ||
| Строка 41: | Строка 41: | ||
* Создание экземпляра и инициализация - это отдельные этапы. | * Создание экземпляра и инициализация - это отдельные этапы. | ||
* Создание экземпляра почти всегда выполняется стандартным способом. | * Создание экземпляра почти всегда выполняется стандартным способом. | ||
* Программировать операторы | * Программировать операторы <code>new</code> и <code>delete</code> вручную редко бывает необходимо. | ||
* Метод, который инициализирует переменную, называется конструктором. | * Метод, который инициализирует переменную, называется конструктором. | ||
* Имя метода-конструктора всегда совпадает с именем класса. | * Имя метода-конструктора всегда совпадает с именем класса. | ||
* Конструктор умолчания используется при создании переменной без указания параметров. | * Конструктор умолчания используется при создании переменной без указания параметров. | ||
* Конструктор копирования вызывается, когда создается | * Конструктор копирования вызывается, когда создается копия переменной того же типа. | ||
* Деинициализация переменной выполняется функцией, называемой деструктором. | * Деинициализация переменной выполняется функцией, называемой деструктором. | ||
* Имя деструктора начинается со знака тильды (~) за которым следует имя класса, и у него никогда не бывает параметров. | * Имя деструктора начинается со знака тильды (~) за которым следует имя класса, и у него никогда не бывает параметров. | ||
* Ни конструкторы, ни деструкторы не имеют возвращаемых значений. | * Ни конструкторы, ни деструкторы не имеют возвращаемых значений. | ||
* Деструкторы следует объявлять с ключевым словом | * Деструкторы следует объявлять с ключевым словом <code>virtual</code>. | ||
* Необходимо объявить функцию присваивания | * Необходимо объявить функцию присваивания <code>operator=</code>. | ||
* Оператор присваивания вызывается во время простого присваивания (X = Y), где X и Y имеют один и тот же тип. | * Оператор присваивания вызывается во время простого присваивания (X = Y), где X и Y имеют один и тот же тип. | ||
* Присваивание отличается от инициализации. | * Присваивание отличается от инициализации. | ||
| Строка 59: | Строка 59: | ||
** оператор присваивания. | ** оператор присваивания. | ||
=== Инкапсуляция === | |||
* Инкапсуляция означает, что данные экземпляра/состояние объекта могут быть изменены только путем вызова его методов. | * Инкапсуляция означает, что данные экземпляра/состояние объекта могут быть изменены только путем вызова его методов. | ||
* Ключевое слово | * Ключевое слово <code>private</code>: все, что следует за ним, может быть изменено только изнутри методов экземпляра. | ||
* Ключевое слово | * Ключевое слово <code>public</code>: все, что следует за ним, доступно любым способом. | ||
=== Свойства в C++ === | |||
* Общепринятой реализации свойств в C++ не существует. | * Общепринятой реализации свойств в C++ не существует. | ||
* Свойства экземпляра используются, но реализация варьируется в разных библиотеках (например, Qt имеет один способ, другие библиотеки - другой). | * Свойства экземпляра используются, но реализация варьируется в разных библиотеках (например, 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 имеет один способ, другие библиотеки - другой).
- Самый простой способ реализовать свойство: написать функцию, которая возвращает значение свойства.