ЯП6 / Ответы 6 лаба
.docxОбъектно-ориентированное программирование (ООП) - это парадигма программирования, которая использует понятия объектов и их взаимодействия для описания и решения задач.
Объект - это экземпляр класса, имеющий свои данные и методы. Класс - это шаблон или описание, на основе которого создаются объекты. Он определяет свойства и методы, которые объекты могут использовать.
Ассоциация - отношение между объектами, когда один объект использует другой. Агрегация - отношение "часть-целое", когда объекты могут существовать независимо друг от друга. Композиция - сильная форма агрегации, когда объекты существуют только в рамках другого объекта. Использование - отношение между объектами, когда один объект выполняет действия другого объекта. Наследование - отношение между классами, когда класс наследует свойства и методы от другого класса. Инстанцирование - создание объекта на основе класса.
Абстракция - это процесс выделения ключевых характеристик объекта, которые необходимы для решения задачи, и игнорирование всех остальных деталей.
Инкапсуляция - это принцип ООП, который заключается в том, что данные объекта должны быть скрыты от других объектов и доступны только через методы объекта.
Модульность - это разбиение программы на отдельные модули, каждый из которых выполняет определенную функцию и может быть использован в других частях программы.
Иерархия - это отношение между объектами или классами, которые упорядочены по уровням или иерархиям.
Типизация - это принцип, в соответствии с которым каждый объект имеет определенный тип данных, которые определяют, какие операции можно выполнить с объектом.
Сохраняемость - это способность объекта сохранять свое состояние между вызовами методов и после завершения программы.
Конструктор - это метод класса, который вызывается при создании объекта. Деструктор - это метод класса, который вызывается при удалении объекта.
Методы класса - это функции, определенные в классе, которые могут изменять свойства объекта и выполнять определенные действия.
Абстрактный класс - это класс, который не может быть создан в качестве объекта, но может содержать реализацию методов и свойств, которые могут быть унаследованы дочерними классами. Он может содержать абстрактные методы, которые должны быть реализованы в дочерних классах, или может быть полностью абстрактным, т.е. содержать только абстрактные методы без реализации. Класс-интерфейс - это абстрактный класс, который определяет только интерфейс, но не содержит реализации методов. Класс-утилита - это класс, который содержит только статические методы и не может быть создан в качестве объекта.
Области видимости относятся к тому, какие части кода имеют доступ к определенным переменным и методам класса. В языках программирования есть несколько типов областей видимости: общедоступная, закрытая, защищенная и частная. Статические члены класса - это члены, которые принадлежат классу, а не экземпляру объекта. Они могут быть использованы без создания объекта и доступны всем объектам данного класса.
Модель предметной области - это абстрактная модель, описывающая объекты, которые должны быть представлены в программе. Она используется для того, чтобы разработчики и заказчики могли лучше понять требования к программе.
Модель проектирования - это способ описания, как компоненты программы взаимодействуют между собой. Она помогает разработчикам понимать, какой код нужно написать и как его нужно организовать, чтобы программа работала правильно.
Диаграммы классов - это графическое представление классов, их свойств и методов, а также связей между ними. Они используются для проектирования программ и удобны для визуализации и понимания структуры кода. Основными элементами диаграмм классов являются классы, атрибуты, методы, связи и интерфейсы.
Инкапсуляция - это принцип объектно-ориентированного программирования, который предписывает скрыть внутреннюю реализацию класса от внешнего мира. Доступ к переменным и методам класса осуществляется через публичный интерфейс.
Наследование - это механизм объектно-ориентированного программирования, который позволяет создавать новые классы на основе уже существующих классов. Класс, от которого наследуются свойства и методы, называется базовым классом или родительским классом, а класс, который наследует свойства и методы, называется производным классом или дочерним классом.
Одиночное наследование - это наследование, когда производный класс наследует свойства и методы только одного базового класса.
Множественное наследование - это наследование, когда производный класс наследует свойства и методы нескольких базовых классов.
Проблемы, возникающие при множественном наследовании, включают в себя конфликты имен методов и свойств, неоднозначность вызова методов, сложность иерархии наследования. Для решения этих проблем существуют различные подходы, например, явное указание базового класса при вызове методов, разрешение конфликтов имен через операторы разрешения области видимости (::), применение виртуального наследования.
Полиморфизм - это способность объекта использовать методы производного класса вместо методов базового класса.
Виртуальная функция - это функция, которая определяется в базовом классе, но может быть переопределена в производном классе. Это позволяет объектам производного класса использовать свои собственные версии функции, когда они вызываются через указатель на базовый класс.
Таблица виртуальных функций - это таблица, которая используется для хранения адресов виртуальных функций в классе. Каждый объект класса содержит указатель на эту таблицу, чтобы можно было вызывать правильную версию виртуальной функции при выполнении полиморфной операции.
Сериализация и десериализация объектов - это процесс преобразования объекта в последовательность байтов (сериализация) и обратное преобразование (десериализация). Этот процесс используется для сохранения объектов в файлы, передачи их по сети и т.д.
Методы сериализации объектов включают в себя два основных подхода: сериализацию в двоичном формате и сериализацию в текстовом формате. Существуют различные способы реализации сериализации, например, можно использовать XML-сериализацию или JSON-сериализацию.
Принципы SOLID - это набор принципов проектирования объектно-ориентированных программ, которые помогают создавать более гибкие, расширяемые и устойчивые к изменениям системы.
Принцип единственной ответственности (Single Responsibility Principle, SRP) гласит, что каждый объект должен иметь только одну ответственность, и все его сервисы должны быть направлены на достижение этой ответственности.
Принцип открытости/закрытости (Open/Closed Principle, OCP) утверждает, что программные сущности (классы, модули, функции и т.д.) должны быть открыты для расширения, но закрыты для изменения.
Принцип подстановки Барбары Лисков (Liskov Substitution Principle, LSP) гласит, что подклассы должны быть взаимозаменяемы с базовым классом в любом контексте, в котором используется базовый класс.
Принцип разделения интерфейса (Interface Segregation Principle, ISP) утверждает, что клиенты не должны зависеть от методов, которые они не используют. Интерфейсы должны быть разбиты на маленькие, узкоспециализированные интерфейсы, которые клиенты могут использовать по мере необходимости.
Принцип инверсии зависимостей (Dependency Inversion Principle, DIP) гласит, что модули верхнего уровня не должны зависеть от модулей нижнего уровня, а оба типа модулей должны зависеть от абстракций. Это позволяет легче менять и дополнять модули без необходимости изменения других частей системы.