三大特性

封装、继承、多态性

拿简单工厂模式举例:

namespace DesignMode_01

{

// 计算基类

public class Operation

{

private double _numberA = 0;

private double _numberB = 0;

public double NumberA { get => _numberA; set => _numberA = value; }

public double NumberB { get => _numberB; set => _numberB = value; }

public virtual double GetResult()

{

double result = 0;

return result;

}

}

// 加法类

public class OperationAdd : Operation

{

public override double GetResult()

{

double result = 0;

result = NumberA + NumberB;

return result;

}

}

// 减法类

public class OperationSub : Operation

{

public override double GetResult()

{

double result = 0;

result = NumberA - NumberB;

return result;

}

}

// 工厂类:生产不同类的实例化对象

public class OperationFactory

{

public static Operation CreateOperate(string operate)

{

Operation oper = null;

switch (operate)

{

case "+":

oper = new OperationAdd();

break;

case "-":

oper = new OperationSub();

break;

}

return oper;

}

}

// 当编译器遇到方法调用时,它首先在类型的实例方法中查找匹配项。如果找不到匹配项,它将搜索为该类型定义的所有扩展方法,并绑定到找到的第一个扩展方法。

public static class MyExtensions

{

public static int Count(this String str)

{

return str.Split(new char[] { ' ', '.', '?' },

StringSplitOptions.RemoveEmptyEntries).Length;

}

}

// 操作界面类

class Program

{

static void Main(string[] args)

{

Operation operation;

operation = OperationFactory.CreateOperate("+");

operation.NumberA = 1;

operation.NumberB = 2;

double result = operation.GetResult();

// 调用扩展方法

string s = "Hello Extension Methods";

s.Count();

}

}

}

封装:创建计算基类、工厂类和界面类让业务逻辑与界面逻辑分开,让它们之间的耦合度下降。

继承:加法减法类派生计算基类。

多态性:定义GetResult()虚方法,让派生类对同一个方法产生不同实现。多态性的具体实现包括重载和重写。

六大原则

单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。

比如:

你把业务逻辑、数据库访问的sql语句什么都放在一个控制器里,这就意味着,无论什么需求要来,你都需要更改这个控制器,这其实是很糟糕的,维护麻烦,复用不可能,也缺乏灵活性。这个时候就可以把程序分为服务层、仓储层,服务层专门用来处理业务逻辑,仓储层专门用处理数据库访问的sql语句。

boss直聘前端页面一个搜索文本框,可以让你选择不同行业、不同月薪的分类按钮,按分类进行检索,这也是体现了单一职责思想。

修电脑,显然内存坏了,不应该成为更换CPU的理由,他们各自的职责时明确的。当然,软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责,就应该考虑类的职责分离。

开发-封闭原则:就是软件实体(类、模块、函数等等)应该可以扩展,但是不可以修改。即面对需求,对程序的改动是通过增加新代码进行,而不是更改现有的代码。但是,绝对的对修改关闭是不可能的。在我们最初编写代码时,假设变化不会发生。当变化发生时,我们就创建抽象来隔离以后发送的同类变化。

例如:

把一个加法程序,都在一个client类中完成,如果要加一个减法功能,增加功能就需要修改原来的这个类,这就违背了开放-封闭原则。可以通过增加一个抽象的运算类,通过一些面向对象的手段,如继承、多态等来隔离具体加法、减法与client耦合。如果又要增加除法功能,你就不需要再去更改client以及加法减法的类了,而是增加乘法和除法子类就可。

中国的一国两制思想,原有的中国社会主义制度不能修改,为了回归大局,通过增加一种制度又何尝不可。

C# 中的扩展方法,你不能修改微软的源码,但是微软给你提供了扩展方法,你可以通过新增扩展方法来实现需求。

电脑内存不够只要插槽足够就可以添加,硬盘不够可以用移动硬盘等。

依赖倒转原则:说白了就是针对接口编程,不要对实现编程。

例如:

我们的服务层、仓储层都是针对接口编程。只要仓储层接口不变,换任何数据库,都不影响服务层的业务逻辑。

里氏替换原则:子类型必须能够替换掉他们的父类型。只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能正真被复用,而子类也能够在父类的基础上增加新的行为。

例如:

为什么要单独在仓储层来引入通用的ORM持久化接口,是因为,降低耦合,如果以后想要换成EF或者Deper,只需要修改Repository具体的实现类就行了,其他都不需要修改。

接口隔离原则: 客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。根据接口隔离原则,当一个接口太大时,我们需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。

迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不要应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。首先强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限,也就是说,一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开。根本思想是强调了类之间的松耦合。

例如:

IT部是抽象的,哪怕里面的人离职换了新人,我的电脑出问题了也还是可以找IT部解决,而不需要认识其中的同事,纯靠关系帮忙了。就算需要认识,我也只要认识IT部的主管就可以了,由他来安排工作。

