Поведение.
Объектно-ориентированное программирование
Свободные подпрограммы — это процедуры и функции, которые выполняют роль операций высокого уровня над объектом или объектами одного или разных классов. Свободные процедуры обычно группируются в соответствии с классами, для которых они создаются. В чисто объектно-ориентированных языках определять процедуры и функции вне классов не допускается. В гибридных языках, выросших из процедурных языков… Читать ещё >
Поведение. Объектно-ориентированное программирование (реферат, курсовая, диплом, контрольная)
Объекты не существуют изолированно, а подвергаются воздействию или сами воздействуют на другие объекты.
Поведение — это то, как объект действует и реагирует; поведение выражается в терминах состояния объекта и передачи сообщений. Поведение объекта — это его наблюдаемая и проверяемая извне деятельность.
Операция — это услуга, которую можно запросить у любого объекта класса для воздействия на его поведение.
Например, клиент может активизировать операции push и pop для того, чтобы управлять объектом-стеком (добавить или изъять элемент).
В чисто объектно-ориентированном языке принято говорить о передаче сообщений между объектами. В C++ мы говорим, что один объект вызывает функцию-член другого. В основном понятие сообщение совпадает с понятием операции над объектами.
Передача сообщений — это один уровень, задающий поведение. Из нашего определения следует, что состояние объекта также влияет на его поведение.
Рассмотрим торговый автомат. Мы можем сделать выбор, но поведение автомата будет зависеть от его состояния. Если мы не опустили в него достаточную сумму, скорее всего ничего не произойдет. Если же денег достаточно, автомат выдаст нам желаемое (и тем самым изменит свое состояние).
Некоторые операции изменяют состояние. В связи с вышесказанным можно заключить, что состояние объекта представляет суммарный результат его поведения.
Операция — это услуга, которую класс может предоставить своим клиентам. На практике типичный клиент совершает над объектами операции следующих видов:
- — модификатор — это операция, которая изменяет состояние объекта;
- — селектор — это операция, считывающая состояние объекта, но не меняющая состояния;
- — конструктор — это операция создания объекта и/или его инициализации; в С++ конструктор имеет то же имя, что и класс;
- — деструктор — это операция, освобождающая ресурсы, которые использует объект, и/или разрушающая сам объект; в С++ имя деструктора состоит из имени класса, перед которым ставится знак «тильда» — «~» .
Две последние операции являются универсальными. Они обеспечивают инфраструктуру, необходимую для создания и уничтожения экземпляров класса.
Если у класса есть конструктор, то он вызывается всегда, когда создается объект класса. Если у класса есть деструктор, то он вызывается всегда, когда объект класса уничтожается.
Объекты могут создаваться следующим образом:
- — автоматический объект создается каждый раз, когда его описание встречается при выполнении программы, и уничтожается каждый раз при выходе из блока, в котором оно появилось;
- — статический объект создается один раз, при запуске программы, и уничтожается один раз, при ее завершении;
- — объект в свободной памяти создается с помощью операции new и уничтожается с помощью операции delete;
- — объект-член создается как подобъект другого класса.
Пример.
Расширим описание класса Stack, с тем чтобы программист мог задавать максимальный размер каждого создаваемого стека (размер массива s).
class Stack {.
public:
Stack (int n); // конструктор, n — максимальный размер
~Stack (); // деструктор
void push (int el); // модификатор
int pop (); // модификатор
bool isFull () const; // селектор
bool isEmpty () const; // селектор
.. .
};
Конструктор с одним аргументом может служить также для преобразования типа своего аргумента в тип конструктора.
Пример. Рассмотрим определение класса complex.
class complex {.
double re, im;
public:
complex (double r, double i);
complex (double r);
.. .
};
Мы определили два конструктора, один из которых имеет один аргумент и служит для инициализации комплексного числа (его действительной части) значением вещественного числа. Теперь мы можем записать два эквивалентных оператора.
complex a = complex (1);
complex a = 1;
Можно запретить использование конструктора для таких преобразований, объявив его с ключевым словом explicit.
class Stack {.
public:
explicit Stack (int n); // конструктор, задающий максимальный.
.. .// размер стека, не используется для преобразования.
};
Для инициализации отдельных частей объекта с помощью конструктора служат инициализаторы конструктора. Важность инициализаторов в том, что только с их помощью можно инициализировать константные члены и члены, являющиеся ссылками. Используется синтаксис следующего примера:
class Х {.
const int i;
Stack &ps;
X (int ii, Stack &s): i (ii), ps (s){.. .} // i получает значение ii, а ps — s.
};
В чисто объектно-ориентированных языках определять процедуры и функции вне классов не допускается. В гибридных языках, выросших из процедурных языков, таких как C++, допускается описывать операции как независимые от объектов подпрограммы.
Операции, определенные вне классов, называют свободными подпрограммами. В C++ они называются функциями-нечленами.
bool check_stack (Stack & my_stack, int el).
{.
Stack temp_stack;
.. .// используя дополнительный стек temp_stack, проверить,.
//есть ли в my_stack элемент el.
}.
Свободные подпрограммы — это процедуры и функции, которые выполняют роль операций высокого уровня над объектом или объектами одного или разных классов. Свободные процедуры обычно группируются в соответствии с классами, для которых они создаются.