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

Учитель информатики

Сайт учителя информатики. Технологические карты уроков, Подготовка к ОГЭ и ЕГЭ, полезный материал и многое другое.

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

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

Информатика. 11 класса. Босова Л.Л. Оглавление

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

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

Структурное программирование иногда называют еще «программированием без GO TO». Рекомендуется избегать употребления оператора перехода всюду, где это возможно, но чтобы это не приводило к слишком громоздким структурированным программам.

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

Фундаментом структурного программирования является теорема о структурировании.

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

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

Первая (а) структура — тип последовательность (или просто последовательность), вторая (б) – структура выбора (ветвление), третья (в) – структура цикла с предусловием.

9.1. Общее представление о структурном программировании

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

Одна из таких технологий — структурное программирование — была разработана ещё в начале 70-х годов прошлого века и связана с именем выдающегося нидерландского ученого Эдсгера Дейкстры (1930-2002).

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

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

1. Любая программа строится из трёх базовых управляющих конструкций: последовательность, ветвление, цикл.
2. В программе базовые управляющие конструкции могут быть вложены друг в друга произвольным образом.
3. Повторяющиеся фрагменты программы можно оформить в виде подпрограмм (процедур и функций). В виде подпрограмм можно оформить логически целостные фрагменты программы, даже если они не повторяются.
4. Все перечисленные конструкции должны иметь один вход и один выход.
5. Разработка программы ведётся пошагово, методом «сверху вниз».

О методе разработки алгоритма «сверху вниз» вы получили представление в курсе информатики основной школы. Напомним его ключевые моменты на примере разработки некоторой программы.

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

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

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

Разработка заканчивается тогда, когда ни на одном уровне не останется ни одной заглушки. Полученная программа проверяется и отлаживается.

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

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

9.2. Вспомогательный алгоритм

Пример 1. Применим метод «сверху вниз» для разработки алгоритма нахождения периметра треугольника, заданного координатами своих вершин.

Пусть ХА, ХВ, YA, YB, ХС, YC — координаты вершин треугольника ABC. Его периметр — сумма длин отрезков АВ, ВС и АС.

Из курса геометрии вам известна формула для вычисления длины отрезка АВ по координатам его концов (рис. 2.11):

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

Рис. 2.11. Отрезок АВ

Вспомогательный алгоритм — это алгоритм, целиком используемый в составе другого алгоритма.

На рисунке 2.12 представлены:

1) блок-схема алгоритма вычисления периметра треугольника, предполагающая вызов вспомогательного алгоритма Отрезок;
2) блок-схема вспомогательного алгоритма Отрезок.

При вызове вспомогательного алгоритма указываются его параметры (входные данные и результаты). Параметрами вспомогательного алгоритма Отрезок являются величины XI, Y1, Х2, Y2, D. Это формальные параметры, они используются при описании алгоритма. При конкретном обращении к вспомогательному алгоритму формальные параметры заменяются фактическими параметрами, т. е. именно теми величинами, для которых будет исполнен вспомогательный алгоритм. Типы, количество и порядок следования формальных и фактических параметров должны совпадать.

Рис. 2.12. Алгоритм вычисления периметра треугольника и вспомогательный алгоритм Отрезок

Команда вызова вспомогательного алгоритма исполняется следующим образом:

1) формальные входные данные вспомогательного алгоритма заменяются значениями фактических входных данных, указанных в команде вызова вспомогательного алгоритма;
2) для заданных входных данных исполняются команды вспомогательного алгоритма;
3) полученные результаты присваиваются переменным с именами фактических результатов;
4) осуществляется переход к следующей команде основного алгоритма.

Каким будет результат работы алгоритма при следующих исходных данных: ХА = 1, ХВ = 2, ХС = 3, YA = 1, YВ = 3, YC = 1.

9.3. Рекурсивные алгоритмы

Алгоритм называется рекурсивным, если на каком-либо шаге он прямо или косвенно обращается сам к себе.

Пример 2. Как известно, факториал натурального числа n определяется следующим образом: n! = 1 • 2 • 3 • … • n; 0! считается равным единице (0! = 1).

Иначе это можно записать так:

В определении факториала через рекурсию имеется условие n ≤ 1, при достижении которого вызов рекурсии прекращается.

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

Пример 3. Определим функцию S(n), вычисляющую сумму цифр в заданном натуральном числе n:

Самостоятельно определите функцию К(n), которая возвращает количество цифр заданного натурального числа n.

Пример 4. Алгоритм вычисления значения функции F(n), где n — натуральное число, задан следующими соотношениями:

Требуется выяснить, чему равно значение функции F(7). По условию, F(1) = F(2) = 1.

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

