首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

“面向对象就是一个错误!”

1 前言 C++和 Java 可能是计算机科学领域最大的错误。就连面向对象的创建者 Alan Kay 都曾对这两门语言提出了严厉的批评。然而,C++和 Java 都是比较主流的面向对象语言。...面向对象编程的流行是计算机科学领域的不幸,它对现代经济造成了极大的破坏,造成了数万亿美元的间接损失。在过去的三十年中,几乎所有行业都因潜在的面向对象编程危机而受到影响。 为什么面向对象编程如此危险?...但现代面向对象编程就这么干了,因为在现代面向对象编程中,默认情况下,一切都是通过引用共享的。这也意味着破坏正常功能的错误无法避免。...如今,面向对象编程也有这个问题。在面向对象编程中,一切都是通过引用传递的。从理论上讲,这意味着任何对象都有可能被其他对象修改(面向对象编程对此没有任何约束)。...14 现在就开始行动 面向对象编程本身就是一个巨大的错误。 如果我知道我乘坐的汽车运行的软件是由面向对象编程语言编写的,我会感到害怕;知道我和家人乘坐的飞机使用了面向对象的代码,也会让我感到不安。

40540
您找到你想要的搜索结果了吗?
是的
没有找到

错误之memset对类对象的误用

,使用memset将对象实体置为0之后,在使用delete析构该对象,就会出现莫名其妙的段错误。...总而言之,段错误的出现是因为对内存空间的不正确操作。 基于对段错误的理解,本以为是对 dicOriTask处理过程中有不正确的操作,但是几经周折排查后并未发现错误,莫名其妙,原来问题很简单。...是memset对类对象的误用。 memset一般用于C语言中对结构体的对象进行置空操作,我却沿用到了C++的类对象。如果类包含有虚函数,那么类对象就会包含有虚函数表指针。...如果此时对类对象使用memset置空,那么虚函数表指针也会被置空,当使用delete释放类对象的时候,就会根据虚函数表指针指向的空间去释放虚函数表,那么此时就发生了对内存空间的不正确操作,出现了段错误。...这就是使用memset对类对象的误用。即delete一个被 memset为空的带有虚函数的类对象指针时,就会出现段错误

1.4K10

【C++】面向对象编程引入 ② ( 面向对象编程 | 类的正确定义方式 | 类的错误定义方式 | 错误分析 )

