我怎么知道我是否需要在面向对象编程中创建一个类?

时间:2017-03-14 20:13:00

标签: swift oop

我正在尝试在XCode中创建一个物理应用,它将近似波函数并返回允许的能量。我是对象/类的新手,所以我想知道如何知道我是否应该使用类。

目前,我为Wavefunction创建了一个类,为Potential创建了一个类(“potential”只是来自外部文件的数据,表示“字段”,可以这么说)。现在我想知道我是否需要为Constants创建一个类,它将包含与物理相关的所有任意常量,例如-2m/hbar^2

我如何决定是否需要这门课?

2 个答案:

答案 0 :(得分:2)

您不需要为常量创建一个类 - 只需使用枚举,这是一种更简单,更轻松的方式来表示这些静态值:

enum PhysicalConstants {
    static let speedOfLight = 299792458         //meters per sec
    static let atomicWeightOfCobalt 58.933195   //u ± 0.000005
}

您可以将它们存储在自己的文件中,例如 constants.swift ,然后您可以在代码中的任何位置调用它们:

let circumference = PhysicalConstants.pi * 2 * r

至于更一般的问题,答案取决于几个因素 - 是否存在具有满足您需求的功能的现有对象?您是否期望您将创建一个有序的结构层次结构,以继承彼此的功能?两者都会建议对象。

总的来说,虽然Swift在允许你继续使用传统可可编程的纯面向对象方法的同时,如果你想要你的解决方案,往往会偏离自定义数据结构的对象,例如你所描述的那些“swifty”(也就是说,安全且易于阅读)。

当然,恕我直言。

答案 1 :(得分:2)

您是否需要创建Constants类的实例?不,所以它不应该是一个班级。

定义常量的更合适的方法是Double的静态属性,就像pi被定义为Double的静态属性一样。

extension Double {

    // The Dirac constant in Joule-seconds, equal to the Planck constant divided by 2π.
    static let diracConstant = 1.054_571_8e-34 // in Joule-seconds

    // Or you can spell it this way if you want.
    static let hBar = 1.054_571_8-34

    // Or even this way! ħ is Unicode U+0127 LATIN SMALL LETTER H WITH STROKE
    static let ħ = 1.054_571_8e-34

}

然后您可以像这样明确地访问它:

-2 * m / (Double.diracConstant * Double.diracConstant)
-2 * m / (Double.hBar * Double.hBar)
-2 * m / (Double.ħ * Double.ħ)

据推测,m已经是Double类型,因此您可以使用“点语法”使表达式更短:

-2 * m / (.diracConstant *.diracConstant)
-2 * m / (.hBar *.hBar)
-2 * m / (.ħ *.ħ)

或者,如果您定义square函数:

func square(_ x: Double) -> Double { return x * x }

然后你可以这样说:

-2 * m / square(.diracConstant)
-2 * m / square(.hBar)
-2 * m / square(.ħ)

如果您使用Float代替Double进行计算,则可以使用Float类型执行所有操作。