目录

  • 前言
  • oop思想
    • 面向过程
    • 面向对象
  • 面向对象特点:
  • 设计模式/原则
  • 设计模式六大原则:
    • 单一职责原则(Single Responsibility Principle)
    • 里氏替换原则(Liskov Substitution Principle)
    • 依赖倒置原则(Dependence Inversion Principle)
    • 接口隔离原则(Interface Segregation Principle)
    • 迪米特法则 (Law Of Demeter)
    • 开闭原则 (Open Closed Principle)

前言

类与接口的区别;
类是为了说明是什么。
接口是为了限定做什么。

pop:procedure oriented programming 面向过程编程
oop:object oriented programming 面向对象编程

oop思想

面向过程

面向对象

面向对象特点:

继承、封装,多态;

  1. 封装:
    就是对象的确定,隔离了内部的业务逻辑,外面根本不用去操心怎么实现,只要是让外部调用的方法名称不变,外面就不受影响;那么内部就可以自由扩展,修改;
    数据安全,可以通过不同的访问修饰符,来限定外部是否可以调用;外面只能通过我定义的对完公开接口进行访问(不能随便修改)
    降低耦合: 提高重用性;隐藏不想让别人看到的东西;

  2. 继承:子类可以拥有父类的一切行为和属性,继承以后代码也可以重用;
    单基类继承;就是是只能有一个父类;
    重写,覆写,重载
    重载:方法签名一样,但是参数列表不同;跟返回值没关系;

  3. 多态:可以有不同的状态;一个类可以有多个类型来表示,当然还有方法; 运行时多态:虚方法 能不能类不让其他类来继承;
    继承后多态;通过一个声明,来调用行为,执行的真正动作其实不一样; 接口多态:同一个接口声明,调用同一个方法,执行的却是不同的和业务逻辑

    Tips: 抽象类不可被实例;接口可以继承接口;
    

设计模式/原则

  • 设计模式:面向对象语言开发过程中,遇到种种的场景和问题,提出的解决方案和思路,沉淀下来
  • 设计模式六大原则:面向对象语言开发过程中,推荐的一些指导性原则
    没有明确的招数,而且也经常会被忽视/违背
    也是前辈总结,也是为了站在前辈的肩膀上
  • 原则:建议,不是一定要使用;

设计模式六大原则:

单一职责原则(Single Responsibility Principle)

  • 类单一职责:一个类只负责一件事儿;

  • 类层面的单一职责:父类+子类;每个类只负责自己的事儿—增加扩展性;

  • 方法层面的单一职责:每个方法只负责自己的事儿;把个件事儿拆分成不同的小方法来各自实现;每个方法就可以独立演变,增加了程序的稳定性;

  • 类库层面的单一职责:每个类库要求职责清晰;三层架构 UI+BLL+DAL+Common

  • 项目层面的单一职责:要求每个项目职责清晰:单体架构 MVC,所有的业务逻辑都写在一起;

  • 原始版电商平台:会员的系统+商品系统+订单系统 如果是全部放在一起,代码耦合很高;修改一处,其他的都受到影响;

  • 升级版电商平台:会员系统独立出来。。。。订单系统独立。。。。商品。。。。

  • 可以让每个子系统可以独立演化;增强了程序的稳定性。。。

  • 单一职责:大家视情况而定;并不是一定要遵循—我建议大家遵循;

  • 拆分:父类+子类一个类只负责了一件事儿;每个类更加简单了;简单预示着强大;

  • 代码量增加了;代码的可读性降低了;

  • 为什么要遵循单一职责呢?增加扩展性

  • 建议:如果代码很简单,没有必要去遵循单一职责
    如果代码比较复杂,建议大家还是可以去遵循单一职责;

