SoftCraft
разноликое программирование

Отправная точка
Программирование
Windows API
Автоматы
Нейроинформатика
Парадигмы
Параллелизм
Проектирование
Теория
Техника кодирования
Трансляторы
Прочие вопросы

Разное

Беллетристика
Брюзжалки
Цели и задачи
Об авторе

Сервис

Форум
Подписка на новости


Объектно-ориентированный подход действительно лучше структурного


[ <<< | 1 | 2 | 3 | 4 | 5 | 6 | >>> ]


Почему объектная ориентация работает

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

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

Объектная ориентация работает на более высоком уровне абстракции

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

Жизненный цикл объектно-ориентированный программы не требует никаких "прыжков"

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

Рис. 2. Каскадный ("прыжковый") подход к разработке программного обеспечения.

Данные стабильнее функций

Функции - менее стабильная часть системы, чем данные. Через какое-то время, требования к системе подвергаются радикальным изменениям:

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

В ходе всех этих изменений основа системы остается сравнительно постоянной. Эта основа - данные. Например, отчеты и формы для сбора данных могут изменяться со временем, но тот факт, что программное обеспечение для сбора и подготовки данных должно иметь дело с доходом, расходами, выводами, таблицами и т.д., остается незыблемым. Реляционная система управления базами данных (РСУБД) может использовать более эффективные схемы индексации или новые языки управления для доступа к данным, но тот факт, что РСУБД должна иметь дело с таблицами, индексами, схемами и соотношениями, остается неизменным. Это означает что система, сформированная на основе "структурных совокупностей, реализуемых абстрактными типами данных" (см. выше) будет способна продолжить использовать тех же самых типов данных (классов) в ходе всего жизненного цикла программы. Функциональные реализации классов изменятся, но "Инкапсуляция и сокрытие информации работают вместе, чтобы изолировать одну часть системы от других, позволяя коду быть модифицируемым и расширяемым, а ошибки можно зафиксировать без риска ввести ненужные и непреднамеренные побочные эффекты."

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

Усиление роли хороших методов программирования

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

Это не должно говорить о том, что объектно-ориентированное программирование - панацея; здесь нет ничего волшебного, что могло бы обеспечить создание совершенного проекта или совершенного кода. Но, поднимая степень абстракции от функционального уровня к уровню объекта и сосредотачиваясь на реальных аспектах системы, объектно-ориентированная методология делает проектирование более ясным, что облегчает реализацию, а также обеспечивает лучшее взаимодействие. Использование объектно-ориентированного языка не является строго необходимым, чтобы достичь этого эффекта. Однако, объектно-ориентированный язык (например, C++, Smalltalk или Eiffel) вносит дополнительную поддержку объектно-ориентированному проектированию, упрощает производство более модульного и многократно используемого кода через понятия класса и наследования.

Проектирование, опирающееся на данные, поддерживает многократное использование кода

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


[ <<< | 1 | 2 | 3 | 4 | 5 | 6 | >>> ]



Статьи



Облицовки каминов




все квартиры ул. Левитана в базе недвижимости