这个例子讨论了如何设计和实现一个类。这类的目标是表示一个熟悉的概念(银行帐户)。但是,您可以对大多数类设计应用相同的方法。
要设计表示银行账户的类,首先确定构成银行账户抽象的数据元素和操作。例如,银行账户具有:
帐号
帐户余额
状态(打开、关闭等)
您必须对银行帐户执行某些操作:
为每个银行帐户创建一个对象
银行活期存款
取款
生成语句
保存并加载银行账户
对象
如果余额过低,并且您试图取款,则银行帐户会广播通知。发生此事件时,银行帐户会向其他实体广播通知,这些实体旨在侦听这些通知。在本例中,帐户管理器程序的简化版本会执行此任务。
在本例中,一个帐户管理程序决定所有银行帐户的状态。该程序监视帐户余额,并分配以下三个值中的一个:
打开
—帐户余额为正值
透支
-账户余额已透支,但透支额不超过200美元。
关闭
-账户余额透支超过200美元。
这些特性定义了需求银行账户
和会计经理
类。仅包括满足特定目标所需的功能。通过子类化支持特殊类型的帐户万博1manbetx银行账户
以及向子类添加更具体的功能会计经理
根据需要支持新的帐户类型。万博1manbetx
类将数据存储在属性中,使用方法实现操作,并支持使用事件和侦听器的通知万博1manbetx银行账户
和会计经理
类定义这些组件。
该类定义以下属性以存储帐号、帐户余额和帐户状态:
帐号
-用于存储标识特定帐户的编号的属性。MATLAB®创建类的实例时为此属性指定值。仅限银行账户
类方法可以设置此属性设置访问
属性是私有的
.
AccountBalance
-存储帐户当前余额的属性。存款和取款的类操作为该属性赋值。仅银行账户
类方法可以设置此属性设置访问
属性是私有的
.
AccountStatus
-银行账户
类定义此属性的默认值。这个会计经理
类方法更改此值时AccountBalance
低于0
.这个通道
属性指定只有会计经理
和银行账户
类可以访问此属性。
会计监听器
-储存InsufficentFunds
事件侦听器。拯救一个银行账户
对象不保存此属性,因为加载对象时必须重新创建侦听器。
这些方法实现类公式中定义的操作:
银行账户
—接受帐户编号和初始余额,以创建表示帐户的对象。
押金
-更新AccountBalance
发生存款交易时的属性
撤退
-更新AccountBalance
发生取款交易时的属性
getStatement
-显示有关帐户的信息
loadobj
-从MAT文件加载对象时重新创建帐户管理器侦听器。
帐户管理器程序更改具有负余额的银行帐户的状态银行账户
类在支取导致负余额时触发事件资金不足
事件从内部发生撤退
方法。
要定义事件,请在事件
通过调用通知
处理类方法。因为资金不足
不是一个预定义的事件,您可以用any字符
向量,并用任何动作触发它。
银行账户
类实现类的任何对象只关联一组数据是很重要的银行账户
类。您不希望对象的独立副本具有不同的帐户余额值。因此,实现银行账户
类作为句柄类。给定句柄对象的所有副本引用相同的数据。
银行账户
课程简介银行帐户类别 | 讨论 |
---|---|
classdef银行账户 |
句柄类,因为该类的任何实例都应该只有一个副本 |
性质(Access=?AccountManager)AccountStatus=“开放”结束 |
|
性质(SetAccess=private)AccountNumber AccountBalance结束性质(暂时)帐户侦听器结束 |
看见指定属性属性. |
事件InsufficientFunds结束 |
类定义调用的事件 有关事件和侦听器的信息,请参见事件. |
方法
|
普通方法块。看见定义类方法和函数对于语法。 |
功能BA=银行账户(AccountNumber,InitialBalance)BA.AccountNumber=AccountNumber;BA.AccountBalance=InitialBalance;BA.AccountListener=AccountManager.addAccount(BA);结束 |
构造函数使用输入参数初始化属性值。
|
功能存款(BA,amt)BA.AccountBalance=BA.AccountBalance+amt;如果BA.AccountBalance>0 BA.AccountStatus=“开放”;结束结束 |
如果 |
功能收回(BA, amt)如果(比较字符串(BA。账户Status,“关闭”)&&...BA.账户余额<0)显示([“账户”,num2str(英国会计科目编号),...“已经关门了。”])返回结束newbal=BA.AccountBalance—金额;BA.AccountBalance=newbal;如果纽巴<0通知(BA,“资金不足”)结束结束 |
更新 有关侦听器的详细信息,请参阅事件和侦听器语法. |
功能getStatement(BA)disp('-------------------------')disp([“账户:”,num2str(BA.AccountNumber)]) ab = sprintf(' % 0.2 f ',BA.会计结余);disp(['当前余额:',ab])disp(['帐户状态:',BA.AccountStatus])显示('-------------------------')结束 |
显示选定的帐户信息。 |
结束方法(静态) |
结束普通方法块。 开始的静态方法阻塞。看见静态方法 |
功能obj = loadobj (s)如果isstruct(s)accNum=s.AccountNumber;initBal=s.AccountBalance;obj=BankAccount(accNum,initBal);其他的obj.AccountListener=AccountManager.addAccount;结束结束 |
有关保存和加载对象的详细信息,请参见对象的保存和加载过程 |
结束结束 |
静态方法块的结束 结束 |
会计经理
等级会议的目的会计经理
类是为帐户提供服务银行账户
类,会计经理
类侦听导致余额下降到负值范围的取款银行账户
对象触发资金不足
事件,会计经理
重置帐户状态。
这个会计经理
类不存储数据,因此不需要属性。这个银行账户
对象存储侦听器对象的句柄。
这个会计经理
执行两个操作:
作为提款的结果,为每个帐户分配一个状态
通过监视帐户余额向系统添加帐户。
这个会计经理
类实现了两个方法:
转让地位
—指定状态给a的方法银行账户
对象。用作侦听器回调。
帐户
-方法创建InsufficientFunds
听众。
会计经理
等级这个会计经理
类以静态方式实现这两个方法,因为不需要会计经理
对象。这些方法在银行账户
物体。
这个会计经理
不打算实例化。分离会计经理
来自银行账户
类提供了更大的灵活性和可扩展性。例如,这样做使您能够:
延伸会计经理
类以支持其他类型的万博1manbetx帐户,同时保持单个帐户类的简单和专门化。
更改帐户状态的条件,而不影响已保存和已加载帐户的兼容性银行账户
物体。
发展账户
一个超类,它考虑了所有帐户的共同点,而不要求每个子类实现帐户管理功能
会计经理
课程简介AccountManager类 | 讨论 |
---|---|
classdef会计经理
|
此类定义了 |
方法(静态)
|
不需要创建此类的实例,因此定义的方法是静态的。请参阅静态方法. |
功能assignStatus (BA)如果BA.AccountBalance<0如果BA.账户余额<-200 BA.账户状态=“关闭”;其他的英航。AccountStatus =“透支”;结束结束结束 |
这个 这个 |
功能lh=addAccount(BA)lh=addlistener(BA,“资金不足”,...@(src,~)AccountManager.assignStatus(src));结束 |
|
结束结束 |
|
这个银行账户
类,虽然过于简单,但它演示了MATLAB类的行为银行账户
对象的帐号和初始存款为500美元:
英航= BankAccount (1234567, 500)
BA=具有以下属性的银行帐户:AccountNumber:1234567 AccountBalance:500 AccountListener:[1x1事件.侦听器]
使用getStatement
检查状态的方法:
getStatement(文学学士)
-------------------------账户:1234567当前余额:500.00账户状态:未结-------------------------
提取600美元,导致账户余额为负:
收回(BA,600)对账单(BA)
-------------------------账户:1234567当前余额:-100.00账户状态:透支-------------------------
600美元的提款引发了这场危机资金不足
事件。由AccountManager类定义的当前标准导致状态为透支
.
再次提取200美元:
收回(BA,200)对账单(BA)
-------------------------账户:1234567当前余额:-300.00账户状态:已关闭-------------------------
现在AccountStatus
已设置为关闭
通过侦听器和进一步尝试进行提取被阻止,而不触发事件:
收回(BA, 100)
账户1234567已关闭。
如果AccountBalance
由存款返回正值,则AccountStatus
返回到打开状态,并且再次允许取款:
存款(BA, 700) getStatement (BA)
------------------------- 账户:1234567 CurrentBalance: 400.00帐户状态:开放 -------------------------