OOP在大学里被滥用了吗? [关闭]

2023-12-25

我两年前开始上大学,从那时起我一直听到“首先设计你的课程”。有时我真的会问自己,我的解决方案首先应该是一堆对象吗?有人说你看不到它的好处,因为你的代码库非常小——大学项目。项目规模这个借口根本无法让我接受。如果该解决方案与该项目配合良好,我相信它也应该是该项目的宏观版本的正确解决方案。

我并不是说 OOP 不好,我只是觉得它在课堂上被滥用了,像我这样的学生日夜被告知 OOP 是正确的方式.

恕我直言,正确的答案不应该来自教授,我更喜欢从该领域的真正工程师那里听到。

OOP 总是正确的方法吗?

什么时候 OOP 是最好的方法?

什么时候 OOP 是一个糟糕的方法?

这是一个非常普遍的问题。我并不要求明确的答案,只是要求一些来自该领域的真实设计经验。

我不关心表现。我问的是设计。我知道这是现实生活中的工程。

=================================================== ==================================

感谢所有的贡献。我选择了 Nosredna 的答案,因为她概括地回答了我的问题,并让我相信我在以下方面是错误的:如果该解决方案与该项目配合良好,我相信它也应该是该项目的宏观版本的正确解决方案。


教授们的缺点是他们不能让你参与持续数年、由许多不同的程序员共同开发的庞大、令人讨厌的程序。他们必须使用相当不令人信服的玩具示例,并试图诱骗您看到更大的图景。

从本质上讲,他们必须吓唬你,让你相信当 HO 轨距模型火车撞到你时,它会把你的腿撕下来。只有最有说服力的教授才能做到这一点。


“如果该解决方案与该项目配合良好,我相信它也应该是该项目的宏观版本的正确解决方案。”

这就是我不同意的地方。一个小项目适合你的大脑。它的大版本可能不会。对我来说,面向对象的好处是隐藏了足够的细节,这样我的头脑中仍然可以塞满大局。如果你缺乏面向对象,你仍然可以管理,但这意味着寻找其他方法来隐藏复杂性。

关注真正的目标——生成可靠的代码。面向对象在大型程序中效果很好,因为它可以帮助您管理复杂性。它还有助于可重用性。

但U不是目标。好的代码是目标。如果程序方法可行且永远不会变得复杂,那么您就赢了!

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

