Необходимость компромисса между производительностью и удобством сопровождения стала к тому времени очевидна. Для некоторых приложений реального времени или с интенсивными вычислениями вопрос о переходе к объектно-ориентированным приложениям даже не возникает из-за строгих временных требований. Однако если применение ООП допустимо, программисты могут создавать многократно используемые и более интуитивные программы, чем когда-либо прежде. Это улучшает читаемость кода, благоприятствует его повторному использованию, сопровождению и трассировке.
С развитием ООП появились новые методологии управления проектами и проектирования программного обеспечения, такие как небезызвестное «экстремальное программирование» (extreme Programming) и «единый процесс» (Unified Process). Стало легче оценивать и планировать проекты, распределять тестировать и разбирать код больших проектов. В действительности внедрение ООП оказало значительное влияние на современный мир, управляемый электроникой. Такие технологии, как Java, развили ООП в предельной степени, предлагая единое ОО-решение для разработки программ управления устройствами, мощных веб-приложений и приложений для настольных компьютеров с помощью промышленного API.
Сравнение функциональных и объектно-ориентированных программ
Так в чем отличие между функциональными программами и ООП? Создавая код приложения при помощи функций, мы получаем программы, ориентированные на код (code-centric). Такие приложения последовательно вызывают функции одну за другой. На вход посылаются данные, затем функция осуществляет их фактическое преобразование и после возвращает соответствующий результат. В ООП принят противоположный подход, ориентированный на данные (data-centric). Объекты, представляющие свои данные внутренним образом, содержат функции, которые называются методами.
Метод - это сервис (весьма сходный с реализацией функции), который объект гарантированно предоставляет своим клиентам (другим объектам). Когда один объект запрашивает сервис у другого, он, по существу, посылает сообщение и получает ответ. Вот сравнение этих двух подходов (рис.
Входные данные поступают в функцию которая вызывает функцию и выводит результат на выход а(). Функция о() вызывает с() и выводит результат на выход Ь(). Функция с() возвращает свой результат в Ь(), которая возвращает свой результат в а (). Функция а () в конечном итоге порождает результат выполнения программы. Функция а( )в типичной программе на С называется main. В объектно-ориентированной модели одни объекты запрашивают сервисы у других, что видно, когда Object 1 запрашивает сервис у объекта Object 3. Object 3, в свою очередь, запрашивает сервис у объекта Object 4, и так далее, пока Object 1 не получит от Object 3 ответ с конечным результатом.