0

我已经定义了两个对象 X 和 Y 都具有与矩阵相同大小的数组

    x:= Matrix new.
    x
      rows: 2 columns: 2;
      row: 1 column: 1 put: 2;
      row: 2 column: 1 put: 2;
      row: 1 column: 2 put: 2;
      row: 2 column: 2 put: 2.
    #(2 2 2 2)  "The x returns an array"
    y := Matrix new
    y
     rows: 2 columns: 2;
     row: 1 column: 1 put: 2;
     row: 2 column: 1 put: 2;
      row: 1 column: 2 put: 2;
     row: 2 column: 2 put: 2.
    #(2 2 2 2) "The object y returns an array"

笔记:

  • rows:columns 是一种给出矩阵行和列的方法
  • row:column 是将值放入矩阵的方法。
4

1 回答 1

0

因此,您创建了一个类 Matrix。它类似于 Array 但专门用于类似矩阵的消息(您使用的消息)。现在您创建了 Matrix 的两个实例 x 和 y 并使用您定义的消息放置它们的条目。到目前为止一切都很好。

现在您想要“保存”这些实例,大概是为了对它们进行操作以执行其他消息,例如求和、乘法、转置、标量乘积等。您的问题是“我如何保存 x 和 y?” 答案是:不在类 Matrix 中!.

一个好主意是创建 TestCase 的子类,即 MatrixTest,并在其中添加用于测试的方法,例如 testSum、testMultiplication、testScalarMultiplication、testTransposition 等。将创建 x 和 y 的代码移动到这些方法中,并将 Matrix 的这些实例保存在方法的临时对象中。类似的东西:

MatrixText >> testSum
| x y z |
x := Matrix new rows: 2 columns: 2.
x row: 1 column: 1 put: 2.
x row: 1 column: 2 put: 2.
"<etc>"
y := Matrix new rows: 2 columns: 2.
y row: 1 column: 1 put: 2.
"<etc>"
z = x + y (you need to define the method + in Matrix!).
self assert: (z row: 1 column: 1) = 4.
"<etc>"

一般来说,您不会将 Matrix 的实例保存在 Matrix 中,而是保存在其他使用矩阵的类中。

于 2014-12-20T02:45:19.183 回答