【问题标题】:should I use aggregation in this case?在这种情况下我应该使用聚合吗?
【发布时间】:2013-05-16 05:16:58
【问题描述】:

如果我有一个名为 Payment 的类,它是另一个名为 Card 的类的超类,我如何将该类与另一个验证卡是否有效的类结合起来。 我的 UML 图是这样的:

Payment<---------Card

我已经想到了两种方法,但我想知道哪一种是正确的:

1) 带有关联的模型来检查信用卡是否有效,但不将其加入到 paymentCard:

Card_list---1--------------1*---<>Card

所以在我的班级卡片中,我称之为:

class paymentCard extends Payment
{
     public authorized()        ---abstract method
     {
          if card.verified(card_number) return true;     ---here I call the card class
          else return false;
     }
}

2) 我读到我可以使用聚合,但我有点怀疑如何使用它:

class paymentCard extends Payment
{
          Card creditcard                  //aggregation
          public authorized()
          {
               creditcard=new Card(numberCard)
               if creditcard.verified() return true;
               else return false;
          }
 }

这两种形式哪一种更好?对我来说,第一个看起来像是对也可以是数据库的外部类的查询,而第二个我不太确定

有什么意见吗?

【问题讨论】:

    标签: oop aggregation


    【解决方案1】:

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

    IMO,Payment 有一个 payment_method 可以是 ByCard、By...,所以:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 是的@Henrique Barcelos,应该有一组对象来存储有效的信用卡号码
      猜你喜欢
      • 2011-01-17
      • 2022-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      • 2010-09-05
      • 2017-05-09
      • 1970-01-01
      相关资源
      最近更新 更多