主要内容

开发类——典型的工作流

制定一个类

这个示例讨论如何处理的设计和实现一个类。这个类的目的是代表一个熟悉的概念(银行账户)。然而,您可以应用同样的方法对大多数类设计。

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

  • 一个帐号

  • 账户余额

  • 一个状态(开启,关闭等)

你必须执行特定操作银行账户:

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

  • 银行活期存款

  • 取钱

  • 生成一个声明

  • 保存和加载BankAccount对象

如果余额太低了,你试图取钱,银行账户广播一个通知。当这个事件发生时,银行账户广播一个通知给其他实体是用来监听这些通知。在这个例子中,客户经理的一个简化版本程序执行这一任务。

在这个例子中,一个客户经理计划决定所有银行账户的状态。这个程序监控帐户余额和分配三个值之一:

  • 开放账户余额是一个积极的价值

  • 透支账户余额是透支,但200美元或更少。

  • 关闭账户余额是透支超过200美元。

这些特性定义的需求BankAccountAccountManager类。只包括什么功能需要满足您的具体目标。金宝app支持特殊类型的账户由子类化BankAccount并将更具体的功能添加到子类。扩展AccountManager根据需要支持新帐户类型。金宝app

指定类组件

类在属性中存储数据,实现操作的方法,支持与事件和通知侦听器。金宝app这是如何BankAccountAccountManager类定义这些组件。

类数据

类定义这些属性来存储帐号,帐户余额,帐户状态:

  • AccountNumber——一个属性来存储数字识别特定的帐户。MATLAB®将值赋给该属性,当你创建类的实例。只有BankAccount类方法可以设置这个属性。的SetAccess属性是私人

  • AccountBalance——一个属性来存储当前余额的账户。存款和取款的类操作资金向这个属性分配值。只有BankAccount类方法可以设置这个属性。的SetAccess属性是私人

  • AccountStatus- - -BankAccount类定义了该属性的默认值。的AccountManager类方法改变这个值时的价值AccountBalance低于0。的访问只有属性指定AccountManagerBankAccount类访问该属性。

  • AccountListener——存储InsufficentFunds事件监听器。保存一个BankAccount对象不拯救这个属性,因为加载时必须重新创建侦听器对象。

类的操作

这些方法实现类中定义的操作公式:

  • BankAccount——接受一个帐号和一个初始平衡代表一个帐户创建一个对象。

  • 存款- - -更新AccountBalance财产存款事务发生时

  • 撤回- - -更新AccountBalance产权退出交易发生时

  • getStatement——显示账户信息

  • loadobj——再现了客户经理从MAT-file侦听器加载对象时。

类事件

客户经理计划改变银行账户,有负平衡的状态。要实现这一行动,BankAccount类戒断时触发一个事件导致了负平衡。因此,引发的InsufficientsFunds从内部的事件发生撤回方法。

定义一个事件,在一个指定一个名称事件块。触发事件调用通知处理类方法。因为InsufficientsFunds不是一个预定义的事件,你可以与任何名字字符向量和触发任何行动。

BankAccount类的实现

重要的是要确保只有一组数据与任何对象的关联BankAccount类。你不希望独立的副本可能的对象,例如,不同的值帐户余额。因此,实现BankAccount类作为处理类。所有副本的一个给定的处理对象是指相同的数据。

BankAccount课程简介

BankAccount类 讨论
classdefBankAccount <处理

处理类,因为应该只有一个副本的任何实例BankAccount处理的比较和价值类

属性(访问= ? AccountManager) AccountStatus =“开放”结束

AccountStatus包含账户的状态取决于当前余额。有限的访问BankAccountAccountManager类。类成员的访问

属性(SetAccess =私人)AccountNumber AccountBalance结束属性(瞬态)AccountListener结束

AccountStatus属性访问AccountManager类方法。

AccountNumberAccountBalance有私人设置访问属性。

AccountListener财产是短暂的所以侦听器处理不是得救。

看到指定属性的属性

事件InsufficientFunds结束

类定义事件称为InsufficentFunds撤回方法触发事件当账户余额变成负的。

事件和听众的信息,请参阅事件

方法

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

函数BA BA = BankAccount (AccountNumber InitialBalance)。AccountNumber = AccountNumber;英航。AccountBalance = InitialBalance;英航。AccountListener = AccountManager.addAccount (BA);结束

构造函数初始化属性值与输入参数。

AccountManager.addAccount是静态的方法AccountManager类。创建侦听器InsufficientFunds事件和商店侦听器处理AccountListener财产。

函数存款(BA, amt)英航。AccountBalance= BA.AccountBalance + amt;如果英航。英航AccountBalance > 0。AccountStatus =“开放”;结束结束

存款调整值AccountBalance财产。

如果AccountStatus关闭和随后的存款了AccountBalance成积极的范围,然后AccountStatus复位为开放

函数收回(BA, amt)如果(比较字符串(BA.AccountStatus“关闭”)& &英航。AccountBalance < 0) disp ([“账户”num2str (BA.AccountNumber),“已关闭”。])返回结束newbal =英航。账户Balance - amt; BA.AccountBalance = newbal;如果newbal < 0通知(BA,“InsufficientFunds”)结束结束

更新AccountBalance财产。如果账户余额的值是负的,通知触发器InsufficentFunds事件。

监听器的更多信息,请参阅事件和监听器的语法

函数getStatement (BA) disp (“- - - - - - - - - - - - - - - - - - - - - - - - -”)disp ([的帐户:num2str (BA.AccountNumber)]) ab = sprintf (' % 0.2 f ',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方法:

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

  • 再现了侦听器使用新创建的BankAccount对象作为源。

保存和加载对象的更多信息,看一下保存和加载过程对象

结束结束

的静态方法

结束classdef

扩展类代码

制定AccountManager

的目的AccountManager类是提供服务帐户。为BankAccount类,AccountManager类监听撤资,导致平衡落入消极的范围。当BankAccount对象触发InsufficientsFunds事件,AccountManager重置帐户状态。

AccountManager类存储任何数据,所以不需要的属性。的BankAccount对象存储处理的侦听器对象。

AccountManager执行两个操作:

  • 分配一个状态为每个帐户的取款

  • 向系统添加一个账户监控账户余额。

类组件

AccountManager类实现的两种方法:

  • assignStatus——方法分配一个地位BankAccount对象。作为侦听器回调。

  • addAccount——创建的方法InsufficientFunds侦听器。

实现AccountManager

AccountManager类实现这两种方法都是静态的,因为没有需要AccountManager对象。这些方法操作BankAccount对象。

AccountManager不是为了被实例化。分离的功能AccountManager类的BankAccount类提供了更大的灵活性和可扩展性。例如,这样做使您能够:

  • 扩展AccountManager类来支持其他类型的金宝app账户,同时保持简单和专业的个人帐户类。

  • 变化的标准帐户状态而不影响保存和加载的兼容性BankAccount对象。

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

AccountManager课程简介

AccountManager类 讨论
classdefAccountManager

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

方法(静态)

不需要创建这个类的一个实例是静态定义的方法。看到静态方法

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

assignStatus方法的回调InsufficentFunds事件监听器。它决定的价值BankAccount对象AccountStatus基于价值的财产AccountBalance财产。

BankAccount类构造函数调用AccountManageraddAccount方法来创建和存储此侦听器。

函数lh = addAccount (BA) lh = addlistener (BA,“InsufficientFunds”,~ @ (src) AccountManager.assignStatus (src));结束

addAccount创建的侦听器InsufficentFunds事件,BankAccount类定义。

看到控制侦听器生命周期

结束结束

结束语句方法classdef

扩展类代码

使用BankAccount对象

BankAccount类,虽然过于简单,展示了MATLAB类的行为。例如,创建一个BankAccount对象与一个帐号和一个初始存款500美元:

英航= BankAccount (1234567, 500)
英航= BankAccount的属性:AccountNumber: 1234567 AccountBalance: 500 AccountListener: [1 x1 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帐户状态:关闭- - - - - - - - - - - - - - - - - - - - - - - - -

现在,AccountStatus被设置为关闭侦听器和阻止进一步尝试取款没有触发事件:

收回(BA, 100)
账户1234567已经关闭。

如果AccountBalance返回一个积极价值的存款,然后呢AccountStatus再次回到开放,允许提款:

存款(BA, 700) getStatement (BA)
- - - - - - - - - - - - - - - - - - - - - - - - -账号:1234567 CurrentBalance: 400.00帐户状态:打开- - - - - - - - - - - - - - - - - - - - - - - - -