II. Объектно-ориентированная методология разработки программ



I. Парадигмы программирования

Парадигма– в методологии науки – совокупность ценностей, методов, технических навыков и средств, принятых в научном сообществе в рамках устоявшейся научной традиции в определенный период времени.

Парадигма программирования — это парадигма, определяющая стиль программирования, иначе говоря — некоторый цельный набор идей и рекомендаций, определяющих стиль написания программ.

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

Рассмотрим одну из классификаций языков программирования.

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

Принципиально иное направление в программировании связано с методологиями (парадигмами) непроцедурного программирования. К ним можно отнести объектно-ориентированное и декларативное программирование.

При использовании декларативного языка программист указывает исходные информационные структуры, взаимосвязи между ними и то, какими свойствами должен обладать результат. При этом алгоритм получения результата программист не строит (по крайней мере в идеале). В этих языках отсутствует понятие «оператор». В декларативных языках можно выделить логические и функциональные языки.

Структурное и объектно-ориентированное программирование строятся на декомпозиции.

Декомпози́ция — научный метод, использующий структуру задачи и позволяющий заменить решение одной большой задачи решением серии меньших задач.

Эдсгер Дейкстра[1] отмечал, "Способ управления сложными системами был известен еще в древности - divide et impera (разделяй и властвуй)"[2]. При проектировании сложной программной системы необходимо разделять ее на все меньшие и меньшие подсистемы, каждую из которых можно совершенствовать независимо. В этом случае не будет превышения пропускной способности человеческого мозга: для понимания любого уровня системы необходимо одновременно держать в уме информацию лишь о немногих ее частях, а не обо всех. Сложностью программирования системы вынуждает делить её на части, выполнять декомпозицию.

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

 

 

II. Объектно-ориентированная методология разработки программ

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

По определению Гради Буча[3]: “Объектно-ориентированное программирование (ООП) – это методология программирования, которая основана на представлении программы в виде совокупности объектов, каждый из которых является реализацией определенного класса (типа особого вида), а классы образуют иерархию на принципах наследуемости”.

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

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

Существует достаточно много объектно-ориентированных языков программирования, наиболее популярными из которых в настоящее время являются C ++, Delphi , Java , Visual Basic .

Визуальное программирование дополнительно предоставляет широкие возможности использования прототипов объектов (классы), которые можно настроить по своему усмотрению.

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

Объекты, которые нужны при создании различных приложений, могут неоднократно использоваться без расходования времени на их программирование.

Имеется четкое разграничение между понятиями объекта и класса. Класс – это тип данных (например, Real или String), а объект – конкретный существующий в памяти компьютера экземпляр класса, переменная соответствующего типа.

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

Классы имеют поля (как тип данных record), свойства (напоминают поля, но имеют дополнительные описатели, определяющие механизмы записи и считывания данных, что позволяет повысить строгость декларирования внутренней структуры класса) и методы (подпрограммы, которые обрабатывают поля и свойства класса.

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

Переменная, описанная как класс, фактически является указателем на экземпляр класса. Это сделано для повышения эффективности работы с ним. Однако при использовании таких переменных применять операции работы с указателями (^, @) не надо. К ним обращаются как к обычным переменным, а к членам класса (полям, свойствам и методам) как к полям записи.

Этапы реализации объектно-ориентированного подхода:

­ анализ предметной области задачи (выполняется объектная декомпозиция системы и определяются основные особенности поведения объектов, результаты представляют в виде диаграмм объектов);

­ проектирование системы

o логическое проектирование (разработка структуры классов: определение полей и алгоритмов методов);

o физическое проектирование (объединение описаний классов в модули, определение способов взаимодействия с оборудованием, ОС, другим ПО);

­ эволюция системы (поэтапная реализация классов и подключение объектов к системе, начиная с создания проекта будущего приложения);

­ модификация (добавление новых функциональных возможностей или изменение существующих свойств системы).

 


Дата добавления: 2021-01-20; просмотров: 74; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!