Правильно для маленькой программы и недопустимо для большой системы. • Аналогия: строительство будки для собаки и строительство небоскрёба

Вид материалаПрограмма

Содержание


3)Основные идеи инкрементального программирования(РИС)
7)Проблема создания и уничтожение объектов.
12.13)Иерархические отношения между объектами:обьекты как переменные
Операционная система – набор программ, которые обеспечивают
Сетевые ОС – обеспечивают поддержку работы пользователей в сети. • Распределённые
Файловая система
Сетевые утилиты
Процесс – последовательный поток выполнения в его собственном
Предсказуемость выполнения
Использование ресурсов
Тип процесса
Суммарное время работы процесса
Взаимодействие потоков и процессов при помощи сигналов.
Действие по умолчанию
Выполнение пользовательского обработчика
N: Созданная производителем продукция поступает на склад. Склад может хранить N
P1 , потребитель извлекает продукцию с периодом P
Возможность блокирования задачи в течение длительного времени
Решает более (менее) важную задачу чем другие
42)Иерархия памяти. Виртуальная память и управление ею. Иерархия памяти(РИС)
...
Полное содержание
Подобный материал:
  1   2   3   4

1)Понятия системного программного продукта(РИС)

• Современные задачи и их сложность. Один разработчик не в состоянии

охватить все аспекты такой программы.

• Простая программа и её назначение: пригодна для запуска автором и его

знакомыми на той же системе, где была разработана.

• Программа → программный продукт. Требования к программному

продукту (ПП): обобщённый стиль, надёжность, документация,

сопровождение.

• Программа → программный комплекс. Требования к программному

комплексу (ПК): набор взаимодействующих программ (компонент),

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

• .Системный программный продукт – комплекс взаимодействующих

программ, надлежащим образом написанный, протестированный и

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

применения пользователями.

• Системное программирование – процесс разработки сложных

программных систем в целом или их отдельных компонент .РИС

2)Стадии разработки программного обеспечения(РИС)

• Типичная ошибка: после получения задания немедленное написание кода.

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

• Аналогия: строительство будки для собаки и строительство небоскрёба.

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

исследование проблемы, проектирование, написание и тестирование

компонент, системное тестирование, документирование и сопровождение.

• Разработка ПО – итеративный процесс.

3)Основные идеи инкрементального программирования(РИС)

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

• Знание большого числа языков или сред программирования ничуть не

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

разработки.

• Результат программирования – продукт определённого качества.

• Технология программирования – наука о производстве программного

продукта.

• Виды технологий: процедурно-ориентированное, модульное, «сверху-

вниз», функциональное, логическое, инкрементальное, абстрактные типы

данных, объектно-ориентированное.

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

различных подсистем.

2.Принципы инкрементального программирования

• Программа не пишется – она строится – ещё точнее наращивается путём

пошаговой разработки.

• Этап №1: заставить выполняться (пустая программа).

• Этап №2: создание каркаса системы, реализующего схему работы системы

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

подпрограммы) и определяются необходимые переменные.

• Этап №3,4,...: обрастание системы «мясом». Реализация заглушек,

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

переменных. Последовательное добавление новой функциональности

(наращивание каркаса).

• Преимущества технологии: на каждом шаге имеем работающую систему,

быстрое макетирование системы, положительный психологический эффект.

• Отличие от технологии «сверху-вниз» – осуществляется «движение» не

только вниз но и вширь (добавление функциональности по горизонтали в

структуре модулей)

5)Понятия объекта:состояние,поведение,методы. Понятие класса и

идентичность объектов.(РИС)

1.Понятие объекта и класса

• Базовые единицы в ООП – объекты. Объекты это элементы проблемной

области и их представление в области реализации. ООП описывает проблему

в терминах самой проблемы, а не компьютера. Пример: продажа напитков

торговым автоматом.

• Всё является объектом. Пример: прием и анализ сигналов из окружающей

среды.

• Программа есть набор объектов, взаимодействующих путем посылки

сообщений.

• Объект – нечто, обладающее состоянием, поведением и

индивидуальностью.

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

друга. Объект может иметь имя.

• Состояние объекта характеризуется перечнем (обычно статическим) всех

свойств объекта и текущими (обычно динамическими) значениями каждого

из этих свойств. Значения – количественные характеристики и ссылки на

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

памяти компьютера.

• Поведение – это то, как объект действует и реагирует, поведение

выражается в терминах состояния объекта и передачи сообщений.

• Структура и поведение схожих объектов определяют общий для них класс.

Термины «экземпляр класса» и «объект» – синонимы.

7)Проблема создания и уничтожение объектов.

1.Проблема инициализации

• Для всех объектов должна быть выполнена инициализация (задание их

начального состояния).

• Способ решения проблемы: определение обычного метода для

инициализации. Недостаток подхода: можно забыть его вызвать или вызвать

несколько раз.

• Решение в ООП: использование конструктора – специального метода,

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

• Инструкция объявления переменной – инструкция действия.

• Конструкторы глобальных объектов выполняются до начала работы

функции main().

• Синтаксис конструктора: имяКласса(списокПараметров)

