OOP面向对象编程的六大原则(上)

名词解释:

OOA:面向对象分析 A:Analyze

OOD:面向对象设计D:Design

OOP:面向对象编程P:Program



OOP六大原则(上):对象单一职责、里式替换原则、迪米特法则、开闭原则

对象单一职责:我们设计的对象必须职责明确,不能让他成为万能类,这里的对象可以是模块、类库,程序集,不单单指类。

1.特点:最常见的。比如分层:Model、业务层、UI层。把具有相同行为的类、放到一个模块,这个就是模块职责明确。

2.好处:每个类所包含的行为,属性都属于本身,后续的维护更具有针对性。也就是说这个类的修改,是独立的,不影响其他的类。(分工明确、)后续维护方便。

里式替换原则:子类必须能够替换掉它的父类类型,反之不行。

1.好处:因为父类,可以有多个子类对象,那这样的话,后续扩展会非常多。程序不需要修改就能够扩展。

2.提醒:其实也是从另外一个角度告诉我们,我们开发当中,需要尽量面向“抽象”编程。

公式:父类类型 变量 =new 子类类型();

实例如下:

新建控制台应用程序,新建父类打印类Printer

新建子类:惠普打印机类,HPPrinter,继承Printer,并对父类的抽象方法和虚方法进行重写。

Main方法中进行测试:

可见:

父类的普通方法,结果依然调用父类的普通方法;

父类的抽象方法,重写之后,调用的是子类重写的方法;

父类的虚方法,重写之后,调用的是子类重写的方法。

我们知道,虚方法,可以重写,可以不重写,那么不重写,是否调用的就是父类的虚方法呢?注意(抽象方法无具体实现,虚方法有具体实现,抽象方法必须得重写,不然报错,而虚方法可以重写,也可以不重写)

我们把子类重写的父类的虚方法注释掉:输出如下:

调用的果然是未被重写的虚方法:父类的测试方法!

迪米特法则和开闭原则:

迪米特法则也叫最小化原则,或者说最小耦合。通常在设计程序和开发程序的时候,我们经常会讲,尽量高类聚,低耦合。而当两个对象之间交互的时候,会导致依赖的产生,我们把这种依赖叫做耦合。为了解决这个问题,OOP建议,这种耦合越少越好。

典型:就是一个对象作为另外一个对象的成员使用。

开闭原则:要去开放扩展,而封闭修改。也就是说,当需求变化的时候,我们可以增加对象,来扩展行为,而尽量少修改原有的对象。

下面代码实例:

前面我们创建的基类Printer打印类,和它的子类实现惠普打印机类,而根据迪米特法则,我们最好是设计一个中间类,来降低两个类之间的耦合。

IPrinter printer = new HPPrinter()

上述这种方式,如果需求发生变化,我们也必须去修改代码,重新编译。而根据开闭原则,我们应该少修改甚至不修改,关闭修改,而开放扩展。在这里,就是有了新的需求之后,增加新的对象,扩展行为。

所以:而当有新的需求变化,例如今年我们需要惠普打印机,而明年我们需要佳能打印机,这两个实现类的父类打印机类是不变的,我们需要将修改给封闭,开放扩展内容。我们需要一个中间表类,来充当中介角色,在中间类当中,返回所需要的子类,即实现类对象,在那里面实现动态返回所需要的实现类。明年需要佳能打印机,只需要新建一个佳能打印机的实现,并将其写在配置文件当中,这时中介类则会根据配置文件动态读取,并实现返回我们需要的子类。

接下来,我们做出如下操作:

新建一个扩展类库,并新建一个中间类,简单工厂类:SimpleFactory.用来根据一个特定的需求,产生一个具体对象的类。

新建属性,PrinterType,这个属性私有,静态,并从配置文件当中动态读取。(注意core的程序需要自己新建配置文件),并且从Nuget中下载引用Configuration包。

实现成员GetPrinter方法,通过反射动态从程序集动态创建实例,并返回Pinter接口类的实现类:HPPrinter。

新建服务接口类库,Iservice,用于定义接口。新建IPrinter接口。

新建服务实现类库,Service,用于实现接口。新建惠普打印机实现类,HPPrinter,继承IPrinter。

此时:我们可以在Main方法中调用中间类SimpleFactory的方法。

测试如下:

注意:core项目中新建的config文件不要使用默认名,需要命名为App.config

好了,今天的学习到这里就结束了,欢迎关注微信公众号:dotNET学习天地

一起学习和交流。

原文地址:https://www.cnblogs.com/xingxingzhou/p/11704833.html

时间: 2024-11-06 07:11:09

OOP面向对象编程的六大原则(上)的相关文章

面向对象编程的六大原则(1)--单一职责原则