一、类的正确定义方式 在上一篇博客中的 面向对象 编程中 , 将 现实世界中的 圆 抽象为 Circle 类 ; class Circle { public: double r; // 成员变量 半径..., 先调用 setR 方法设置圆半径 , 然后调用 caculate 函数计算出 周长和面积 , 最终才能获取到 圆 的周长 和 面积 ; 二、类的错误定义方式 如果不定义成员方法 , 直接定义变量...* r; // 成员变量 周长 double a = 3.14 * r * r; // 成员变量 面积 private: protected: }; int main() { // 定义圆对象...:" << c.p << " 圆面积为 : " << c.a << endl; // 控制台暂停 , 按任意键继续向后执行 system("pause"); } 只能得到如下结果 : 三、错误分析...定义类 Circle 时 , 没有声明对象 , 并不分配内存 ; 使用 Circle c; 代码 声明 c 对象时 , 开始在 栈内存中为 Circle 对象分配内存 ; 分配内存时 , 同时也会对

8910

实时错误 ‘91‘ :对象变量或with块变量未设置

这几天在做学生信息管理系统的时候,出现 最多的应该就是这个问题了,“实时错误‘91’:对象变量或with块变量未设置”。...如右图:        遇到这个问题,我们首先应该去参考MSDN,不过这时候MSDN似乎没有帮到我们很多,总结了一下,其实出现这个错误的情况有很多种:        1、在运行程序之前没有配置ODBC数据源或者...ODBC数据源配置错误,当然前提得是SQL Server执行了相关的SQL代码(学生系统中用到的student.mdb文件)。       ...3、逻辑错误:缺少语句,在给执行语句txtSQL正确赋值之后,直接操作数据库中的数据,说通俗点就是还没连上数据库就对其进行操作,这也是我犯过的错误。...4、还有就是MSDN中提示的情况,比如试图使用的对象变量已被设为Nothing等等,这里不再多说,详情请参考MSDN for VB6.0

2.1K30

实时错误 91 :对象变量或with块变量未设置

最多的应该就是这个问题了,“实时错误‘91’:对象变量或with块变量未设置”。...如右图:        遇到这个问题,我们首先应该去参考MSDN,不过这时候MSDN似乎没有帮到我们很多,总结了一下,其实出现这个错误的情况有很多种:        1、在运行程序之前没有配置ODBC数据源或者...ODBC数据源配置错误,当然前提得是SQL Server执行了相关的SQL代码(学生系统中用到的student.mdb文件)。       ...3、逻辑错误:缺少语句,在给执行语句txtSQL正确赋值之后,直接操作数据库中的数据,说通俗点就是还没连上数据库就对其进行操作,这也是我犯过的错误。...4、还有就是MSDN中提示的情况,比如试图使用的对象变量已被设为Nothing等等,这里不再多说,详情请参考MSDN for VB6.0

3.4K20

你知道 JavaScript 中的错误对象有哪些类型吗?

作者:Isha Jauhari 译者:前端小智 来源:dottoro 每当 JavaScript 中发生任何运行时错误时,都会引发Error对象。...在许多情况下,我们还可以扩展这些标准Error对象,以创建我们自己的自定义Error对象。 属性 Error 对象具有2个属性 name ——设置或返回错误名称。...事例 1.通用的错误 我们可以使用Error对象创建一个新的Error,然后使用throw关键字显式抛出该错误。...我们还可以通过创建继承Error对象的类来定义自己的错误类型。...Error 的对象类型 现在让我们讨论可用于处理不同错误的不同错误对象类型。 1. EvalError 创建一个error实例,表示错误的原因:与 eval() 有关。

6.9K21

2022-10-16-整洁代码的对象错误处理

对象和数据结构 不要轻易的就写 getter 方法获取类内的属性值,是思考目的是什么,有时用有意义的函数返回这个值,可以隐藏自己内部的细节 “著名的得墨忒耳律(The Law of Demeter)认为...,模块不应了解它所操作对象的内部情形……方法不应调用由任何函数返回的对象的方法。”...说是 getOptions 返回的对象,不应该再去知道它的内部细节,想想这原则不可能实现啊。...错误处理 有时 catch 异常需要对好多异常匹配判断,但是若明白自己想要的是什么,可能根本不关注到底是哪个异常,一般直接匹配一个 Exception 了,其实不太好,通用的 Exception 无法定位是这里抛出的...可以返回特例对象,甚至可以抛出异常,如果是第三方的,可以自己这样封装,将 null 值处理了,不要返回去。

30220

面向对象编程是计算机科学的最大错误

banner.jpeg] 原文发表于博客:https://blog.zhangbing.site/2021/03/06/oop-will-make-you-suffer/ C++和 Java 可能是计算机科学中最严重的错误...错误使开发人员浪费了宝贵的调试时间,如果他们进入生产领域,会大大降低客户体验。 为了使我们的程序更可靠,我们应该首先解决非确定性问题。...不,但是如果程序中有一个错误,它也是确定的——相同的输入总是会出现相同的错误,这使得它更容易修复。 我怎么到这里了? 在过去,在过程/函数出现之前 goto 语句在编程语言中被广泛使用。...这在技术上意味着,任何对象都可以被任何其他对象突变(OOP 没有任何限制来阻止这一点)。而且封装也没有任何帮助--调用一个方法来突变某个对象字段并不比直接突变它好。...采取行动,为时已晚 OOP 是一个非常大且代价高昂的错误,让我们最终都承认吧。 想到我坐的车运行着用 OOP 编写的软件,我就害怕。

52850

Silverlight RIA Servcie 删除子对象实体提交错误的问题

Silverlight RIA Servcie 删除子对象实体提交错误的问题 下面实体结构 查询出自对象实体方法 修改mataclass类添加[Include]特性 修改domainservice...报错的原因是说提交的保存的实体中有错误。一开以为我的删掉了,怎么还会有错误呢,Google了半天找到了一些问题但都没有具体说明,也可能是我理解的问题。...后来自己摸索,调试,发现虽然程序把子对象实体删除了,类似一下代码。...但是发现并DomainContext下的PRE_EMS3_IMGs对象集合还有,但问题时删除的对象在PRE_EMS3_IMGs集合中的关键字段的值是null,所以实体的HasValidationErrors...知道了问题,下面就是解决方法是,把有错误的实体再removed然后提交保存。 问题解决了。

89760

【最佳实践】巡检项:对象存储(COS)5XX 错误

问题描述 某客户反馈自己在并发上传或下载对象时会出现5XX的错误,5XX错误码主要是500,503错误,产生的原因为: 5XX 类型错误 HTTP 状态码 错误码 描述 500 Internal Server...Error InternalError 服务端内部错误 500 Internal Server Error KmsInternalException 查询密钥管理服务时发生服务端内部错误 501 Not...Unavailable ServiceUnavailable 服务暂不可用,请重试 503 Service Unavailable SlowDown 请降低访问频率 通过对应的返回信息以及提示,错误是由于...TraceId>XXX 若 5XX 状态码出现次数过多、且出现频率占比过大,则可能影响存储桶的正常访问 解决方案 此类问题产生的原因为COS内部处理过程中产生一些错误

59330
领券