37
LESSON 2: METHODS AND MODULES DYNAMIC RUBY

Dynamic Ruby. Lesson #2: Methods and modules

Embed Size (px)

Citation preview

LESSON 2: METHODS AND MODULES

DYNAMIC RUBY

RETROSPECTIVE

Для начала, освежим память пугающим откровением с прошлого занятия:

from LESSON #1

AGAIN ABOUT CLASS AND ITS METHODS

CLASS METHODS

SINGLETON CLASS

С учетом еще одного простого, но очень важного определения…

…предыдущий вывод стоит дополнить корректирующим:

CLASS METHODS

CLASS METHOD

too complicated…

CLASS METHODS

Технически, никакого class method как обособленного понятия не существует, это всегда просто чей-то singleton method.

CLASS METHODS

CLASS METHODS

Кстати, есть еще один явный способ создать метакласс:

CLASS << SELF

CLASS << SELF

CLASS << SELF

Но возникает вопрос. Как эти singleton methods (которые мы знаем как “class methods”) наших метаклассов наследуются?

Они же должны быть в другой цепочке наследования (идут к Class и выше)…

А вот как:

(via) deep internet

SINGLETON CLASS ANCESTORS

ACCESSIBILITY LEVEL: PUBLIC, PROTECTED, PRIVATE

PUBLIC, PROTECTED, PRIVATE

Protected и private методы выполняют немного иную функцию, чем в массе прочих объектных языков (C++, например).

Например, и protected, и private методы всегда наследуются. Но…

PUBLIC, PROTECTED, PRIVATE

PUBLIC, PROTECTED, PRIVATE [UPDATED]

PRIVATE

Private не может вызываться в ином контексте, чем в контексте (теле) объекта, для которого он объявлен. Явное указание receiver-а запрещено.

PRIVATE

PROTECTED

Protected может вызываться контексте (теле) всех объектов, принадлежащих к тому же классу.

PROTECTED

MODULES: INCLUDE VS EXTEND

MODULES

Модули отличаются от классов тем, что

1) не могут порождать экземпляры;

2) не имеют системы наследования;

3) в основном используются для расширения классов.

LIKE A CLASS LIKE A MODULE

INCLUDE

INCLUDE

INCLUDE

EXTEND

EXTEND

EXTEND

INCLUDE VS EXTEND

В самом простом смысле можем говорить, что include добавляет методы экземпляра класса, а extend - методы класса.

INCLUDED

Существует хук, выполняющийся при подключении модуля. #included.

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

INCLUDED

METHODS AND MODULES

REFERENCES

▸ http://matthodan.com/2010/08/08/ruby-private-methods-vs-protected-methods.html

▸ http://culttt.com/2015/06/03/the-difference-between-public-protected-and-private-methods-in-ruby/

▸ https://habrahabr.ru/post/143483/

THANK YOU!

Alex Mikitenko [email protected] https://github.com/nonkor

TO BE CONTINUED…