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

为什么那么多开发人员讨厌面向对象编程?

面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的编程典范,同时也是一种程序开发的抽象方针。它可能包含数据、特性、代码与方法。对象则指的是类(class)的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象。面向对象程序设计可以看作一种在程序中包含各种独立而又互相调用的对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,即对象。目前已经被证实的是,面向对象程序设计推广了程序的灵活性和可维护性,并且在大型项目设计中广为应用。此外,支持者声称面向对象程序设计要比以往的做法更加便于学习,因为它能够让人们更简单地设计并维护程序,使得程序更加便于分析、设计、理解。反对者在某些领域对此予以否认。当我们提到面向对象的时候,它不仅指一种程序设计方法。它更多意义上是一种程序开发方式。在这一方面,我们必须了解更多关于面向对象系统分析和面向对象设计(Object Oriented Design,简称OOD)方面的知识。许多流行的编程语言是面向对象的,它们的风格就是会透由对象来创出实例。重要的面向对象编程语言包含Common Lisp、Python、C++、Objective-C、Smalltalk、Delphi、Java、Swift、C#、Perl、Ruby、JavaScript 与 PHP等。

可以说所有计算机编程都归结为 if/then 和 if/then else 语句吗?

不完全 - 但接近。 艾伦图灵(他因布莱切利成名)证明,只要一种语言具有四种能力,那么你就可以计算任何可以计算的东西——它们是:

从内存中读取位的能力(和前进)

能够向内存写入一点并前进

测试和跳跃的能力

无条件跳跃的能力

1 & 2 是对内存的访问,3 是 if/then/else 或其等效项,4 是 goto(或跳转到函数)。

你可以用这 4 个命令模拟加法和减法,从那里你可以得到除法和乘法等等; 通过正确的数据编码,您可以构建一个文本解析器、一个编译器甚至一个神经网络——尽管这些代码有点难以追踪。

为什么 CPU 只有几千字节的缓存? 它是如何工作的?

首先,您的问题已经过时了。 现代 CPU 有数兆字节的缓存。缓存如何工作是一个漫长而复杂的故事。从功能上讲,缓存保存一组地址和值对。 每次有一个地址的读请求,如果该地址在缓存中,则返回该值。 这称为缓存命中。 如果地址不在缓存中,则称为缓存未命中。 在选择另一个要弹出的地址和值对以腾出空间后,读取内存并将地址和值对添加到缓存中。如果程序执行内存写入,则地址和值对将添加到缓存中,如果它们不在缓存中,则弹出另一对以腾出空间。

您如何识别 AI 编写的文本?

GPT-3 使用预测文本,这意味着它会梳理互联网以查找通常按顺序出现的下一个内容。问题在于:大多数博客都写得不好。 对于每篇优质的纽约时报文章,都有 50 篇 SEO 文章(1500 字的文章只需要 700 字)。 关于食谱和家居装修的文章是最严重的违规者。例如,我在 AI 编写器中输入了关于如何早起的提示。 这是返回的内容:准时起床。 这是让您的一天以正确的方式开始的最重要的一步。 准时起床的最佳方法是早上例行公事。 您可以为特定时间设置闹钟,但如果您想早起,您应该制定某种例行程序,帮助您每天在同一时间起床。注意单词的重复和多余的想法。 整段内容可以压缩为“早安习惯可以帮助您更快醒来并提高工作效率。”Google Brain 的高级研究员 Daphne Ippolito 说:“如果你有足够的文本,一个非常简单的线索就是‘the’这个词出现了太多次。”我在指示代词(这个、那个、这些和那些)中也注意到了这一点。 人工智能写作中到处都是它们(有经验的作家知道你通常可以从句子中删除“这个”和“那个”)。

是否仍在制作 32 位程序,或者现在制作的每个程序都是 64 位的?

你不会相信,但 Windows x64 下的很多/大多数程序实际上是半 32 位的。 原因很简单,Microsoft 在开始使用 Win64 以保持与 Win32 的兼容性时决定将本机 C 类型(INT、LONG)保留为 32 位。 Win64 程序在处理内存时是 64 位的,指针也是 64 位的。有多少程序是 32 位或 64 位取决于初始程序的编写方式。 如果 32 位程序未正确编写,要获得 64 位版本将需要进行重大更改。 许多人不在乎,今天仍然有很多软件是 32 位的。在 Windows 上也存在安装问题。 32 位程序需要 32 位 DLL,64 位程序需要 64 位 DLL。 这意味着如果程序是 Shell 扩展,它必须提供 32 位和 64 位 DLL。 这也会阻止某些程序支持 64 位或同时支持 32 位和 64 位。就我而言,长期以来,我所有的 Windows 程序都是 64 位和 Unicode (UTF-16) 程序。 在内部,像许多其他人一样,如果足够的话我使用 INT 和 LONG,所以 32 位指令。 在极少数情况下,我不得不使用 LONG LONG,64 位类型。 当然,指针除外。

但移动程序是另一回事。 Apple 很长一段时间(2017 年)取消了对 32 位的支持,并迫使所有人切换到 64 位。 32 位支持已从 CPU 中移除。 这不是 x86 的情况,它根本无法删除 CPU 中的 32 位支持(如上所述)。Android 正朝着相同的方向发展,Android 12 仅为 64 位。 Qualcomm SoC 和其他处理器现在是不对称的,有些内核支持 32 位,有些则不支持。 到 2023 年,与同时支持 32 位和 64 位的内核相比,我们将拥有更多仅支持 64 位内核的 SoC。

为什么那么多开发人员讨厌面向对象编程?

开发人员讨厌东西几乎是普遍的无用观察。 任何编程概念、范例、语言以及你拥有的东西都有那些“仇恨者”,他们往往直言不讳但很少透露任何重要信息。 许多开发人员讨厌指针,许多开发人员讨厌 Python、JavaScript 或 Java 或其他任何东西,许多开发人员讨厌硬制表符,许多开发人员讨厌这个或那个或其他东西。

当你从情感的流露中走出来,看看软件是如何在全球范围内实际开发的,在工业和研究中,在大大小小的应用程序中,在嵌入式系统和服务器场中,强调可用性或安全性或速度或可读性或 它们的某种组合,由个人为自己使用,由成千上万的人合作——你会发现各种范式被用于各种目的,或多或少地取得了成功、轻松和有趣,而“仇恨”在很大程度上是浪费时间。

当然,经过多年和几十年,事情会发生变化。 时尚来来去去,语言来来去去。 编程是人类的努力,这就是人类努力的方式。 现在从事编程的人比从事金属加工的人多得多,因此与铁匠相比,程序员之间的意见和抱怨更多。 许多年前,情况恰恰相反。面向对象编程是现代软件开发的基本概念。 在不同的上下文中,它可能非常合适、可选或无关紧要。 就这样。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20221227A02UV200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券