Файл: Применение объектно-ориентированного подхода при проектировании информационной системы (ПОНЯТИЕ И СУЩНОСТЬ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПОДХОДА).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 17.06.2023

Просмотров: 53

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Второй «столп» разработки объектно-ориентированным подходом — полиморфизм. Бьерн Страуструп, создатель языка C++, сформулировал определение полиморфизма так: «Один интерфейс — много реализаций». Вкратце, полиморфизм — это возможность создавать абстрактный класс, который описывает общую конструкцию структуры, а от него уже создаются производные классы, реализующие недостающие механизмы. Например, при создании персонажа компьютерной игры, с точки зрения объектно-ориентированного подхода, логично будет сначала реализовать абстрактный класс Person, и от него уже создавать конкретные классы: Archer, Healer, Warrior и так далее.

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

Решает эту проблему объектно-ориентированный подход. Классы создаются не для каждого конкретного объекта, а вначале проектируется абстрактный класс, и от него создаются классы-наследники. Как и инкапсуляция, полиморфизм это второе важнейшее правило ООП[6].

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

Вместо этого можно сказать, что мотоцикл является классом-наследником от машины. Тогда становится возможным использовать схожие поля и методы машины в классе мотоцикла, например, марку, цвет, скорость. В коде наследование обозначается так: class Motocycle : Car { /*…остальной код программы...*/ }

Теперь поля и методы класса-родителя Car доступны для использования в классе-наследнике Motorcycle. Вкратце, наследование — это механизм повторного использования кода, и нацелен на удобное и логически грамотное расширение программы. Также наследование помогает следовать принципу DRY (Do not Repeat Yourself).

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


Если в коде есть повторяющиеся участки, значит, его надо оптимизировать — вынести повторы в отдельные методы, и вызывать их по надобности; применить наследование к логически похожим объектам, в которых есть идентичные поля и методы.

1.3. Преимущества и недостатки объектно-ориентированного подхода

Теперь поговорим о свойствах, которые приобретает программа при использовании объектно-ориентированного подхода к ее проектированию и кодированию.

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

Наследование. В объектно-ориентированном программировании есть возможность наследовать структуру и поведение класса от другого класса.

Абстрагирование. Возможность объединять классы в отдельные группы, выделяя общие, значимые для них всех характеристики (общие поля и общее поведение).

Полиморфизм. Еще одно свойство, которое является следствием наследования. Дело в том, что объектно-ориентированные языки программирования позволяют работать с набором объектов из одной иерархии точно так же, как если бы все они были объектами их базового класса.

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

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

Интерфейс. В некоторых языках программирования (C#, Java) понятие интерфейса выделено явно - это не только открытые методы и свойства самого класса.

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

Главным минусом использования ООП можно назвать громоздкость при решении простых задач. Сравни, например, два участка кода, написанного на PHP. Первый пример – процедурный код, второй – объектно-ориентированный. И тот, и другой скрипт ведут к одному результату: просто выводят на экран фразу “Hello, world”:

Скрипт №1


<?php

print “Hello, world”:

Скрипт №2

<?php

class helloWorld {

function myPrint() {

print “Hello, world.”;

}

}

$myHelloWorld = new helloWorld();

$myHelloWorld->myPrint();

Показательно, не правда ли? С другой стороны, у ООП есть очень большой плюс: такой код удобнее поддерживать, изменять и обслуживать, так как он разбит на модули, которые проще воспринимаются визуально. Да, и ошибок меньше. Кроме того, объектно-ориентированные языки программирования легче изучаются новичками.

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

ГЛАВА 2. РЕАЛИЗАЦИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПОДХОДА ПРИ ПРОЕКТИРОВАНИИ ИНФОРМАЦИОННОЙ СИСТЕМЫ

2.1. Средства объектно-ориентированного подхода

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

Первый способ - это структурное проектирование, которое базируется на алгоритмической декомпозиции, второй - объектно-ориентированное проектирование, основанное на объектно-ориентированной декомпозиции. При алгоритмической декомпозиции система разбивается на элементарные подсистемы, каждая из которых выполняет определенный шаг общего алгоритма. Объектная декомпозиция основное внимание уделяет объектам, каждый из которых моделирует поведение и свойства определённого объекта реального мира[8].

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


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

Практика показывает, что время разработки и размер кода действительно сокращаются. Но с другой стороны существуют дополнительные накладные расходы, связанные с затратами на пересылку сообщения от одного объекта к другому. Согласно статистике, на вызов метода требуется в 1.75 - 2.5 раза больше времени, чем на вызов процедуры.

Кроме того, потеря производительности происходит из-за большого количества наследуемого кода. Так же проблемой является динамическое размещение и удаление объектов, поскольку выделение памяти из кучи вызывает дополнительные вычислительные расходы. Но обычно положительные свойства объектно-ориентированных систем нивелируют недостатки, описанные выше, и производительность программы, написанной с использованием объектно-ориентированного подхода чаще выше, чем у её аналога написанного при помощи структурного[9].

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

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

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

Выделяют три основных типа отношений между классами. Первый, называемый “is-a” или «обобщение/специализация», характеризуется наличием какого-то подкласса, являющегося частным случаем какого-то более общего класса. Например, подкласс кошки является частью класса животные.

Второй, называемый “part of” или “целое/часть”, используется тогда, когда какой-то объект является частью другого объекта, хвост является частью кошки.


Третий тип - это смысловое отношение или ассоциации. Кошка ассоциируется с домом, потому что является домашним животным. И иерархия классов, и иерархия объектов является многоуровневой, причем классы и объекты более высокого уровня строятся из более простых[10].

Это позволяет разрабатывать довольно сложное системы по частям, выполняя декомпозицию системы поэтапно.

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

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

Итак, объектно-ориентированный язык программирования (ОО-язык) — язык, построенный на принципах объектно-ориентированного программирования. В основе концепции объектно-ориентированного программирования лежит понятие объекта — некой сущности, которая объединяет в себе поля (данные) и методы (выполняемые объектом действия). Например, объект человек может иметь поля имя, фамилия и методы есть и спать. Соответственно, в программе можем использовать операторы Человек.Имя:="Иван" и Человек.Есть(пища). В современных ОО языках используются механизмы: − Наследование. Создание нового класса объектов путём добавления новых элементов (методов). Некоторые ОО языки позволяют выполнять множественное наследование, то есть объединять в одном классе возможности нескольких других классов. − Инкапсуляция. Сокрытие деталей реализации, которое позволяет вносить изменения в части программы безболезненно для других её частей, что существенно упрощает сопровождение и модификацию ПО.

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

Таким образом, интерфейс классов остаётся прежним, а реализация методов с одинаковым названием и набором параметров различается. В ООП обычно применяется полиморфизм подтипов(называемый при этом просто «полиморфизмом»), нередко в форме позднего связывания. [1, c.880]

Неполный список объектно-ориентированных языков программирования: