Файл: Алгоритмизация как обязательный этап разработки программы.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.03.2023

Просмотров: 112

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Введение

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

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

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

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

1 История развития программирования.

В этой главе будут разобраны основные моменты в истории программирования.

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

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

Языком программирования называется система обозначений и правил, позволяющая записать программу решения задачи в виде последовательного текста в удобном для человека виде

Языки программирования можно разделить на две большие группы — декларативные и императивные. Программы на императивных языках программирования содержат точную последовательность инструкций, выполняя которую, исполнитель получает результат. К этой группе относится большинство языков. Программы на декларативных языках (SQL, Prolog) содержать не точные последовательности инструкций, а цели, которые должны быть достигнуты, и описание средств, с помощью которых это следует делать. Точную последовательность действий в этом случае определяет сам исполнитель, анализируя эти сведения.[2]2


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

Технологией программирования называется совокупность методов и средств, используемых в процессе разработки программного обеспечения(ПО).[3]1

Программирование достаточно новая наука в нашем мире. Ее бурное развитие началось примерно в 1940-50 годах с появлением первых электронно-вычислительных машин(ЭВМ). Программирование в то время велось непосредственно в машинных кодах, а основным носителем информации были перфокарты и перфоленты. Программы были достаточно простыми т.к. были весьма ограничены возможностями ЭВМ и слишком сложны в разработке и отладке непосредственно на машинном языке.

Первые языки программирования, как и первые ЭВМ, были довольно примитивны и ориентированы на численные расчеты. Это были и чисто теоретические научные расчеты (прежде всего, математические и физические), и прикладные задачи, в частности, в области военного дела.

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

Итак до середины 1960-х гг. использовалась неструктурированная, «стихийная» технология программирования. Структура первых простейших программ состояла из: программы, написанной на машинном языке(в двоичных или шестнадцатеричных кодах) и обрабатываемых ею данных. Это послужило причиной «кризиса программирования», который проявился в 1960 годах. т.к. при разработке сложного ПО стали срываться сроки разработки программ. Причиной являлось несовершенство неструктурированного программирования. В «стихийной» технологии программирования использовался метод программирования «снизу-вверх» - сначала разрабатывались подпрограммы, а затем строилась сложная программа путем их сборки. Это приводило к большому количеству ошибок согласования. Тестирование и отладка начали занимать до 80% времени разработки ПО. Так же остро стояла проблема специфичности первых языков программирования, часто они являлись узкоспециализированными и вымирали вместе с устройством, на котором использовались.


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

Процедурное программирование — дисциплинированный подход к написанию программ. В его основе используются следующие методы программирования:

  • метод декомпозиции (нисходящего проектирования) — разделение программы на процедуры простейшей структуры и представление программы в виде иерархии процедур.
  • метод модульной организации — группировка процедур и обрабатываемых ими данных в модули, которые программируются и компилируются отдельно. Преимущества данного метода заключаются в параллельной работе программистов, удобстве программирования, возможности создания библиотек.
  • метод структурного программирования процедур, который заключатся в следующем:
    1. разделение процедур на вложенные блоки, что позволяет локализовать переменные и операторы их обработки структурировать процедуру
    2. использование операторов ветвления и циклов, осуществляющих передачу управления только сверху вниз, что приводит к ясности алгоритма, к облегчению программирования и сопровождения программ.
    3. Форматирование текстов процедуры: использование отступов для отображения вложенности блоков, использование комментариев, что приводит к повышению читаемости программ и облегчению их сопровождения.[4]1

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

К процедурным языкам относятся FORTRAN, C, Ada, Pascal, BASIC и некоторые другие. Процедурные языки иногда также называются императивными языками.

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

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

Основными свойствами ООП являются:


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

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

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

Также существует ответвление от ООП в виде параллельного программирования. Данный подход является развитием процедурно-ориентированного подхода в программировании.

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

  • адекватного выражения в программах естественного параллелизма решаемых на ЭВМ задач;
  • распараллеливания обработки информации в многопроцессорных и мультипрограммных ЭВМ с целью ускорения вычислений и эффективного использования ресурсов машины.»

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

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

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

К таким технологиям относятся технологии:

  • ориентированные на кластеры / суперкомпьютеры (технология MPI);
  • состоящие из вычислительных узлов на базе традиционных многоядерных центральных процессоров (технологии OpenMP, Intel Cilk Plus, Intel TBB, Intel ArBB, OpenCL);
  • состоящие из гетерогенных узлов с использованием графических процессоров (технологии NVIDIA CUDA, OpenCL).

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

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

Все это привело к появлению компонентных технологий программирования и CASE-технологий.

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