多重继承争论 II:根据 Stroustrup 的说法 [已关闭]

2024-05-17

我非常了解关于为什么接口继承优于多重继承的传统争论,这里已经有一篇文章:C# 应该有多重继承吗? https://stackoverflow.com/questions/191691/should-c-include-multiple-inheritance

但根据 Stroustrup 的说法,微软和 Sun 决定摆脱多重继承的真正原因是他们这样做既得利益:他们没有将功能放入语言中,而是放入框架中,这样人们就可以与他们的平台联系起来。在语言标准水平上具有相同能力的人。

你怎么认为 ?

为什么 Sun 和 Microsoft 认为开发人员太不成熟而不能自己做出选择?

以上是我对他所说内容的明确解读。当然,他确实以一种更政治正确的方式这么说:)

摘自《与 Bjarne Stroustrup 的对话》http://www.artima.com/intv/modern.html http://www.artima.com/intv/modern.html

人们非常正确地说你 不需要多重继承, 因为你可以做的任何事情 你也可以做多重继承 具有单一继承性。你只需使用 我提到的委托技巧。 此外,您不需要任何 继承,因为任何事情 你可以用单一继承来做 也无需继承 通过类转发。实际上, 你也不需要任何课程, 因为你可以用 指针和数据结构。但为什么 你愿意这样做吗?什么时候 使用语言方便 设施?您什么时候更喜欢 解决方法?我见过这样的案例 多重继承很有用,并且 我什至见过一些案例 复杂的多重继承是 有用。一般来说,我更喜欢使用 该语言提供的设施 做解决方法。

摘自《Developpeur Reference》对 Bjarne Stroustrup 的采访》

http://www2.research.att.com/~bs/nantes-interview-english.html http://www2.research.att.com/~bs/nantes-interview-english.html

您始终可以将使用多重继承的示例重写为仅使用单继承(通过使用转发函数)。然而,结果通常是一个更长的示例,不太直接地反映设计,并且更难以维护。请注意,您还可以使用相同的技术将使用单继承的每个示例重写为不使用继承的示例,并且对代码清晰度产生相同的负面影响。不支持多重继承的语言的表达能力根本不如支持多重继承的语言,从而迫使程序员偶尔使代码复杂化。

...

人们经常谈论框架,但历史上充斥着不符合他们期望的框架。我见过成功的框架,但它们的范围通常有限。我对“通用”框架持怀疑态度,当此类框架是与其他供应商的类似框架竞争的平台供应商的产品时更是如此。作为用户,我更愿意尽可能保持与供应商的独立性。

我希望看到库提供对框架更清晰、更通用的访问——而不是与单一框架紧密联系的语言。


我自己的想法:

人们确实追随时尚,IT也不例外。没有人敢于质疑基本原理,除非一些大师有兴趣这样做。

例如,就 Java 而言,没有人敢于质疑 EJB,直到 Rod Johnson 提出了另一个框架,他说该框架是受到 .NET 实用主义的启发。

现在,.NET 通过 EF 变得越来越框架化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多重继承争论 II:根据 Stroustrup 的说法 [已关闭] 的相关文章

