<随便写>软件设计遵循的基本原则

1.高内聚,低耦合

  所谓高内聚,是指一个软件模块内各个元素彼此结合的紧密程度要高,即一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。

  所谓低耦合,是指一个软件系统内不同模块之间的互连程度要低。不同模块之间的联系越紧密,其耦合性就越强,模块的独立性则越差,模块间耦合的高低取决于模块间接口的复杂性、调用的方式及传递的信息。

  因此,在一个软件系统中,应当尽量保证模块的独立性,模块实现功能职责单一,越简单越好。这样有利于系统复用,并且大大减少模块之间的依赖,系统稳定性高,更易于维护。

2.面向抽象编程

  面向过程,上下层组件依赖过大,一旦变动,都需要一起变动。软件组件模块复用性低,增加软件开发成本,且软件结构设计臃肿,不利于后期维护。

  面向对象,程序都依赖于抽象,而不依赖具体实现,抽象极少发生变化。极大降低了客户应用程序与实现细节的耦合度,提升了软件结构的健壮性。只要保证抽象不发生变化,就不需要进行太大的变化,遵循依赖倒置原则

  在程序中要尽量使用抽象类型作为对象实例变量类型,这样就保证了将客户程序与具体实现之间解耦,因为使用的是抽象类型,因此具体实现的改变不会影响抽象类型的改变。

3.多用组合少用继承

  在面向对象的软件设计中,对于类的扩展,首先想到的是使用类的继承来实现,由子类来继承父类,从而完成对子类功能的扩展。继承的好处是可以尽量让相同的属性或者功能复用,但是随着项目越来越大,需求的不断变化,继承就会变得越来越臃肿,后期难以控制和维护。最重要的是,继承会不分青红皂白地把父类的公有和受保护的方法统统继承下来,而这些方法可能是子类不需要的功能,会对子类产生一些危害。

  如果使用组合方式,就不会出现上述继承的问题。所谓对象组合,是指在一个对象中含有另外一个对象的引用,从而可以使用该内部对象的引用作出一些处理行为。使用组合方式的好处有以下几点:首先,不会对类产生有害的影响;其次,组合方式要比继承方式灵活,因为是由系统运行动态地决定使用对象与否;最后,不会造成因继承而引起的类膨胀,减少了对父类的依赖性。

  对象的组合又叫嵌套或建模,是通过不同类之间的对象相互赋值完成的

"""
创建三个学校且三个学校的设施内容等都是一致.
"""

class School(object):
    def __init__(self, name, address):
        self.name = name
        self.address = address

    def speech(self):
        print('讲课')

obj1 = School('北京校区', '美丽富饶的沙河')
obj2 = School('上海校区', '浦东新区')
obj3 = School('深圳校区', '南山区')

class Teacher(object):
    def __init__(self, name, age, salary):
        self.name = name
        self.age = age
        self.__salary = salary
        self.school = None

t1 = Teacher('李杰', 19, 188888)
t2 = Teacher('艳涛', 18, 60)
t3 = Teacher('女神',16, 900000)

# ############## 老师分配校区
t1.school = obj1
t2.school = obj1
t3.school = obj2

# ##############################
# 查看t1老师,所在的校区名称/地址
print(t1.school.name)
print(t1.school.address)
print(t1.name)
print(t1.age)
t1.school.speech()

4.“开-闭”原则

  “开-闭”原则,即“对扩展开放,对修改关闭”,指的是在软件设计中,当对某一软件实体进行扩展时,尽量不要去修改原有的软件实体,换句话说就是在不修改原有软件实体的情况下对其进行扩展。这种软件设计方式其实是一种目标,它考虑了软件后期的维护等其他因素。一个软件系统如果可以达到这个目标,那它就是可扩展、易维护的。

  在软件设计领域中,众多设计模式的应用就是为了达到这个目标。“开-闭”原则是一种很抽象的设计原则,更像是一种倡导的口号,其他设计原则都是为了实现“开-闭”原则的具体原则。“开-闭”原则与其他设计原则就好比抽象父类与子类的关系一样。

(装饰器)

 

开闭原则是总纲,它告诉我们要对扩展开放,对修改关闭;(扩展开放,修改封闭)------装饰器?

里氏替换原则告诉我们不要破坏继承体系;(合理的使用继承,不要乱用继承)----几维鸟没法继承鸟的飞行功能

依赖倒置原则告诉我们要面向接口编程;(面向抽象编程)------面向对象编程

单一职责原则告诉我们实现类要职责单一;(一个类只负责一项功能)

接口隔离原则告诉我们在设计接口的时候要精简单一;(提高内聚降低耦合,闭包函数)

迪米特法则告诉我们要降低耦合度;(高内聚,低耦合)

合成复用原则告诉我们要优先使用组合或者聚合关系复用,少用继承关系复用。(多用组合少用继承,组合即嵌套)

猜你喜欢

转载自www.cnblogs.com/shuimohei/p/11627178.html