dem*_*key 6 language-agnostic oop parameters information-hiding interface
我试图说服一位同事,一个函数应该将接口作为参数,而不是对象本身.我认为小对象可以很好地传递,但对于大对象,我会给它们一个接口,只是通过i/f,而不是整个事情.
请注意,只会出现其中一个大类 - i/f永远不会用于其他对象.这仅仅是为了隐藏对象的实现.
你是否同意将大型课程分成界面是一种好习惯?
这样做有什么不利之处吗?
例:
public interface class IVeryLargeClass
{
void DoSomething();
...
};
public ref class VeryLargeClass : public IVeryLargeClass
{
public:
virtual void DoSomething() { ... }
...
};
public ref class AnotherClass
{
public:
AnotherClass(VeryLargeClass^ vlc) { vlc->DoSomething(); }
// OR
AnotherClass(IVeryLargeClass^ vlc) { vlc->DoSomething(); }
};
Run Code Online (Sandbox Code Playgroud)
Bra*_*lor 13
您在面向对象开发中学到的第一个原则之一:
编程到接口,而不是实现.
你指出"只有这些大类中的一个 - i/f永远不会用于不同的对象".在你的情况下这可能是真的,但我希望每次这样的陈述都是错的时候我都有镍.
除了考虑是否可能存在多个接口实现之外,还应考虑具体对象是否导出(或可能导出)与接口中声明的操作不共享逻辑关联的其他方法.在这种情况下,您可以简单地在一个或多个附加接口中声明其他操作.然后,客户端只需要与导出其感兴趣的操作的接口耦合.
简而言之,接口提供了一种管理客户端和提供者之间耦合的方法.