随机推荐

  • 函数模板和非推导上下文的部分排序在 MSVC 2017 中不起作用

    The identitytemplate 是一种常见的习惯用法 用于关闭某个 依赖的 模板参数的推导 例如允许隐式转换 如下例所示 include
  • 更快的 %in% 运算符

    The 快速匹配 https cran r project org web packages fastmatch index html包实现了更快的版本match对于重复匹配 例如在循环中 set seed 1 library fastma
  • 在 Visual Basic 中将窗体放置在屏幕右下角

    当表单加载时 如何将表单定位在屏幕的右下角 我正在使用 Visual Basic 2010 Express Thanks 编辑 我这样做了 看起来效果很好 Dim x As Integer Dim y As Integer x Screen
  • 管理调试和发布连接字符串

    在 NET SQLServer 应用程序中管理调试和发布连接字符串的好方法是什么 我有两个 SQL Server 一个是生产服务器 一个是构建 调试服务器 我需要一种在部署 ASP NET 应用程序时在这两个服务器之间进行切换的方法 目前
  • 什么时候通过引用传递不是一个好主意?

    这是一个我从未真正理解的内存分配问题 void unleashMonkeyFish MonkeyFish monkey fish new MonkeyFish std string localname Wanda monkey fish g
  • window.onbeforeunload 在 Android Chrome 上不会触发 [alt.解决方案?]

    我开发了一个简单的聊天应用程序 我正在使用 window onbeforeunload当有人关闭选项卡 浏览器时 基本上是当用户离开房间时 通知其他用户 这是我的代码 scope onExit function scope chatstat
  • Freemarker没有分配staticUtil

    我在liferay 6 2上工作了应用程序显示模板 我使用freemarker帮助对liferay的动态数据列表进行分页 当我升级到liferay 7时 这是一个问题 Liferay 7使用代码 lt assign records ddlD
  • .NET Core MVC 中的可选模型属性绑定

    我已经创建了一个AccountModel它具有以下属性 public class AccountModel Required EmailAddress public string Email get set Required StringL
  • 限制可选 DOM 复选框

    我试图限制用户可以选择的复选框数量 这些复选框是为数组中的每个项目生成的 DOM 输入对象 我目前对此没有运气 因此非常感谢任何帮助 谢谢 在这里小提琴 http jsfiddle net vVxM2 222 http jsfiddle n
  • 如何加载页面特定的rails 4 js文件?

    我正在阅读资产管道的 Rails 指南文档 它指出 CoffeeScript 页面特定生成的文件 如果清单上有 require tree 指令 则默认情况下可供用户使用 这对我不起作用我必须包括这个 在特定控制器上 我缺少什么 资产管道会将
  • Spring Boot自动装配存储库始终为空[重复]

    这个问题在这里已经有答案了 每次我进入我的服务类时 存储库似乎都没有自动连接 因为它不断抛出 NullPointerException 谁能帮我检查一下我缺少什么吗 这是我的代码 演示应用程序 java package com exampl
  • Jest - 模拟函数,从另一个文件导入

    测试的文件使用从另一个文件导入的函数 import myFunc from myFile 如何在该文件的测试中模拟该函数的返回值 我正在使用笑话 这对我有用 我不确定这是否是一个好的做法 import as myFile from myFi
  • 如何用图片替换UITableView?

    我有一个 UITableView 默认为空白 直到用户编辑并向其添加数据 我想显示一张带有说明的图像 直到用户编辑它为止 图片的大小非常适合导航栏和标签栏之间 有没有办法以编程方式执行此操作 您可以使用removeFromSuperview
  • 为什么这个C程序不能编译?这有什么问题吗?

    为什么这个C程序不能编译 这有什么问题吗 我已经试过了wxDevC 和 Turbo C 3 0 Main c include
  • 如何使用 MVVM 打开和关闭新 Windows?

    对于 MVVM 和 WPF 什么是处理打开和关闭新窗口和对话框的好 直接方法 打开和关闭应该由 ViewModel 驱动 对吗 但 ViewModel 不应该知道视图 我通常为此使用接口 例如 如果我想在单独的窗口中编辑记录 我有一个接口
  • ARC 不允许将 Objective-C 指针隐式转换为“void *”

    这意味着什么 我有什么选择 ARC 不允许将 Objective C 指针隐式转换为 void 我正在将 Xcode3 项目移植到 iOS5 它使用 AudioSessionInitialize 如下 AudioSessionInitial
  • 在 swift 中将简单字符串转换为 JSON 字符串

    我知道有一个同标题的问题here https stackoverflow com questions 30825755 convert string to json string in swift 但在那个问题中 他试图将字典转换为 JSO
  • 了解 sort() 比较函数

    我正在使用一个电子商务平台 该平台无法重新排序产品属性字段的选项 这真的很糟糕 因为要插入新选项 您几乎必须删除所有现有选项并重新开始 我正在尝试在客户端进行操作 这是我正在处理的内容 这是针对鞋码的 9 EE 9 1 2 EE 10 EE
  • cv2.drawContours() - 取消填充字符内的圆圈(Python,OpenCV)

    根据 Silencer的建议 我使用了他发布的代码here https stackoverflow com questions 48244328 copy shape to blank canvas opencv python 482465
  • 多重继承争论 II:根据 Stroustrup 的说法 [已关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我非常了解关于为什么接口继承优于多重继承的传统争论 这里已经有一篇文章 C 应该有多重继承吗 https stackoverflow com q