如何在Perl中实现面向对象编程?
Perl 是一种常用的脚本语言,特别适合快速原型设计和系统管理。Perl 提供了许多内置函数和模块,但与其他现代编程语言如 Python、Java 等相比,Perl 并不是一种纯粹的面向对象语言。然而,Perl 版本 5 引入了一些面向对象编程 功能,允许 Perl 程序员实现面向对象编程。包是 Perl 环境中的命名容器,可以在其中定义子例程和变量。您可以使用 Perl 的 package 关键字创建包。包用于封装代码、组织和处理数据和函数以及实现继承。Perl 的 bless 函数用于将 PHP 哈希引用转换为对象。Perl的AUTOLOAD函数是一种动态调用子例程的机制。每个 HTTP 请求都以统一资源定位符 开头。服务器收到HTTP请求后,Web Server会接
Perl 是一种常用的脚本语言,特别适合快速原型设计和系统管理。 Perl 提供了许多内置函数和模块,但与其他现代编程语言如 Python、Java 等相比,Perl 并不是一种纯粹的面向对象语言。 然而,Perl 版本 5 引入了一些面向对象编程 (OOP) 功能,允许 Perl 程序员实现面向对象编程。
本文将介绍如何在Perl中实现面向对象编程。
1.使用Perl的package关键字
包是在 Perl 中实现 OOP 的关键。 包是 Perl 环境中的命名容器,可以在其中定义子例程和变量。 您可以使用 Perl 的 package 关键字创建包。 包用于封装代码、组织和处理数据和函数以及实现继承。
下面是一个简单的 Perl 包的示例:
包人;
子新{
我的 $class = 转变;
我的 $self = {
_firstName => 转变,
_lastName => 转变,
_ssn => 移位,
};
祝福$self,$class;
返回$self;
子集名字 {
我的($self, $firstName) = @_;
$self->{_firstName} = $firstName 如果已定义($firstName);
返回 $self->{_firstName};
子 getFirstName {
我的($self) = @_;
返回 $self->{_firstName};
1;
该包定义了一个名为 Person 的类,它具有三个私有属性:_firstName、_lastName 和 _ssn。 此外,该包还定义了三个子例程:new、setFirstName和getFirstName,它们定义了如何创建对象、设置属性和返回属性。
2.使用Perl的bless函数
Perl 的 bless 函数用于将 PHP 哈希引用转换为对象。 使用此函数,您可以将哈希引用绑定到包,从而创建对象。
这是一个例子:
我的 $person = Person->new("John", "Doe", "12345");
打印“名字:”。 $person->getFirstName();
此示例创建名为 person 的 Person 类的实例,将其第一个属性设置为 John,并打印 FirstName 属性。
3. 实现继承
在 Perl 中,您可以使用 @ISA 数组来定义包的父包。 这样,每个子包都可以使用其父包的所有子例程和变量。
下面是一个简单的继承示例:
包装员工;
使用人;
我们的@ISA = qw(Person);
子新{
我的 $class = 转变;
我的 $self = $class->SUPER::new(shift, shift, shift);
$self->{_id} = 移位;
祝福$self,$class;
返回$self;
子集Id {
我的($self,$id)=@_;
$self->{_id} = $id 如果已定义($id);
返回 $self->{_id};
子 getId {
我的($self) = @_;
返回 $self->{_id};
1;
此示例扩展了 Person 类并添加了新的变量 ID。 还定义了新的子例程 setId 和 getId 来设置和获取 ID 属性。
4.使用Perl的AUTOLOAD功能
Perl的AUTOLOAD函数是一种动态调用子例程的机制。 此函数可用于捕获对对象上未定义子例程的调用并执行一些自定义操作。
这是一个例子:
子自动加载{
我的($self,$value)=@_;
我的($操作,$属性)=($AUTOLOAD =〜/(获取|设置)(_ \ w +)$ /);
除非($操作&&$属性){
die“无效方法:$AUTOLOAD”;
$属性=~s/^_//;
if ($operation eq 'get') {
返回 $self->{$attribute};
elsif ($操作 eq '设置') {
$self->{$attribute} = $value;
此示例定义了一个动态调用的方法,当调用对象的未定义子例程时,该方法对当前对象的属性执行 get 或 set 操作。
总结
本文介绍如何在 Perl 中实现面向对象编程。 通过使用 Perl 的包和 bless 函数,Perl 程序员可以创建和操作自己的对象。 此外,使用继承和自动加载机制,可以更有效地组织和处理代码,使其更易于维护和扩展。
这篇文章就分享到这里,希望对大家有所帮助。
Perl 文章导航
Perl 中的模块是什么? 如何使用?
前言
01过去
本文主要比较.Net平台下的几种B/S开发框架。 仅比较前端展示和界面业务逻辑部分。 后端数据层、业务层、持久层等不讨论,因为这些部分是完全共享的。
主要从以下几个维度进行比较:
.Net平台下B/S开发框架分类
总体来说,目前.Net平台下的B/S开发框架基本上可以分为三类:
1.基于控件和页面事件驱动思想的Web Forms
2.基于模型、视图和控制器的MVC模式
3. 结合了Web Forms和MVC的一些特性的框架(不是本文的重点)
到目前为止,ASP.NET Web Forms 和 ASP.NET MVC 都有自己的拥趸。 双方都认为自己使用的技术是最好的。 我个人是反对这种观点的。 马克思等革命先烈告诉我们,看待事物必须用辩证唯物主义思维,存在就是合理的。 作为开发者,我们不应该太狭隘。 多掌握一项技术总是一件好事。 本文也尽量从客观平等的角度进行相对公正、全面的比较,而不是提倡某种技术框架。
知识准备
02过去
在进行具体比较之前,我们先回过头来想一想,什么是B/S结构? 本文介绍的框架都是基于Microsoft .Net Framework,那么什么是.Net Framework呢?
什么是B/S?
毫无疑问和理所当然的,B/S指的是B:Browser和S:Server,即我们B/S程序的客户端就是浏览器(各种浏览器,无论你是IE、Firefox、Chrome等),服务器是什么? 服务器是指我们使用.Net平台开发的应用程序(当然也可以是PHP、Java、Ruby、Python等)。 这些程序运行在各种Web服务器上(例如:IIS、Apache、Tomcat等)。
连接B和S的是HTTP协议。 由于HTTP的无状态性,B/S应用的所有请求只能从浏览器(客户端)开始,并且只能使用pull模式,即服务器端无法push。 消息发送到客户端,这与C/S模式的Windows程序有很大不同。
关于HTTP协议,属于另一个话题,这里不再详细介绍。 详细内容请参考:当然,为了做出一个好的B/S应用,对HTTP协议有一些深入的了解是非常有必要的。
每个 HTTP 请求都以统一资源定位符 (Url) 开头。 服务器收到HTTP请求后,Web Server会接管该请求,然后交给具体的服务器程序进行逻辑处理(这个中间过程会根据Web Server的不同而有所不同。总之,它是一个相对的过程)复杂的生命周期过程,以ASP.NET为例,具体请参考(VS.80).aspx)。 处理完成后,最终将生成的结果发送出去。 返回给客户端。 生成的结果通常是一段 HTML 文本或二进制字节流。 客户端收到返回的信息后,解析这些信息,形成我们在浏览器上看到的实际页面,从而形成一个完整的请求流程。
好吧,上面的介绍可能与本文的主题没有直接关系。 有些人可能认为这些都是很简单的问题,但是你真的了解HTTP协议吗? 你真的了解应用生命周期和页面生命周期吗? 你真的了解我们经常使用的Response.Redirect("url")对应的HTTP状态是301还是302吗? 之所以介绍这么多,是因为我个人认为如果想要更好的设计B/S系统结构,或者编写高效优雅的B/S代码,这些都是不可或缺的知识。
什么是.Net框架
我们先看一个解释:.NET Framework也称为.Net Framework。 它由微软开发,是一个致力于敏捷软件开发、快速应用程序开发、平台独立性和网络透明性的软件开发平台。 .NET 是微软在未来十年迈向服务器和桌面软件工程的第一步。 .NET 包含许多促进 Internet 和 Intranet 应用程序快速开发的技术。 .NET框架是微软沿袭Windows DNA的新开发平台。 .NET框架是一个运行在系统虚拟机上的编程平台。 它基于Common Language Runtime,支持多种语言(C#、VB、C++、Python等)开发。 .NET 还为应用程序编程接口 (API) 提供了新功能和开发工具。 这些创新使程序员能够同时开发 Windows 应用程序和网络应用程序以及组件和服务(Web 服务)。 .NET 提供了一种新的反射式和面向对象的编程接口。 .NET 被设计得足够通用,可以将许多不同的高级语言聚集在一起。
.Net Framework作为微软企业级应用的重要战略之一,意义重大。 .Net Framework 是在.Net 平台上运行的所有应用程序的基础。 而且每一个发布的版本都会带来一些革命性的变化。 下图展示了不同Framework版本之间的关系。 当然,还有很多更详细、更具体的区别。 请参考微软官方网站。 这里就不详细介绍了,只是作为理解本文的知识拓展。
技术比较
03过去
ASP.NET Web Forms官方定义:
ASP.NET Web 窗体允许您使用熟悉的拖放、事件驱动模型构建动态网站。 设计界面和数百个控件和组件可让您快速构建复杂、强大的 UI 驱动的数据访问网站。
可以概括如下:
拖放式编程模式。
事件驱动模型。
提供大量的控件。
ASP.NET MVC官方定义:
ASP.NET MVC 为您提供了一种强大的、基于模式的方法来构建动态网站,从而实现关注点的清晰分离,并使您能够完全控制标记,从而实现愉快、敏捷的开发。 ASP.NET MVC 包含许多功能,可实现快速、TDD 友好的开发,以创建使用最新 Web 标准的复杂应用程序。
可以概括如下:
1.基于历史悠久的MVC模式。
2.更清晰的界面代码分离。
3.对HTML/CSS/JS更完整的控制。
4.体现敏捷、测试驱动开发等思想。
关系图
这里,有必要解释一下.Net、ASP.NET、ASP.NET Web Forms和ASP.NET MVC之间的关系。 层级关系可以用下图来表示:
其中.Net Framework是所有框架的基础。 ASP.NET提供了基于.Net Framework的Web开发框架的基础。 ASP.NET Web Forms和ASP.NET MVC是微软提供的两个最主流的Web开发框架。 开发框架。
ASP.NET Web Forms 和 ASP.NET MVC 的详细比较
从优势、劣势、可能的风险、可能的机会四个方面进行详细比较,如下表所示:
目前的发展
我们先看一下微软.Net Framework各个版本的发布时间、IDE支持以及Windows默认安装的版本来进行比较:
可以看到,.Net Framework 1.0是在2002年发布的,当时也推出了ASP.NET Web Forms作为ASP的替代品。 经过近10年的发展,在企业级B/S系统的发展中发挥了重要作用。 目前,各种框架和第三方控件的支持使得ASP.NET Web Forms越来越成熟,但同时Web Forms界面与代码的高耦合、重量级的页面大小和复杂的页面生命周期也越来越受到开发者的诟病。
Web Forms在互联网开发中的缺点导致广大开发者在开发互联网应用时更倾向于选择PHP、Python、Ruby等轻量级快速开发平台。 为了改善这种状况,微软于2009年4月推出了基于.Net Framework 3.5的ASP.NET MVC 1.0版本。ASP.NET MVC的推出让广大Web开发者耳目一新,抛弃了大量的Server端控件和各种回发事件让ASP.NET MVC页面看起来如此清爽,而且MVC模型也更有利于代码级别的组织,充分体现了Web开发简单高效的本质。 到目前为止,ASP.NET MVC已经发展到3.0版本,视图引擎中加入了简单明了的Razor。
难度和学习成本
04过去
在这方面,很难比较,因为一般来说,无论是ASP.NET Web Forms还是ASP.NET MVC,其底层实现都是基于.Net Framework的。 在具体的编码层面上,它们是完全相同的。 学习的难易程度可能取决于你之前的技术积累和设计思维。 我认为Windows开发人员学习ASP.NET Web Forms可能更容易,而ASP程序员或PHP程序员可能会接受MVC。 思考更容易。
学习费用对照表
下表试图从多个维度对学习曲线进行综合比较:
实用范围
05过去
如下图所示,展示了ASP.NET Web Forms和ASP.NET MVC的适用场景。
适用场景汇总
但世事无绝对。 影响各自适用场景的因素可能还有很多,总结如下:
如果您正在快速开发后端管理系统,需要呈现大量数据、表格等,建议使用Web Forms。
如果对页面性能有较高要求,建议使用MVC。
如果你是做一个互联网应用,对UI要求非常高,建议使用MVC。
如果要采用TDD开发模式,建议使用MVC。
对于非常复杂的页面逻辑,建议使用Web Forms。
团队成员的掌握程度也是需要考虑的因素之一。
如果您正在进行系统升级,请尝试使用与旧系统相同的框架。
其他框架介绍
06过去
单轨电车
Monorail作为一个早于微软正式出现的MVC框架,可以算是第一个基于.Net的MVC框架,是开源项目Castle的子项目。 目前最新版本是2.1。 作者深厚的设计功底让大家充分领略了MVC的魅力,以至于微软的ASP.NET MVC中的很多实现都能在monorail中看到。
MonoRail 实现了三个模板引擎:
AspNetViewEngine 使用传统的 .aspx 文件作为模板,您可以像往常一样使用 aspx 语法和服务器控件。 但由于Webform的生命周期与MonoRail完全不同,所以有时会感觉别扭,而且一些功能也受到限制。
NVelocityViewEngine 使用 NVelocity 作为模板引擎。 你需要学习VTL语法,但它使用起来非常简单,特别是因为许多Java程序员已经熟悉了velocity。 简单的语法也迫使程序员很好地分离逻辑和接口,从而更容易与美工合作。
BrailViewEngine是一个基于Boo的模板引擎。 Boo 是一种 .NET 语言,其语法类似于 python。 根据MonoRail的参考,Brail引擎是最强大、性能最强的选择,但Boo是一种陌生的语言,这使其成为Brail引擎应用的最大障碍。
总的来说,Monorail 与 ASP.NET MVC 非常相似,如果您掌握了其中一个框架的应用,就很容易切换到另一个框架。 唯一的区别可能在于模板引擎的选择。 Monorail官方推荐NVelocity,而ASP.NET MVC官方推荐Razor。 显然,对于.Net(C#)程序员来说,学习Razor比NVelocity更容易。 有些,虽然NVelocity也是一种非常简单的模板语言。
我以前的雇主也一直使用 Monorail 作为开发框架。 我也用了很长时间了,感觉各方面都非常好。
结合Web Form和MVC的框架
这类框架是一个统称,前人已经有很多实践了。 概括起来,主要基于以下几个目的:
将页面和页面逻辑代码解耦。
实施可替换页面。
减少微软对HTML的过度封装。
继续使用Web Forms的页面生命周期思想和控制思想。
提供更好的性能。
这种类型的框架有很多实现,无论是第三方还是个人。 下面是两个例子:
Discuz!NT
由康盛创想公司开发,迄今为止已经经历了10多个版本的开发,目前已经比较成熟。 如果你想建立一个基于.Net的BBS,Discuz是一个不错的选择。
优势:
强大的BBS功能,基本上你能想到的都有。
官方支持,版本不断更新。
快速构建一个BBS应用程序,几乎不需要开发。
缺点:
定制开发很麻烦,除非花钱找官方定制。
无法与现有系统无缝集成。
- 结束 -
●
●
●
●