面向对象编程 - 何时需要添加新类?

4

我仍在学习Objective-C的基础知识,但我仍在努力理解对象和类。

我理解通常的比喻:“汽车”是类,“福特”是该类的对象,具有“颜色”和“制造年份”等属性。但我不明白这如何在实际中使用。

假设我正在创建一个带有所有常规功能(加载页面、显示页面、将页面添加为书签、打印页面)的基本网络浏览器。除了简单的变量和方法外,我似乎想不到这样的应用程序。您点击按钮并调用一个方法,该方法操作一些变量。我也无法帮助自己,但认为这将是一个非常冗长的代码页面,因此我理解它会有所帮助,可以将其分解。

如果我的表述含糊不清,我很抱歉,我只是发现很难理解何时应该创建新类,以及何时可以在已经工作的类中添加另一个方法。

此致敬礼。

5个回答

6

很多提示来自一个新类

  • 当你可以命名一些东西时,如果代码中有一个概念可以被命名,那么它就是新类的一个很好的候选对象。

  • 如果你有几个函数操作相同的变量。如果你最终将同样的变量传递给多个函数,那么这些变量和函数很可能应该是一个类。

  • 从任何复杂的代码中提取好的函数。这应该是你的首要任务,好的函数只做一件事情。然后看看这些函数是否都与一个概念相关,并在一个类中进行分组。

  • 您有大量的代码,基本上都在处理不同的变化,但却是做同一件事情。那么就会有一个抽象/接口和多个子类。

基本上,不要害怕制作一个类...只需尝试并去做它。如果似乎这个类只会让事情变得困难,请认真思考设计并找到另一种分解/抽象的方法。这就是所有的尝试。

开始查看设计模式,你将开始看到其他人更优雅地处理棘手情况的一些常见方式。


0

类不仅局限于具体事物,如你提到的汽车、福特。它还可以用于映射抽象概念。至少在你的情况下,浏览器本身、页面和书签都可以作为类。对象组合是面向对象编程中的一种良好实践。


例如,将一个类命名为“Print”,并在该类中包含诸如“changePageOrientation”和“showPrintPreview”之类的方法,这样做是可以接受的吗?然后,在其他类中,如果我们想要打印某些内容,我们将创建一个“Print”类的实例,并向这些方法提供相关信息(例如要打印的数据)? - achiral

0
你应该首先分析你的领域,你的网站将使用哪些数据。把它写在纸上,提取名词并思考是否可以将它们作为单独的对象呈现。例如,如果你有一个汽车商店网站,你可以创建一个Car类。很快你就能够提取出该汽车的不同类型的设备和其他相关类。这只是关于以对象而不是方法的方式思考的问题。看看这里,也许会给你更多信息。毕竟,你可能正在处理数据库,这本身就意味着要将数据拆分成实体。很可能这些实体也有方法。还可以看看MVC,了解如何在网页上表示汽车的基本知识。希望这能对你有所帮助。

0

你现在的思维方式是面向过程编程语言,比如C语言。这并不是坏事,因为面向过程编程语言有各种用途,但是当你使用面向对象编程语言,比如Objective-C时,你需要改变思维方式。

在面向过程编程语言中,你有一些数据和一些代码。这两者是分开的。虽然你可以有操作数据的函数,但是这些函数可以在源代码的任何地方,数据也可以在任何地方。除非你特别设计程序,否则没有明确的责任划分。一种划分的方法是编写类似于面向对象代码的C代码。

在面向对象编程中,你有数据和操作该数据的代码。代码和数据是相互关联的。数据是类的成员变量,代码是类的成员函数。

你可以通过组合简单类的对象来构建大型对象。例如,汽车将包含引擎、车身、四个轮胎等类的对象。

对象还可以通过一个对象使用另一个对象来连接。驾驶员对象将使用汽车,或者汽车将使用道路。

面向对象编程并不是从计算机被发明以来我们一直期待的灵丹妙药。它只是一种组织代码的好方法。随着您的经验越来越丰富,您很快会发现,面向对象的代码可能会像过程式代码一样混乱不堪。如果是这种情况,那么您没有正确思考问题。


0
当你想要表示某个实体时,可以创建一个类。在你的例子中,你提到正在创建一个 Web 浏览器,它会执行加载页面、显示页面、将页面添加为书签、打印页面等任务......你可以看到这里的所有事物都围绕着页面展开......因此你可以将页面作为一个类,并添加各种操作它的方法。如果你观察流行的浏览器,每次要打开一个新页面时,都会实例化一个新的选项卡或窗口....你可以从中推导出相同的结果。
所以...
  • 当您想要表示希望对其执行操作的实体时,请创建一个类。
  • 当您想要执行任务时,请创建一个函数。
快乐编程!

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