来自 计算机编程 2019-12-29 05:22 的文章
当前位置: 澳门威尼斯人平台 > 计算机编程 > 正文

进而百度学PHP[4]OOP面前遭遇对象编制程序-17-多态

什么是多态多态性,其来自于dictionary.com的定义是"以不同形式,阶段或者类型出现在独立的组织中或者同种组织中,而不存在根本区别。"由该定义,我们可以认为,多态性是一种通过多种状态或阶段来描述相同对象的编程方式。其实,它的真正意义在于:实际开发中,我们只需要关注一个接口或基类的编程,而不必担心一个对象所属于的具体类(class)。如果你熟悉设计模式,即使只是有个初步了解,那么你也会了解这个概念。事实上,PHP5多态性可能是基于模式设计编程中的最伟大的工具。它允许我们以一种逻辑的方式来组织相类似的对象从而实现在具体编码时不必担心对象的具体类型;而且,我们只需要对一个所期望的接口或基类编程即可。一个应用程序越抽象,则它就显得越灵活--而多态性是对行为加以抽象的最好的方式之一。例如,让我们考虑一个叫Person的类。我们可以用称为David,Charles和Alejandro的类来子类化Person。Person有一个抽象方法AcceptFeedback(),所有的子类都要实现这个方法。这意味着,任何使用基类Person的子类的代码都能调用方法AcceptFeedback()。你不必检查该对象是一个David还是一个Alejandro,仅知道它是一个Person就够了。结果是,你的代码只需关注"最小公分母"-Person类即可。在这个示例中的Person类也可以被创建为一个接口。当然,与上面相比存在一些区别,主要在于:一个接口并没有给出任何行为,而仅确定了一组规则。一个Person接口要求的是"你必须支持AddFeedback()方法",而一个Person类可以提供一些AddFeedback()方法的缺省代码-你对之的理解可以是"如果你不选择支持AddFeedback(),那么你应该提供一种缺省实现。"至于如何选择接口或基类则并非本文的主题;但是,一般说来,你需要通过基类来实现一个缺省的方法。如果你能够简单地勾勒出你的类所要实现的一组期望的功能,那么你也可以使用一个接口。

澳门威尼斯人平台,多态除封装和继承之外的另一个面象对象的三大特性之一。

python 对象的属性 进入正题,来看一个实例来了解python中类,对象中公有属性,私有属性及局部变量,全局变量的区别.

通俗理解多态最直接的定义就是让具有继承关系的不同类对象,可以对相同名称的成员函数调用,产生不同的反应结果

多态的作用简而言之就是为程序做括展

root@10.1.6.200:~# cat object.py 


#!/usr/bin/env python
#coding:utf8

class Dave():
  var1 = "class atribute,public atrribute var1" #类属性,公有属性var1
  __var2 = "class self atribute __var2"  #类的私有属性__var2

  def fun(self):
    self.var2 = "object public atrribute var2" #对象的公有属性var2
    self.__var3 = "object self atrribute __var3" #对象的私有属性__var3
    var4 = "Function of the local variable var4" #函数fun的局部变量

  def other(self):
    print self.__var3

多态的代码

比如说在公司上班,每个月财务发放工资,同一个发工资的方法,在公司内不同的员工或是不同职位的员工,都是通过这个方法发放的,但是所发的工资都是不相同的。所以同一个发工资的方法就出现了多种形态。

根据上面代码后面加入以下代码可以实例化一个对象及获取类公有属性.

php /** * 声明接口Demo * @author wzy * */ interface Demo { const NAME = "wangzhengyi"; const AGE = 25; function fun1 (); // 声明方法默认是public abstract function fun2 (); } class One implements Demo { public function fun1 () { echo Demo::NAME . "就读于中国传媒大学"; } public function fun2 () { echo Demo::NAME . "的年龄是" . Demo::AGE; } } class Two implements Demo { public function fun1 () { echo Demo::NAME . "在北京灵创众和科技有限公司实习中"; } public function fun2 () { echo Demo::NAME . "去年的年龄是24"; } } // 同一个接口,实现同一个方法,不同的对象,反应结果不同。这就是多态的表现和应用 $one = new One(); $one-fun1(); // wangzhengyi就读于中国传媒大学 $one-fun2(); // wangzhengyi的年龄是25 echo "br"; $two = new Two(); $two-fun1(); // wangzhengyi在北京灵创众和科技有限公司实习中 $two-fun2(); // wangzhengyi去年的年龄是24 

 

he = Dave()    #实例化一个对象he
print he.var1   #从实例中获取类的公有属性
print Dave.var1  #直接从类中获取公有属性



root@10.1.6.200:~# ./object.py 


class atribute,public atrribute var1
class atribute,public atrribute var1
<?php 
/**
* 使用多态计算矩形的周长面积。以及圆形的面积跟周长。
*/
interface test{  #声明一个test接口
    function zhouchang(); #声明一个zhouchang方法
    function mianji(); 
}
# 矩形
class juxing implements test
{
    private $width;
    private $height;

    function __construct($width,$height)
    {
        $this->width = $width; #将输入的值(即"宽")赋值给$this->width
        $this->height = $height;
    }
    function zhouchang(){
        echo "矩形的周长:" .($this->width + $this->height)."<br />";
    }
    function mianji(){
        echo "矩形的面积:".($this->width * $this->height)."<br />";
    }
}
# 圆形
class yuanxing implements test #和矩形的一样的。不做讲解。
{
    private $r;

    function __construct($r)
    {
        $this->r = $r;
    }
    function zhouchang(){
        echo "圆形的周长:".(2 * 3.14 * $this->r)."<br />";
    }
    function mianji(){
        echo "圆形的面积:".(3.14 * $this->r * $this->r."<br />");
    }
}
$a = new juxing(1,2);
$a -> mianji();
$b = new yuanxing(1,2);
$b -> zhouchang();

 ?>
输出效果如下所示:
矩形的面积:2
圆形的周长:6.28

类的私有属性不能被类或对象直接调用

 

he = Dave()
print Dave.__var2
print he.__var2



root@10.1.6.200:~# ./object.py 


Traceback (most recent call last):
 File "./object.py", line 19, in <module>
  print Dave.__var2
AttributeError: class Dave has no attribute '__var2'

但可以通过方法间接调用.

class Dave():
  var1 = "class atribute,public atrribute var1" #类属性,公有属性var1
  __var2 = "class self atribute __var2"  #类的私有属性__var2

  def other(self):
    print Dave.__var2   

he = Dave()
he.other()



root@10.1.6.200:~# ./object.py 


class self atribute __var2

获取类方法中的对象的公有属性,需要先通过对象执行类中的方法.并通过对象调用该属性.

he = Dave()
liu = Dave()
he.fun()
print he.var2
print liu.var2



root@10.1.6.200:~# ./object.py 


object public atrribute var2
Traceback (most recent call last):        #对象liu由于没有调用fun方法所有就没有该属性.
File "./object.py", line 20, in <module>
  print liu.var2
AttributeError: Dave instance has no attribute 'var2'

对象的私有属性和类的私有属性类似,也不能被类或对象直接调用

本文由澳门威尼斯人平台发布于计算机编程,转载请注明出处:进而百度学PHP[4]OOP面前遭遇对象编制程序-17-多态

关键词: