python面向对象思想

文章目录

  • 面向对象
    • 三大方法
      • 封装
      • 继承与多态
    • 六大原则
      • 开闭原则
      • 类的单一职责
      • 依赖倒置
      • 组合复用原则
      • 里式替换
      • 迪米特法则
    • 我对面向对象的理解:(这下面的才是重点好吧)

面向对象

面向对象主要
三大方法:

封装,继承,多态
六大原则:

  1. 开闭原则
  2. 类的单一职责
  3. 依赖倒置
  4. 组合复用原则
  5. 里式替换
  6. 迪米特法则

三大方法

封装

封装的心法口诀
1.分而制之
2.变者疏之
3.高内聚
4.低耦合
封装的好处
在运用封装的时候,封装起到对代码包装的作用,让使用者只用了解必要的要素,忽略那些次要的要素。

打个比方,现在的空调,在使用时我们都会使用遥控器,而不是去考虑空调内部的实现过程。

用一句很浓缩的话来概括我觉得那就是:
把该隐藏的隐藏起来,把该暴露的暴露出来。

python面向对象思想_第1张图片

继承与多态

在生活中,一想到继承往往是子承父业等等。也就是说工作是爸爸干的,但成果儿子却可以用。在编程中当很多子类都有相同的功能的时候,甚至代码都是一样的(编码代码重复是原罪),可以讲这些功能提为父类,儿子们只要调用爸爸的方法就可以了。而父类的方法在子类上不同的体现就是多态。

python面向对象思想_第2张图片
不仅如此,在实际的工作中,继承也将架构师和程序员的工作分开了。

将子类的功能抽象一个父类,就好比集天下武功为大集。有透过现在看本质的感觉
子类多态的体现则可以类比动物的科目同属猫科动物,狮子是吼吼吼,而小猫这是喵喵喵,手动滑稽,哈哈。

python面向对象思想_第3张图片

六大原则

开闭原则

Open Closed Principle
对扩展开放,对修改关闭。
增加新功能,不改变原有代码。
在函数式编程中,装饰器是一个可以使代码很好的遵守开闭原则的方法

类的单一职责

一个类只有一个改变它的原因
也就是**只做一件“事”

依赖倒置

Dependency Inversion Principle
客户端代码(调用的类)尽量依赖(使用)抽象的组件。
抽象的是稳定的。实现是多变的。

组合复用原则

Composite Reuse Principle
如果仅仅为了代码复用优先选择组合复用,而非继承复用。
组合的耦合性相对继承低。

这里用一张图来表述组合和继承之间的区别
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DOHCXJNv-1570806365702)(./image/继承与组合.png)]

里式替换

Liskov Substitution Principle
父类出现的地方可以被子类替换,在替换后依然保持原功能。
子类要拥有父类的所有功能。
子类在重写父类方法时,尽量选择扩展重写,防止改变了功能。>继承后的重写,指导继承的设计

迪米特法则

Law of Demeter
不要和陌生人说话。
类与类交互时,在满足功能要求的基础上,传递的数据量越少越好。因为这样可能降低耦合度。

我对面向对象的理解:(这下面的才是重点好吧)

融入生活中的面向对象思想:
面向对象,听起来很高大上的理念,然而生活中充满着类似的细节

我们用空调时不会去理解其内部结构,而是使用,这要多亏设计者封装的实现
python面向对象思想_第4张图片

英雄联盟持续黑铁,有人会想到找代练,这就是一种面向对象的思想,管他什么坑的队友全交给代练去吧!!!
python面向对象思想_第5张图片

面向对象和面向过程的比较

在中国的漫长历史中,四大发明是我国的瑰宝,印刷术就是其中之一。在其的发展历程中,有活字印刷术和雕版印刷术两种,两者比较,活字印刷术面向对象改变,具有强大的灵活性,然而在拼接字时需要耗时。雕版印刷面向雕刻的过程,制作耗时但是一旦完成,有着强大的速度。
python面向对象思想_第6张图片
对面向对象的大理解:

面向对象的发展是一种偶然,更是一种必然,人类世界的发展,需要处理的问题越来越复杂。面向对象通过归纳概括,以辩证的思想对事物的特性进行分析(扬弃),然后不断添加相同特性的事物,以使模型更丰富,更具有广度(是否会更具有深度有待以后验证)。这是一个先精简的过程,能让我们逻辑更加清晰,而后续添加又使得模型有了更多可能,不断完善。但是面向对象的使用不可避免的会出现一些问题,需要我们注意。所以对一个完善模型的选择和使用,能使我们更加方便。
python面向对象思想_第7张图片

在自己编写程序时的感想:

在最近编写的小程序中,因为类还比较少所以继承和多态没有太多的体现,但是封装和重写有着比较深刻的印象,在编写过程中通过分析大的方向封装类,再在类的内部实现具体细节,我认为面向对象和面向过程并不是水火不容的,在面向对象确定大的方向后,在实现一个函数里的某个细节时,去考虑面向对象的六大原则,这六大原则中的细节也可以看做一种面向过程的思想。 然后就是重写,Linus Torvalds曾说过:Nobody actually creates perfect code the first time around, except me. But there’s only one of me.在写代码中一次次的重构修改,这也是代码的一部分,在我编写的企业防伪码生成器中,发现程序如果生成的数量太大会卡死,优化算法,重新构思。我对此乐此不疲。
python面向对象思想_第8张图片

你可能感兴趣的:(python面向对象思想)