Министерство образования и науки Российской Федерации
Челябинский юридический колледж
Отделение права и ИТ
Кафедра «Информатики и ВТ»
Курсовая работа
по дисциплине
«Технологии разработки программных продуктов»
Вариант – 50
Практическое задание на тему:
База данных «Компьютерный магазин»
Работа защищена с оценкой:________________________«___» _____________ 2009 г | Выполнил:_________________ Студент Сахаров А.Н. «____»________________ 2009г. Проверил:__________________ Преподаватель Соловьёва Л.В. «___» _________________ 2009г. |
Челябинск
2009
АННОТАЦИЯ
Сахаров А.Н. Пояснительная записка к курсовой работе. Вариант – 50 . Практическое задание на тему: БД «Компьютерный магазин». Челябинск: ЧЮК, , 2009, (48 стр.). Библиография литературы наименований;
В работе представлены вопросы:
· Анализ существующих аналогов и обоснование выбора темы
· Этапы создания программного продукта «База данных Компьютерный магазин»
Первая глава содержит информацию о понятии “Оптимизация”
Во второй главе рассмотрены программы, аналогичные разрабатываемой базе данных, проведен их анализ с указанием достоинств и недостатков. Так же рассматриваются все этапы разработки программного продукта с четким указанием, что было сделано на каждом этапе. А также и обоснование выбора темы и формирование технического задания. Вторая глава также содержит руководство пользователя.
СОДЕРЖАНИЕ
Оглавление
1.1 НАЗНАЧЕНИЕ И ЦЕЛИ ОПТИМИЗАЦИИ.. 3
1.6 РАЗГРУЗКА УЧАСТКОВ ПОВТОРЯЕМОСТИ.. 3
1.7 СДВИГ ИНВАРИАНТНЫХ ОПЕРАТОРОВ.. 3
2.1 АНАЛИЗ СУЩЕСТВУЮЩИХ АНАЛОГОВ.. 3
2.2 ОБОСНОВАНИЕ ВЫБОРА ТЕМЫ.. 3
2.3 КРАТКИЙ ОБЗОР СРЕДЫ РАЗРАБОТКИ ACCESS. 3
2.4 КРАТКИЙ ОБЗОР СРЕДЫ РАЗРАБОТКИ DELPHI 7. 3
2.5 РУКОВОДСТВО ПО НАПИСАНИЮ ПРОГРАММЫ.. 3
2.6 РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ.. 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.