
- •Часть II Объектно-ориентированное проектирование Конспект лекций
- •Процесс разработки пп
- •Пример ооПр (объектно-ориентированного проектирования)
- •Определение объектно-ориентированного языка программирования (оояп)
- •Разработка класса в ооп.
- •Уровни видимости
- •Методы класса
- •Конструкторы и деструктор
- •Объявление методов класса
- •Реализация класса: общие положения
- •Определение конструкторов: примеры
- •Определение методов класса
- •Использование класса
- •Примеры использования класса
- •Перегрузка функций
- •Перегрузка операций
- •Выбор функции
- •Друзья класса
- •Друзья или члены
- •Преобразования типа
Уровни видимости
Уровень_видимости задается одним из трех ключевых слов: private[‘прайвит], protected[прэ’тэктид], public[‘паблик]. Порядок следования их произволен, они могут появляться неоднократно или отсутствовать в определении класса. Область действия каждой части продолжается до тех пор, пока в определении класса не появится метка другой части или не будет обнаружен конец описания класса.
private - определяет закрытую часть класса, недоступную извне класса.
protected - пока для нас аналогичен private; различия между ними проявляются при использовании наследования.
члены класса, помещенные в закрытую или защищенную части класса, доступны только изнутри класса (т.е. из функций-членов класса).
public - определяет открытую часть класса, видимую и доступную извне класса.
Методы класса определены для класса, предназначены для обработки информации, определяющей состояние класса, поэтому всегда видят все его части.
Пример определения класса на языке C++:
а) с использованием class б) с использованием struct
class X{ struct X{
private: private:
. . . a1 . . . . . . a1 . . .
protected: protected:
. . . a2 . . . . . . a2 . . .
public: public:
. . . a3 . . . . . . a3 . . .
. . . f() . . . . . . f() . . .
}; };
Объявляем данное типа (нового) X - в соответствии с обычными правилами (не зависимо от того, как определен класс - с помощью class или struct):
X obj;
Доступ к членам класса записывается в соответствии с общими синтаксическими правилами языка С аналогично доступу к членам структуры - через операцию “точка” (например, obj.a2 или obj.f()), но результат будет зависеть от уровней видимости частей класса.
Так, конструкции obj.a1, obj.a2 - вызовут сообщения об ошибке (члены класса a1 и a2 не видны (не доступны) извне класса); obj.a3, obj.f() - корректны. Внутри функции - метода класса f() можно без опасений использовать все имена: a1, a2, a3 и f().
Если в начале определения класса отсутствует указание уровня видимости: class A{... x ...}; или struct A{ ... x ... };, то:
для class принимается private: class A{private: ... x ...};;
для struct принимается public: struct A{ public: ... x ... };.
Рекомендации по поводу использования уровней видимости при определении класса.
Описания_полей_класса и прототипы_функций определяются в соответствии с обычными правилами С (С++).
Методы класса
Два способа классификации методов класса:
А) По функциональному назначению:
конструкторы - для создания экземпляров класса
деструкторы - для уничтожения экземпляров класса
селекторы - обработка состояния класса без его изменения
модификаторы - изменение состояния класса
итераторы - последовательный доступ к элементам данных, определяющих состояние класса
Б) По организации доступа к закрытой и защищенной частям класса:
функция-член класса - функция, принадлежащая самому классу и не существующая вне класса
функция-друг класса - внешняя по отношению к классу функция, которая может существовать вне класса, но имеет доступ к закрытой (и защищенной) части класса
Пока используем только функции-члены класса.
Конструкторы и деструктор класса имеют специфический синтаксис, другие методы класса - обычный.