Google рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрдлрд╝рд░реНрд╕: рдмрд╣реБрд░реВрдкрддрд╛, рдЦреЛрдЬ

рд▓реЗрдЦ рдореЗрдВ рджреЛ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рдкреНрд░реЛрдЯреЛрдмреЙрдлрд╝ рдореЗрдВ рдмрд╣реБрд░реВрдкрддрд╛ рдкрд░ рд▓реЗрдЦ рдХрд╛ рдПрдХ рдирд┐: рд╢реБрд▓реНрдХ рд░реАрдЯреЗрд▓рд┐рдВрдЧ рд╣реИред рджреВрд╕рд░рд╛ рднрд╛рдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡-рдирд┐рд░реНрдорд┐рдд "рд╕рд╛рдЗрдХрд┐рд▓" рдХреЗ рдХрд╖реНрдЯрдкреНрд░рдж рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИред



рдЕрджреНрдпрддрди : рдЬреИрд╕рд╛ рдХрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рд╣реА рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВрдиреЗ рдПрдХ рдвреЗрд░ рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдФрд░ рдмрд╣реБрд░реВрдкрддрд╛ рдХреЛ рдорд┐рд▓рд╛рдпрд╛ред рдмрд╣реБрдд рд╕рдХрд▓ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рдирдП рд▓реЛрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП , рдореИрдВрдиреЗ рдкрд╛рда рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рдпрд╣ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгреА рдкрд╛рда рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдЕрд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдорд╛рдлреА рдорд╛рдВрдЧрддрд╛ рд╣реВрдВред




рдПрдирдмреА : рд▓реЗрдЦ рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХрд┐ "Google рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрдлрд╝рд░реНрд╕ рдХреНрдпрд╛ рд╣реИ" рдФрд░ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╕реЗ рдмрдВрдзрд╛ рдирд╣реАрдВ рд╣реИред




рддреЛ, рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди:









рдПрдирдмреА: рдпрд╣рд╛рдВ, рдЕрдВрдЧреНрд░реЗрдЬреА рд╢рдмреНрдж рд╕рдВрджреЗрд╢ рдХреЗ рдмрдЬрд╛рдп, "рд╕рдВрджреЗрд╢" рд╢рдмреНрдж рдпрд╛ "рд╕рдВрд░рдЪрдирд╛" рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдмрд╕ рдХреБрдЫ рд╡рд╛рдХреНрдпреЛрдВ рдореЗрдВ, рд╢рдмреНрдж "рд╕рдВрджреЗрд╢" рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред




рднрд╛рдЧ I: рдмрд╣реБрд░реВрдкрддрд╛



рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рддреАрди рд╡рд░реНрдЧ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВ: рд╕реНрдХреНрд╡рд╛рдпрд░, рд╕рд░реНрдХрд▓ рдФрд░ рдмрд╣реБрднреБрдЬред рдпрд╣ рднреА рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЙрди рд╕рднреА рдХреЗ рдкрд╛рд╕ рдПрдХ рд░рдВрдЧ рдХреНрд╖реЗрддреНрд░ рдФрд░ рдПрдХ рдЖрдИрдбреА рдлрд╝реАрд▓реНрдб рд╣реИред рдЗрд╕ рд╕реНрдерд╛рди рдкрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдкреВрд░реНрд╡рдЬреЛрдВ рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдмрд╣реБрд░реВрдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдХрдИ рдХрд╛рд░рдг рд╣реИрдВ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛)ред рдФрд░, рд╢рд╛рдпрдж, рдЕрдЧрд░ рд╣рдордиреЗ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдПрдХ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ, рддреЛ рд╣рдорд╛рд░рд╛ рдХреЛрдб рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рджрд┐рдЦреЗрдЧрд╛:

рдЫрджреНрдо рдХреЛрдб
enum Color { RED, GREEN, BLUE } struct Point { int x; int y; } struct Shape { int id; Color color; } struct Square extends Shape { Point corner; int width; } struct Circle extends Shape { Point center; int radius; } struct Polygon extends Shape { Point [] points; }
      
      









рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, Google рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрдлрд╝рд░реНрд╕ рдкрджрд╛рдиреБрдХреНрд░рдо рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЬреЙрди рдкреИрд░реАрдЬрд╝ рдЗрд╕ рд╕реАрдорд╛ рдХреЗ рд▓рд┐рдП рддреАрди рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдорд╛рдирддреЗ рд╣реИрдВред



рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдХреГрддрд┐ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреНрд╖реЗрддреНрд░ рд╣реЛрддреЗ рд╣реИрдВред

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдХрдИ рдЧрдВрднреАрд░ рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ:



geom-1.proto
  enum Color { RED = 1; GREEN = 2; BLUE = 3; } message Point { required fixed32 x = 1; required fixed32 y = 2; } message Square { required Point corner = 1; required fixed32 width = 2; } message Circle { required Point center = 1; required fixed32 radius = 2; } message Polygon { repeated Point points = 1; } message Shape { required TYPE type = 1; required fixed32 id = 2; optional Color color = 3; //  optional Square square = 4; optional Circle circle = 5; optional Polygon polygon= 6; }
      
      









рдиреЗрд╕реНрдЯреЗрдб рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди


рдПрдХ рдЕрдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рд╡рд╛рд░рд┐рд╕ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╢реЗрдк рд╕реНрдЯреНрд░рдХреНрдЪрд░ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдФрд░ рджреВрд╕рд░рд╛ рдХреНрд╖реЗрддреНрд░ рдЬреЛрдбрд╝рдирд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╡рд╛рд░рд┐рд╕ рдХреЗ рдХреНрд░рдордмрджреНрдз рдХреНрд╖реЗрддреНрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЭреВрда рдмреЛрд▓рддреЗ рд╣реИрдВред



рдпрд╣ рд╕рдмрд╕реЗ рд╕рдлрд▓ рд╡рд┐рдХрд▓реНрдк рднреА рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ "рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ" рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрд╡рд░реНрдЧ рдХреНрд╖реЗрддреНрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ "рдЕрдирдкреИрдХ" рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ , рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдЕрдЦрдВрдбрддрд╛ рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреАред

рд╡реИрд╕реЗ рднреА, рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИред

geom-2.proto
  enum TYPE { SQUARE = 1; CIRCLE = 2; POLYGON = 3; } enum Color { RED = 1; GREEN = 2; BLUE = 3; } message Point { required fixed32 x = 1; required fixed32 y = 2; } message Square { required Point corner = 1; required fixed32 width = 2; } message Circle { required Point center = 1; required fixed32 radius = 2; } message Polygon { repeated Point points = 1; } message Shape { required TYPE type = 1; required fixed32 id = 2; optional Color color = 3; //  required bytes subclass = 4; }
      
      









рдиреЗрд╕реНрдЯреЗрдб рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреНрд╕


рддреАрд╕рд░рд╛ (рдЕрдиреБрд╢рдВрд╕рд┐рдд) рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд╣рд▓реЗ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдмрдЬрд╛рдп рдиреЗрд╕реНрдЯреЗрдб рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдХреНрд╡рд╛рдпрд░ рд╕рд░реНрдХрд▓ рдХрд╛ рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯрд╛рдЗрдк рдлрд╝реАрд▓реНрдб рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

geom-final.proto
  enum TYPE { SQUARE = 1; CIRCLE = 2; POLYGON = 3; } enum Color { RED = 1; GREEN = 2; BLUE = 3; } message Point { required fixed32 x = 1; required fixed32 y = 2; } message Shape { required TYPE type = 1; required fixed32 id = 2; optional Color color = 3; extensions 4 to max; } message Square { extend Shape { required Square shape = 5; } required Point corner = 1; required fixed32 width = 2; } message Circle { extend Shape { required Circle shape = 6; } required Point center = 1; required fixed32 radius = 2; } message Polygon { extend Shape { required Polygon shape = 7; } repeated Point points = 1; }
      
      







рдЖрдЗрдП рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд╛рднреЛрдВ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред





рднрд╛рдЧ II: рдЦреЛрдЬ



рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрджреЗрд╢ рд╕рдВрд░рдЪрдирд╛ (geom.proto) рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИред рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рд╕реНрд╡рдпрдВ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИред рдореИрдВ рдЗрд╕рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдореЗрд╢рд╛ рдПрдХ рд╕рд░рд▓ рдкрд╛рда рдЦреЛрдЬ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред



рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:



рд╕рд╣рдордд рд╣реВрдБ, рдирд┐рдпрдорд┐рдд grep рдпрд╣рд╛рдБ рд╣рдорд╛рд░реА рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред



рдмреЗрд╢рдХ, рдРрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдВрдХрдбрд╝реЗ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрд░рдЪрд┐рдд рдбреЗрдЯрд╛ рдФрд░ рдЙрд╕рдХрд╛ рдкреНрд░рд╛рд░реВрдк рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдкрдиреА рдХреНрд╡реЗрд░реА рднрд╛рд╖рд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд▓рд┐рдЦреЗрдВ?



рд╣рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд▓реМрдЯреЗрдВрдЧреЗ:





рдпрд╣ рд╕рдм, рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдПрдХ рд╕реНрд╡-рдирд┐рд░реНрдорд┐рдд рдмрд╛рдЗрдХ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред



рдФрд░ рдпрд╣ рднреА, рд╡рд╣ рдХрд░ рд╕рдХрддрд╛ рд╣реИ
  • рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╕реЗ рдкрд╛рда рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд
  • рд╕рдВрджреЗрд╢реЛрдВ рд╕реЗ рдХреЗрд╡рд▓ рдХреБрдЫ рдлрд╝реАрд▓реНрдб рдХрд╛рдЯреЗрдВ рдФрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ
  • рдПрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдХрдИ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рд▓рдХреЛрдВ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЛ рдвреВрдВрдвреЗрдВред






рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдмрд╛рдЗрдХ рдХреЛ рдЕрдкрдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде, рдмрд╛рдЗрдХ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╖рдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдЖрдкрдХрд╛ рдзрдиреНрдпрд╡рд╛рдж



All Articles