浅谈面向对象

原创 2014年06月29日 15:33:15

    这段时间天天被米老师洗脑式的上课,讲的都是一个中心,面向对象!


    但是,面向对象到底是怎么回事儿呢?我们看一下维基百科里是怎么说的:


    面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是一种程序设计范型,同时也是一种程序开发的方法。对象指的是的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。


    那么,他与传统的设计有什么不同呢?同样,在维基百科里给出我们答案:


    面向对象程序设计可以看作一种在程序中包含各种独立而又互相调用的对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,即对象。


    我觉得这里有一个非常重要的一句话,就是“面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象”,我觉得,如果我们做的项目里的任何一个对象不能够满足这一个,就无法称之为面向对象。


    举个我们最常用的例子:当我们写程序的时候,我们要写一个学生考试的功能,做过考试系统的人都知道,学生考试涉及到这几个问题,首先,是随机抽题还是固定题型,其实,是当场判卷还是考完后判卷,还有答案是否乱序等等,现在,如果我们现在用面向对象的设计思路应该怎么走?首先,把抽题封装成一个对象叫抽题类,在把判断是否判分封装成一个对象叫判分类,把答案是否乱序封装起来叫乱序类,之后我们会怎么做?我觉的想到这里还是很容易的,关键是,怎么向下进行?说一下我最初的想法:


    一开始的想法就是:不需要写一个考试的方法,实现抽题类.随机抽题,判分类.当场判分,乱序类.不乱序,最后返回给用户。很合理啊,而且如果用户需要改变抽题方式,只需要拓展抽题类就可以了。但是,我们有没有想过,即使这样,我们仍然需要修改客户端,也就是我考试类里的代码,那么,在进一步,我们可以用反射啊,把需要调用的写在配置文件里,让反射直接调用就可以了啊。但是,如果我们需要在加一项呢?比如,我们需要加一项如果分数不合适重取试卷?或者其他的,不管怎么样,我们都无法对考试类进行一个很好的封装。


    或者我们可以在仔细看一下,如果我们不用反射直接调用的话,我觉得更像一个面向过程的开发,因为考试类依赖于那三个类,我们没有办法在没有那三个类的情况下独立开发考试类!我们做的只是把一个类里的代码分成几份而已。


    下面,我们说一下经过了这些天激烈的斗争之后,现在如果在设计我们可能回是这样的:


    首先,我需要开发四个对象:抽题类,判分类,乱序类,考试类,总所周知,去除那些乱七八糟的东西,我们考试类其实就是拿到试卷,显示,所以考试类里现在东西很少了。那么,具体他们是怎么关联的,交给容器。


    所以,其次,我们的容器才是至关重要的,我们需要做的是,把这样写好的相互都不知道谁是谁的对象,扔到容器里,由容器决定他们之间的关系,而用户,直接和容器打交道即可。所以,如果有容器,我们开发者只需要开发一个个的独立的颗粒,说句通俗易懂的话,如果你开发一个颗粒里面要调用其他的颗粒,只要有这个过程,都不是纯粹的面向对象,具体怎么调用,让容器去决定。


    举个例子:我们小时候经常会遇到站队的情况,我们现在就可以把需要站队的人看成一个个对象,彼此之间没有关系,并没有说小A后面一定要关联小B,小C一定要和小D在一起,而我们老师通常会说,按大小个排列,大个在前小个在后,我们很自然的就知道这样排列,或者又来了另一个老师,那个老师说,男生一列女生一列,我们也就自动的按照男生女生去排列,我们的排列顺序,并不取决于我们,而取决是谁调用我们,也就是取决于我们放在哪个容器里,容器决定谁在我们前面,谁在我们后面。所以,作为开发者,我们只需要关心如果实现一个小A,或者小B,至于他们的关系,我们需要看看放在什么样的容器里面,这样,我们在开发过程中,就减少了对象之间的耦合,同时,在使用过程中,大大提高了复用,因为不论哪一种对象,我们这些对象都可以使用,试想一个,如果小A和小B时连体儿(也就是我们经常在代码里写的相互调用关系),如果小A、B能在从高到矮的队列中使用,那么从矮到高的队列中必然不能用,也就失去了复用的价值。


 

    这是这些天我的理解,而至于容器是如何管理这些对象的,因为没有实践,所以就不具体细说,这里就浅谈一下这些天对面向对象的一种理解,对与不对,欢迎指正!

 

 

