Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Механизмы защиты операционных систем




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

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

Авторизация.После успешной регистрации система должна осуществлять авторизацию (authorization) – предоставление субъекту прав на доступ к объекту. Средства авторизации контролируют доступ легальных пользователей к ресурсам системы, предоставляя каждому из них именно те права, которые были определены администратором, а также осуществляют контроль возможности выполнения пользователем различных системных функций.

Индивидуальные профили пользователей Windows

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

Родительский контроль в Windows 7 Фактически мы с вами можем сделать следующее:

1. Ограничить время пребывания ребенка за компьютером

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

3. Запретить запуск определенного ПО

 

Windows 7 Защитника Windows

Компоненты, использующиеся во время работы системы по своему функциональному наполнению больше всего похожи на антивирусы класса Internet Security. Первым из них является встроенный «антивирус», получивший название Защитник. С некоторых пор в Microsoft осознали, что предлагать пользователю только систему – значит, обрекать его на выход в Интернет без защиты. Поэтому, начиная с Windows 7, появился встроенный антивирус.

Брандмауэр – встроенный в Windows межсетевой экран. Межсетево́й экра́н, сетево́й экра́н, файерво́л, брандма́уэр — комплекс аппаратных или программных средств, осуществляющий контроль и фильтрацию проходящих через него сетевых пакетов в соответствии с заданными правилами.

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

 

SmartScreen автоматически сканирует все исполняемые exe-файлы, которые пользователь загружаете из Сети. Также выступает в роли веб-экрана, синхронизируясь с серверами Microsoft для обновления баз неблагонадёжных сайтов. То есть позволяет выполнять репутационную проверку сайтов. В Windows 7 существовал только как надстройка безопасности Internet Explorer. В Windows 8 работа модуля была перенесена на уровень операционной системы, тем самым отвязав компонент от конкретного браузера. При запуске загруженного файла, SmartScreen сканирует его и отправляет его цифровую подпись на серверы Microsoft. В случае если цифровая подпись соответствует хорошо известному приложению, система запускает его. Если о приложении мало что известно, или оно состоит в списке неблагонадежных, Windows 8 сообщит об этом, а в случае угрозы безопасности не станет запускать приложение без принудительных действий со стороны пользователя.

Установка на накопитель. Нововведение в «восьмёрке» в виде функции Windows To Go, которая позволяет записать образ системы на флешку и получать доступ к привычному рабочему окружению практически на любом имеющемся под рукой компьютере. С точки зрения безопасности эта встроенная функция позволила штатными средствами создавать LiveUSB.

 

 

Объектно-ориентированное проектирование. Создание моделей на языке UML.

 

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

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

UML позволяет также разработчикам программного обеспечения достигнуть соглашения в графических обозначениях для представления общих понятий (таких как класс, компонент, обобщение (англ. generalization), агрегация (англ. aggregation) и поведение) и больше сконцентрироваться на проектировании и архитектуре.

 

В UML используются следующие виды диаграмм:

 

Диаграмма классов

Диаграмма классов (Class diagram) — статическая структурная диаграмма, описывающая структуру системы, демонстрирующая классы системы, их атрибуты, методы и зависимости между классами.

Существуют разные точки зрения на построение диаграмм классов в зависимости от целей их применения:

· концептуальная точка зрения — диаграмма классов описывает модель предметной области, в ней присутствуют только классы прикладных объектов;

· точка зрения спецификации — диаграмма классов применяется при проектировании информационных систем;

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

Диаграмма компонентов

Диаграмма компонентов (Component diagram) — статическая структурная диаграмма, показывает разбиение программной системы на структурные компоненты и связи (зависимости) между компонентами. В качестве физических компонент могут выступать файлы, библиотеки, модули, исполняемые файлы, пакеты и т. п.

Диаграмма композитной/составной структуры[править | править вики-текст]

Шаблон проектирования Декоратор на диаграмме кооперации

