Oop 在C+中更改接口+;
我正在下面的链接上阅读一篇关于接口扩展的文章 第142页已经提到了这一点 随着时间的推移,添加这些请求可能会使接口膨胀 初始框架设计中未预期的功能。如果是新的 方法直接添加到“universalComponent”接口,所有 必须更新和重新编译客户端代码。这是一个冗长乏味的过程 容易出错 我的问题是(假设我们正在使用C++来开发)< /P> 为什么我们必须编译客户端代码,如果我们向接口添加新方法而不是 修改接口中的任何现有函数Oop 在C+中更改接口+;,oop,design-patterns,Oop,Design Patterns,我正在下面的链接上阅读一篇关于接口扩展的文章 第142页已经提到了这一点 随着时间的推移,添加这些请求可能会使接口膨胀 初始框架设计中未预期的功能。如果是新的 方法直接添加到“universalComponent”接口,所有 必须更新和重新编译客户端代码。这是一个冗长乏味的过程 容易出错 我的问题是(假设我们正在使用C++来开发)< /P> 为什么我们必须编译客户端代码,如果我们向接口添加新方法而不是 修改接口中的任何现有函数 谢谢 向涉及多态性的类添加方法(意味着它至少有一个虚拟成员函数)可
谢谢 向涉及多态性的类添加方法(意味着它至少有一个虚拟成员函数)可能会更改该类及其子类的对象的二进制布局。向涉及多态性的类添加方法(意味着它至少有一个虚拟成员函数)可能会改变该类的对象的二进制布局和它的子类。 < P>我没有读过文章,但是首先,我建议不要强调C++中的“方法”和“接口”。这些术语在java等严格的OO语言中很流行,但是C++是一种更广泛、多范例的语言。 话虽如此,“向接口添加方法”实际上只是向基类添加更多虚拟成员函数。更改基类会更改所有派生类的定义,因此所有需要任何派生类或基类的完整类型的代码都必须重新编译
C++类型不是运行时功能。类型仅在编译时存在,并且编译器必须具有对类型定义的完全访问权限。(再次与其他语言形成对比!)接口实现关系纯粹存在于编译时,不能“预编译”。因此,实际上没有“修改接口”这样的事情会产生运行时模块化。“接口”概念只是一个简洁的助记符,您可以在设计应用程序时使用它,但它并不能避免重新编译。改变类定义改变了类的内部表示,并且除非(或)程序的所有部分都看到相同的类定义,否则不能(一般地)生成正确的C++程序。 < P>我没有读过文章,但是首先,我建议在C++中去强调术语“方法”和“接口”。这些术语在java等严格的OO语言中很流行,但是C++是一种更广泛、多范例的语言。 话虽如此,“向接口添加方法”实际上只是向基类添加更多虚拟成员函数。更改基类会更改所有派生类的定义,因此所有需要任何派生类或基类的完整类型的代码都必须重新编译 C++类型不是运行时功能。类型仅在编译时存在,并且编译器必须具有对类型定义的完全访问权限。(再次与其他语言形成对比!)接口实现关系纯粹存在于编译时,不能“预编译”。因此,实际上没有“修改接口”这样的事情会产生运行时模块化。“接口”概念只是一个简洁的助记符,您可以在设计应用程序时使用它,但它并不能避免重新编译。更改类定义会改变类的内部表示,并且除非程序的所有部分都看到相同的类定义,否则不能(一般地)生成正确的C++程序。