рд▓реЗрдЦ рдкреИрдЯ рд╢реМрдШреНрдиреЗрд╕ рдХреЗ рдиреЛрдЯ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИ, рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рд░реВрдмреА, рд╕реНрдореЙрд▓рдЯрд╛рдХ рдФрд░ рдХреНрд▓рд╛рд╕ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рд╣реИ ред
рдХреБрдЫ рд╣рдлрд╝реНрддреЗ рдкрд╣рд▓реЗ
рдПрд░реНрдиреА рдорд┐рд▓рд░ рдХреЗ рд▓реЗрдЦ рдиреЗ рдореБрдЭреЗ рдЗрд╕ рд╕рд╡рд╛рд▓ рдкрд░ рд▓реЗ рдЧрдпрд╛: рд░реВрдмреА рдореЗрдВ рд╡рд░реНрдЧ рдЪрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ? рдереЛрдбрд╝реЗ рд╢реЛрдз рдХреЗ рдмрд╛рдж, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╡рд░реНрдЧ рдЪрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕реНрд░реЛрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬреЙрди рдиреБрдиреЗрдореЗрдХрд░ рдиреЗ рдкрд╣рд▓реЗ рд╣реА
"рд░реВрдмреА рдореЗрдВ рдХреНрд▓рд╛рд╕ рдПрдВрдб рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕" рдирд╛рдордХ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрд╛ рд╣реИ
, рдЬреЛ 2006 рд╕реЗ рджрд┐рдирд╛рдВрдХрд┐рдд рд╣реИ рдФрд░ рдЕрднреА рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рдХрдХреНрд╖рд╛ рдХреЗ рдЪрд░реЛрдВ рдХреЗ рд╕рд╛рде рдореВрд▓рднреВрдд рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХрдХреНрд╖рд╛ рдФрд░ рдЙрд╕рдХреЗ рд╕рднреА рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреЗ рдмреАрдЪ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЬреИрд╕рд╛ рдХрд┐ рдЬреЙрди рдиреЗ рдЫрд╣ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╕рдордЭрд╛рдпрд╛ рдерд╛, рдФрд░ рдЗрд╕рд╕реЗ рднреНрд░рдо рдФрд░ рдЕрдЬреАрдм рдХреЛрдб рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдореЗрд░реЗ рд▓рд┐рдП, рдореБрдЦреНрдп рдкреНрд░рд╢реНрди рд╣реИ: "рдХреНрдпреЛрдВ?"ред рд░реВрдмреА рд╕рднреА рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреЗ рдмреАрдЪ рдЗрд╕ рдореВрд▓реНрдп рдХреЛ рдХреНрдпреЛрдВ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реИ? рд╡рд░реНрдЧ рдЪрд░ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдЪрд░ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреНрдпреЛрдВ рд╣реИ? рдпреЗ рд╡рд┐рдЪрд╛рд░ рдХрд╣рд╛рдВ рд╕реЗ рдЖрддреЗ рд╣реИрдВ? рдЙрддреНрддрд░ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ: рдХреНрд▓рд╛рд╕ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдЙрдиреНрд╣реЛрдВрдиреЗ
рд╕реНрдорд╛рд▓рдЯреЙрдХ рдирд╛рдордХ рдмрд╣реБрдд рдкреБрд░рд╛рдиреА рднрд╛рд╖рд╛ рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛ред рд╕реНрдореЙрд▓рдЯреЙрдХ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ 1970 рдХреЗ рджрд╢рдХ рдХреЗ рдЖрд░рдВрдн рдореЗрдВ рдкреНрд░рд╕рд┐рджреНрдз рдХрдВрдкреНрдпреВрдЯрд░ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ
рдПрд▓рди рдХрд╛ рдФрд░
рдЬрд╝реЗрд░реЙрдХреНрд╕ PARC рд▓реИрдм рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдиреЗ рдХрд┐рдпрд╛ рдерд╛ред рд╕реНрдореЙрд▓рдЯрд╛рдХ рдХреЗ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХреЗ рд╕рд╛рде, рдПрд▓рди рдиреЗ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛; рд╡рд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (OOP) рдХреА рдкреВрд░реА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде рдЖрдП рдФрд░ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдм рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕реНрдореЙрд▓рдЯрд╛рдХ рдиреЗ рдХрдИ рдЕрдиреНрдп рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЖрдЬ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ - рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд╕реНрддреБ рд╕реА рдФрд░ рд░реВрдмреА рд╣реИрдВред
рдЖрдЬ рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕реНрдорд╛рд▓рдЯрд╛рдХ рдореЗрдВ рд╡рд░реНрдЧ рдЪрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рд░реВрдмреА рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╕реНрдорд╛рд▓рдЯрд╛рдХ рд╕реЗ рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛ рдЪрд░ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реА рдЙрдзрд╛рд░ рдирд╣реАрдВ рд╣реИред рд░реВрдмреА рдХрд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рд╕реНрдореЙрд▓рдЯрд╛рдХ рд╕реЗ рднреА рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд░реВрдмреА рдореЗрдВ рд╡рд░реНрдЧ рдЪрд░
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рд░реВрдмреА рдореЗрдВ рдХреМрди рд╕реЗ рд╡рд░реНрдЧ рдЪрд░ рд╣реИрдВ рдФрд░ рд╡реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ,
2006 рдХреЗ рдЬреЙрди рдиреБрдирдореЗрдХрд░ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП: рдпрд╣рд╛рдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд░реВрдмреА рд╡рд░реНрдЧ,
Polygon
, рдЬрд┐рд╕рдореЗрдВ рдПрдХрд▓ рд╡рд░реНрдЧ рдЪрд░
@@sides
ред
class Polygon @@sides = 10 def self.sides @@sides end end puts Polygon.sides =>10
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:
@@sides
рдПрдХ рдЪрд░ рд╣реИ рдЬрд┐рд╕реЗ
Polygon
рд╡рд░реНрдЧ рдХреЗ рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдпрд╛ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдзрд┐ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ,
sides
рдПрдХ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдПрдХ рд╡реИрдЪрд╛рд░рд┐рдХ рд╕реНрддрд░ рдкрд░, рдЕрдВрджрд░, рд░реВрдмреА рд╕реНрдореГрддрд┐ рдХреЗ рдЙрд╕реА рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рд╛рде
@@sides
рдЪрд░ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИ рдЬреЛ
Polygon
рд╡рд░реНрдЧ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ:

