Программирование и ООП Flashcards
Что такое объект?
Отдельный представитель класса, имеющий конкретное состояние и поведение, полностью определяемое классом.
Говоря простым языком, объект имеет конкретные значения атрибутов и методы, работающие с этими значениями на основе правил, заданных в классе.
Что такое класс?
Класс - шаблон, на базе которого можно построить объект в программировании. Например, у интернет-магазина может быть класс «Карточка товара», который описывает общую структуру всех карточек. И уже из него создаются конкретные карточки — объекты.
Способ описания сущности, определяющий состояние и поведение, зависящее от этого состояния, а также правила для взаимодействия с данной сущностью (контракт).
С точки зрения программирования класс можно рассматривать как набор данных (полей, атрибутов, членов класса) и функций для работы с ними (методов).
С точки зрения структуры программы, класс является сложным типом данных.
Что такое метод?
Метод - функция внутри объекта или класса
ООП. Что такое атрибут?
Характеристики объекта в программировании.
В классе прописывают, что такие атрибуты есть, а в объектах с помощью методов заполняют эти атрибуты данными.
Например, цена, производитель или объём оперативной памяти.
Что такое инкапсуляция?
Суть: все данные и методы необходимые для работы объекта должны находиться внутри объекта и не должны быть доступны снаружи.
…
Доступ к методам и переменным ограничивается, что предотвратит изменение данных извне.
Вся информация, которая нужна для работы конкретного объекта, должна храниться внутри этого объекта. Если нужно вносить изменения, методы для этого тоже должны лежать в самом объекте — посторонние объекты и классы этого делать не могут. Для внешних объектов доступны только публичные атрибуты и методы.
Например, метод для внесения данных в карточку товара должен обязательно быть прописан в классе «Карточка товара». А не в классе «Корзина» или «Каталог товаров».
Такой принцип обеспечивает безопасность и не даёт повредить данные внутри какого-то класса со стороны. Ещё он помогает избежать случайных зависимостей, когда из-за изменения одного объекта что-то ломается в другом.
Что такое наследование?
Наследование — Функциональность дочернего класса наследуются от уже родительского класса.
В этом принципе — вся суть объектно-ориентированного программирования.
Разработчик создаёт:
● Класс с определёнными свойствами;
● Подкласс на его основе, который берёт свойства класса и добавляет свои;
● Объект подкласса, который также копирует его свойства и добавляет свои.
Каждый дочерний элемент наследует методы и атрибуты, прописанные в родительском. Он может использовать их все, отбросить часть или добавить новые. При этом заново прописывать эти атрибуты и методы не нужно.
Например, в каталоге товаров:
У класса «Карточка товара» есть атрибуты тип товара, название, цена, производитель, а также методы «Вывести карточку» и «Обновить цену».
Подкласс «Смартфон» берёт все атрибуты и методы, записывает в атрибут «тип товара» слово «смартфон плюс добавляет свои атрибуты — «Количество сим-карт» и «Ёмкость аккумулятора».
Объект «Смартфон Xiaomi 11» заполняет все атрибуты своими значениями и может использовать методы класса «Карточка товара».
Наследование хорошо видно в примере кода выше, когда сначала создавали класс, потом подкласс, а затем объект с общими свойствами.
Что такое полиморфизм?
Суть: метод может работать по-разному в зависимости от объекта, где он вызван (разные страницы), и данных, которые ему передали.
Свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
Пример:
Удаление вызванное с разных страниц удаляет сущности связанные с этой страницей
Полиморфизм - возможность схожим типам данных, которые явно заданы иерархией наследования иметь различные реализации (с помощью переопределения методов и апкаста)
Например, метод «Удалить» при вызове в корзине удалит товар только из корзины, а при вызове в карточке товара — удалит саму карточку из каталога.
То же самое с объектами. Можно использовать их публичные методы и атрибуты в других функциях и быть уверенным, что всё сработает нормально.
Этот принцип ООП, как и другие, обеспечивает отсутствие ошибок при использовании объектов.
Преимущества ООП?
- Переиспользуемый код
- Легче работать в команде
- Легче писать
- Легче читать
- Легче обновлять
- Шаблоны проектирования
● В парадигме объектов легче писать код. Удобно один раз создать класс или метод, а потом его использовать. Не нужно повторно переписывать десятки строк кода. Можно пользоваться специальными рекомендациями по написанию ООП-кода — SOLID.
● Читать код гораздо проще. Даже в чужом коде обычно сразу видны конкретные объекты и методы, их удобно искать, чтобы посмотреть, что именно они делают.
● Код легче обновлять. Класс или метод достаточно изменить в одном месте, чтобы он изменился во всех наследуемых классах и объектах. Не нужно переписывать каждый объект отдельно, выискивая, где именно в коде он расположен.
● Программистам удобнее работать в команде. Разные люди могут отвечать за разные объекты и при этом пользоваться плодами трудов коллег.
● Код можно переиспользовать. Один раз написанный класс или объект можно затем переносить в другие проекты. Достаточно однажды написать объект «Кнопка заказа» и потом можно вставлять его в почти неизменном виде в разные каталоги товаров и мобильные приложения.
● Шаблоны проектирования. Именно на базе ООП построены готовые решения для взаимодействия классов друг с другом, которые позволяют не писать этот код с нуля, а взять шаблон.
Недостатки ООП?
● Сложность в освоении. ООП сложнее, чем функциональное программирование. Для написания кода в этой парадигме нужно знать гораздо больше. Поэтому перед созданием первой рабочей программы придётся освоить много информации: разобраться в классах и наследовании, научиться писать публичные и внутренние функции, изучить способы взаимодействия объектов между собой.
● Громоздкость. Там, где в функциональном программировании хватит одной функции, в ООП нужно создать класс, объект, методы и атрибуты. Для больших программ это плюс, так как структура будет понятной, а для маленьких может оказаться лишней тратой времени.
● Низкая производительность. Объекты потребляют больше памяти, чем простые функции и переменные. Скорость компиляции от этого тоже страдает.
Что такое абстракция?
Суть: скрытие деталей работы объекта. Нам не нужно знать как работает объект, чтобы им пользоваться
Процесс выделения общих характеристик и функциональности объектов или системы, игнорируя детали реализации.
Позволяет скрывать сложность и детали нижележащего кода.
Абстракция в ООП означает скрытие деталей реализации объекта и предоставление только необходимой информации для работы с ним. Например, когда вы используете машину, вам не обязательно знать, как работает каждая ее часть, важно лишь уметь управлять ей. То есть абстрагирование позволяет упростить работу с объектами, скрыть сложности и облегчить их использование.
https://tproger.ru/articles/osnovnye-principy-oop-abstrakciya-v-programmirovanii
Что такое ООП?
Суть стандарт написания кода в основе которой лежат объекты, имеющие атрибуты и методы, что позволяет объектам взаимодействовать между собой.
Принципы
- Инкапсуляция
- Наследование
- Полиморфизм
Например, нужно написать для интернет-магазина каталог товаров. Руководствуясь принципами ООП, в первую очередь нужно создать объекты: карточки товаров. Потом заполнить эти карточки данными: названием товара, свойствами, ценой. И потом прописать доступные действия для объектов: обновление, изменение, взаимодействие.
Что такое парадигма?
Парадигмой называют набор правил и критериев, для написания кода. (Стандарт написания кода)
Если представить, что код — это рецепт блюда, то парадигма — то, как рецепт оформлен в кулинарной книге. Парадигма помогает стандартизировать написание кода.
Это снижает риск ошибок, ускоряет разработку и делает код более читабельным для других программистов.
Что такое SOLID?
SOLID - это принципы позвляющие получить масштабируемый и поддерживаемый код
SOLID - S?
S - Single Responsibility Principle (принцип единственной ответственности).
Для каждого класса должно быть определено единственное назначение. Все ресурсы, необходимые для его осуществления, должны быть инкапсулированы в этот класс и подчинены только этой задаче.
Я повар, садовник, маляр и водитель
vs
- Я повар
- Я садовник
- Я маляр
- Я водитель
SOLID - O?
O - Open closed Principle (принцип открытости-закрытости)
Классы должны быть открыты для расширения, но закрыты для изменения.
Если нужно добавить новую функциональность, мы должны это делать путем создания нового класса или метода, а не менять существующий код. Это позволяет избежать возможности случайных ошибок и сохранить стабильность уже работающего кода.