- •Тема 4. Основные методы программирования
- •Архитектура по
- •Принцип декомпозиции по.
- •Алгоритмическое (или линейное) программирование
- •Для алгоритмического описания способа решения задачи в виде конечной (по времени) последовательности действий характерны:
- •Методика нисходящего (структурного) программирования
- •Процедуры и функции
- •Функции
- •Тенденции в истории развития языков программирования.
- •Объектно-ориентированное программирование
Объектно-ориентированное программирование
В объектно-ориентированной декомпозиции мир представлен совокупностью автономных действующих сущностей, которые взаимодействуют друг с другом, чтобы обеспечить поведение системы, соответствующее более высокому уровню [41]. При этом, каждый объект системы обладает своим собственным поведением, и каждый из них моделирует некоторый объект реального мира [25]. Объект является вполне осязаемой вещью, которая демонстрирует определенное поведение.
Некое множество объектов, имеющих общую структуру и общее поведение, объединяется в этом случае в классы. Понятия класса и объекта тесно связаны, однако существует важное различие. В то время как объект обозначает конкретную сущность, определенную во времени и в пространстве, класс определяет лишь абстракцию существенного в объекте [25]. Можно говорить о классе «Млекопитающие», который включает характеристики, общие для всех млекопитающих. Для указания конкретного представителя млекопитающих – говорят: «это – млекопитающее» или «то – млекопитающее».
Объединяя понятия структуры классов и структуры объектов с пятью признаками сложных систем, мы приходим к тому, что фактически все сложные системы можно представить одной и той же (канонической) формой, которая в общем виде может быть представлена так как показано на рисунке 2.10.
Рис. 2.10. Каноническая форма сложной системы.
Здесь приведены две ортогональных иерархии одной системы: классов и объектов. Каждая иерархия является многоуровневой, причем в ней классы и объекты более высокого уровня построены из более простых. Какой класс или объект выбран в качестве элементарного, зависит от рассматриваемой задачи. Объекты одного уровня имеют четко выраженные связи, особенно это касается компонентов структуры объектов. Внутри любого рассматриваемого уровня находится следующий уровень сложности.
Отметим также, что структуры классов и объектов не являются независимыми: каждый элемент структуры объектов представляет специфический экземпляр определенного класса. Как видно из рис. 1.20., объектов в сложной системе обычно гораздо больше, чем классов. Если бы не существовало структуры классов для системы, то пришлось бы повторять одни и те же сведения для каждого экземпляра класса. С введением структуры классов в ней становится возможным разместить общие свойства экземпляров.
Структуры классов и объектов системы вместе называются архитектурой системы.
Для очень сложных систем классы, объекты и модули являются необходимыми, но не достаточными средствами абстракции. Объектный подход масштабируется и может быть применен на все более высоких уровнях. Кластеры абстракций в больших системах могут представляться в виде многослойной структуры.
На каждом уровне можно выделить группы объектов, тесно взаимодействующих для решения задачи более высокого уровня абстракции. Внутри каждого кластера неизбежно можно найти такое же множество взаимодействующих абстракций.
В контексте изложенного, объектноориентированный анализ – это методология, при которой требования к системе воспринимаются с точки зрения классов и объектов, выявленных в предметной области [26]. Объектно-ориентированное программирование – методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых, является экземпляром определенного класса, а классы образуют иерархию наследования.
К несомненным достоинствам данного метода декомпозиции и соответственно программирования следует отнести.
1. Разделение по алгоритмам концентрирует внимание на порядке происходящих событий, а разделение по объектам придает особое значение агентам, которые являются либо объектами, либо субъектами действия.
2. Объектная декомпозиция уменьшает размер программных систем за счет повторного использования общих механизмов, что приводит к существенной экономии «выразительных средств». Объектно-ориентированные системы более гибки и проще эволюционируют со временем, потому что их схемы базируются на устойчивых промежуточных формах.
3. Разделение посредством объектной декомпозиции помогает лучше справиться с приданием организованности сложности программным системам.
Абстрагирование, достигаемое посредством использования процедур, хорошо подходит для описания абстрактных действий, но не годится для описания абстрактных объектов. Это серьезный недостаток, так как во многих практических ситуациях сложность объектов, с которыми нужно работать, составляет основную часть сложности всей задачи.
Осознание этого влечет два важных вывода. Во-первых, возникают методы проектирования на основе потоков данных, которые вносят упорядоченность в абстракцию данных в языках, ориентированных на алгоритмы. Во-вторых, появляется теория типов, которая воплощается в таких языках, как Pascal. Естественным завершением реализации этих идей, стало сравнительно недавнее появление таких языков, как Object Pascal, С++, Delphi. Эти языки получили название объектных или объектно-ориентированных [26]. На рисунке 2.11. приведена топология таких языков применительно к задачам малой и средней степени сложности.
Рис. 2.11. Топология малых и средних приложений в объектных и объектно-ориентированных языках.
Основным элементом конструкции в указанных языках также служит модуль, но составленный из логически связанных классов и объектов, а не подпрограмма, как в языках первого поколения.
Таким образом, объектно-ориентированный анализ и проектирование принципиально отличаются от традиционных подходов структурного проектирования: здесь необходимо по-другому представлять себе процесс декомпозиции, а архитектура получающегося программного продукта в значительной степени выходит за рамки представлений, традиционных для структурного программирования.