OOP在大学里被滥用了吗? [关闭] 的相关文章

  • 如何将扩展泛型类的实体转换为扩展另一个泛型类的另一个实体

    我正在开发一个面向服务的平台 用于从数据库检索 创建和更新实体 这里的要点是每个 Java 实体都扩展AbstractEntity 例如 我有 MyCar extends AbstractEntity implements Serializ
  • 无法分配给对象“[object Object]”的只读属性“名称”

    以下代码仅会抛出错误name财产 可以通过指定来修复name属性可写Object create争论但是我试图理解为什么会发生这种情况 也许有一种更优雅的方法来解决它 var BaseClass function data Object as
  • 如何通过查看程序集来判断程序是否使用动态调度

    我在 Reddit 上读过一篇文章Herb Stutter JIT 永远不会像原生一样快 http www reddit com r programming comments rr2dj herb stutter jit will neve
  • 是否可以在 Python 中子类化 Lock() 对象?如果没有,还有其他方法来调试死锁吗?

    所以 我有一个多线程Python程序 它目前正遭受死锁 我打算通过子类化 threading Lock 对象来记录锁获取 import traceback class DebugLock threading Lock def acquire
  • 如何从继承的方法中获取派生类的路径?

    如何从继承的方法中获取当前类的路径 我有以下内容 and
  • 识别鼠标移动的算法

    我想知道是否有任何研究 算法可以指定鼠标在识别 等字符时的偏差量使用鼠标绘制 某种光学字符识别 但可能是一个更简单的版本 是否有某种算法可以让我说用户绘制的问号确实是一个问号 而不是其他具有一定准确性的东西 就像 Windows 平板电脑软
  • 当平方和为N时,如何找到四个变量的所有可能值?

    A 2 B 2 C 2 D 2 N给定一个整数N 打印出整数值的所有可能组合ABCD求解方程 我猜我们可以比暴力做得更好 天真的暴力会是这样的 n 3200724 lim sqrt n 1 for a 0 a lt lim a for b
  • matlab中类库的全局变量

    我有一些matlab声明的类 我如何声明所有类中都可见的常量 例如 这些常量可以是在所有类的方法中使用的物理常量 首先想到的是使用全局变量 还有更好的办法吗 最好在单独的文件中声明这些常量 包含常量的类是执行此操作的一种很好的干净方法 请参
  • 过渡到面向对象的ABAP?

    看来我们大多数 SAP 程序员都在使用旧版本的 ABAP 也就是面向对象之前的版本 我还注意到 面向对象的语言更加干净 更加现代 他们显然借此机会摆脱了不推荐使用的东西 由于该系统尚未推出 因此重新设计的时机宜早不宜迟 是否值得要求将新代码
  • VB.NET 中的“阴影”与“覆盖”

    这两个关键词有什么意义Shadows http msdn microsoft com en us library 1h3wytf6 aspx and 覆盖 http msdn microsoft com en us library k777
  • 有哪些学习线程编程的好资源? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 随着多核CPU在桌面上的兴起 多线程技能将成为程序员的宝贵资产 您能为想要学习线程编程的程序员推荐一些好的资源 书籍 教程 网站等 吗 看
  • 如何只获取父类对象的属性

    我有两节课 class Parent object def init self id name self id id self name name self parent vars id name make a copy def print
  • 使用什么算法来确定使系统达到“零”状态所需的最小操作数?

    这是一种更通用的问题 不是特定于语言的 有关要使用的想法和算法的更多信息 系统如下 它登记朋友群体之间的小额贷款 Alice and Bill要去吃午饭 比尔的卡坏了 所以爱丽丝支付了他的餐费 10 美元 第二天Bill and Charl
  • 奖励*完整*初学者的代码项目[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 为刚接触编程的人提供的课程通常包括一个代码项目 我认为这是一种很好的学习方式 然而 这样的项目往往让人感觉过于做作 因此做起来并没有多大回
  • C# 堆和堆栈上常规类静态类静态方法实例方法和数据成员的内存分配? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 本书的大部分内容从未讨论程序如何执行
  • tkinter - 使用按钮在帧之间来回切换

    我需要功能 最好是一个功能 当按下下一页和后退按钮时可以在页面之间来回切换 我想这可以通过将布尔变量分配给后退和下一页按钮来完成 不确定是否可以这样做 来确定您是否要前进或后退所有页面的有序列表 需要知道当前升高的框架的索引 索引可用于找出
  • 如何在不使用 viewWillDisappear 的情况下使 NSTimer 无效/取消初始化?

    var faderTimer NSTimer override func viewDidLoad super viewDidLoad self faderTimer NSTimer scheduledTimerWithTimeInterva
  • 静态方法的 Java 内存模型

    我来自操作系统和 C 语言背景 在代码编译时 世界很简单 需要处理和理解堆栈 堆文本部分等 当我开始学习 Java 时 我确实了解 JVM 和垃圾收集器 我对静态方法感到很有趣 根据我的理解 类的所有实例都会在堆中创建 然后被清理 但是 对
  • 人们今天使用的可扩展语言是什么?

    维基百科说 可扩展编程是计算机科学中使用的一个术语 描述一种计算机编程风格 重点关注扩展编程语言 编译器和运行时环境的机制 例如 Tcl 允许您编写自己的控制结构 看here http wiki tcl tk 685 我有兴趣编制在实际代码
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit

随机推荐

  • 使用 std::function 进行回调的替代方案

    目前我正在尝试一个代码 该代码基本上执行以下操作 void f int x cout lt lt f lt
  • 使用 Mockito 的 'when' API 为方法添加存根时出错

    有这个抽象类可以从远程数据源获取数据 abstract class NumberTriviaRemoteDataSource Calls the http numberapi com number endpoint Throws a Ser
  • vagrant 中的默认共享文件夹不可见

    我在 Vagrant 中同步文件夹时遇到问题 我的配置非常简单 Vagrant configure 2 do config config vm box ubuntu xenial64 config vm network forwarded
  • Haskell:一些和很多[重复]

    这个问题在这里已经有答案了 什么是some and many in Control Applicative Alternative有什么好处 如果我写类似的东西some Just 42 它似乎会导致无限递归 这似乎不太有用 当用作解析器组合
  • 尽管我添加了冲突,但 postgres 中的序列号仍在增加

    我正在使用 Postgres 9 5 并在这里看到一些有线的东西 我有一个 cron 作业每 5 分钟运行一次 触发一条 sql 语句 该语句添加记录列表 如果不存在 INSERT INTO sometable customer balan
  • CouchDB 代理? Apache 作为反向代理?

    我有带有公共 IP 地址的 VM Ubuntu 10 04 Apache CouchDB 1 0 是否有可能从公共IP地址访问CouchDB 主要是Futon 即 187 323 132 232 5984 不是来自http 本地主机 598
  • Canvas 或 ImageView 上的 Android 热图

    I want to generate dynamic heatmap just as below on either canvas or imageview I looked into google map heat map API but
  • 从ChartJS 2中的X像素值获取线条的Y值

    我在 Chartjs 中有一个折线图 我想在给定 x 轴像素值的情况下找到线上任意点的 Y 值 My Graph https i stack imgur com 94vKN png 目前 我正在挂钩 afterDatasetsDraw 事件
  • 使用 R 将子图移得更近

    我正在尝试将子图与 R 更紧密地结合在一起 我所做的基本上不重要 只是为了快速重现 代码如下 library igraph library plyr g lt graph ring 10 setEPS postscript out eps
  • 获取“HTTP 错误:404,未找到方法。”在 Firebase Cloud Functions 上运行“firebase 部署 --only 函数”时

    我几个小时以来一直被这个问题困扰 我想也许你们中的一个人以前遇到过这个问题 I get Error HTTP Error 404 Method not found 当我跑步时firebase deploy only functions所以我
  • 我们如何使表格布局双向滚动(水平、垂直)

    我在 XML 文件中定义了一个表 当前设置为垂直滚动 但我也希望它根据需要水平滚动 这是使用的XML代码
  • 使用 SQL Server 身份验证的文件流

    我想知道C 中的文件流是否使用SQL Server身份验证 是否可以通过使用用户名和密码在 Windows 身份验证中使用文件流连接到数据库 是的 必须使用 Windows 身份验证文件流 对付它最好的办法就是模仿它 在类中声明以下方法 D
  • 配置设置和 IoC

    我使用 IoC DI 方法 通常具有参数 这些参数是由最低层 数据库层等 从配置设置 即连接字符串 静态值等 读取的 最好的方法是什么 直接在这个最底层读取 即 string sendGridApiKey ConfigurationMana
  • PMD 的完整形式是什么?

    我在用PMD在我的 Java 项目中进行代码审查 只是想知道 P M D 的缩写是什么 代表 我在谷歌上搜索但找不到任何东西 有人知道吗 在 PMD 项目网站上 http pmd sourceforge net pmd 5 0 4 mean
  • Gradle构建找不到方法

    我正在跟踪开始 Android 开发 https app pluralsight com library courses android start developingPluralsight 课程 我们即将添加测试 说明说要添加添加and
  • 如何使用 JSF/Primefaces 使两个字段中的一个至少为必填字段

    我将 primefaces 与 jsf 一起使用 并且我想至少将两个字段之一设置为必填字段 这意味着如果这两个字段同时为空 将显示错误消息 这是我的代码示例
  • SSIS - RPC 服务器不可用

    我已安装 SQL Server 实例 并在安装向导中选择 Integration Services 但是 当我以 管理员 身份运行 SQL Server Management Studio 时 我可以在下面看到我的实例 数据库引擎 分析服务
  • 将映像包含在可执行 jar 中

    我一整天都在浏览 Stackoverflow 寻找如何做到这一点 但还没有成功 我正在将我制作的快速游戏打包成可执行 jar 但我没有正确引用图像 我只是引用了文件 background ImageIO read new File wood
  • 将 json 对象存储到 Azure blob 存储

    有没有办法存储 json 对象而不将其转换为流 我可以将其转换为流后上传 但是是否有任何方法可以将对象存储为 something json 而不将其转换为流 我现在应该做什么 const azureStorage require azure
  • OOP在大学里被滥用了吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我两年前开始上大学 从那时起我一直听到 首先设计你的课程 有时我真的会问自己 我的解决方案首先应该是一堆对象吗 有人说你看不到它的好处 因为你的