关于面向对象编程的一点思考

面向对象编程的对象有两种,第一种是现实世界中的对象在软件中的表示(暗含了类间的一部分关系,如包含等),另一种是为了表示现实世界中对象之间相互作用而虚构起来的类(暗含了类间的另一部分关系,如协作等)。面向对象的思维有两种突出表现形式,第一种是专注于对象本身的活动,尽量让对象本身的活动限制在自身,当然那些本来就需要其他对象协助的工作是决不能让一个类自身完全负责的,这种表现形式得到的是高内聚、低内聚性;第二种表现形式是面向契约编程,在第一种表现形式中还要求不能只关注于某个具体类本身的活动,需要的是进行抽象,把那些公共的东西都抽离出来,放到上一层类中作为契约,而让后继的类实现这些契约,或加入一些更加具体的契约让其后继的类实现,解决一般性的问题总是比解决某个具体问题更容易。面向契约编程中,许多动作都在高层完成,可以避免为许多低层类做同样的操作。理解了面向契约编程后,不管是JAVA中的接口、C++中的虚基类或模板,使用的原则都是一样的,最重要(但也最难)的事情就是建立合适的契约(抽象的本质)。

面向对象的方式在短期内是看不到好处的,甚至还会使实现功能的时间变长(实际中许多项目有的时候实现功能是优先级最高的事情),这是因为各个类自成一体,需要维护他们之间的交互,另外为了维护契约,需要做大量与功能无关的工作,并且如果事先没有做好抽象,契约建立得不合适,后面往往面临着改动契约,改动契约的伤害是巨大的,这意味着依赖于这些契约的实际操作很可能需要变化。另一方面,就算是在高层对对象进行操作,但是每一个操作的实际步骤还是需要一行代码一行代码地敲出来。基于这两方面的考虑,所以面向对象的编程方式短期内不会得到好处。但是从长远的角度来看呢,假设契约建立是合适的,许多可以共享的功能都已经以合适的类实现,那么复用就会变得容易很多,可以直接复用或写一个外覆类或Adapter之类的东西就够了,应对新添加的特殊情况也容易许多,写一个针对这种特殊情况的子类就好了,修改很小,编译变得更快。

面向对象编程的方式是一把双刃剑,好的抽象可以节省工程的整体时间,不好的抽象会更加浪费工程的时间。还有就是基于契约的编程方式意味着按规矩办事,所以到了后期有的操作不得不在很别扭的方式下实现,比如,本来有一个可以直接利用的类,但是为了符合契约,却不得不多写一个外覆类或Adapter等。好的抽象来源于好的需求分析,好的需求分析不是具体而完备的,而是对高层的,具有重大影响的那些需求的全面分析。好的需求分析只能经验中得来——从自己的经验和别人的——除此之外别无他法

时间: 2024-11-11 15:12:33

关于面向对象编程的一点思考的相关文章

关于多线程编程的一点思考

多线程编程主要是为了解决处理慢的问题. 使用多个线程进行并发处理资源,使用的模型最多的还是生产者消费者模型. ------------------------------------------------------ 目前我遇到的问题或者体会主要有两个: 1.生产者产生速度不能大于消费者的速度,否则总有一天内存会被撑爆. 有合理的调度,能让消费者及时处理数据. 2.生产者生产过程中不能产生重复数据,类似循环扫描的会产生重复数据.

面向对象编程思想

http://blog.csdn.net/yzh648542313/article/details/34157593 面向对象是一种新兴的程序设计方法,或者说它是一种新的程序设计范型,其基本思想是使用对象,类,继承,封装,消息等基本概念来进行程序设计. 它是从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域(现实世界)中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单

虚拟世界(代码)--浅谈面向对象编程感触

不知不觉已经来到北京一年了,接触编程也一年了,或许我已经不再是那个连HelloWord都要写了N遍都不理解的低级菜鸟了(因为现在是中级了!!~~依旧是菜鸟) 在之前从来没有接触过编程,也不知道什么面向对象编程,面向过程编程.我的代码人生就是从这面向对象编程开始的. 面向对象编程,接触了C#和Java两种编程语言,感触良多(说实话,我现在已经快记不得老师讲过的有哪些重点了).我根据自己所了解的谈谈这段时间的收获. 一.什么是面向对象编程? 最初,老师告诉我们C#和Java都是面向对象编程的语言.那

[.net 面向对象编程基础] (14) 重构

[.net 面向对象编程基础] (14) 重构 通过面向对象三大特性:封装.继承.多态的学习,可以说我们已经掌握了面向对象的核心.接下来的学习就是如何让我们的代码更优雅.更高效.更易读.更易维护.当然了,这也是从一个普通程序员到一个高级程序员的必由之路.就看病一样,普通医生只能治标,高级医生不但看好病,还能除病根. 1.什么时重构? 重构(Refactoring)就是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量.性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性.

JAVA的面向对象编程--------课堂笔记

JAVA的面向对象编程--------课堂笔记 面向对象主要针对面向过程. 面向过程的基本单元是函数.   什么是对象:EVERYTHING IS OBJECT(万物皆对象)   所有的事物都有两个方面: 有什么(属性):用来描述对象. 能够做什么(方法):告诉外界对象有那些功能. 后者以前者为基础. 大的对象的属性也可以是一个对象.   为什么要使用面向对象: 首先,面向对象符合人类看待事物的一般规律. 对象的方法的实现细节是屏蔽的,只有对象方法的实现者了解细节. 方法的定义非常重要.方法有参

java面向对象编程知识点总结

一:今天完成 上午详细了解了java面向对象编程的一些细节,记录如下. 1)类 是一种引用类型,包含一个签名和一个主体,主体是放在花括号里面的成员,成员包括字段和方法,还有构造方法.初始化程序和嵌套类型. 常用成员有四种:类字段.类方法.实例字段.实力方法. 其它引用类型还包括数组.接口.枚举和注解. 2)字段和方法 示例:一个简单的类和成员 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 public class Circle{

Day6 - Python基础6 面向对象编程

Python之路,Day6 - 面向对象学习 本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人拿棍打狗, 狗可以咬人,怎么描述这种不同的角色和他们的功能呢? 你搜罗了自己掌握的所有技能,写出了下面的代码来描述这两个角色 1 2 3 4 5 6 7 8 9 10 11

Python黑帽编程2.9 面向对象编程

Python黑帽编程2.9 面向对象编程 我个人认为,计算机语言的发展,有两个方向,一个是从低到高的发展过程,在这个过程中,语言的思考和解决问题的方式是面向硬件的.硬件本质上处理的是信号,在此基础上,我们给硬件赋予了一定的"逻辑思维"能力,为了方便硬件帮我们做事,抽象出了指令的概念,进而出现了汇编语言,然后有了Pascal和C这样的标准的结构化语言.语言一路向上发展,都是根植于指令的,根植于指令就意味着流程和数据代表了一切,数据的变化成为我们表达和抽象这个世界的根本.不可否认,宇宙间的

JAVA的面向对象编程

面向对象主要针对面向过程. 面向过程的基本单元是函数. 什么是对象:EVERYTHING IS OBJECT(万物皆对象) 所有的事物都有两个方面: 有什么(属性):用来描述对象. 能够做什么(方法):告诉外界对象有那些功能. 后者以前者为基础. 大的对象的属性也可以是一个对象. 为什么要使用面向对象: 首先,面向对象符合人类看待事物的一般规律. 对象的方法的实现细节是屏蔽的,只有对象方法的实现者了解细节. 方法的定义非常重要.方法有参数,也可能有返回值. 注意区分:对象(本身).对象的实现者.