Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы на госы.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.29 Mб
Скачать
  1. Задача определения закона распределения с.В. По статистическим данным.

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

  1. Задача нахождения неизвестных параметров распределения.

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

  1. Задача проверки правдоподобия гипотез.

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

ПРИМЕР: согласуются ли результаты эксперимента с гипотезой о том, что данная С.В. подчинена нормальному закону.

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

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

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

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

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

Способы отбора:

  • Простой: извлекают по одному объекту.

  • Типический: ген. совокупность делят на типические части и отбор осуществляется из каждой части.

  • Механический: отбор производится через определенный интервал – например каждый 10-й.

  • Серийный: объекты выбираются «сериями», которые должны исследоваться при помощи сплошного обследования.

Проверка правдоподобия гипотез.

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

ПРИМЕР: если новое лекарство помогло 150 людям, можно ли сказать, что оно поможет всем людям с таким заболеванием.

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

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

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

Статистические гипотезы делятся на:

  • Гипотезы о параметрах распределения известного вида (параметрические)

  • Гипотезы о параметрах неизвестного распределения (непараметрические)

Одну гипотезу выделяют в качестве основной (нулевой) - , а другую – отрицание (противоположную) – конкурирующей (альтернативной) .

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

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

Основной принцип: множество возможных значений статистики разбивается на 2 непересекающихся подмножества:

  • Критическую область - область отклонения гипотезы

  • Область принятия этой гипотезы.

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

При проверке гипотезы может быть принято неправильное решение, т.е. могут быть допущены ошибки:

  1. Ошибка 1-го рода: отвергается нулевая гипотеза, когда на самом деле она верна.

  2. Ошибка 2-го рода: отвергается альтернативная гипотеза, когда на самом деле она верна.

Вероятность ошибки 1-го рода называется уровнем значимости критерия , задается заранее. Чем меньше , тем вероятность отклонить верную гипотезу.

Вероятность ошибки 2-го рода – величина .

Величину называют мощностью критерия. Чем больше мощность, тем вероятность ошибки 2-го рода меньше.

Методика проверки:

  1. Располагая выборкой формируют нулевую гипотезу (например: Гипотезу о числовом значении математического ожидания нормального распределения при известной / неизвестной дисперсии, о равенстве математических ожиданий двух нормальных распределений с известными /неизвестными дисперсиями, гипотеза проверки закона распределения и т.д.).

  2. В каждом конкретном случае подбирают статистику критерия обычно из:

Нормальное распределение

  • - распределение

  • t – распределение Стьюдента

  • F – распределение Фишера - Снедекора

  1. По статистике критерия и уровню значимости определяют критическую область. Для ее отыскания достаточно определить критическую точку (квантиль).

Границы областей определяются из соотношений:

  • для правосторонней критической области

  • для левосторонней критической области

  • для двусторонней критической области

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

  1. Для полученной выборки подсчитывают значение критерия (Числовое)

  2. Если (например, для правосторонней области), то нулевую гипотезу отвергают. Иначе, нет оснований отвергать гипотезу.

Теория игр и исследование операций

Степенщиков Д.Г.

Смешанное решение матричной игры.

Теория игр – часть обширной теории, кот занимается оптимальными решениями рассм. Обычно конфликтные ситуации.Конфл-ые ситуации – это ситуации реш-е в кот оптимальное для одной стороны, не явл таковым для др, а рез-т зависит от всех конфл-х сторон. Игра – всякая конфл. ситуация рассм в теории игр и предст собой упрощенную модель ситуации. Стратегия- это доступные для игроков действия, в общем случае набор правил ограничений. Ситуация – возможные исходы конфликта. Каждая ситуация рез-т выбора игроком своей стратегии. Игра наз игрой с нулевой суммой(антогонистической), если она парная и выигрыш одного из игроков равен проигрышу другого.Антогонистическая игра в кот. каждый игрок имеет конечное мн-во стратегий наз. матричной. Соотв-но решить игру или найти решение игры, значит для каждого игрока найти стратегию, кот. уд-ет усл. оптимальности: Один из игроков должен получить максимальный выигрыш, когда второй придерживается своей стратегии. В то же время 2-ой должен иметь минимальный проигрыш, если 1-ый игрок придерживается своей стратегии. Такие стратегии нез оптимальными. Условие устойчивости: каждому игроку не выгодно отступать от оптимальных стратегий.

Платёжной матрицей игры – наз матрица эл-ми кот явл. Выигрыши, соответствующие разл стратегиям 2-х игроков.

Нижняя цена игры или максимин:

=4

Верхняя цена игры или минимакс . =4

Оптимальные стратегии: =(0,1,0), =(0,0,1)

Задачи в кот. минимакс равен максимину имеют седловую точку. Говорят также игра имеет решение в чистых стратегиях. . Если в игре нет Седловой точки, то решение в чистых стратегиях не существует.

Смешанной стратегией игрока A наз применение его чистых стратегий с вероятностью

. Причем . Соответственно для игрока В: ; ;

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

Основная теорема ТИ (теорема фон Неймана): каждая конечная игра имеет по крайней мере 1 решение (возможно в области смешанных стратегий). Выигрыш, полученный в результате решения, называется ценой игры. След., каждая конечная игра имеет цену. Цена игры лежит всегда между нижней и верхней ценой игры:

