среда, 12 сентября 2007 г.

Классы и объекты в Ruby ч.2

Наследование в Руби.

Руби не поддерживает множественного наследование. Но если необходимо использовать функциональность нескольких классов предлагается компромисное решение - смеси.

Для указания наследования одного класса другим используется символ "<":

Если классу посылается сообщение с именем метода, который необходимо вызвать, но такой метод не найден в описании класса, поиск выполняется в описании класс предка и.д. Если метод не найден - вызывается метод Object#method_missing и выдается ошибка. Но этот метод можно переопределить.

При переопределении метода можно использовать метод родительского класса:

super вызывает метод базового класса с таким же именем как и метод, в из которого вызывается super. Точно так же super используется для метода initialize.

Права доступа.

В Руби есть 3 типа прав доступа:
- public - метод может вызываться кем угодно, устанавливается по умолчанию
- private - метод может вызываться наследниками, но только в контексте одного объекта
- protected - метод может вызываться наследниками не только в контексте одного объекта

Указание типа аксессора можно выполнять двумя способами:

Попробуем сотворить какую нибудь иерархию классов, что бы посмотреть как все это работает. Допустим есть канва, на которой рисуются объекты, причем сначала рисуются объекты большей площади.

Если в Shape area будет объявлена как private, то в процессе выполнения получим ошибку: in 'greater_area': private method 'area' called for #<>, так как area доступна только в контексте одного объекта.

Комментариев нет: