Главная » Java, Структуры данных и алгоритмы » Объектно-ориентированное программирование

0

На заре эры информационных технологий компьютеры были очень дорогими и громоздкими и при этом обладали медленными процессорами небольшими объемами памяти. В силу этого они применялись в небольшом числе приложений, в основном при обработке числовых данных, и не были пригодны для обработки информации. Современные компьютеры становятся все меньше и дешевле, их процессоры — все быстрее, а память — все более вместительной. В связи с этим современные компьютеры выполняют огромное число приложений. Во многие детские игрушки, такие как поющие куклы и разговаривающие игрушки, встроены процессоры, скорость и объем памяти которых существенно превосходят первый цифровой компьютер ENIAC, занимавший целую комнату. Кроме того, еще два десятилетия назад исследователи использовали термин «суперкомпьютер» для обозначения устройств, скорость и объем памяти которых был меньше, чем у современных персональных компьютеров. Итак, современные компьютеры значительно меньше, дешевле и мощнее своих предшественников. В то же время эти характеристики предъявляют и большие требования к используемому программному обеспечению.

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

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

Цели и принципы

Уже из названия упомянутой методологии следует, что основными «действующим лицами» парадигмы объектно-ориентированного программирования являются объекты (object). Объекты принадлежат определенному классу. Классы содержат типы значений полей (field) данных, или, другими словами, переменные экземпляра класса (class instance variable), составляющие объект, а также методы (операции), которые может выполнять объект. Каждый класс представляет сжатое и унифицированное представление о входящих в него объектах, которые являются экземплярами данного класса, не вдаваясь в излишние детали и описание других сведений о внутреннем функционировании объектов. Эта идея обеспечивает достижение нескольких основных целей и объединяет ряд принципов разработки, которые рассматриваются в данном разделе.

Цели объектно-ориентированного программирования

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

Рис. 2.1. Цели объектно-ориентированного программирования

Устойчивость

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

Более того, если компьютерные приложения, используемые в сферах обеспечения жизнедеятельности, где сбой программы может стать причиной аварий, увечий или смерти, не обладают достаточной устойчивостью к девиациям исходных данных, они могут даже стать опасными. Над важностью этой характеристики программного обеспечения в полной мере задумались после того, как в 1985-1987 гг. в ходе использования прибора радиационной \ерапии Therac-25 шестеро пациентов получили очень большую дозу радиации, а некоторые из них даже умерли от возникших осложнений [64]. Все шесть случаев облучения были вызваны ошибками в программе, вызванными неверным заданием пользователем исходных данных (при вводе данных рентгенолог имел возможность набрать на экране значение дозы радиации, не удалив предыдущее).

Цель обеспечения устойчивости состоит не только в возможности справляться с неожиданными значениями входных данных. Программное обеспечение должно уметь принимать верные решения, несмотря на имеющиеся ограничения. Например, если пользователю необходимо внести в структуру данных большее количество элементов, чем было изначально задумано, программа должна увеличить объем структуры. Такая концепция устойчивости в Java представлена, например, в классе java.util.Vector, в котором описаны расширяемые массивы. Кроме того, если программа выполняет математические вычисления, в ней должно обрабатываться строго определенное количество значений. Безусловно, программа должна работать правильно при всех возможных значениях вводимых данных, в том числе в случае граничных значений, например, если целое число равно 0 или 1 или используется максимальное или минимальное допустимое значение. Однако устойчивость и правильность не возникают автоматически, они должны быть учтены и запрограммированы в самом начале разработки программы.

Адаптируемость

Современные приложения, такие как текстовые процессоры, Web-браузеры и поисковые системы Интернета, применяют большие программы, которые рассчитаны на использование в течение долгого времени. В связи с этим программное обеспечение должно иметь возможность развиваться со временем в соответствии с изменяющимися условиями среды. Эти изменения могут быть плановыми, например, ускорение работы процессоров или увеличения скорости передачи информации в сети, или непредвиденными, например, необходимость расширения возможностей программного обеспечения в связи с изменившимися рыночными условиями. Программное обеспечение должно быть в состоянии адаптироваться к различным внезапным ситуациям, которые на самом деле вполне предсказуемы, как, например, наступление нового тысячелетия и связанное с этим изменение формы записи даты[6] (проблема 2000 года). Таким образом, еще одной характеристикой качественного программного обеспечения является его адаптируемость, или, другими словами, способность к развитию. С этим же связана и мобильность программного обеспечения, которая состоит в возможности запуска приложений на разных машинах и в операционных системах различных платформ. Преимущество программ, написанных на языке Java, определяется мобильностью самого языка.

Возможность многократного использования

Идея адаптируемости тесно связана с многократным использованием программного обеспечения, при котором код применяется в качестве компонентов различных систем или приложений. Разработка качественного программного обеспечения весьма дорогостояща, однако затраты эти будут частично уменьшены, если создаваемые продукты смогут применяться в других приложениях и последующих приложениях. Однако к повторному использованию следует относиться очень осторожно, так как основным источником сбоев программы в Therac-25 стало использование программ, выполнявшихся на Therac-20 (которые не были пригодны для работы на аппаратном обеспечении Therac-25). Итак, чтобы выяснить, обладает ли программное обеспечение в полной мере возможностью повторного применения, необходимо точно знать его возможности. В этом случае повторное использование может стать важнейшим средством экономии средств и времени.

Источник: Гудрич М.Т. Г93 Структуры данных и алгоритмы в Java / М.Т. Гудрич, Р. Тамассия; Пер. с англ. A.M. Чернухо. — Мн.: Новое знание, 2003. — 671 е.: ил.

По теме:

  • Комментарии