Найти в Дзене

Как изучить основы ООП за один присест при помощи ИИ

Конспекты помогают лучше усвоить прочитанный материал, развивают умение выделять главное, способствуют углублению и расширению знаний.
Составляя конспект, следует записывать название книги или статьи, выходные данные, автора, краткие выводы и цитаты. Хороший конспект должен быть составлен так, чтобы в нем было отмечено самое существенное в данной книге или статье. Надо уметь составлять краткие конспекты на каждую книгу, прочитанную по специальности. Это крайне важно для всестороннего развития молодого коммуниста.
(С) ЛЕНИН, модель ИИ от группы «Свободное время».
Ленин в процессе составления конспекта "Логики" Гегеля.
Ленин в процессе составления конспекта "Логики" Гегеля.

Продолжая эксперименты с ИИ Mistral 7B за сегодня был получен художественный рассказ про генерала Бульдеева и его разболевшийся зуб (по мотивам рассказа "Лошадиная фамилия" А.П. Чехова). Рабочее название: "Зубная дилемма генерала Булдеева" в которой обыгрывается участие в решении проблемы генерала некоего чиновника, отличающегося особым талантом - заговаривать людям зубы.

Но об этом, может быть я расскажу как-нибудь в другой раз. А сегодня, как мне кажется нужно сосредоточиться на более практичных вещах. Изучим такую тему Python, которая востребована во многих рабочих задачах и в то же время я её ещё не освоил, она была за рамками пройденного мной недавно интенсива.

Идея использования ИИ при этом следующая. Я задаю вопросы Mistral 7B по интересующей меня теме. Он даёт ответы, а я на основе полученного материала задаю новые вопросы, разворачивая тему. Затем весь наш диалог отправляется на обработку Chat-GPT 3.5 с такой вводной:

Был получен текст беседы студента, задающего вопросы, и преподавателя, отвечающего на них. Поработайте редактором, чтобы составить на их основе краткий обзор по теме объектно-ориентированного программирования (инкапсуляция, наследование и полиморфизм). Вы можете внести свои собственные правки, чтобы лучше передать смысл и сделать его удобочитаемым.

В этот раз для Mistral 7B у меня появилась новая роль. Я ему написал, что он говорящая книга по языку программирования Python, которая так же знает как понимать команды пользователя, открывая себя на странице, которая наилучшим образом соответствует его запросам.

Программа чат-бота версии 0.3
Программа чат-бота версии 0.3

Приведу несколько примеров нашего диалога. Отмечу, что не все из них были удачными. Эта модель склонна порой к совершенно непредсказуемым и сумасбродным ответам. Но не беда, ибо в нашем тандеме есть кому следить за здравым смыслом.

Фрагмент 1, беседа на тему инкапсуляции
Фрагмент 1, беседа на тему инкапсуляции
Фрагмент 2, продолжение беседы на тему инкапсуляции
Фрагмент 2, продолжение беседы на тему инкапсуляции
Фрагмент 3, продолжение раскрытия темы инкапсуляции
Фрагмент 3, продолжение раскрытия темы инкапсуляции
Фрагмент 4, всё ещё инкапсуляции, пояснения
Фрагмент 4, всё ещё инкапсуляции, пояснения
Фрагмент 5, переход к наследованию
Фрагмент 5, переход к наследованию

В итоге получилось объёмисто и я скормил этот текст ChatGPT разделив его на две части.

Фрагмент, отправка на обработку первой части статьи по ООП в Python
Фрагмент, отправка на обработку первой части статьи по ООП в Python
Фрагмент, отправка на обработку второй части статьи по ООП в Python
Фрагмент, отправка на обработку второй части статьи по ООП в Python

Ну а дальше осталось внимательно прочитать текст. Хорошо отформатированный и с готовыми примерами. Которые также нужно опробовать. Для этого их можно скопировать в редактор Atom и запустить, нажав клавишу F5.

Итак, вот что у нас получилось.

>Часть 1. Введение в ООП.<

Пользователь: Здравствуйте, ассистент. Сегодня я работаю над изучением программирования на python. Не могли бы вы помочь с этим?

Ассистент: Я рад вам помочь! Вы можете приступить к выполнению своей задачи прямо сейчас или начать читать наше руководство по программированию на python.

Пользователь: Давайте начнем с краткого введения в синтаксис python.

Ассистент: Конечно! Python является объектно-ориентированным языком и как таковой позволяет программистам использовать иерархию классов для создания объектов с пользовательским поведением и переменными состояния (полями класса). Чтобы получить доступ к данным в объекте, мы можем использовать точечную нотацию, которая используется для доступа к атрибутам или методам объекта.

Пользователь: Продолжайте свой ответ, пожалуйста.

Ассистент: Чтобы создать объект, мы можем использовать специальную структуру языка Python - класс. Класс - это шаблон или план для создания объектов с определенными свойствами. Например, если вы программируете в области недвижимости и у вас много объектов, таких как квартиры или дома, то вы можете описать их характеристики, используя один класс:
Пример создания класса в Python
Пример создания класса в Python

Пользователь: Что дальше?

Ассистент: Теперь мы можем создать объект на основе этого класса:
Пример создания объектов
Пример создания объектов

Пользователь: В чем разница между классом и объектом?

Ассистент: При объявлении класса мы описываем свойства объектов. В объекте эти свойства уже настроены для использования. Позвольте мне показать вам пример:
Пример иллюстрирующий создание класса Home
Пример иллюстрирующий создание класса Home