Диаграмма композитной/составной структуры (Composite structure diagram) — статическая структурная диаграмма, демонстрирует внутреннюю структуру классов и, по возможности, взаимодействие элементов (частей) внутренней структуры класса.

Подвидом диаграмм композитной структуры являются диаграммы кооперации (Collaboration diagram, введены в UML 2.0), которые показывают роли и взаимодействие классов в рамках кооперации. Кооперации удобны при моделировании шаблонов проектирования.

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

Диаграмма развёртывания[править | править вики-текст]

Диаграмма развёртывания (Deployment diagram, диаграмма размещения) — служит для моделирования работающих узлов (аппаратных средств,англ. node) и артефактов, развёрнутых на них. В UML 2 на узлах разворачиваются артефакты (англ. artifact), в то время как в UML 1 на узлах разворачивались компоненты. Между артефактом и логическим элементом (компонентом), который он реализует, устанавливается зависимость манифестации.

Диаграмма объектов[править | править вики-текст]

Диаграмма объектов (Object diagram) — демонстрирует полный или частичный снимок моделируемой системы в заданный момент времени. На диаграмме объектов отображаются экземпляры классов (объекты) системы с указанием текущих значений их атрибутов и связей между объектами.

Диаграмма пакетов[править | править вики-текст]

Диаграмма пакетов (Package diagram) — структурная диаграмма, основным содержанием которой являются пакеты и отношения между ними. Жёсткого разделения между разными структурными диаграммами не проводится, поэтому данное название предлагается исключительно для удобства и не имеет семантического значения (пакеты и диаграммы пакетов могут присутствовать на других структурных диаграммах). Диаграммы пакетов служат, в первую очередь, для организации элементов в группы по какому-либо признаку с целью упрощения структуры и организации работы с моделью системы.

Диаграмма деятельности

Диаграмма деятельности (Activity diagram) — диаграмма, на которой показано разложение некоторой деятельности на её составные части. Под деятельностью (англ. activity) понимается спецификация исполняемого поведения в виде координированного последовательного и параллельного выполнения подчинённых элементов — вложенных видов деятельности и отдельных действий (англ. action), соединённых между собой потоками, которые идут от выходов одного узла к входам другого.

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

Аналогом диаграмм деятельности являются схемы алгоритмов по ГОСТ 19.701-90 и дракон-схемы.

Диаграмма автомата[править | править вики-текст]

Диаграмма автомата (State Machine diagram, диаграмма конечного автомата, диаграмма состояний) — диаграмма, на которой представлен конечный автомат с простыми состояниями, переходами и композитными состояниями.

Конечный автомат (англ. State machine) — спецификация последовательности состояний, через которые проходит объект или взаимодействие в ответ на события своей жизни, а также ответные действия объекта на эти события. Конечный автомат прикреплён к исходному элементу (классу, кооперации или методу) и служит для определения поведения его экземпляров.

Аналогом диаграмм автомата (диаграмм состояний) являются дракон-схемы.

Диаграмма сценариев использования[править | править вики-текст]

Диаграмма вариантов использования (Use case diagram, диаграмма прецедентов) — диаграмма, на которой отражены отношения, существующие междуактёрами и вариантами использования.

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

Диаграммы коммуникации и последовательности[править | править вики-текст]

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

Диаграмма коммуникации (Communication diagram, в UML 1.x — диаграмма кооперации, collaboration diagram) — диаграмма, на которой изображаются взаимодействия между частями композитной структуры или ролями кооперации. В отличие от диаграммы последовательности, на диаграмме коммуникации явно указываются отношения между элементами (объектами), а время как отдельное измерение не используется (применяются порядковые номера вызовов).

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

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

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

Диаграмма обзора взаимодействия[править | править вики-текст]

Диаграмма обзора взаимодействия (Interaction overview diagram) — разновидность диаграммы деятельности, включающая фрагменты диаграммы последовательности и конструкции потока управления.

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

Диаграмма синхронизации[править | править вики-текст]

