面向对象的思维方式

2016-02-19 18:38 4 1 收藏

今天图老师小编给大家介绍下面向对象的思维方式,平时喜欢面向对象的思维方式的朋友赶紧收藏起来吧!记得点赞哦~

【 tulaoshi.com - 编程语言 】

      我是从学习Java编程开始接触OOP(面向对象编程),刚开始使用Java编写程序的时候感觉很别扭,因为我早以习惯用C来编写程序,很欣赏C的简洁性和高效性,喜欢C简练而表达能力丰富的风格,非凡忍受不了Java运行起来慢吞吞的速度,相对冗长的代码,而且一个很简单的事情,要写好多类,一个类调用一个类,心里的抵触情绪很强。

      我对Java的面向对象的特性琢磨良久,自认为有所领悟,也开始有意识的运用OOP风格来写程序,然而还是经常会觉得不知道应该怎样提炼类,面对一个具体的问题的时候,会觉得脑子里千头万绪的,不知道怎么下手,一不小心,又会回到原来的思路上去。

      举个例子,要发广告邮件,广告邮件列表存在数据库里面。倘若用C来写的话,一般会这样思考,先把邮件内容读入,然后连接数据库,循环取邮件地址,调用本机的qmail的sendmail命令发送。

      然后考虑用Java来实现,既然是OOP,就不能什么代码都塞到main过程里面,于是就设计了三个类:

  一个类是负责读取数据库,取邮件地址,调用qmail的sendmail命令发送; 一个类是读邮件内容,MIME编码成Html格式的,再加上邮件头; 一个主类负责从命令读参数,处理命令行参数,调用发email的类。

      把一件工作按照功能划分为3个模块分别处理,每个类完成一件模块任务。

      仔细的分析一下,就会发现这样的设计完全是从程序员实现程序功能的角度来设计的,或者说,设计类的时候,是自低向上的,从机器的角度到现实世界的角度来分析问题的。因此在设计的时候,就已经把程序编程实现的细节都考虑进去了,企图从底层实现程序这样的出发点来达到满足现实世界的软件需求的目标。

      这样的分析方法其实是不适用于Java这样面向对象的编程语言,因为,假如改用C语言,封装两个C函数,都会比Java实现起来轻松的多,逻辑上也清楚的多。

      我觉得面向对象的精髓在于考虑问题的思路是从现实世界的人类思维习惯出发的,只要领会了这一点,就领会了面向对象的思维方法。

      举一个非常简单的例子:假使现在需要写一个网页计数器,客户访问一次页面,网页计数器加1,计数器是这样来访问的

      如:http://hostname/count.cgi?id=xxx

      后台有一个数据库表,保存每个id(一个id对应一个被统计访问次数的页面)的计数器当前值,请求页面一次,对应id的计数器的字段加1(这里我们忽略并发更新数据库表,出现的表锁定的问题)。

      假如按照一般从程序实现的角度来分析,我们会这样考虑:首先是从HTTP GET请求取到id,然后按照id查数据库表,获得某id对应的访问计数值,然后加1,更新数据库,最后向页面显示访问计数。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

      现在假设一个没有程序设计经验的人,他会怎样来思考这个问题的呢?他会提出什么样的需求呢?他很可能会这样想:我需要有一个计数器,这个计数器应该有这样的功能,刷新一次页面,访问量就会加1,另外最好还有一个计数器清0的功能,当然计数器假如有一个可以设为任意值的功能的话,我就可以作弊了。

      做为一个没有程序设计经验的人来说,他完全不会想到对数据库应该如何操作,对于HTTP变量该如何传递,他考虑问题的角度就是我有什么需求,我的业务逻辑是什么,软件应该有什么功能。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

      按照这样的思路(请注重,他的思路其实就是我们平时在生活中习惯的思维方式),我们知道需要有一个计数器类 Counter,有一个必须的和两个可选的方法:

  getCount()   // 取计数器值方法
  resetCounter()   // 计数器清0方法
  setCount()   // 设计数器为相应的值方法

  把Counter类完整的定义如下:

  public class Counter {
    public int getCount(int id) {}
    public void resetCounter(int id) {}
    public void setCount(int id, int currentCount) {}
  }

      解决问题的框架已经有了,来看一下如何使用Counter。 在count.cgi里面调用Counter来计数,程序片断如下:

    //  这里从HTTP环境里面取id值
     ...
    Counter myCounter = new Counter();  // 获得计数器
    int currentCount = myCounter.getCount(id);  // 从计数器中取计数
    //  这里向客户浏览器输出
     ...

  

来源:https://www.tulaoshi.com/n/20160219/1618422.html

延伸阅读
标签: Web开发
----什么是类和对象     这是所有面向对象编程之前必须弄明白的.     所谓类:简单地说就是模板,说的专业一些,是一类具有某种性质的物的集合.比如:人就是一个类,车也是一个类,等等.     所谓对象:就是类的具体实现.如上面所说,人是一个类,一个具体的人就是一个对象,比如张三.   &nb...
标签: Web开发
面向对象编程的概念: 不同的作者之间说法可能不一样,但是一个OOP语言必须有以下几方面: 抽象数据类型和信息封装  继承  多态  在PHP中是通过类来完成封装的:  ?php  class Something {  // 在OOP类中,通常第一个字符为大写  var $x;  function s...
标签: Web开发
上一篇写的废话太多,写得很烂,这一次讲讲继承吧,我们上一节知道了prototype,现在我从prototype下手来实现方法 scrīpt LANGUAGE="Javascrīpt" !-- function 职业(){  var 须知="每天要好好上班"; } 职业.prototype.上班=function(name){  return name+"上班"; } 职业.prototype.下班=function(){ ...
标签: Web开发
一。传统的基于原型(Prototype)的做法 确切地说Javascrīpt的“类”在严格意义上来讲并不能算真正的类,从其声明的对象到类(估切这么说)有这样一个关系: Instance.__proto__=InstanceClass.prototype(ie不支持) 以上说明:实例的属性(__proto__)等于类的prototpye,我们可以看出,实例的"__proto__"正好巧接在类的"prototype"上,通过原型链...
标签: flash教程
自从几年前在Flash中引入动作脚本语言(Action Script)以来,它已经有了很大的发展。每一次发布新的Flash版本,动作脚本语言都增加了关键字、方法和其它语言元素。然而,与以前发布Flash版本不同,Flash MX 2004和Flash MX Professional 2004的动作脚本语言2.0引入了一些新的语言元素,可以更加标准的方式实施面向对象的编程,这些语言元素...

经验教程

289

收藏

66
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部