Сложность программного обеспечения представляет неотъемлемое свойство программирования и программ, которое проявляется во времени и стоимости создания программ, в объеме или длине текста программ, характеристиках ее логической структуры, задаваемой операторами передачи управления (ветвления, циклы, вызовы подпрограмм и т.д.).
Можно выделить 5 следующих источников сложности программирования:
решаемая задача;
язык программирования;
среда выполнения программы;
технологический процесс коллективной разработки;
стремление к универсальности и эффективности алгоритмов и типов данных.
От сложности нельзя избавиться, но можно изменить характеристики ее проявления.
ОБЪЕКТНО - ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ |
ООП является третьим крупным этапом (после структурного и модульного программирования) в процессе развития структурного подхода. Создаваемые в середине 70-х годов большие программные системы продемонстрировали, что в рамках процедурно ориентированного стиля использование структурного подхода не дает желаемого результата. С увеличением числа компонентов в создаваемых программных системах число ошибок, связанных с неправильным использованием процедур, некорректным использованием связей между компонентами, стало нелинейно расти. Сроки ввода в эксплуатацию этих систем постоянно срывались. Уменьшить число подобных ошибок и упростить их обнаружение могла позволить алгоритмическая декомпозиция, ориентирующаяся на естественные элементы пространства решаемой задачи. В этом случае на этапе кодирования и отладки упрощалось сопоставление программистских конструкций с моделируемыми объектами. Такую декомпозицию станем называть объектно-ориентированным анализом пространства решаемой задачи или предметной области. Для описания результатов объектно-ориентированного анализа и последующего программного синтеза необходимы адекватные программные средства, построенные на определенных принципах.
Введение типов данных обозначило еще одно направление развития технологии программирования. Типизация данных предназначена для облегчения составления программ и для автоматизации выявления ошибок использования данных в виде фактических параметров при вызове функций.
Результатом обобщения понятия «тип данных» являются классы объектов (С++) или объектные типы Object Pascal), которые могут содержать в качестве элементов не только данные определенного типа, но и методы их обработки – функции и процедуры.
Классы
Классами называются специальные типы, которые содержат поля, методы и свойства. Конкретный экземпляр класса называется объектом. В основе классов лежат три фундаментальных принципа: инкапсуляция, наследование и полиморфизм.
Инкапсуляция
Класс представляет собой единство трех сущностей – полей, методов и свойств. Объединение этих сущностей в единое целое и называется инкапсуляцией. Инкапсуляция позволяет во многом изолировать класс от остальных частей программы, сделать его самодостаточным для решения конкретной задачи. Например, в объектно-ориентированном языке программирования Object Pascal класс TForm содержит все необходимое для создания Windows -окна, класс TMemo представляет собой полнофункциональный текстовый редактор, класс обеспечивает работу программы с таймером и т. д. Инкапсуляция представляет собой мощное средство обмена готовыми к работе программными заготовками.
Наследование
Любой класс может быть порожден от другого класса. Для этого при его объявлении указывается имя класса родителя.Порожденный класс автоматически наследует поля, методы и свойства своего родителя и может дополнять их новыми.
Полиморфизм
Полиморфизм – это свойство классов решать схожие по смыслу задачи разными способами. Изменяя алгоритм того или иного метода в потомках класса, программист может придать этим потомкам отсутствующие у родителя специфические свойства. Для изменения метода необходимо перекрыть его в потомке, т. е. объявить в потомке одноименный метод и реализовать в нем нужные действия.
Поля
Полями называются инкапсулированные в классе данные. Поля могут быть любого типа, в том числе – классами. Каждый объект получает уникальный набор полей, но общий для всех объектов данного класса набор методов и свойств. Фундаментальный принцип инкапсуляции требует обращаться к полям только с помощью методов и свойств класса.
Методы
Инкапсулированные в классе процедуры и функции называются методами.
В состав любого класса входят два специальных метода конструктор и деструктор, Конструктор распределяет объект в динамической памяти и помещает адрес этой памяти в специальную переменную, которая автоматически объявляется в классе. Деструктор удаляет объект из динамической памяти.
Свойства
Свойства – это специальный механизм классов, регулирующий доступ к полям. Обычно свойство связано с некоторым полем и указывает те методы класса, которые должны использоваться при записи в это поле или при чтении из него.
Компоненты и события
В визуальных системах программирования каркас программы, во всяком случае – ее видимые на экране внешние проявления: окна, кнопки, списки выбора и т.д. создаются программистом из компонентов. Под компонентом понимается некий функциональный элемент, содержащий определенные свойства и размещаемый программистом в специальном окне (окне формы). Способность программы выполнять полезную работу определяется совокупностью ее реакций на те или иные события. В связи с этим каждый компонент помимо свойств характеризуется также набором событий, на которые он может реагировать. Например, компонент формы «кнопка» может по разному реагировать на однократный щелчек мыши и двойной щелчек мыши.
Лекция 10