zoukankan      html  css  js  c++  java
  • sjms-1 面向对象

    面向对象设计

    先设计架构,然后去完成相应模块和类

    设计模式:对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。每一个设计模式系统地命名、解释和评价了面向对象系统中一个重要的和重复出现的设计。
    “四人帮”(Gang of Four, GoF):
    Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
      《设计模式:可复用面向对象软件的基础》

    面向对象的三大特性:
    封装(数据属性)
    继承(复用)
    多态(python本是多态的语言,不用纠结)

    这是一个递进关系

    接口

    接口:若干抽象方法的集合。
    作用:限制实现接口的类必须按照接口给定的调用方式实现这些方法;对高层模块隐藏了类的内部实现。

    25562437

    不去调用pay 不会报错

    继承抽象类时,

    只有当完成抽象类的,抽象方法,才能被调用

    25773734

    实现了payment 接口

    接口:若干抽象方法的集合。

    作用:限制实现接口的类必须按照接口给定的调用方式实现这些方法;对高层模块隐藏了类的内部实现。

    不用去看内部逻辑,直接调用接口

    写底层模块时,大量使用设计模式

    面向对象设计SOLID原则

    开放封闭原则:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。
    里氏替换原则:所有引用父类的地方必须能透明地使用其子类的对象。

    依赖倒置原则:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。换言之,要针对接口编程,而不是针对实现编程。

    不同的支付方式不应该依赖底层的Payment,只是依赖底层的抽象方法去实现不同支付的具体细节。

    from abc import ABCMeta, abstractmethod
    
    # 接口
    class Payment(metaclass=ABCMeta):
        # abstract class
        @abstractmethod
        def pay(self, money):
            pass
    
    class Alipay(Payment):
        def pay(self, money):
            print("支付宝支付%d元." % money)
    
    class WechatPay(Payment):
        def pay(self, money):
            print("微信支付%d元." % money)
    
    p = WechatPay()
    p.pay(100)
    

      

    接口隔离原则:使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。

    一个类写多个接口,会导致继承的类没有实现不必要的接口而报错

    class LandAnimal(metaclass=ABCMeta):
        @abstractmethod
        def walk(self):
            pass
    
    class WaterAnimal(metaclass=ABCMeta):
        @abstractmethod
        def swim(self):
            pass
    
    class SkyAnimal(metaclass=ABCMeta):
        @abstractmethod
        def fly(self):
            pass
    
    class Tiger(LandAnimal):
        def walk(self):
            print("老虎走路")
    
    class Frog(LandAnimal, WaterAnimal):
        pass

    单一职责原则:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。

  • 相关阅读:
    oracle 体系结构
    Oracle存储过程语法
    oracle 触发器
    oracle 存储过程
    oracle 高水位线详解
    oracle索引总结
    Oracle的表空间、数据文件、用户
    Oracle实例和数据库区别
    [whu1564]后缀数组
    [hdu4552]最长公共前缀
  • 原文地址:https://www.cnblogs.com/wenyule/p/10532781.html
Copyright © 2011-2022 走看看