何时创建类和函数?

12

我是一个编程初学者,当我开始编写代码时,我只是开始写并解决问题。 我会在单个主函数中编写整个程序。 我不知道何时编写类和函数。

有什么好的书籍可以阅读来学习这些概念吗?


我知道这个问题与编程语言无关,但如果您告诉我们您使用的是哪种语言,我们可能能够提供更多帮助。 - Binary Worrier
这是(在我看来)不是 https://dev59.com/nEnSa4cB1Zd3GeqPOoIy 对象导向编程寻找好的教程的副本。 - Binary Worrier
我在谈论Java语言。我经常使用Swing。 - nicky
7个回答

19

一个非常通用的问题,这里有几个经验法则:

  • 代码重用:当你在两个地方使用同样或者非常相似的代码时,应该将其移动到一个函数中。

  • 可读性:如果一个函数在屏幕上跨越了一页以上,你可能需要将其分解成多个函数。

  • 专注度:每个类或者函数应该只做一个具体的任务。所有与此目的无关的内容应该委托给其他的类/函数。


2
+1:特别是第三点(在我看来应该用粗体):) - Binary Worrier
是的...我也想这么说。重点在第三点上。基本上,如果你可以给几行代码起个名字(用不到3个词描述它的作用),那就这么做。 - mpen

7
我认为这里的标准答案是,您应该组织好您的代码,使其易于阅读和维护。话虽如此,考虑到组织代码的成本以及您期望代码存在的时间也很重要。
更直接地回答您的问题:函数应该用于替换重复或其他良好包含的代码片段。如果您在相同类型的元素/数据上反复应用相同的10个操作,您可能需要考虑将所有信息收集到一个更简洁和清晰的函数中。通常,函数需要有明确定义的输入和输出。
类实质上将函数和数据集合在一起。就像您应该使用函数将操作收集到简洁、定义明确的操作集合中一样,类应该组织相关的函数和数据以便存储在一起。也就是说,如果您有一堆操作一些东西(如方向盘、刹车、油门等)的函数,您应该考虑创建一个车辆类来组织这些相关的函数和数据/对象。
除了作为组织元素外,类还应该用于启用轻松重用和创建多个“事物”——假设您想要一组这些车辆。类允许您将意义或至少某些语义绑定到您的程序中。
然而,所有这些的目的是使您的生活和他人的生活更轻松,当涉及到编写和维护程序时。因此,如果您需要在不到十分钟的时间内解决问题,并且认为这是一个一次性使用的程序,请忽略所有这些,如果您认为它会让您更快地完成所需的工作,请记住,所有这些组织、语义和重复操作的便利性都存在于使实现您的目标更加容易。

2
这是一个风格和偏好问题,取决于你工作的场所有多正式,这可能是一项标准问题。我遵循一些规则。
    • 相关数据集应该放在一起
    • 操作这些数据的函数应该在一起
      经典例子是汽车类,函数可以是Drive和AddGas。
  • 函数
    • 如果您要使用它超过一次,它应该在一个函数中
    • 大多数函数应该不超过一个屏幕的代码
    • 函数应该做好一件事而不是一堆事情
有很多意见,但随着时间的推移,你必须发展自己的风格。

2

嗨,nicky,这其实很简单!

将代码拆分为方法的目的就是为了让它可以被重用。当你创建一个方法时,你可以在程序中任何时候调用它,而不是反复编写同样的代码。

所以每当你编写一些代码并且认为......“嘿,将来可能需要在程序中的其他地方再次使用这个功能”,那么你就需要将它放在一个方法中。

至于类,你会尝试将相似的功能组合在一起。并且尽量保持类简短明了。如果你需要多个类,你也会将它们分组到包中等等。

当我编写代码时,我通常有一个非常好的想法,知道我将要再次使用什么。但是经常情况下,我会开始编写几行代码,然后意识到我以前编写过类似的东西。所以我会找到它并将它放入一个方法中,然后两个或更多位置现在就可以直接调用它。这就是最佳重用!

你经常可以使用分析器查找各种指标,这些指标将为您的重用和代码重复性“打分”。

祝学习愉快!


3
将代码拆分成方法的目的只是为了让代码可以被重复使用。此外,这样做还有助于测试、减少内聚性、便于调试(避免单点故障),使得在修复/增强代码时更容易确定变化的局部性。请注意,这里有一个人对细节过于苛刻,所以提供了一些额外的信息。(注意:nitpick 是个动词,意思是吹毛求疵) - Binary Worrier
不,你并不是在挑剔。我支持你 ;) - mpen
我从未说这是唯一的原因!!谁是那些降低答案的白痴!没用?是吗!我的帖子可能是你拆分代码的最好理由。这是什么地方? - Jeach

1

请看一下

过程、子例程或函数?, 面向对象编程

一个对象实际上是一组离散的函数和过程,都与特定的现实世界概念有关,例如银行账户持有人或电脑游戏中的曲棍球运动员。其他软件只能通过调用已经允许被外部调用的函数和过程来访问该对象。

基本上,您使用函数/过程/方法来封装执行特定任务的特定代码段,以便进行重用。

类用于封装/表示具有可能具有自己的数据和适合与此对象一起使用的特定函数/过程/方法的对象。

在某些语言中,类可以被制作成静态的,具有可用作辅助函数/过程/方法的静态函数/过程/方法。


1

只是提供一些信息,当你开始进行更大规模的项目时,函数何时以及为什么有用会变得更加明显。我在刚开始时使用时也有些困惑,当你的整个程序只有20-50行代码并且遵循非常线性的路径时,它们就没有太多意义了。但是当你开始重复利用代码片段时,将其放入函数中就有意义了。如果你只需要阅读描述性函数名称,而不是解密接下来的5行代码要做什么,这也使得阅读和遵循程序逻辑更容易。


0

我发现自己也在问这个问题,这让我来到了这篇文章。

我认为,对于初学者来说,关于面向对象编程(OOP)的解释中最令人困惑的事情之一是类代表着它们听起来像的东西:计算机、狗、汽车等等。

就这一点而言,这是可以接受的,但它并不严格正确,实际上更加抽象。有时候,类并不真正代表任何可以被视为明确定义的一组事物的抽象。有时候,它们只是组织东西。

因此,我认为“类”实际上是一个用词不当,或者至少是误导性的。更贴切的思考类是什么的方式可能是将其简单地看作是一个“组”或“逻辑分组”。


目前您的回答不太清楚,请编辑并补充更多细节,以便其他人能够理解它是如何回答问题的。您可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接