开发类 - 典型的工作流程

制定一个类

这个例子讨论如何处理一类的设计和实现。这个类的目标是代表一个熟悉的概念(银行账户)。但是,您可以使用同样的方法来最一流的设计。

要设计一个表示银行账户类,首先要确定数据的元素和形成你的银行账户的抽象操作。例如,一个银行帐户:

  • 帐号

  • 算一笔账

  • 一个状态(开,关等)

您必须执行在银行帐户上的某些操作:

  • 为每个银行帐户创建一个对象

  • 存钱

  • 取钱

  • 生成的声明

  • 保存和加载银行账户目的

如果余额太低而你试图取钱,银行账户会发出通知。当此事件发生时,银行帐户向其他实体广播通知,这些实体旨在侦听这些通知。在本例中,一个简化版本的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结束

帐户状态通过属性访问客户经理类方法。

账号账户余额属性有私人设置的访问。

AccountListener财产是短暂的,因此监听器手柄不会被保存。

看到指定属性的属性

事件不充足的资金结束

类定义事件调用InsufficentFunds退出方法触发事件,当账户余额为负。

有关事件和监听器的信息,请参阅活动

方法

普通方法的块。看到方法和功能的语法。

函数BankAccount(账户编号,初始余额)AccountNumber = AccountNumber;英航。AccountBalance = InitialBalance;BA.AccountListener = AccountManager.addAccount(BA);结束

构造函数初始化具有输入参数的属性值。

AccountManager.addAccount是的静态方法客户经理类。创建监听器不充足的资金事件并存储侦听器句柄AccountListener属性。

函数存款(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,'不充足的资金'结束结束

更新账户余额属性。如果账户余额的值是否定的,因为退出的结果,通知触发器InsufficentFunds事件。

有关侦听器的更多信息,请参见事件和监听器语法

函数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(年代);结束结束

loadobj方法:

  • 如果负载操作失败,创建从对象结构

  • 使用新创建的侦听器重新创建侦听器银行账户对象作为源。

有关保存和加载对象的更多信息,请参见保存并为对象的加载过程

结束结束

静态方法块的端

结束classdef

展开类代码

制定客户经理

的目的客户经理类是向账户提供服务。为了银行账户课堂上,客户经理类侦听导致余额下降到负的范围内取款。当。。。的时候银行账户对象触发InsufficientsFunds事件中,客户经理重置帐户状态。

客户经理类存储任何数据,因此并不需要的属性。该银行账户对象存储侦听器对象的句柄。

客户经理执行两个操作:

  • 指定为撤离的结果的状态,每个账户

  • 通过监视帐户余额向系统添加帐户。

类组件

客户经理类实现两个方法:

  • assignStatus- 方法状态分配给银行账户对象。作为侦听器回调。

  • addAccount- 方法是创建不充足的资金侦听器。

实施客户经理

客户经理类实现这两种方法是静态的,因为没有必要的客户经理对象。这些方法操作上银行账户对象。

客户经理不打算被实例化。分离的功能客户经理从类银行账户类提供了更大的灵活性和可扩展性。例如,这样做可以使您:

  • 扩展客户经理类,以支持其他类型万博1manbetx的账户,同时保持个人账户类的简单和专业。

  • 在不影响已保存和加载的兼容性的情况下更改帐户状态的标准银行账户对象。

  • 开发一个帐户超类的因素什么是共同的所有账户,而不需要每个子类来实现账户管理功能

客户经理类简介

的AccountManager类 讨论
classdef客户经理

这个类定义InsufficentFunds事件侦听器和侦听器回调。

方法(静态的)

有没有必要这么定义的方法是静态创建这个类的一个实例。看到静态方法

函数assignStatus(BA)如果英航。AccountBalance < 0如果BA.AccountBalance <-200 BA.AccountStatus ='关闭';其他BA.AccountStatus =“透支”;结束结束结束

assignStatus方法的回调InsufficentFunds事件侦听器。它确定a的值银行账户目的帐户状态财产基础上的价值账户余额属性。

银行账户类构造函数调用客户经理addAccount方法创建并存储此侦听器。

函数LH = addAccount(BA)LH =的addListener(BA,'不充足的资金'@(SRC,〜)AccountManager.assignStatus(SRC));结束

addAccount创建用于监听器InsufficentFunds银行账户类定义。

看到控制监听器生命周期

结束结束

结束语句方法classdef

展开类代码

使用BankAccount对象

银行账户类,虽然过于简单,但演示了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帐户状态:开-------------------------