Сильно связная область

Кафедра «Информатики и ВТ»

Курсовая работа

по дисциплине

«Технологии разработки программных продуктов»

Вариант – 50

Практическое задание на тему:

База данных «Компьютерный магазин»

  Работа защищена с оценкой: ________________________ «___» _____________ 2009 г Выполнил:_________________ Студент Сахаров А.Н. «____»________________ 2009г. Проверил:__________________ Преподаватель Соловьёва Л.В. «___» _________________ 2009г.

 

Челябинск

2009


АННОТАЦИЯ

Сахаров А.Н. Пояснительная записка к курсовой работе. Вариант – 50. Практическое задание на тему: БД «Компьютерный магазин». Челябинск: ЧЮК,, 2009, (48 стр.). Библиография литературы наименований;

В работе представлены вопросы:

· Анализ существующих аналогов и обоснование выбора темы

· Этапы создания программного продукта «База данных Компьютерный магазин»

Первая глава содержит информацию о понятии “Оптимизация”

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

СОДЕРЖАНИЕ

 

Оглавление

ВВЕДЕНИЕ. 3

1 ОПТИМИЗАЦИЯ ПРОГРАММ.. 3

1.1 НАЗНАЧЕНИЕ И ЦЕЛИ ОПТИМИЗАЦИИ.. 3

1.2 ПРОМЕЖУТОЧНЫЙ ЯЗЫК.. 3

1.3 БЛОК (ЛИНЕЙНЫЙ УЧАСТОК) 3

1.4 СИЛЬНО СВЯЗНАЯ ОБЛАСТЬ. 3

1.5 СПОСОБЫ ОПТИМИЗАЦИИ.. 3

1.6 РАЗГРУЗКА УЧАСТКОВ ПОВТОРЯЕМОСТИ.. 3

1.7 СДВИГ ИНВАРИАНТНЫХ ОПЕРАТОРОВ.. 3

1.8 ВСТАВКА ПСЕВДОБЛОКА.. 3

2 ПРАКТИЧЕСКАЯ ЧАСТЬ. 3

2.1 АНАЛИЗ СУЩЕСТВУЮЩИХ АНАЛОГОВ.. 3

2.2 ОБОСНОВАНИЕ ВЫБОРА ТЕМЫ.. 3

2.3 КРАТКИЙ ОБЗОР СРЕДЫ РАЗРАБОТКИ ACCESS. 3

2.4 КРАТКИЙ ОБЗОР СРЕДЫ РАЗРАБОТКИ DELPHI 7. 3

2.5 РУКОВОДСТВО ПО НАПИСАНИЮ ПРОГРАММЫ.. 3

2.6 РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ.. 3

ЗАКЛЮЧЕНИЕ. 3

СПИСОК ЛИТЕРАТУРЫ.. 3

 

 

ВВЕДЕНИЕ

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

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

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

ОПТИМИЗАЦИЯ ПРОГРАММ

НАЗНАЧЕНИЕ И ЦЕЛИ ОПТИМИЗАЦИИ

 

Оптимизирующая часть выполняет следующие действия:

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

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

ПРОМЕЖУТОЧНЫЙ ЯЗЫК

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

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

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

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

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

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

1  операторы языка не должны быть слишком мелкими;

2  символы, идентификаторы и числа должны иметь фиксированный формат;

3  в строении операторов желательно отсутствие рекурсивности;

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

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

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

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

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

- если программная переменная, используемая в области, не определена в ней, то предполагается, что она определена во всех путях, ведущих к области;

- если программная переменная определена и используется в

области, то внутри области существует путь между определением

переменной и каждым ее использованием;

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

БЛОК

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

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

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

Формально модель линейного участка может быть представлена следующим образом:

Блок B - это тройка вида (P,I,U),где

1. P - список операторов S1,S2,...Sn (n>=0),

2. I - множество входных переменных,

3. U - множество выходных переменных.

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

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

СИЛЬНО СВЯЗНАЯ ОБЛАСТЬ

Для каждого блока B=(P,I,U) можно найти ориентированный ациклический граф, представляющий этот блок. При этом каждый лист графа (концевая вершина) соответствует одной входной переменной в I, а каждая его внутренняя вершина - оператору из P. Граф отражает порядок выполнения операторов программы и дает более наглядное представление, чем линейная последовательность операторов.

Если вершины i и j графа соответствуют участкам i и j программы, то дуга идет из i в j, если:

 последний оператор участка i является оператором перехода на метку L, которой помечен первый оператор участка j.

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

Будем рассматривать сильно связанные области Ri, обладающие следующими свойствами:

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

2.Ri!= Rj;

3. для каждого i<j или пересечение Ri и Rj пусто, или Ri является подобластью Rj (включена в нее).

СПОСОБЫ ОПТИМИЗАЦИИ

Различают две категории оптимизирующих преобразований:

преобразования исходной программы в ее внутренней форме, которые не зависят от объектного языка (машинно-независимые) и преобразования, осуществляемые на уровне объектной программы

(машинно-ориентированные).

Методы первой категории применимы почти к любому алгебраическому языку - FORTRAN, ALGOL, PL/1 и.т.д.

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

1. - разгрузка участков повторяемости;

2. - упрощение действий;

3. - реализация действий;

4. - чистка программы;

5. - экономия памяти;

6. - сокращение программы.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: