面向对象和设计模式

2018-02-13  本文已影响5人  马小跳_

理解面向对象编程

面向对象的世界引入了对象的概念,而这些对象又具有属性(数据成员)和方法(成员函数)。方法的作用就是处理属性。

对象:

类:

方法:

面向对象的主要概念

封装:

多态:

继承:

抽象:

在下面的例子中,我们通过 add ()方法对类 Adder 的内部细节进行了抽象处理:

class Adder:
    def __init__(self):
        self.sum = 0
    def add(self, value):
        self.sum += value
        
acc = Adder()
for i in range(99):
    acc.add(i)
print(acc.sum)

组合:

在下面的示例中,类 A 的对象被组合到了类 B 中:

class A(object):
    def a1(self):
        print("a1")
class B(object):
    def b(self):
        print("b")
        A().a1()
objectB = B()
objectB.b()

面向对象的设计原则

开放封闭原则

开放/封闭原则规定,类或对象及其方法对于扩展来说,应该是开放的,但是对于修改来说,应该是封闭的。

这意味着当你开发软件应用的时候,一定确保以通用的方式来编写类或模块,以便每当需要扩展类或对象行为的时候不必修改类本身。相反,类的简单扩展将有助于建立新的行为。

优点:

控制反转原则

控制反转原则是指,高层级的模块不应该依赖于低层级的模块,它们应该都依赖于抽象。细节应该依赖于抽象,而不是抽象依赖于细节。

该原则建议任何两个模块都不应以紧密方式相互依赖。事实上,基本模块和从属模块应当在它们之间提供一个抽象层来耦合。这个原则还建议,类的细节应该描绘抽象。在某些情况下,这种观念会反转,也就是实现细节本身决定了抽象,这种情况是应该避免的。

优点:

接口隔离原则

接口隔离原则规定,客户端不应该依赖于它们不需要使用的接口。

接口隔离原则的意思就是,软件开发人员应该仔细地处理接口。例如,它提醒开发人员/架构师开发的方法要与特定功能紧密相关。如果存在与接口无关的方法,那么依赖于该接口的类就必须实现它,实际上这是毫无必要的。

优点:

单一职责原则

单一职责的含义是:类的职责单一,引起类变化的原因单一。

这个原则是说,当我们开发类时,它应该为特定的功能服务。如果一个类实现了两个功能,那么最好将它们分开。也就是说,功能才是改变的理由。

例如,一个类可以因为所需行为的变化而进行修改,但是如果一个类由于两个因素(基本上是两个功能的改变)而改变,那么该类就应该进行相应的分割。

优点:

替换原则

替换原则规定,派生类必须能够完全取代基类。

这个原则很简单,当应用程序开发人员编写派生类时,该原则的含义就是他们应该扩展基类。此外,它还建议派生类应该尽可能对基类封闭,以至于派生类本身可以替换基类,而无需修改任何代码。

设计模式的概念

设计模式是由 GoF(Gang of Four)首先提出的,根据他们的观点,设计模式就是解决特定问题的解决方案。

设计模式的主要特点如下所示:

设计模式是已知问题的解决方案。因此,设计模式在分析或设计阶段非常有用,并且如预期的那样,在开发阶段也非常有用,因为它们与应用的编程直接相关。

设计模式的优点如下所示:

常用术语

代码段:用某种语言编写的一段具有特定用途的代码,例如,它可以是 Python 中的 DB 连接代码。

设计:用来解决某个特定问题的优秀解决方案。

标准:这是一种解决某类问题的方法,它非常通用,并且适用于当前的情况

模式:这是一个经过时间考验的、高效、可扩展的解决方案,能够解决一类已知问题。

上下文 — 设计模式的适用性

为了有效地使用设计模式,应用程序开发人员必须了解设计模式所适用的上下文。我们可以将上下文分为以下几种主要类型。

设计模式的分类

模式的分类主要基于对象的创建方式、软件应用程序中类和对象的构造方式,同时还涉及对象之间的交互方式。

创建型模式

单例模式是创建型模式的一个例子。

结构型模式

适配器模式是结构型模式的一个例子。

行为型模式

观察者模式是行为型模式的一个例子。

上一篇 下一篇

猜你喜欢

热点阅读