C#编程概念系列(一):面向对象编程
系列文章索引目录:http://www.cnblogs.com/loner/archive/2013/05/09/3068211.html
引子:
面向对象编程:这个在当下已不是什么时髦的概念,但通过自己的语言组织描述出来可能会有点意外的收获!
记得最近看的乔布斯在1995年被采访的视频,那时他在离开苹果的日子里在研究时髦的面向对象,通过面向对象更好的处理复杂的程序工作。看完视频只能感慨:跟着伟人的脚步踏实的向前走吧!
定义:
面向对象基本概念:
面向对象三大特性:
提到面向对象大家很容易想到他的三大特性:封装、继承和多态性。
1,封装意味着将一组相关属性、方法和其他成员视为一个单元或对象。
封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。
2,继承描述基于现有类创建新类的能力。
继承性是子类自动共享父类之间数据和方法的机制。它由类的派生功能体现。一个类直接继承其它类的全部描述,同时可修改和扩充。继承具有传递性。继承分为单继承(一个子类只有一父类)和多重继承(一个类有多个父类)。类的对象是各自封闭的,如果没继承性机制,则类对象中数据、方法就会出现大量重复。继承不仅支持系统的可重用性,而且还促进系统的可扩充性
3,多态性意味着可以有多个可互换使用的类,即使每个类以不同方式实现相同属性或方法
对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。例如:Print消息被发送给一图或表时调用的打印方法与将同样的Print消息发送给一正文文件而调用的打印方法会完全不同。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。在OOPL中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性。
面向对象的几个设计原则:
用面向对象设计程序时应遵循的设计原则:开放-封闭原则、里氏代换原则、依赖倒转原则、接口隔离原则、组合/聚合复用原则、迪米特法则等。
1、开放-封闭原则(OCP,Open Closed Principle)是所有面向对象原则的核心。软件设计本身所追求的目标就是封装变化、降低耦合,而开放封闭原则正是对这一目标的最直接体现。其他的设计原则,很多时候是为实现这一目标服务的,例如以Liskov替换原则实现最佳的、正确的继承层次,就能保证不会违反开放封闭原则。
2、里氏代换原则:子类型必须能够替换掉它们的父类型。
3、依赖倒置原则(Dependence Inversion Principle)就是要依赖于抽象,不要依赖于具体。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。
4、接口隔离原则(Interface Segregation Principle ISP):
5、组合/聚合复用原则(Composite/Aggregate Reuse Principle CARP).组合和聚合都是对象建模中关联(Association)关系的一种.聚合表示整体与部分的关系,表示“含有”,整体由部分组合而成,部分可以脱离整体作为一个独立的个体存在。组合则是一种更强的聚合,部分组成整体,而且不可分割,部分不能脱离整体而单独存在。在合成关系中,部分和整体的生命周期一样,组合的新的对象完全支配其组成部分,包括他们的创建和销毁。一个合成关系中成分对象是不能与另外一个合成关系共享。
组合/聚合和继承是实现复用的两个基本途径。合成复用原则是指尽量使用合成/聚合,而不是使用继承。
只有当以下的条件全部被满足时,才应当使用继承关系。
a. 子类是超类的一个特殊种类,而不是超类的一个角色,也就是区分“Has-A”和“Is-A”.只有“Is-A”关系才符合继承关系,“Has-A”关系应当使用聚合来描述。
b. 永远不会出现需要将子类换成另外一个类的子类的情况。如果不能肯定将来是否会变成另外一个子类的话,就不要使用继承。
c .子类具有扩展超类的责任,而不是具有置换掉或注销掉超类的责任。如果一个子类需要大量的置换掉超类的行为,那么这个类就不应该是这个超类的子类。
错误的使用继承而不是合成/聚合的一个常见原因是错误地把“Has-A”当成了“Is-A”.”Is-A”代表一个类是另外一个类的一种;而“Has-A”代表一个类是另外一个类的一个角色,而不是另外一个类的特殊种类。
6、迪米特法则(Law of Demeter)又叫作最少知道原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。
转载于:https://www.cnblogs.com/loner/archive/2013/05/09/3068231.html
C#编程概念系列(一):面向对象编程相关推荐
- JavaScript基础系列之四 面向对象编程
JavaScript基础系列之四 面向对象编程 面向对象编程 JavaScript的所有数据都可以看成对象,那是不是我们已经在使用面向对象编程了呢? 当然不是.如果我们只使用Number.Array. ...
- python对象编程例子-Python3.5面向对象编程图文与实例详解
本文实例讲述了Python3.5面向对象编程.分享给大家供大家参考,具体如下: 1.面向过程与面向对象的比较 (1)面向过程编程(procedural programming) 面向过程编程又被称为: ...
- 自学编程系列——3 面向对象编程
面向对象编程 3.1 什么是面向对象编程 3.2 访问可见性问题 3.3 装饰器property 3.4 继承和多态 3.5 三个案例 3.1 什么是面向对象编程 把一组数据结构和处理它们的方法组成( ...
- python面向对象编程的优点-Python面向对象编程
面向过程编程,重点在于过程(可以理解成how),即以过程为核心,计算机/写代码的人会把精力聚焦在具体的实现过程上,这个过程第一步干什么,第二步干什么,直到最后完成了你的目标. 面向对象编程,重点在于对 ...
- python面向对象编程的优点-Python面向对象编程——总结面向对象的优点
Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...
- python中面向对象编程简称为_Python基础-面向对象编程
本文完全转载自廖雪峰大神的教程: 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...
- python面向对象编程138讲_Python面向对象编程简单讲解
学习目标: 1-面向对象编程 2-类和对象 3-对象的属性和方法 4-类的特性 Python面向对象编程 一种编程程序的设计思想,把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数.把计算机 ...
- python编程求导数_面向对象编程 —— java实现函数求导
首先声明一点,本文主要介绍的是面向对象(OO)的思想,顺便谈下函数式编程,而不是教你如何准确地.科学地用java求出函数在一点的导数. 一.引子 defd(f) :defcalc(x) : dx= 0 ...
- java面向对象编程的思想_java面向对象编程思想
Java与面向对象 一.类与对象 (1)对象是Java程序的核心,对象可以看成是静态属性(成员变量)和动态属性(方法)的封装体 (2)类是用来创建同一类型的对象的"模板",在一个类 ...
最新文章
- jquery validate 详解二
- 如何啃下C++这块复杂又难学的硬骨头?
- android 自定义弹窗,Android自定义弹窗
- 腾讯云+未来高峰对话:智能+时代的创新与探索
- Linux中的MySql数据库远程连接
- TensorFlow贡献者黄文坚:解读对比13个深度学习框架后的选择
- 【开发者的精进】 数据驱动下的程序设计
- SAP Spartacus ConfigurationService
- JS代码混淆 支持PHP .NET PERL
- C++ 基类私有成员会被继承吗
- mapreduce程序调用各个类的功能
- ssl证书不可信 群晖_上海云盾 CDN 网站 SSL 证书过期更新不生效问题排查和解决...
- 一周信创舆情观察(11.16~11.22)
- CRDE产品丨国产热仿真软件Simetherm登陆CRDE企业标准版
- 生物化学,材料化学必备!元素周期表
- 沙盒沙箱技术,移动沙盒等
- sqlconnection pooling是什么意思_目标检测领域还有什么可做的?19 个方向
- 北京大学肖臻老师《区块链技术与应用》公开课笔记:以太坊原理(一):以太坊概述、账户、状态树、交易树和收据树
- 看mysql安装在哪怎么看_mysql安装在哪儿怎么查看?
- 思科网络安全 第十一章测验答案
热门文章
- 服务器主机防御系统,主机入侵防御系统
- 2017年计算机四级试题,2017年全国计算机四级考试模拟试题与答案
- java debugtrace_Debug与Trace的区别
- c++ char数组初始化_c专题指针数组与指针的关联
- java批量执行sql语句_Java中批量执行sql语句
- Android客户端开发—数据库SQLite基本语句
- Ubuntu中APUE 3rd中实例编译时err_sys函数找不到解决方法
- Window10 VS17下 Opencv3.4.5配置
- LabVIEW设置应用程序显示标签透明
- RS485通信如何设计EMC电路?