Игра 2*2 явл. простейшим случаем конечной игры. Если такая игра имеет седловую точку, то оптимальное решение – это пара чистых стратегий, соотв-щих этой точке. Игра, в кот отсутствует седловая точка в соотв-ии с основной теоремой теории игр, имеет оптим-е решение и опр-ся парой смешанных стратегий: и .

Пусть игра задана платёжной матрицей A. Если мы придерживаемся своей опт. стратегии Sa*, то противник может пользоваться любой из своих стратегий В1, В2, не изменяя сред. выигрыша υ. Отсюда имеем 2 ур-я:

а11p1+a21p2= - наша стратегия Sa* и стратегия противника В1

а12p1+a22p2= - наша стратегия Sa* и стратегия противника В2

Т.к. p1+p2 = 1, выражаем p1= 1 - p2.

Получаем Отсюда выражаем p2. Подставляем их значения в одно из уравнений системы – получаем цену игры υ.

Если υ известна, то для определения оптим. стратегии противника Sв* нам достаточно одного уравнения:

а11q1+a21q2=. Получаем: q1 = (υ – a12)/(a11 – a12). Выражаем q2=1- q1. Получаем оптимальную стратегию Sв*.

Надежность, эргономика и качество АСОИУ/Надежность ИС

Тоичкин Н.А.

Виды резервирования систем. Постановка задачи оптимального резервирования. Подходы к решению задачи оптимального резервирования.

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

Рез-ние замещением: при отказе эл-та, @ перестраивается, и в замен отказавшего подключается эл-т из числа резервных.

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

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

Постановка задачи оптимального резервирования ИС состоят из отдельных эл-тов, которые с течением времени отказывают и заменяются резервными. Снятые с эксплуатации эл-ты подвергаются ремонту. Модель должна определять оптимальный уровень резервных эл-тов каждого типа. По условию задачи требуется, чтобы @ функционировала с максимальной надежностью. Если какой-нибудь эл-т отказывает, то его заменяют запасным из числа резервных. Отказавший эл-т сразу начинают ремонтировать. В @ непрерывно должно функционировать zk элементов k-гo типа, причем в запасе должно иметься xk элементов того же k-го типа k=(1,2,...,S). Сущность задачи заключается в оптимальном распределении стоимостных или каких-либо других ресурсов С0, выделенных на приобретение резервных единиц. Рассм-ая. @ считается отказавшей, если в момент отказа работающего элемента k-го типа все хk запасных эл-в того же типа находятся в ремонте. Т.о., надо найти такое кол-во резервных эл-в={xl,x1,x3,..,xk}, чтобы вероятность нехватки рез-х эл-в была мин-ой. Введем обозначения:

Р ( ) - показатель надёжности всей системы (вероятность безотказной работы системы); Pk(Xk) - вероятность безотказной работы k-гo элемента. Так как модель соединений эл-в, с точки зрения надежности, представляется как последовательное соединение эл-в, то справедлива формула:

На все эл-ты есть ограничения (вес, цена, объем и т д), Но мы будем пользоваться только стоимостным ограничением как, где Сk - стоимость одного элемента k-гo типа. Для решения задачи оптимального резервирования используется прежде всего метод динамического программирования. В основе метода лежит пошаговый процесс, на каждом шаге строится доминирующая последовательность {[Q(X1), C(X1)], [Q(X2),C(X2)]} где переход в состояние с более высокой надежностью (или более низкой вероятностью отказа Q) происходит с минимальными затратами по стоимости С, здесь Q( )=1-Р( ) есть риск нехватки резервных элементов. Доминирующая последовательность строится по правилу: , если Алгоритм построения доминирующей последовательности состоит из шагов, на каждом из которых строится таблица. Рассматриваем две подсистемы из 1-го и 2-го типов элементов. Характеристики элементов 1-го типа записываются в заголовках столбцов, а характеристики 2-го типа - в заголовках строк. На пересечении каждой строки и каждого столбца записываются суммы стоимостей С и вероятностей нехватки элементов q (табл.). Вначале проводим анализ элементов таблицы по ограничениям. Вычеркиваем те элементы, которые имеют значение стоимости большее, чем ограничение по стоимости С0 и ограничение по вероятности нехватки элементов Q0. Делаем анализ на доминирование: рассматриваем оставшиеся клетки и сравниваем последовательно со всеми элементами (клетками). Если для каких-то двух векторов выполняется условие строгого доминирования, тогда худший вычеркивается. Вектор X1 доминирует над вектором Х2, если вероятность нехватки элементов Р(Х1)≥Р(Х2), а стоимость C(X1)≤С(Х2)(ЗАДАЧА НА МАХ), или вероятность нехватки элементов. Q(X1)≤Q(Х2) и стоимость С(X1)≤С(Х2)(ЗАДАЧА НА MIN). Вектор X1 строго доминирует над вектором Х2, если одно из перечисленных неравенств будет строгим. Все оставшиеся элементы переносим в заголовки столбцов, а в заголовках строк будут характеристики элементов третьего типа. Всего будет S-1 таблица(где S-кол-во эл-тов @), на последнем шаге вычислений ищется оптимальный вектор, у которого и будет минимальная вероятность отсутствия резервных элементов. Т.о. получаем оптимальный состав устройств.

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

Классические методы расчета надежности.

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

