Файл: Применение объектно-ориентированного подхода при проектировании информационной системы (Основные достоинства и недостатки подхода объектно-ориентированного подхода).pdf

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

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

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

Добавлен: 19.06.2023

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

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

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

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

Многоразового использования программного обеспечения на практике добиться не удается из-за того, что существующие компоненты уже не отвечают новым требованиям. ООП помогает этого достичь без нарушения работы уже имеющихся клиентов, что позволяет нам извлечь максимум из многоразового использования компонент [14, c.125].

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

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

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

2.2 Недостатки подхода

Объектно-ориентированное программирование требует знания четырех вещей.

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

2) Многоразовое использование требует от программиста познакомиться с большими библиотеками классов. А это может оказаться сложнее, чем даже изучение нового языка программирования. Библиотека классов фактически представляет собой виртуальный язык, который может включать в себя сотни типов и тысячи операций. В языке Smalltalk, к примеру, до того, как перейти к практическому программированию, нужно изучить значительную часть его библиотеки классов. А это тоже требует времени.

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

4) Очень трудно изучать классы, не имея возможности их «пощупать». Только с приобретением опыта можно уверенно себя почувствовать при работе с использованием ООП [7, c.142].


Усилия на освоение базовых концепций невелики, но вот в случае библиотек классов и их использования они могут быть очень существенными.

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

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

В сложных иерархиях классов поля и методы обычно наследуются с разных уровней. И не всегда легко определить, какие поля и методы фактически относятся к данному классу. Для получения такой информации нужны специальные инструменты вроде навигаторов классов. Если конкретный класс расширяется, то каждый метод обычно сокращают перед передачей сообщения базовому классу. Реализация операции, таким образом, рассредоточивается по нескольким классам, и чтобы понять, как она работает, нам приходится внимательно просматривать весь код [15, c.73].

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

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

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


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

1) Неэффективность на этапе выполнения. В языках типа Smalltalk сообщения интерпретируются во время выполнения программы путем осуществления поиска их в одной или нескольких таблицах и за счет выбора подходящего метода. Конечно, это медленный процесс. И даже при использовании наилучших методов оптимизации Smalltalk-программы в десять раз медленнее оптимизированных C-программ [6, c.82].

В гибридных языках типа Oberon-2, Object Pascal и C++ посылка сообщения приводит лишь к вызову через указатель процедурной переменной. На некоторых машинах сообщения выполняются лишь на 10% медленнее, чем обычные процедурные вызовы. И поскольку сообщения встречаются в программе гораздо реже других операций, их воздействие на время выполнения влияния практически не оказывает.

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

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

3) Излишняя универсальность. Неэффективность может также означать, что программа имеет ненужные возможности. В библиотечном классе часто содержится больше методов, чем это реально необходимо. А поскольку лишние методы не могут быть удалены, то они становятся мертвым грузом. Это не воздействует на время выполнения, но влияет на возрастание размера кода [16, c.94].

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


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

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

3. Обзор программных средств для реализации объектно-ориентированного программирования

3.1 Объектно-ориентированные языки высокого уровня

Впервые объектно-ориентированное программирование начало применяться в языке Simula 67, который оказал большое влияние на развитие таких языков, как Lisp и Smalltalk. Но наибольшее развитие ООП получил в середине 90-х, когда был создан «классик ООП» C++, работу которого с объектами переняли популярные среды программирования Delphi и VisualFoxPro. ООП продолжает развиваться, и среди новых парадигм можно выделить аспектно-ориентированную и субъектно-ориентированную парадигму. Каждый объектно-ориентированный язык расширяет базовые понятия ООП уникальными дополнениями и расширениями, в зависимости от специфики использования [1, c.72]

Рассмотрим примеры языков программирования высокого уровня, которые относятся к категории объектно-ориентированных. В числе таковых — Visual Basic, Delphi, Visual Fortran, C++, а также Prolog ++. Фактически все они в своей основе содержат процедурно-ориентированные языки. Однако предполагается существенное их дополнение визуальными элементами управления с целью последующего освоения необходимых алгоритмов разработчиками, привыкшими к другим инструментам. Так, первый язык программирования высокого уровня — Фортран — может быть в оперативные сроки изучен IT-специалистами посредством возможностей Visual Fortran. Аналогичным методом можно быстро освоить Бейсик или Пролог.

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

Языки, принадлежащие семейству С, являются частными конструкциями C. Так, его дополнение различными объектно-ориентированными компонентами привело к разработке C++. После существенной фильтрации ряда конструкций C появился язык Java. Можно отметить, что Java создавался во многом под влиянием концепций проекта Oberon, которым руководит Никлаус Вирт, создатель языка Паскаль. Относится ли к высокоуровневым JavaScript? Безусловно, да, несмотря на узость применения — в качестве инструмента разработки веб-страниц. Но к языкам программирования высокого уровня не относятся, в частности, HTML, XML и SGML. Они классифицируются как инструменты разметки гипертекста [17, c.125].


В основе среды разработки лежит подмножество языка Pascal с элементами ООП - Object Pascal. Среда и язык Delphi были первой графической средой разработки программ для MS Windows. Объектно-ориентированное программирование delphi есть набор стандартных абстрактных классов, инкапсулирующих в себе определенные элементы Windows-программы, такие как графический интерфейс, работа с оперативной памятью и т. д. Delphi оказал значительное влияние на развитие всех объектно-ориентированных языков, особенно на язык C# для среды разработки .NET компании Microsoft. Последняя версия Delphi 8 работает только с .NET.

PHP является одним из самых популярных языков для веб-разработки и первоначально представлял собой полностью процедурный язык программирования. Поэтому объектно-ориентированное программирование на php появилось позднее, начиная с четвертой версии. Необходимость поддерживать оба стиля программирования – процедурный и объектно-ориентированный - привела к тому, что элементы ООП до сих пор являются дополнением, а не основой языка. Но ситуация стремительно меняется в сторону объектного PHP. Версия PHP 5 полностью поддерживает все элементы ООП, и разработчик имеет полную свободу в создании собственных классов и объектов, в отличие от Delphi, где разработчик так или иначе должен использовать стандартные классы со всеми их возможными недостатками. Синтаксис объектных элементов PHP не представляет сложности программистам, ранее работающим на C++/# и Delphi [2, c.103].

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

3.2 Основные характеристики программных средств, используемых для реализации объектно-ориентированного подхода

Delphi — среда разработки прикладных программ, которые предназначены для запуска в ОС Windows, MacOS, а также в мобильных операционных системах — iOS и Android. Характеризуется простотой языка и процедур генерации кода.