» Главная
eXcode.ru » Статьи » Ruby
» Новости
» Опросы
» Файлы
» Журнал



Пользователей: 0
Гостей: 17







Методы




Что есть метод? В ОО программировании мы не думаем опрямом изменении данных объекта снаружи; вместо этого объекты сами знают о как с ними нужно работать (когда их об этом попросят в соответствующей форме.) Вы можете сказать, что мы шлем сообщения объекту, и эти сообщения в общем случае, вызывают некоторые действия или осмысленный отклик. Это должно происходить независимо от нашего представления или щаботы о том, как на самом деле действует объект. Действия, которые нам разрешено запрашивать у объекта (или, что равнозначно, сообщения, которые он понимает) являются методами объекта

В Ruby мы производим вызов метода, используя точечную нотацию (так же, как в С++ или Java). Имена объектов, чьи методы мы вызываем, располагаются справа от точки.



ruby> "abcdef".length

6

Интуитивно, этот строковый объект запрашивается о его длине.. Технически, мы вызываем метод length объекта "abcdef".

Другие объекты могут иметь несколько иное представление о length, или вообще никакого. Решение, как отреагировать на сообщение, принимается на лету, во время исполнения программы, и принимаемые действия могут меняться в зависимости от того, на что ссылается переменная.



ruby> foo = "abc"

"abc"

ruby> foo.length

3

ruby> foo = ["abcde", "fghij"]

["abcde", "fghij"]

ruby> foo.length

2

Что мы имеем в виду под длиной может варьироваться в зависимости от того, о каком объекте мы говорим. В первый раз, когда мы запрашиваем foo о его длине в предыдущем примере, он ссылается на простую строку, и здесь может быть только один осмысленный ответ. Во второй раз foo ссылается на массив, и есть причины думать, что результатом будет 2, 5, or 10; но наиболее подходящим ответом будет, конечно, 2 (другие результаты также могут быть, по желанию, получены) .



ruby> foo[0].length

5

ruby> foo[0].length + foo[1].length

10

Необходимо отметить, что массив что-то знает о том, что значит быть массивом. Данные в Ruby несут такое знание, так что при необходимости запрос на них автоматически может быть удовлетворен несколькими способами. Это освобождает программиста от бремени запоминания множества специфичных имен функций, поскольку относительно небольшое число названий методов, соотносящихся с концепцией того, что мы знаем, как выразить на естественном языке, может быть применено к различным тиам данных, и результатом будет то, что мы предполагаем. Это свойство ОО языков программирования (которое, IMHO, Java использует не лучшим образом) называется полиморфизм.

Когда объект получает сообщение, которое он не понимает, "возбуждается" ошибка:



ruby> foo = 5

5

ruby> foo.length

ERR: (eval):1: undefined method `length′ for 5(Fixnum)

Таким образом, необходимо знать, какие методы принимаются объектом, несмотря на то, что нам не нужно знать, как они обрабатываются.

Если методу передаются аргументы, они обычно заключаются в скобки,



object.method(arg1, arg2)

но их можно опустить, если этим мы не вносим неоднозначность.



object.method arg1, arg2

В Ruby существует особая переменная self; она ссылается на вызывающий метод объект. Такое происходит настолько часто, что для удобства "self." может быть опущен, когда объект вызывает собственные методы:



self.method_name(args...)

есть то же самое, что и



method_name(args...)

Как можно подумать, вызовы функций являются просто укороченной записью вызова методов объекта self. Это делает Ruby тем, что называется чисто объектно-ориентированным языком. Все же функциональные методы ведут себя подобно функциям в других языках программирования для тех, кто не хочет понимать, что вызовы функций также на самом деле являются методами объектов Ruby. Мы можем говорить о функциях как если бы они не были методами объектов, если нам уж так этого хочется.

Источник: www.opennet.ru
К началу статьи





Добавил: MadvEXДата публикации: 2007-10-08 09:59:37
Рейтинг статьи:3.57 [Голосов 7]Кол-во просмотров: 2856

Комментарии читателей

Всего комментариев: 0
Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Какой вид спорта вы предпочитаете?
Футбол
28% (61)
Баскетбол
9% (20)
Волейбол
8% (18)
Теннис
5% (10)
Легкая атлетика
2% (5)
Хоккей
5% (11)
Лыжный спорт
3% (6)
Всеми
3% (7)
Другим
18% (38)
Я не дружу со спортом!
19% (41)

Проголосовало: 217
Интернетчика спросили:
- Что такое "Червона Рута"?
- Это женщина-админ на сервере Компартии.
Рейтинг: 3/10 (1)
Посмотреть все анекдоты

 
eXcode.ru » Статьи » Ruby