Модель с последовательным соединением элементов. При расчетах надежности последовательным называется та­кое соединение элементов, при котором отказ хотя бы одного из них приводит к отказу всего соединения в целом. Послед. соединение в указанном выше смысле не всегда совпадает с физичестким послед. соединением эл-в. Отказы элементов предполагаются независимыми, т.е. отказ любой группы элементов никак не влияет на вероятностные характеристики остальных элементов. В данном случае вероятность безотказной работы системы можно рассчитать по формуле где Pc – вероятность безотказной работы системы, Pi(t) – вероятность безотказной работы i-того элемента системы.

Модель с параллельным соединением элементов. При расчетах надежности параллельным (резервным) называется такое соединение элементов, при котором отказ всего соединения происходит при отказе всех элементов системы (элементы дублируют друг друга). В этом случае показатель надежности Pc определяется через вероятности отказа элементов q1,q2,...,qn, которые связаны с вероятностью безотказной работы соотношениями вида Вероятность отказа самой системы равна Тогда вероятность отказа работы системы с параллельным соединением элементов q1...qn имеет вид

Модель с параллельно-последовательным соединением элементов.

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

Для системы вначале рассчитывается вероятность безотказной работы участка 23 затем для участка 123

Новая расчетная формула имеет вид

M одели не сводимые к параллельно-последовательным соединениям. К данному классу относятся системы с мостиковыми и еще более сложными соединениями элементов.

система является работоспособной, если работоспособны элементы

- 1,3 - 2,4 - 1,5,4 - 2,3,5. Надежность систем данного класса целесообразно оценивать по логико-вероятностному методу, используя аппарат алгебры логики.

Мостиковые схемы. Используем метод разложений. Раскладываем по особому элементу (эл. 5). Получаем систему из 2х схем. +картинка и формулы

Системы типа m из n. Отказ произойдет, если из n эл-в, соединенных параллельно, работоспособными окажутся менее m. +картинка и формула

Модель с использованием Марковских процессов.

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

Вероятностный граф состояний системы имеет следующие состояния: (1) работают оба элемента системы, (2) отказ одного из элементов, (3) отказ двух элементов.

Если заданы вероятности перехода системы из состояния i в состояние j βij , то можно определить вероятности нахождения системы в i-том состоянии Pi(t), а значит и показатели надежности, составляя и решая уравнение Колморогова-Смирнова .

Производная от вероятности нахождения системы в i-том состоянии равна алгебраической сумме произведений интенсивностей перехода на вероятности соответствующих состояний. Тем произведениям, которым соответствуют уходящие из данного состояния стрелки, приписывают знак «-», а входящим - знак «+».

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

р ешив (2.1), определим вероятности нахождения системы в i-м состоянии Pi(t). Функция вероятности безотказной работы системы в данном случае равна вероятности нахождения системы в 1-ом состоянии:

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

Надежность системы- свойство системы выполнять заданные функции, сохраняя свои эксплуатационные показатели в заданных пределах в течение требуемого промежутка времени или требуемой наработки (согласно ГОСТу 27.002-89).

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

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

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

Надежность является комплексным свойством системы и включает в себя еще четыре свойства

1. Безотказность - свойство системы не утрачивать работоспособность в течение заданной наработки без перерывов.

2. Долговечность - свойство системы сохранять работоспособность до предельного состояния (до списания) с перерывами на техническое обслуживание и ремонт.

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

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

В качестве единиц измерения применяются:

  • для безотказности - непрерывное время безотказной работы системы (наработка на отказ);

  • для долговечности - время от момента изготовления системы до предельного состояния или списания (срок службы);

  • для ремонтопригодности - время восстановления работоспособности;

  • для сохраняемости - случайное время сохранения работоспособности в состоянии хранения.

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

Функцией распределения называется функция F(t), определяющая вероятность того, что случайная величина Т примет значение, меньшее заданной величины t, т.е.: F(t) = P{T<t}.

Плотностью распределения f(t) = dF(t)/dt.

В теории надежности широко используются еще две функции: обратная функция распределения

интенсивность

Показатели безотказности не восст-мых @ В качестве случайной величины Т примем наработку до отказа. Считаем, что нам известна функция распределения F(t) , которая в данном случае будет называться функцией вероятности отказа Q(t), то есть (fн-плотность распределения наработки на отказ),ф-ия вероятности безотказной работы в течение заданного времени t Интенсивность отказа :

Показатели безотказности восст-ых @ Восст-мые @ имеют поток отказов и периодически подвергаются тех.обслуживанию и ремонту.

где ti-i-ая наработка на отказ; i- i-ое время восстан-я после i-го отказа. СВ длительности безотказной работы м/д соседними периодами восст-я @ можно хар-ть функцией распределения длительности безотказной работы м/д окончанием восст-я после (i-1)-го отказа и моментом настепления i-го отказа Fi(t). Тогда показатель Qi(t)= Fi(t) – вер-ть наступления отказа @ за промежуток времени t после окончания (i-1)-го восстан-я.Вер-ть безотказной работы с момента окончания (i-1)-го восст-я за период t: Pi(t)=1- Qi(t). Средняя наработка на отказ от момента окончания (i-1)-го восстан-я до наступления i-го отказа:

Показатели сохраняемости

Определение свойств сохраняемости аналогично определению свойств безотказности с тем лишь различием, что они относятся к разным условиям, свойство безотказности характеризует рабочие эксплуатационные условия, а свойство сохраняемости- нерабочие условия {хранение и транспортировка). Показатели сохраняемости аналогичны показателям безотказности. вычислять их нужно через законы распределения длительности безотказного хранения fxp(t)-плотность и Fxp(t)-ф-ия распределения.

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

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

