perl学习笔记13 z

本文介绍了Perl面向对象编程的基本概念,包括对象和类的使用、创建简单类、继承、方法重载等核心内容,并探讨了多重继承、合成和包容等其他类关系。

1.  对象的简介

面向对象编程允许创建一些访问数据的接口,这些接口的创建方式独立于数据的实现方式。如果许多程序都是通过某个对象的方法来使用这个对象,那么我们可以随意改变数据的实现方式,而无须修改使用这些数据的程序。

2.  类的使用

要使用任何类,都必须先创建类的实例(也被称为类的对象)。类的构造函数(constructor)一般使用的名字是new,但perl也允许使用不同的名字作为构建函数的名字,这取决于具体的类。构造函数返回一个实例(对象)。

构造类的一个对象后,程序就可以用箭头运算符来调用对象的方法,如:

                            objectName  à  method ( arguments)

其中,objectName是指对象的名字;method是指方法;arguments是指传递给方法的参数。

3.  创建一个简单的类

接口定义了在用户眼中应该如何看待一个类。类的实现指一些基本的细节——类如何组织,以及类使用的数据类型和算法。

对于良好的软件工程来说,一条最重要的原则就是:接口与实现必须分离,这样更易于程序的修改。

内置函数bless的功能是接收一个引用,并将其转化为对象(注意:在perl中所有对象都是引用)。第一个参数是引用。对象的默认类型为当前包名。当有第二个参数时,就把这个对象变成由第二个参数指定的类型。

                     bless  REF , CLASSNAME

 

构造函数中要做的第一件事就是决定创建对象的类型。在调用构造函数时有两种方法:调用时带有类型名( Type à new() new Type)或是将其作用一个对象的方法,这个对象必须要与创建的对象相同 $object à new())。

                     my  $type = shift();

my  $class = ref ($type) || $type;

上面要么引用的类型,要么是传递的类型名。

 

 

4.  继承

经常会有一些新类从其他类派生(衍生)出来,这些新类可以使用原来那些类所拥有的属性和行为。同样,类也可以将其他类的对象包括进来,作为成员类。从现存的类中派生的新类,被称为继承。将其他类的对象包括进来作为成员类,称为合成(或聚集)。

@ISA数组用于从其它包导入变量和方法。

当调用一个方法的时候,如果当前类中并没有定义这个方法,Perl就会检索@ISA数组中的类,找出含有这个方法的类。

 

当你调用了调用者的一个类型为 classname 的方法 methnamePerl 将尝试六种不同的 方法来找出所用的子过程

a)         首先,Perl 在调用者自己的包里查找一个叫 classname::methname 的子过程。如果失败,则进入继承,并且进入步骤2

b)        第二步,Perl 通过检查 @classname::ISA 里列出的所有父包,检查从基类继承过来的方法,看看有没有parent::methname子过程。这种搜索是从左向右,递归的,由浅入深进行的。递归保证祖父类,曾祖父类,太祖父类等等类都进入搜索。

c)        如果仍然失败,Perl 就搜索一个叫 UNIVERSAL::methname 的子过程。

d)        这时,Perl 放弃 methname 然后开始查找 AUTOLOAD。首先,它检查叫做 classmane::AUTOLOAD 的子过程。

e)         如果上面的失败,Perl 则搜索所有在 @classname::ISA 里列出的 parent包,寻找任何 parent::AUTOLOAD 子过程。这样的搜索仍然是从左向右,递归的,由浅入深进行的。

f)         最后,Perl 寻找一个叫 UNIVERSAL::AUTOLOAD 的子过程。

 

5.  方法重载

perl可以在子类中对从超类(或称为基类)中继承的方法进行方法重载。当调用一个对象的方法时,perl首先试着在该对象所属的类中找到这个方法,如果没有找到,perl就会在该类的的基础类中继续查找。这就意味着如果在一个派生类中重新定义了一个继承下来的方法,perl会首先调用派生类中的版本,而不是被继承的基础类的版本——派生类的版本(或重载)优先于基础类版本。

 

6.  其他类关系:多重继承、合成和包容

