Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 在这种情况下我应该使用聚合吗?_Oop_Aggregation - Fatal编程技术网

Oop 在这种情况下我应该使用聚合吗?

Oop 在这种情况下我应该使用聚合吗?,oop,aggregation,Oop,Aggregation,如果我有一个名为Payment的类,它是另一个名为Card的类的超类,那么如何将该类与另一个验证该卡是否有效的类联接起来。 我的UML图如下所示: Payment<---------Card 2) 我已经读到我可以使用聚合,但我有点怀疑如何使用它: class paymentCard extends Payment { Card creditcard //aggregation public authorized(

如果我有一个名为Payment的类,它是另一个名为Card的类的超类,那么如何将该类与另一个验证该卡是否有效的类联接起来。 我的UML图如下所示:

Payment<---------Card
2) 我已经读到我可以使用聚合,但我有点怀疑如何使用它:

class paymentCard extends Payment
{
          Card creditcard                  //aggregation
          public authorized()
          {
               creditcard=new Card(numberCard)
               if creditcard.verified() return true;
               else return false;
          }
 }
两种形式中哪一种更好?对我来说,第一个看起来像是对外部类的查询,也可以是数据库,而第二个我不太确定


有什么意见吗?

有一天你可能会想要其他的付款方式

在国际海事组织,付款有一种付款方式,可以是信用卡,也可以是…,因此:

class Payment
{
    protected PaymentMethodoption;
}

abstract class PaymentMethod
{
    public abstract bool authorized();
}

class PaymentByCreditCard : PaymentMethod
{
    public override bool authorized() { return card.verified(card_number); }
}

你基本上回答了你自己的问题。关键问题是:创建信用卡对象的成本有多高?可能不只是像第二个例子那样向它传递一个数字,这意味着你可能会将它们存储在其他地方。

yes@Henrique Barcelos,应该有一个对象数组来存储有效的信用卡号
class paymentCard extends Payment
{
          Card creditcard                  //aggregation
          public authorized()
          {
               creditcard=new Card(numberCard)
               if creditcard.verified() return true;
               else return false;
          }
 }
class Payment
{
    protected PaymentMethodoption;
}

abstract class PaymentMethod
{
    public abstract bool authorized();
}

class PaymentByCreditCard : PaymentMethod
{
    public override bool authorized() { return card.verified(card_number); }
}