• Конструктор без параметров называется конструктором по умолчанию.


2.Проблема уничтожения

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

автоматически при его уничтожении.

• Главная задача деструктора – освобождение ресурсов, которые находятся

во владении объектом.

• Синтаксис деструктора: ~имяКласса()

• Для автоматических объектов деструктор вызывается при выходе из их

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

• Пример определения деструктора в классе SlotMachine.

9)Статические и постоянныечлены класса.Встраевыемые методы.

• Задача: учет количества торговых автоматов. Требуется в любой момент

времени иметь возможность узнать текущее количество существующих

объектов класса SlotMachine.

• Решение: поддержка счетчика объектов. При создании в конструкторе

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

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

вероятность конфликта имен и отсутствие инкапсуляции.

• Решение первой проблемы – использование статической переменной

состояния. Она разделяется между экземплярами класса. Не является частью

объекта, но является частью класса.

• Объявление статической переменной состояния выполняется в

определении класса: static тип имяПеременной; Статическая переменная

состояния определяется в файле-реализации класса: тип

имяКласса::имяПеременной;

• Решение второй проблемы – использование статического метода для

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

определении класса: static тип имяМетода(параметры);

2.Свойство постоянности

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

своего состояния, необходимо объявлять константными: const тип

имяПеременной(параметры);

• Допустимые операции над постоянными объектами – те, которые не

меняют его состояния.

• Объявление метода не меняющим состояния объекта, для которого он

вызван, выполняется в определении класса: тип имяМетода(параметры)

const;. В определении метода также указывается ключевое слово const.

• Пример: объявление цены напитка в постоянной переменной состояния.

• Пример: метод canDrink не должен менять состояние объекта, для

которого вызывается. Поэтому объявляем его постоянным.

3.Встраивание функций и методов

• Проблема эффективности реализации «коротких» методов: canDrink,

getCount и деструктора.

• Решение проблемы без нарушения инкапсуляции – использование

встраиваемых методов.

• Отличие встраиваемых методов от обычных – подстановка тела метода в

точке его вызова.

• Варианты определения метода встраиваемым:

– включение реализации метода в определение класса;

– приведение реализации метода в файле, содержащем определение

класса, со спецификатором inline.

• Недостатки использования встраиваемых методов – объем исполняемой

программы и открытая реализация.

• Рекомендации по использованию: очень короткие и приводить реализацию

вне определения класса. В противном случае смешиваются акценты «что»

делает класс с «как» делает класс.

10)Дружественные функции

• Задача: изымание дохода из автомата.

• Данную операцию можно рассматривать не как запрос к автомату, а как

действие над ним. В этом случае правильный подход – реализация в виде

функции, а не метода класса SlotMachine.

• Проблема: инкапсуляция и необходимость доступа к закрытым членам.

Решение – определение дружественной функции.

• Объявление дружественной функции в определении класса: friend тип

имя(параметры);

• Определение дружественной функции размещается в любом удобном

модуле – обычно в файле-реализации соответствующего класса.

• Дружественная функция является частью интерфейса класса. Поэтому она

не нарушает инкапсуляции. Расширенные права ей делегирует класс, а не его

пользователи.

• Дружественными могут быть целые классы или отдельные методы

классов.

11) Понятие полиморфизма в программировании.Виды полиморфизма

В языке с++.

Полиморфизм. Одно и тоже имя можно использовать для обозначения

нескольких действий, решающих:

– подобные, но не одинаковые задачи;

– одну задачу разными способами.

• Основной принцип: один интерфейс, множество методов. Выбор

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

– на этапе компиляции (статический полиморфизм)

– на этапе выполнения программы (динамический полиморфизм).

• Проявления полиморфизма в C++: перегрузка функций и методов,

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


12.13)Иерархические отношения между объектами:обьекты как переменные

состояния.

Иерархические отношения между классами:механизм наследования.

1.Категории иерархических отношений

• Для построения модели, адекватной реальному миру, требуется отражение

отношений, существующими между понятиями реального мира.

• Прагматические мотивы: повторное использование программного кода без

переработки уже существующего, высокоуровневое представление понятий.

• Основные категории иерархических отношений между объектами и

классами: композиция («часть-целое») и наследование свойств.

• Примеры иерархических отношений:

– материнская плата компьютера состоит из набора компонент:

процессор, гнёзда для модулей с оперативной памятью, разъёмы шины

PCI (композиция);

– «книга», «журнал», «газета» являются конкретными видами

абстрактного понятия «печатная продукция».

2.Композиция объектов

• Элементарные понятия – их состояние выражается в виде совокупности

элементарных величин (числа, символы, строки). Пример: «точка на

плоскости».

• Составные понятия – их состояние включает в себя другие объекты.

Пример: «отрезок» как совокупность двух точек.

• Идеи композиции:

представление сложных понятий в виде совокупности более простых;

объединение существующих понятий в новую конструкцию.

• В качестве переменной состояния может выступать объект некоторого

класса. Правила объявления и использования объектов-переменных ничем

не отличаются от правил для обычных переменных состояния.

• Синтаксис определения составного класса и определения конструкторов.

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

