Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

4966

.pdf
Скачиваний:
3
Добавлен:
13.11.2022
Размер:
854.74 Кб
Скачать

Министерство образования и науки Российской Федерации Федеральное агентство по образованию

Государственное образовательное учреждение высшего профессионального образования

«Хабаровская государственная академия экономики и права»

ТЕХНОЛОГИЯ ВЫСОКОУРОВНЕВОГО ПРОГРАММИРОВАНИЯ Учебное пособие

Хабаровск 2009

2

ББК 3

Р 98

Рябухин С. И. Технология высокоуровневого программирования : учеб. пособие. – Хабаровск : РИЦ ХГАЭП, 2009. – 96 с.

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

Настоящее учебное пособие является дополнительным материалом для студентов вузов специальности 080801 «Прикладная информатика в экономике», изучающих дисциплину «Высокоуровневые методы информатики и программирования» и разработано в соответствии требованиям государственного образовательного стандарта высшего профессионального образования. Пособие предназначено для ознакомления с объектно-ориентированными технологиями в рамках постановки задачи на разработку программных систем, их последующего проектирования и реализацию в виде программного кода. Для освоения материала настоящего пособия требуются знания в области системного анализа, знание процедурного языка программирования Си, а также объектно-ориентированного языка С++.

Рецензенты:

Завкафедрой «КПСМ» ТОГУ, д-р тех. наук, проф. С. И. Клепиков

Завлабораторией математических методов моделирования в механике

ВЦ ДВО РАН, д-р физ.-мат. наук, проф. И. И. Потапов

С. И. Рябухин, 2009

Хабаровская государственная академия экономики и права, 2009

3

 

 

ОГЛАВЛЕНИЕ

 

 

Введение ........................................................................................................................

5

 

1. Высокоуровневые методы в информатике и программировании........................

9

 

1.1. Жизненный цикл программных систем...............................................................

9

 

1.2. Каскадная модель жизненного цикла ИС..........................................................

12

 

1.3. Спиральная модель жизненного цикла ИС .......................................................

13

 

1.4. Итерационная модель жизненного цикла ИС ...................................................

14

 

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

19

 

1.5.1. Структурное проектирование ..........................................................................

19

 

1.5.2. Структурное программирование .....................................................................

20

 

1.5.3. Модульное проектирование и программирование ........................................

23

 

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

25

 

Контрольные вопросы и задания...............................................................................

27

 

2. Объектно-ориентированные технологии..............................................................

28

 

2.1.Объектно-ориентированный анализ ...................................................................

28

 

2.1.1. Технологии объектно-ориентированного анализа ........................................

31

 

Контрольные вопросы и задания...............................................................................

34

 

2.2. Программная реализация объектно-ориентированной ....................................

34

 

технологии ...................................................................................................................

34

 

2.2.1. Объектно-ориентированные дополнения к процедурным языкам

 

 

программирования и абстрактные типы данных.....................................................

34

 

2.2.2. Инкапсуляция классов......................................................................................

39

 

2.2.3. Интерфейс класса и правила доступа к элементам класса ...........................

40

 

2.2.4. Инициализация данных и создание объектов ................................................

46

 

2.2.5. Конструкторы ....................................................................................................

47

 

2.2.6. Разновидности полиморфизма ........................................................................

50

 

Контрольные вопросы и задания...............................................................................

53

 

2.3. Объектно-ориентированное проектирование ...................................................

54

 

2.3.1. Язык UML как средство объектно-ориентированного анализа и

 

 

проектирования ...........................................................................................................

55

 

2.3.2. Основные группы элементов языка UML ......................................................

57

 

2.3.3. Диаграммы вариантов использования ............................................................

60

 

2.3.4. Диаграммы классов...........................................................................................

65

 

2.3.5. Диаграмма последовательностей ....................................................................

73

 

2.3.6. Диаграммы объектов ........................................................................................

75

 

2.3.7. Диаграммы состояний ......................................................................................

77

 

 

 

 

 

4

2.3.8. Диаграммы деятельностей

............................................................................... 79

Контрольные вопросы и задания...............................................................................

84

ПРИЛОЖЕНИЕ А ..…………………………………………………………………83

ПРИЛОЖЕНИЕ Б …………………………………………………………………...86

Словарь терминов …………………………………………………………………...91

Библиографический список ………………………………………………………...95

5

Введение

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

