<<
>>

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

Первые программы состояли из нескольких десятков — сотен машинных команд. Программные комплексы и ин

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

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

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

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

Если исправлены все синтаксические ошибки и ошибки компоновки, то программа начинает выполняться (стадия Run). Однако эта стадия может быть прервана недопустимой операцией (например, делением на ноль), и в этом случае говорят об ошибках времени выполнения (RunTime Errors). Либо программа досчитала до конца, но полученные результаты оказываются неверными. Вызвать это могут ошибки алгоритма, либо ошибки организации межмодульных связей, ошибки преобразования типов данных, либо простые описки (например, пропущен ноль при записи числа 100 и программа использовала в вычислениях 10). Ошибки времени выполнения обнаруживаются решением серии тестовых примеров (прогонка программы), результат для которых известен заранее. Как правило, время, затраченное на поиск подобных ошибок, существенно превышает время написания самой программы и исправления синтаксических ошибок.

Развитие концепции программирования тесно связано с проблемой снижения брака при написании программы.

Программирование стало не только средством, а также и предметом научного изучения. Из ремесла программирование превратилось в академическую дисциплину. В работах Э.Дейкстры и К.Хоора определен новый взгляд на программирование как на предмет научного изучения и поле интеллектуальной деятельности. Хоор показал, что программы поддаются точному анализу, основанному на математических выкладках. Убедительно показано, что можно избежать многих ошибок программирования, если программисты осознанно будут применять те методы и приемы, которые ранее использовались интуитивно. Этот подход получил название «революции» в программировании. Разрабатываются теоретические основы структурного программирования, теория доказательства правильности программы, доказательное программирование.

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

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

но как абстрактные структуры, которые могут не иметь конкретной реализации в языке программирования.

В процессе конструирования программы представление данных постепенно уточняется вслед за уточнением алгоритма.

Язык структурного программирования должен предоставлять возможность конструирования собственных типов данных. На низшем уровне стоят предопределенные в языке фундаментальные структуры (например: скаляр ные типы, запись, массив и множество). Из фундаментальных структур, как из молекул, строят усложненные структуры. Переменные фундаментальной структуры могут менять только значение, сохраняя тип или множество допустимых значений и занимаемый ими размер. Усложненные структуры характеризуются изменением не только значения, но и самой формы представления, составом входящих в них фундаментальных структур. Динамическое управление памятью реализуется на уровне указателей, и динамические данные объединяются в древовидную структуру (деревья).

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

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

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

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

Объектно-ориентированное программирование (ООП)— логически следующая за структурным ступень развития. ООП начинает бурно развиваться с конца восьмидесятых годов. Начало девяностых отмечено повсеместным внедрением новых объектно-ориентированных языков программирования. К их числу в первую очередь относится C++ и объектно-ориентированный Pascal. Развитие ООП привело к такому существенному изменению стиля программирования, что даже новые операционные системы стали разрабатываться под влиянием этих концепций. Так, в системах Windows 9x/NT многие сущности ориентированы на ООП. Например, одним из назначений реестра Windows является регистрация в ОС классов, входящих в состав программных комплексов.

Классы (в некоторых версиях Pascal они названы объектами) — основные элементы ООП, расширяющие понятие типов данных и объединяющие (инкапсулирующие) в единое целое данные (в ООП они называются поля) и программный код (в ООП - методы), обрабатывающий их. Здесь структура данных объединена в единое целое с основными методами, осуществляющими доступ к ним и их обработку. После разработки класса программист, исполь

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

Базируется ООП на следующих основных принципах:

  • инкапсуляция (описана выше),
  • наследование,

и полиморфизм (многообразность),

  • в последнее время к основным понятиям относят скрытие данных

Механизм наследования позволяет использовать структуры данных и методы уже разработанного класса в новых классах, которые имеют много общего со старым, но отличаются от него некоторыми деталями. Старый является родительским классом, а новый — дочерним классом. Если бы при создании нового класса все приходилось бы начинать с нуля, то эффективность использования классов могла быть поставлена под сомнение. Однако, построив генеалогическую структуру реальных объектов, выделив их общие стороны и отличия, программист может программно реализовать эту структуру благодаря наследованию. При этом для дочернего класса он опишет только его отличительные признаки, а все общее дочерний класс автоматически «заимствует» у родительского.

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

Скрытие данных запрещает внешней программе оперировать непосредственно с полями класса. Чтение или запись данных в поля можно выполнять только посредством специальных методов, которые называются свойствами.

<< | >>
Источник: Ю.Ф. Симионов. Информационные технологии в экономике. Под редакцией д.э.н., профессора Ю.Ф. Симионова. Серия «Высшее образование». Ростов н/Д: «Феникс», - 352 с.. 2003

Еще по теме Структурное программирование:

  1. Основные этапы развития технологий программирования Программирование в кодах и ассемблер
  2. • Принцип оптимальности в планировании и управлении, общая задача оптимального программирования • Формы записи задачи линейного программирования и ее экономическая интерпретация • Математический аппарат • Геометрическая интерпретация задачи • Симплексный метод решения задачи 2.1. Принцип оптимальности в планировании и управлении, общая задача оптимального программирования
  3. Язык программирования
  4. Модульное программирование
  5. Языки программирования высокого уровня
  6. Программирование, управляемое событиями
  7. 3.3. Целочисленное программирование
  8. Программирование государственных финансов
  9. 2.2. Формы записи задачи линейного программирования и ее экономическая интерпретация
  10. 4. Разработка Л. В. Канторовичем метода линейного программирования.
  11. 3.5. Нелинейное и динамическое программирование; понятие об имитационном моделировании
  12. Параметрическое программирование 1 (35 вариантов).
  13. б.              Линейное программирование
  14. Структурная перестройка экономики региона: понятие, цели, задачи и приоритеты. Программа структурной перестройки экономики региона.
  15. Процедура стратегического программирования
  16. Общая постановка задачи динамического программирования
  17. 4.1. Структура та структурні зрушення в розвитку економіки. 4.2. Види структурних співвідношень в економіці. 4.3. Державне регулювання структурних зрушень в економіці. 4.4. Державне регулювання інвестиційної діяльності
  18. 16.5. Задача динамического программирования в терминах теории графов.
  19. Динамическое программирование
- Информатика для экономистов - Антимонопольное право - Бухгалтерский учет и контроль - Бюджетна система України - Бюджетная система России - ВЭД РФ - Господарче право України - Государственное регулирование экономики в России - Державне регулювання економіки в Україні - ЗЕД України - Инновации - Институциональная экономика - История экономических учений - Коммерческая деятельность предприятия - Контроль и ревизия в России - Контроль і ревізія в Україні - Кризисная экономика - Лизинг - Логистика - Математические методы в экономике - Международные экономические отношения - Микроэкономика - Мировая экономика - Муніципальне та державне управління в Україні - Налоговое право - Организация производства - Основы экономики - Политическая экономия - Размещение производительных сил (РПС) - Региональная и национальная экономика - Страховое дело - Теория управления экономическими системами - Управление инновациями - Философия экономики - Ценообразование - Экономика зарубежных государств - Экономика и управление народным хозяйством - Экономика отрасли - Экономика предприятия - Экономика природопользования - Экономика труда - Экономическая безопасность - Экономическая география - Экономическая демография - Экономическая статистика - Экономическая теория и история - Экономический анализ -