ТОП 10:

Современные программные средства



Содержание лекции:

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

 

Цель лекции:

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

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

Процесс решения задачи на компьютере состоит из нескольких этапов:

1) словесная постановка задачи (концептуальная модель);

2) математическая постановка задачи (математическая модель);

3) разработка алгоритма решения задачи (алгоритмическая модель);

4) реализация алгоритма на языке программирования (программная модель);

5) тестирование и отладка программы.

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

Слово «алгоритм» происходит от имени математика IX в. Аль Хорезми, который сформулировал правила выполнения арифме­тических действий.Первоначально под алгоритмом понимали только правила выполнения четырех арифметических действий над числами. В дальнейшем это понятие стали использовать вообще для обозна­чения последовательности действий, приводящих к решению лю­бой поставленной задачи.

Говоря об алгоритме вычислительного процесса, необходимо понимать, что объектами, к которым применяется алгоритм, яв­ляются данные. Алгоритм решения вычислительной задачи пред­ставляет собой совокупность правил преобразования исходных данных в результат. Основными свойствамиалгоритма являются: детерминированность, результативность, массовость, дискретность.

Существует несколько способов записи алгоритмов: словесный, формульно-словесный, графический, язык операторных схем, ал­горитмический язык.

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

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

Каждый символ Flow-формы соответствует управляющей структу­ре и изображается в виде прямоугольника. Для демонстрации вложенности структур символ Flow-формы вписывается в соответствующую область прямоугольника любого другого символа. Символы Flow-форм, соответствую­щие основным и дополнительным управляющим конструкциям, приведены на рисунке А1.

Основное отличие диаграмм Насси-Шнейдермана от Flow-форм заключается в том, что область обозначения условий и вариантов ветвления изображают в виде треугольников (рисунок А2). Такое обозначение обеспечивает большую наглядность представления алгоритма.

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

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

Описать неструктурный алгоритм с помощью псевдокодов, Flow-форм и диаграмм Насси-Шнейдермана невозможно, т. к. для неструктурной передачи управления в них отсут­ствуют условные обозначения. Их использование изначально ориентирует проектировщика толь­ко на структурные способы передачи управления, а потому требует тщательного анализа алгоритма.

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

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

Перечисленные шесть конструкций были положены в основу структур­ного программирования. Слово «структурное» в названии подчеркивает тот факт, что при программировании использованы только перечисленные конструкции. Отсюда и понятие «программирование без go to». Программы, написанные с использованием только структурных операторов передачи управления, называют структурными, чтобы подчеркнуть их отличие от программ, при реализации которых исполь­зовались низкоуровневые способы передачи управления.

Разработанный алгоритм реализуется в виде программных кодов (программы) на одном из языков программирования. Существующие языки программирования можно разделить на сле­дующие группы:

- универсальные языки высокого уровня;

- специализированные языки разработчика программного обеспечения;

- специализированные языки пользователя;

- языки низкого уровня.

В группе универсальных языков высокого уровня в настоящий момент безусловным лидером являются языки С и C++, различные версии которых имеют целый ряд существенных до­стоинств: многоплатформенность; наличие операторов, реализующих основные алгоритми­ческие структуры; возможность программирования на низком (системном) уровне с ис­пользованием адресов оперативной памяти; огромные библиотеки подпрограмм и классов. Поэтому эти языки являются основными для со­здания операционных систем. Альтернативой С и C++ в этой группе языков является Pascal, компиляторы которого в силу четкого синтаксиса об­наруживают помимо синтаксических и большое количество семантических ошибок. Версия Object Pascal, используемая в среде Delphi, сопровождает­ся профессиональными библиотеками классов, упрощающими ведение боль­ших разработок, в том числе и требующих использования баз данных, что де­лает Delphi достаточно эффективной средой для создания приложений MS Win­dows. Кроме этих языков к группе универсальных принадлежат такжеBasic, Modula, Ada и некоторые другие, каждый из которых имеет свои особенности и, соответственно, свою область приме­нения.

Специализированные языки разработчика исполь­зуются при создании специального программного обеспечения: языки баз данных (SQL), языки создания сетевых приложений (HTML, XML), языки создания систем искусственного интеллекта и т. д. Эти языки изучаются в специальных курсах.

Специализированные языки пользователя обыч­но являются частью профессиональных сред пользователя, характеризуются узкой направленностью и разработчиками программного обеспечения не ис­пользуются (1C:Бухгалтерия).

Языки низкого уровня (Assembler) позволяют осуществлять программи­рование на уровне машинных команд. При этом получают оптимальные программы, как с точки зрения времени выполнения, так и с точки зрения объема необходимой памяти. Но эти языки совершенно не пригодны для создания больших программ и, тем более, программных систем. Языки низкого уровня не поддерживают принципов структурного программирования. В настоящее время языки типа Ассемблера обычно используют при написании сравнительно простых программ, взаимодействующих непосредственно с техническими средствами, (например, драйверов); в виде вставок в программы на языках высокого уровня, (например, для ускорения преобразования данных в циклах с большим количеством повто­рений).

Рост сложности и размеров разрабатываемого программно­го обеспечения, а также стремление разграничить доступ к глобальным данным программы, чтобы уменьшить количество ошибок, дали толчок к развитию технологии модульного программирования. Эту техноло­гию поддерживают современные версии языков Pascal и С (C++), языки Ада и Modula. Использование модульного программирования существенно упростило разработку программного обеспечения несколькими программистами. Модули без изменений можно было использовать в других разработках, что повысило производительность труда программистов.

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

Для разработки программного обеспечения большого объема было предложено использовать объектный подход. Объектная структура программы впервые была использована в языке имитационного моделирования сложных систем Simula, появившемся еще в 60-х годах XX в. Естественный для языков моделирования способ представ­ления программы получил развитие в другом специализированном языке мо­делирования - языке Smalltalk (70-е годы XX в.), а затем был использован в новых версиях универсальных языков программирования, таких, как Pascal, C++, Modula, Java.

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

Бурное развитие технологий программирования, основанных на объект­ном подходе, позволило решить многие проблемы. Так были созданы среды,поддерживающие визуальное программирование, например, Delphi, C++ Builder, Visual C++ и т. д. При использовании визуальной среды у програм­миста появляется возможность проектировать некоторую часть (например, интерфейсы будущей программы) с применением визуальных средств добав­ления и настройки специальных библиотечных компонентов. Результатом визуального проектирования является заготовка будущей программы, в кото­рую уже внесены соответствующие коды.

Дополнительную информацию по теме можно получить в [2, 27-43].

 

 

Приложение А

 

 
 

 

 


Рисунок А1 - Условные обозначения Flow-форм для основных конструкций:

а - следование; б - ветвление; в - выбор; г - цикл-пока; д - цикл-до; е - счетный цикл

 

 
 

 


Рисунок А2 - Условные обозначения диаграмм Насси-Шнейдермана для основных конструкций:

а - следование; б - ветвление; в - выбор; г - цикл-пока; д - цикл-до

 

 

Список литературы

 

1. Информатика. Базовый курс. Учебное пособие для вузов под ред. Симоновича С.В. - СПб: Питер, 2003.

2. Симонович С.В. и др. Специальная информатика: Учебное пособие. - М.: АСТ-Пресс, 2000.

3. Попов В.Б. Основы информационных и телекоммуникационных технологий. Программные средства информационных технологий. – М.: Финансы и статистика, 2005.

4. Инчин А.С. Работа на персональном компьютере. В 2-х частях. - Алматы, 2003.







Последнее изменение этой страницы: 2017-01-25; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.234.97.53 (0.013 с.)