SlideShare a Scribd company logo
Chhorn Chamnap
Yoolk Mango
4 Aug 2010
   Basic Ruby
   Methods
   Classes
   Method-Access Rules
   What’s in an Object?
   Classes in Depth
   What Happens When You Call a Method?
   Module
   Constants
   Self
   Scope
   Singleton Method
   Local variables
     start with a lowercase letter or an underscore
      Eg: x, string, __abc__, start_value, and firstName
     Ruby convention is to use underscores with multiple
      words (first_name)
     can't start with an uppercase letter
   Instance variables
     storing information for individual objects
     always start with a single at-sign(@)
     can start with an uppercase letter
   Class variables
     store information per class hierarchy
     follow the same rules as instance variables
     start with two at-signs: @@running_total
   Global variables
     recognizable by their leading dollar sign ($)
     $:, $1, and $/, $stdin and $LOAD_PATH
   predefined, reserved terms associated with
    specific programming tasks and contexts.
     def,
     class,
     if, and
     __FILE__
   Ruby interprets it as one of three things:
     A local variable
     A keyword
     A method call
   Here’s how Ruby decides:
    1. If the identifier is a keyword, it’s a keyword.
    2. If there’s an equal sign (=) to the right of the
       identifier, it’s a local variable.
    3. Otherwise, assumed to be a method call.
 When you load a file, Ruby looks for it in each of its
  load path.
 The last directory is the current directory.
 load is a method.
 Load file from relative directories
     load "../extras.rb"
     load "/home/users/dblack/book/code/loadee.rb"
   A call to load always loads the file you ask for.
     Good to examine the effect of changes immediately.
   Doesn’t reload files if already loaded.
     require "loadee"
     require "/home/users/code/loadee"
   Follow the same rules and conventions as
    local variables
     except, can end with ?, !, or =
   Methods are expressions that provide a value.
   In some contexts, you can’t tell, just by
    looking at an expression.
   Ruby sees all data structures and values as
    objects.
     x = "100".to_i(9)
   Methods can take arguments.
   Parentheses are usually optional.
     Many programmers use parentheses in most or all
      method calls, just to be safe.
   Have to supply the correct number of
    arguments.
   A method that allows any number of
    arguments.

    def multi_args(*x)
      puts "I can take zero or more arguments!"
    end

    multi_args(1,2,4)
    multi_args(1,2)
def default_args(a,b,c=1)
  puts "Values of variables: ",a,b,c
end

default_args(3,2)
   Ruby tries to assign values to as many variables
    as possible.
   The sponge parameters get the lowest priority.
   Required ones get priority, whether they
    occur at the left or at the right of the list.
   All the optional ones have to occur in the
    middle.

def broken_args(x,*y,z=1)
                                   syntax error
end
   Classes define clusters of behavior or
    functionality.
   Classes can respond to messages, just like
    objects.
   Objects can change, acquiring methods and
    behaviors that were not defined in their class.
   In Ruby, classes are objects.
   The new method is a constructor.
   Classes are named with constants.
   Ruby executed the code within the class just
    as it would execute any other code.
   It’s possible to reopen a class and make
    additions or changes.
   These methods defined inside a class.
   Used by all instances of the class.
   They don’t belong only to one object.
   Enables individual objects to remember state.
   Always start with @.
   Visible only to the object to which they
    belong.
   Initialized in one method definition is the
    same as in other method definitions.
   Define a special method called initialize.
   Ruby allows you to define methods that end
    with an equal sign (=).
def price=(amount)       ticket.price=(63.00)
  @price = amount        ticket.price = 63.00
end
   The attributes are implemented as reader
    and/or writer methods.
   Ruby supports only single inheritance.
   Classes can import modules as mixins.
   The class Object is almost at the top of the
    inheritance chart.
• Private methods can’t be called with an explicit receiver.


class Baker                        class Baker
  def bake_cake                      def bake_cake
    pour_flour                         pour_flour
    add_egg                            add_egg
  end                                end
  def pour_flour                   private
  end                                def pour_flour
  def add_egg                        end
  end                                def add_egg
  private: pour_flour,               end
   :add_egg                        end
