рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ
рджреЛ рдХрд╛рд░рдг рд╣реИрдВ рдХрд┐ рдореИрдВрдиреЗ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдмреАрд╕ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╡рд┐рдХрд╕рд┐рдд рдврд╛рдВрдЪреЗ рдкрд░ рдХрдИ рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХрд╛ рдЙрдкрдХреНрд░рдо рдХрд┐рдпрд╛:
1. рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, .net рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдПрдХ ORM рдХреЗ рд░реВрдк рдореЗрдВ рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдХрдИ рдкреНрд░рд╕рдиреНрдирддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрд╛ рд╣реИ, рдореИрдВрдиреЗ рд▓рд╛рдЬрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдПрдирд╛рд▓реЙрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд░реНрде рдореЗрдВ рдЦреЛрдЬрд╛ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдлрд╝реНрд░реАрд╕реНрдХреЗрд▓ рдХреЗ рд▓рд┐рдПред
рд╣реИрд░рд╛рдиреА рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рдУрдЖрд░рдПрдо рдЧрд╛рдпрдм рд╣реИрдВред рддрдм рдЬреЛ рдХреБрдЫ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рд╡рд╣
tiOPF рдирд╛рдордХ рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдерд╛, рдЬрд┐рд╕реЗ 90 рдХреЗ рджрд╢рдХ рдХреЗ рдЕрдВрдд рдореЗрдВ рдбреЗрд▓реНрдлреА рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдлрд╝реНрд░реАрд╕реНрдкреИрдХрд▓ рдореЗрдВ рд▓рд╛рдпрд╛ рдЧрдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдврд╛рдВрдЪрд╛ рдмрдбрд╝реЗ рдФрд░ рдореЛрдЯреЗ рдУрдЖрд░рдПрдо рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рд╣реИред
TiOPF рдореЗрдВ рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдЯреЗрдмрд▓реНрд╕ (рдПрдВрдЯрд┐рдЯреА - рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд░реНрд╕реНрдЯ) рдореЗрдВ рдлреАрд▓реНрдбреНрд╕ (рдПрдВрдЯрд┐рдЯреА - рдореЙрдбрд▓ рдлрд░реНрд╕реНрдЯ) рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдореИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рдЬреБрдЕрд▓ рддрд░реАрдХреЗ рдирд╣реАрдВ рд╣реИрдВред рдбреЗрд╡рд▓рдкрд░ рдЦреБрдж рдЗрд╕ рддрдереНрдп рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдХрдорд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдпреЛрдЧреНрдпрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрд┐рдЬрдиреЗрд╕ рдореЙрдбрд▓ рдкрд░ рдПрдХ рдкреВрд░реНрдг рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╣рд╛рд░реНрдбрдХреЛрдб рдХреЗ рд▓рд╛рдпрдХ рд╣реИ ...
рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣рд╛рд░реНрдбрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд╕реНрддрд░ рдкрд░ рдерд╛ рдХрд┐ рдореБрдЭреЗ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВред рдЙрд╕ рд╕рдордп, рдореИрдВ рдЙрди рдкреНрд░рддрд┐рдорд╛рдиреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд╛рдХрд┐рдл рдирд╣реАрдВ рдерд╛, рдЬреЛ рдХрд┐ рдлреНрд░реЗрдорд╡рд░реНрдХ рдбреЗрд╡рд▓рдкрд░ рдиреЗ рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдереЗ рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдХрдИ рдмрд╛рд░ рдкреНрд░рддрд┐ рдкреИрд░рд╛рдЧреНрд░рд╛рдл (рдЖрдЧрдВрддреБрдХ, рд▓рд┐рдВрдХрд░, рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди, DBMS рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдХреЗ рд╕рд╛рде рдЕрдореВрд░реНрдд рдХреЗ рдХрдИ рд╕реНрддрд░ рдЖрджрд┐) рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛ред ) .. рдЙрд╕ рд╕рдордп рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдореЗрд░реА рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЬрд░ рдХреЗ рджреГрд╢реНрдп рдШрдЯрдХреЛрдВ рдФрд░ рджреГрд╢реНрдп рдкрд░реНрдпрд╛рд╡рд░рдг рджреНрд╡рд╛рд░рд╛ рдкреЗрд╢ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рдереА, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдПрдХ рд╣реА рдХреЛрдб рдХрд╛ рдЯрди: рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓рдЧрднрдЧ рдПрдХ рд╣реА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╕рдорд░реВрдк рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рддреАрди рддрд╛рд▓рд┐рдХрд╛рдУрдВ, рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди рд╕рдорд╛рди рд░реВрдк, рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рддреАрди рд╕рдорд╛рди рд░реВрдк, рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рддреАрди рд╕рдорд╛рди рд░реВрдк, рдФрд░ рд╣реЗрдбрд┐рдВрдЧ рдХреЗ рд╢реАрд░реНрд╖ рд╕реЗ рд╕рдм рдХреБрдЫ "рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреИрд╕реЗ рдирд╣реАрдВ рдХрд░реЗрдВ"ред
рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рд╕реВрдЪрдирд╛ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╣реА рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рд╕рд╛рд╣рд┐рддреНрдп рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдЕрдзреНрдпрдпрди рд╕рд╣рд┐рдд, рдФрд░ рд╕рд╛рде рд╣реА рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕реНрд╡рдпрдВ рдФрд░ рдореЗрд░реЗ рдЖрд╡реЗрджрди рджреЛрдиреЛрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдкреБрди: рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдФрд░ рдЕрдЧрд░ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рджреВрд╕рд░реЗ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рджреЛ рд╕рдбрд╝рдХреЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдЬрд╛ рд░рд╣реА рдереАрдВ: рдпрд╛ рддреЛ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рдЬрд╛рдПрдВред рдиреЗрдЯ, рд╕реА # рдФрд░ рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ, рдпрд╛ рдкрд░рд┐рдЪрд┐рдд рд▓рд╛рдЬрд░ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреБрдХреНрдд рдУрдЖрд░рдПрдо рдвреВрдВрдвреЗрдВред рдПрдХ рддреАрд╕рд░рд╛, рдкрд╣рд▓рд╛, рдЕрдЧреЛрдЪрд░ рд╕рд╛рдЗрдХрд┐рд▓ рдирд┐рд╢рд╛рди рднреА рдерд╛ - рдУрдЖрд░рдПрдо рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╕реНрд╡рдпрдВ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдм рдмрд╛рдд рдирд╣реАрдВ рд╣реИред
рдврд╛рдВрдЪреЗ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдкрд░ рдмрд╣реБрдд рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрднреА рднреА рддреИрдпрд╛рд░ рд╣реИрдВ (рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рд╡рд┐рдХрд╛рд╕ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рдзрд┐ рдореЗрдВ) рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░рд╛рд╢рд┐ред рдпрд╣ рд╕рдм, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЕрдВрдЧреНрд░реЗрдЬреА-рднрд╛рд╖реА рд╣реИ, рдФрд░ рдЕрдиреБрднрд╡ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐, рдХреЛрдб, рдЖрд░реЗрдЦ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╡рд╛рдХреНрдпрд╛рдВрд╢реЛрдВ рдХреА рдкреНрд░рдЪреБрд░рддрд╛ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдХрдИ рд░реВрд╕реА-рднрд╛рд╖реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЕрднреА рднреА рдЕрдВрдЧреНрд░реЗрдЬреА рднрд╛рд╖рд╛ рдХреЗ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЦрд░рд╛рдм рд░реВрдк рд╕реЗ рдЙрдиреНрдореБрдЦ рд╣реИрдВред рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ рдФрд░ рд╣рд░ рдХрд┐рд╕реА рдХреА рдЗрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд╣ рдЕрдВрдЧреНрд░реЗрдЬреА рддрдХрдиреАрдХреА рдкрд╛рда рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░ рд╕рдХреЗ, рдмрд┐рдирд╛ рдорди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЙрд╕реЗ рд░реВрд╕реА рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдкрд╛рда рдХрд╛ рдмрд╛рд░-рдмрд╛рд░ рдкреНрд░реВрдлрд░реАрдбрд┐рдВрдЧ рдЖрдкрдХреЛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдореБрд▓рд╛рдХрд╛рдд рдХреА рдереА рддреЛ рдореБрдЭреЗ рдХреНрдпрд╛ рдпрд╛рдж рдЖрдпрд╛ рдерд╛, рдореИрдВ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рдпрд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд╣реАрдВ рд╕рдордЭ рдкрд╛рдпрд╛ред рдпрд╣реА рд╣реИ, рдпрд╣ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдЕрдзреНрдпрдпрди рдХреЗ рддрд╣рдд рд░реВрдкрд░реЗрдЦрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕реАрдЦрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИред
2. рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ, рд▓реЗрдЦрдХ рдЬрд╛рдирдмреВрдЭрдХрд░ рдпрд╛ рдХреЛрдб рдХреЗ рдХреБрдЫ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдирд╣реАрдВ рдЫреЛрдбрд╝рддрд╛ рд╣реИ, рд╢рд╛рдпрдж рдЙрдирдХреА рд░рд╛рдп рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЗрд╕рдХреЗ рд▓реЗрдЦрди рдХреА рд╕реАрдорд╛ рдХреЗ рдХрд╛рд░рдг, рдкреНрд░рд▓реЗрдЦрди рдкреБрд░рд╛рдиреЗ рддрдВрддреНрд░ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдЯрд╛рдП рдЧрдП рдпрд╛ рдЕрдм рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ (рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣рддрд╛ рдХрд┐ рдпрд╣ рд╕реНрд╡рдпрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд╣реИ?)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдм рдореИрдВрдиреЗ рд╕реНрд╡рдпрдВ рд╡рд┐рдХрд╕рд┐рдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛, рддреЛ рдореБрдЭреЗ рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓реАрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рдЙрди рдЬрдЧрд╣реЛрдВ рдкрд░ рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ рди рдХреЗрд╡рд▓ рдкрд╛рда рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА, рдмрд▓реНрдХрд┐ рдЗрд╕реЗ рдкреВрд░рдХ рдпрд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдпрд╣ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдмрдирд╛ рд░рд╣реЗ, рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдереЗред
рдореИрдВ рдкрд╣рд▓реЗ "рд╡реНрд╣реЗрд▓" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреАрдЯрд░ рд╣реЗрдирд░рд┐рдХреНрд╕рди рдХреЗ рдПрдХ рд▓реЗрдЦ рд╕реЗ рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕ рдкрд░ рдкреВрд░рд╛ рдврд╛рдВрдЪрд╛ рдЦрдбрд╝рд╛ рд╣реИ - рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдЯреЗрдореНрдкрд▓реЗрдЯред
рдореВрд▓ рдкрд╛рда рдпрд╣рд╛рдБ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ ред
рдЖрдЧрдВрддреБрдХ рдФрд░ tiOPF рдЯреЗрдореНрдкрд▓реЗрдЯ
рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдкреЗрд╢ рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ tiOPF (TechInsite Object Persistence Framework) рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рдореБрдЦреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рд╣рдо рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдмрд╛рдж рд╕рдорд╕реНрдпрд╛ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЖрдЧрдВрддреБрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдо рдПрдХ рдФрд░ рдЪреБрдиреМрддреА рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗ: рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ред рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рднреА рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХреБрдЫ рд╡рд╕реНрддреБрдУрдВ рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рддрд░реАрдХреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рддрд░реАрдХреЗ рд╕реЗ рдЖрдирд╛ рд╣реИред рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдП рдЧрдП рддрд░реАрдХреЗ рд╡рд╕реНрддреБрдУрдВ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рддрд░реАрдХреЛрдВ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рд╣реА рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдХрдИ рддрд░реАрдХреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╛ рдЖрд╡рд╢реНрдпрдХ рд╕реНрддрд░
рдкрд╛рдардХ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕реНрдХрд▓ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдореЗрдВ рдорд╛рд╕реНрдЯрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдХрд╛рд░реНрдп
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдПрдХ рдкрддрд╛ рдкреБрд╕реНрддрд┐рдХрд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЖрдкрдХреЛ рд▓реЛрдЧреЛрдВ рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдФрд░ рдЙрдирдХреА рд╕рдВрдкрд░реНрдХ рдЬрд╛рдирдХрд╛рд░реА рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рд▓реЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рддрд░реАрдХреЛрдВ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде, рдЖрд╡реЗрджрди рдХреЛ рд▓рдЪреАрд▓реЗ рдврдВрдЧ рд╕реЗ рдЖрдкрдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреЛрдб рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдРрд╕реЗ рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП (рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдПрдХ рдмрд╛рд░ рдлреЛрди рдирдВрдмрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рддреБрд░рдВрдд рдИрдореЗрд▓ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА)ред рд╣рдореЗрдВ рдкрддреЗ рдХреА рджреЛ рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рд╡рд╛рд╕реНрддрд╡рд┐рдХ, рдЬреИрд╕реЗ рдШрд░ рдХрд╛ рдкрддрд╛, рдбрд╛рдХ, рдХрд╛рдо рдФрд░ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ: рд▓реИрдВрдбрд▓рд╛рдЗрди рдлреЛрди, рдлреИрдХреНрд╕, рдореЛрдмрд╛рдЗрд▓, рдИрдореЗрд▓, рд╡реЗрдмрд╕рд╛рдЗрдЯред
рдкреНрд░рд╕реНрддреБрддрд┐ рд╕реНрддрд░ рдкрд░, рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ / рдЖрдЙрдЯрд▓реБрдХ рдХреА рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рдд, рдЯреНрд░реАрд╡реНрдпреВ рдФрд░ рд▓рд┐рд╕реНрдЯ рд╡реНрдпреВ рдЬреИрд╕реЗ рдорд╛рдирдХ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреЗрдЬрд╝реА рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рднрд╛рд░реА рдЧреНрд░рд╛рд╣рдХ-рд╕рд░реНрд╡рд░ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреА рдЫрд╛рдк рдирд╣реАрдВ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред
рдПрдХ рдЖрд╡реЗрджрди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ:

рдкреЗрдбрд╝ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдореЗрдВ, рдЖрдк рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдпрд╛ рдХрдВрдкрдиреА рдХреЗ рд╕рдВрдкрд░реНрдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ / рд╣рдЯрд╛рдиреЗ рдФрд░ рд╕рдВрдкрд░реНрдХ рдбреЗрдЯрд╛ рд╕реВрдЪреА рдкрд░ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ, рд╣рдЯрд╛рдиреЗ рдпрд╛ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╡рд╛рдж рдЦреЛрд▓реЗрдВред
рдбреЗрдЯрд╛ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд░реВрдкреЛрдВ рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ
рд╣рдо рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдПрдХ рд╕рд░рд▓ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ - рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА, рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рджреЛ рдЧреБрдг рд╣реИрдВ - рдирд╛рдо (рдирд╛рдо) рдФрд░ рдкрддрд╛ (EmailAdrs)ред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реВрдЪреА рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реЗ рднрд░рд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдмреЗрд╢рдХ, рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдЬрд┐рдЯрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдПрдХ рдирдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗрдХреНрд╢рди рдХреЗ рджреЛ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ: TPersonList (TobjectList рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рдФрд░ рдХреЙрдиреНрдЯреНрд░рд╛рд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкреНрд▓рдЧ-рдЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ) рдФрд░ TPerson (TObject рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛):
TPersonList = class(TObjectList) public constructor Create; end; TPerson = class(TObject) private FEMailAdrs: string; FName: string; public property Name: string read FName write FName; property EMailAdrs: string read FEMailAdrs write FEMailAdrs; end;
рдЯреАрдкрд░реНрд╕рдирд▓рд┐рд╕реНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ, рд╣рдо рддреАрди рдЯреАрдкрд░реНрд╕рди рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
constructor TPersonList.Create; var lData: TPerson; begin inherited; lData := TPerson.Create; lData.Name := 'Malcolm Groves'; lData.EMailAdrs := 'malcolm@dontspamme.com';
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рд╕реВрдЪреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдкрд░ рджреЛ рдСрдкрд░реЗрд╢рди рдХрд░реЗрдВрдЧреЗред рдСрдкрд░реЗрд╢рди рд╕рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВ: рдЯреАрдкрд░реНрд╕рди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдирд╛рдо рдФрд░ EmailAdrs рдЧреБрдгреЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рд╢реЛрдореЗрд╕реЗрдЬ рдХреЙрд▓ред рдлрд╝реЙрд░реНрдо рдореЗрдВ рджреЛ рдмрдЯрди рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдирд╛рдо рджреЗрдВ:

рдЕрдкрдиреЗ рдлреЙрд░реНрдо рдХреЗ рдкрд╕рдВрджреАрджрд╛ рджрд╛рдпрд░реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдПрдХ рд╕рдВрдкрддреНрддрд┐ (рдпрд╛ рд╕рд┐рд░реНрдл рдПрдХ рдлрд╝реАрд▓реНрдб) рдЯрд╛рдЗрдкрд░реНрд╕ рдХреА рд╕реВрдЪреА рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред
FPersonList := TPersonList.Create;
рдлреЙрд░реНрдо рдХреЗ рдСрдирдХреНрд▓рд╛рд╕ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдареАрдХ рд╕реЗ рдореБрдХреНрдд рдореЗрдореЛрд░реА рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдирд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
FPersonList.Free.
рдЪрд░рдг 1. рд╣рд╛рд░реНрдбрдХреЛрдб Iteration
рдЯреАрдкрд░реНрд╕рди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╕реЗ рдирд╛рдо рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдмрдЯрди рдХреЗ рдСрдирдХреНрд▓рд┐рдХ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin for i := 0 to FPersonList.Count - 1 do ShowMessage(TPerson(FPersonList.Items[i]).Name); end;
рджреВрд╕рд░реЗ рдмрдЯрди рдХреЗ рд▓рд┐рдП, рд╣реИрдВрдбрд▓рд░ рдХреЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:
procedure TForm1.Button2Click(Sender: TObject); var i: integer; begin for i := 0 to FPersonList.Count - 1 do ShowMessage(TPerson(FPersonList.Items[i]).EMailAdrs); end;
рдЗрд╕ рдХреЛрдб рдХреЗ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рд╡рд░рдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:
- рджреЛ рддрд░реАрдХреЗ рдЬреЛ рд▓рдЧрднрдЧ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╕рднреА рдЕрдВрддрд░ рдХреЗрд╡рд▓ рдЙрд╕ рд╡рд╕реНрддреБ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо рдкрд░ рд╣реИ рдЬреЛ рд╡реЗ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ;
- рдкреБрдирд░рд╛рд╡реГрддрд┐ рдердХрд╛рдК рд╣реЛрдЧреА, рдЦрд╛рд╕рдХрд░ рдЬрдм рдЖрдкрдХреЛ рдХреЛрдб рдореЗрдВ рд╕реМ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдПрдХ рд╕рдорд╛рди рд▓реВрдк рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
- рдЯреАрдкрд░реНрд╕рди рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдард┐рди рдХрд▓рд╛рдХрд╛рд░ рдЕрд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рддрд┐рдпреЛрдВ рд╕реЗ рднрд░рд╛ рд╣реИред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдПрдХ рдкрддреЗ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдмрд┐рдирд╛ рд╕реВрдЪреА рдореЗрдВ TAnimal рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ? рдЗрд╕ рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЛ рд░реЛрдХрдиреЗ рдФрд░ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рддрдВрддреНрд░ рдирд╣реАрдВ рд╣реИред
рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдПрдХ рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдХрд░ рдХреЛрдб рдХреЛ рдХреИрд╕реЗ рдмреЗрд╣рддрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рдП: рд╣рдо рдкреЗрд░реЗрдВрдЯ рдХреНрд▓рд╛рд╕ рдХреЛ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХреЛрдб рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
рдЪрд░рдг 2. рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХреЛ рд╕рд╛рд░
рдЗрд╕рд▓рд┐рдП, рд╣рдо рдкреБрдирд░рд╛рд╡реГрддрд┐ рддрд░реНрдХ рдХреЛ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдореЗрдВ рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╕реВрдЪреА рдкреБрдирд░рд╛рд╡реГрддрд┐ рд╕реНрд╡рдпрдВ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:
for i := 0 to FList.Count - 1 do
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ
Iterator рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред
рдЧреИрдВрдЧ-рдСрдл-рдлреЛрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХреА рдХрд┐рддрд╛рдм рд╕реЗ , рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ Iterator рдмрд╛рд╣рд░реА рдФрд░ рдЖрдВрддрд░рд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдмрд╛рд╣рд░реА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдХреНрд▓рд╛рдЗрдВрдЯ рдиреЗрдХреНрд╕реНрдЯ рдореЗрдердб (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, TCollection рддрддреНрд╡реЛрдВ рдХреА рдЧрдгрдирд╛ рдХреЛ рдлрд░реНрд╕реНрдЯ, рдиреЗрдХреНрд╕реНрдЯ, рд▓рд╛рд╕реНрдЯ рдореЗрдердбреНрд╕) рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдХреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдо рдпрд╣рд╛рдВ рдЖрдВрддрд░рд┐рдХ рд╕реВрдЪрдирд╛ рд╡рд┐рдЬреНрдЮрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреА рдорджрдж рд╕реЗ рдЯреНрд░реА рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЬреЛ рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рд╣реИред рд╣рдо рдЕрдкрдиреА рд╕реВрдЪреА рд╡рд░реНрдЧ рдореЗрдВ Iterate рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓рдмреИрдХ рд╡рд┐рдзрд┐ рдкрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рд╕реВрдЪреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕реНрдХрд▓ рдореЗрдВ рдХреЙрд▓рдмреИрдХ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, TDoSomethingToAPerson рд╣реЛрдЧрд╛ред
рддреЛ, рд╣рдо рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ TDoSomethingToAPerson, рдЬреЛ рдХрд┐ рдЯрд╛рдЗрдкрд░реНрд╕рди рдХреЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд▓реЗрддрд╛ рд╣реИред рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рдзрд┐ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН рдХреЙрд▓рдмреИрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣, рд╣рдо рджреЛ рддрд░реАрдХреЗ рдмрдирд╛рдПрдВрдЧреЗ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдирд╛рдо рдЧреБрдг рджрд┐рдЦрд╛рдПрдЧрд╛, рдФрд░ рджреВрд╕рд░рд╛ - рдИрдореЗрд▓ рдПрдбреНрд░реИрд╕ рд╕рдВрдкрддреНрддрд┐, рдФрд░ рд╡реЗ рд╕реНрд╡рдпрдВ рд╕рд╛рдорд╛рдиреНрдп рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рдЕрдВрдд рдореЗрдВ, рдкреНрд░рдХрд╛рд░ рдШреЛрд╖рдгрд╛ рдЕрдиреБрднрд╛рдЧ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
TPerson = class(TObject) private FEMailAdrs: string; FName: string; public property Name: string read FName write FName; property EMailAdrs: string read FEMailAdrs write FEMailAdrs; end; TDoSomethingToAPerson = procedure(const pData: TPerson) of object; TPersonList = class(TObjectList) public constructor Create; procedure DoSomething(pMethod: TDoSomethingToAPerson); end; DoSomething: procedure TPersonList.DoSomething(pMethod: TDoSomethingToAPerson); var i: integer; begin for i := 0 to Count - 1 do pMethod(TPerson(Items[i])); end;
рдЕрдм, рд╕реВрдЪреА рдорджреЛрдВ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рджреЛ рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЙрди рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХрд┐ TDoSomethingToAPerson рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░рд╛, рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рд╕рд╛рде DoSomething рдХреЙрд▓ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдПред рдкреНрд░рдкрддреНрд░ рд╡рд┐рд╡рд░рдг рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рджреЛ рдШреЛрд╖рдгрд╛рдПрдБ рдЬреЛрдбрд╝реЗрдВ:
private FPersonList: TPersonList; procedure DoShowName(const pData: TPerson); procedure DoShowEmail(const pData: TPerson);
рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рд╣рдо рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ:
procedure TForm1.DoShowName(const pData: TPerson); begin ShowMessage(pData.Name); end; procedure TForm1.DoShowEmail(const pData: TPerson); begin ShowMessage(pData.EMailAdrs); end;
рдмрдЯрди рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдмрджрд▓рд╛ рдЧрдпрд╛ рд╣реИ:
procedure TForm1.Button1Click(Sender: TObject); begin FPersonList.DoSomething(@DoShowName); end; procedure TForm1.Button2Click(Sender: TObject); begin FPersonList.DoSomething(@DoShowEmail); end;
рдкрд╣рд▓реЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред рдЕрдм рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ рддреАрди рд╕реНрддрд░ рдХреЗ рд╕рд╛рд░ рд╣реИрдВред рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдПрдХ рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИред рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ (рдЕрдм рддрдХ ShowMessage рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЗрд╡рд▓ рдЕрдВрддрд╣реАрди рд╕рдВрджреЗрд╢ рдЖрдЙрдЯрдкреБрдЯ) рдХреЛ рдЕрд▓рдЧ рд╕реЗ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рд╕реНрддреБрддрд┐ (рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕) рд╕реНрддрд░ рдкрд░, рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ ShowMessage рдХреЛ рдХреЙрд▓ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдЯреАрдкреАрдЖрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреНрд╡реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЯреАрдкрд░реНрд╕рди рд╕реЗ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
procedure TForm1.SavePerson(const pData: TPerson); var lQuery: TQuery; begin lQuery := TQuery.Create(nil); try lQuery.SQL.Text := 'insert into people values (:Name, :EMailAdrs)'; lQuery.ParamByName('Name').AsString := pData.Name; lQuery.ParamByName('EMailAdrs').AsString := pData.EMailAdrs; lQuery.Datababase := gAppDatabase; lQuery.ExecSQL; finally lQuery.Free; end; end;
рд╡реИрд╕реЗ, рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдПрдХ рдирдИ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реЛрдз рдореЗрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдХрдиреЗрдХреНрд╢рди рдХреБрдЫ рд╡реИрд╢реНрд╡рд┐рдХ gAppDatabase рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╣рд╛рдБ рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛ рдФрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ? рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ TQuery рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ, рдХрдиреЗрдХреНрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ, рдХреНрд╡реЗрд░реА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдФрд░ рдореЗрдореЛрд░реА рдХреЛ рдЦрд╛рд▓реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛, рдЗрдЯреНрд░реЗрдЯрд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдкрд░ рдкреАрдбрд╝рд╛ рджреА рдЬрд╛рддреА рд╣реИред рдЗрд╕ рдХреЛрдб рдХреЛ рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдЬреЛ SQL рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реНрдХ рдХреЛ рдХреВрдЯрдмрджреНрдз рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдПред
рдЪрд░рдг 3. рдПрдХ рдХреЙрд▓рдмреИрдХ рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░рдирд╛
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рдЗрдЯреНрд░реЗрдЯрд░ рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рд░рд╛рдЬреНрдп рд░рдЦрд░рдЦрд╛рд╡ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рдПрдЧреАред рд╣рдо рдПрдХ рдПрдХрд▓ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдореВрд░реНрдд рдЖрдЧрдВрддреБрдХ рд╡рд░реНрдЧ TPersonVisitor рдмрдирд╛рдпреЗрдВрдЧреЗ рдФрд░ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рд╕рд╛рд░ рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
TPersonVisitor = class(TObject) public procedure Execute(pPerson: TPerson); virtual; abstract; end;
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ TPersonList рд╡рд░реНрдЧ рдореЗрдВ Iterate рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ:
TPersonList = class(TObjectList) public constructor Create; procedure Iterate(pVisitor: TPersonVisitor); end;
рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧрд╛:
procedure TPersonList.Iterate(pVisitor: TPersonVisitor); var i: integer; begin for i := 0 to Count - 1 do pVisitor.Execute(TPerson(Items[i])); end;
TPersonVisitor рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ Iterate рдкрджреНрдзрддрд┐ рд╕реЗ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рд╕реВрдЪреА рдЖрдЗрдЯрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ Visitor (рдЗрд╕рдХреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╡рд┐рдзрд┐) рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ TPerson рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдЗрдП рдЖрдЧрдВрддреБрдХ - TShowNameVisitor рдФрд░ TShowEmailVistor рдХреЗ рджреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдирд╛рдПрдВ, рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдп рдХрд░реЗрдВрдЧреЗред рдореЙрдбреНрдпреВрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЕрдиреБрднрд╛рдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рднрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
TShowNameVisitor = class(TPersonVisitor) public procedure Execute(pPerson: TPerson); override; end; TShowEmailVisitor = class(TPersonVisitor) public procedure Execute(pPerson: TPerson); override; end;
рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдЙрди рдкрд░ рдирд┐рд╖реНрдкрд╛рджрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрднреА рднреА рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рд╣реЛрдЧреА - ShowMessage (pPerson.Name) рдФрд░ ShowMessage (pPerson.EMailAdrs)ред
рдФрд░ рдмрдЯрди рдХреНрд▓рд┐рдХ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдмрджрд▓реЗрдВ:
procedure TForm1.Button1Click(Sender: TObject); var lVis: TPersonVisitor; begin lVis := TShowNameVisitor.Create; try FPersonList.Iterate(lVis); finally lVis.Free; end; end; procedure TForm1.Button2Click(Sender: TObject); var lVis: TPersonVisitor; begin lVis := TShowEmailVisitor.Create; try FPersonList.Iterate(lVis); finally lVis.Free; end; end;
рдЕрдм, рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ред рдЗрдЯрд░реЗрдЯрд░ рддрд░реНрдХ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ; рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рджреМрд░рд╛рди рдХрд┐рдП рдЧрдП рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рд░рд╛рдЬреНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдб рдХрд╛ рдЖрдХрд╛рд░ рдПрдХ рдкрдВрдХреНрддрд┐ (FPersonList.DoSomething (@DoShowName) рд╕реЗ рдмрдврд╝рд╛ рд╣реИ; рдкреНрд░рддреНрдпреЗрдХ рдмрдЯрди рд╣реИрдВрдбрд▓рд░ рдХреЗ рд▓рд┐рдП рдиреМ рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВред рдЕрдм рдпрд╣ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛ - рдпрд╣ рдЖрдЧрдВрддреБрдХреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрдХ рд╣реИ, рдЬреЛ рдЕрдкрдиреА рдкреНрд░рддрд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдореБрдХреНрдд рдХрд░рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рджреМрд░рд╛рди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдЧрдВрддреБрдХ рдкреНрд░рдмрдВрдзрдХ рдЕрдкрдиреА рд╕реВрдЪреА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ рдФрд░ рд╣рд░ рдХрджрдо рдкрд░ рдЗрд╕реЗ рдкрд╛рд░ рдХрд░реЗрдЧрд╛, рдЖрдк ред Olnyaya рдХреЗрд╡рд▓ рдЪрдпрдирд┐рдд рд╕рдВрдЪрд╛рд▓рди рдЕрдЧрд▓рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд╛рдн рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдВрдЧреЗ, рд╣рдо рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕рд░рд▓ рдСрдкрд░реЗрд╢рди рдмрдЪрдд рдбреЗрдЯрд╛ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдСрдкрд░реЗрдЯрд░реЛрдВ рдПрд╕рдХреНрдпреВрдПрд▓ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдПрдХ рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧрдВрддреБрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛: рдмрдирд╛рдПрдВ, рд╣рдЯрд╛рдиреЗ рдФрд░ рдЕрдкрдбреЗрдЯред
рдЪрд░рдг 4. рдЖрдЧрдВрддреБрдХ рдХрд╛ рдФрд░ рдЕрдзрд┐рдХ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди
рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдХреЗ рдХрд╛рдо рдХреЗ рддрд░реНрдХ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдпрд╣ рдЙрд╕ рдкрд░ рд╡рд╛рдкрд╕ рди рдЖрдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рддреАрди рдХрджрдо рдЙрдард╛рдиреЗ рд╣реЛрдВрдЧреЗ: рдмреЗрд╕ рдХреНрд▓рд╛рд╕реЗрд╕ TVisited рдФрд░ TVisitor, рдлрд┐рд░ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдмрд┐рдЬрд╝рдиреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдмрд┐рдЬрд╝рдиреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдХрд▓реЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдмрдирд╛рдПрдВ, рдлрд┐рд░ рд╣рдорд╛рд░реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд▓рд╛рд╕реЗрд╕ TPerson рдФрд░ TPersonList (рдпрд╛ TP People) рдХреЛ рдереЛрдбрд╝рд╛ рдПрдбрдЬрд╕реНрдЯ рдХрд░реЗрдВ, рддрд╛рдХрд┐ рд╡реЗ рдмрдирд╛рдП рдЧрдП рдмреЗрд╕ рдХреЗ рд╡рд╛рд░рд┐рд╕ рдмрдиреЗрдВред рдХрдХреНрд╖рд╛рдПрдВред рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╡рд░реНрдЧреЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдРрд╕реЗ рдЖрд░реЗрдЦ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧреА:

TVisitor рдСрдмреНрдЬреЗрдХреНрдЯ рджреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ: AcceptVisitor рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ TVisited рдкреНрд░рдХрд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред TVisited рдСрдмреНрдЬреЗрдХреНрдЯ, рдмрджрд▓реЗ рдореЗрдВ, рдЯрд╛рдЗрдк TVisitor рдХреЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде Iterate рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, TVisited.Iterate рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд TVisitor рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рднреЗрдЬ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЙрджрд╛рд╣рд░рдг рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ, рддреЛ Execute рд╡рд┐рдзрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рд╣рдо рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддрдм AcceptVisitor рдлрд╝рдВрдХреНрд╢рди рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдЬреЛ рдХреЗрд╡рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯреЛрдбреЛрдЧ рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг, рдЯреАрдкрд░реНрд╕рди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдФрд░ рдЯрд╛рдЗрдк рдмреЗрдореЗрд▓ рдХреЗ рдХрд╛рд░рдг рддреНрд░реБрдЯрд┐рдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред TVisited Class, TPersistent Class рдХрд╛ рд╡рдВрд╢рдЬ рд╣реИ, рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд╣рдореЗрдВ RTTI рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рднрд╛рдЧ рдЕрдм рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:
TVisited = class; TVisitor = class(TObject) protected function AcceptVisitor(pVisited: TVisited): boolean; virtual; abstract; public procedure Execute(pVisited: TVisited); virtual; abstract; end; TVisited = class(TPersistent) public procedure Iterate(pVisitor: TVisitor); virtual; end;
TVisitor рд╕рд╛рд░ рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЗ рд╡рд╛рд░рд┐рд╕ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ TVisited рдХреЗ рд▓рд┐рдП Iterate рдкрджреНрдзрддрд┐ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
procedure TVisited.Iterate(pVisitor: TVisitor); begin pVisitor.Execute(self); end;
рдЗрд╕реА рд╕рдордп, рд╡рд╛рд░рд┐рд╕ рдореЗрдВ рдЗрд╕рдХреЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХреЛ рдЖрднрд╛рд╕реА рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЪрд░рдг 5. рдПрдХ рд╕рд╛рдЭрд╛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╡рд╕реНрддреБ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдПрдВ
рд╣рдорд╛рд░реЗ рдврд╛рдВрдЪреЗ рдХреЛ рджреЛ рдФрд░ рдЖрдзрд╛рд░ рд╡рд░реНрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдПрдХ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╡рд╕реНрддреБ рдФрд░ рдРрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЙрдиреНрд╣реЗрдВ TtiObject рдФрд░ TtiObjectList рдХрд╣реЗрдВред рдЙрдирдореЗрдВ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕:
TtiObject = class(TVisited) public constructor Create; virtual; end;
рдмрд╛рдж рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдо рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рд╡рд╛рд░рд┐рд╕ рдореЗрдВ рдЗрд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдПрдХ рдЖрднрд╛рд╕реА рдирд┐рд░реНрдорд╛рддрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреВрд░реНрд╡рдЬреЛрдВ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рддрд░реАрдХреЛрдВ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП TVisited рд╕реЗ TtiObjectList рд╡рд░реНрдЧ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ (рдЗрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЗрд╕ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рдЕрдиреНрдп рдХрд╛рд░рдг рднреА рд╣реИрдВ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рднреА рдЕрдореВрд░реНрдд рд╡рд░реНрдЧреЛрдВ рдХреЗ рдмрдЬрд╛рдп
рдЗрдВрдЯрд░рдлреЗрд╕ (рдЗрдВрдЯрд░рдлреЗрд╕) рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
TtiObjectList рд╡рд░реНрдЧ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рднрд╛рдЧ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧрд╛:
TtiObjectList = class(TtiObject) private FList: TObjectList; public constructor Create; override; destructor Destroy; override; procedure Clear; procedure Iterate(pVisitor: TVisitor); override; procedure Add(pData: TObject); end;
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрдВрдЯреЗрдирд░ рд╕реНрд╡рдпрдВ рд╕рдВрд░рдХреНрд╖рд┐рдд рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ рдФрд░ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдХрдХреНрд╖рд╛ рдХрд╛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдУрд╡рд░рд░реЗрдЯреЗрдб Iterate рдкрджреНрдзрддрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдпрджрд┐ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЛ рдмрд╕ pVisitor.Execute (рд╕реНрд╡) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реВрдЪреА рдХреЛ рдорд╛рдирдиреЗ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ:
procedure TtiObjectList.Iterate(pVisitor: TVisitor); var i: integer; begin inherited Iterate(pVisitor); for i := 0 to FList.Count - 1 do (FList.Items[i] as TVisited).Iterate(pVisitor); end;
рдЕрдиреНрдп рд╡рд░реНрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗ рдмрд┐рдирд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рджрд┐рдП рдЧрдП рднрд╛рд╡ рд╣реИрдВ:
Create: FList := TObjectList.Create; Destroy: FList.Free; Clear: if Assigned(FList) then FList.Clear; Add: if Assigned(FList) then FList.Add(pData);
рдпрд╣ рдкреВрд░реА рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЗ рджреЛ рдореВрд▓ рд╡рд░реНрдЧ рд╣реИрдВ: TtiObject рдФрд░ TtiObjectListред рджреЛрдиреЛрдВ рдХреЗ рдкрд╛рд╕ рдПрдХ рдЗрд░реЗрдЯреЗрдЯ рд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП TVisited рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдХрд░реНрддрд╛ TVisitor рд╡рд░реНрдЧ рдХреА Execute рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИред рдпрд╣ рдХреЙрд▓ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рд╡рд░реНрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИред рдПрдХ рдХрдВрдЯреЗрдирд░ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП, рд╕реВрдЪреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЕрдкрдиреА Iterate рд╡рд┐рдзрд┐ рднреА рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ рдЯрд╛рдЗрдк рдЯреАрд╡реАрд╕рд┐рдЯрд░ рдХреЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрд╣ рдЧрд╛рд░рдВрдЯреА рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдЬрд╝рд┐рдЯрд░ рд╕реВрдЪреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░реЗрдЧрд╛, рд╕рд╛рде рд╣реА рд╕реВрдЪреА рдХреЛ рдХрдВрдЯреЗрдирд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рднреАред
рдЪрд░рдг 6. рдПрдХ рдЖрдЧрдВрддреБрдХ рдкреНрд░рдмрдВрдзрдХ рдмрдирд╛рдирд╛
рдЗрд╕рд▓рд┐рдП, рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдЬрд┐рд╕реЗ рд╣рдо рдЦреБрдж рддреАрд╕рд░реЗ рдЪрд░рдг рдкрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рд╣рдо рд╣рд░ рдмрд╛рд░ рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдХреА рдкреНрд░рддрд┐рдпрд╛рдБ рдмрдирд╛рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдирд╖реНрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛ред рдЗрд╕реЗ рджреЛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдЪрд╛рд╣рд┐рдП: рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдХреА рд╕реВрдЪреА (рдЬреЛ рдХрд┐ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВ) рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЙрдкрдпреБрдХреНрдд рдХрдорд╛рдВрдб рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдЪрд▓рд╛рдПрдВред
рдкреНрд░рдмрдВрдзрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рддреАрди рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкреВрд░рдХ рдХрд░реЗрдВрдЧреЗ: TVisClassRef, TVisMapping рдФрд░ TtiVisitorManagerред
TVisClassRef = class of TVisitor;
TVisClassRef рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рд╣реИ рдФрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ - TVisitor рдХрд╛ рд╡рдВрд╢рдЬред рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рдЬрдм рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдЖрдзрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрди рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
procedure Execute(const pData: TVisited; const pVisClass: TVisClassRef),
рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ рд╡рд┐рдзрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП lVisitor: = pVisClass.Create рдЬреИрд╕реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИ, рдкрд╣рд▓реЗ рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗ рдмрд┐рдирд╛ред рдпрд╣реА рд╣реИ, рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ - рдЯреАрд╡реАрд╕рд┐рдЯрд░ рдХрд╛ рд╡рдВрд╢рдЬ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рдирд┐рд╖реНрдкрд╛рджрди рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХрд╛ рдирд╛рдо рдЧреБрдЬрд░рддрд╛ рд╣реИред
рджреВрд╕рд░реА рд╢реНрд░реЗрдгреА, TVisMapping, рджреЛ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ: рдкреНрд░рдХрд╛рд░ TVisClassRef рдФрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░реЙрдкрд░реНрдЯреА рдХрдорд╛рдВрдб рдХрд╛ рд╕рдВрджрд░реНрднред рдЙрдирдХреЗ рдирд╛рдо (рдПрдХ рдХрдорд╛рдВрдб, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рд╕рд╣реЗрдЬреЗрдВ") рдФрд░ рд╡рд┐рдЬрд╝рд┐рдЯрд░ рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рд╕рдВрдЪрд╛рд▓рди рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ рдпреЗ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЗрд╕рдХрд╛ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
TVisMapping = class(TObject) private FCommand: string; FVisitorClass: TVisClassRef; public property VisitorClass: TVisClassRef read FVisitorClass write FVisitorClass; property Command: string read FCommand write FCommand; end;
рдФрд░ рдЕрдВрддрд┐рдо рд╡рд░реНрдЧ TtiVisitorManager рд╣реИред рдЬрдм рд╣рдо рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдЧрдВрддреБрдХ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ TVisMapping рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдкреНрд░рдмрдВрдзрдХ рд╕реВрдЪреА рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░рдмрдВрдзрдХ рдореЗрдВ, рдЖрдЧрдВрддреБрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрдорд╛рдВрдб рдорд┐рд▓рд╛рди рдХреЗ рд╕рд╛рде рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╡рд░реНрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ:
TtiVisitorManager = class(TObject) private FList: TObjectList; public constructor Create; destructor Destroy; override; procedure RegisterVisitor(const pCommand: string; pVisitorClass: TVisClassRef); procedure Execute(const pCommand: string; pData: TVisited); end;
рдЗрд╕рдХреА рдкреНрд░рдореБрдЦ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ- RegisterVisitor рдФрд░ Executeред рдкрд╣рд▓реЗ рдПрдХ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдЧрдВрддреБрдХ рд╡рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
initialization gTIOPFManager.VisitorManager.RegisterVisitor('show', TShowNameVisitor); gTIOPFManager.VisitorManager.RegisterVisitor('show', TShowEMailAdrsVisitor);
рд╡рд┐рдзрд┐ рдХрд╛ рдХреЛрдб рд╕реНрд╡рдпрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:
procedure TtiVisitorManager.RegisterVisitor(const pCommand: string; pVisitorClass: TVisClassRef); var lData: TVisMapping; begin lData := TVisMapping.Create; lData.Command := pCommand; lData.VisitorClass := pVisitorClass; FList.Add(lData); end;
рдпрд╣ рдиреЛрдЯрд┐рд╕ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб
рдлрд╝реИрдХреНрдЯрд░реА рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдкрд╛рд╕реНрдХрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рдорд╛рди рд╣реИред
рдПрдХ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдПрдХреНрд╕рдХреНрдпреВрдЯ рд╡рд┐рдзрд┐ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд▓реЗрддреА рд╣реИ: рд╡рд╣ рдХрдорд╛рдВрдб рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдЬрд┐рдЯрд░ рдпрд╛ рд╕рдореВрд╣ рдХреА рдкрд╣рдЪрд╛рди рдХреА рдЬрд╛рдиреА рд╣реИ, рд╕рд╛рде рд╣реА рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд┐рд╕рдХреА Iterate рд╡рд┐рдзрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред Execute рдкрджреНрдзрддрд┐ рдХрд╛ рдкреВрд░рд╛ рдХреЛрдб рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
procedure TtiVisitorManager.Execute(const pCommand: string; pData: TVisited); var i: integer; lVisitor: TVisitor; begin for i := 0 to FList.Count - 1 do if SameText(pCommand, TVisMapping(FList.Items[i]).Command) then begin lVisitor := TVisMapping(FList.Items[i]).VisitorClass.Create; try pData.Iterate(lVisitor); finally lVisitor.Free; end; end; end;
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдЯреАрдо рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рдкрдВрдЬреАрдХреГрдд рджреЛ рдЖрдЧрдВрддреБрдХреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреЛрдб рдХреА рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
gTIOPFManager.VisitorManager.Execute('show', FPeople);
рдЕрдЧрд▓рд╛, рд╣рдо рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдкреВрд░рдХ рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рдЖрдк рд╕рдорд╛рди рдЖрджреЗрд╢реЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХреЗрдВ:
рдЪрд░рдг 7. рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХрдХреНрд╖рд╛рдПрдВ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛
рд╣рдорд╛рд░реЗ рдЯреАрдкрд░реНрд╕рди рдФрд░ рдЯреАрдкреА рд▓реЛрдЧреЛрдВ рдХреА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП TtiObject рдФрд░ TtiObjectList рд╡рд░реНрдЧреЛрдВ рдХреЗ рдкреВрд░реНрд╡рдЬреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд╣рдо рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдЗрдЯреЗрд░рд┐рдХ рд▓реЙрдЬрд┐рдХ рдХреЛ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░ рдкрд╛рдПрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рд╕реНрдкрд░реНрд╢ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдореИрдиреЗрдЬрд░ рдХреЛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдирдП рдХрдВрдЯреЗрдирд░ рд╡рд░реНрдЧ рдХреА рдШреЛрд╖рдгрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
TPeople = class(TtiObjectList);
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЯреАрдкреА рд▓реЛрдЧреЛрдВ рдХреЗ рд╡рд░реНрдЧ рдХреЛ рдХреБрдЫ рднреА рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдо TtiObjectList рд╡рд░реНрдЧ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕рднреА рдкрд░ рдПрдХ рдЯреАрдкреА рд▓реЛрдЧреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рд╣рдо рдХреЗрд╡рд▓ рдЯреАрдкреА рд▓реЛрдЧреЛрдВ рдХреЗ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЖрдЧрдВрддреБрдХреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдЗрд╕ рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред AcceptVisitor рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдирд┐рдореНрди рдЪреЗрдХ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ:
Result := pVisited is TPeople.
рдЯреАрдкрд░реНрд╕рди рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП, рд╣рдо TtiObject рдкреВрд░реНрд╡рдЬ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рджреЛ рдореМрдЬреВрджрд╛ рдЧреБрдгреЛрдВ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рджрд╛рдпрд░реЗ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдореЗрдВ рдЗрди рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде RTTI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрд╣ рдмрд╣реБрдд рдмрд╛рдж рдореЗрдВ рд╣реИ рдЬреЛ рдПрдХ рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдФрд░ рд░рд┐рдХреЙрд░реНрдбреЛрдВ рдХреЛ рдореИрдк рдХрд░рдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХреЛрдб рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рджреЗрдЧрд╛:
TPerson = class(TtiObject) private FEMailAdrs: string; FName: string; published property Name: string read FName write FName; property EMailAdrs: string read FEMailAdrs write FEMailAdrs; end;
рдЪрд░рдг 8. рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рджреГрд╢реНрдп рдмрдирд╛рдПрдВ
рд░рд┐рдорд╛рд░реНрдХ ред рдореВрд▓ рд▓реЗрдЦ рдореЗрдВ, рдЬреАрдпреВрдЖрдИ рдЙрди рдШрдЯрдХреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдерд╛ рдЬреЛ tiOPF рд▓реЗрдЦрдХ рдиреЗ рдЕрдкрдиреЗ рдбреЗрд▓реНрдлреА рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдерд╛ред рдпреЗ рдбреАрдмреА рдЕрд╡реЗрдпрд░ рдШрдЯрдХреЛрдВ рдХреЗ рдПрдирд╛рд▓реЙрдЧ рдереЗ, рдЬреЛ рдорд╛рдирдХ рдирд┐рдпрдВрддреНрд░рдг рдЬреИрд╕реЗ рд▓реЗрдмрд▓, рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб, рдЪреЗрдХрдмреЙрдХреНрд╕, рд╕реВрдЪреА рдЗрддреНрдпрд╛рджрд┐ рдереЗ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рд╕рд╛рде tiObject рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдХреБрдЫ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рд╕реЗ рдЬреБрдбрд╝реЗ рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдкреНрд▓реЗ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рдереЗред рд╕рдордп рдХреЗ рд╕рд╛рде, рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓реЗрдЦрдХ рдиреЗ рдЗрди рджреГрд╢реНрдп рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдФрд░ рдЕрд╡рд╛рдВрдЫрдиреАрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ред
рдмрджрд▓реЗ рдореЗрдВ, рд╡рд╣ рдордзреНрдпрд╕реНрде рдШрдЯрдХ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреГрд╢реНрдп рдШрдЯрдХреЛрдВ рдФрд░ рд╡рд░реНрдЧ рдЧреБрдгреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЦрд╛рдХрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рдкреВрд░реА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рджреВрд╕рд░рд╛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдордзреНрдпрд╕реНрде рдХреЗ рд▓реЗрдЦрдХ рдХрд╛ рд╡рд┐рд╡рд░рдг рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕ рдореИрдиреБрдЕрд▓ рдХреА рдорд╛рддреНрд░рд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдкрдиреЗ рд╕рд░рд▓реАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдпрд╣рд╛рдВ рдЬреАрдпреВрдЖрдИ рдХреЗ рд░реВрдк рдореЗрдВ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реВрдВред"рдХрдорд╛рдВрдб рджрд┐рдЦрд╛рдПрдБ" рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлреЙрд░реНрдо рдкрд░ рдмрдЯрди 1 рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВ, рдФрд░ рдмрдЯрди 2 рдпрд╛ рддреЛ рдЗрд╕реЗ рдЕрдм рд╣реИрдВрдбрд▓рд░ рдХреЗ рдмрд┐рдирд╛ рдЫреЛрдбрд╝ рджреЗрдВ, рдпрд╛ рддреБрд░рдВрдд рдЗрд╕реЗ "рд╕реЗрд╡ рдХрдорд╛рдВрдб" рдирд╛рдо рджреЗрдВред рдкреНрд░рдкрддреНрд░ рдкрд░ рдПрдХ рдЬреНрдЮрд╛рдкрди рдШрдЯрдХ рдлреЗрдВрдХ рджреЗрдВ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рд░рдЦреЗрдВредрдПрдХ рд╡рд┐рдЬрд╝рд┐рдЯрд░ рд╡рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рд╢реЛ рдХрдорд╛рдВрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛:рдЗрдВрдЯрд░рдлрд╝реЗрд╕ - TShowVisitor = class(TVisitor) protected function AcceptVisitor(pVisited: TVisited): boolean; override; public procedure Execute(pVisited: TVisited); override; end;
рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ - function TShowVisitor.AcceptVisitor(pVisited: TVisited): boolean; begin Result := (pVisited is TPerson); end; procedure TShowVisitor.Execute(pVisited: TVisited); begin if not AcceptVisitor(pVisited) then exit; Form1.Memo1.Lines.Add(TPerson(pVisited).Name + ': ' + TPerson(pVisited).EMailAdrs); end;
AcceptVisitor рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХреА рдЬрд╛ рд░рд╣реА рд╡рд╕реНрддреБ TPerson рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдЧрдВрддреБрдХ рдХреЛ рдХреЗрд╡рд▓ рдРрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдкреНрд░рдХрд╛рд░ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдг рд╡рд╛рд▓реА рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИредрдХреЛрдб рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рдХреНрд░рд┐рдпрд╛рдПрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдВрдЧреАред рдирд┐рдЬреА рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдлреЙрд░реНрдо рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рджреЛ рдЧреБрдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ: рдЯрд╛рдЗрдк рдЯреАрдкреАрдЖрдИ рдФрд░ рд╡реАрдкреА рдХреЗ рдкреНрд░рдХрд╛рд░ TtiVisitorManager рдХреЗ рдПрдлрдкреАрдЖрдИред рдлреЙрд░реНрдо рдХреНрд░рд┐рдПрд╢рди рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ, рд╣рдореЗрдВ рдЗрди рдЧреБрдгреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЖрдЧрдВрддреБрдХ рдХреЛ "рд╢реЛ" рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛: FPeople := TPeople.Create; FillPeople; VM := TtiVisitorManager.Create; VM.RegisterVisitor('show',TShowVisitor);
FilPeople рднреА рддреАрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реВрдЪреА рднрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рд╕рд╣рд╛рдпрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдХреЛрдб рдкрд┐рдЫрд▓реА рд╕реВрдЪреА рдХреЗ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рднреА рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдПрдлрдкреАрд╕реА рд▓реЛрдЧреЛрдВ рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдирд┐: рд╢реБрд▓реНрдХ рдФрд░ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ VM.FreeредрдФрд░ рдЕрдм - рдмреИрдо! - рдкрд╣рд▓реЗ рдмрдЯрди рдХрд╛ рд╣реИрдВрдбрд▓рд░: Memo1.Clear; VM.Execute('show',FPeople);
рд╕рд╣рдордд рд╣реВрдБ, рдЗрддрдирд╛ рдЕрдзрд┐рдХ рдордЬрд╝рд╛ред рдФрд░ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╣реИрд╢ рдХреА рдХрд╕рдо рдордд рдЦрд╛рдУред рдореИрдиреБрдЕрд▓ рдХреЗ рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЗрди рдорд▓рдмреЗ рдХреЛ рд░реЗрдХ рдХрд░реЗрдВрдЧреЗредрдЪрд░рдг 9. рдкрд╛рда рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЖрдЧрдВрддреБрдХ рдХрд╛ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдо рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдХреЗ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдкрд╛рда рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рдирддрд╛ рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕реНрдХрд▓ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддреАрди рддрд░реАрдХреЗ рд╣реИрдВ: рдкрд╣рд▓реА рдкрд╛рд╕реНрдХрд▓ (рдЬреИрд╕реЗ рдПрд╕рд┐рдЧреНрдирдлрд╛рдЗрд▓ рдФрд░ рд░реАрдбрд▓реЗрди) рдХреЗ рд╕рдордп рд╕реЗ рдкреБрд░рд╛рдиреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ, рдзрд╛рд░рд╛рдУрдВ (TStringStream рдпрд╛ TFileStream), рдФрд░ TStringList рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВредрдпрджрд┐ рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ рдмрд╣реБрдд рдкреБрд░рд╛рдирд╛ рд╣реИ, рддреЛ рджреВрд╕рд░рд╛ рдФрд░ рддреАрд╕рд░рд╛ OOP рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рдиреЗ рдФрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реЗ рд▓рд╛рдн рдорд┐рд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд▓рд╛рдЗрди-рдмрд╛рдп-рд▓рд╛рдЗрди рдкрдврд╝рдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЕрддрд┐рд░реЗрдХ рд╣реИред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ TStringList рдЪреБрдиреЗрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ рджреЛ рд╕рд░рд▓ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ - LoadFromFile рдФрд░ SaveToFileред рд▓реЗрдХрд┐рди рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде, рдпреЗ рд╡рд┐рдзрд┐рдпрд╛рдВ рдХрд╛рдлреА рдзреАрдореА рд╣реЛ рдЬрд╛рдПрдВрдЧреА, рдЗрд╕рд▓рд┐рдП рдзрд╛рд░рд╛ рдЙрдирдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЗрд╖реНрдЯрддрдо рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧреАредTVisFile рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕: TVisFile = class(TVisitor) protected FList: TStringList; FFileName: TFileName; public constructor Create; virtual; destructor Destroy; override; end;
рдФрд░ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдФрд░ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди: constructor TVisFile.Create; begin inherited Create; FList := TStringList.Create; if FileExists(FFileName) then FList.LoadFromFile(FFileName); end; destructor TVisFile.Destroy; begin FList.SaveToFile(FFileName); FList.Free; inherited; end;
FFileName рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдорд╛рди рдЗрд╕ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рд╡рдВрд╢рдЬреЛрдВ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реЛрдВ рдореЗрдВ рд╕реМрдВрдкрд╛ рдЬрд╛рдПрдЧрд╛ (рдмрд╕ рд╣рд╛рд░реНрдбрдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ рд╣рдо рдпрд╣рд╛рдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВрдЧреЗ, рдореБрдЦреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реИрд▓реА рдХреЗ рд░реВрдк рдореЗрдВ!)ред рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рдЬрд╝рд┐рдЯрд░ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЖрд░реЗрдЦ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЖрд░реЗрдЦ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╣рдо TVisFile рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рджреЛ рд╡рдВрд╢рдЬ рдмрдирд╛рддреЗ рд╣реИрдВ: TVisTXTFile рдФрд░ TVisCSVFileред рдПрдХ * .csv рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рдлрд╝реАрд▓реНрдб рдПрдХ рдкреНрд░рддреАрдХ (рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо) рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рджреВрд╕рд░рд╛ - рдкрд╛рда рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЬрд┐рд╕рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ рдлрд╝реАрд▓реНрдб рдкреНрд░рддрд┐ рдкрдВрдХреНрддрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд▓рдВрдмрд╛рдИ рдХрд╛ рд╣реЛрдЧрд╛ред рдЗрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ: constructor TVisCSVFile.Create; begin FFileName := 'contacts.csv'; inherited Create; end; constructor TVisTXTFile.Create; begin FFileName := 'contacts.txt'; inherited Create; end.
рдЪрд░рдг 10. рдкрд╛рда рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╡рд┐рдЬрд╝рд┐рдЯрд░-рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝реЗрдВ
рдпрд╣рд╛рдВ рд╣рдо рджреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдПрдХ рдкрд╛рда рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝реЗрдЧрд╛, рджреВрд╕рд░рд╛ рдЙрд╕реЗ рд▓рд┐рдЦреЗрдЧрд╛ред рд░реАрдбрд┐рдВрдЧ рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдХреЛ AcceptVisitor рдФрд░ Execute рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред AcceptVisitor рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдХреЛ TP People рд╡рд░реНрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: Result := pVisited is TPeople;
рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ: procedure TVisTXtRead.Execute(pVisited: TVisited); var i: integer; lData: TPerson; begin if not AcceptVisitor(pVisited) then Exit;
рдЖрдЧрдВрддреБрдХ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЙрд╕рдХреЗ рдкрд╛рд╕ рджреА рдЧрдИ рдЯреАрдкреАрдЬрд╝ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕реВрдЪреА рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдЙрд╕рдХреА TStringList рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рд▓рд╛рдЗрди рдкрд░ рдПрдХ рдЯреАрдкрд░реНрд╕рди рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЯреАрдкреАрдЬрд╝реЗрди рдХрдВрдЯреЗрдирд░ рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рдкрд╛рда рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд╛рдо рдФрд░ рдИрдореЗрд▓рдбрд░реНрд╕ рдЧреБрдг рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВредрд░рд┐рдХреЙрд░реНрдб рдЖрдЧрдВрддреБрдХ рдЙрд▓рдЯрд╛ рдСрдкрд░реЗрд╢рди рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ (рдУрд╡рд░рд░рд╛рдЗрдб) рдЖрдВрддрд░рд┐рдХ TStringList рдХреЛ рд╕рд╛рдл рдХрд░рддрд╛ рд╣реИ (рдЕрд░реНрдерд╛рдд, FList .Clear рдСрдкрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реИ; рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рдмрд╛рдж рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИ), AcceptVisitor рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдХрд┐ TPerson рд╡рд░реНрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╡рд┐рдЬрд╝рд┐рдЯрд░ рд░реАрдбрд┐рдВрдЧ рд╡рд┐рдзрд┐ рд╕реЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рд╣реИред рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЛ рдПрдХ рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ - рд╕рднреА рдХрдВрдЯреЗрдирд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╕реНрдХреИрди рдХрд░реЗрдВ, рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧрд▓рд┐рд╕реНрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВред рдпрд╣ рд╕рдм рдХреБрдЫ рдРрд╕рд╛ рдерд╛ рдЕрдЧрд░ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рдлрд╛рдЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рдЕрдВрддрд┐рдо рд▓реЗрдЦрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рдереЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдореИрдк рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП SQL рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдмрдирд╛рдпрд╛, рд╣рдЯрд╛рдпрд╛ рдпрд╛ рд╕рдВрдкрд╛рджрд┐рдд)ред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЖрдЧрдВрддреБрдХ рд╡рд╕реНрддреБ рдкрд░ рдПрдХ рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ,рдЙрд╕реЗ рдЕрдкрдиреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП: Result := pVisited is Tperson;
рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рдЖрдВрддрд░рд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рдпрдо рдХреЗ рд╕рд╛рде рд╕реНрд╡рд░реВрдкрд┐рдд рд╣реЛрддреА рд╣реИ: рдкрд╣рд▓реЗ, рдкрд╛рд╕ рдХреА рдЧрдИ рд╡рд╕реНрддреБ рдХреА рдирд╛рдо рд╕рдВрдкрддреНрддрд┐ рдХреА рд╕рд╛рдордЧреНрд░реА, 20 рдЕрдХреНрд╖рд░реЛрдВ рддрдХ рдХреЗ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рдЧрджреНрджреЗрджрд╛рд░, рдлрд┐рд░ рдЗрдорджрд╛рдж рд╕рдВрдкрддреНрддрд┐ рдХреА рд╕рд╛рдордЧреНрд░реА: procedure TVisTXTSave.Execute(pVisited: TVisited); begin if not AcceptVisitor(pVisited) then exit; FList.Add(PadRight(TPerson(pVisited).Name,20)+PadRight(TPerson(pVisited).EMailAdrs,60)); end;
рдЪрд░рдг 11. CSV рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рд┐рдЬрд╝рд┐рдЯрд░-рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝реЗрдВ
рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧрдВрддреБрдХ TXT рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рдЧрднрдЧ рд╕рднреА рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рдлрд╝рд╛рдЗрд▓ рдХреА рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдЫреЛрдбрд╝рдХрд░: CSV рдореЗрдВ, рд╕рдВрдкрддреНрддрд┐ рдорд╛рди рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЧреБрдгреЛрдВ рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реНрдЯреНрд░рдЯрд╛рдЗрд▓ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдПрдХреНрд╕рдЯреНрд░реИрдХреНрдЯрдбреЗрд▓рд┐рдлрд╝рд╛рдЗрдб рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдмрд╕ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд░рдХреЗ рд▓реЗрдЦрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: procedure TVisCSVRead.Execute(pVisited: TVisited); var i: integer; lData: TPerson; begin if not AcceptVisitor(pVisited) then exit; TPeople(pVisited).Clear; for i := 0 to FList.Count - 1 do begin lData := TPerson.Create; lData.Name := ExtractDelimited(1, FList.Strings[i], [',']); lData.EMailAdrs := ExtractDelimited(2, FList.Strings[i], [',']); TPeople(pVisited).Add(lData); end; end; procedure TVisCSVSave.Execute(pVisited: TVisited); begin if not AcceptVisitor(pVisited) then exit; FList.Add(TPerson(pVisited).Name + ',' + TPerson(pVisited).EMailAdrs); end;
рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рднреА рд╣реИ рд╡рд╣ рдкреНрд░рдмрдВрдзрдХ рдореЗрдВ рдирдП рдЖрдЧрдВрддреБрдХреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдФрд░ рдЖрд╡реЗрджрди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдкреНрд░рдкрддреНрд░ рдирд┐рд░реНрдорд╛рдг рд╣реИрдВрдбрд▓рд░ рдореЗрдВ, рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ: VM.RegisterVisitor('readTXT', TVisTXTRead); VM.RegisterVisitor('saveTXT',TVisTXTSave); VM.RegisterVisitor('readCSV',TVisCSVRead); VM.RegisterVisitor('saveCSV',TVisCSVSave);
рдкреНрд░рдкрддреНрд░ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рдмрдЯрди рдбреЙрдХ рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреБрдХреНрдд рд╣реИрдВрдбрд▓рд░ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ:
procedure TForm1.ReadCSVbtnClick(Sender: TObject); begin VM.Execute('readCSV', FPeople); end; procedure TForm1.ReadTXTbtnClick(Sender: TObject); begin VM.Execute('readTXT', FPeople); end; procedure TForm1.SaveCSVbtnClick(Sender: TObject); begin VM.Execute('saveCSV', FPeople); end; procedure TForm1.SaveTXTbtnClick(Sender: TObject); begin VM.Execute('saveTXT', FPeople); end;
рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рд░реВрдк рдХреЗрд╡рд▓ рдЙрдкрдпреБрдХреНрдд рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рдмрдВрдзрдХ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ: рд╣рдордиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд╛рдо рджрд┐рдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН saveTXT рдФрд░ saveCSVред рдпрджрд┐ рджреЛрдиреЛрдВ рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдПрдХ рд╕реЗрд╡ рдХрдорд╛рдВрдб рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ, рддреЛ рджреЛрдиреЛрдВ рдПрдХ рд╣реА рдХрдорд╛рдВрдб рдкрд░ рд╢реБрд░реВ рд╣реЛрдВрдЧреЗ, рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЬрд╛рдВрдЪреЗрдВредрдЪрд░рдг 12. рдЕрдВрддрд┐рдо рдХреЛрдб рд╕рдлрд╛рдИ
рдХреЛрдб рдХреА рдЕрдзрд┐рдХ рд╕реБрдВрджрд░рддрд╛ рдФрд░ рдкрд╡рд┐рддреНрд░рддрд╛ рдХреЗ рд▓рд┐рдП, рд╕рд╛рде рд╣реА рд╕рд╛рде DBMS рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рдЖрдЧреЗ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рддрд░реНрдХ рдФрд░ рдЙрдирдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░реЗрдВрдЧреЗред рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреА рдирд┐рдореНрди рд╕рдВрд░рдЪрдирд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЬреЛ рд╣рдореЗрдВ рдЙрдирдХреЗ рдмреАрдЪ рдПрдХ рдкрд░рд┐рдкрддреНрд░ рд╕рдВрдмрдВрдз рдХреЗ рдмрд┐рдирд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ (рдЬрдм рдЦреБрдж рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛, рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЕрдиреБрднрд╛рдЧреЛрдВ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рдирд╛):рдореЙрдбреНрдпреВрд▓
| рд╕рдорд╛рд░реЛрд╣
| рдХрдХреНрд╖рд╛рдПрдВ
|
tivisitor.pas
| рдЖрдЧрдВрддреБрдХ рдФрд░ рдкреНрд░рдмрдВрдзрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЖрдзрд╛рд░ рдХрдХреНрд╖рд╛рдПрдВ
| TVisitor TVisited TVisMapping TtiVisitorManager
|
tiobject.pas
| рдмреЗрд╕ рдмрд┐рдЬрдиреЗрд╕ рд▓реЙрдЬрд┐рдХ рдХреНрд▓рд╛рд╕реЗрд╕
| TtiObject TtiObjectList
|
people_BOM.pas
| рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХрдХреНрд╖рд╛рдПрдВ
| рдЯреАрдкрд░рд╕рди рдЯреАрдкреА рд▓реЛрдЧ
|
people_SRV.pas
| рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдареЛрд╕ рд╡рд░реНрдЧ
| TVisFile TVisTXTFile TVisCSVFile TVisCSVSave TVisCSVRead TVisTXTSave TVisTXTRead
|
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдпрд╛ рд╕реВрдЪреА рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреА, рдЬрд┐рдирдХреЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдордиреЗ GoF рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рд╣реИред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рдЬрд┐рдЯрд░ рдореИрдиреЗрдЬрд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдХрд╛рд░рдг рдПрдХ рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рд▓реЗрдЦ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╕рд░рд▓ рдФрд░ рдЪрд┐рддреНрд░рдг рдЙрджрд╛рд╣рд░рдг рд╣рдореЗрдВ рдПрдХ рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдореИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реА рддрд░рд╣ рдХреА рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗредрдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреБрд░рд╛рд▓реЗрдЦ - рдпрд╣рд╛рдБ