Реализация на языке C++: различия между версиями
Материал из LERNADO: Информатика и техники
Нет описания правки |
|||
| (не показано 8 промежуточных версий этого же участника) | |||
| Строка 1: | Строка 1: | ||
<iframe key="lernbase" level="video" path="videos/embed/hfJRLJ7u7n5fHoXqgXAJ5a?subtitle=ru&muted=1" width="800" height=" | <iframe key="lernbase" level="video" path="videos/embed/hfJRLJ7u7n5fHoXqgXAJ5a?subtitle=ru&muted=1&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 имеет один способ, другие библиотеки - другой).
- Самый простой способ реализовать свойство: написать функцию, которая возвращает значение свойства.