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

时间:2011-08-29 05:14:41

标签: oop class object

我仍然在学习Objective-C的基础知识,但我仍然试图掌握对象和类。

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

假设我正在创建一个包含所有常用功能的基本Web浏览器(加载页面,显示页面,将页面添加为书签,打印页面)。在简单的变量和方法之外,我似乎无法想到这样的应用程序。你知道,你单击一个按钮它会调用一个方法来操作一些变量。我也不禁想到这将是一个非常长的代码页面,所以我理解这将有助于分解它。

如果这一切都非常模糊,我很抱歉,我发现很难理解何时应该创建新类,何时可以在我已经在工作的类中添加另一种方法。

亲切的问候。

5 个答案:

答案 0 :(得分:6)

有很多关于新课程的提示

  • 当你可以命名时,如果你的代码中有一个你可以命名的概念,它就是新类的一个很好的候选者。

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

  • 从任何复杂的代码中提取好的函数。这应该是你的第一要务,做好一件事的好功能。然后看看函数是否都与一个概念相关并在一个类中组合在一起。

  • 你有很多代码可以做同样的事情但处理不同的变化。然后你有一个抽象/接口和几个子类。

基本上,不要害怕上课....只是拿一个平底船来做。如果这堂课似乎只是让事情变得尴尬。你刚学到了什么。因此,您需要重新考虑设计并找到另一种分解/抽象事物的方法。这完全是为了解决问题。

开始研究设计模式,你会开始看到其他人更优雅地处理尴尬局面的一些常见方式。

答案 1 :(得分:0)

课程不仅限于具体的东西,如你所提到的Car,Ford。它可以用来映射抽象的东西。至少,在您的情况下,浏览器本身,Page和Bookmark都可以是类。对象组合是面向对象编程的一种很好的实践。

答案 2 :(得分:0)

您应首先分析您的网域,即您的网站将使用的数据。只需将其写在纸上,提取名词并考虑是否可以将它们作为单独的对象呈现。在您的示例中,如果您有汽车商店网站,则可以创建Car类。很快你就可以为那辆车和其他相关课程提取不同类型的设备。这只是在对象方面进行思考而不是首先考虑方法。看here,可能会为您提供更多信息。毕竟,您可能使用数据库本身意味着将数据拆分为实体。可能很多实体也有方法。另请参阅MVC以获得有关如何在网页上代表Car的基本知识。我希望它会对你有所帮助。

答案 3 :(得分:0)

你正在考虑像C这样的过程语言。这也不错,因为过程语言有各种各样的用途,但这不是你想用Objective-C这样的面向对象语言思考的方式。

在过程语言中,您有一些数据,并且您有一些代码。两者是分开的。虽然您可以使用对数据进行操作的函数,但这些函数可以位于源中的任何位置,数据也可以。除非您注意以某种方式设计您的计划,否则没有明确的责任划分。描述事物的一种方法是编写看起来非常像面向对象代码的C代码。

在OOP中,您拥有对该数据进行操作的数据和代码。代码和数据汇集在一起​​。数据是您的类的成员变量,代码是您的类'成员函数。

您可以通过组合更简单的类的对象来组合大对象。例如,汽车将包含类引擎,车身,四类轮胎等物体。

对象也可以通过让一个对象使用另一个对象来相互连接。司机对象会使用汽车,或者汽车会使用道路。

面向对象编程并不是我们自计算机发明以来所寻求的Silver Bullet。这只是组织代码的好方法。随着您越来越有经验,您将很快发现面向对象的代码可以像程序代码一样成为一个老鼠的巢。如果是这样的话,你就不会正确地考虑你的问题。

答案 4 :(得分:0)

如果要表示某个实体,可以创建一个类。在您的示例中,您提到您正在创建一个Web浏览器,它可以执行诸如加载页面,显示页面,将页面添加为书签,打印页面等任务....您可以看到这里的内容围绕页面旋转。 ..所以你可以使页面成为一个类,并添加各种操作它的方法。如果你观察流行的浏览器,那么你想要打开一个新标签或新窗口的每个新页面都会被实例化....你可以从中获得相同的形式。

...所以

  • 只要您想要代表您的实体,就创建一个类 我想要采取行动。
  • 想要创建一个函数 任务。

快乐的编码!