рдЬрдм рдЖрдк рдПрдХ рдЙрдкрд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдкрд░реЗрд╢рд╛рдиреА рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ; рдЬреЙрди рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг:
class Triangle < Polygon @@sides = 3 end puts Triangle.sides =>3 puts Polygon.sides =>3
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рджреЛрдиреЛрдВ рд╡рд░реНрдЧ рдЪрд░,
Triangle.sides
рдФрд░
Polygon.sides
, рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ 3. рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд░реВрдмреА рдЕрдкрдиреЗ рднреАрддрд░ рдПрдХ рдПрдХрд▓ рдЪрд░ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рджреЛрдиреЛрдВ рд╡рд░реНрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдореИрдВ рдЕрдкрдиреЗ рдмреНрд▓реЙрдЧ рдХреЗ рдЕрдЧрд▓реЗ рдкреЛрд╕реНрдЯ рдореЗрдВ рд░реВрдмреА рдореЗрдВ рд╡рд░реНрдЧ рдЪрд░ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдм рдореИрдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЪрд┐рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЪрд▓реЛ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ рдФрд░ рд╕реНрдорд╛рд▓рдЯрд╛рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдЬрд╛рдиреЗрдВ ...
рд╕реНрдорд╛рд▓рдЯрд╛рдХ рдХреНрдпрд╛ рд╣реИ?
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдХрд╣рд╛, рдПрд▓рди рдХреИ рдиреЗ 1970 рдХреЗ рджрд╢рдХ рдореЗрдВ рдЬрд╝реЗрд░реЙрдХреНрд╕ PARC рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдорд╛рд▓рдЯрд╛рдХ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдерд╛ред рдпрд╣ рд╡рд╣реА рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХрдВрдкреНрдпреВрдЯрд░, рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдИрдерд░рдиреЗрдЯ рдФрд░ рдХрдИ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдерд╛ред рдЗрд╕ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдЦрд┐рд▓рд╛рдл, OOP рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдЖрд╡рд┐рд╖реНрдХрд╛рд░реЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ!
рд╕реНрдорд╛рд▓рдЯрд╛рдХ рдореЗрдВ, Kay рдиреЗ рдЖрдЬ рд╢рдмреНрджрд╛рд╡рд▓реА рдФрд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ред рд╕реНрдореЙрд▓рдЯрд╛рдХрд▓ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдореВрд▓реНрдп, рдЬрд┐рд╕рдореЗрдВ рдмреНрд▓реЙрдХ рдЬреИрд╕реЗ рднрд╛рд╖рд╛ рдирд┐рд░реНрдорд╛рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдПрдХ рд╡рд╕реНрддреБ рд╣реИред рд╕реНрдореЙрд▓рдЯреЙрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдЗрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдФрд░ рдЙрдирдХреЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдкрде рд╢рд╛рдорд┐рд▓ рд╣реИрдВ; рд╕реНрдореЙрд▓рдЯрд╛рдХ рдкрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ 'рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВ'ред рд╕реНрдорд╛рд▓рдЯрд╛рдХ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдХреЛ 'рд╡рд┐рдзрд┐рдпрд╛рдБ' рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╡рд╕реНрддреБ рддрд░реАрдХреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдм рдмрд╣реБрдд рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИред
рд╢реБрд░реБрдЖрдд рд╕реЗ рд╣реА OOP Kay рдЕрд╡рдзрд╛рд░рдгрд╛ рдореЗрдВ 'рдХреНрд▓рд╛рд╕' рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╢рд╛рдорд┐рд▓ рдерд╛ред рдСрдмреНрдЬреЗрдХреНрдЯ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ (рд╡рд┐рдзрд┐рдпреЛрдВ) рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдЙрджрд╛рд╣рд░рдг рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реНрдореЙрд▓рдЯрд╛рдХ рдиреЗ рдмрд╣реБрд░реВрдкрддрд╛ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рдЬреЛ рдбреЗрд╡рд▓рдкрд░ рдХреЛ 'рдЙрдкрд╡рд░реНрдЧреЛрдВ' рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреЗ 'рд╕реБрдкрд░рдХреНрд▓рд╛рд╕реЗрд╕' рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрди рд╕рднреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдЖрдЬ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ 40 рд╕рд╛рд▓ рдкрд╣рд▓реЗ Kay рдФрд░ рдЙрдирдХреЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕реНрдореЙрд▓рдЯрд╛рдХ рдПрдХ рдкреВрд░реНрдг рдЪрд┐рддреНрд░рдордп рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИред рдореИрдВ рд╕реНрдореЙрд▓рдЯрд╛рдХ рдХреЛ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рдПрдХреНрд╕рдХреЛрдб рдХрд╛ рдПрдХ рдЕрдЧреНрд░рджреВрдд рдорд╛рдирддрд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ рддрдм рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрдм Microsoft рдФрд░ Apple рднреА рдореМрдЬреВрдж рдирд╣реАрдВ рдереЗ, рдПрдХ рдРрд╕реА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЬрд╣рд╛рдВ рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреЗрд╡рд▓ рдЕрдХрд╛рджрдорд┐рдХ рдпрд╛ рд╕рд░рдХрд╛рд░реА рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛ред рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдПрд▓рди рдХреЗ рдФрд░ рд╕реНрдорд╛рд▓рдЯрд╛рдХ рдЯреАрдо рдХрд╛ рдПрдХ рдФрд░ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд▓рдХреНрд╖реНрдп, рд╕реНрдХреВрд▓реЛрдВ рдореЗрдВ рдмрдЪреНрдЪреЛрдВ рдХреЛ рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рджреГрд╢реНрдп рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрджреНрднреБрдд рдХрд╣рд╛рдиреА рд╣реИ!
рд╕реНрдореЙрд▓рдЯрд╛рдХ рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдФрд░ рдЙрддреНрдкрддреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрддреНрдпрдзрд┐рдХ рд░реВрдк рд╕реЗ 'рдж рдЕрд░реНрд▓реА рд╣рд┐рд╕реНрдЯреНрд░реА рдСрдл рд╕реНрдореЙрд▓рдЯрд╛рдХ' (
html , рдпрд╛
рдкреАрдбреАрдПрдлрд╝ , рдпрд╛
рдкреАрдбреАрдПрдлрд╝ рд▓реЗрдХрд┐рди рдбрд╛рдпрдЧреНрд░рд╛рдо рдХреЗ рдмрд┐рдирд╛ ) рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ 1990 рдХреЗ рджрд╢рдХ рдореЗрдВ рдмрд╛рдж рдореЗрдВ рд▓рд┐рдЦреА рдХрд╛рдИ рджреНрд╡рд╛рд░рд╛ рдкреВрд░реНрд╡рд╡реНрдпрд╛рдкреА рд╕рдореАрдХреНрд╖рд╛ рдХреА рдЧрдИ рдереАред рдпрд╣ рдПрдХ рдЖрдХрд░реНрд╖рдХ рдХрд╣рд╛рдиреА рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдФрд░ рдЙрд╕рдХреЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдиреЗ рдкрд╣рд▓реЗ рдХреЗ рдЕрддреАрдд рд╕реЗ рднреА рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЙрдзрд╛рд░ рд▓рд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рд╕рдВрдпреЛрдЬрди рдХрдбрд╝реА рдореЗрд╣рдирдд, рд░рдЪрдирд╛рддреНрдордХ рдерд╛, рдЬрд╣рд╛рдВ рд╢реБрджреНрдз рдкреНрд░рддрд┐рднрд╛ рдПрдХ рдмрдбрд╝рд╛ рдХрджрдо рдЙрдард╛рдиреЗ рдФрд░ рдЕрдкрдиреЗ рджрд┐рдиреЛрдВ рдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рдХреНрд░рд╛рдВрддрд┐ рд▓рд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реА, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╣рдорд╛рд░реЗред
рдПрд▓рди рдХреЗ рдиреЗ 1972 рдореЗрдВ рд╕реНрдореЙрд▓рдЯрд╛рдХ рдХрд╛ рдкрд╣рд▓рд╛ рд╡рд░реНрдХрд┐рдВрдЧ рд╡рд░реНрдЬрди рдмрдирд╛рдпрд╛ - рдЕрдкрдиреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереА рдХрд┐ рдирдИ рд╕реНрдореЙрд▓рдЯрд╛рдХ рдПрдХ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рднрд╛рд╖рд╛ рд╣реЛрдЧреА, рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рджреЛ рд╕рд╛рд▓ рд▓рдЧреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рднрд╛рдЧреНрдп рдиреЗ рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд┐рдпрд╛ред рдПрдХ рдЕрдЪреНрдЫрд╛ рджрд┐рди, PARC рдХреЗ рд╣реЙрд▓рд╡реЗ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреБрд░реБрд╖ рдмрд╛рддрдЪреАрдд рдХреЗ рджреМрд░рд╛рди, рдЯреЗрдб рдХрд╛рд╣рд▓рд░, рдбреИрди рдЗрдВрдЧрд▓реНрд╕ рдФрд░ рдореИрдВрдиреЗ рдЦрдбрд╝реЗ рд╣реЛрдХрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреАред рдпрд╣ рднрд╛рд╖рд╛ рдХреА рд╢рдХреНрддрд┐ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдФрд░ рдЕрдм рд╡реЗ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рднрд╛рд╖рд╛ рдХреЛ рдХреИрд╕реЗ рд╕реБрдкрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдмрдирд╛рдпрд╛ рдЬрд╛рдПред рдЙрдирдХреЗ рд╕рд╛рдордиреЗ рдЖрдХрд░реНрд╖рд┐рдд, рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ "рджреБрдирд┐рдпрд╛ рдХреА рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рднрд╛рд╖рд╛" рд╡реЗ "рдХреЛрдб рдкреГрд╖реНрдареЛрдВ рдореЗрдВ" рдХреИрдкреНрдЪрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдирдХрд╛ рд╕рдВрдХреЗрдд рдерд╛: "рдмрдирд╛рдПрдВ рдпрд╛ рдмрдВрдж рдХрд░реЗрдВред" рдЯреЗрдб рд╕реАрдПрдордпреВ рд╡рд╛рдкрд╕ рдЪрд▓рд╛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдбреИрди рдЕрднреА рднреА рд╡рд╣рд╛рдВ рдерд╛ рдФрд░ рдореБрдЭреЗ рдФрд░ рдЖрдЧреЗ рдмрдврд╝рд╛ рд░рд╣рд╛ рдерд╛ред рдЕрдЧрд▓реЗ рджреЛ рд╕рдкреНрддрд╛рд╣, рдореИрдВ рд╕реБрдмрд╣ рдЪрд╛рд░ рдмрдЬреЗ PARC рдЖрдпрд╛ рдФрд░ рдЖрда рдмрдЬреЗ рддрдХ рдХрд╛рдо рдХрд┐рдпрд╛, рдлрд┐рд░ рдбреИрди рдиреЗ рд╣реЗрдирд░реА рдлреБрдЪреНрд╕, рдЬреЙрди рд╢реБрдХ рдФрд░ рд╕реНрдЯреАрд╡ рдкреБрд░рд╕реЗрд▓ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рд╕реБрдмрд╣ рдХреЗ рдХрд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рд╢реБрд░реВ рдХреАред рдореИрдВрдиреЗ рдЕрдЧреНрд░рд┐рдо рд░реВрдк рд╕реЗ рджрд╛рд╡рд╛ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЬреЙрди рдореИрдХрд╛рд░реНрдереА рджреНрд╡рд╛рд░рд╛ LISP рджреБрднрд╛рд╖рд┐рдпрд╛ LISP рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдЙрд╕реА 'рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреЗрдЬ' рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдерд╛, рдФрд░ рд╕рдордп рдХреЗ рд╕рд╛рде, рдЬрдм рднрд╛рд╖рд╛ рдХреА рд╢рдХреНрддрд┐ рдмрдврд╝реА, рддреЛ рдпрд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдмрди рдЧрдпрд╛ред рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рдерд╛ рдХрд┐ рдореИрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрдб рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВредрдпрд╣рд╛рдВ рдХрд╛рдИ
рдЬреЙрди рдореИрдХрдХрд╛рд░реНрдереА рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рджрд╕ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдПрд▓рдЖрдИрдПрд╕рдкреА рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдерд╛ред рд╕реНрдореЙрд▓рдЯрд╛рдХ рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Kay рдХреЛ рд╕рд┐рд░реНрдл рдЖрда рд╕реБрдмрд╣ рдорд┐рд▓реА:
рдкрд╣рд▓реЗ рдХреБрдЫ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рджреЛрд╖ рдереЗ рдЬрд┐рдирдХреА рд╕рдореВрд╣ рджреНрд╡рд╛рд░рд╛ рдЬреЛрд░ рд╕реЗ рдЖрд▓реЛрдЪрдирд╛ рдХреА рдЧрдИ рдереАред рд▓реЗрдХрд┐рди рдЖрдард╡реАрдВ рд╕реБрдмрд╣ рддрдХ, рдпрд╛ рдХрд╣реАрдВ рдФрд░, рдХреЛрдб рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ ...
рдореИрдВ рдЙрддрдирд╛ рд╣реА рд░рдЪрдирд╛рддреНрдордХ, рдмрд╣реБрдореБрдЦреА рдФрд░ рдЙрддреНрдкрд╛рджрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬрд┐рддрдирд╛ 40 рд╕рд╛рд▓ рдкрд╣рд▓реЗ PARC рдореЗрдВ рдПрд▓рди рдХреЗ рдФрд░ рдЙрдирдХреЗ рд╕рд╣рдпреЛрдЧреА рдереЗред
рд╕реНрдореЙрд▓рдЯрд╛рдХ рдХреНрд▓рд╛рд╕ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕
рд╕реНрдорд╛рд▓рдЯрд╛рдХ рдореЗрдВ рдХреНрд▓рд╛рд╕ рдЪрд░ рдЦреБрдж рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЬреАрдПрдирдпреВ рд╕реНрдореЙрд▓рдЯреЙрдХ, рднрд╛рд╖рд╛ рдХрд╛ рдПрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рд▓рд┐рдирдХреНрд╕ рдмреЙрдХреНрд╕ рдХреЗ рддрд╣рдд рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЪрд▓рд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдкрд╣рд▓реЗ, рд╕реНрдореЙрд▓рдЯрд╛рдХ рдореБрдЭреЗ рдмрд╣реБрдд рдЕрдЬреАрдм рдФрд░ рдмреЗрдлрд╝рд┐рдХреНрд░ рд▓рдЧрддрд╛ рдерд╛; рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдЗрд╕рдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдХрдорд╛рдВрдб рдХреЛ рдЕрдВрдд рддрдХ рдпрд╛рдж рд░рдЦреЗрдВ, рдФрд░ рдпрд╣ рднреА, рдХрд┐ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рддрд░реНрдХ рдХреА рдПрдХ рд╕реВрдЪреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ... рдмрд┐рдирд╛ рд╡рд┐рдзрд┐ рдирд╛рдо рдХреЗ! рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ рддрд░реНрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рд╣реИ, рдпрд╛ рдРрд╕рд╛ рдХреБрдЫред рд▓реЗрдХрд┐рди рдХреБрдЫ рджрд┐рдиреЛрдВ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреА рдЖрджрдд рдкрдбрд╝ рдЧрдИ, рдФрд░ рднрд╛рд╖рд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рд╛рд░реНрдердХ рд╣реЛ рдЧрдИред
рдпрд╣рд╛рдБ, рдПрдХ рд╣реА рдмрд╣реБрднреБрдЬ рд╡рд░реНрдЧ - рдмрд╛рдИрдВ рдУрд░ рд╕реНрдорд╛рд▓рдЯрд╛рдХ рдХреЛрдб, рджрд╛рдИрдВ рдУрд░ рд░реВрдмреАред
Object subclass: Polygon [ Sides := 10. ] Polygon class extend [ sides [ ^Sides ] ] Polygon sides printNl. => 10
| class Polygon @@sides = 10 def self.sides @@sides end end puts Polygon.sides => 10
|
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдорд╛рд▓рдЯрд╛рдХ рдХреЛрдб рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ рдХреА рдПрдХ рдЫреЛрдЯреА рд╡реНрдпрд╛рдЦреНрдпрд╛:
тАв
Object subclass: Polygon
- рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рд╡рд╕реНрддреБ рд╡рд░реНрдЧ рдХреЛ рд╕рдВрджреЗрд╢ рдХрд╛ рдЙрдкрд╡рд░реНрдЧ рднреЗрдЬрдирд╛ рдФрд░ рдмрд╣реБрднреБрдЬ рдирд╛рдо рджреЗрдирд╛ред рдпрд╣ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдмрдирд╛рдПрдЧрд╛, рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рд╣реИред рдпрд╣ рд░реВрдмреА рд╡рд░реНрдЧ рдмрд╣реБрднреБрдЬ <рд╡рд╕реНрддреБ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рдПрдХ рдЙрдкрдорд╛ рд╣реИред рдмреЗрд╢рдХ, рд░реВрдмреА рдореЗрдВ, рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред
тАв
Sides := 10.
- рдпрд╣рд╛рдВ рд╕рд╛рдЗрдбреНрд╕ рдХреНрд▓рд╛рд╕ рдХрд╛ рд╡реИрд░рд┐рдПрдмрд▓ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрд▓реНрдпреВ рджреА рдЧрдИ рд╣реИред рд░реВрдмреА рдПрдХ рдЕрд▓рдЧ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ: @@ рдкрдХреНрд╖ред
тАв
Polygon class extend
- рдпрд╣рд╛рдБ
Polygon class extend
'рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд' рд╣реИ; рдпрд╛рдиреА рдмрд╣реБрднреБрдЬ рд╡рд░реНрдЧ рдореБрдЭреЗ рдПрдХ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рддрд╛ рд╣реИред рд░реВрдмреА рдореЗрдВ, рдореИрдВ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ: рд╡рд░реНрдЧ рдмрд╣реБрднреБрдЬ; рд╕реНрд╡
тАв
printNl
рд╡рд┐рдзрд┐ рдХрдВрд╕реЛрд▓ рдХреЛ рдореВрд▓реНрдп рдкреНрд░рд┐рдВрдЯ рдХрд░рддреА рд╣реИ; рдпрд╣ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рд░реВрдмреА рдореЗрдВ рдбрд╛рд▓рддрд╛ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ PrintNl рд╡рд┐рдзрд┐
Sides
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рд╣реИред рд░реВрдмреА рдореЗрдВ рд╕рд┐рд░реНрдл
@@sides.puts
рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЛ!
рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рд╕рддрд╣реА рдорддрднреЗрджреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк рдПрдХ рдХрджрдо рдкреАрдЫреЗ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рд╕реНрдорд╛рд▓рдЯрд╛рдХ рдФрд░ рд░реВрдмреЗрд▓ рд╕рдорд╛рди рдХреИрд╕реЗ рд╣реИрдВ! рджреЛрдиреЛрдВ рднрд╛рд╖рд╛рдПрдВ рди рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛ рдЪрд░ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддреА рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдмрд╣реБрднреБрдЬ рд╡рд░реНрдЧ рднреА рд▓рд┐рдЦрддреА рд╣реИрдВ, рдПрдХ рд╡рд░реНрдЧ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рддреА рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕рдорд╛рди рдореВрд▓реНрдп рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреА рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк рд░реВрдмреА рдХреЛ рдПрдХ рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рд╕реНрдореЙрд▓рдЯрд╛рдХ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ!
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдХрд╣рд╛, рд╕реНрдореЙрд▓рдЯрд╛рдХ рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреЗ рдмреАрдЪ рд╡рд░реНрдЧ рдЪрд░ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рд░реВрдмреА рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдореИрдВ рд╕реНрдорд╛рд▓рдЯрд╛рдХ рдФрд░ рд░реВрдмреА рдореЗрдВ рддреНрд░рд┐рднреБрдЬ рдХрд╛ рдЙрдкрд╡рд░реНрдЧ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдБред
Polygon subclass: Triangle [ ] Triangle class extend [ set_sides: num [ Sides := num ] ] Polygon sides printNl. => 10
| class Triangle < Polygon def self.sides=(num) @@sides = num end end puts Triangle.sides => 10
|
рдпрд╣рд╛рдБ рдореИрдВ рддреНрд░рд┐рднреБрдЬ рдХрд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдБ рдФрд░ рдЗрд╕рдХреЗ рд╡рд░реНрдЧ рдЪрд░ рдХрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЗрд╕рдХреА рд╡рд┐рдзрд┐ред рдЕрдм, рдПрдХ рдЙрдкрд╡рд░реНрдЧ рд╕реЗ рдЗрд╕рдХреЗ рдорд╛рди рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
Triangle set_sides: 3. Triangle sides printNl. => 3
| Triangle.sides = 3 puts Triangle.sides => 3
|
рдХреЛрдИ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ; Set_slides рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ (
slides=
рд░реВрдмреА рдореЗрдВ) рдкрд░ рдХреЙрд▓ рдХрд░рдХреЗ, рдореИрдВ рдорд╛рди рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рддреНрд░рд┐рднреБрдЬ рдФрд░ рдмрд╣реБрднреБрдЬ рдПрдХ рд╡рд░реНрдЧ рдЪрд░ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдмрд╣реБрднреБрдЬ рд╡рд░реНрдЧ рдХреЛ рднреА рдмрджрд▓ рджреЗрдЧрд╛:
Polygon sides printNl. => 3
| puts Polygon.sides => 3
|
рднрд╛рд╖рд╛рдПрдВ рдПрдХ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИрдВ: рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рд╕реНрдореЙрд▓рдЯрд╛рдХ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЧ рдЪрд░ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХрдХреНрд╖рд╛ рдЪрд░ рдФрд░ рдЕрднрд┐рднрд╛рд╡рдХ рд╡рд░реНрдЧ рдФрд░ рдЙрд╕рдХреЗ рд╡рдВрд╢ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪрд░ рдмрди рдЬрд╛рдПрдВрдЧреЗред рдХрдо рд╕реЗ рдХрдо GNU рд╕реНрдорд╛рд▓рдЯрд╛рдХ рдореЗрдВ, рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:
Object subclass: Polygon [ Sides := 10. ] Polygon class extend [ sides [ ^Sides ] ] Polygon subclass: Triangle [ Sides := 3. ] Triangle class extend [ sides [ ^Sides ] ] Polygon sides printNl. >= 10 Triangle sides printNl. >= 3
рд░реВрдмреА рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдКрдкрд░ рджреЗрдЦрд╛,
@@sides
рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рдореВрд▓реНрдп рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдХрдХреНрд╖рд╛ рдЙрджрд╛рд╣рд░рдг рдЪрд░
рд░реВрдмреА рдореЗрдВ, рдпрджрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рдорд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╡рд░реНрдЧ рдЪрд░ рдХреА рдмрдЬрд╛рдп рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдЖрдЗрдП рдПрдХ рдФрд░ рдЬреЙрди рдиреВрдирдореЗрдХрд░ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
class Polygon def self.sides @sides end @sides = 8 end puts Polygon.sides => 8
рдЕрдм, рдЬрдм рдореИрдВ
@@sides
рдмрдЬрд╛рдп
@@sides
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛
@sides
, рддреЛ рд░реВрдмреА рдПрдХ рдХреНрд▓рд╛рд╕ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдХреНрд▓рд╛рд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡реЗрд░рд┐рдПрдмрд▓ рдмрдирд╛рддрд╛ рд╣реИ:

рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдЬрдм рддрдХ рдореИрдВ рддреНрд░рд┐рднреБрдЬ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ рддрдм рддрдХ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ:
class Triangle < Polygon @sides = 3 end
рд╡рд░реНрдЧ рдЕрдм
@sides
рд╕реНрд╡рдпрдВ рдХреЗ рдореВрд▓реНрдп рдХреА рдЕрдкрдиреА рдкреНрд░рддрд┐ рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИ:

рдЕрдм рд╕реНрдорд╛рд▓рдЯрд╛рдХрд▓ рдореЗрдВ рднреА рдпрд╣реА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Smalltalk рдореЗрдВ, рдЖрдк рд╡рд░реНрдЧ рдореЗрдВ рдЖрд╡реГрддреНрддрд┐ рдирд╛рдо рдХреА рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВ:
Object subclass: Polygon [ ] Polygon instanceVariableNames: 'Sides '! Polygon extend [ sides [ ^Sides ] ]
| class Polygon def sides @sides end end
|
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рдирдпрд╛
Polygon
рд╡рд░реНрдЧ рдмрдирд╛рдпрд╛, рдЬреЛ
Object
рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рд╣реИред рдлрд┐рд░, рдореИрдВ рдЗрд╕ рдирдИ рдХрдХреНрд╖рд╛ рдХреЛ
instanceVariableNames
рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реВрдВ, рд╕реНрдореЙрд▓рдЯреЙрдХ рдХреЛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдЪрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд░рд╣рд╛ рд╣реИред рдФрд░ рдЕрдВрдд рдореЗрдВ, рдореИрдВ
Polygon
рд╡рд░реНрдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ
Polygon
рд╣реВрдВ рдФрд░
sides
рд╡рд┐рдзрд┐ рдХреЛ рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВред рдкрд╛рд╕ рдореЗрдВ, рдореИрдВрдиреЗ рд░реВрдмреА рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдб рд▓рд┐рдЦрд╛ред
рдЗрд╕ рдкреНрд░рдХрд╛рд░,
Sides
рдФрд░
@sides
Sides
рдмрд╣реБрднреБрдЬ рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдЪрд░ рд╣реИрдВред рд╕реНрдореЙрд▓рдЯрд╛рдХрд▓ рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдЪрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
instanceVariableNames
рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреЙрд▓реАрдЧреЙрди рдкрд░ рдХрдХреНрд╖рд╛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ рд╣реЛрдЧрд╛ рдпрд╛
extend
, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
Object subclass: Polygon [ ] Polygon class instanceVariableNames: 'Sides '! Polygon class extend [ sides [ ^Sides ] ]
| class Polygon def self.sides @sides end end
|
рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдХреЛрдб рдХреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯреБрдХрдбрд╝реЛрдВ (рд░реВрдмреА рдФрд░ рд╕реНрдореЙрд▓рдЯрд╛рдХ) рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдЬреЛ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдПрдХ рд╣реА рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдорд╛рд▓рдЯрд╛рдХ рдореЗрдВ, рдЖрдк
Polygon class extend [ sides
..., рдЬрдмрдХрд┐ рд░реВрдмреА рдореЗрдВ:
class Polygon; def self.sides
class Polygon; def self.sides
ред рд░реВрдмреА рдореБрдЭреЗ рд╕реНрдорд╛рд▓рдЯрд╛рдХ рдХрд╛ рдЫреЛрдЯрд╛ рд░реВрдк рд▓рдЧрддреА рд╣реИред
рд╕реНрдореЙрд▓рдЯрд╛рдХ рдФрд░ рд░реВрдмреА рдореЗрдВ рдореЗрдЯрд╛рдХреНрд▓рд╛рд╕реЗрд╕
рдЖрдЗрдП рдХреЛрдб рдХреА рддрд░реНрдЬ рдкрд░ рдПрдХ рдФрд░ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВрдиреЗ рд╕реНрдореЙрд▓рдЯрд╛рдХрд▓ рдореЗрдВ рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг рдЪрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдерд╛:
Polygon instanceVariableNames: 'Sides '!
рд░реВрд╕реА рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╕реЗ рдЕрдиреБрд╡рд╛рджрд┐рдд, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ:
тАв рд╣рдо
Polygon
рд╡рд░реНрдЧ рд▓реЗрддреЗ рд╣реИрдВ
тАв рдЙрд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо InstVariableNames рд╣реИ
тАв рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ
Sides
рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВред

рдпрд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рд╕реНрдореЙрд▓рдЯрд╛рдХ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдЪрд░ рдХреИрд╕реЗ рдмрдирд╛рдПрдВред рдореИрдВ
Polygon
рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг
Polygon
, рдФрд░ рдЙрди рд╕рднреА рдореЗрдВ
Sides
рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЪрд░ рд╣реЛрдЧрд╛ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдмрдирд╛рдП рдЧрдП рдмрд╣реБрднреБрдЬ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг рдЪрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ
Polygon
рд╡рд░реНрдЧ рдкрд░ рд╡рд┐рдзрд┐ рдХрд╣рддрд╛ рд╣реВрдВред
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдмрддрд╛рдпрд╛ рд╣реИ, рд╕реНрдореЙрд▓рдЯрд╛рдХ рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг рдЪрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ 'рд╡рд░реНрдЧ' рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
Polygon class instanceVariableNames: 'Sides '!
рдЗрд╕ рдХреЛрдб рдХрд╛ рд╢рд╛рдмреНрджрд┐рдХ рдЕрд░реНрде рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ: 'рдмрд╣реБрднреБрдЬ' рд╡рд░реНрдЧ рдХреЗ рдПрдХ рд╡рд░реНрдЧ рдкрд░
instanceVariableNames
рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ред рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ,
Polygon
рд╡рд░реНрдЧ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг рдЪрд░ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ: рд╕реНрдореЙрд▓рдЯрд╛рдХрд▓ рдореЗрдВ рдПрдХ 'рдмрд╣реБрднреБрдЬ рд╡рд░реНрдЧ рд╡рд░реНрдЧ'? GNU рд╕реНрдорд╛рд▓рдЯрд╛рдХ REPL рдореЗрдВ рдХреБрдЫ рдкрд▓ рдмрд┐рддрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ:
$ gst GNU Smalltalk ready st> Polygon printNl. => Polygon st> Polygon class printNl. => Polygon class
рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ
Polygon
рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддрд╛ рд╣реВрдВред рдлрд┐рд░, рдореИрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдмрд╣реБрднреБрдЬ рд╡рд░реНрдЧ рдХреНрдпрд╛ рд╣реИред рдФрд░ рдпрд╣ 'рдмрд╣реБрднреБрдЬ рд╡рд░реНрдЧ' рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рд╣реИ? рдЪрд▓реЛ рдЗрд╕ рдкрд░ рдХрдХреНрд╖рд╛ рдХреЛ рдмреБрд▓рд╛рддреЗ рд╣реИрдВ:
st> Polygon class class printNl. => Metaclass
рдЖрд╣ ... рдпрд╣рд╛рдБ рдпрд╣ рд╣реИред рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рд╡рд░реНрдЧ рдПрдХ рдореЗрдЯрд╛рдХреНрд▓рд╕ рд╣реИред рдКрдкрд░, рдЬрдм рдореИрдВрдиреЗ рдПрдХ рд╢реНрд░реЗрдгреА рдЖрд╡реГрддреНрддрд┐ рдЪрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
Metaclass
рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛, рддреЛ рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ
Metaclass
рд╡рд░реНрдЧ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг,
Polygon
рдореЗрдЯрд╛рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЖрд░реЗрдЦ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпреЗ рд╕рднреА рд╡рд░реНрдЧ рд╕реНрдорд╛рд▓рдЯрд╛рдХ рдореЗрдВ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ:

рдЕрдм, рдпрд╣ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд░реВрдмреА рдЙрд╕реА рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд░реВрдмреА рдХреЗ рдЕрдВрджрд░ рдХреА рдХрдХреНрд╖рд╛рдПрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ:

рд░реВрдмреА рдореЗрдВ, рдЬрдм рднреА рдЖрдк рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ, рд░реВрдмреА рдЕрдВрджрд░ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдореЗрдЯрд╛рдХреНрд▓рд╕ рдмрдирд╛рддрд╛ рд╣реИред рд╕реНрдореЙрд▓рдЯрд╛рдХ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд░реВрдмреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд▓рд╛рд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдЪрд░ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдХреЗрд╡рд▓ рдХреНрд▓рд╛рд╕ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд░реВрдмреА рдХреЗ рдкрд╛рд╕
Metaclass
рдХреНрд▓рд╛рд╕ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА рдореЗрдЯрд╛рдХреНрд▓рд╛рд╕реЗрд╕ рдХреЗ рдмрдЬрд╛рдп,
Class
рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИред
рд░реВрдмреА рдореЗрдВ, рдореЗрдЯрд╛рд╕реЗрд▓рд╕ рдЫрд┐рдкреА рд╣реБрдИ рд╣реИ, рдПрдХ 'рд░рд╣рд╕реНрдпрдордп рдЕрд╡рдзрд╛рд░рдгрд╛' рд╣реИред рд░реВрдмреА рдЪреБрдкрдЪрд╛рдк рдЖрдкрдХреЛ рдпрд╣ рдмрддрд╛рдП рдмрд┐рдирд╛ рдмрдирд╛ рджреЗрддреА рд╣реИ, рдФрд░ рд╕реАрдзреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рд╕реНрдорд╛рд▓рдЯрд╛рдХ рдореЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореЗрдЯрд╛рдХреНрд▓рд╕ рдЫрд┐рдкреЗ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддреЗ рд╣реИрдВред рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЪрд░ рдмрдирд╛рдирд╛, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕реНрдорд╛рд▓рдЯрд╛рдХрд▓ рдореЗрдВ рдореЗрдЯрд╛рдХреНрд▓рд╛рд╕реЗрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдПрдХ рдФрд░ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдХреЙрд▓ рдХреЛ
extend
рдХреНрд▓рд╛рд╕ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреИрд╕реЗ рдЬреЛрдбрд╝рддреЗ
extend
ред
рдЬрдм рдЖрдк рд░реВрдмреА рдореЗрдВ рдПрдХ рдХрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдмрд╕ рдПрдХ рдХрдХреНрд╖рд╛ рдорд┐рд▓рддреА рд╣реИред рд░реВрдмреА рдЖрдкрдХреЛ рдореЗрдЯрд╛рдХреНрд▓рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдмрддрд╛рддреА рд╣реИ:
$ irb > class Polygon; end > Polygon.class Class
рд░реВрдмреА рдХреЗ рдореЗрдЯрд╛рдХреНрд▓рд╕ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреНрд░рд┐рдХ рдЖрдЬрд╝рдорд╛рдПрдБ:
$ irb > class Polygon > def self.metaclass > class << self > self > end > end > end => nil > Polygon.metaclass =>
"# <рд╡рд░реНрдЧ: рдмрд╣реБрднреБрдЬ>" - рдпрд╣ рдмрд╣реБрднреБрдЬ рд╡рд░реНрдЧ рдХрд╛ рд░реВрдкрдХ рд╣реИред рдпрд╣ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдмрд╣реБрднреБрдЬ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ `` рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг '' рдпрд╛ рдмрд╣реБрднреБрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЗрдЯрд╛рдХреНрд▓рд╕ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред