рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдХрдкреНрд░рд┐рдп OO рднрд╛рд╖рд╛рдПрдБ рдХрд┐рд╕реА рдЙрдкрдХрд░рдг рдХреЛ рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдпрд╛ рдХреНрд╖реЗрддреНрд░ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред рдФрд░ рдпрд╣ рдЕрдиреБрднрд╡реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд╣рд╛рдВ рд╕реЗ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдиреАрдЪреЗ рдореИрдВ рд╕рдордЭрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреНрдпреЛрдВред
рдЕрд╕реНрд╡реАрдХрд░рдгред рдпрд╣ рд▓реЗрдЦ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдЙрдЪрд┐рдд рддрд░реАрдХрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдкрд╛рдардХ рдХреЛ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдкрд░ рдПрдХ рдирдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИред рдРрд╕реА рдХрдИ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд╣рд╛рдВ рдПрдХреНрд╕реЗрд╕ рдореЙрдбрд┐рдлрд╛рдпрд░ рдмреЗрд╣рддрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреБрдк рд░рд╣рдиреЗ рдХрд╛ рдпрд╣ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдиреНрдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреЛ рдЧреНрд░рд╛рд╣рдХ рдХреА рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд╕рд╛рдзрди рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡рд╕реНрддреБ рдХреА рдЕрдЦрдВрдбрддрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рдЗрд╕ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдЫреБрдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдЗрд╕ рдЫрд┐рдкрд╛рд╡ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рдПрдХ рдПрдХреНрд╕реЗрд╕ рдореЙрдбрд┐рдлрд╛рдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИ, рджреВрд╕рд░рд╛ рдЗрдВрдЯрд░рдлреЗрд╕ (рдкреНрд░реЛрдЯреЛрдХреЙрд▓, рд╣реЗрдбрд░ рдлрд╛рдЗрд▓, ...) рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИред рдЕрдиреНрдп рдореБрд╢реНрдХрд┐рд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд▓реЗрдЦ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред
рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдкрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХ рдкрд╣реБрдВрдЪ рд╡рд┐рдХрд▓реНрдк рджреЗрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдХрдХреНрд╖рд╛ рдореЗрдВ рдХрдИ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЙрд░реНрдЯрдХрдЯ рд╣реИред рдПрдХреНрд╕реЗрд╕ рдореЙрдбрд┐рдлрд╝рд╛рдпрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реЗ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЦреБрдж рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреАрдЪреЗред
рдЬрд╛рд╡рд╛ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдПрдХреНрд╕реЗрд╕ рдореЙрдбрд┐рдлрд╛рдпрд░ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдлрд╝реАрд▓реНрдб рджреГрд╢реНрдпрддрд╛редрдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рддрд░реАрдХреЛрдВ рдФрд░ рд╕рдордХрдХреНрд╖ рдЕрднреНрдпрд╛рд╡реЗрджрди рддрдХ рдкрд╣реБрдВрдЪ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рджрд┐рдЦрд╛рддрд╛ рд╣реИред
public class ConsistentObject { public void methodA() { } protected void methodB() { } void methodC() { } private void methodD() { } } public interface IPublicConsistentObject { void methodA() { } } public interface IProtectedConsistentObject: IPublicConsistentObject { void methodB() { } } public interface IDefaultConsistentObject: IProtectedConsistentObject { void methodC() { } }
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдХрдИ рдлрд╛рдпрджреЗ рд╣реИрдВред рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдпрд╣ рдУрдУрдкреА рдореЗрдВ рдмрд╣реБрд░реВрдкрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдореБрдЦреНрдп рд╕рд╛рдзрди рд╣реИ, рдЬреЛ рдХрд┐ рдирдП рд▓реЛрдЧреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдмрд╛рдж рдореЗрдВ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИред
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рдХрдард┐рдирд╛рдИ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рд╡рд╛рд▓реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЦрддрд░рдирд╛рдХ рдХреЛрдб рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрдирд░реЗрдЯрд┐рдВрдЧ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рд╕рдЯреАрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕рд░рд▓ рдирд┐рдпрдо рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдХреНрд╡рд╛рд▓реАрдлрд╛рдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реА рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдорд┐рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рд╣рдореЗрдВ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛рдкрди рднреА рдорд┐рд▓рддрд╛ рд╣реИред
C # рдореЗрдВ рдРрд╕рд╛ рдХреЛрдб
public class DataAccessObject { private void readDataFromFixedSource() {
рдЧреНрд░рд╛рд╣рдХ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ред
public class DataAccessObjectFactory { public IDataAccessObject createNew() { return new DataAccessObject(); } } public interface IDataAccessObject { byte[] getData(); } class DataAccessObject: IDataAccessObject { void readDataFromFixedSource() {
рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдХрд╛рд░рдг, рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЛ рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдкрддрд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рд╡реЗ рдкреАрдПрд▓рдУ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╢рдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХрд╛ рдХреБрдЫ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реИред рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рдУрдУрдкреА рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдХрдВрдмрд▓ рдХреЛ рдЙрди рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реЗ рднреА рдЦреАрдВрдЪрддреЗ рд╣реИрдВ рдЬреЛ рдУрдУрдкреА рдХреЛ рдЕрдзрд┐рдХ рдордЬрдмреВрддреА рд╕реЗ рдЦреЛрд▓рддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрдВрдЯрд░рдлреЗрд╕ рдЖрдкрдХреЛ рд╕рдЪреЗрдд рд░реВрдк рд╕реЗ рдЪреБрдирддреЗ рд╣реИрдВ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рд╕реЗ рдХреНрдпрд╛ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд┐рднрд┐рдиреНрди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ, рдЬрдмрдХрд┐ рд╕рдВрд╢реЛрдзрдХ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдПрдХ рдмрдбрд╝рд╛ рдкреНрд▓рд╕ рд╣реИред