python三大特征六大原则_面向对象程序设计(Object Oriented Programming)的三大特性,六大原则...相关推荐

  1. Python编程基础:第三十九节 面向对象编程Object Oriented Programming

    第三十九节 面向对象编程Object Oriented Programming 前言 实践 前言 到目前为止我们都是函数式编程,也即将每一个功能块写为一个函数.其实还有一种更常用的编程方式被称为面向对 ...

  2. python, 面向对象编程Object Oriented Programming(OOP)

    把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行.为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数 ...

  3. 面向对象编程 object oriented programming(OOP)

    面向对象编程,是一种编程方式,这种编程方式需要使用"对象"来实现 对象的特征 世间万物皆对象 每个对象都是唯一的 对象具有属性和行为(对象的行为包括具有的功能及具体的实现) 对象具 ...

  4. BioPython ② | 面向对象编程Object Oriented Programming

    BioPython ② | Python面向对象编程 题目要求 定义分子类(Molecule)作为基类,包含集合elements和weight作为其属性,用初始化函数,将elements初始化为空集, ...

  5. 面向对象编程 object oriented programming(OOP)(第二篇)

    函数装饰器 对于某个函数,如果我们希望在不改变该函数代码的前提下,为该函数增加额外的功能,那么就可以使用装饰器来装饰该函数. 装饰器是一个函数,装饰器接收一个函数作为参数(传入的实参是被装饰的函数) ...

  6. SystemVerilog HVL:面向对象编程(Object Oriented Programming, OOP)

    目录 1. 封装 1.1. 构造函数 new 与句柄 1.2. 调用句柄 1.3. 静态属性 与 静态方法 1.4. 权限(local和protected) 2. 继承 2.1. 子类的构造函数 3. ...

  7. Java SE 008 理解面向对象程序设计 (Inside Object Oriented Programming)

    Java SE 008 理解面向对象程序设计 (Inside Object Oriented Programming) 前言:此笔记为圣思园张龙老师讲述的java视频课程笔记,自己看视频学习时记录的, ...

  8. c++语言编程,一个电灯两个开关控制,[理学]四川大学计算机学院精品课程_面向对象程序设计C++课件_游洪越_第一章绪论.ppt...

    [理学]四川大学计算机学院精品课程_面向对象程序设计C课件_游洪越_第一章绪论 主讲教师: 游洪跃 个人主页: /~youhongyue 邮件地址: youhongyao@ 教材:<C++面向对 ...

  9. Object Oriented Programming面向对象编程

    OOP 面向对象编程( Object Oriented Programming)是一种 计算机编程 架构.OOP 的一条基本原则是 计算机程序是由单个能够起到子 程序作用的单元或 对象组合而成.OOP ...

最新文章

  1. L - Oil Deposits HDU - 1241
  2. Python教程:with ... as 语句你懂嘛?
  3. [SDOI2006] 保安站岗
  4. linux centos升级php_CentOS使用yum升级php到最新版本
  5. Hive的使用之控制台
  6. Lucence.net索引技术 一
  7. 面试必会 MySql的锁机制(InnoDB)
  8. 【数字信号处理】基于matlab数字信号软阈值+硬阈值+改进阈值小波去噪【含Matlab源码 068期】
  9. Pyinstaller --add-data参数详解
  10. QUIC 协议在蚂蚁落地综述
  11. 【STC15】通过PWM波实现呼吸灯效果
  12. linux卸载驱动命令,卸载打印机驱动程序 (Linux)
  13. 基于小波域的隐马尔可夫树模型的图像去噪方法
  14. 【转】用万兆网卡测试超五类网线传输速度,颠覆你的认知
  15. 抢滩登陆瑞星杀毒2005(转)
  16. 用logisim设计交叉耦合电路时遇到的红线问题
  17. Gos ——内存管理系统
  18. 嗨格式Heic图片转换器v1.0.13.1436官方版
  19. 012-数据结构-树形结构-哈希树[hashtree]、字典树[trietree]、后缀树
  20. APICloud AVM框架 开发视频会议APP

热门文章

  1. AgileConfig-如何使用AgileConfig.Client读取配置
  2. 起点低,是彪悍的最好证明!
  3. 统信发布UOS V20 进军个人市场 生态日益完善
  4. dotNET:怎样处理程序中的异常(实战篇)?
  5. 如何使用Serilog.AspNetCore记录ASP.NET Core3.0的MVC属性
  6. Autofac的AOP面向切面编程研究
  7. 基于Asp.Net Core MVC和AdminLTE的响应式管理后台之侧边栏处理
  8. 中国程序员,请挺起你的腰杆!
  9. AKS使用Azure File实现动态持久化存储
  10. 给 asp.net core 写一个简单的健康检查