什么是单一职责 单一职责原则(Single responsibility principle,简称SRP),顾名思义,是指一个类或者一个模块应该有且只有一个职责,它是面向对象编程六大原则之一. 单一职责的粒度 单一职责的粒度,可以是某个方法.某个类.某个程序包甚至某个功能.某个模块(甚至某个系统),每一个层次上都可以进行单一职责设计.下面来举个例子说明一下: 模块级别:某购物平台,包含如下几个模块:用户模块.商品模块.订单模块.库存模块.运输模块.支付模块,每一个模块都已本身的职责:用户模块负责

面向对象编程的六大原则

一.单一职责原则: 全称:“Single-Responsibility Principle” 说明:就一个类而言,应该只专注于做一件事和仅有一个引起它变化的原因.所谓职责,我们可以理解他为功能,就是设计的这个类功能应该只有一个,而不是两个或更多.也可以理解为引用变化的原因,当你发现有两个变化会要求我们修改这个类,那么你就要考虑撤分这个类了.因为职责是变化的一个轴线,当需求变化时,该变化会反映类的职责的变化. 使用SRP注意点: 1.一个合理的类,应该仅有一个引起它变化的原因,即单一职责: 2.在

简单理解OOP——面向对象编程

OOP:面向对象编程 一. 什么是OOP 面向对象编程:Object-oriented Programming,OOP,面向对象程序设计. 面向对象编程是一种计算机编程架构,他的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成. OOP使得程序更有重用性.灵活性和扩展性.OOP的核心思想是:封装.继承.多态(重点是类和对象). 不同于POP(面向过程编程)的以过程为中心的编程思想,面向对象编程的中心思想是通过调用对象来实现想要实现的目的. 面向对象的思想: 是一种更符合我们

微软C#6.0语言OOP面向对象编程》《微软ASP.NET\MVC56网站开发》《微软Web服务\WCF\Web API3.0课程视频》

最新<微软C#6.0语言OOP面向对象编程><微软ASP.NET\MVC56网站开发><微软Web服务\WCF\Web API3.0课程视频>下载 下载链接:http://pan.baidu.com/s/1bnjJQnd 密码:36ji 微软与开源实战训练营QQ群:  203822816微软MSDN俱乐部QQ群:  29754721,

JavaScript 精粹 基础 进阶(8)OOP面向对象编程(上)

转载请注明出处 原文连接 http://blog.huanghanlian.com/article/5b698f14b8ea642ea9213f50 面向对象编程,oop并不是针对与javascript,很多语言都实现了oop这样一个编程发法论,比如说java,c++,都是实现了oop的语言. 概念与继承 概念 面向对象程序设计(Object-oriented programming OOP)是一种程序设计范型,同时也是一种程序开发的方法.对象指的是类的实例,它将对象作为程序的基本单元,将程序和

Java面向对象设计的六大原则

这是设计模式系列开篇的第一篇文章.也是我学习设计模式过程中的总结.这篇文章主要讲的是面向对象设计中,我们应该遵循的六大原则.只有掌握了这些原则,我们才能更好的理解设计模式.我们接下来要介绍以下6个内容. 单一职责原则——SRP 开闭原则——OCP 里式替换原则——LSP 依赖倒置原则——DIP 接口隔离原则——ISP 迪米特原则——LOD 单一职责原则 单一职责原则的定义是就一个类而言,应该仅有一个引起他变化的原因.也就是说一个类应该只负责一件事情.如果一个类负责了方法M1,方法M2两个不同的事

一百零六、SAP的OOP面向对象编程,OO-ALV的简介

面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构. 基本概念: 1.对象(Object)是一个现实实体的抽象.一个对象可被认为是一个把数据(属性)和程序(方法)封装在一起的实体,这个程序产生该对象的动作或对它接受到的外界信号的反应.这些对象操作有时称为方法.对象是个动态的概念,其中的属性反映了对象当前的状态. 2.类(Class)用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.每个对象是类的

js 设计模式 oop 面向对象编程

最初我们写js代码的时候是这么写 function checkName(){ //验证姓名 } function checkEmail(){ //验证邮箱 } function checkPassword(){ //验证密码 } 这种方式会造成全局变量的严重污染,再过渡到 var checkObject = { checkName : function(){}; checkEmail: function(){}; checkPassword: funcion(){}; } //也可如此写 var

Python 的OOP 面向对象编程基础

Objects Sorts of Program Languages Machine Orinted 机器指令 汇编语言 Procedure Orinted 按照步骤和分支处理 C Object Orinted 多人.多部门写作 C++ Java Python Python 中一切皆对象,面向对象做得非常彻底 对象是数据和操作的封装 对象是独立的,但对象之间可以互相作用 目前OOP是最接近人类认知的编程范式. OOP 描述数据--Property Action--Method class col