Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Диплом К

.pdf
Скачиваний:
17
Добавлен:
23.03.2016
Размер:
1.22 Mб
Скачать

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

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

4.2.3. Расчет ресурсов оперативной памяти.

Для своей работы каждый индекс занимает определенный объем оперативной па-

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

ся в расчете на максимальную высоту индекса. Формула для объема оперативной памя-

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

V (L6 LK max L3 max) rmax

(50)

где rmax максимальное число уровней в индексе, Lк max – масксимально длинный ключ,

который может быть помещен в индекс, Lз max –максимально длинное значение, которое может быть помещено в индекс.

Графичекая зависимость объема требуемой оперативной памяти от размера блока индекса приведена на рисунке 32. Четко видна прямо пропорциональная зависимость от длины блока индекса.

 

25000

 

 

 

 

 

 

 

 

ÎÇÓ, áàéò

20000

 

 

 

 

 

 

 

 

15000

 

 

 

 

 

 

 

 

объем

 

 

 

 

 

 

 

 

10000

 

 

 

 

 

 

 

 

Требуемый

 

 

 

 

 

 

 

 

5000

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

512

1024

1536

2048

2560

3072

3584

4096

 

 

 

 

Разм ер стран ицы , байт

 

 

 

 

Рис. 32. Зависимость требуемого объема ОЗУ от размера страницы

 

5. ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ

5.1. Объект рассмотрения

Данный раздел посвящен анализу процессов создания сложных объектно-

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

ориентированная технология разделяется на три большие раздела:

объектно-ориентированное программирование;

объектно-ориентированное проектирование;

объектно-ориентированный анализ.

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

кой степени сложности. В качестве объекта рассмотрения выбраны так называемые ин-

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

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

5.2. Сложность программных систем

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

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

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

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

ной, но нельзя разработать ее так, что бы она оказалась простой. Сложность индустри-

альных программных комплексов определяется четырьмя основными причинами:

сложностью решаемых проблем;

сложностью управления процессом разработки;

гибкостью создания программной системы;

сложностью описания поведения отдельных подсистем.

Рассмотрим эти причины подробнее.

5.2.1. Сложность решаемых проблем К элементам, входящим в состав разрабатываемых систем, часто предъявляются

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

внутреннюю сложность программной системы.

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

Кроме того, есть еще одна сложность: изменение требований к программной си-

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

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

Эволюция – это внесение изменений в систему в ответ на изменившиеся требования к ней.

5.2.2. Сложность управления процессом разработки Большое число требований к программной системе неизбежно приводит

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

тива разработчиков. При наличии коллектива возникают трудности с координацией хо-

да работ над системой, которые сильно возрастают с ростом числа разработчиков.

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

5.2.3. Гибкость программных систем Процесс создания программных систем обладает большой гибкостью. Разработчик

может реализовывать поставленную задачу многими разными способами. Дело услож-

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

менты (динамические массивы, списки, деревья и другие структуры данных) программ-

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

ты будущей системы.

5.2.4. Сложность описания поведения отдельных подсистем Программные комплексы являются дискретными системами, внутри которых су-

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

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

5.3. Анализ сложных систем

5.3.1. Признаки сложных систем Согласно [9] выделяются следующие признаки сложной системы:

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

вен.

Связи внутри одной подсистемы сильнее чем связи между различными подси-

стемами. Взаимодействия внутри одной подсистемы происходят гораздо чаще, чем вза-

имодействия между разными подсистемами.

Количество типов подсистем, входящих в иерархию сложной системы ограниче-

но. Подсистемы более высоких уровней состоят из разнообразных комбинаций не-

скольких типов подсистем нижних уровней.

Разработка сложных систем остается серьезной проблемой. Главная причина этого

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

ных размеров. Это является главной причиной разработки новых методов проектирова-

ния сложных программных систем.

5.3.2. Общие принципы анализа сложных систем Наиболее часто используемым является принцип декомпозиции. Он гласит: при

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

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

Декомпозицию делят на два вида: процедурную и объектно–ориентированную.

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

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

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

Рассмотрим пример – файловую систему. При процедурной декомпозиции могут быть выделены следующие базовые процедуры:

создать новый файл;

открыть файл;

закрыть файл;

удалить файл;

записать данные в заданный файл;

считать данные из заданного файла;

Структурная схема такой простейшей файловой системы приведена на рис. 33. Базовы-

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

О п ерация с ф айло м

 

 

 

 

 

 

 

 

Со здать

 

Удалить

 

Î òêðû òü

 

Закры ть

í î âû é

 

ñî çäàí í û é

 

ô àéë

 

ô àéë

 

 

 

 

 

 

 

 

