Skip to content

Instantly share code, notes, and snippets.

@Evanto
Last active May 9, 2017 21:58
Show Gist options
  • Save Evanto/956788ec809db1c082e48c599acd04e6 to your computer and use it in GitHub Desktop.
Save Evanto/956788ec809db1c082e48c599acd04e6 to your computer and use it in GitHub Desktop.
http://nashbridges.me/introducing-ruby-oop
https://habrahabr.ru/post/143990/
https://inet777.ru/comments/9735/vnikaem-v-metaklassyi-ruby
https://rubydev.ru/2010/12/ruby-private-protected-public-methods/
https://rubydev.ru/2012/09/self-ruby/
https://sheharyar.me/blog/search-methods-of-a-ruby-object/
- Объект в программировании — черный ящик, коробочка, в которой что-то происходит. Что - известно только тому
создателю этого объекта. Мы же видим только результаты его работы.
- Объект выполняет задачи, каждая задача = метод объекта.
- В хорошо спроектированном объекте задачи, независимо от их числа, не выходят за рамки основного предназначения объекта.
- Объект(ы) получают методы 3-мя способами. 1) наследует методы класса, который его создал 2) 3)
- Чтобы вызвать метод, Ruby необходима пара: объект и имя метода. Не бывает метода без объекта.
- Объект перед вызовом должен существовать.
- Класс в Ruby — это особый объект-родитель, содержащий знания о методах объектов-детей (instance methods).
- Класс может создавать неограниченное число детей
- Родитель не может пользоваться методами ребенка, но у него могут быть свои методы, недоступные ребенку
(например, метод new, создающие нового сына).
- Дети (экземпляры) класса не могут хранить методы для детей (не имеют репродуктивной способности).
Порожденный объект (его еще называют экземпляром класса) теряет способность класса хранить в себе методы «для сыновей»
(другими словами, утрачивает репродуктивную способность).
- Класс - это одновременно и четеж, и фабрика объектов, порождаемых им.
- При взове метода объекта Ruby указанному объекту запрос с названием метода. Объект ищет его в своем списке методов,
и если он найден, выполняет его и возвращает результат. Если у объекта не оказывается запрошенного метода - выдает NoMethodError.
SELF
* В Ruby можно вызывать методы без указания имени объекта, т.к. Ruby постоянно отслеживает т. н. текущий объект (self).
Для сохранения пары объект-метод на место пропущенного объекта неявно подставляется self:
make_coffee # здесь Ruby предполагает self.make_coffee
* В разных точках программы self ссылается на разные объекты (в зависимости от scope?).
* Внутри метода объекта self является этим объектом.
Методы экземпляра класса принадлежат не классу, а будущим объектам, которые он породит.
Хозяин метода и есть текущий объект внутри него.
Видимость методов
По умолчанию все методы объектов публичны (public), то есть доступны (могут быть вызваны) из любой точки программы.
Это значит, что кто угодно может их запустить и случайно нарушить (повредить данные или вызвать ошибку).
Чтобы скрыть часть методов объекта от внешнего мира, их делают частными (private) или защищенными (protected).
И частный, и защищенный методы могут быть вызваны только там, где они есть у self. Т.е. такие методы получится применить
только внутри других методов этого же объекта (как boil_water вызывается внутри make_coffee) или его родственника.
(?? разве private можно вызвать через другой метод?)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment