网站开发费用做账,完整个人网站html,建设部网站工程设计收费标准,网站开发英文怎么说1.1单一职责原则 C 面向对象三大特性之一的封装指的就是将单一事物抽象出来组合成一个类#xff0c;所以我们在设计类的时候每个类中处理的是单一事物而不是某些事物的集合。 设计模式中所谓的单一职责原则#xff0c;就是对一个类而言#xff0c;应该仅有一个引起它变化的原…1.1单一职责原则 C 面向对象三大特性之一的封装指的就是将单一事物抽象出来组合成一个类所以我们在设计类的时候每个类中处理的是单一事物而不是某些事物的集合。 设计模式中所谓的单一职责原则就是对一个类而言应该仅有一个引起它变化的原因其实就是将这个类所承担的职责单一化如果一个类承担的职责过多就等于把这些职责耦合到了一起一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致设计变得脆弱当变化发生时设计会遭受到意想不到的破坏。 软件设计真正要做的事情就是发现根据需求发现职责并把这些职责进行分离添加新的类给当前类减负越是这样项目才越容易维护。
1.2开放封闭原则 开放 – 封闭原则说的是软件实体类、模块、函数等可以扩展但是不可以修改。也就是说对于扩展是开放的对于修改是封闭的。 该原则是程序设计的一种理想模式在很多情况下无法做到完全的封闭。但是作为设计人员应该能够对自己设计的模块在哪些位置产生何种变化了然于胸因此需要在这些位置创建抽象类来隔离以后发生的这些同类变化其实就是对多态的应用创建新的子类并重写父类虚函数用以更新处理动作。此处的抽象类其实并不等价于 C 中完全意义上是抽象类需要有纯虚函数这里所说的抽象类只需要包含虚函数纯虚函数或非纯虚函数能够实现多态即可。 开放 – 封闭原则是面向对象设计的核心所在这样可以给我们设计出的程序带来巨大的好处使其可维护性、可扩展性、可复用性、灵活性更好。
1.3依赖倒转原则对多态的典型应用
关于依赖倒转原则对应的是两条非常抽象的描述
1.高层模块不应该依赖低层模块两个都应该依赖抽象。 2.抽象不应该依赖细节细节应该依赖抽象。
先用人话解释一下这两句话中的一些抽象概念
高层模块可以理解为上层应用就是业务层的实现编写的应用程序低层模块可以理解为底层接口比如封装好的 API、动态库等抽象指的就是抽象类或者接口在 C 中没有接口概念Java里有只有抽象类在设计模式里的抽象类没有那么严格可以为虚函数或纯虚函数C中定义接口的方法是在父类定义虚函数在子类中重写虚函数。
举一个高层模块依赖低层模块的例子 大聪明的项目组接了一个新项目低层使用的是 MySql 的数据库接口高层基于这套接口对数据库表进行了添删查改实现了对业务层数据的处理。而后由于某些原因要存储到数据库的数据量暴增所以更换了 Oracle 数据库由于低层的数据库接口变了高层代码的数据库操作部分是直接调用了低层的接口因此也需要进行对应的修改无法实现对高层代码的直接复用大聪明欲哭无泪。 解决方法是高层和底层代码之间设计好抽象类和抽象类子类写好调用MySQL的抽象子类当底层换成Oracle数据库时只需要增加调用Oracle的抽象子类从而减少工作量。 通过上面的例子可以得知当依赖的低层模块变了就会牵一发而动全身如果这样设计项目架构对于程序猿来说其工作量无疑是很重的。如果要搞明白这个案例的解决方案以及抽象和细节之间的依赖关系需要先了解另一个原则——里氏代换原则
里氏代换原则
里氏代换原则就是子类类型必须能够替换掉它们的父类类型。
关于这个原理的应用其实也很常见比如在 Qt 中所有窗口类型的类的构造函数都有一个 QWidget* 类型的参数QWidget 类是所有窗口的基类通过这个参数指定当前窗口的父对象。虽然参数是窗口类的基类类型但是我们在给其指定实参的大多数时候指定的都是子类的对象其实也就是相当于使用子类类型替换掉了它们的父类类型。
上面在讲依赖倒转原则的时候说过抽象不应该依赖细节细节应该依赖抽象。也就意味着我们应该对细节进行封装在 C 中就是将其放到一个抽象类中C 中没有接口不能像 Java 一样封装成接口每个细节就相当于上面例子中的哺乳动物的一个特性这样一来这个抽象的哺乳动物类就成了项目架构中高层和低层的桥梁将二者整合到一起。
抽象类中提供的接口是固定不变的低层模块是抽象类的子类继承了抽象类的接口并且可以重写这些接口的行为高层模块想要实现某些功能调用的是抽象类中的函数接口并且是通过抽象类的父类指针引用其子类的实例对象用子类类型替换父类类型这样就实现了多态。 基于依赖倒转原则将项目的结构换成上图的这种模式之后低层模块发生变化对应高层模块是没有任何影响的这样程序猿的工作量降低了代码也更容易维护说白了依赖倒转原则就是对多态的典型应用。