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

面向对象基本特征

作者: 周文洪 | 来源:发表于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