Пример 5. Исполнитель Плюс имеет следующую систему команд:

1) прибавь 1;
2) прибавь 2;
3) прибавь 4.

С помощью первой из них исполнитель увеличивает число на экране на 1, с помощью второй — на 2, с помощью третьей — на 4. Программа для исполнителя Плюс — это последовательность команд. Выясним, сколько разных программ, преобразующих число 20 в число 30, можно составить для этого исполнителя.

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

Число, меньшее 20, при заданных начальных условиях и системе команд исполнителя Плюс получить невозможно. Следовательно, при n 20 может быть получено из чисел n — 1, n — 2 и n — 4 одной из трёх команд, входящих в систему команд исполнителя — «прибавь 1», «прибавь 2» и «прибавь 4» соответственно. При этом каждая программа получения из исходного числа чисел n-1, n-2 и n-4 удлинится на одну команду и будет приводить к числу n. Следовательно, К(n) = К(n — 1) + + К(n — 2) + К(n — 4).

Запишем все соотношения, определяющие функцию К(n):

Заполним по этой формуле таблицу для всех значений n от 20 до 30:

Итак, существует 169 различных программ, с помощью которых исполнитель Плюс может преобразовать число 20 в 30.

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

1. Матрёшка — русская деревянная игрушка в виде расписной куклы, внутри которой находятся подобные ей куклы меньшего размера.

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

3. Примером рекурсивной структуры является замечательное стихотворение Р. Бернса «Дом, который построил Джек» в переводе С. Маршака.

4. Рекурсивную природу имеют геометрические фракталы. На рисунке представлено построение одного из геометрических фракталов — треугольника Серпинского. Чтобы его получить, нужно взять равносторонний треугольник с внутренней областью, провести в нём средние линии и «выкинуть» центральный из четырёх образовавшихся маленьких треугольников. Дальше эти же действия нужно повторить с каждым из оставшихся трёх треугольников, и т. д.

9.4. Запись вспомогательных алгоритмов на языке Pascal

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

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

Описание процедуры имеет вид:

procedure ( ; var: );

begin

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

Пример 6. Запишем на языке Pascal программу нахождения периметра треугольника, заданного координатами его вершин. Вспомогательный алгоритм оформим с помощью процедуры.

Выполните программу на компьютере.

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

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

Описание функции имеет вид:

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

Для вызова функции достаточно указать её имя со списком фактических параметров в любом выражении, в условиях (после слов if, while, until) или в операторе write главной программы.

Пример 7. Запишем на языке Pascal программу нахождения периметра треугольника, заданного координатами его вершин. Вспомогательный алгоритм оформим с помощью функции.

Выполните программу на компьютере.

На основе этой программы напишите функцию, вычисляющую площадь треугольника по целочисленным координатам его вершин. Используйте эту функцию для вычисления площади n-угольника.

САМОЕ ГЛАВНОЕ

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

Основные принципы структурного программирования заключаются в том, что:

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

Вспомогательный алгоритм — это алгоритм, целиком используемый в составе другого алгоритма.

Алгоритм называется рекурсивным, если на каком-либо шаге он прямо или косвенно обращается сам к себе.

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

Вопросы и задания

1. В чём заключается сущность структурного программирования? Какие преимущества обеспечивает эта технология?

2. Какой алгоритм называется вспомогательным?

3. Вспомните, в чём состоит суть метода последовательного построения (уточнения) алгоритма. Как он называется иначе?

4. Опишите основные шаги разработки программы методом «сверху вниз».

5. Дан прямоугольный параллелепипед, длины рёбер которого равны а, b и с.

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

6. Какой вспомогательный алгоритм называется рекурсивным? Что такое граничное условие и каково его назначение в рекурсивном алгоритме?

7. Алгоритм вычисления значения функции F(n), где n — натуральное число, задан следующими соотношениями:

Требуется выяснить, чему равно значение функции F(10).

8. Исполнитель Калькулятор имеет следующую систему команд:

1) прибавь 1;
2) умножь на 2.

С помощью первой из них исполнитель увеличивает число на экране на 2, с помощью второй — в 2 раза.

1) Выясните, сколько разных программ, преобразующих число 1 в число 20, можно составить для этого исполнителя.
2) Сколько среди них таких программ, у которых в качестве промежуточного результата обязательно получается число 15?
3) Сколько среди них таких программ, у которых в качестве промежуточного результата никогда не получается число 12?

9. Попробуйте найти рекурсивные синтаксические структуры:

1) в поэме А. Блока «Двенадцать»;
2) в стихотворении М. Лермонтова «Сон»;
3) в романе М. Булгакова «Мастер и Маргарита»;
4) в фольклоре.