Диаграмма синхронизации (Timing diagram) — альтернативное представление диаграммы последовательности, явным образом показывающее изменения состояния на линии жизни с заданной шкалой времени. Может быть полезна в приложениях реального времени.

Преимущества UML[править | править вики-текст]

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

· UML позволяет описать систему практически со всех возможных точек зрения и разные аспекты поведения системы;

· Диаграммы UML сравнительно просты для чтения после достаточно быстрого ознакомления с его синтаксисом;

· UML расширяет и позволяет вводить собственные текстовые и графические стереотипы, что способствует его применению не только в сфере программной инженерии;

· UML получил широкое распространение и динамично развивается.

 

 

30. Классы и объекты в С++. Определение класса, создание объекта. Конструкторы и деструкторы. Спецификаторы доступа private, protected и public. .

 

Классы в С++ — это абстракция описывающая методы, свойства, ещё не существующих объектов. Объекты — конкретное представление абстракции, имеющее свои свойства и методы. Созданные объекты на основе одного класса называются экземплярами этого класса. Эти объекты могут иметь различное поведение, свойства, но все равно будут являться объектами одного класса. В ООП существует три основных принципа построения классов:1)Инкапсуляция -это свойство, позволяющее объединить в классе и данные, и методы, работающие с ними и скрыть детали реализации от пользователя.

2)Наследование — это свойство, позволяющее создать новый класс-потомок на основе уже существующего, при этом все характеристики класса родителя присваиваются классу-потомку.3)Полиморфизм — свойство классов, позволяющее использовать объекты классов с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.

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

class Screen { /* ... */ }; class Screen { /* ... */ } myScreen, yourScreen;

Cоздание объекта. Объекты создаются так: ПЕРЕМЕННАЯ = ИМЯКЛАССА()

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

Конструктор и деструктор 1)конструктор и деструктор, всегда объявляется в разделе public; 2)при объявлении конструктора, тип данных возвращаемого значения не указывается, в том числе — void!!!;3)у деструктора также нет типа данных для возвращаемого значения, к тому же деструктору нельзя передавать никаких параметров;

4)имя класса и конструктора должно быть идентично;5)имя деструктора идентично имени конструктора, но с приставкой ~ ;6)В классе допустимо создавать несколько конструкторов, если это необходимо. Имена, согласно пункту 2 нашего списка, будут одинаковыми. Компилятор будет их различать по передаваемым параметрам (как при перегрузке функций). Если мы не передаем в конструктор параметры, он считается конструктором по умолчанию;

 

 

31. Шаблоны классов и шаблоны функций в С++. Специализация.

 

Шаблоны — средство языка C++, предназначенное для кодирования обобщённых алгоритмов, без привязки к некоторым параметрам (например, типам данных, размерам буферов, значениям по умолчанию).

В C++ возможно создание шаблонов функций и классов.

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

class SomeClass{          int SomeValue;          int SomeArray[20];          ...};

Для одной конкретной цели мы можем использовать этот класс. Но, вдруг, цель немного изменилась, и нужен еще один класс. Теперь нужно 30 элементов массива SomeArray и вещественный тип SomeValue элементов SomeArray. Тогда мы можем абстрагироваться от конкретных типов и использовать шаблоны с параметрами. Синтаксис: в начале перед объявлением класса напишем слово template и укажем параметры в угловых скобках. В нашем примере:

template < int ArrayLength, typename SomeValueType > class SomeClass{          SomeValueType SomeValue;          SomeValueType SomeArray[ ArrayLength ];          ...};

Тогда для первой модели пишем:

SomeClass < 20, int > SomeVariable;

для второй:

SomeClass < 30, double > SomeVariable2;

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

Шаблоны функций

Синтаксис описания шаблона

Шаблон функции начинается с ключевого слова template, за которым в угловых скобках следует список параметров. Затем следует объявление функции:

