开发类——典型的工作流
制定一个类
这个示例讨论如何处理的设计和实现一个类。这个类的目的是代表一个熟悉的概念(银行账户)。然而,您可以应用同样的方法对大多数类设计。
设计一个类代表一个银行账户,首先确定数据和操作表单的元素你银行账户的抽象。例如,一个银行账户:
一个帐号
账户余额
一个状态(开启,关闭等)
你必须执行特定操作银行账户:
创建一个对象为每个银行账户
银行活期存款
取钱
生成一个声明
保存和加载
BankAccount
对象
如果余额太低了,你试图取钱,银行账户广播一个通知。当这个事件发生时,银行账户广播一个通知给其他实体是用来监听这些通知。在这个例子中,客户经理的一个简化版本程序执行这一任务。
在这个例子中,一个客户经理计划决定所有银行账户的状态。这个程序监控帐户余额和分配三个值之一:
开放
账户余额是一个积极的价值透支
账户余额是透支,但200美元或更少。关闭
账户余额是透支超过200美元。
这些特性定义的需求BankAccount
和AccountManager
类。只包括什么功能需要满足您的具体目标。金宝app支持特殊类型的账户由子类化BankAccount
并将更具体的功能添加到子类。扩展AccountManager
根据需要支持新帐户类型。金宝app
指定类组件
类在属性中存储数据,实现操作的方法,支持与事件和通知侦听器。金宝app这是如何BankAccount
和AccountManager
类定义这些组件。
类数据
类定义这些属性来存储帐号,帐户余额,帐户状态:
AccountNumber
——一个属性来存储数字识别特定的帐户。MATLAB®将值赋给该属性,当你创建类的实例。只有BankAccount
类方法可以设置这个属性。的SetAccess
属性是私人
。AccountBalance
——一个属性来存储当前余额的账户。存款和取款的类操作资金向这个属性分配值。只有BankAccount
类方法可以设置这个属性。的SetAccess
属性是私人
。AccountStatus
- - -BankAccount
类定义了该属性的默认值。的AccountManager
类方法改变这个值时的价值AccountBalance
低于0
。的访问
只有属性指定AccountManager
和BankAccount
类访问该属性。AccountListener
——存储InsufficentFunds
事件监听器。保存一个BankAccount
对象不拯救这个属性,因为加载时必须重新创建侦听器对象。
类的操作
这些方法实现类中定义的操作公式:
BankAccount
——接受一个帐号和一个初始平衡代表一个帐户创建一个对象。存款
- - -更新AccountBalance
财产存款事务发生时撤回
- - -更新AccountBalance
产权退出交易发生时getStatement
——显示账户信息loadobj
——再现了客户经理从MAT-file侦听器加载对象时。
类事件
客户经理计划改变银行账户,有负平衡的状态。要实现这一行动,BankAccount
类戒断时触发一个事件导致了负平衡。因此,引发的InsufficientsFunds
从内部的事件发生撤回
方法。
定义一个事件,在一个指定一个名称事件
块。触发事件调用通知
处理类方法。因为InsufficientsFunds
不是一个预定义的事件,你可以与任何名字字符
向量和触发任何行动。
BankAccount
类的实现
重要的是要确保只有一组数据与任何对象的关联BankAccount
类。你不希望独立的副本可能的对象,例如,不同的值帐户余额。因此,实现BankAccount
类作为处理类。所有副本的一个给定的处理对象是指相同的数据。
BankAccount
课程简介
BankAccount类 | 讨论 |
---|---|
classdefBankAccount <处理
|
处理类,因为应该只有一个副本的任何实例 |
属性(访问= ? AccountManager) AccountStatus =“开放”结束 |
|
属性(SetAccess =私人)AccountNumber AccountBalance结束属性(瞬态)AccountListener结束 |
看到指定属性的属性。 |
事件InsufficientFunds结束 |
类定义事件称为 事件和听众的信息,请参阅事件。 |
方法
|
块的普通方法。看到定义类方法和功能的语法。 |
函数BA BA = BankAccount (AccountNumber InitialBalance)。AccountNumber = AccountNumber;英航。AccountBalance = InitialBalance;英航。AccountListener = AccountManager.addAccount (BA);结束 |
构造函数初始化属性值与输入参数。
|
函数存款(BA, amt)英航。AccountBalance= BA.AccountBalance + amt;如果英航。英航AccountBalance > 0。AccountStatus =“开放”;结束结束 |
如果 |
函数收回(BA, amt)如果(比较字符串(BA.AccountStatus“关闭”)& &…英航。AccountBalance < 0) disp ([“账户”num2str (BA.AccountNumber),…“已关闭”。])返回结束newbal =英航。账户Balance - amt; BA.AccountBalance = newbal;如果newbal < 0通知(BA,“InsufficientFunds”)结束结束 |
更新 监听器的更多信息,请参阅事件和监听器的语法。 |
函数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(年代);结束结束 |
保存和加载对象的更多信息,看一下保存和加载过程对象 |
结束结束 |
的静态方法 结束 |
制定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
|
这个类定义了 |
方法(静态)
|
不需要创建这个类的一个实例是静态定义的方法。看到静态方法。 |
函数assignStatus (BA)如果英航。AccountBalance < 0如果英航。AccountBalance < -200 BA。AccountStatus =“关闭”;其他的英航。AccountStatus =“透支”;结束结束结束 |
的 的 |
函数lh = addAccount (BA) lh = addlistener (BA,“InsufficientFunds”,…~ @ (src) AccountManager.assignStatus (src));结束 |
|
结束结束 |
|
使用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帐户状态:打开- - - - - - - - - - - - - - - - - - - - - - - - -