zoukankan      html  css  js  c++  java
  • 第十二章 对象(上)

    第十二章 对象(上)
    
    对象是一个数据结构,带有一些行为。我们通常把这些行为成为对对象的直接动作,
    
    有时候可以把这些对象拟人化。
    
    作为一个类的实例,对象从中获益,取得起行为。类定义方法:就是那些应用于类和其它的事例的性质。
    
    如果需要区分上面两种情况,那么我们就把适用于某一特定对象的方法叫做实例方法,
    
    
    而把那些适用于整个类的方法叫做类方法。
    
    
    12.2 Perl的对象系统:
    
    Perl 没有为定义对象,类或者方法提供任何特殊的语法。相反,它使用现有的构造来实现这三种概念。
    
    一个对象只不过是一个引用
    
    zjzc01:/root/big2# cat a26.pl 
    use Net::FTP;
    $ftp = Net::FTP->new("192.168.32.101",Port=>1029, Debug => 0)    or die "Cannot connect to some.host.name: $@";
    print $ftp;
    print "
    ";
    
    zjzc01:/root/big2# perl a26.pl 
    Net::FTP=GLOB(0x12f75d8)
    
    
    一个类只是一个包:
    
    一个包当作一个类---通过使用包的子过程来执行类的方法,以及通过使用包的变量来保存类的全局数据。
    
    
    
    通常,使用一个模块来保存一个或者更多个类。
    
    
    一个方法只是一个子过程:
    
    
    
    
    你只需要在你当作类作用的包中声明子过程,它们就会被当作该类的方法来使用。方法调用时调用子过程的一种新的方法,
    
    
    它传递额外的参数:用于调用方法锁使用的对象或包。
    
    
    方法是对象系统的核心,因为它们为实现所有魔术提供了抽象层。
    
    
    你不是直接访问对象里的一块数据区,
    
    
    Perl 支持调用方法的两种不同的语义。一种是你已经在Perl别的地方看惯了的风格,而第2种是你可以在其他编程语言中看到的。
    
    
    不管使用哪种方法调用的形式,Perl总是会给构成这个方法的子过程传递一个热爱的初始化参数。
    
    
    
    
    如果用一个类调用该方法,那个参数将会是类的名字。
    
    如果用一个对象调用方法,那个参数就是对象的引用。
    
    
    对于一个实例方法,调用者是一个声明对象的引用。
    
    
    12.3.1 使用箭头操作符的方法调用:
    
    
    我们说过有两种风格的方法调用。第一种调用方法的风格看起来像下面这样:
    
    
    INVOCANT->METHOD(LIST)
    
    INVOCANT->METHOD
    
    
    而当INVOCANT 是一个包的名字的时候,我们把那个被调用的METHOD看作类的方法。
    
    
    实际上两者之间并没有区别,只不过和类的对象相比,包名字与类本身有着更明显的关联。
    
    比如,使用类方法 summon 的构造一个类,然后在生成的对象上调用实例方法 speak,
    你可以这么说:
    $mage = Wizard->summon("Gandalf"); # 类方法
    
    $mage->speak("friend"); # 实例方法
    
    
    12.3.2  使用间接对象的方法调用:
    
    第二种风格的方法调用看起来象这样:
    METHOD INVOCANT (LIST)
    
    METHOD INVOCANT LIST
    
    METHOD INVOCANT
    
    
    12.3.4  引用包的类:
    
    CONSTRUCTOR
           new ([ HOST ] [, OPTIONS ])
               This is the constructor for a new Net::FTP object. "HOST" is the name of the remote host to which an FTP connection is required.
    
    
    这是一个构造器用于一个新的Net::FTP对象,"HOST"是你需要连接的机器。
    
    12.4 构造对象:
    
    
    所有对象都是引用,但不是所有引用都是对象。
    
    
    一个引用不会作为对象运转,除非引用它的东西又特殊标记告诉Perl 它属于哪个包。
    
    
    把一个引用和一个包名字标记起来(因此也和包中的类标记起来,因为一个类就是一个包)的动作被称为赐福(bless)
    
    你可以把bless 看作把一个引用转换成一个对象,尽管更准确地说是它把该引用转换成一个对象引用
    
    bless 函数接收一个或者两个参数,第一个参数是一个引用,而第二个是要把引用bless成的包,如果忽略第2个参数,则使用当前包
    
    $obj = { }; # 把引用放到一个匿名散列
    bless($obj); # Bless 散列到当前包
    bless($obj, "Critter"); # Bless 散列到类 Critter。
    
    
    12.4.2 初始器:
    
    
    假设一个 Horse 类有一些实例属性,比如 "name" 和 "color":
    
    $steed = Horse->new(name => "shadowfax", color => "white");
    
    
    这回我们用一个名字叫 new 的方法做该类的构造
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

  • 相关阅读:
    js 宿主对象的属性和方法总结
    java学习路线
    (转)前端学习路线
    第11章 PADS功能使用技巧(2)-最全面
    第11章 PADS功能使用技巧(1)-最全面
    可控硅工作原理及参数详解
    光耦继电器工作原理与参数详解
    EEPROM工作原理透彻详解
    晶振工作原理及参数详解(最透彻)
    逻辑门电路详解1(最透彻)
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351116.html
Copyright © 2011-2022 走看看