end
   It’s OK to use an explicit receiver for private
    setter methods.
   The top-level method is stored as a private
    instance method of the Object class.
   Every object is “born” with certain innate
    abilities.
     object_id
     respond_to?
     send
     methods
     instance_variables
   Not uncommon to define a method called
    send.
     Then, use __send__ instead.
 public_send, a safe version of send method.
 send can call an object’s private methods
  public_send can’t.
   Every class is an instance of a class called
    Class.
   You can also create a class the same way you
    create most other objects.
    my_class = Class.new
    instance_of_my_class = my_class.new
   The class Class is an instance of itself.
   Object is a class, Object is an object.
   And Class is a class. And Object is a class, and
    Class is an object.
   Which came first?
     Ruby has to do some of this chicken-or-egg stuff
     in order to get the class and object system up and
     running.
   Classes are objects.
   Instances of classes are objects, too.
   A class object has its own methods, its own
    state, its own identity.
   When you call a method, Ruby does two
    things:
     It finds the method (method lookup).
     It executes the method. (find self).
   “one step to the right, then up.”
   How objects call their methods?
     From their class
     From the superclass and earlier ancestors of their
      class
     From their own store of singleton methods
   Instances of Class can call methods that are
    defined as instance methods in their class.
     Class defines an instance method called new.
     Ticket.new
   The class Class has two new methods as:
     a class method; Class.new
     an instance method; Ticket.new
   Instances of Class have access to the instance
    methods defined in Module.
    class Ticket
      attr_reader :venue, :date
      attr_accessor :price
   Modules are bundles of methods and
    constants.
   Modules don’t have instances.
   Consists of the functionality to be added to a
    class or an object.
   Modules encourage modular design.
   Modules are the more basic structure, and
    classes are just a specialization.
   Modules get mixed in to classes, using the
    include method, referred to as mix-ins.
   The instances of the class have the ability to
    call the instance methods defined in the
    module.
   A class can mix in more than one module.
   To resolve a message into a method:
     Its class
     Modules mixed into its class
     The class’s superclass
     Modules mixed into the superclass
     Likewise, up to Object (and its mix-in Kernel) and
      BasicObject
   Define a method twice inside the same class,
    the second definition takes precedence.
    class D
      def hello
        puts “hello”
      end
    end

    class D
      def hello
        puts “hello world”
      end
    end
   If the object’s method-lookup path includes
    more than two same methods, the first one is
    the “winner”.
   A class mixes in two or more modules.
     The modules are searched in reverse order of
     inclusion
class C
  include M
  include N
  include M
end


   Re-including a module doesn’t do anything.
   N is still considered the most recently
    included module.
   Use the super keyword to jump up to the
    next-highest definition, in the method-
    lookup path.
   The way super handles arguments:
     Called with no argument list – super
     Called with an empty argument list – super()
     Called with specific arguments – super(a,b,c)
   The Kernel module provides an instance method called
    method_missing.
   Nested module/class chains are used to
    create namespaces for classes, modules, and
    methods.
    module Tools
      class Hammer
      end
    End

    h = Tools::Hammer.new
   Begin with an uppercase letter.
    eg: A, String, FirstName, and STDIN
   (FirstName) or (FIRST_NAME) is usual.
   Can be referred to from inside the instance or
    class methods.
   You get a warning if you reassign to the
    constant.


   To modify a constant, use a variable instead.

     not redefining a constant,
     good for reloading program files
   Constants have a kind
    of global visibility or
    reachability.
   Bears a close
    resemblance to
    searching a filesystem.
   Like /, the :: means “start from the top level.”
   At every moment, only one object is playing
    the role of self.
   Self is the default object or current object.
   To know which object is self, you need to
    know what context you’re in.
   But what is self when you haven’t yet entered
    any definition block?
     The answer is that Ruby provides you with a start-
     up self at the top level.
    ruby -e 'puts self'

   main is a special term that the default self
    object.
   The keyword (class, module, or def) marks a
    switch to a new self.
   In a class or module definition, self is the class
    or module object.
   In a method definition, self is the object that
    called it.
   When a singleton method is executed, self is
    the object that owns the method.
   If the receiver of the message is self, you can
    omit the receiver and the dot.
   If both a method and a variable of a given
    name exist (talk), the variable takes
    precedence.
     To force Ruby to see as a method name, you’d
     have to use self.talk or talk().
   To call a setter method, have to supply
    object-dot-notation.
    self.first_name = “dara”
    first_name = “dara”
   Every instance variable belongs to self.
   Scope refers to the reach or visibility of
    variables and constants.
   Three types of variables: global, local, and
    class variables.
   Global scope is scope that covers the entire
    program.
   Global scope is enjoyed by global variables.
   Local scope is a basic layer of every Ruby
    program.
   Every time you cross into a class, module, or
    def keyword, you start a new local scope.
     The top level has its own local scope.
     Every class or module definition block has its own
      local scope.
     Every method definition has its own local scope.
   Provides a storage mechanism shared
    between a class and its instances.
   Visible only to a class and its instances.
   They’re class-hierarchy variables.
   Let’s say we’ve created our Ticket class.
     Ticket isn’t only a class.
     Ticket is also an object in its own right.



   defined directly on the class object Ticket.
   referred to as a class method of the class.
   Where do singleton methods live?
     The singleton class
   Every object has two classes:
     The class of which it’s an instance
     Its singleton class
   Singleton classes are anonymous.
   The << object notation means the anonymous,
    singleton class of object.
   The Well-Grounded Rubyist, David A. Black
   Metaprogramming Ruby, Paolo Perrotta

More Related Content

What's hot

Introduction to chat bot
Introduction to chat botIntroduction to chat bot
Introduction to chat bot
mohamed ali
 
