Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора 130стр.doc
Скачиваний:
93
Добавлен:
15.06.2014
Размер:
2.49 Mб
Скачать

18 Основнные понятия объектно-ориентированного программирования.

Объе́ктно-ориенти́рованное программи́рование (ООП) — парадигма программирования, основанная на представлении предметной области (и/или проблемной области) в виде системы взаимосвязанных абстрактных объектов и их реализаций. С появлением концепции ООП появилась новая структура данных — Класс. Это по сути дела тип данных, внешне похожий на структуру (в языке Си) или запись (в Pascal-е), в котором кроме данных (свойства) также содержались функции их обработки (методы).

Свойства:

  1. Свойство абстрагирования.

  2. Инкапсуляция.

  3. Модульность.

  4. Иерархичность.

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

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

Инкапсуляция – каждый объект обладает цельностью. Доступ производится через строгий интерфейс. Это принцип, согласно которому любой класс должен рассматриваться как чёрный ящик — пользователь класса должен видеть и использовать только его интерфейс класса и не вникать в его внутреннюю реализацию. Этот принцип (теоретически) позволяет минимизировать число связей между классами и, соответственно, упростить независимую реализацию и модификацию классов.

Модульность – абстракция на ещё более высоком уровне. Т.е. логически связанные между собой подпрограммы, переменные и т. д. группируются в отдельные файлы (модули).

Иерархичность – осуществление чёткой классификации для всех объектов для осуществления работы.

в виде дерева (без цикла);

цикличная (или сетевая);

Доп. свойства.

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

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

Сохраняемость - возможность сохранить текущее состояние и позже это восстановить.

19) Библиотека stl.

STL это самая эффективная библиотека для C++, существующая на сегодняшний день.

Основные концепции STL

Контейнер - это хранилище объектов (как встроенных, так и определённых пользователем типов). Простейшие виды контейнеров (статические и динамические массивы) встроены непосредственно в язык C++. Кроме того, стандартная библиотека включает в себя реализации таких контейнеров, как вектор (vector), список (list), очередь (deque), ассоциативный массив (map), множество (set), и некоторых других. Каждый контейнер обязан иметь соответствующий ему итератор (и только итератор).

Каждый класс контейнера, реализованный в STL, описывает набор типов, связанных с контейнером. При написании собственных контейнеров следует придерживаться этой же практики. Вот список наиболее важных типов:

value_type - тип элемента

size_type - тип для хранения числа элементов (обычно size_t)

iterator - итератор для элементов контейнера

key_type - тип ключа (в ассоциативном контейнере)

Алгоритм - это функция для манипулирования объектами, содержащимися в контейнере. Типичные примеры алгоритмов - сортировка и поиск. В STL реализовано порядка 60 алгоритмов, которые можно применять к различным контейнерам, в том числе к массивам, встроенным в язык C++.

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

Продолжение 19) библиотека STL.

Объекты-функции

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

template<class T,

class CmpFn> T &max(T &x1, T &x2, CmpFn cmp)

{

return cmp(x1, x2) ? x1 : x2;

}

Что такое CmpFn? Естественнее всего предположить, что это указатель на функцию. Однако вызов функции по указателю - операция довольно долгая. В нашем примере вызов займёт больше времени, чем выполнение всех остальных инструкций в функции max. Проблема в том, что при таком подходе к передаче функции её не удаётся объявить как встроенную (inline).

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

Таким образом, объекты-функции используются в целях оптимизации

Выводы:

Достоинство STL - это то, что библиотека действительно является кроссплатформенной.

Является относительно неэффективной в плане использования памяти

20) Понятие исключительной ситуации. Обработка исключительных ситуаций в языке C++.