переменных-состояния, а затем конструктор самого составного объекта.

• При уничтожении сначала выполняется деструктор составного объекта, а

затем автоматически вызываются деструкторы его составных частей.


3.Наследование свойств

• Индикатор названия напитка является текстовым индикатором и

отображает текст. Индикаторы исправности и готовности выдачи –

бинарные индикаторы состояния вида «да/нет».

• Модели информационного индикатора и бинарного индикатора состояния

имеют много общего. Они оба являются представителями понятия

«индикатор» и обладают свойствами, присущими всем индикаторам.

• Многие понятия наследуют свойства других понятий. Примеры: медведь

есть млекопитающее, дом есть недвижимость. Пример общих свойств

недвижимости: местоположение, стоимость, владелец, план. Недвижимость

можно продать, сменить владельца, напечатать план.

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

свойства. Примеры новых свойств дома: жители дома, количество этажей,

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

выполнить прокладку коммуникаций.

• Каждый вид индикатора добавляет новые свойства – команды управления

и состояние:

– текстовый – задание текста и сам текст;

– бинарный – установка признака «да/нет» и значение признака.

14)Виртуальные методы и позднее связывание.

• Раннее связывание – определение адреса вызываемой функции во время

компиляции программы.

• Позднее связывание – определение адреса вызываемой функции во время

выполнения программы.

• При позднем связывании адрес функции определяется по типу объекта,

для которого осуществляется вызов через указатель.

• Позднее связывание применяется для виртуальных (полиморфных)

методов.

• Синтаксис объявления метода виртуальным: virtual объявлениеМетода;

• Вызов виртуального метода осуществляется несколько медленнее, чем

вызов простого метода.

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

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

• Позднее связывание позволяет корректно выполнять действия с

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

• Для индикатора метод control требуется объявить виртуальным.

15)Понятие абстрактного класса.

• В реальном мире экземпляров типа «Индикатор» в чистом виде не

существует. Существуют текстовые индикаторы, световые и проч.

Аналогично с понятием «Печатная продукция» – реально существуют книги,

журналы, газеты и т. д.

• Понятия «Печатная продукция» и «Индикатор» – абстрактные понятия.

• Для выражения данного свойства в ООП используют абстрактные

классы.

• Нельзя создавать объекты абстрактного класса.

Пример абстрактного класса

• В реальном мире экземпляров типа «Индикатор» в чистом виде не

существует. «Индикатор» является абстрактным понятием.

• Абстрактная операция – отображение состояния.

• В базовом классе Viewer метод control – чисто виртуальный.

• Реализация метода Viewer::control не приводится.

class Viewer {

//...

private:

virtual void control(std::ostream& os) =0;

//...

};

16) Использование потокового ввода-вывода.

1.Введение в потоковый ввод-вывод

• Стандартная библиотека содержит удобные объектно-ориентированные

средства ввода-вывода.

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

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

• В распоряжение предоставляется единый удобный интерфейс работы с

потоками. Это обеспечивается использованием наследования и

динамического полиморфизма.

• Предопределённые потоки: cin, cout, cerr, clog.

• Базовый класс: ios. Производные: iostream (поток для ввода и вывода),

istream (поток ввода), ostream (поток вывода).

• Операции ввода-вывода реализуются через перегруженные операторы >>

(ввод) и << (вывод).

• Чтение всей строки целиком из потока выполняется функцией getline.

• Пример построчного чтения.

//считывание всей строки

#include

int main()

{

std::string line;

std::getline(std::cin,line);

std::cout << line.length() << std::endl;

return 0;

}

2.Средства форматирования

• Потоки ввода-вывода позволяют форматировать данные и изменять

параметры ввода.

• Управление форматированием информации может осуществляться с

помощью флагов формата.

• Примеры флагов: left (right), dec (oct, hex), scientific (fixed), boolalpha.

Флаги определены внутри класса ios. Доступ к ним через оператор

расширения области видимости ::

• Управление установкой флагов выполняется через методы потоков: setf,

unsetf, flags.

unsigned value;

cin >> value;

cout.unsetf(ios::dec);

cout.setf(ios::hex);

cout << value << endl;

cout.setf(ios::boolalpha);

cout << true << ' ' << false << endl;

• Управление шириной поля (метод width), точностью для чисел с

плавающей точкой (метод precision) и символом-заполнителем (метод fill).

• Управление форматированием информации может осуществляться с

помощью манипуляторов. Манипулятор – специальная функция, которая

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

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

необходимо подключить .

• Примеры манипуляторов: left (right), dec (oct, hex), setw(int w), scientific

(fixed), boolalpha (noboolalpha).

#include

//...

unsigned value;

cin >> value;

cout.fill('0');

cout << setw(8) << hex << value << endl;

cout.precision(4);

cout << 123.45 << endl;


3.Файловый ввод-вывод

• Всё что применимо к консольному вводу-выводу, справедливо и для

файлового. Это достигается наследованием.

• Классы: fstream (поток для ввода и вывода), ifstream (поток ввода),

ofstream (поток вывода).

• Открытие файла: через конструктор или методом