Skip to content
Zeber0 edited this page Jan 13, 2023 · 17 revisions

Понятие наследования в объектно-ориентированном подходе, связь с понятием и методами классификации.

Проверил: Ращенко Алексей

Введение и терминология

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

img

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

img

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

img

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

Третье отличие заключается в структурной организации внутри системы. В алгоритмическом подходе модули связаны лишь очередностью и входами/выходами в порядке последовательности. В структурном подходе модуль состоит из функций, иерархически связанных между собой отношением композиции (англ. part-of – часть-целое), т. е. функция состоит из подфункций, подфункция из подподфункций и т.д. В объектно-ориентированном подходе иерархия выстраивается с использованием двух отношений: композиции и наследования (англ. is-a – это есть). При этом в объектно-ориентированном подходе «объект-часть» может включаться сразу в несколько «объектов-целое». Таким образом, модуль в структурном подходе представляется в виде дерева, а в объектно-ориентированном подходе – в виде ориентированного графа, т. е. с помощью более общей структуры.

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

img

Для понимания концепции наследования необходимо определить терминологию:

Класс – это способ описания сущности, определяющий состояние и поведение, зависящее от этого состояния, а также правила для взаимодействия с данной сущностью.

Наследование – это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью.

Родительский класс (Суперкласс или Предок) — класс, от которого производится наследование в подклассах, т. е. класс, передавший свой функционал(свое поведение) в другие классы.

Дочерний класс (Подкласс или Потомок) — класс, наследуемый от родительского класса, т. е. класс получивший при своем определении поведение родительского класса.

Базовый класс — это класс, находящийся на вершине иерархии наследования классов и в основании дерева подклассов, т. е. не являющийся дочерним классом и не имеющий наследований от других родительских классов Базовым классом может быть абстрактный класс. Любой не базовый класс является подклассом.

Абстрактный класс — это базовый класс, которые можно наследовать, но нельзя реализовывать. То есть на их основе нельзя создать объект.

Интерфейс — это набор методов класса, доступных для использования другими классами. С формальной точки зрения, — это просто чистый абстрактный класс, то есть класс, в котором не определено ничего, кроме абстрактных методов.

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

Виды наследования

Простое наследование

«Простое» наследование, иногда называемое одиночным наследованием, описывает родство между двумя классами: один из которых наследует второму. Из одного класса могут выводиться многие классы, но даже в этом случае подобный вид взаимосвязи остается «простым» наследованием.

Множественное наследование

При множественном наследовании, у класса может быть более одного предка. В этом случае класс наследует функционал всех своих предков. Достоинства такого подхода в большей гибкости.

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

img

Понятие классификации, ее методы и связь с наследованием

Классификация – это система распределения объектов (предметов, явлений, процессов, понятий) направленный на организацию некоторой совокупности изучаемых объектов различных областей действительности, знания и деятельности, в систему соподчинённых групп (классов), по которым эти объекты распределены на основании их сходства в определённых сущностных свойствах.

Фасетный метод

Фасетный метод предусматривает параллельное разделение множества объектов на отдельные независимые одна от другой группы или фасеты, по одному из признаков в каждой. Этот метод наиболее эффективен для машинной обработки данных, при использовании технологии БД и языков запросов высокого уровня.

img

Иерархический метод

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

img

Каждая разновидность методов классификации характеризуется определенными преимуществами и недостатками, знание которых позволяет рационально применять эти методы с учетом целевого назначения.

img

От классификации можно относительно просто провести параллель к наследованию: В фасетном методе классификации наследование заключается в введении ограничений на дочерние сущности. Иерархический метод классификации в свою очередь образно идентичен наследованию в обьектно-ориентированном программировании, где классы организованы в единую древовидную структуру с общим корнем, называемую иерархией наследования.

Примеры

Классификация на примере стандарта обмена, управления и интеграции электронной медицинской информации Health Level 7 (HL7). Все сообщения внутри стандарта снабжаются заголовками, в заголовке есть поле "Message code", обозначения которых содержатся в отдельной таблице: img img

Фасетная классификация и её наследование на примере интернет-магазина Ozon(На классификационной группе "Страна производитель:Россия" после наследования от родительской "Телевизоры" установлены ограничения на значения атрибутов):

img

Построение иерархии классов и процесс уменьшения уровня абстракции при наследовании:

img

img

Список литературы

Наследование (программирование) - https://ru.wikipedia.org/wiki/Наследование_(программирование)

Наследование и ещё немного полиморфизма - https://fuzeservers.ru/programming/cto-takoe-virtualnyj-bazovyj-klass-v-c.html

Классификация - https://gtmarket.ru/concepts/6879

Методы классификации - https://student-servis.ru/spravochnik/metody-klassifikatsii/

Объектный подход к разработке программного обес­печения - https://technologiarpo.blogspot.com/p/blog-page_94.html

Объектно-ориентированное проектирование и программирование/Основы объектно-ориентированного проектирования - https://ru.wikiversity.org/wiki/Объектно-ориентированное_проектирование_и_программирование/Основы_объектно-ориентированного_проектирования

Методы программирования - https://slide-share.ru/metodi-programmirovaniya-2-semestr-104874

HL7 — электронный медицинский документооборот - https://habr.com/ru/post/139904/

HL7 definition - https://hl7-definition.caristix.com/v2/

Clone this wiki locally