рдХрдХреНрд╖рд╛рдПрдВ рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ

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





рд░реВрдмреА рдореЗрдВ, рдХрдХреНрд╖рд╛рдПрдВ рдРрд╕реА рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ рдЬреЛ рдХрдХреНрд╖рд╛ рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред

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.html
rbdev.ru/2010/07/izuchaem-yadro-ruby-klassy-i-obekty
stackoverflow.com/questions/1219691/why-object-class-class-in-ruby

Source: https://habr.com/ru/post/In111738/


All Articles