【问题标题】:Objected-oriented programming - When to add a new class?面向对象编程 - 何时添加新类?
【发布时间】:2011-08-29 05:14:41
【问题描述】:

我仍在大量学习 Objective-C 的基础知识,但我仍在努力掌握对象和类。

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

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

很抱歉,如果这一切都非常模糊,我只是觉得很难理解什么时候应该创建新类,什么时候可以向我已经在使用的类添加另一个方法。

亲切的问候。

【问题讨论】:

    标签: oop class object


    【解决方案1】:

    对新课程的大量提示

    • 当您可以命名某些东西时,如果您的代码中有一个可以命名的概念,那么它就是一个新类的良好候选者。

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

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

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

    基本上,不要害怕上课....只要下注然后去做。如果看起来课堂只是让事情变得尴尬。你刚刚学到了一些东西。因此,您需要重新考虑设计并找到另一种分解/抽象事物的方法。一切都是为了尝试。

    开始研究设计模式,您就会开始看到其他人处理尴尬情况的一些常见方法更优雅一些。

    【讨论】:

      【解决方案2】:

      课程不限于你提到的汽车,福特。它可以用来映射抽象的东西。至少,就您的浏览器本身而言,Page 和 Bookmark 都可以是类。对象组合是面向对象编程的一个很好的实践。

      【讨论】:

      • 那么,例如,将一个类命名为“Print”就可以了,并且在这个类内部有诸如“changePageOrientation”和“showPrintPreview”之类的方法?然后在其他类中,如果我们想打印一些东西,我们会创建一个“打印”类的实例并为这些方法提供相关信息(例如要打印的数据)?
      【解决方案3】:

      您应该首先分析您的域,即您的网站将使用的数据。只需将其写在纸上,提取名词并考虑是否可以将它们作为单独的对象呈现。在您的示例中,如果您有一个汽车商店网站,您可以创建一个 Car 类。很快,您将能够为该汽车和其他相关类别提取不同类型的设备。这只是首先考虑对象而不是方法的问题。看here,可能会给你更多信息。毕竟,您可能使用的数据库本身意味着将数据拆分为实体。可能大部分实体也有方法。还请查看MVC 以获取有关如何在网页上表示汽车的基本知识。希望对你有一点帮助。

      【讨论】:

        【解决方案4】:

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

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

        在 OOP 中,您拥有数据和对这些数据进行操作的代码。代码和数据一起去。数据是类的成员变量,代码是类的成员函数。

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

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

        自计算机发明以来,面向对象的编程并不是我们一直在寻找的灵丹妙药。这只是组织代码的好方法。随着您的经验越来越丰富,您会很快发现面向对象的代码与过程代码一样是老鼠窝。如果是这样的话,你就没有正确地考虑你的问题。

        【讨论】:

          【解决方案5】:

          当你想代表某个实体时,你创建了一个类。在您的示例中,您提到您正在创建一个 Web 浏览器,该浏览器执行诸如加载页面、显示页面、将页面添加为书签、打印页面等任务......正如您在此处看到的那样,事情正在围绕页面旋转.. ..因此您可以使页面成为一个类并添加对其进行操作的各种方法。如果您观察流行的浏览器,对于您想要打开一个新选项卡或一个新窗口的每个新页面都会实例化......您可以从相同的形式派生出来。

          所以....

          • 只要你想代表一个实体,你就可以创建一个类 会想采取行动。
          • 当你想做一个函数时创建一个函数 任务。

          编码愉快!

          【讨论】:

            猜你喜欢
            • 2020-05-18
            • 2019-02-25
            • 2010-09-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-11-30
            • 2014-06-03
            相关资源
            最近更新 更多