template< typename T > void sort( T array[], int size ); // прототип: шаблон sort объявлен, но не определён  template< typename T >void sort( T array[], int size ) // объявление и определение{ T t; for (int i = 0; i < size - 1; i++) for (int j = size - 1; j > i; j--) if (array[j] < array[j-1]) {   t = array[j];   array[j] = array[j-1];   array[j-1] = t; }} template< int BufferSize >    // целочисленный параметрchar* read(){ char *Buffer = new char[ BufferSize ]; /* считывание данных */ return Buffer;}

Ключевое слово typename появилось сравнительно недавно, поэтому стандарт[1] допускает использование class вместо typename:

template< class T >

Вместо T допустим любой другой идентификатор.

Пример использования[править | править вики-текст]

Простейшим примером служит определение минимума из двух величин.

Если a меньше b то вернуть а, иначе — вернуть b

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

Так выглядит шаблон функции определения минимума:

template< typename T >T min( T a, T b ){ return a < b ? a : b;}

Для вызова этой функции можно просто использовать её имя:

min( 1, 2 );min( 'a', 'b' );min( string( "abc" ), string( "cde" ) );

Вызов шаблонной функции[править | править вики-текст]

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

int i[5] = { 5, 4, 3, 2, 1 };sort< int >( i, 5 ); char c[] = "бвгда";sort< char >( c, strlen( c ) ); sort< int >( c, 5 ); // ошибка: у sort< int > параметр int[], а не char[] char *ReadString = read< 20 >();delete [] ReadString;ReadString = read< 30 >();

Для каждого набора параметров компилятор генерирует новый экземпляр функции. Процесс создания нового экземпляра называется инстанцированием шаблона.

В примере выше компилятор создал две специализации шаблона функции sort (для типов char и int) и две специализации шаблона read (для значений BufferSize 20 и 30). Последнее скорее всего расточительно, так как для каждого возможного значения параметра компилятор будет создавать новые и новые экземпляры функций, которые будут отличаться лишь одной константой.

Выведение значений параметров[править | править вики-текст]

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

int i[5] = { 5, 4, 3, 2, 1 };sort( i, 5 );              // вызывается sort< int > char c[] = "бвгда";sort( c, strlen( c ) );    // вызывается sort< char >

Возможно выведение и в более сложных случаях.

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

template< int size >class IntegerArray{ int Array[ size ]; /* ... */};template< int size > // Прототип шаблонаvoid PrintArray( IntegerArray< size > array ) { /* ... */ } // Вызов шаблона // Использование объекта шаблонаIntegerArray<20> ia;PrintArray( ia );

Правила выведения введены в язык для облегчения использования шаблона и для избежания возможных ошибок, например попытка использования sort< int > для сортировки массива символов.

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

min (0, 'a');min (7, 7.0);

Ошибки в шаблонах[править | править вики-текст]

Некоторые ошибки в описании шаблона могут быть выявлены уже в месте описания. Эти ошибки не зависят от конкретных параметров. Например:

template< class T >void f( T data ){ T *pt = 7;                  // ошибка: инициализация указателя целым числом datA = 0;                   // ошибка: неизвестный идентификатор datA *pt = data                  // ошибка: нет точки с запятой}

Ошибки, связанные с использованием конкретных параметров шаблона, нельзя выявить до того, как шаблон использован. Например, шаблон min сам по себе не содержит ошибок, однако использование его с типами, для которых операция '<' не определена, приведёт к ошибке:

struct A{ int a;};A obj1, obj2;min( obj1, obj2 );

Если ввести операцию '<' до первого использования шаблона, то ошибка будет устранена. Так проявляется гибкость шаблонов в C++:

friend inline bool operator< ( const A& a1, const A& a2 ) { return a1.a < a2.a; } min( obj1, obj2 );

Шаблоны классов

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

template< class T >class List{ /* ... */public: void Add( const T& Element ); bool Find( const T& Element ); /* ... */};

Использование шаблонов[править | править вики-текст]

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

List<int> li;List<string> ls;li.Add( 17 );ls.Add( "Hello!" );

 

 










Последнее изменение этой страницы: 2018-04-12; просмотров: 308.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...