美文网首页程序员
面向对象基本特征

面向对象基本特征

作者: 周文洪 | 来源:发表于2013-08-12 09:40 被阅读277次

    面向对象与设计模式有什么关系,可以说什么关系都没有。设计模式只是一种用来解决问题的规则,用面向对象来实现罢了。

    面向对象有3个基本特征:

    1. 继承

    继承是指一个对象直接使用另一对象的属性和方法。
    它可以使现有的代码具有可重用性和可扩展性。

    2. 封装

    封装是指隐藏对象的属性、方法的实现细节,仅对外公开接口。

    3. 多态

    多态是指同一个实体同时具有多种形式。

    将一个对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,该对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。

    在项目中,当我们过多的依赖if else或switch来决定执行哪种操作时,使用多态可以达到更好的效果(代码解耦,提高扩展性)。

    【示例】

    画家可以画画,音乐家可以弹奏,歌手可以唱歌。假设我们要在不同的条件下让他们做自己的事情。

    常规做法(高耦合,扩展性差)

    #-*- coding:utf-8 -*-
    
    #画家可以画画
    class Painter(object):
        def paint(self):
            return "painter is working."
    
    #歌手可以唱歌
    class Singer(object):
        def sing(self):
            return "singer is working."
    
    #音乐家可以弹奏
    class Pianist(object):
        def play(self):
            return "pianist is working."
    
    #当所需要的角色越来越多时,if else就越来越多,代码看起来将十分冗余,低效
    class MovieAction(object):
        def getAction(self, role):
            if role == "painter":
                painter = paint()
                return painter.working()
            elif role == "singer":
                singer = Singer()
                return singer.sing()
            elif role == "pianist":
                pianist = Pianist()
                return pianist.play()
            else:
                return "Sorry, the role doesn't exist."
    
    
    if __name__ == "__main__":
        movieAction = MovieAction()
        print movieAction.getAction('singer')
        print movieAction.getAction('shower')
    
    """print out
    
    singer is working.
    Sorry, the role doesn't exist.
    """
    

    利用多态(低耦合,扩展性好)

    #-*-coding:utf-8 -*-
    
    #画家可以画画
    class Painter(object):
        def working(self):
            return "painter is working."
    
    #歌手可以唱歌
    class Singer(object):
        def working(self):
            return "singer is working."
    
    #音乐家可以弹奏
    class Pianist(object):
        def working(self):
            return "pianist is working."
    
     #不管有多少角色,代码就这么多,是不是低耦合,很高效尼
    class MovieAction(object):
        def getAction(self, obj):
                return obj.working()
    
    if __name__ == "__main__":
        movieAction = MovieAction()
        print movieAction.getAction(Singer())
        print movieAction.getAction(Pianist())
    
    """print out
    
    singer is working.
    pianist is working.
    """
    

    相关文章

      网友评论

        本文标题:面向对象基本特征

        本文链接:https://www.haomeiwen.com/subject/touftttx.html