рд░реВрдмреА рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рд╕рднреА рд╕рдВрд╕реНрдерд╛рдПрдВ рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рд╡реЗ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рддрдирд╛ рд╣реИред рддреЛ, рд░реВрдмреА рдореЗрдВ рдХрдХреНрд╖рд╛рдПрдВ рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВред

рд░реВрдмреА рдореЗрдВ, рдХрдХреНрд╖рд╛рдПрдВ рдРрд╕реА рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ рдЬреЛ рдХрдХреНрд╖рд╛ рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред
OOP рдЕрдиреБрд╕реНрдорд╛рд░рдХ
рдПрдХ рд╡рд░реНрдЧ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред
рдПрдХ рд╡рд╕реНрддреБ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рдкрддрд╛ рд╕реНрдерд╛рди рдореЗрдВ рдПрдХ рдЗрдХрд╛рдИ рд╣реИ рдЬреЛ рддрдм рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ рдЬрдм рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХрднреА-рдХрднреА рдХрд┐рд╕реА
рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛
рдФрд░
рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд╢рдмреНрдж
рдкреНрд░рдХрд╛рд░ ред
рдХреНрд▓рд╛рд╕ рдкреНрд░реЙрдкрд░реНрдЯреАрдЬ рдХреЛ рдХрд╣реАрдВ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
рдЪреВрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдгрд┐рдд рд╡рд░реНрдЧ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЧреБрдг рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдХрд╣реАрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд░реВрдмреА рдбреЗрдЯрд╛ рдХрд╣рд╛рдБ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ? рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдЕрдзрд┐рдХрд╛рд░ред рдФрд░ рдпрд╣ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЕрдкрдирд╛ рдкреНрд░рдХрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рджрд░рдЕрд╕рд▓, рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдкреНрд░рдХрд╛рд░ (рд╡рд░реНрдЧ)
рд╡рд░реНрдЧ рд╣реИ ред
рдЕрдирд╛рдо рд╡рд░реНрдЧ
рд░реВрдмреА рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреЗ рддрдВрддреНрд░ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрд▓реЛрдХрдкреНрд░рд┐рдп рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
myklass = Class.new do def test puts "TEST" end def self.ctest puts "CLASS TEST" end end myklass # => #<Class:0xb6f3e768> myklass.class # => Class myklass.name # => "" myklass.ctest # => "CLASS TEST"
рд╣рдордиреЗ рдЕрдм рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╛рдорд╛рдиреНрдп рдмрдирд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдирд╛рдо рд╡рд░реНрдЧ (рдирд╛рдо рдкрджреНрдзрддрд┐ рдПрдХ рд░рд┐рдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддреА рд╣реИ) рдФрд░
рдЗрд╕реЗ
myklass рд╡реИрд░рд┐рдПрдмрд▓ рдореЗрдВ
рдбрд╛рд▓реЗрдВ ред
Myklass рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рд╡рд╣ рд╡рд╕реНрддреБ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ, рдЗрд╕ рд╡рд╕реНрддреБ рдХрд╛
рд╡рд░реНрдЧ рд╡рд░реНрдЧ рд╣реИ ред
рд╣рдорд╛рд░рд╛ рдЕрдирд╛рдо рд╡рд░реНрдЧ, рдЗрд╕рдХреЗ рд╕рднреА рддрд░реАрдХреЗ рдФрд░ рдЪрд░ рдХреЗрд╡рд▓
myklass рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВред
рдПрдХ рдЕрдирд╛рдо рд╡рд░реНрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг
рдПрдХ рдЕрдирд╛рдо рд╡рд░реНрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг (рдЕрд░реНрдерд╛рдд, рдЙрд╕рдХреА рд╡рд╕реНрддреБ) рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
m = myklass.new m.test # => 'TEST' m.class # => #<Class:0xb6f3e768> m.class==myklass # => true
рдПрдХ рдЕрдирд╛рдо рдХрдХреНрд╖рд╛ рдХрд╛ рдкрд╛рд▓рди
рдПрдХ рдЕрдирд╛рдо рд╡рд░реНрдЧ рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдЕрдирд╛рдо рд╡рд░реНрдЧред
class MyKlass2 < myklass # ... end MyKlass2.superclass == myklass # => true # : mk2 = Class.new myklass do # .. end mk2.superclass == myklass mk2.name # => ""
рдореБрдЭреЗ рдирд╛рдо рд╕реЗ рдмреБрд▓рд╛рдУ
рд░реВрдмреА рд╕реЗ рдереЛрдбрд╝рд╛ рдЬрд╛рджреВ рд╣реИред рдПрдХ рд╡рд░реНрдЧ рдирд╛рдо рддрдм рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХрдХреНрд╖рд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ рдХреЛ рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд░реВрдмреА рдореЗрдВ, рд╕реНрдерд┐рд░рд╛рдВрдХ рдПрдХ рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХрдХреНрд╖рд╛ рдХреЗ рдирд╛рдоред
MyKlass = myklass MyKlass # => 'MyKlass' MyKlass.name # => 'MyKlass' myklass.name # => 'MyKlass'
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐
MyKlass рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИ рдЬреЛ рд╡рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЙрд╕ рд╕рдордп рдЬрдм рд╣рдордиреЗ рдЗрд╕реЗ рдЗрд╕ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рд╕реМрдВрдкрд╛, рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХреЛ рдПрдХ рдирд╛рдо рдорд┐рд▓рд╛ рдЬреЛ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХрдХреНрд╖рд╛ рдХрд╛ рдирд╛рдо рдЕрдХреНрд╕рд░ рдкреНрд░рдХреГрддрд┐ рдореЗрдВ рд╕рд┐рд░реНрдл рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рд╣реЛрддрд╛ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдЖрдк рдирд╛рдо рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЙрд╕реА рдЪрд░ рдпрд╛ рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИред
рдореБрд░реНрдЧреА рдпрд╛ рдЕрдВрдбрд╛?
рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рддрд░рд╣
рд╡рд░реНрдЧ рдкреНрд░рдХрд╛рд░,
рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдЗрд╕рдХреЗ рдмрд╛рдж:
Object.class # => Class Class.class # => Class Class.superclass # => Module Module.class # => Class Module.superclass # => Object
рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдХрд┐ рдкреНрд░рдердо рдХреНрдпрд╛ рд╣реИ -
рд╡рд╕реНрддреБ рдпрд╛
рд╡рд░реНрдЧ рдЕрд╕рдВрднрд╡ рд╣реИред рдПрдХ
рд╡рд░реНрдЧ рдХреИрд╕реЗ рдПрдХ рд╕реНрдерд┐рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕ рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ,
рдСрдмреНрдЬреЗрдХреНрдЯ ,
рдХреНрд▓рд╛рд╕, рдФрд░
рдореЙрдбреНрдпреВрд▓ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рдкреНрд░рд╛рдердорд┐рдХ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реИрдВ, рдФрд░ рд╡реЗ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд░реВрдмреА рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдмрдирддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд░реВрдмреА рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдРрд╕рд╛ рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдХрд░рддреА рд╣реИред
рдПрдХ рд░реЛрдЪрдХ рддрдереНрдпред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд░реВрдмреА рдореЗрдВ рдХреЛрдИ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реИрдВ (рдЬреЛ рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо
рдбреАрдИрдПрдл рд╕реЗрд▓реНрдл рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд░реНрдгрди
рдХрд░рддреЗ рд╣реИрдВ )ред рдХреЗрд╡рд▓ рдХреНрд▓рд╛рд╕ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╕рд╣рд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЙрд╕ рдЕрдЧрд▓реЗ рдЧреБрд░реБрд╡рд╛рд░ рдХреЛ рдФрд░ ...
рд╕рдВрдмрдВрдзрд┐рдд рд▓рд┐рдВрдХ
rhg.rubyforge.org/chapter02.htmlrbdev.ru/2010/07/izuchaem-yadro-ruby-klassy-i-obektystackoverflow.com/questions/1219691/why-object-class-class-in-ruby