Пользователь: Что еще вам нужно знать об объектах и классах в python?

Ассистент: Чтобы создать объект, мы используем ключевое слово class. Затем к имени этого объекта можно получить доступ с помощью точечной записи:
Пример, иллюстрирующий создание объекта house класса Home
Пример, иллюстрирующий создание объекта house класса Home
Если свойства не были инициализированы во время создания объекта, они примут значения по умолчанию.

Пользователь: Существуют ли какие-либо специальные методы, которые используются при создании класса?

Ассистент: Да, существует два типа специальных методов:
Методы, которые инициализируют объекты класса. У них есть имена, начинающиеся с символа подчеркивания (__). Мы можем использовать их для установки значений по умолчанию для свойств во время создания объекта:
Иллюстрация метода __init__, задающего начальные свойства объекта
Иллюстрация метода __init__, задающего начальные свойства объекта
Методы, определяющие поведение объектов. Например, мы можем определить метод print_home для печати свойств объекта:
Иллюстрация метода, определяющего поведение объекта
Иллюстрация метода, определяющего поведение объекта

Пользователь: Продолжайте.

Ассистент: Чтобы продолжить, давайте создадим объект на основе класса Home и вызовем метод print_home для печати его свойств:
Создание двух объектов класса Home
Создание двух объектов класса Home

Пользователь: Продолжайте.

Ассистент: Чтобы продолжить, давайте создадим объект на основе класса Home, выведем значение его свойства и установим новое значение для свойства price:
Изменение свойства объекта
Изменение свойства объекта

Пользователь: Я слышал о какой-то инкапсуляции, наследовании и полиморфизме. Что это такое и как оно применяется в данном контексте?

** Ассистент: Да, мы также кратко рассмотрим их позже в нашем руководстве. Инкапсуляция означает, что мы скрываем все внутренние свойства от внешнего использования. Наследование означает получение нового класса из существующего. Полиморфизм - это когда свойство имеет разные значения ценности или поведение в зависимости от контекста.

>Часть 2. Инкапсуляция, наследование и полиморфизм<

Инкапсуляция в объектно-ориентированном программировании

Инкапсуляция - это фундаментальная концепция объектно-ориентированного программирования (ООП), которая предполагает объединение связанных переменных и методов внутри объекта. Это помогает защитить данные от изменения внешним кодом. В Python инкапсуляция реализована с использованием экземпляров класса, которые имеют частные атрибуты, доступ к которым может получить только сам класс. Средства получения и установки могут использоваться для управления доступом к этим атрибутам.

Вот пример класса с инкапсулированными атрибутами:

Инкапсуляция на примере
Инкапсуляция на примере

В этом примере класс Person имеет инкапсулированные атрибуты __name и __age. Доступ к этим атрибутам возможен только с помощью методов getter и setter, name и age. Методы настройки обеспечивают проверку, чтобы гарантировать, что возраст находится в допустимом диапазоне.

Инкапсуляция помогает поддерживать целостность данных и предоставляет способ контролировать доступ к внутреннему состоянию объекта.

Наследование в объектно-ориентированном программировании

Наследование - еще одна важная концепция в объектно-ориентированном программировании, которая позволяет нам создавать отношения между классами. Наследование позволяет классу наследовать свойства и поведение от другого класса, известного как базовый или родительский класс.

В Python вы можете реализовать наследование, определив производный класс после базового класса в определении класса. Производный класс наследует все свойства и методы базового класса, а также может определять свои собственные уникальные свойства и методы.

Вот пример наследования в Python:

Наследование на примере
Наследование на примере

В этом примере класс Dog является производным от класса Animal. Класс Dog наследует метод eat() от класса Animal и определяет свой собственный метод speak(). Когда мы создаем экземпляр класса Dog, он может получить доступ как к унаследованному методу eat(), так и к уникальному методу speak().

Наследование допускает повторное использование кода и позволяет создавать более специализированные классы, которые наследуют общие черты и поведение от базового класса.

Полиморфизм в объектно-ориентированном программировании

Полиморфизм - это способность объекта принимать различные формы или поведение в зависимости от контекста, в котором он используется. Это позволяет нам писать код, который может работать с различными типами данных, не зная точного типа во время компиляции.

Полиморфизм в Python достигается за счет переопределения методов и перегрузки методов. Переопределение метода происходит, когда производный класс предоставляет свою собственную реализацию метода, который уже определен в базовом классе. Перегрузка метода, с другой стороны, предполагает определение нескольких методов с одинаковым именем, но разными параметрами.

Вот пример полиморфизма в Python:

Полиморфизм на примере
Полиморфизм на примере

В этом примере у нас есть форма базового класса с абстрактным методом area(). Классы Rectangle и Circle наследуются от класса Shape и предоставляют свои собственные реализации метода area(). Когда мы перебираем список фигур и вызываем метод area(), вызывается соответствующая реализация, основанная на фактическом типе объекта.

Полиморфизм обеспечивает гибкость и расширяемость кода, поскольку позволяет нам писать универсальный код, который может работать с различными типами объектов.

Я надеюсь, что это объяснение и примеры кода помогут вам понять инкапсуляцию, наследование и полиморфизм в объектно-ориентированном программировании. Дайте мне знать, если у вас возникнут еще какие-либо вопросы!

При условии внимательного чтения и проработки мы усвоили данный материал.