Microsoft + OpenAI: Recent Updates (Machine Learning 15minutes! Broadcast #74)
Microsoft + OpenAI: Recent Updates (Machine Learning 15minutes! Broadcast #74)Microsoft + OpenAI: Recent Updates (Machine Learning 15minutes! Broadcast #74)
Microsoft + OpenAI: Recent Updates (Machine Learning 15minutes! Broadcast #74)
Naoki (Neo) SATO
 
OCR 's Functions
OCR 's FunctionsOCR 's Functions
OCR 's Functions
prithvi764
 
Let's Build a Chatbot!
Let's Build a Chatbot!Let's Build a Chatbot!
Let's Build a Chatbot!
Christopher Mohritz
 
online exninition system ppt
online exninition system pptonline exninition system ppt
online exninition system ppt
prahlad chandra
 
Chat GPT Intoduction.pdf
Chat GPT Intoduction.pdfChat GPT Intoduction.pdf
Chat GPT Intoduction.pdf
Thiyagu K
 
[Machine Learning 15minutes! #61] Azure OpenAI Service
[Machine Learning 15minutes! #61] Azure OpenAI Service[Machine Learning 15minutes! #61] Azure OpenAI Service
[Machine Learning 15minutes! #61] Azure OpenAI Service
Naoki (Neo) SATO
 
Chatbot ppt
Chatbot pptChatbot ppt
Chatbot ppt
Geff Thomas
 
Final presentation on chatbot
Final presentation on chatbotFinal presentation on chatbot
Final presentation on chatbot
VaishnaviKhandelwal6
 
CHATBOT PPT-2.pptx
CHATBOT PPT-2.pptxCHATBOT PPT-2.pptx
CHATBOT PPT-2.pptx
LohithaJangala
 
LUCID Vision Labs -All-in-One Industrial Edge Computing with the Triton Edge ...
LUCID Vision Labs -All-in-One Industrial Edge Computing with the Triton Edge ...LUCID Vision Labs -All-in-One Industrial Edge Computing with the Triton Edge ...
LUCID Vision Labs -All-in-One Industrial Edge Computing with the Triton Edge ...
ClearView Imaging
 
Chatbots - An Introduction
Chatbots - An IntroductionChatbots - An Introduction
Chatbots - An Introduction
Geetanjali Shrivastava
 
Chatbot development with Microsoft Bot Framework
Chatbot development with Microsoft Bot FrameworkChatbot development with Microsoft Bot Framework
Chatbot development with Microsoft Bot Framework
Md. Mahedee Hasan
 
Online Voting System - Project
Online Voting System - ProjectOnline Voting System - Project
Online Voting System - Project
Subhashis Das
 
What is a chatbot?
What is a chatbot?What is a chatbot?
What is a chatbot?
Kamini Bharti
 
Large Language Models.pdf
Large Language Models.pdfLarge Language Models.pdf
Large Language Models.pdf
BLINXAI
 
Apache PIG
Apache PIGApache PIG
Apache PIG
Prashant Gupta
 
Automated Question Paper Generator Project Presentation
Automated Question Paper Generator Project PresentationAutomated Question Paper Generator Project Presentation
Automated Question Paper Generator Project Presentation
Anik Chakrabortty
 
Build an LLM-powered application using LangChain.pdf
Build an LLM-powered application using LangChain.pdfBuild an LLM-powered application using LangChain.pdf
Build an LLM-powered application using LangChain.pdf
AnastasiaSteele10
 
Cost of Ownership for Hadoop Implementation
Cost of Ownership for Hadoop ImplementationCost of Ownership for Hadoop Implementation
Cost of Ownership for Hadoop ImplementationDataWorks Summit
 

What's hot (20)

Introduction to chat bot
Introduction to chat botIntroduction to chat bot
Introduction to chat bot
 
Microsoft + OpenAI: Recent Updates (Machine Learning 15minutes! Broadcast #74)
Microsoft + OpenAI: Recent Updates (Machine Learning 15minutes! Broadcast #74)Microsoft + OpenAI: Recent Updates (Machine Learning 15minutes! Broadcast #74)
Microsoft + OpenAI: Recent Updates (Machine Learning 15minutes! Broadcast #74)
 
OCR 's Functions
OCR 's FunctionsOCR 's Functions
OCR 's Functions
 
Let's Build a Chatbot!
Let's Build a Chatbot!Let's Build a Chatbot!
Let's Build a Chatbot!
 
online exninition system ppt
online exninition system pptonline exninition system ppt
online exninition system ppt
 
Chat GPT Intoduction.pdf
Chat GPT Intoduction.pdfChat GPT Intoduction.pdf
Chat GPT Intoduction.pdf
 
[Machine Learning 15minutes! #61] Azure OpenAI Service
[Machine Learning 15minutes! #61] Azure OpenAI Service[Machine Learning 15minutes! #61] Azure OpenAI Service
[Machine Learning 15minutes! #61] Azure OpenAI Service
 
Chatbot ppt
Chatbot pptChatbot ppt
Chatbot ppt
 
Final presentation on chatbot
Final presentation on chatbotFinal presentation on chatbot
Final presentation on chatbot
 
CHATBOT PPT-2.pptx
CHATBOT PPT-2.pptxCHATBOT PPT-2.pptx
CHATBOT PPT-2.pptx
 
LUCID Vision Labs -All-in-One Industrial Edge Computing with the Triton Edge ...
LUCID Vision Labs -All-in-One Industrial Edge Computing with the Triton Edge ...LUCID Vision Labs -All-in-One Industrial Edge Computing with the Triton Edge ...
LUCID Vision Labs -All-in-One Industrial Edge Computing with the Triton Edge ...
 
Chatbots - An Introduction
Chatbots - An IntroductionChatbots - An Introduction
Chatbots - An Introduction
 
Chatbot development with Microsoft Bot Framework
Chatbot development with Microsoft Bot FrameworkChatbot development with Microsoft Bot Framework
Chatbot development with Microsoft Bot Framework
 
Online Voting System - Project
Online Voting System - ProjectOnline Voting System - Project
Online Voting System - Project
 
What is a chatbot?
What is a chatbot?What is a chatbot?
What is a chatbot?
 
Large Language Models.pdf
Large Language Models.pdfLarge Language Models.pdf
Large Language Models.pdf
 
Apache PIG
Apache PIGApache PIG
Apache PIG
 
Automated Question Paper Generator Project Presentation
Automated Question Paper Generator Project PresentationAutomated Question Paper Generator Project Presentation
Automated Question Paper Generator Project Presentation
 
Build an LLM-powered application using LangChain.pdf
Build an LLM-powered application using LangChain.pdfBuild an LLM-powered application using LangChain.pdf
Build an LLM-powered application using LangChain.pdf
 
Cost of Ownership for Hadoop Implementation
Cost of Ownership for Hadoop ImplementationCost of Ownership for Hadoop Implementation
Cost of Ownership for Hadoop Implementation
 

Viewers also liked

Advanced Ruby Idioms So Clean You Can Eat Off Of Them
Advanced Ruby Idioms So Clean You Can Eat Off Of ThemAdvanced Ruby Idioms So Clean You Can Eat Off Of Them
Advanced Ruby Idioms So Clean You Can Eat Off Of Them
Brian Guthrie
 
The Ruby Object Model by Rafael Magana
The Ruby Object Model by Rafael MaganaThe Ruby Object Model by Rafael Magana
The Ruby Object Model by Rafael Magana
Rafael Magana
 
«Работа с базами данных с использованием Sequel»
«Работа с базами данных с использованием Sequel»«Работа с базами данных с использованием Sequel»
«Работа с базами данных с использованием Sequel»
Olga Lavrentieva
 
Beginner's Sinatra
Beginner's SinatraBeginner's Sinatra
Beginner's Sinatra
Tomokazu Kiyohara
 
Magic in ruby
Magic in rubyMagic in ruby
Magic in ruby
David Lin
 
Ruby objects
Ruby objectsRuby objects
Ruby objects
Reuven Lerner
 
Ruby OOP: Objects over Classes
Ruby OOP: Objects over ClassesRuby OOP: Objects over Classes
Ruby OOP: Objects over Classes
Aman King
 
Ruby's Object Model: Metaprogramming and other Magic
Ruby's Object Model: Metaprogramming and other MagicRuby's Object Model: Metaprogramming and other Magic
Ruby's Object Model: Metaprogramming and other Magic
Burke Libbey
 
Designing Ruby APIs
Designing Ruby APIsDesigning Ruby APIs
Designing Ruby APIs
Wen-Tien Chang
 
DevNexus 2017 - Building and Deploying 12 Factor Apps in Scala, Java, Ruby, a...
DevNexus 2017 - Building and Deploying 12 Factor Apps in Scala, Java, Ruby, a...DevNexus 2017 - Building and Deploying 12 Factor Apps in Scala, Java, Ruby, a...
DevNexus 2017 - Building and Deploying 12 Factor Apps in Scala, Java, Ruby, a...Neil Shannon
 
MongoDB - Ruby document store that doesn't rhyme with ouch
MongoDB - Ruby document store that doesn't rhyme with ouchMongoDB - Ruby document store that doesn't rhyme with ouch
MongoDB - Ruby document store that doesn't rhyme with ouch
Wynn Netherland
 
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
IT-Доминанта
 
Object-Oriented BDD w/ Cucumber by Matt van Horn
Object-Oriented BDD w/ Cucumber by Matt van HornObject-Oriented BDD w/ Cucumber by Matt van Horn
Object-Oriented BDD w/ Cucumber by Matt van Horn
Solano Labs
 
HTML Lecture Part 1 of 2
HTML Lecture Part 1 of 2HTML Lecture Part 1 of 2
HTML Lecture Part 1 of 2
Sharon Wasden
 
The Black Magic of Ruby Metaprogramming
The Black Magic of Ruby MetaprogrammingThe Black Magic of Ruby Metaprogramming
The Black Magic of Ruby Metaprogramming
itnig
 
Elasticsearch Basics
Elasticsearch BasicsElasticsearch Basics
Elasticsearch Basics
Shifa Khan
 
Ruby For Java Programmers
Ruby For Java ProgrammersRuby For Java Programmers
Ruby For Java Programmers
Mike Bowler
 
Scala vs Ruby
Scala vs RubyScala vs Ruby

Viewers also liked (20)

Advanced Ruby Idioms So Clean You Can Eat Off Of Them
Advanced Ruby Idioms So Clean You Can Eat Off Of ThemAdvanced Ruby Idioms So Clean You Can Eat Off Of Them
Advanced Ruby Idioms So Clean You Can Eat Off Of Them
 
The Ruby Object Model by Rafael Magana
The Ruby Object Model by Rafael MaganaThe Ruby Object Model by Rafael Magana
The Ruby Object Model by Rafael Magana
 
«Работа с базами данных с использованием Sequel»
«Работа с базами данных с использованием Sequel»«Работа с базами данных с использованием Sequel»
«Работа с базами данных с использованием Sequel»
 
Beginner's Sinatra
Beginner's SinatraBeginner's Sinatra
Beginner's Sinatra
 
ZODB Tips and Tricks
ZODB Tips and TricksZODB Tips and Tricks
ZODB Tips and Tricks
 
Magic in ruby
Magic in rubyMagic in ruby
Magic in ruby
 
Ruby objects
Ruby objectsRuby objects
Ruby objects
 
Ruby OOP: Objects over Classes
Ruby OOP: Objects over ClassesRuby OOP: Objects over Classes
Ruby OOP: Objects over Classes
 
Ruby's Object Model: Metaprogramming and other Magic
Ruby's Object Model: Metaprogramming and other MagicRuby's Object Model: Metaprogramming and other Magic
Ruby's Object Model: Metaprogramming and other Magic
 
v8 engine
v8 enginev8 engine
v8 engine
 
Designing Ruby APIs
Designing Ruby APIsDesigning Ruby APIs
Designing Ruby APIs
 
DevNexus 2017 - Building and Deploying 12 Factor Apps in Scala, Java, Ruby, a...
DevNexus 2017 - Building and Deploying 12 Factor Apps in Scala, Java, Ruby, a...DevNexus 2017 - Building and Deploying 12 Factor Apps in Scala, Java, Ruby, a...
DevNexus 2017 - Building and Deploying 12 Factor Apps in Scala, Java, Ruby, a...
 
MongoDB - Ruby document store that doesn't rhyme with ouch
MongoDB - Ruby document store that doesn't rhyme with ouchMongoDB - Ruby document store that doesn't rhyme with ouch
MongoDB - Ruby document store that doesn't rhyme with ouch
 
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
 
Object-Oriented BDD w/ Cucumber by Matt van Horn
Object-Oriented BDD w/ Cucumber by Matt van HornObject-Oriented BDD w/ Cucumber by Matt van Horn
Object-Oriented BDD w/ Cucumber by Matt van Horn
 
HTML Lecture Part 1 of 2
HTML Lecture Part 1 of 2HTML Lecture Part 1 of 2
HTML Lecture Part 1 of 2
 
The Black Magic of Ruby Metaprogramming
The Black Magic of Ruby MetaprogrammingThe Black Magic of Ruby Metaprogramming
The Black Magic of Ruby Metaprogramming
 
Elasticsearch Basics
Elasticsearch BasicsElasticsearch Basics
Elasticsearch Basics
 
Ruby For Java Programmers
Ruby For Java ProgrammersRuby For Java Programmers
Ruby For Java Programmers
 
Scala vs Ruby
Scala vs RubyScala vs Ruby
Scala vs Ruby
 

Similar to Ruby object model

Ruby object model - Understanding of object play role for ruby
Ruby object model - Understanding of object play role for rubyRuby object model - Understanding of object play role for ruby
Ruby object model - Understanding of object play role for ruby
Tushar Pal
 
Java defining classes
Java defining classes Java defining classes
Java defining classes
Mehdi Ali Soltani
 
06 InheritanceAndPolymorphism.ppt
06 InheritanceAndPolymorphism.ppt06 InheritanceAndPolymorphism.ppt
06 InheritanceAndPolymorphism.ppt
ParikhitGhosh1
 
Delphi qa
Delphi qaDelphi qa
Delphi qa
sandy14234
 
Java programming -Object-Oriented Thinking- Inheritance
Java programming -Object-Oriented Thinking- InheritanceJava programming -Object-Oriented Thinking- Inheritance
Java programming -Object-Oriented Thinking- Inheritance
Jyothishmathi Institute of Technology and Science Karimnagar
 
Java
JavaJava
Only oop
Only oopOnly oop
Only oop
anitarooge
 
Introduction to Python - Part Three
Introduction to Python - Part ThreeIntroduction to Python - Part Three
Introduction to Python - Part Three
amiable_indian
 
Object_oriented_programming_OOP_with_PHP.pdf
Object_oriented_programming_OOP_with_PHP.pdfObject_oriented_programming_OOP_with_PHP.pdf
Object_oriented_programming_OOP_with_PHP.pdf
GammingWorld2
 
Java chapter 5
Java chapter 5Java chapter 5
Java chapter 5
Abdii Rashid
 
Java session2
Java session2Java session2
Java session2
Rajeev Kumar
 
Python_Unit_3.pdf
Python_Unit_3.pdfPython_Unit_3.pdf
Python_Unit_3.pdf
alaparthi
 
Java basics
Java basicsJava basics
Java basics
Shivanshu Purwar
 
ACM init() Day 6
ACM init() Day 6ACM init() Day 6
Unit3 part1-class
Unit3 part1-classUnit3 part1-class
Unit3 part1-class
DevaKumari Vijay
 
Chapter 8 java
Chapter 8 javaChapter 8 java
Chapter 8 java
Ahmad sohail Kakar
 
C# interview
C# interviewC# interview
C# interview
Thomson Reuters
 

Similar to Ruby object model (20)

Ruby object model - Understanding of object play role for ruby
Ruby object model - Understanding of object play role for rubyRuby object model - Understanding of object play role for ruby
Ruby object model - Understanding of object play role for ruby
 
Java defining classes
Java defining classes Java defining classes
Java defining classes
 
06 InheritanceAndPolymorphism.ppt
06 InheritanceAndPolymorphism.ppt06 InheritanceAndPolymorphism.ppt
06 InheritanceAndPolymorphism.ppt
 
Delphi qa
Delphi qaDelphi qa
Delphi qa
 
Java programming -Object-Oriented Thinking- Inheritance
Java programming -Object-Oriented Thinking- InheritanceJava programming -Object-Oriented Thinking- Inheritance
Java programming -Object-Oriented Thinking- Inheritance
 
Java
JavaJava
Java
 
Hemajava
HemajavaHemajava
Hemajava
 
Only oop
Only oopOnly oop
Only oop
 
Introduction to Python - Part Three
Introduction to Python - Part ThreeIntroduction to Python - Part Three
Introduction to Python - Part Three
 
Object_oriented_programming_OOP_with_PHP.pdf
Object_oriented_programming_OOP_with_PHP.pdfObject_oriented_programming_OOP_with_PHP.pdf
Object_oriented_programming_OOP_with_PHP.pdf
 
Java chapter 5
Java chapter 5Java chapter 5
Java chapter 5
 
Java session2
Java session2Java session2
Java session2
 
Unit 3 Java
Unit 3 JavaUnit 3 Java
Unit 3 Java
 
Python_Unit_3.pdf
Python_Unit_3.pdfPython_Unit_3.pdf
Python_Unit_3.pdf
 
Java basics
Java basicsJava basics
Java basics
 
ACM init() Day 6
ACM init() Day 6ACM init() Day 6
ACM init() Day 6
 
Unit3 part1-class
Unit3 part1-classUnit3 part1-class
Unit3 part1-class
 
Chapter 8 java
Chapter 8 javaChapter 8 java
Chapter 8 java
 
Oops
OopsOops
Oops
 
C# interview
C# interviewC# interview
C# interview
 

More from Chamnap Chhorn

High performance website
High performance websiteHigh performance website
High performance websiteChamnap Chhorn
 
Introduction to Web Architecture
Introduction to Web ArchitectureIntroduction to Web Architecture
Introduction to Web ArchitectureChamnap Chhorn
 
Principles in Refactoring
Principles in RefactoringPrinciples in Refactoring
Principles in RefactoringChamnap Chhorn
 
JavaScript in Object-Oriented Way
JavaScript in Object-Oriented WayJavaScript in Object-Oriented Way
JavaScript in Object-Oriented WayChamnap Chhorn
 

More from Chamnap Chhorn (7)

Introduction to rails
Introduction to railsIntroduction to rails
Introduction to rails
 
High performance website
High performance websiteHigh performance website
High performance website
 
Rest and Rails
Rest and RailsRest and Rails
Rest and Rails
 
Introduction to Web Architecture
Introduction to Web ArchitectureIntroduction to Web Architecture
Introduction to Web Architecture
 
Principles in Refactoring
Principles in RefactoringPrinciples in Refactoring
Principles in Refactoring
 
JavaScript in Object-Oriented Way
JavaScript in Object-Oriented WayJavaScript in Object-Oriented Way
JavaScript in Object-Oriented Way
 
Rest in Rails
Rest in RailsRest in Rails
Rest in Rails
 

Recently uploaded

IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
Abida Shariff
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
Product School
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
Elena Simperl
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
Paul Groth
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 

Recently uploaded (20)

IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 

Ruby object model

  • 2. Basic Ruby  Methods  Classes  Method-Access Rules  What’s in an Object?  Classes in Depth  What Happens When You Call a Method?  Module  Constants  Self  Scope  Singleton Method
  • 3.
  • 4. Local variables  start with a lowercase letter or an underscore Eg: x, string, __abc__, start_value, and firstName  Ruby convention is to use underscores with multiple words (first_name)  can't start with an uppercase letter  Instance variables  storing information for individual objects  always start with a single at-sign(@)  can start with an uppercase letter
  • 5. Class variables  store information per class hierarchy  follow the same rules as instance variables  start with two at-signs: @@running_total  Global variables  recognizable by their leading dollar sign ($)  $:, $1, and $/, $stdin and $LOAD_PATH
  • 6. predefined, reserved terms associated with specific programming tasks and contexts.  def,  class,  if, and  __FILE__
  • 7. Ruby interprets it as one of three things:  A local variable  A keyword  A method call  Here’s how Ruby decides: 1. If the identifier is a keyword, it’s a keyword. 2. If there’s an equal sign (=) to the right of the identifier, it’s a local variable. 3. Otherwise, assumed to be a method call.
  • 8.
  • 9.  When you load a file, Ruby looks for it in each of its load path.  The last directory is the current directory.  load is a method.  Load file from relative directories  load "../extras.rb"  load "/home/users/dblack/book/code/loadee.rb"  A call to load always loads the file you ask for.  Good to examine the effect of changes immediately.
  • 10. Doesn’t reload files if already loaded.  require "loadee"  require "/home/users/code/loadee"
  • 11.
  • 12. Follow the same rules and conventions as local variables  except, can end with ?, !, or =  Methods are expressions that provide a value.  In some contexts, you can’t tell, just by looking at an expression.
  • 13. Ruby sees all data structures and values as objects.  x = "100".to_i(9)  Methods can take arguments.  Parentheses are usually optional.  Many programmers use parentheses in most or all method calls, just to be safe.
  • 14. Have to supply the correct number of arguments.
  • 15. A method that allows any number of arguments. def multi_args(*x) puts "I can take zero or more arguments!" end multi_args(1,2,4) multi_args(1,2)
  • 16. def default_args(a,b,c=1) puts "Values of variables: ",a,b,c end default_args(3,2)
  • 17. Ruby tries to assign values to as many variables as possible.  The sponge parameters get the lowest priority.
  • 18.
  • 19. Required ones get priority, whether they occur at the left or at the right of the list.  All the optional ones have to occur in the middle. def broken_args(x,*y,z=1) syntax error end
  • 20.
  • 21.
  • 22. Classes define clusters of behavior or functionality.  Classes can respond to messages, just like objects.  Objects can change, acquiring methods and behaviors that were not defined in their class.
  • 23. In Ruby, classes are objects.  The new method is a constructor.  Classes are named with constants.
  • 24. Ruby executed the code within the class just as it would execute any other code.
  • 25. It’s possible to reopen a class and make additions or changes.
  • 26. These methods defined inside a class.  Used by all instances of the class.  They don’t belong only to one object.
  • 27. Enables individual objects to remember state.  Always start with @.  Visible only to the object to which they belong.  Initialized in one method definition is the same as in other method definitions.
  • 28.
  • 29. Define a special method called initialize.
  • 30. Ruby allows you to define methods that end with an equal sign (=). def price=(amount) ticket.price=(63.00) @price = amount ticket.price = 63.00 end
  • 31. The attributes are implemented as reader and/or writer methods.
  • 32.
  • 33. Ruby supports only single inheritance.  Classes can import modules as mixins.  The class Object is almost at the top of the inheritance chart.
  • 34.
  • 35. • Private methods can’t be called with an explicit receiver. class Baker class Baker def bake_cake def bake_cake pour_flour pour_flour add_egg add_egg end end def pour_flour private end def pour_flour def add_egg end end def add_egg private: pour_flour, end :add_egg end end
  • 36. It’s OK to use an explicit receiver for private setter methods.
  • 37.
  • 38. The top-level method is stored as a private instance method of the Object class.
  • 39.
  • 40. Every object is “born” with certain innate abilities.  object_id  respond_to?  send  methods  instance_variables
  • 41.
  • 42. Not uncommon to define a method called send.  Then, use __send__ instead.  public_send, a safe version of send method.  send can call an object’s private methods public_send can’t.
  • 43.
  • 44. Every class is an instance of a class called Class.  You can also create a class the same way you create most other objects. my_class = Class.new instance_of_my_class = my_class.new
  • 45.
  • 46.
  • 47. The class Class is an instance of itself.  Object is a class, Object is an object.  And Class is a class. And Object is a class, and Class is an object.  Which came first?  Ruby has to do some of this chicken-or-egg stuff in order to get the class and object system up and running.
  • 48. Classes are objects.  Instances of classes are objects, too.  A class object has its own methods, its own state, its own identity.
  • 49.
  • 50. When you call a method, Ruby does two things:  It finds the method (method lookup).  It executes the method. (find self).
  • 51. “one step to the right, then up.”
  • 52. How objects call their methods?  From their class  From the superclass and earlier ancestors of their class  From their own store of singleton methods  Instances of Class can call methods that are defined as instance methods in their class.  Class defines an instance method called new. Ticket.new
  • 53. The class Class has two new methods as:  a class method; Class.new  an instance method; Ticket.new  Instances of Class have access to the instance methods defined in Module. class Ticket attr_reader :venue, :date attr_accessor :price
  • 54.
  • 55. Modules are bundles of methods and constants.  Modules don’t have instances.  Consists of the functionality to be added to a class or an object.  Modules encourage modular design.  Modules are the more basic structure, and classes are just a specialization.
  • 56. Modules get mixed in to classes, using the include method, referred to as mix-ins.  The instances of the class have the ability to call the instance methods defined in the module.  A class can mix in more than one module.
  • 57.
  • 58. To resolve a message into a method:  Its class  Modules mixed into its class  The class’s superclass  Modules mixed into the superclass  Likewise, up to Object (and its mix-in Kernel) and BasicObject
  • 59. Define a method twice inside the same class, the second definition takes precedence. class D def hello puts “hello” end end class D def hello puts “hello world” end end
  • 60. If the object’s method-lookup path includes more than two same methods, the first one is the “winner”.
  • 61. A class mixes in two or more modules.  The modules are searched in reverse order of inclusion
  • 62. class C include M include N include M end  Re-including a module doesn’t do anything.  N is still considered the most recently included module.
  • 63. Use the super keyword to jump up to the next-highest definition, in the method- lookup path.
  • 64. The way super handles arguments:  Called with no argument list – super  Called with an empty argument list – super()  Called with specific arguments – super(a,b,c)
  • 65. The Kernel module provides an instance method called method_missing.
  • 66. Nested module/class chains are used to create namespaces for classes, modules, and methods. module Tools class Hammer end End h = Tools::Hammer.new
  • 67.
  • 68. Begin with an uppercase letter. eg: A, String, FirstName, and STDIN  (FirstName) or (FIRST_NAME) is usual.  Can be referred to from inside the instance or class methods.
  • 69. You get a warning if you reassign to the constant.  To modify a constant, use a variable instead.  not redefining a constant,  good for reloading program files
  • 70. Constants have a kind of global visibility or reachability.  Bears a close resemblance to searching a filesystem.
  • 71. Like /, the :: means “start from the top level.”
  • 72.
  • 73. At every moment, only one object is playing the role of self.  Self is the default object or current object.  To know which object is self, you need to know what context you’re in.
  • 74.
  • 75.
  • 76. But what is self when you haven’t yet entered any definition block?  The answer is that Ruby provides you with a start- up self at the top level. ruby -e 'puts self'  main is a special term that the default self object.  The keyword (class, module, or def) marks a switch to a new self.
  • 77. In a class or module definition, self is the class or module object.
  • 78. In a method definition, self is the object that called it.
  • 79. When a singleton method is executed, self is the object that owns the method.
  • 80. If the receiver of the message is self, you can omit the receiver and the dot.
  • 81. If both a method and a variable of a given name exist (talk), the variable takes precedence.  To force Ruby to see as a method name, you’d have to use self.talk or talk().  To call a setter method, have to supply object-dot-notation. self.first_name = “dara” first_name = “dara”
  • 82. Every instance variable belongs to self.
  • 83.
  • 84.
  • 85. Scope refers to the reach or visibility of variables and constants.  Three types of variables: global, local, and class variables.
  • 86. Global scope is scope that covers the entire program.  Global scope is enjoyed by global variables.
  • 87. Local scope is a basic layer of every Ruby program.  Every time you cross into a class, module, or def keyword, you start a new local scope.  The top level has its own local scope.  Every class or module definition block has its own local scope.  Every method definition has its own local scope.
  • 88.
  • 89.
  • 90. Provides a storage mechanism shared between a class and its instances.  Visible only to a class and its instances.
  • 91.
  • 92. They’re class-hierarchy variables.
  • 93.
  • 94.
  • 95. Let’s say we’ve created our Ticket class.  Ticket isn’t only a class.  Ticket is also an object in its own right.  defined directly on the class object Ticket.  referred to as a class method of the class.
  • 96. Where do singleton methods live?  The singleton class  Every object has two classes:  The class of which it’s an instance  Its singleton class
  • 97. Singleton classes are anonymous.  The << object notation means the anonymous, singleton class of object.
  • 98.
  • 99.
  • 100. The Well-Grounded Rubyist, David A. Black  Metaprogramming Ruby, Paolo Perrotta