Средний срок сохраняемости- математическое ожидание случайной величины хранения до отказа: Гамма-процентный срок сохраняемости –срок, кот. соответствует вер-ть нахождения в исправном состоянии: Рекомендуются значения у= 90; 95 и 98%.

Показатели ремонтопригодности ф-ция распределения - длительность восст. Для хар-ки свойства ремонтопригодности применяют: - интенсивность восстановления

-среднее время восст-ия: ;-вероятность восст-я в заданное время:

Показатели долговечности Ресур с- наработка до списания, выраженная во временных единицах измерения без учётов простоев . Срок службы – календ. продолжительность службы объекта до его списания. Ср. срок службы – Тсл = ⌠ fсл(τ)d τ.

Проектирование АСОИУ/Проектирование ИС

Тоичкин Н.А.

Понятие жизненного цикла информационной системы. Модели жизненного цикла ИС.

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

Жизненный цикл АС. Совокупность взаимосвязанных процессов создания и последовательного изменения состояния АС от формирования исходных требований к ней до окончания эксплуатации и утилизации комплекса средств автоматизации АС. Жизненный цикл ИС заканчивается в результате морального износа ИС. Стадии:

  1. Формирование требований к АС. Обследование объекта и обоснование необходимости создания АС. Формирование требований пользователя к АС.

  2. Разработка концепции АС. Изучение объекта. Проведение необходимых научно-исследовательских работ.

  3. Техническое задание. Разработка и утверждение технического задания на создание АС.

  4. Эскизный проект. Разработка предварительных проектных решений по системе и её частям. Разработка документации на АС и её части.

  5. Технический проект. Разработка проектных решений по системе и её частям. Разработка документации на АС и её части. Разработка и оформление документации на поставку изделий для комплектования АС и (или) технических требований (технических заданий) на их разработку.

  6. Рабочая документация. Разработка рабочей документации на систему и её части. Разработка или адаптация программ

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

  8. Сопровождение АС. Выполнение работ в соответствии с гарантийными обязательствами. Послегарантийное обслуживание.

Допускается исключить стадию «Эскизный проект» и отдельные этапы работ на всех стадиях, объединять стадии «Технический проект» и «Рабочая документация» в одну стадию «Технорабочий проект». В зависимости от специфики создаваемых АС условий их создания допускается выполнять отдельные этапы работ до завершения предшествующих стадий, параллельное во времени выполнение этапов работ, включение новых этапов работ.

Моделью ЖЦ ИС будем называть нек. структуру, определяющую последовательность осуществления процессов, действий и задач, выполняемых на протяжении ЖЦ ИС, а также взаимосвязи между этими процессами, действиями и задачами. К настоящему времени наибольшее распространение получили следующие 2 основные модели ЖЦ: каскадная модель (водопад); спиральная модель.

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

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

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

Макетирование

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

Основная цель макетирования — снять неопределенности в требованиях заказчика.

Макетирование (прототипирование) — это процесс создания модели требуемого программного продукта.

Модель может принимать одну из трех форм:

  1. бумажный макет или макет на основе ПК (изображает или рисует человеко-машинный диалог);

  2. работающий макет (выполняет некоторую часть требуемых функций);

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

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

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

Достоинство макетирования: обеспечивает определение полных требований к ПО.

Недостатки макетирования: заказчик может принять макет за продукт; разработчик может принять макет за продукт.

Инкрементная модель

Инкрементная модель является классическим примером инкрементной стратегии конструирования. Она объединяет элементы последовательной водопадной модели с итерационной философией макетирования.

1й инкремент: Анализ-> Проектирование-> Кодир-е-> Тестир-е – Поставка 1го инкремента.

2й инкремент: Анализ->… - Поставка 2го инкремента.

Каждая линейная последовательность здесь вырабатывает поставляемый инкремент ПО. Например, ПО для обработки слов в 1-м инкременте реализует функции базовой обработки файлов, функции редактирования и документирования; во 2-м инкременте — более сложные возможности редактирования и документирования; в 3-м инкременте — проверку орфографии и грамматики; в 4-м инкременте — возможности компоновки страницы.

+ и – как и в макетировании.

Пример применения инкрементной модели – быстрая разработка приложений (RAD).

3 элемента: 1.небольшая команда программистов (от 2 до 10 человек) - профессионалы, имеющие опыт в анализе, проектировании, генерации кода и тестировании ПО с использованием CASE-средств. 2.короткий, но тщательно проработанный производственный график (от 2 до 6 мес.). 3.повторяющийся цикл, при котором разработчики, по мере того, как приложение начинает обретать форму, запрашивают и реализуют в продукте требования, полученные через взаимодействие с заказчиком.

Спиральная модель предполагает итерационный процесс разработки ИС. При этом возрастает значение начальных этапов ЖЦ: анализ и проектирование.

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

Преимущества: (преодолевает большинство недостатков каскадной модели)

1.упрощает внесение изменений в проект при изменении требований заказчика. 2.отдельные элементы ИС интегрируются в единое целое постепенно. Поскольку интеграция начинается с меньшего количества элементов, то возникает гораздо меньше проблем при ее проведении. 3.уменьшение уровня риска. 4.итерационная разработка обеспечивает большую гибкость в управлении проектом, давая возможность внесение тактических изменений в разрабатываемое изделие. 5.позволяет получить более надежную и устойчивую систему. Это связано с тем, что по мере развития системы ошибки и слабые места обнаруживаются и исправляются на каждой итерации. 6.итерационный подход позволяет совершенствовать процесс разработки – анализ, проводимый в конце каждой итерации, позволяет понять, что можно улучшить на следующей итерации.

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

Компонентно-ориентированная модель является развитием спиральной модели и тоже основывается на эволюционной стратегии конструирования. В этой модели конкретизируется этап конструирования.

Тяжеловесные и облегченные процессы

Тяжеловесные – детально прогнозируется весь объем предстоящих работ.

Облегченные (подвижные) – без бюрократизма, характерного для тяжелых процессов.

Основные принципы "живой" разработки ПО:

  • Люди, участвующие в проекте, и их общение более важны, чем процессы и инструменты.

  • Работающая программа более важна, чем исчерпывающая документация.

  • Сотрудничество с заказчиком более важно, чем обсуждение деталей контракта.

  • Отработка изменений более важна, чем следование планам.

Пример подвижного процесса – XP-процесс (экстремальное программирование).

Структурный и объектно-ориентированный подходы к проектированию программного обеспечения.

Структурный.

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

Основные принципы:

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

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

  • принцип абстрагирования - заключается в выделении существенных аспектов системы и отвлечения от несущественных;

  • принцип формализации - заключается в необходимости строгого методического подхода к решению проблемы;

  • принцип непротиворечивости - заключается в обоснованности и согласованности элементов;

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

Объектно-ориентированный

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

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

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

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

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

Принципы ОО подхода:

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

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

    • абстракция сущности – модель некоторой сущности в предметной области;

    • абстракция поведения – объект состоит из обобщенного множества операций;

    • абстракция виртуальной машины – объект группирует операции, которые вместе используются более высоким уровнем управления, либо сами используют некоторый набор операций более низкого уровня;

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

  • Инкапсуляция – это процесс скрытия внутренней реализации объекта за предоставляемым этим объектом интерфейсом (внешнее поведение абстракции).

  • Модульность – способность системы быть разложенной на сильно или слабо связанные между собой модули.

  • Иерархия – упорядочивание абстракций и расположение их по уровням. В ОО системах используется 2 вида иерархических структур: структуры классов (иерархическое отношение «is a») и структуры объектов (от ношение вида «part of»). Отношение «is a» реализуется с помощью наследования (обобщения). Наследование создает такую иерархию абстракций в которых подклассы наследуют строение и функциональность от одного или нескольких суперклассов. Отношение «part of» определяет иерархии агрегации объектов, т.е. включения объекта части в объект целое.

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

  • Параллелизм – способность системы обрабатывать несколько сообщений или задач параллельно.

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

Основные сведения о структурных методах анализа и проектирования

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

  • DFD (Data Flow Diagrams) - диаграммы потоков данных;

  • SADT (Structured Analysis and Design Technique - метод структурного анализа и проектирования,) - модели и соответствующие функциональные диаграммы;

  • ERD (Entity-Relationship Diagrams) -диаграммы«сущность-связь».

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

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

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

  • внешние сущности;

  • системы и подсистемы;

  • процессы;

  • накопители данных;

  • потоки данных.

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

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

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

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

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

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

Диаграммы «сущность-связь»

Наиболее распространенным средством моделирования данных являются диаграммы «сущность-связь» (ERD).

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

Базовыми понятиями ERD являются:

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

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

  • иметь уникальное имя; к одному и тому же имени должна всегда применяться одна и та же интерпретация; одна и та же интерпретация не может применяться к различным именам, если только они не являются псевдонимами;

  • обладать одним или несколькими атрибутами, которые либо принадлежат сущности, либо наследуются через связь;

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

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

Связь (Relationship) - поименованная ассоциация между двумя сущностями, значимая для рассматриваемой предметной области, при которой каждый экземпляр одной сущности ассоциирован с произвольным (в том числе нулевым) количеством экземпляров другой сущности, и наоборот.

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

Case Rational Rose

Rational Rose - CASE-средство фирмы Rational Software Corporation (США) - предназначено для автоматизации этапов анализа и проектирования ПО, а также для генерации кодов на различных языках и выпуска проектной документации. Rational Rose использует синтез-методологию объектно-ориентированного анализа и проектирования, основанную на подходах трех ведущих специалистов в данной области: Буча, Рамбо и Джекобсона. Разработанная ими универсальная нотация для моделирования объектов (UML - Unified Modeling Language) претендует на роль стандарта в области объектно-ориентированного анализа и проектирования.

Конкретный вариант Rational Rose определяется языком, на котором генерируются коды программ (C++, Smalltalk, PowerBuilder, Ada, SQLWindows и ObjectPro). Основной вариант - Rational Rose/C++ - позволяет разрабатывать проектную документацию в виде диаграмм и спецификаций, а также генерировать программные коды на С++. Кроме того, Rational Rose содержит средства реинжиниринга программ, обеспечивающие повторное использование программных компонент в новых проектах.

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

В составе Rational Rose можно выделить 6 основных структурных компонент: репозиторий, графический интерфейс пользователя, средства просмотра проекта (browser), средства контроля проекта, средства сбора статистики и генератор документов. К ним добавляются генератор кодов (индивидуальный для каждого языка) и анализатор для С++, обеспечивающий реинжиниринг - восстановление модели проекта по исходным текстам программ.

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

Технология программирования

Тоичкин Н.А.

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