浅谈面向对象

      面向对象(Object Oriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交...
  • DNAngler
  • DNAngler
  • 2007年04月16日 09:30
  • 703

面向对象浅谈

面向对象      面向对象(Object Oriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库...
  • thimin
  • thimin
  • 2007年04月03日 00:23
  • 3886

浅谈-面向对象

面向对象: 1、符合人们思考的一种习惯 2、使复杂的思想变得简单化 3、使我们 从以前 事件的执行者,变成 指挥者 您 也就是在 面向对象的思想 去找一个 对象。我觉得我就是这个 具备...
  • u013129096
  • u013129096
  • 2014年07月14日 19:00
  • 247

浅谈面向对象

我们学的Java语言就是面向对象,那么学习这么长时间了,到底什么是面向对象呢?  我认为:程序是由对象组成,这些对象具有一定特性并能执行某些操作,当前状态可能瞬间改变,但可始终依赖相互间完备文档想联系...
  • chaomawen
  • chaomawen
  • 2007年03月24日 13:35
  • 369

浅谈人工智能

历史      各个文明中都有杰出的工匠发明了自动机器来代替人类劳动,早在春秋时期鲁班就发明了世界上第一个机器人,可在空中飞翔‘三日不下’;三国时期蜀汉的诸葛亮发明了‘木牛流马’来运送战备物资,称得上...
  • oba_gaga
  • oba_gaga
  • 2016年10月09日 20:57
  • 4220

小白学《神经网络与深度学习》笔记之一-计算机的潜意识:浅谈神经网络-从神经元到深度学习

转载:http://www.cnblogs.com/subconscious/p/5058741.html 神经网络是一门重要的机器学习技术。它是目前最为火热的研究方向--深度学习的基础。学习神经网...
  • yingwei13mei
  • yingwei13mei
  • 2016年12月15日 21:35
  • 512

软件工程之浅谈

      发展至今,软件生产的发展经过了程序设计、程序系统、软件工程三个阶段;其中软件工程研究的主要内容是软件开发技术和软件开发管理两个方面。在软件开发技术方面,主要是研究软件开发方法、软件开发过程...
  • sunny19890816
  • sunny19890816
  • 2010年07月01日 23:18
  • 310

【面向对象】——浅谈接口

【背景】        提到接口,想必大家都不陌生,在学习设计模式的时候,对于接口的认识更加深了,知识的学习需要不断地总结整理,颗粒收仓的过程,下面请随我来一起学习吧。 【正文】        【为什...
  • zt15732625878
  • zt15732625878
  • 2017年02月02日 15:47
  • 369

Objective-C面向对象浅谈

本文简述了Objective-C语言的语法,以及一些个人见解。   Objective-C(之后称OC),顾名思义,是C语言面向对象的一种扩展,它保留了C语言的全部语法,并且兼容C语言,在这基...
  • yeehok
  • yeehok
  • 2016年08月30日 20:36
  • 156

浅谈js的面向对象

js没有类最开始的时候,我以为所有面相对象的语言都会有类的概念。然而js告诉了我,我还是太native。 JavaScript从发明的那天起就没有真正的类,虽然有不少JavaScript书籍或文章中...
  • kanxingwang
  • kanxingwang
  • 2017年08月28日 09:13
  • 112
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅谈面向对象
举报原因:
原因补充:

(最多只允许输入30个字)