Top Banner
LESSON 2: METHODS AND MODULES DYNAMIC RUBY
37

Dynamic Ruby. Lesson #2: Methods and modules

Apr 13, 2017

Download

Software

Alex Mikitenko
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Dynamic Ruby. Lesson #2: Methods and modules

LESSON 2: METHODS AND MODULES

DYNAMIC RUBY

Page 2: Dynamic Ruby. Lesson #2: Methods and modules

RETROSPECTIVE

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

from LESSON #1

Page 3: Dynamic Ruby. Lesson #2: Methods and modules

AGAIN ABOUT CLASS AND ITS METHODS

Page 4: Dynamic Ruby. Lesson #2: Methods and modules

CLASS METHODS

SINGLETON CLASS

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

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

Page 5: Dynamic Ruby. Lesson #2: Methods and modules

CLASS METHODS

CLASS METHOD

Page 6: Dynamic Ruby. Lesson #2: Methods and modules

too complicated…

Page 7: Dynamic Ruby. Lesson #2: Methods and modules

CLASS METHODS

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

Page 8: Dynamic Ruby. Lesson #2: Methods and modules

CLASS METHODS

Page 9: Dynamic Ruby. Lesson #2: Methods and modules

CLASS METHODS

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

Page 10: Dynamic Ruby. Lesson #2: Methods and modules

CLASS << SELF

Page 11: Dynamic Ruby. Lesson #2: Methods and modules
Page 12: Dynamic Ruby. Lesson #2: Methods and modules

CLASS << SELF

Page 13: Dynamic Ruby. Lesson #2: Methods and modules

CLASS << SELF

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

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

А вот как:

Page 14: Dynamic Ruby. Lesson #2: Methods and modules

(via) deep internet

Page 15: Dynamic Ruby. Lesson #2: Methods and modules

SINGLETON CLASS ANCESTORS

Page 16: Dynamic Ruby. Lesson #2: Methods and modules

ACCESSIBILITY LEVEL: PUBLIC, PROTECTED, PRIVATE

Page 17: Dynamic Ruby. Lesson #2: Methods and modules

PUBLIC, PROTECTED, PRIVATE

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

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

Page 18: Dynamic Ruby. Lesson #2: Methods and modules

PUBLIC, PROTECTED, PRIVATE

Page 19: Dynamic Ruby. Lesson #2: Methods and modules

PUBLIC, PROTECTED, PRIVATE [UPDATED]

Page 20: Dynamic Ruby. Lesson #2: Methods and modules
Page 21: Dynamic Ruby. Lesson #2: Methods and modules

PRIVATE

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

Page 22: Dynamic Ruby. Lesson #2: Methods and modules

PRIVATE

Page 23: Dynamic Ruby. Lesson #2: Methods and modules

PROTECTED

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

Page 24: Dynamic Ruby. Lesson #2: Methods and modules

PROTECTED

Page 25: Dynamic Ruby. Lesson #2: Methods and modules

MODULES: INCLUDE VS EXTEND

Page 26: Dynamic Ruby. Lesson #2: Methods and modules

MODULES

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

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

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

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

Page 27: Dynamic Ruby. Lesson #2: Methods and modules

LIKE A CLASS LIKE A MODULE

Page 28: Dynamic Ruby. Lesson #2: Methods and modules

INCLUDE

INCLUDE

Page 29: Dynamic Ruby. Lesson #2: Methods and modules

INCLUDE

Page 30: Dynamic Ruby. Lesson #2: Methods and modules

EXTEND

EXTEND

Page 31: Dynamic Ruby. Lesson #2: Methods and modules

EXTEND

Page 32: Dynamic Ruby. Lesson #2: Methods and modules

INCLUDE VS EXTEND

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

Page 33: Dynamic Ruby. Lesson #2: Methods and modules

INCLUDED

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

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

Page 34: Dynamic Ruby. Lesson #2: Methods and modules

INCLUDED

Page 35: Dynamic Ruby. Lesson #2: Methods and modules

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/

Page 36: Dynamic Ruby. Lesson #2: Methods and modules

THANK YOU!

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

Page 37: Dynamic Ruby. Lesson #2: Methods and modules

TO BE CONTINUED…