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

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

Классы в Ruby обозначаются словом class. Причем имя класса должно начинаться с большой буквы (а методы с маленькой); иначе получена ошибка: class/module name must be CONSTANT.

Объект класса создаётся посылкой сообщения new (в Руби методы класса вызываются путем посылки сообщения с именем метода объекты класса). Когда создаётся объект, в описании класса ищется метод initialize и вызывается:

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

Здесь @issue и @vendor доступны для чтения, @model и @price - для записи.

В Руби существует особая переменная self которая ссылается на вызывающий метод объект (по аналогии с this C++).

Помимо переменных экземпляра класса есть переменные класса (статические переменные в С++). Эти перменные обозначаются с приставкой @@. Значение такой переменной одинаково для всех экземпляров одного и того же класса.

Так же в класс можно добавлять константы, которые именуютс с большой буквы:

Так же как и переменные методы тоже делятся на два типа: методы класса (статические в С++) и методы экземпляра класса. При объявлении методов класса указывается имя класса:

Все классы, для которых не указан предок, автоматически наследуются от Object, поэтому имеют минимальный общий набор методов, например, clone, id, inspects, to_s и т.д.

2 комментария:

Анонимный комментирует...

Гм. После Python'а довольно необычно выглядит объектная модель. Именно потому, что схожа.

sash_ko комментирует...

После С++ это выглядело еще необычней - как будто узнал, что Земля не плоская, а круглая. А после того, как начал использовать Python, назад к Цпп совсем не тянет