主要内容

开发类——典型的工作流

制定课程

这个例子讨论了如何设计和实现一个类。这类的目标是表示一个熟悉的概念(银行帐户)。但是,您可以对大多数类设计应用相同的方法。

要设计表示银行账户的类,首先确定构成银行账户抽象的数据元素和操作。例如,银行账户具有:

  • 帐号

  • 帐户余额

  • 状态(打开、关闭等)

您必须对银行帐户执行某些操作:

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

  • 银行活期存款

  • 取款

  • 生成语句

  • 保存并加载银行账户对象

如果余额过低,并且您试图取款,则银行帐户会广播通知。发生此事件时,银行帐户会向其他实体广播通知,这些实体旨在侦听这些通知。在本例中,帐户管理器程序的简化版本会执行此任务。

在本例中,一个帐户管理程序决定所有银行帐户的状态。该程序监视帐户余额,并分配以下三个值中的一个:

  • 打开—帐户余额为正值

  • 透支-账户余额已透支,但透支额不超过200美元。

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

这些特性定义了需求银行账户会计经理类。仅包括满足特定目标所需的功能。通过子类化支持特殊类型的帐户万博1manbetx银行账户以及向子类添加更具体的功能会计经理根据需要支持新的帐户类型。万博1manbetx

指定类组件

类将数据存储在属性中,使用方法实现操作,并支持使用事件和侦听器的通知万博1manbetx银行账户会计经理类定义这些组件。

类数据

该类定义以下属性以存储帐号、帐户余额和帐户状态:

  • 帐号-用于存储标识特定帐户的编号的属性。MATLAB®创建类的实例时为此属性指定值。仅限银行账户类方法可以设置此属性设置访问属性是私有的

  • AccountBalance-存储帐户当前余额的属性。存款和取款的类操作为该属性赋值。仅银行账户类方法可以设置此属性设置访问属性是私有的

  • AccountStatus-银行账户类定义此属性的默认值。这个会计经理类方法更改此值时AccountBalance低于0.这个通道属性指定只有会计经理银行账户类可以访问此属性。

  • 会计监听器-储存InsufficentFunds事件侦听器。拯救一个银行账户对象不保存此属性,因为加载对象时必须重新创建侦听器。

类的操作

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

  • 银行账户—接受帐户编号和初始余额,以创建表示帐户的对象。

  • 押金-更新AccountBalance发生存款交易时的属性

  • 撤退-更新AccountBalance发生取款交易时的属性

  • getStatement-显示有关帐户的信息

  • loadobj-从MAT文件加载对象时重新创建帐户管理器侦听器。

班级活动

帐户管理器程序更改具有负余额的银行帐户的状态银行账户类在支取导致负余额时触发事件资金不足事件从内部发生撤退方法。

要定义事件,请在事件通过调用通知处理类方法。因为资金不足不是一个预定义的事件,您可以用any字符向量,并用任何动作触发它。

银行账户类实现

类的任何对象只关联一组数据是很重要的银行账户类。您不希望对象的独立副本具有不同的帐户余额值。因此,实现银行账户类作为句柄类。给定句柄对象的所有副本引用相同的数据。

银行账户课程简介

银行帐户类别 讨论
classdef银行账户
                    

句柄类,因为该类的任何实例都应该只有一个副本银行账户句柄类和值类的比较

性质(Access=?AccountManager)AccountStatus=“开放”结束

AccountStatus包含由当前余额确定的帐户状态。访问权限仅限于银行账户会计经理上课。类成员的访问

性质(SetAccess=private)AccountNumber AccountBalance结束性质(暂时)帐户侦听器结束

AccountStatus通过会计经理类方法。

帐号AccountBalance属性具有私有集访问权限。

AccountListener属性是暂时的,因此不保存侦听器句柄。

看见指定属性属性

事件InsufficientFunds结束

类定义调用的事件InsufficentFunds撤退方法在帐户余额变为负值时触发事件。

有关事件和侦听器的信息,请参见事件

方法

普通方法块。看见定义类方法和函数对于语法。

功能BA=银行账户(AccountNumber,InitialBalance)BA.AccountNumber=AccountNumber;BA.AccountBalance=InitialBalance;BA.AccountListener=AccountManager.addAccount(BA);结束

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

AccountManager.addAccount是静态方法会计经理班级。为创建侦听器InsufficientFunds事件并将侦听器句柄存储在会计监听器财产。

功能存款(BA,amt)BA.AccountBalance=BA.AccountBalance+amt;如果BA.AccountBalance>0 BA.AccountStatus=“开放”;结束结束

押金调整值AccountBalance财产。

如果AccountStatus关闭随后的沉积带来AccountBalance进入正范围AccountStatus复位为打开

功能收回(BA, amt)如果(比较字符串(BA。账户Status,“关闭”)&&...BA.账户余额<0)显示([“账户”,num2str(英国会计科目编号),...“已经关门了。”])返回结束newbal=BA.AccountBalance—金额;BA.AccountBalance=newbal;如果纽巴<0通知(BA,“资金不足”)结束结束

更新AccountBalance财产。如果提款导致账户余额为负值,通知触发InsufficentFunds事件。

有关侦听器的详细信息,请参阅事件和侦听器语法

功能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;结束结束

loadobj方法:

  • 如果加载操作失败,请从结构

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

有关保存和加载对象的详细信息,请参见对象的保存和加载过程

结束结束

静态方法块的结束

结束classdef

展开类代码

制定会计经理等级

会议的目的会计经理类是为帐户提供服务银行账户类,会计经理类侦听导致余额下降到负值范围的取款银行账户对象触发资金不足事件,会计经理重置帐户状态。

这个会计经理类不存储数据,因此不需要属性。这个银行账户对象存储侦听器对象的句柄。

这个会计经理执行两个操作:

  • 作为提款的结果,为每个帐户分配一个状态

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

类组件

这个会计经理类实现了两个方法:

  • 转让地位—指定状态给a的方法银行账户对象。用作侦听器回调。

  • 帐户-方法创建InsufficientFunds听众。

实施会计经理等级

这个会计经理类以静态方式实现这两个方法,因为不需要会计经理对象。这些方法在银行账户物体。

这个会计经理不打算实例化。分离会计经理来自银行账户类提供了更大的灵活性和可扩展性。例如,这样做使您能够:

  • 延伸会计经理类以支持其他类型的万博1manbetx帐户,同时保持单个帐户类的简单和专门化。

  • 更改帐户状态的条件,而不影响已保存和已加载帐户的兼容性银行账户物体。

  • 发展账户一个超类,它考虑了所有帐户的共同点,而不要求每个子类实现帐户管理功能

会计经理课程简介

AccountManager类 讨论
classdef会计经理

此类定义了InsufficentFunds事件侦听器和侦听器回调。

方法(静态)

不需要创建此类的实例,因此定义的方法是静态的。请参阅静态方法

功能assignStatus (BA)如果BA.AccountBalance<0如果BA.账户余额<-200 BA.账户状态=“关闭”;其他的英航。AccountStatus =“透支”;结束结束结束

这个转让地位方法是InsufficentFunds事件侦听器。它确定银行账户对象AccountStatus属性的值AccountBalance财产。

这个银行账户类构造函数调用会计经理帐户方法来创建和存储此侦听器。

功能lh=addAccount(BA)lh=addlistener(BA,“资金不足”,...@(src,~)AccountManager.assignStatus(src));结束

帐户的侦听器InsufficentFunds事件银行账户类定义。

看见控制侦听器生命周期

结束结束

结束声明方法classdef

展开类代码

使用BankAccount对象

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