Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические указания.doc
Скачиваний:
9
Добавлен:
18.04.2015
Размер:
619.52 Кб
Скачать

Методы класса

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

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

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

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

Рисунок 1 Последовательность поиска переменных в рамках метода по их имени

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

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

Приведем пример объявления нестатического метода в C++:

class Person {

float aMethod (int param1, float param2, char * param 3);

};

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

В случае, если метод является статическим, к его объявлению добавляется специальное ключевое слово static:

class Person {

static float aMethod (int param1, float param2, char * param 3);

};

Такой метод не будет иметь неявного аргумента:

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

Так, если мы в любое место класса «персона» добавим статическую переменную «количество персон»:

class Person {

int number; -- Индивидуальный номер человека

static int personCnt; -- Количество персон

char name[10]; -- Имя

int age; -- Возраст

float height; -- Рост

};

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

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

Следующим критерием классификации методов является их постоянство. Метод считается постоянным, если в нем не происходит изменения значений переменных того объекта, для которого он вызван. Приведем пример объявления постоянного метода в C++:

class Person {

float aMethod (int param1, float param2, char * param 3) const;

};

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