夜来风雨声,对象知多少。
面向对象技术总结
面向对象设计的目标
可扩展性
Extensibility
系统可以很容易增加功能,而对原有的系统影响很小
灵活性
Flexibility
- 模块相对独立,通信尽可能少
- 当一个模块修改时,对别的模块影响很小
可替换性
Pluggability
- 当一部分不在满足需要时,可以将旧的部分用新的轻松替换
- 系统“在线升级”功能就是很好的说明
面向对象的总体原则
- 针对接口编程,而不是针对实现编程
- 客户无需知道所使用的的对象的特定类型
- 只需要知道对象拥有客户所期望的接口
- 优先使用对象组合,而不是类继承
- 对象组合:一个含有其他对象的类称为组合类,比如使用的扩展实体
- 继承在某种程度上破坏了封装性、子类父类耦合度高,父类修改后会影响子类
- 而对象组合只要求被组合的对象具有良好定义的接口。耦合度降低,一个类的修改对于其他类影响很小
- 封装变化点
- 使用封装创建对象之间的分界层,让设计者可以在分界层的一侧进行修改,而不影响另一侧,从而实现层次键的松耦合
- 同一层如果某个接口不固定也可以通过多态封装变化点,简单工厂的使用就是例子
面向对象的常用原则
“开-闭”原则(Open-Close Principle OCP)
- 约束对象如何对可变性封装问题
- 一个软件系统应当对扩展开放,对修改关闭
- 添加新功能时应该只是向代码集中添加新的代码,不应该修改原本的代码
里氏替代原则(Liskov Substitution Principle LSP)
- 约束子类和父类如何替换的问题
- 要求子类可以无条件的替代父类,例如多态的时候使用父类类型作为参数,但是实际传递的还是子类对象
依赖倒转原则(Dependence Inversion Principle DIP)
要求开发中针对接口编程(业务依赖于接口,而不是实现)
在进行业务设计时,应尽量在接口或抽象类中定义业务方法,并且通过具体的实现类(或子类)来实现业务方法
业务方法的修改将不会影响到运行时业务方法的调用,比如抽象工厂IDAL和DAL之间的关系
聚合复用原则(Composite/Aggregate Reuse Principle CARP)
- 尽量使用组合/聚合、尽量不要使用继承
- 在一个新的对象里面使用一些已有的对象,使之成为新的对象的一部分
- 新的对象通过向这些对象的委派达到复用这些对象的目的
迪米特法则(Law Of Demeter LOD)
- 耦合度问题:尽量“不要和陌生人说话”
- 一个软件实体应当尽可能少的与其他实体发生相互作用
- 初衷在于降低类之间的耦合。由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块独立,相互之间不存在依赖关系
接口隔离原则(Interface Separate Principle ISP)
- 要求接口的职责单一
- 使用多个专门的接口比使用单一的总接口要好,也就是说,一个类对另外一个类的依赖性应当是建立在最小的接口上
其他原则:类的职责明确原则等。。。
单例模式
所谓单例,就是整个程序有且仅有一个实例。该类负责创建自己的对象,同时确保只有一个对象被创建
public class Admin{public static Admin Instance = null;public static Admin CreateInstance(){if (Instance==null){Instance = new Admin();}return Instance;}}
创建对象实例时
Admin adm = Admin.CreateInstance();
.NET新特性
推断类型
var可以根据变量的初始值自动推断局部变量的类型
- var只能定影局部变量,而不能定义成员变量
- 定义的时候必须同时完成初始化,而不能使用var定义变量为NULL
- var本身并不是一种新的类型,只是用来修饰一个可推断出具体类型的局部变量
var定义变量和object类型定义的区别
匿名类
什么是匿名类
static void Main(string[] args){var objPerson = new { Name="小明",Age=20,ClassName="C#"};Console.WriteLine("有一个学生叫{0},班级是{1}",objPerson.Name,objPerson.ClassName);Console.ReadLine();}
特点:
- 直接使用var关键字声明,并且使用new关键字创建对象
- 不需要提前编写类的成员,并且只能添加对象的属性
扩展方法
扩展方法定义
- 扩展方法必须在静态类中定义
- 扩展方法是一种特殊的静态方法
- 第一个参数前必须加关键字this,this后面的这个数据类型不是参数类型,这个类型代表这个方法是给哪个对象扩展的
- 参数的命名表示当前变量
public static int Calc(this Student stu,int a,int b){return a + b;}
Student stu = new Student() { Name = "张三", Age = 20 };Console.WriteLine("3+5="+ stu.Calc(3,5));Console.ReadLine();
不带参数的扩展方法
static 方法名 (this 目标类型 目标类型参数){}
带参数的扩展方法
static 方法名(this 目标类型 目标类型参数,参数1,参数2,....)
扩展方法注意
- 扩展方法必须定义在静态类中,扩展方法本身也是静态方法
- 如果扩展方法和对应的类位于不同的命名空间,使用时应引入扩展方法所在的静态类的命名空间
- 当类本身的方法与扩展方法重名时,类本身的方法是被优先调用的
- 扩展方法不要过多使用
- 扩展方法也支持重载
扩展方法作用
问题:公司购买了一个第三方编写的模块用于项目开发,该模块被封装在了DLL中,现在需要针对第三方模块中某一个类增加一个方法,该怎么办?
解决防范:
使用继承,但是存在风险(有可能这个类还是最终类sealed)
使用扩展方法解决上面问题
委托
https://blog.csdn.net/chonbi/article/details/103897842
Lambda表达式
https://blog.csdn.net/chonbi/article/details/103967570
夜来风雨声,对象知多少。相关推荐
- python 类 对象 知乎_GitHub - egrcc/zhihu-python: 获取知乎内容信息,包括问题,答案,用户,收藏夹信息...
zhihu-python:获取知乎信息 注意: 本项目不再维护更新! zhihu-python 采用 Python2.7 编写,用来方便地获取知乎上各种内容的信息,并且可以方便地将答案备份导出为 tx ...
- python 类 对象 知乎_python基础知识:类,对象,模块三者的区别
长话短说,我线代作业还没有写呢. 有点编程语言知识的朋友应该知道,编程语言有"面向对象"和"面向过程"两种. 解释一下:面向对象技术是目前流行的系统设计开发技术 ...
- python一切都是对象 知乎_python一切皆对象
1. 一切皆对象 1.1 先了解类 故事要从一切皆对象开始讲起,与对象相伴的一个概念叫类,类就好比模板,对象都是根据这个模板刻画衍生出来的. 比如下面这行简单的代码 a = int('3') prin ...
- 等保2.0.等保对象知多少
文章目录 简介 等级保护对象 信息系统 通信网络设施 数据资源 定级对象的划分 小结 简介 在等保2.0的过程中,会有很多个对象,这些对象分别指的是什么?在测评过程中如何进行选择?本文将从等保定级的角 ...
- 不用代码,10分钟会采集微博、微信、知乎、58同城数据和信息
点击上方蓝字关注公众号 码个蛋第268次推文 一个"刮刀"全搞定 作者:书生婉悠 博客:https://www.jianshu.com/u/46175078f805 学会信息和数据 ...
- spring框架学习(三)
一.Spring自动组件扫描 Spring 提供组件扫描(component scanning)功能.它能从指定的classpath里自动扫描.侦测和实例化具有特定注解的组件. 基本的注解是@Comp ...
- java做的web系统 m1 读卡器 结合_IE浏览器接入IC卡读写器实现M1卡的读写功能
基于ActiveX技术的ocx控件是实现网页上读写 IC卡的一个比较不错的方法,因为ocx是com组件,通过其发布的接口,IE可以实现所有的功能.ActiveX不仅能适应大部分编程语言,做到与编程语言 ...
- MATLAB2016笔记(九):概率统计( 概率密度、统计作图、统计特征、累积概率分布、随机变量产生)
文章目录 一.产生随机变量 (一)二项分布随机数据的产生 binornd (二)正态分布随机数据的产生 normrnd (三)常见分布随机数据的产生 二.概率密度计算 (一)通用函数概率密度值 pdf ...
- 山东大学人机交互考试重点
人机交互定义 广义 人机交互是关于设计.评价和实现供人们使用的交互式计算机系统,且围绕这些方面的主要现象进行研究的学科 广义上讲,人机交互是以实现自然.高效.和谐的人机关机为目的,与之相关的理论和技术 ...
最新文章
- mac搭建ios自动化环境之WebDriverAgent配置
- 简明python教程 --C++程序员的视角(八):标准库
- ssm 框架配置详解
- [NOIP2006] 数列
- [vue] 说下你对指令的理解?
- 雨课堂知识点总结(七)
- Android Activity launchMode研究
- 从中报危机看创业板:谁在兜售“上市经济”?
- 帕萨特加载模式启用怎么解除_大众帕萨特VCDS刷隐藏功能方法
- 评价法(二):模糊综合评价的步骤和方法
- oppo自带计算机版本,OPPO手机助手
- LeetCode-Python-1386. 安排电影院座位(数组)
- EQ一卡通踩过的坑,解决加载不到动态库,输出数据到led屏乱码问题
- pytorch crnn 笔记(二)
- 关于win10X64 连接oracle
- 淘宝美工设计就业怎么样?零基础学淘宝美工设计怎么学?
- CMD/DOS学习笔记
- 如何连接并处理 sdf 数据库文件(便捷数据库处理)
- win10系统电脑声音图标正常,但没有声音
- 微博将于今日晚间挂牌上市 最高融资金额4.37亿美元