多重继承:在派生类的@ISA数组中加入一个以上的类。

合成关系:又称为使用关系,类的一个对象可能有一个或多个属性是其他的类的对象。

包容关系:类的一个对象包容了其他对象的集合。

 

7.  基础类UNIVERSAL

从基础类UNIVERSAL中继承了用于查看一个对象继承了那些类以及对一个对象有哪些方法可用。

如果希望对每个类都增加一个函数,就可以直接把该函数加入到基础类UNIVERSAL中。

UNIVERSAL提供了isacan方法。方法isa用于判断一个类是否继承了另一个类,而方法can判断一个类是否实现了某个特定的方法。

             

8.  封闭方法

使用深绑定和封闭将数据设为private。数据封装的封闭方法用到这样一个事实,即一个封闭模块中的变量在封闭之外是不可用的。

封闭的方法使得属性对于类是private的。不再像原先那样,把对象当作一个指向含有数据的三类标引用,而是把对象当成一个包含数据的封闭的引用。当调用函数时,构造函数创建一个散列表引用。然后构造函数创建一个封闭模块,当接收正确的参数时,该封闭模块会返回属性。

 

封闭模块的方法,首先把一个匿名子过程存放在一个文件范围的词法里:

# 声明私有方法

my $secret_door = sub {

my $self = shift;

...

};

然后,通过对函数引用进行解除来调用封闭模块,要使用&符号,和正确的参数。

 

9.  隐式函数

perl中的隐式函数通常使用一个全由大写字母组成的名字来表示。

 

函数BEGIN是一个隐式函数,他的行为很像一个标准函数:可以被声明,而且函数前面的sub可以隐含。每次perl遇到一个BEGIN块时,它会自动执行该块。程序中显式调用BEGIN是一种错误。BEGIN函数按其声明时的顺序被调用,忽略所有的控制结构。通常BEGIN用于初始化全局变量并导入模块和环境参数。

 

隐式函数END,在程序结尾处最后一条语句执行完毕后立即运行。END函数的执行次序与BEGIN正好相反,最后声明的最先执行。程序中止后需要进行的所有例行工作都放到END函数中。

 

隐式函数DESTROY,在一个对象撤销时被调用——要么是在超出作用域范围时,要么在程序中止时。该函数被用于对那些使用了资源的对象进行一些清除工作。

 

10.              AUTOLOAD函数

隐式函数中一个比较重要的函数是AUTOLOAD。如果一个方法被调用时,解释器无法从对象的类或其他各级基础类中找到该方法,perl通常会中止程序,并产生致命错误信息。而可以使用AUTOLOAD函数避免。如果没有找到一个方法,perl会查找该类(或其他基础类)中的AUTOLOAD函数。如果找到了AUTOLOAD函数就调用它,并且将一个特殊变量$AUTOLOAD设置成被调用方法的名字。AUTOLOAD可以用来截获其他致命错误,还可以用于避免对那些所完成的功能几乎相同的函数加以逐个声明。

 

11.              绑定函数

除了上述隐性函数以外,还有一些隐性函数,他们使用tie函数把变量绑定到某个类上。还可以用这些函数将类的实现对用户隐藏起来。当程序处理一个变量时,就调用一个隐性函数。例如,当把一个值赋给一个标量时,程序就调用了STORE函数,对该标量赋值。如果在类中定义自己的STORE函数,并且函数中使用了绑定函数tie,把一个变量绑定到该类上,就可以重载变量的STORE函数,对该标量提供各种不同的赋值功能。

 

tie函数有三个参数,第一个参数是被绑定的变量,第二个参数是变量要被绑定到的那个类,第三个参数是初始化数据列表。

                            tie VARIABLE , CLASSNAME , LIST

<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
本系统采用Python编程语言中的Flask框架作为基础架构,实现了一个面向二手商品交易的网络平台。该平台具备完整的前端展示与后端管理功能,适合用作学术研究、课程作业或个人技术能力训练的实际案例。Flask作为一种简洁高效的Web开发框架,能够以模块化方式支持网站功能的快速搭建。在本系统中,Flask承担了核心服务端的角色,主要完成请求响应处理、数据运算及业务流程控制等任务。 开发工具选用PyCharm集成环境。这款由JetBrains推出的Python专用编辑器集成了智能代码提示、错误检测、程序调试与自动化测试等多种辅助功能,显著提升了软件编写与维护的效率。通过该环境,开发者可便捷地进行项目组织与问题排查。 数据存储部分采用MySQL关系型数据库管理系统,用于保存会员资料、产品信息及订单历史等内容。MySQL具备良好的稳定性和处理性能,常被各类网络服务所采用。在Flask体系内,一般会配合SQLAlchemy这一对象关系映射工具使用,使得开发者能够通过Python类对象直接管理数据实体,避免手动编写结构化查询语句。 缓存服务由Redis内存数据库提供支持。Redis是一种支持持久化存储的开放源代码内存键值存储系统,可作为高速缓存、临时数据库或消息代理使用。在本系统中,Redis可能用于暂存高频访问的商品内容、用户登录状态等动态信息,从而加快数据获取速度,降低主数据库的查询负载。 项目归档文件“Python_Flask_ershou-master”预计包含以下关键组成部分: 1. 应用主程序(app.py):包含Flask应用初始化代码及请求路径映射规则。 2. 数据模型定义(models.py):通过SQLAlchemy声明与数据库表对应的类结构。 3. 视图控制器(views.py):包含处理各类网络请求并生成回复的业务函数,涵盖账户管理、商品展示、订单处理等操作。 4. 页面模板目录(templates):存储用于动态生成网页的HTML模板文件。 5. 静态资源目录(static):存放层叠样式表、客户端脚本及图像等固定资源。 6. 依赖清单(requirements.txt):记录项目运行所需的所有第三方Python库及其版本号,便于环境重建。 7. 参数配置(config.py):集中设置数据库连接参数、缓存服务器地址等运行配置。 此外,项目还可能包含自动化测试用例、数据库结构迁移工具以及运行部署相关文档。通过构建此系统,开发者能够系统掌握Flask框架的实际运用,理解用户身份验证、访问控制、数据持久化、界面动态生成等网络应用关键技术,同时熟悉MySQL数据库运维与Redis缓存机制的应用方法。对于入门阶段的学习者而言,该系统可作为综合性的实践训练载体,有效促进Python网络编程技能的提升。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
在当代储能装置监控技术领域,精确测定锂离子电池的电荷存量(即荷电状态,SOC)是一项关键任务,它直接关系到电池运行的安全性、耐久性及整体效能。随着电动车辆产业的迅速扩张,业界对锂离子电池SOC测算的精确度与稳定性提出了更为严格的标准。为此,构建一套能够在多样化运行场景及温度条件下实现高精度SOC测算的技术方案具有显著的实际意义。 本文介绍一种结合Transformer架构与容积卡尔曼滤波(CKF)的混合式SOC测算系统。Transformer架构最初在语言处理领域获得突破性进展,其特有的注意力机制能够有效捕捉时间序列数据中的长期关联特征。在本应用中,该架构用于分析电池工作过程中采集的电压、电流与温度等时序数据,从而识别电池在不同放电区间的动态行为规律。 容积卡尔曼滤波作为一种适用于非线性系统的状态估计算法,在本系统中负责对Transformer提取的特征数据进行递归融合与实时推算,以持续更新电池的SOC值。该方法增强了系统在测量噪声干扰下的稳定性,确保了测算结果在不同环境条件下的可靠性。 本系统在多种标准驾驶循环(如BJDST、DST、FUDS、US06)及不同环境温度(0°C、25°C、45°C)下进行了验证测试,这些条件涵盖了电动车辆在实际使用中可能遇到的主要工况与气候范围。实验表明,该系统在低温、常温及高温环境中,面对差异化的负载变化,均能保持较高的测算准确性。 随附文档中提供了该系统的补充说明、实验数据及技术细节,核心代码与模型文件亦包含于对应目录中,可供进一步研究或工程部署使用。该融合架构不仅在方法层面具有创新性,同时展现了良好的工程适用性与测算精度,对推进电池管理技术的进步具有积极意义。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值