里氏替换原则(Liskov Substitution Principle)

  • 里氏替换原则:任何使用基类的地方,都可以透明的使用其子类

  • 继承+透明==正确的是使用继承;
    1.任何父类出现的地方都可以用子类代替;
    2.子类继承父类,必须拥有父类的一切行为和属性;如果子类出现不应该有的方法;
    3.子类可以有自己的独立行为和属性,子类出现的地方,不一定可以让父类代替
    4.父类出现的动作,子类就不要再写(不要使用new隐藏)—老师也强烈建议大家不要使用这个new
    5.要求尽量使用父类类声明实例对象;

  • 说白了:老师觉得就是叫我们如何去正确的使用继承;为了解决之前的技术债

  • 如果子类出现不应该有的方法,就应该断开继承,再来一个父类;
    透明:
    继承、多态

依赖倒置原则(Dependence Inversion Principle)

  • 依赖倒置原则:上层模块不应该依赖于低层模块,二者应该通过抽象依赖
  • 项目是分层架构的:A->B->C->D->E->F
  • 如果是依赖于细节,那么如果F层发生需求编程,代码调整了,会导致E层也会不稳定,E层也要----。。。。。上层会成冒泡式修改。。。
  • 如果依赖倒置以后:不再依赖于细节,而是依赖于抽象,抽象相对稳定,只要抽象不修改,高层就不受影响;如果F代码修改了,E依赖的是F的抽象,E不受影响,上层都不受影响;整个系统架构才是稳定的;

接口隔离原则(Interface Segregation Principle)

  • 接口隔离原则:客户端不应该依赖它不需要的接口;
    一个类对另一个类的依赖应该建立在最小的接口上;
  • 正确的使用接口

迪米特法则 (Law Of Demeter)

  • 迪米特法则(最少知道原则):一个对象应该对其他对象保持最少的了解。
    只与直接的朋友通信。 —最少知道别人的事儿,也尽量让别人最少知道自己的事儿;不好好奇心太重;

  • 面向对象开发:万物皆对象;一个功能的实现===多个对象交互产生;
    类和类之间的关系:
    纵向:继承、实现
    横向:聚合>组合>关联>依赖(体现在方法内部)

  • 高内聚—低耦合;
    为什么要遵循迪米特法则:就是为了能减低耦合;让代码更加稳定; 代码稳定,代码的健壮性,代码的安全—你们做了大型项目后悔有明显的感觉;

  • 成本:增加了复杂性,可读性也降低了;

  • 迪米特法则的应用:三层架构—UI+BLL+DAL
    门面模式:转移依赖耦合

  • 要求私密性:正确的使用访问修饰;
    public private protected interal

开闭原则 (Open Closed Principle)

  • 开闭原则:对扩展开发,对修改关闭。

  • 修改:修改现有代码(类)
    扩展:增加代码(类)

  • 开闭原则建议:无论是功能的增加还是功能的修改,都通过增加代码(类);
    建议大家代码只增不改;—原有代码不修改,系统必然稳定;

  • 开闭原则其实是前面五大原则的总则;

  • 增加方法—增加类—增加类库(可以生成dll文件 + 抽象约束+配置文件)