10. Найдите информацию о таких геометрических фракталах, как Снежинка Коха, Т-квадрат, Н-фрактал, кривая Леви, Драконова ломаная.

11. Напишите программу вычисления значения функции F(n), рассмотренной в примере 4 этого параграфа. Вычислите с её помощью значение функции F(7).

12. Напишите программу вычисления

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

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

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

Источник

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

Содержание:

ВВЕДЕНИЕ

Сегодня термин «информатика» принято употреблять в двух смыслах:

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

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

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

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

Объект исследования данной работы – языки программирования.

Предмет исследования –языки программирования высокого уровня.

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

Для достижения поставленной цели предстоит решить ряд задач:

В качестве опорных источников при написании работы были использованы следующие: А.Ф. Новиков – «Учебно-методическое пособие по дисциплине «Технологические подходы к разработке программного обеспечения»» и В.В. Ммухортов – «Объектно-ориентированное программирование, анализ и дизайн»

1. ЯЗЫКИ ПРОГРАММИРОВАНИЯ

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

Именно расширение области использования вычислительной техники и информационных технологий являетсяс основной движущей силой прогресса в сфере программирования. На протяжении всей истории развития информационных технологий проводилось огромное множество прикладных исследований по методологии проектирования, декомпозиции, абстрагированию и иерархиям. Результатом данных исследований стало создание новых, более выразительных языков программирования [7].

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

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

Таким образом, в процессе программирования выделяются следующие элементы:

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

Нельзя отрицать существование проблем в области программирования. Лучшие программисты, ведущие предприятия и компьютерное сообщество в целом постоянно тратят значительные и все возрастающие усилия на решение этих проблем. Результатом этой деятельности стало создание нескольких специализированных отраслей науки. Дисциплина, главной задачей которой является решение внутренних проблем программирования, называется технологией программирования, или инженерии программных систем. Последний термин является точным переводом английского термина «software engineering».

Технология программирования (software engineering) представляет собой совокупность средств и методов, которая позволяет налаживать производственный процесс создания программного обеспечения.

Ключевым словом в данном определении является «производственный», так как оно отражает главную особенность технологии программирования. Например, с точки зрения информатики (computer science), указание на производственный характер дисциплины отсутствует [15].

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

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

Соотношение информатики и технологии программирования является сложным вопросом. Информатика представляет собой более общее понятие, однако нельзя считать технологию программирования отдельной частью информатики. В настоящее время вопросы теоретического характера относят к информатике, а практические приемы решения задач считаются элементами технологии программирования. Например, методы математического доказательства правильности программ относятся к теоретической информатике, а методы тестирования – к технологии программирования, хотя это совершенно разные методы решения одной задачи. Важно отметить, что такое отделение технологии программирования от информатики является условным [8].

1.1. Первое поколение

Первые языки программирования были очень сложны. Схема их развития отражена в таблице 1.

Таблица 1 – Первые языки программирования

Подпрограммы, раздельная компиляция

Блочные структуры, типы данных

Описание данных, работа с файлами

Обработка списков, указатели, сборка мусора

Более простые преемники ALGOL-60

Классы, абстрактные данные

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

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

К характерным чертах этих машин относятся:

Эти ограничения и высокая стоимость машин позволяли работать на них только высококвалифицированным специалистам, которые были способны создавать программы на уровне двоичных кодов. Для облегчения процесса программирования вскоре были созданы языки первого поколения. Их задачей было приблизить программирование к предметной области, отдаляя тем самым от конкретной ЭВМ. Словарь таких языков по большей части состоял из математических функций. Топология языков первого и второго поколений представлена на рисунке 1 [13].

Рисунок 1 – Топология языков программирования первого и начала второго поколений

1.2. Второе поколение

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

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

Топология языков конца второго и начала третьего поколений, поддерживающих использование подпрограмм, представлена на рисунке 2 [13].

Рисунок 2 – Топология языков программирования конца второго и начала третьего поколений

1.3. Третье поколение

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

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

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

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

Наиболее ярким представителем языков третьего поколения является ALGOL-68 – универсальный язык программирования, в котором были реализованы практически все существующие к тому времени механизмы. Данный язык позволял создавать системы корпоративного масштаба для больших ЭВМ. Однако, он был достаточно сложен для первоначального обучения.

Распространение малых ЭВМ позволило обрести популярность потомкам языка ALGOL-60. Так, например, язык программирования Pascal, до сих пор является наиболее популярным в учебной среде, а созданный во второй половине 70-х годов язык C, завоевал популярность среди профессиональных программистов.

