C++编程杂谈:面向对象 (转)

C++编程杂谈:面向对象 (转)[@more@]  软件开发是一个极其复杂的过程,一段小的代码我们可以 快速、准确的完成,但是当你面对的是一个庞大的软件 系统的时候,你是否有不知所措的感觉呢?
  在我们使用C的年代里面, 编程思想是结构化的,你的C语言老师可能会不断的教导你怎样使用结构化的方法来完成一段 程序,同时,你可能也知道在软件开发中的一个重要定律(Wirth定律):
程序 = 算法 + 数据结构
在结构化设计中人们通常是这样来看待这个定律的:
  程序 =(算法) + (数据结构)
例如:(我仍然使用C++标准库来写下面的代码,方便和以后的代码对比)

#include using namespace std ; typedef struct Student { char strname[50]; //姓名 int math; //数学分数 int chinese; //语文 int total; //总分 }STUDENT; void InitData(STUDENT* some) { // //初始化数据 some->strname[0] = ''; some->math = 0; some->chinese = 0; some->total = 0; } void InputData(STUDENT* some) { /// //获取输入 cout<>some->strname; cout<>some->math; cout<>some->chinese; // //计算总分 some->total = some->math + some->chinese; } void PrintData(STUDENT some) { cout<到目前为止,程序的划分变得相对简单了,团队的开发才成为可能。在面向对象中,所存在的Wirth定律与上面的结构非常类似:
  对象 = (算法 + 数据结构)
  程序 = 对象 + 对象
  表面上似乎二者之间并没有太大的差别,但就是这个差别为我们带来了巨大的变革。
  有这样一句话:“编程是在计算机中反映世界”,我觉得再贴切不过,面向对象(object-Oriented)对这种说法的体现也是最优秀的,比如在前面的例子中,我们设计的数据结构是一个学生成绩的表现,而对数据结构的操作(函数)是分离的,虽然这些操作是针对这种数据结构而产生的。为了管理大量的数据,我们不得不小心翼翼地使用它们。
  面向对象中一个重要的概念就是类(class)C++中是它。类和struct数据结构最大的不同就是提供了限制级别(可见性)的保护——我们先抛开复杂的继承与多态不谈。正是通过这种方式,我们可以对数据成员提供非常有效的保护,同时使数据结构更符合现实行为。
  在面向对象的概念中,前面的数据结构表示如下:

  #include   using namespace std;   class Student   {   private:    //属性   char strname[50]; //姓名   int math; //数学分数   int chinese; //语文   int total; //总分  public:   //方法   char* getname(){ return strname; };    int getmath(){ return math; };    int getchinese(){ return chinese; };    int gettotal(){ return total; };    Student();    void InputData();    void PrintData();   };     Student::Student()   {    //    //初始化数据   strname[0] = '';    math = 0;    chinese = 0;    total = 0;   }     void Student::InputData()   {    ///    //获取输入   cout<>strname;    cout<>math;    cout<>chinese;      //    //计算总分   total = math + chinese;   }     void Student::PrintData()   { cout<     我们先不去关心类的实现细节,现在对比一下main函数中的调用过程,每种方法和相应的数据结构联系在了一起,对外部的调用来说,我们不需要去关心数据结构和相应算法的关系,因为他们已经关联在了一起。也许这个例子不够说明问题,也许我的说明含糊不清,但是你想象一下:如果我们对一个物体,比如狗来建模,我们需要确定其属性(颜色、大小)和行为(跑、叫),我们肯定希望这些都与狗这个模型关联在一起:

Class dog (属性) Color Size (行为) Run yelp 如果是结构话的: Struct dog Color Size (依赖关系)  Run(dog somedog) yelp(dog somedog)  

  显然后面的结构比较复杂,更不要说缺乏有效的成员属性保护。另外一个面向对象的强大就是继承与多态,下一篇我们再来讨论。 
 
 我希望我前面的表达足够的清楚,面向对象不是这样一篇文章可以描述的清楚的,我这里只是描述了一个发展过程的片面。我希望它能成为一个引子,能够为初学者提供一些帮助。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-996551/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-996551/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值