11:c# oop思想面向对象编程(by-朝夕)相关推荐

  1. java理念_java温故而知新(9)OOP(面向对象编程)理念

    Object   Oriented   Programming   (面向对象的程序设计) 1.定义 面向对象程序设计(OOP)的具体定义很难下,也很容易因此而引起争论,在   Object-Orie ...

  2. 面向对象编程(OOP)面向对象编程(OOP)

    Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码的可理解性. 面向对象编 ...

  3. C++STL与泛型编程(4)OOP(面向对象编程) Vs. GP(泛型编程)

    文章目录 OOP和GP 为什么list不能使用标准库中的::sort算法? 采用GP的好处 OOP和GP OOP将datas和methods关联在一起 GP将datas和methods分开 为什么li ...

  4. 扩展方法必须在非泛型静态类中定义_第11篇:Cython面向对象编程--扩展类的实例化...

    我们前篇谈到了Cython的访问控制,并且谈论了cdef class关键字的底层操作,顺带也谈论了Python类为什么会比Cython类慢的原因.本篇我们将介绍Cython扩展类的初始化 Cython ...

  5. 面向对象编程(OOP)理解

    面向对象与叫化鸡比喻 面向对象的比喻实在太多了.不知哪个比喻更能让你明白呢? 理解面向对象编程 (Object Oriented Programming 简称OOP) 所谓"面向对象编程&q ...

  6. 面向对象编程思想及入门知识

    这几天在调程序,所以想写写自己对"面向对象编程"的一些理解,希望对打算入门计算机编程的同志们有所帮助.之前,好几个师弟问过我,C++与C有什么区别,学习面向对象语言需要掌握哪些基础 ...

  7. java学习笔记-第八章:面向对象编程(中级部分)

    第八章:面向对象编程(中级部分) 总体内容 IDEA IDEA介绍 ECLIPSE介绍 IDEA使用 破解IDEA2020.2.2 IDEA工作界面介绍 IDEA调整代码,导航栏的字体大小,主题颜色, ...

  8. java面向对象编程基础

    java面向对象编程基础 前言:什么是java 是咖啡飘香的清晨 - 是斯坦福校园意浓情深 - 是James的思想睿智 是剁手党双十一挥舞的利刃 是大数据云计算驰骋的平台 - 是ATM上吐出的钞票 - ...

  9. Python 进阶 — 面向对象编程

    目录 文章目录 目录 面向对象思想 面向对象编程 面向对象编程的特性 封装 继承 多态 面向对象编程的优势 Python 的类属性与类方法 Python 类的实例化 Python 的对象属性与对象方法 ...

  10. C# 篇基础知识3——面向对象编程

    面向过程的结构化编程,例如1972年美国贝尔研究所推出的C语言,这类编程方式重点放在在定函数上,将较大任务分解成若干小任务,每个小任务由函数实现,分而治之的思想,然而随着软件规模的不断扩张,软件的复杂 ...

最新文章

  1. c语言 rand_C语言随机数
  2. 移动端页面滑动事件穿透问题及其解决方案
  3. 向量积判断优劣弧_判断经验论文优劣的10条诫命
  4. 红米k30 android版本,Redmi K30 Pro 推送 MIUI 12.2.1 稳定版:为安卓跨版本升级
  5. warning C4996: 'fopen': This function or variable may be unsafe.(_CRT_SECURE_NO_WARNINGS)
  6. 腾讯公开“区块链网络的信息处理方法”相关专利
  7. hex与bin文件及hex2bin
  8. 非参数统计的Python实现—— Wilcoxon 符号秩检验
  9. 程序员思维训练500题(附带答案)
  10. 2021南京大学软件学院考研经验
  11. 梦幻西游易语言辅助教程
  12. 使用 SCTP 优化网络
  13. RB-PEG2000-Pyrene,含有芘丁酸和罗丹明的PEG,Pyrene-PEG2000-Rhodamine
  14. [计算机网络]-网络层-1
  15. tsconfig.json详细配置
  16. Debain查看ip地址
  17. Android 10.0 SystemUI修改状态栏电池图标样式为横屏显示
  18. linux 多线程编程-互斥锁问题之tpp.c:63: __pthread_tpp_change_priority failed 问题解决
  19. SAP SM04踢人操作(摘录)
  20. Tita OKR 和绩效管理:它们如何协同工作

热门文章

  1. 怎样去掉图片上的文字
  2. chrome调试微信网页_2022.2.9可行
  3. Ansys SCDM基本操作
  4. 百度的AI赛事,正在启蒙一代年轻人
  5. 一张帖搞定同学们入学黑马前所有难题
  6. css文字加边框镂空文字_如何使用CSS创建镂空边框设计
  7. java 聊天机器人_java实现自动回复聊天机器人
  8. Puzzle UVA - 227 谜题
  9. Qt 确认对话框(确定/取消)
  10. Tomcat8出现To prevent a memory leak, the JDBC Driver has been forcibly unregistered