Similar presentations:
Технология разработки программных продуктов (2)
1.
2. 2. Языки программирования
2. ЯЗЫКИПРОГРАММИРОВАНИЯ
3.
Программным обеспечением называют совокупностьпрограммных средств, необходимых при работе на
компьютере. Частью ПО является язык
программирования.
Основные понятия.
Язык программирования - это множество текстов
некоторого алфавита, удовлетворяющих правилам
синтаксиса и задающих порядок вычислений в
соответствии с правилами семантики.
Алфавит языка программирования - набор
символов, включающий буквы, символы и спец. знаки.
Синтаксис языка программирования - совокупность
правил записи, которым должна удовлетворять любая
программа. Включает также правила ввода текстов
программ в ЭВМ.
Семантика языка программирования - это правила,
определяющие какие операции и в какой
последовательности должна выполнять ЭВМ, работая
по программе.
4. Общая характеристика языков программирования
Первыми языками были машинные языки.Они задавались системами команд ЭВМ.
Языки высокого уровня способны выразить
задачу более лаконично и сжато, позволяя
программисту более четко представлять свои
задачи и разрабатывать эффективные методы
из решения.
Языки машинно-ориентированные
позволяют использовать особенности машин
для повышения эффективности программ.
5. Основные шаги:
Абстракция данных, т.е. представлениеданных, позволяющее использовать их,
не зная подробностей их организации и
создания.
2. Абстракция действий в виде процедур,
когда фрагмент программы может быть
использован другими пользователями,
знающими функцию, которую этот
фрагмент реализует и способ
определения ее параметров.
3. Абстракция типа данных.
4. Абстракция объектов породила ООП.
1.
6.
Принцип сокрытия информациисочетается в языках программирования с
принципом определения интерфейсов.
Существуют специально разработанные
для определенной области производства
языки программирования (ЯП).
Например, на "Авиастар-СП" разработан язык
Casius. Это язык геометрического моделирования и
программирования обработки деталей для станков
с ЧПУ.
7. Характеристики и свойства языков программирования
Основными характеристиками, позволяющими сравнивать языкипрограммирования, являются: мощность, уровень и
концептуальная целостность.
Мощность характеризуется количеством и разнообразием задач,
алгоритмы решения которых можно записать, используя этот
язык. Самым мощным является машинный язык. Любую задачу,
запрограммированную на каком-либо языке можно
запрограммировать и на машинном языке.
Уровень языка характеризуется сложностью решения задач с
использованием этого языка. Чем проще записывается решение
задач, чем более непосредственно реализуются сложные
операции и понятия, чем меньше объем получаемых программ,
тем выше уровень языка.
Концептуальная целостность языка характеризуется свойствами
совокупности понятий, служащих для описания этого языка и
включает 3 взаимосвязанных аспекта:
◦ экономию понятий
◦ ортогональность понятий
◦ единообразие понятий
8.
Экономия понятий предполагает достижениемаксимальной мощности языка с помощью
минимального числа понятий.
Ортогональность означает, что между
понятиями не должно быть взаимного влияния.
Если какое-либо понятие используется в
различных контекстах, то правила
использования должны быть одни и те же.
Единообразие понятий требует согласованного,
единого подхода к описанию и использованию
всех понятий.
Обычно чем меньше мощность языка, тем выше
его уровень. По этой причине, наряду с
универсальными языками разрабатываются
специализированные в некоторой конкретной
области.
Чем мощнее язык, тем труднее обеспечить
концептуальную целостность.
9. Свойства:
Надежность языка обеспечивает минимум ошибокпри написании программы. Например, благодаря
наличию в языке требования, чтобы все переменные
были объявлены до использования, ошибки
связанные с неправильным написанием имен
выявляются при компиляции, т.е. автоматически.
Удобочитаемость языка - свойство, которое
обеспечивает легкость восприятия программ
человеком.
Полнота языка обеспечивает описание на языке
решения задач определенной предметной области.
Гибкость языка обеспечивает легкость выражения
на языке необходимых для решения задач действий.
10.
Простота обеспечивает легкостьпонимания семантики языковых
конструкций и запоминания синтаксиса.
Мобильность языка позволяет
обеспечивать независимость его от
аппаратных средств. Можно переносить
программное обеспечение с машины на
машину с относительной легкостью.
Эффективность языка обеспечивает
эффективную реализацию языка.
11. Эффективность программ.
Основной задачей программированияявляется создание правильных, а не
эффективных программ.
Эффективная программа не нужна,
если она не обеспечивает правильных
результатов.
Правильную, но не эффективную
программу можно оптимизировать и
сделать эффективной
12. 2.1. Способы и методы оптимизации
Обычно большая часть времени расходуется навыполнение очень небольшой части программы
(примерно 5% ее объема), но наиболее часто
используемой, называемой, критической
областью.
Существует 3 типа программ:
Часто используемые программы (ОС,
компиляторы, постпроцессоры). Эффективность
- первостепенная задача.
Производственные программы. Эффективность
существенна.
Программы, написанные не программистами.
Эффективность нужна если есть ограничения по
памяти или по времени.
13.
Удобочитаемость более существенначем ее эффективность.
Программу делают более
эффективной лишь в особых случаях:
◦ Программа не помещается в памяти.
◦ Программа слишком долго выполняется.
◦ Программа должна быть включена в
библиотеку и часто использоваться.
14. 2.2. Оптимизация программы
Оптимизация программы - это процесспостроения по исходной программе
эквивалентной программы, обладающей
лучшими характеристиками времени работы
и/или объема занимаемой ОП.
1. Сегментация программы.
Программу, подлежащую оптимизации следует
разделить на подпрограммы и ответить на 3
вопроса:
какой процент общего времени использует
каждая подпрограмма
насколько в % отношении оптимизируется
каждая подпрограмма
сколько человеко-часов необходимо для
достижения этой цели
15.
2. Время работы подпрограммы.Необходимо установить фактическое
время работы каждой подпрограммы.
Если это невозможно, применяется
другой подход. Он заключается в
подсчете количества операторов в
подпрограммах по распечатке.
Операторы, включенные в тело цикла,
учитываются многократно.
В первую очередь необходимо
оптимизировать подпрограмму, которая
используется больше других.
16.
3. Процент общего улучшения программы.После того, как определен % общего времени,
используемый подпрограммой , следует
оценить ее возможное улучшение.
4. Необходимые усилия.
Для каждой подпрограммы можно вычислить
следующий коэффициент:
Подпрограммы с самым высоким коэффициентом
оптимизируются в первую очередь. При
оптимизации вручную, существует 2 подхода:
"чистка"
"перепрограммирование"
17. 2.3. Структурное программирование
Структурное программированиесосредоточено на логике программы
и включает 3 главные составляющие:
Проектирование сверху вниз.
Модульное программирование.
Структурное кодирование.
18. Проектирование сверху вниз
Этот метод предусматривает сначалаопределение задачи в общих чертах, а затем
постепенное уточнение структуры, путем
внесения более мелких деталей.
На каждом шаге такого уточнения необходимо
выявить основные функции, которые нужно
выполнить.
Таким образом данная задача разбивается на ряд
подзадач, пока эти подзадачи не станут на
столько простыми, что каждой из них будет
соответствовать один модуль.
Действия каждого модуля должно быть описано
одной фразой.
Проектирование должно быть завершено до
начала программирования.
19. Модульное программирование
это процесс разделения программы на логическиечасти (модули) и последовательное
программирование каждой из них.
Каждый модуль должен иметь свое назначение, быть
замкнутым, вход и выход должны быть точно
определены.
Воздействие изменения в одном модуле на другую
часть программы называется "волновым эффектом«.
Избегать использования глобальных переменных.
Использование модулей приводит к уменьшению
сложности.
Методы проектирования программ, основанные на
модульном принципе, делятся на 3 группы:
Методы нисходящего проектирования.
Методы расширения ядра.
Методы восходящего проектирования.
20. Структурное кодирование
это метод написания хорошоструктурированных программ, который
позволяет получать программы более
удобные для тестирования, модификации
и использования.
Логическая структура базируется на строго
доказанной теореме о структурировании:
любую правильную программу можно
написать с использованием только
следующих структур:
◦ последовательности (линейности)
◦ выбора (ветвления)
◦ повторения (цикла)
21. 2.4. Вычисление констант
Инициирование переменных.Программы становятся удобочитаемыми, если в
них используются выражения, включающие
константы.
Для выполнения вычислений, содержащих
только константы, применяют множество
различных методов компилирования.
Некоторые компиляторы вычисляют все
выражения с константами во время
компилирования и запоминают результат.
Другие компиляторы запоминают константы, а
вычисления выполняются во время выполнения.
Второй способ неэффективен, если выражение
находится внутри цикла.
22.
Процесс выполнения операторов, значениякоторых известны на стадии компилирования,
что позволяет не выполнять их во время работы
программы, называют сверткой.
Инициирование переменных.
Если начальные значения присваиваются
одновременно с объявлением переменных, то
экономится время выполнения, т.к. переменные
получают начальные значения во время
компилирования, а не во время выполнения.
Инициирование переменных во время их
объявления, облегчает документирование
программ и помогает избежать ошибок, которые
могут возникнуть, если начальные значения не
были присвоены.
23.
Арифметические операции.Арифметические операции выполняются с
различной скоростью.
В порядке возрастания времени:
+, *
/ (деление)
возведение в степень
24.
Пример: 3*N = N + N + NПреобразование может привести к
исключению операции:
X = 2*Y + (A-1)/P + 2*T
X = 2*(Y + T) + (A-1)/P
A/50 = A*0,2
A = 1.0/X
C = B + D/X
RX = 1.0/X
A = RX
C = B + D*RX
25.
При возведении в степень важно
правильно задавать тип показателя
степени. При возможности использовать
целые типы.
X = Y + A/B*C
Z = W + A/B*C
ABC = A/B*C
X = Y + ABC
Z = W + ABC
26. Организация цикла
y = a1x3+a2x2+a3x+a4POLY = A[1]
FOR I = 2 TO 4 DO
POLY = POLY*X + A[I]
POLY = ((A[1]*X + A[2])*X + A[3])*X + A[4]
Экономим время на выполнении и инициировании
переменных.
Один из способов уменьшения количества циклов
состоит в объединении двух или более циклов в один.
Значительная часть времени при использовании
циклов тратится на инициирование и проверку
индекса цикла.
27. Пример 1: инициирование выполняется:
1for i:=1 to 20 do
20
for j:=1 to 10 do
200
for k:=1 to 5 do
221 раз
{тело цикла}
Тело цикла выполняется 20*10*5=1000 раз.
Проверка условий завершения цикла
выполняется 1000+200+20=1220 раз.
Путем реорганизации циклов (которая не
всегда возможна) можно сократить число
инициирований и завершений цикла.
28. Пример 2: инициирование выполняется:
15
50
56 раз
for i:=1 to 5 do
for j:=1 to 10 do
for k:=1 to 20 do
{тело цикла}
Тело цикла выполняется 5*10*20=1000 раз.
Проверка условий завершения цикла
выполняется 1000+50+5=1055 раз.
Внешний цикл должен иметь наименьшее
число итераций, по отношению к
внутреннему.
29. Пример 3: оптимизировать
for i:=1 to 50 dofor j:=1 to 50 do
A[i, j]:=0;
for k:=1 to 50 do
A[k, k]:=1;
for i:=1 to 50 do
for j:=1 to 50 do
if i=j then A[i, j]:=1
else A[i, j]:=0;
Чистка цикла:
for i:=1 to 10 do
for j:=1 to 10 do
X:=X+Y*Z+C[i, j];
Оптимизированный цикл:
YZ:=Y*Z; // инвариантные
выражения - не зависящие от
цикла
for i:=1 to 10 do
for j:=1 to 10 do
X:=X+Y*Z+C[i, j];
30. 2.5. Оптимизирующие компиляторы
Компилятор - это программирующаяпрограмма, предназначенная для перевода
(трансляции) описания алгоритмов с
одного формального языка на другой.
Первый из этих языков называется
входным, второй - выходным или
объектным.
Наиболее распространены трансляторы с
языков процедурно-ориентированных в
языки машинные и языки машинноориентированные.
Транслятор является одним из основных
средств автоматизации программирования.
31.
Обычно транслятор состоит из ряда блоков,выполняющих независимые функции:
Синтаксический анализ программ.
1. Анализ описаний данных и преобразование их в
удобную для хранения и дальнейшего
использования форму (в т.ч. вычисление констант).
2. Распределение памяти для используемых в
программе объектов.
3. Установление соответствия между конструкциями
входного языка и эквивалентными им
конструкциями выходного языка.
4. Печать в отредактированном виде текста
исходной программы.
5. Сообщение об обнаруженных в процесс
трансляции ошибках в исходной программе.
6. Эквивалентные преобразования на уровне
входного языка с целью оптимизации программы.
32.
Для одного и того же входного языкацелесообразно иметь несколько
трансляторов, один из которых позволяет
осуществить быструю трансляцию,
выдавая менее эффективные программы.
Такой транслятор можно использовать для
отладки программ.
Компиляторы, создающие эффективную
объектную программу обычно бывают
большими и работают медленно.
Оптимизирующий транслятор, применяя
различные методы оптимизации может
получить более качественную объектную
программу, используемую для
многократных расчетов.
33. Шаги оптимизации:
1.2.
3.
Оптимизирующий компилятор.
Определить критические области,
подлежащие оптимизации.
Применить локальную оптимизацию
в критических областях (наиболее
часто используемых частях
программы).
34. Оверлейность программы
Под оверлейностью понимаютвозможность перенесения подпрограмм
во время работы программы в
быстродействующую память из
некоторого другого типа памяти таким
образом, что несколько подпрограмм в
различное время занимают одну и ту же
область памяти.
Недостатки:
выигрыш в памяти за счет времени
дополнительные усилия программиста
сохранение промежуточных результатов
35.
Возможность оверлейности реализуетсятакже при использовании виртуальной
памяти.
Если машина имеет виртуальную память, то
ОС автоматически делит программу на части
фиксированной длины, называемые
страницами.
Кроме того, ОС, в случае необходимости,
пересылает страницы в ОП. Таким образом
проблема организации оверлейности
перестает быть обязанностью программиста и
возлагается на машину.