这个例子讨论如何处理一类的设计和实现。这个类的目标是代表一个熟悉的概念(银行账户)。但是,您可以使用同样的方法来最一流的设计。
要设计一个表示银行账户类,首先要确定数据的元素和形成你的银行账户的抽象操作。例如,一个银行帐户:
帐号
算一笔账
一个状态(开,关等)
您必须执行在银行帐户上的某些操作:
为每个银行帐户创建一个对象
存钱
取钱
生成的声明
保存和加载银行账户
目的
如果余额太低而你试图取钱,银行账户会发出通知。当此事件发生时,银行帐户向其他实体广播通知,这些实体旨在侦听这些通知。在本例中,一个简化版本的account manager程序执行此任务。
在这个例子中,客户经理程序确定所有银行账户的状态。这个程序监控三个值的账户余额和受让人之一:
开放
- 账户余额为正值
透支
-帐户余额透支了200美元或更少。
关闭
- 账户余额是透支超过$ 200。
这些功能定义的要求银行账户
和客户经理
类。只包括满足特定目标所需的功能。万博1manbetx通过子类化来支持特殊类型的帐户银行账户
并向子类中添加更多特定的特性。扩展客户经理
如需要支持新的账户类型。万博1manbetx
类存储性能数据,实现业务与方法,以及与事件和监听器支持通知。万博1manbetx这是怎样的银行账户
和客户经理
类定义这些组件。
这个类定义了这些属性来存储帐号、帐号余额和帐号状态:
账号
-存储识别特定帐户号码的属性。MATLAB®分配一个值,这个属性在创建类的实例。只要银行账户
类方法可以设置该属性。该SetAccess
属性是私人的
。
账户余额
-储存帐户当前余额的属性。存款和取款的类操作为这个属性赋值。只要银行账户
类方法可以设置该属性。该SetAccess
属性是私人的
。
帐户状态
- - -银行账户
类定义此属性的默认值。该客户经理
类方法更改此值时的值账户余额
下面下降0
。该访问
属性指定只客户经理
和银行账户
类才能访问这个属性。
AccountListener
- 存储为InsufficentFunds
事件侦听器。保存银行账户
对象不保存此属性,因为你必须在加载对象时,重新监听器。
这些方法实现的类配方中定义的操作:
银行账户
- 接受一个帐户号码和初始平衡,以创建表示的帐户的对象。
存款
- - -更新账户余额
当存款交易发生属性
退出
- - -更新账户余额
属性,当发生取款事务时
getStatement
-显示有关帐户的信息
loadobj
- 重新创建当您从MAT文件加载对象的客户经理听众。
客户经理程序改变有负余额的银行账户的状态。为实现此操作,银行账户
类在取款导致负余额时触发事件。因此,触发的InsufficientsFunds
事件从内发生退出
方法。
要定义一个事件,内指定一个名称事件
块。对象的调用触发事件通知
处理类方法。因为InsufficientsFunds
是不是一个预定义的事件,你可以用任何命名烧焦
用任何行动引导和触发它。
银行账户
类实现确保只有一个与任何对象相关的一组数据是非常重要的银行账户
类。你不会想的对象,可能有不同的值账户余额的独立拷贝,例如,。因此,实施银行账户
类作为句柄类。给定句柄对象的所有副本都引用相同的数据。
银行账户
类简介BankAccount类 | 讨论 |
---|---|
classdef的BankAccount <句柄
|
类的任何实例都应该只有一个副本 |
属性(接入=?的AccountManager)AccountStatus ='打开'结束 |
|
属性(SetAccess = private) AccountNumber AccountBalance结束属性(瞬态)AccountListener结束 |
看到指定属性的属性。 |
事件不充足的资金结束 |
类定义事件调用 有关事件和监听器的信息,请参阅活动。 |
方法
|
普通方法的块。看到方法和功能的语法。 |
函数BankAccount(账户编号,初始余额)AccountNumber = AccountNumber;英航。AccountBalance = InitialBalance;BA.AccountListener = AccountManager.addAccount(BA);结束 |
构造函数初始化具有输入参数的属性值。
|
函数存款(BA, amt)英航。账户余额= BA.AccountBalance + amt;如果英航。账户余额> 0 BA。AccountStatus ='打开';结束结束 |
如果 |
函数撤回(BA,AMT)如果(的strcmp(BA.AccountStatus,'关闭')& &…BA.AccountBalance <0)DISP([“帐户”,num2str(BA.AccountNumber),…“已经关闭了。”])返回结束newbal =英航。帐户Balance - amt; BA.AccountBalance = newbal;如果通知(BA,'不充足的资金')结束结束 |
更新 有关侦听器的更多信息,请参见事件和监听器语法。 |
函数getStatement (BA) disp ('-------------------------')disp ([的帐户:,num2str(BA.AccountNumber)])AB = sprintf的('%0.2F',BA.AccountBalance);disp (['CurrentBalance:',AB])DISP(['帐户状态: ',BA.AccountStatus])DISP('-------------------------')结束 |
显示有关帐户选择的信息。 |
结束方法(静态的) |
结束常规方法块。 开始静态方法块。看到静态方法 |
函数OBJ = loadobj(S)如果isstruct(S)accNum = s.AccountNumber;initBal = s.AccountBalance;OBJ =的BankAccount(accNum,initBal);其他obj。AccountListener = AccountManager.addAccount(年代);结束结束 |
有关保存和加载对象的更多信息,请参见保存并为对象的加载过程 |
结束结束 |
静态方法块的端 结束 |
客户经理
类的目的客户经理
类是向账户提供服务。为了银行账户
课堂上,客户经理
类侦听导致余额下降到负的范围内取款。当。。。的时候银行账户
对象触发InsufficientsFunds
事件中,客户经理
重置帐户状态。
该客户经理
类存储任何数据,因此并不需要的属性。该银行账户
对象存储侦听器对象的句柄。
该客户经理
执行两个操作:
指定为撤离的结果的状态,每个账户
通过监视帐户余额向系统添加帐户。
该客户经理
类实现两个方法:
assignStatus
- 方法状态分配给银行账户
对象。作为侦听器回调。
addAccount
- 方法是创建不充足的资金
侦听器。
客户经理
类该客户经理
类实现这两种方法是静态的,因为没有必要的客户经理
对象。这些方法操作上银行账户
对象。
该客户经理
不打算被实例化。分离的功能客户经理
从类银行账户
类提供了更大的灵活性和可扩展性。例如,这样做可以使您:
扩展客户经理
类,以支持其他类型万博1manbetx的账户,同时保持个人账户类的简单和专业。
在不影响已保存和加载的兼容性的情况下更改帐户状态的标准银行账户
对象。
开发一个帐户
超类的因素什么是共同的所有账户,而不需要每个子类来实现账户管理功能
客户经理
类简介的AccountManager类 | 讨论 |
---|---|
classdef客户经理
|
这个类定义 |
方法(静态的)
|
有没有必要这么定义的方法是静态创建这个类的一个实例。看到静态方法。 |
函数assignStatus(BA)如果英航。AccountBalance < 0如果BA.AccountBalance <-200 BA.AccountStatus ='关闭';其他BA.AccountStatus =“透支”;结束结束结束 |
该 该 |
函数LH = addAccount(BA)LH =的addListener(BA,'不充足的资金',…@(SRC,〜)AccountManager.assignStatus(SRC));结束 |
|
结束结束 |
|
该银行账户
类,虽然过于简单,但演示了MATLAB类的行为。例如,创建银行账户
与账户号码和$ 500的起存对象:
BA =的BankAccount(1234567,500)
BA = BankAccount with property: AccountNumber: 1234567 AccountBalance: 500 AccountListener: [1x1 event.listener]
使用getStatement
检查状态的方法:
getStatement(BA)
- - - - - - - - - - - - - - - - - - - - - - - - -账号:1234567 CurrentBalance: 500.00帐户状态:打开- - - - - - - - - - - - - - - - - - - - - - - - -
提款600美元,导致账户余额为负:
撤回(BA,600)getStatement(BA)
- - - - - - - - - - - - - - - - - - - - - - - - -账户:1234567 CurrentBalance: -100.00帐户状态:透支了- - - - - - - - - - - - - - - - - - - - - - - - -
600美元的提款触发了InsufficientsFunds
事件。由的AccountManager类导致的状态定义的当前标准透支
。
使200 $另一种回避:
撤回(BA,200)getStatement(BA)
- - - - - - - - - - - - - - - - - - - - - - - - -账户:1234567 CurrentBalance: -300.00帐户状态:关闭- - - - - - - - - - - - - - - - - - - - - - - - -
现在,帐户状态
已设置为关闭
由听众和进一步尝试提款被阻止而不会触发事件:
撤回(BA,100)
1234567账号已被关闭
如果账户余额
通过存款返回正值,那么帐户状态
返回到开放和取款再次允许:
存款(BA,700)getStatement(BA)
-------------------------帐号:1234567 CurrentBalance:400.00帐户状态:开-------------------------