Основной задачей создания Pascal являлась именно задача обучения структурному программированию, а цель разработки языка C – написание операционной системы Unix.

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

Топология языков программирования конца третьего поколенеия представлена на рисунке 3.

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

Рисунок 3 – Топология языков программирования конца третьего поколения

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

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

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

В терминах ООП объектом называется нечто, обладающее четкими границами. Объект обладает рядом свойств:

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

Топология языков объектно-ориентированного программирования представлена на рисунке 4 [11].

Рисунок 4 – Топология объектно-ориентированных языков программирования

2. КЛАССИФИКАЦИЯ

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

Структурное программирование является первым направлением, которое оформилось в виде парадигмы. Предпосылкой этого был тот факт, что Э. Дейкстра выявил обратную зависимость между числом неограниченных операторов перехода go to и качеством программы. Качество программы в данном случае определялось двумя показателями – скоростью отладки и степенью надежности. Так появилась парадигма структурного программирования, которое многие имеют просто как «программирование без go to».

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

Рисунок 5 – Базовые структуры управления

Характерной чертой всех базовых структур является свойство – «один вход – один выход», которое сохраняется при суперпозиции двух базовых структур. Можно сделать вывод, что любая суперпозиция обладает свойством «один вход – один выход», следовательно, и любая структура обладает данным свойством. Наличие этого свойства позволяет легко устанавливать соответствие между статическим текстом программы и динамическим протоколом ее выполнения. Для линейных программ взаимно-однозначное соответствие очевидно; для линейно ветвящихся программ очевидно однозначное соответствие из текста в протокол, для циклических программ соответствие устанавливается, если добавить к естественной координате в тексте (от начала к концу) еще по одной целочисленной координате (обычно называемой счетчиком цикла) для каждого уровня вложенности циклов. Таким образом, программирование без использования оператора go to разрешает существующее противоречие между статикой и динамикой.

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

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

Модули служат для хранения готовых программ. Фактически, модуль не является программой. К характерным чертам модуля относятся:

В состав любого модуля входит две части:

При работе с модулями важно учитывать следующие правила:

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

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

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

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

Рисунок 6 – Методологии программирования

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

Важно отметить, что свойство структурности программы не предопределяется системой программирования – оно вносится самим программистом. Любая программа в любой системе программирования может быть написано структурно, а может и не структурно (например, с использованием оператора безусловного перехода go to) [11].

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

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

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

Главные достоинства модульного программирования:

Однако есть и недостатки:

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

Основные характеристики модулей:

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

Модуль

Рисунок 7 – Информационная закрытость модуля

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

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

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

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

Фундаментом модульного программирования являются следующие принципы:

При составлении алгоритма очень важно учесть следующие моменты:

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

Функция 1

Функция 2

Модуль 1

Функция 3

Модуль V

Функция 4

Модуль P

Функция 5

Модуль M

Модуль 2

Модуль 3

Модуль K

Модуль N

Модуль P

Модуль Q

Рисунок 8 – Функционально-модульная схема алгоритма

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

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

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

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

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

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

Место объектно-ориентированной технологии в рамках всех парадигм программирования изображено на рисунке 9.

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ

ПРОЦЕДУРНОЕ ПРОГРАММИРОВАНИЕ

ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ

АССЕМБЛИРОВАНИЕ

МАШИННОЕ КОДИРОВАНИЕ

Рисунок 9 – Эволюция парадигм программирования

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

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

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

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

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

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

Кроме четырех базовых принципов ООП есть еще и несколько дополнительных:

Данные принципы являются важными, но не обязательными.

Алан Кей, создатель первого объектно-ориентированного языка программирования Smalltalk выделял несколько ключевых положений в определении ООП:

ЗАКЛЮЧЕНИЕ

В рамках выполнения данной работы рассмотрена тема «Классификация языков программирования».

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

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

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

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

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

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

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

Во второй главе подробнорассматриваются три направления языков программирования:

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

При копировании любых материалов с сайта evkova.org обязательна активная ссылка на сайт www.evkova.org

Сайт создан коллективом преподавателей на некоммерческой основе для дополнительного образования молодежи

Сайт пишется, поддерживается и управляется коллективом преподавателей

Whatsapp и логотип whatsapp являются товарными знаками корпорации WhatsApp LLC.

Cайт носит информационный характер и ни при каких условиях не является публичной офертой, которая определяется положениями статьи 437 Гражданского кодекса РФ. Анна Евкова не оказывает никаких услуг.

Источник

Понравилась статья? Поделиться с друзьями:

Не пропустите наши новые статьи:

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

  • Операционные системы и программное обеспечение
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии