什么';Perl中对象和类的区别是什么?

什么';Perl中对象和类的区别是什么?,perl,oop,class,object,Perl,Oop,Class,Object,我在理解对象和类之间的概念差异时遇到了一些困难。在任何编程语言中,我都不太理解两者之间的区别,但目前我正在使用Perl和Moose,所以我更喜欢使用这些东西来解释 干杯班级是一种类型(如“SUV”)。对象是一个类的实例(“David的SUV”)。对象是一个类的单个实例。另一种认为它是一个类的方式是如何构建对象的蓝图 你是人类阶级的对象 (Perl中的类是具有某些特殊性质的模块,您最好先了解一般情况)。Perl方面: 类是一个包——一个规范。主要用于帮助这些行为的一组行为和数据 对象通常是“ha

我在理解对象和类之间的概念差异时遇到了一些困难。在任何编程语言中,我都不太理解两者之间的区别,但目前我正在使用Perl和Moose,所以我更喜欢使用这些东西来解释


干杯

班级是一种类型(如“SUV”)。对象是一个类的实例(“David的SUV”)。

对象是一个类的单个实例。

另一种认为它是一个类的方式是如何构建对象的蓝图

你是人类阶级的对象

(Perl中的类是具有某些特殊性质的模块,您最好先了解一般情况)。

Perl方面:

  • 类是一个
    ——一个规范。主要用于帮助这些行为的一组行为和数据
  • 对象通常是“hashref”,它是包中的行为规范(和继承的行为)所允许的特定数据的集合

现在,hashref可能包含一个代码引用。在大多数情况下,这是一种行为。但是,对象可以使用该特定行为的唯一方法是由继承(或混合)的某个类行为指定该行为,该类行为期望在该位置有一个coderef并调用它

我没有看到人们在其他语言中使用相同的术语。这可能是问题的一个原因。我想也许PHP用户在很多时候应该说“对象”的时候说“类”

不管怎样,这个例子怎么样--假设您必须为两个不同的数据库创建两个不同的数据库连接:

my $oracle_database_handle = DBI->connect( <oracle connection details here> );

my $mysql_database_handle =  DBI->connect( <mysql connection details here>  );
my$oracle\u database\u handle=DBI->connect();
我的$mysql\u database\u handle=DBI->connect();
您可能会创建两个对象来完成两件不同的事情,但它们都是同一类型的事情——DBI数据库连接。

有很多“类是蓝图,对象是从蓝图构建的”,但既然您要求使用Moose和Perl提供一个特定的示例,我想我会提供一个

在下面的示例中,我们将有一个名为“Hacker”的类。该类(如蓝图)描述了黑客是什么(他们的属性)以及他们能做什么(他们的方法):

现在我们有了黑客类,我们可以开始制作黑客对象:

这将产生以下输出:

Hello, my name is Paul Fenwick
I enjoy programming in: Perl C JavaScript

----

Hello, my name is Jacinta Richardson
I enjoy programming in: Perl C Haskell
如果我愿意,我可以拥有任意多的黑客对象,但仍然只有一个黑客类描述了所有这些是如何工作的

祝你一切顺利


Paul

在perl类中什么都不是,只是一个包名。 它有一个对象的通用代码

对象是可以访问类属性的实例 和方法

package vehicle;
sub vehicle_detail
{
($number,$model,$num_of_wheel)=@_;
print "My car Details:\n@_";
}
上述车辆可供自行车、轿车、厢式货车等任何车辆使用。 该对象由操作符创建

$bike_name='honda';
$ref_bike=\$bike_name;
bless $ref_bike,'vehicle';

现在“祝福”为这类车辆创建了对象本田。

我一直更喜欢淫秽的形式:你不能和女人(类)睡觉,但你可以和黛比(对象)睡觉。当然,可以根据您的个人喜好进行修改……但您可以听到Woman::roar()。这是一个静态方法。:-)哇,超级答案。。一开始是简明的总结,然后是真实世界中的moose示例和教程!非常感谢。看,我觉得那太罗嗦了,但嘿,那就是我。答案不错。:)
package vehicle;
sub vehicle_detail
{
($number,$model,$num_of_wheel)=@_;
print "My car Details:\n@_";
}
$bike_name='honda';
$ref_bike=\$bike_name;
bless $ref_bike,'vehicle';