• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C# 面向对象的基本原则

C# 面向对象的基本原则

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c#面向对象,c#面向对象程序设计,c#面向对象编程,c#面向对象编程实例,c#面向对象编程思想等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
C#面向对象的基本原则
一、面向接口编成而不是实现 [Code to an interface rather than to an implementation.]

二、优先使用组合而非继承 [Favor Composition Over Inheritance.]

三、SRP: The single responsibility principle 单一职责
系统中的每一个对象都应该只有一个单独的职责,而所有对象所关注的就是自身职责的完成。[Every object in your system should have a single responsibility ,and all the object s services should be focused on carrying out that single responsibility .]
每一个职责都是一个设计的变因,需求变化的时候,需求变化反映为类职责的变化。当你系统里面的对象都只有一个变化的原因的时候,你就已经很好的遵循了SRP原则。 如果一个类承担的职责过多,就等于把这些职责耦合在了一起。一个职责的变化就可能削弱或者抑制这个类其它职责的能力。这种设计会导致脆弱的设计。当变化发生的时候,设计会遭到意想不到的破坏。SRP 让这个系统更容易管理维护,因为不是所有的问题都搅在一起。
内聚[Cohesion[ 其实是SRP原则的另外一个名字.你写了高内聚的软件其实就是说你很好的应用了SRP原则。

四、DRY : Don't repeat yourself Principle 避免代码重复原则
通过抽取公共部分放置在一个地方避免代码重复.[Avoid duplicate code by abstracting out things that are common and placing those thing in a single location .]
DRY 很简单,但却是确保我们代码容易维护和复用的关键。你尽力避免重复代码实际上是在确保每一个需求和功能在你的系统中只实现一次,否则就存在浪费!系统用例不存在交集,所以我们的代码更不应该重复,从这个角度看DRY可就不只是在说代码了。
DRY 关注的是系统内的信息和行为都放在一个单一的,明显的位置。就像你可以猜到正则表达式在.net中的位置一样,因为合理所以可以猜到。
DRY 原则:如何对系统职能进行良好的分割!职责清晰的界限一定程度上保证了代码的单一性。

五、OCP : Open-Close Principle 开放闭合原则
类应该对修改关闭,对扩展打开;[Classes should be open for extension ,and closed for modification .]
OCP 关注的是灵活性,改动是通过增加代码进行的,而不是改动现有的代码;
OCP的应用限定在可能会发生的变化上,通过创建抽象来隔离以后可能发生的同类变化
OCP原则传递出来这样一个思想:一旦你写出来了可以工作的代码,就要努力保证这段代码一直可以工作。这可以说是一个底线。稍微提高一点要求,一旦我们的代码质量到了一个水平,我们要尽最大努力保证代码质量不回退。这样的要求使我们面对一个问题的时候不会使用凑活的方法来解决,或者说是放任自流的方式来解决一个问题;比如代码添加了无数对特定数据的处理,特化的代码越来越多,代码意图开始含混不清,开始退化。
OCP 背后的机制:封装和抽象;封闭是建立在抽象基础上的,使用抽象获得显示的封闭;继承是OCP最简单的例子。除了子类化和方法重载我们还有一些更优雅的方法来实现比如组合; 怎样在不改变源代码(关闭修改)的情况下更改它的行为呢?答案就是抽象,OCP背后的机制就是抽象和多态.没有一个可以适应所有情况的贴切的模型!一定会有变化,不可能完全封闭.对程序中的每一个部分都肆意的抽象不是一个好主意,正确的做法是开发人员仅仅对频繁变化的部分做出抽象。拒绝不成熟的抽象和抽象本身一样重要。 OCP是OOD很多说法的核心,如果这个原则有效应用,我们就可以获更强的可维护性 可重用 灵活性 健壮性 LSP是OCP成为可能的主要原则之一

六、LSP: The Liskov substitution principle 里氏替换原则
子类必须能够替换基类。[Subtypes must be substitutable for their base types.]
LSP关注的是怎样良好的使用继承. 必须要清楚是使用一个Method还是要扩展它,但是绝对不是改变它。
LSP清晰的指出,OOD的IS-A关系是就行为方式而言,行为方式是可以进行合理假设的,是客户程序所依赖的。
LSP让我们得出一个重要的结论:一个模型如果孤立的看,并不具有真正意义的有效性。模型的有效性只能通过它的客户程序来表现。必须根据设计的使用者做出的 合理假设来审视它。而假设是难以预测的,直到设计臭味出现的时候才处理它们。
对于LSP的违反也潜在的违反了OCP 。

七、DIP:依赖倒置原则
高层模块不应该依赖于底层模块 二者都应该依赖于抽象,抽象不应该依赖于细节 细节应该依赖于抽象。
什么是高层模块?高层模块包含了应用程序中重要的策略选择和业务模型。这些高层模块使其所在的应用程序区别于其它。 如果高层模块依赖于底层模块,那么在不同的上下文中重用高层模块就会变得十分困难。然而,如果高层模块独立于底层模块,那么高层模块就可以非常容易的被重用。该原则就是框架设计的核心原则。这里的倒置不仅仅是依赖关系的倒置也是接口所有权的倒置。应用了DIP我们会发现往往是客户拥有抽象的接口,而服务者从这些抽象接口派生。这就是著名的Hollywood原则:"Don't call us we'll call you."底层模块实现了在高层模块声明并被高层模块调用的接口。通过倒置我们创建了更灵活 更持久更容易改变的结构。
DIP的简单的启发规则:依赖于抽象;这是一个简单的陈述,该规则建议不应该依赖于具体的类,也就是说程序汇总所有的依赖都应该种植于抽象类或者接口。如果一个类很稳定,那么依赖于它不会造成伤害。然而我们自己的具体类大多是不稳定的,通过把他们隐藏在抽象接口后面可以隔离不稳定性。依赖倒置可以应用于任何存在一个类向另一个类发送消息的地方,依赖倒置原则是实现许多面向对象技术多宣称的好处的基本底层机制,是面向对象的标志所在。

八、ISP:接口隔离原则
不应该强迫客户程序依赖它们不需要的使用的方法。
接口不是高内聚的,一个接口可以分成N组方法,那么这个接口就需要使用ISP处理一下。
接口的划分是由使用它的客户程序决定的,客户程序是分离的接口也应该是分离的。
一个接口中包含太多行为时候,导致它们的客户程序之间产生不正常的依赖关系,我们要做的就是分离接口,实现解耦。
应用了ISP之后,客户程序看到的是多个内聚的接口。 </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#开发教程之利用特性自定义数据导出到Excel
  • C#中的不可变数据类型介绍(不可变对象、不可变集合)
  • C#编写的生辰八字计算程序
  • C#中委托的基本概念介绍
  • C#特性-对象集合初始化器介绍
  • 浅谈c# 面向对象之类与对象
  • 浅谈对c# 面向对象的理解
  • C#面向对象编程之猜拳游戏实现方法
  • C#托管堆对象实例包含内容分析
  • C#利用反射来判断对象是否包含某个属性的实现方法

相关文章

  • 2017-05-28C#获得MAC地址(网卡序列号)的实现代码
  • 2017-05-28C#正则检测字符串是否字母数字混编的方法
  • 2017-05-28验证码的三个常见漏洞和修复方法
  • 2017-05-28c#执行excel宏模版的方法
  • 2017-05-28C#画笔Pen使用路径绘制图形的方法
  • 2017-05-28解析使用enumerator模式简化异步操作的详解
  • 2017-05-28C#监控文件夹并自动给图片文件打水印的方法
  • 2017-05-28C#中的多态深入理解
  • 2017-05-28c# 备忘录模式
  • 2017-05-28C#十五子游戏编写代码

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#实现获取一年中是第几个星期的方法
    • c# HttpWebRequest通过代理服务器抓取网页内容应用介绍
    • C#实现将javascript文件编译成dll文件的方法
    • C# Socket的TCP通讯的实例代码
    • C#中使用基数排序算法对字符串进行排序的示例
    • C#验证控件validator的简单使用
    • C# XML序列化方法及常用特性总结分析
    • C# IFF图形结构解析代码
    • c#代码自动修改解决方案下任意文件实例
    • 分享WCF聊天程序--WCFChat实现代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有