Современные коммерческие программные продукты представляют собой весьма сложную систему, состоящую из совокупности компонентов-модулей объединённых одной целью. Наиболее ценными и востребованными на рынке являются те программные продукты, которые позволяют решать комплекс производственных задач, т.е. предоставляют законченное решение в масштабе предприятия. Такие программные продукты именуются корпоративными информационными системами. Противоположность таким продуктам составляет принцип локального решения отдельных задач (бухгалтерского учёта, делопроизводства, экономического планирования, автоматизации производства, управления ресурсами, учёта взаимоотношений с клиентами и т.д.). В результате такого локального подхода мы получим лишь разрозненные решения разрозненных задач. Проблемы, связанные с таким подходом, очевидны: полученные локальные результаты (в виде данных) необходимо интегрировать для дальнейшей обработки, несмотря на их структурные и логические несоответствия. Целью интеграции является необходимость построения единого информационного пространства для всего процесса производства. Наличие единого информационного пространства позволит обеспечить эффективную поддержку принятия управленческих решений, реализовать процессный подход к организации производства, построить адекватную систему управления качеством на предприятии и получить возможность постоянного роста эффективности производства. Исходя из этого наиболее разумным представляется решение о приложении максимальных усилий разработчиков программных средств к созданию именно корпоративных систем, в состав которых входят все перечисленные выше модули (бухгалтерский учёт, делопроизводство, экономическое планирование, автоматизация производства, управление ресурсами, учёт взаимоотношений с клиентами и т.д.).

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

6

проектирования и программирования (т.е. несоответствием парадигмы программирования). Одной из основных проблем при создании корпоративных информационных систем является так называемый «кризис программирования». Суть проблемы заключается в том, что в качестве языка описания решения задачи, будь то бухгалтерский учёт или решение дифференциальных уравнений, используется не язык понятий из соответствующей предметной области, а язык программных абстракций, ориентированный на средства вычисления. Программные абстракции, т.е. конструкции из элементов языка программирования (машинно-ориентированного или макро-командного, т.е. имеющего относительно более высокий уровень по отношению к машинно-ориентированному языку), предназначены для формализованного описания предметной области.

Сложность описания реальной предметной области обусловлена ограниченностью средств языков программирования. Ограниченность может проявиться в строгой статической типизации самого языка программирования (то есть количеством и качеством исходных конструктивных элементов языка: типами и структурами данных; операторами и лексемами языка). Ограниченность также может проявиться в невозможности программного отражения «естественного» поведения объекта. Иными словами, программист-разработчик вынужден контролировать результаты выполнения программы и интерпретировать полученные результаты в «правильном», соответствующем реальному поведению объекта прагматическом смысле.

Пример №1: в экономике количество денежных единиц никогда не может быть отрицательным числом, следовательно, для поддержки такого правила следует иметь механизм дополнительной обработки и интерпретации полученных расчетных значений в случае появления отрицательных величин.

Пример №2: в информационных технологиях при обработке структур данных, таких как массивы и списки и др., подчас требуется реализация унарных, бинарных и прочих операций, осуществляемых по отношению к целым массивам или элементам списков, в то время как базовые операции языков программирования не распространяются на такие нестандартные типы данных.

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

7

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

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

Сложность обеспечения «гибкости» проектируемых программных средств заключается в проблемах реализации поддержки жизнеспособности программных комплексов при изменяющихся условиях эксплуатации. Программный комплекс, с одной стороны, должен наиболее полно соответствовать спроектированной модели предметной области, а с другой стороны, обладать способностью быстро и с минимальными затратами адаптироваться к изменяемым условиям эксплуатации. В частности, это означает, что приращение новых возможностей должно происходить с максимальным использованием ранее разработанного исходного кода программы и структур данных, но без их коренного изменения. Необходимо учесть также и тот факт, что самыми востребованными на рынке программного обеспечения являются программные продукты, поддерживающие многокомпонентную архитектуру: распределённые базы данных; многозвенные

8

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

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

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

Внастоящем пособии в качестве средства объектно-ориентированного анализа, моделирования и проектирования использована нотация языка универсального моделирования UML. В качестве языка программирования при проектировании и разработке исходного кода программных систем использован язык С++ (стандарт ANSI). Подробно рассмотрены этапы разработки программных систем: объектно-ориентированный анализ информационной системы в виде классификации сущностей; проектирование классов и иерархии классов, а также структуры и топологии программных систем.

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

Впервой главе приведено описание жизненного цикла программных систем

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

9

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

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

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

1. Высокоуровневые методы в информатике и программировании 1.1. Жизненный цикл программных систем

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

10

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

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

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

К низкоуровневым методам программирования следует отнести создание машинно-ориентированных информационных систем, которые ограничены условиями применения конкретного языка программирования неспециального назначения и вычислительных средств.

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

Понятие «жизненный цикл информационных систем» определено в стандарте ГОСТ Р ИСО/МЭК 12207-99. Этот нормативный документ является основным, регламентирующим состав процессов жизненного цикла информационных систем. Каждый процесс разделён на набор действий, каждое действие − на набор задач. В свою очередь, каждый процесс, действие или задача инициируется другим процессом и выполняется по мере необходимости, причём не существует заранее определённых последовательностей и циклов выполнения.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]