Рекурсия - это способ определения объектов (понятий), при котором определение объекта строится, опираясь на само понятие объекта.

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

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

Категории задач, допускающие рекурсивные определения: 1. Задачи, математические модели которых записываются в виде рекурсивно определенных функций. Классический пример функции, определение которой может задаваться в рекурсивной форме F(n)=n!

Function factorial (n: byte) : byte;

Begin

If n=0 then factorial:= 1;

Else factorial = factorial (n-1) *n;

End;

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

2. Структура данных задачи определяется рекурсивным образом. Например: графы, деревья, списки. 3. Методы решения задачи допускают рекурсивное определение (игры, головоломки и др.).

Для оценки объема рекурсии вводится понятие глубины – число промежуточных вычислений функции в процессе ее вычисления для данного аргумента. Не всегда является очевидной.

Подобно операторам цикла, рекурсивыне процедуры могут приводить к незаканчивающимся вычислениям. Очевидно основное требование – чтобы рекурсивное обращение к P управлялось некоторым условием B, которое в какой-то момент становится ложным. Основной способ доказательства конечности некоторого повторяющегося процесса: 1.Определяется ф-я f(x) (х – множество переменных), т.ч. из f(x)≤0 следует истинность условия окончания цикла. 2.Доказывается, что при каждом проходении цикла f(x) уменьшается.

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

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

Пример итерации

Procedure F(i: integer): integer;

Int F:integer;j:integer;

Begin

p:=1;

For I=1 to I do p:=p*j;

F:=p;

End;

Анализ временной сложности (трудоемкости) алгоритмов.

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

Эффективность программы имеет две составляющие: память (или пространство) и время.

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

  • Временная эффективность программы определяется временем, необходимым для ее выполнения.

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

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

Порядок алгоритма - это функция, доминирующая над точным выражением временной сложности.

Функция f(n) имеет порядок O(g(n)), если имеется константа К и счетчик n0, такие, что f(n)(K*g(n), для n>n0.

Существуют три важных правила для определения сложности.

1. O(k*f)=O(f)

2. O(f*g)=O(f)*O(g) или O(f/g)=O(f)/O(g)

3. O(f+g) равна доминанте O(f) и O(g)

Здесь k обозначает константу, a f и g - функции.

О-СЛОЖНОСТЬ АЛГОРИТМОВ

O(1) Большинство операций в программе выполняются только раз или только несколько раз. Алгоритмами константной сложности. Любой алгоритм, всегда требующий независимо от размера данных одного и того же времени, имеет константную сложность.

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

О(N2), О(N3), О(Nа) Полиномиальная сложность. О(N2)-квадратичная сложность, О(N3)- кубическая сложность

О(Log(N)) Когда время работы программы логарифмическое, программа начинает работать намного медленнее с увеличением N. Такое время работы встречается обычно в программах, которые делят большую проблему в маленькие и решают их по отдельности.

O(N*log( N)) Такое время работы имеют те алгоритмы, которые делят большую проблему в маленькие, а затем, решив их, соединяют их решения.

O(2N) Экспоненциальная сложность. Такие алгоритмы чаще всего возникают в результате подхода именуемого метод грубой силы.

Временная сложность алгоритма может быть посчитана исходя из анализа его управляющих структур.(if, for,…простые выражения)

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

Например, рассмотрим алгоритм обработки элементов массива.

For i:=1 to N do

Begin

...

End;

Сложность этого алгоритма O(N), т.к. тело цикла выполняется N раз, и сложность тела цикла равна O(1).

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

For i:=1 to N do

For j:=1 to N do

Begin ...

End;

Сложность этой программы О(N2).

Существуют два способа анализа сложности алгоритма: восходящий (от внутренних управляющих структур к внешним) и нисходящий (от внешних и внутренним).

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

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

Несколько важных причин такого рода анализа:

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

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

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

Программирование на языках высокого уровня

Федоров А.М.

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

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

Вследствие этих причин используют так называемое динамическое распределение памяти (ДРП), позволяющее выделять (и освобождать) необходимые участки памяти в процессе выполнения программы. Естественно, что процессы выделения и освобождения жестко связаны с системой адресации и структурой памяти операционной системы и ЦВМ. Для того чтобы не утруждать программиста высокого уровня подробностями выделения и управления памятью, широко используют указатели. Для работы с указателями существует несколько процедур и функций: Addr – адрес указанного объекта; CSeg – текущее значение регистра CS; DSeg - текущее значение регистра DS; Ofs – смещение объекта в памяти; Seg – сегмент объекта; SPtr – текущее значение регистра SP; SSeg - текущее значение регистра SS; MaxAvail – размер в байтах наибольшего непрерывного свободного блока в куче; MemlAvail – кол-во свободных блоков в куче. Каждый указатель содержит адрес сегмента и размер смещения. Это позволяет «обманывать» компилятор путем приведения типов.

При использовании динамической памяти всегда следует понимать, что вы хотите взять - сам указатель или переменную, на которую он указывает. И поступать соответственно. [Все динамические переменные размещаются в так называемой куче (Heap) - области памяти, не занятой ни кодом, ни данными, ни системой, предоставляемой программе при загрузке ОС - посредством менеджера кучи (Heap Manager). Размеры кучи, предоставляемой программе ОС задаются директивой компилятора {$M размер_стека, миним_размер_кучи, макс_ее_размер}. Миним размер вычисляется программистом исходя из его личных соображений, как, впрочем, и макс-ный. При их задании следует учитывать, что слишком маленький мин-ный размер, да еще при не совсем правильной работе приводит к Run-time error 202 - Heap allocation error, а слишком большой макс-ный размер не позволит вызывать внешние исполняемые модули.]

Доступ к динамически размещенным переменным производится с помощью указателей. Для работы с указателями существует несколько процедур и функций. B C++: операция new: int *p=new int[100] – тип и размер. B С: ф-я malloc: int*p=(int*)malloc(n*sizeof(int)); - возвращает тип void, поэтому используется операция приведения типов.

Освобождение памяти: 1. delete[] (н-р, delete []p) – если зарезервировали с помощью new. 2. ф-я free(p) – если зарезервировали с помощью malloc.

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

[При проверке наличия доступного места в куче при работе в защищенном режиме следует учитывать, что выделение производится в два этапа: выделение локальной кучи размером HeapBlock, а затем распределение пространства по запросам. Как только текущая локальная куча исчерпывается, производится выделение новой.]

Проблема: 1) создание; 2) использование; 3) удаление.