Рис. 33. Пример файловой системы

При объектно-ориентированной декомпозиции выделим следующие объекты:

файл;

запись;

 

 

 

 

Структурная схема приведена на рисунке 34.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Со здать

 

 

 

 

 

 

Î òêðû òü

 

 

 

 

 

 

Закры ть

 

Зап исать

 

 

 

 

Зап исать

 

Считать

 

 

 

 

 

 

Ô àéë

Считать

 

 

 

 

 

 

 

 

 

Удалить

 

 

 

 

 

 

 

 

 

 

 

 

 

Çàï èñü

Рис. 34. Объекты файловой системы

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

Следующим является принцип абстракции. Он гласит: надо выделить только су-

щественные стороны анализируемой системы, чтобы не обрабатывать лишнюю инфор-

мацию, поступающую от нее, а концентрироваться на информации только о выделен-

ных сторонах.

Последним является принцип иерархии. Он утверждает, что поведение всех под-

систем одного типа одинаково.

5.4. Объектно-ориентированные методы проектирования

5.4.1. Цель и продукт проектирования Согласно [10], цель проектирования – создание программной системы, которая:

удовлетворяет заданным функциональным требованиям;

удовлетворяет требованиям по потреблению ресурсов и эксплуатационным каче-

ствам;

имеет приемлемую цену;

удовлетворяет критериям дизайна;

Продуктом проектирования являются модели, позволяющие понять структуру бу-

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

5.4.2. Определение объектного подхода Объектный подход к проектированию сложных программных систем представляет

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

ектирования программ и на базе накопленного опыта в программировании, прежде все-

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

Объектно-ориентированное программирование – это методология программи-

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

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

вания к объектно-ориентированным языкам программирования: язык программирова-

ния является объектно-ориентированным тогда и только тогда, когда выполняются сле-

дующие условия:

есть поддержка объектов в виде структуры данных и операций над ними

введены типы объектов – классы

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

Объектно-ориентированное проектирование – это методология проектирова-

ния на основе принципа объектно-ориентированной декомпозиции.

От процедурного проектирования объектно-ориентированное отличается приме-

нением именно объектно-ориентированной декомпозиции.

5.4.3. Компоненты объектно-ориентированного проектирования Объектно-ориентированное проектирование имеет четыре необходимых элемента:

Абстрагирование;

Ограничение доступа;

Модульность;

Иерархия.

Эти элементы являются необходимыми, в том смысле, что без любого из них про-

ектирование не будет объектно-ориентированным.

В силу важности их понимания разберем отдельности названные компоненты.

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

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

Абстракции делят на статические и динамические. Статические остаются неиз-

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

Представителем абстракции в программной системе является класс.

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

стве выделенных абстракций.

Ограничение доступа. Ограничение доступа – процесс защиты отдельных эле-

ментов объекта, не затрагивающий существенных характеристик объекта, как цело-

го.

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

можность изменять его без всякого воздействия на остальную программу. Именно огра-

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

му, сохраняя ее надежность.

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

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

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

Этот принцип является расширением принципа ограничения доступа для про-

граммных систем, содержащих сотни классов. Для модуля, так же как и для класса, тре-

буется два раздела: интерфейс и реализация, служащих для аналогичных целей.

Главная особенность модулей, отличающая этот принцип от ограничения доступа

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

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

ние системы, за счет независимой разработки и тестирования.

Иерархия. Иерархия – упорядоченная система классов, в которой классы-

потомки наследуют строение одного или нескольких классов-предков.

Иерархия, наряду с ограничением доступа и модульностью, также служит для вне-

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

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

са-предка, а во втором – несколько классов-предков.

5.5. Классы и объекты

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

5.5.1. Объект

Объект – сущность (реальная или абстрактная), имеющая важное функциональ-

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

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

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

ний.

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

Определенное воздействие одного объекта на другой называют операцией.

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

граммы. Понятие индивидуальности вводится для различения объектов одного класса с одинаковым состоянием.

5.5.2. Отношения между объектами Функционирование программы представляет собой взаимодействие между объек-

тами. На момент взаимодействия объекты должны иметь доступ друг к другу ("видеть"

друг друга). Существует три способа реализации видимости объекта А объекту Б:

объект А находится в области объекта Б, тогда объект Б может напрямую обра-

щаться к А;

объект А передается как параметр какой-либо операции объекта Б;

объект А является полем объекта Б.

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

отношение использования

отношение включения.

Отношение использования между двумя объектами означает возможность переда-

чи сообщений между ними, т.е. они могут как-то взаимодействовать.

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

class dsCache

{

public : dsCache (ѕ);

int Read (ѕ);

...

};

class dsPage

{

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]