Нарушение порядка действий этих этапов влечет к появлению ошибок.

1) попытка многократного удаления из ДП

Для того чтобы избежать ошибок повторного удаления исп-ют следующее правило: указатель, который не указывает ни на что (то есть не использовался при создании переменных или переменная, на которую он указывал уже удалена) должен иметь значение Null; перед каждым удалением любой динамической переменной необходимо производить анализ равенства указателя Null, в случае равенства - не производить удаления:

If P<>Null { Delete[]p; //free(p);

P:=null;}

2) ошибка времени выполнения;

3) неудаление объекта из ДП: мы создали объект, но забыли удалить.

4) потеря указателя на собственный объект. Можно после использования удалить, а затем снова использовать.

Списки.

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

Элемент любой дин. стр-ры – это структура struct, содержащая по крайней мере 2 поля – для хранения данных и для указателя.

В стеке и очереди 2 операции: добавление и выборка.

Бинарные деревья: узлы, каждый из которых содержит. Кроме данных. Не более 2х ссылок на различные бинарные деревья. На каждый узел имеется ровно 1 ссылка. Начальный узел – корень дерева. Для описания с помощью рекурсивных алгоритмов.

Указатели. На функцию, на объект, на void. Отличаются свойствами и набором допустимых операций.

1. Указатель на функцию содержит адрес в сегменте кода, по которому располагается исполняемый код функции, то есть адрес, по которому передается управление при вызове функции. Указатели на функции используются для косвенного вызова функции (не через ее имя, а через обращение к переменной, хранящей ее адрес), а также для передачи имени функции в другую функцию в качестве параметра. Указатель функции имеет тин «указатель функции, возвращающей значение заданного типа и имеющей аргументы заданного типа»: int (*fun) (double, double);

2. Указатель на объект содержит адрес области памяти, в которой хранятся данные определенного типа (основного или составного). Простейшее объявление указателя на объект (в дальнейшем называемого просто указателем) имеет вид: тип *имя;

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

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

Размер указателя зависит от модели памяти. Можно определить указатель на указатель и т. д.

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

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

Концепция объектно-ориентированного программирования. Полиморфизм и виртуальные методы.

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

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

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

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

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

Введение понятия «класс» - естественное развитие идей модульности. В классе структуры данных и ф-и их обработки соединяются. Класс используется только через его интерфейс. Детали реализации класса скрыты от пользователя за интерфейсом. Интерфейс класса – заголовки его методов. Идея классов является основой ООП.

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

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

1. Объединение данных с функциями их обработки в сочетании со скрытием ненужной для использования этих данных информации называется инкапсуляцией (encapsulation). Эта идея не нова и применялась в структурном и модульном программировании, а в ООП получила свое логическое завершение. Инкапсуляция повышает степень абстракции программы: данные класса и реализация его функций находятся ниже уровня абстракции, и для написания программы информация о них не требуется. Кроме того, инкапсуляция позволяет изменить реализацию класса без модификации основной части программы, если интерфейс остался прежним (например, при необходимости сменить способ хранения данных с массива на стэк). Простота модификации является очень важным критерием качества программы.

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

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

Наследование бывает двух видов: 1) одиночное – когда каждый класс имеет одного и только одного предка; 2) множественное – когда каждый класс может иметь любое количество предков.

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

3. Полиморфизм – этот принцип неразрывно связан с наследованием и гласит, что каждый класс наследник может обладать не только свойствами, унаследованными от предка, но и своими собственными. В частности, свойства предка могут быть перекрыты наследником - на место свойств предка могут быть подставлены свойства наследника. Существование принципа полиморфизма является естественным следствием существования принципа наследования: наследование без изменения набора свойств не имеет смысла. Кроме того, без полиморфизма невозможно реализовать объединение различных объектов (классов) по некоторому набору свойств (невозможно абстрагироваться от части свойств объектов), а без этого теряется весь смысл подхода.

Позднее связывание. Несмотря на то, что три перечисленных принципа называют "тремя китами ООП", сами по себе они не имеют смысла без наличия особого механизма, названного поздним (динамическим) связыванием.

Рассмотрим след. пример:

monstr *p; // описывается указатель на базовый класс

p = new daemon; // указатель ссылается на объект

Вызов методов объекта происходит в соответствии с типом указателя, а не фактическим типом объекта, на который он ссылается, поэтому при выполнении оператора:

p->draw (1, 1, 1, 1);

будет вызван метод класса monstr, а не daemon, поскольку ссылки на методы разрешаются во время компоновки программы. Этот процесс называется ранним связыванием. Чтобы вызвать метод класса daemon, можно использовать явное преобразование типа указателя:

((daemon * p)) -> draw (1, 1, 1, 1);

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

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

Для определения виртуального метода используется спецификатор virtual, например:

virtual void draw (int x, int y, int scale, int position);

Если определить метод draw в классе monstr как виртуальный, решение о том, метод какого класса вызвать, будет приниматься в зависимости от типа объекта, на который ссылается указатель:

monstr *r, *p;

r = new monstr; //создается объект класса monstr

p = new daemon; //создается объект класса daemon

r -> draw (1, 1, 1, 1); //вызывается метод monstr :: draw

p -> draw (1, 1, 1, 1); //вызывается метод daemon :: draw

p -> monstr::draw (1, 1, 1, 1); //обход механизма виртуальных методов

Если объект класса daemon будет вызывать метод draw не непосредственно, а косвенно (т.е. из другого метода, определенного в классе monstr), будет вызван метод draw класса daemon.

Итак, виртуальным называется метод, ссылка на который разрешается на этапе выполнения программы (virtual – «фактический», т.е. ссылка разрешается по факту вызова).

[Для каждого объекта содержащего хотя бы один виртуальный метод, компилятор создает таблицу виртуальных методов (vtbl), в которой для каждого виртуального метода записан его адрес в памяти. Адреса методов содержатся в таблице в порядке их описания в классах.

Каждый объект содержит скрытое дополнительное поле ссылки на vtbl, называемое vptr. Оно заполняется конструктором при создании объекта.

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

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

Можно создать функцию, параметром которой является указатель на абстрактный класс (содержащий хотя бы 1 вирт.метод). А на место этого параметра при выполнении программы может передаваться указатель на объект любого производного класса. Это позволяет создавать полиморфные функции, работающие с объектом любого типа в пределах одной иерархии.]

Методы и средства защиты компьютерной информации/Информационная безопасность и защита информации

Федоров А.М.

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

Криптография – преобразование секретной информации.

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

Требования к традиционным методам защитного преобразования:

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

2. Объем ключа не должен затруднять его запоминание или его рассылку.

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

4. Ошибка в шифровании не должна вызывать потерю информации, также как и ошибки при передаче.

5. Длина зашифрованного текста не может превышать длину исходного текста.

6. Временные и стоимостные затраты на шифрование и дешифрование определяются требуемой степенью защиты.

Современные методы.

  1. Метод перестановки (символы исходного текста меняются местами).

  2. Метод подстановки (символ заменяется на какой-либо другой).

  3. Метод комбинирования (все понемногу).

  4. Аддитивный метод (процесс наложения гамма- шифра по определенному закону на исходный текст )- гаммирование.

Особенности: 1 и 2 – короткая длина ключа, min затрат на реализацию, надежность пропорциональна сложности алгоритма, определенно сложный алгоритм.

4 – простой алгоритм, надежность пропорц. длине ключа, бесконечная длина ключа.

Алгоритмы шифрования бывают симметричные и несимметричные.

Симметричные: для шифрования и дешифрования используется один и тот же ключ (1, 2, 3).

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

  1. отказ отправителя от переданного сообщения 2)подделка получателем полученного сообщения 3)изменение получателем полученного сообщения 4)маскировка отправителя под другого абонента

Виды криптоаналитических атак.

Криптоанализ – анализ преобразования информации, методов преобразования с целью поиска возможности просмотра или изменения этой информации.

1.Анализ на основе шифротекста. (знание алгоритма и шифротекста, но не знание ключа) Атака относится к модели внешнего нарушения.

2.Анализ на основе открытого текста. (знание шифротекста, откр. Текста, интерес: ключ и алгоритм)

3.Анализ на основе выбранного открытого текста (знание шифр. Устройства, откр. Текста, шифротекста, интерес: алгоритм): модель внутреннего нарушения.

4.Анализ на основе выбранного шифра.

Методы идентификации и аутентификации объектов.

Идентификация - присвоение к/либо объекту или субъекту уникального образа, имени или числа. Аутентификация - установление подлинности : проверка яв-ся ли проверяемый объект на самом деле тем за кого себя выдает.

Цель процессов: опред-е полномочий, т.е. дано ли право обращаться к защищенному ресурсу.

Объекты идентификации:

  1. человек (оператор, пользователь, администратор, должностное лицо и т.д.) 2)некое тех-кое ср-во (терминал, дисплей, рабочая станция) 3)документы (листинги, программы работы с документами) 4)носители информации (магнитные ленты диски и т.п.) 5)некот инфа на устр-ах отобр-я данных (дисплей)

Субъекты идентификации и аутентификации:

  1. человек 2)некое аппаратное ср-во3)проги 4)выч с-мы в целом.

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

Средства идентификации:

  1. отпечатки пальцев, тембр голоса, личная подпись (с течением времени эти пар-ры м/ меняться. Также необх. работа сложной и дорогой аппаратуры. Чем сложнее аппаратура, тем больше вер-ть её отказа. Не все данные конфиденциальны) 2)Системы “ ключ - замок” 3)Лицу или объекту присв-ся уникальное имя и секретный пароль, кот хранится в системе и при входе пароли сравниваются

Применяемые схемы при аутентификации: