Programming 版 (精华区)

发信人: armstrong (小小), 信区: Programming
标  题: C++编程杂谈:面向对象
发信站: 哈工大紫丁香 (2002年02月20日15:11:58 星期三), 站内信件

s
    CSDN - 技术频道 - 文档中心 - 其他开发语言
标题     C++编程杂谈:面向对象    icemanpro(转贴)
关键字     C++编程杂谈:面向对象
出处     http://www.vckbase.com/vckbase/vckbase12%5Cvc%5Cnonctrls%5Cvctips_3
2/1232002.htm
    软件开发是一个极其复杂的过程,一段小的代码我们可以快速、准确的完成,但是
当你面对的是一个庞大的软件系统的时候,你是否有不知所措的感觉呢?
    在我们使用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] = '\0';
     some->math       = 0;
     some->chinese    = 0;
     some->total      = 0;
}
void InputData(STUDENT* some)
{
    ///////////////////////////////////////
    //获取输入
    cout<<"enter name"<>some->strname;
    cout<<"enter math"<>some->math;
    cout<<"enter chinese"<>some->chinese;
    //////////////////////////////////////
    //计算总分
    some->total = some->math + some->chinese;
}
void PrintData(STUDENT some)
{
    cout<<some.strname<<"'s total mark is:"<<some.total<<endl;
}
//上面的部分可以单独放在一个头和CPP中
main()
{
    STUDENT someone;
    InitData(&someone);
    InputData(&someone);
    PrintData(someone);
}
 
到目前为止,程序的划分变得相对简单了,团队的开发才成为可能。在面向对象中,所
存在的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] = '\0';
      math       = 0;
      chinese    = 0;
      total      = 0;
  }
  
  void Student::InputData()
  {
      ///////////////////////////////////////
      //获取输入
      cout<<"enter name"<>strname;
      cout<<"enter math"<>math;
      cout<<"enter chinese"<>chinese;
  
      //////////////////////////////////////
      //计算总分
      total = math + chinese;
  }
  
  void Student::PrintData()
  {
    cout<<strname<<"'s total mark is:"<<total<<endl;  
    }
  
  int main()
  {
      Student someone;
      someone.InputData();
      someone.PrintData();
  }
 
  
  我们先不去关心类的实现细节,现在对比一下main函数中的调用过程,每种方法和
相应的数据结构联系在了一起,对外部的调用来说,我们不需要去关心数据结构和相应
算法的关系,因为他们已经关联在了一起。也许这个例子不够说明问题,也许我的说明
含糊不清,但是你想象一下:如果我们对一个物体,比如狗来建模,我们需要确定其属
性(颜色、大小)和行为(跑、叫),我们肯定希望这些都与狗这个模型关联在一起:

Class dog
  (属性)
   Color
   Size
  (行为)
   Run
   yelp
如果是结构话的:
Struct dog
   Color
   Size
                 (依赖关系)
  Run(dog somedog)      yelp(dog somedog)
 
  显然后面的结构比较复杂,更不要说缺乏有效的成员属性保护。另外一个面向对象的
强大就是继承与多态,下一篇我们再来讨论。
 我希望我前面的表达足够的清楚,面向对象不是这样一篇文章可以描述的清楚的,我
这里只是描述了一个发展过程的片面。我希望它能成为一个引子,能够为初学者提供一
些帮助。
对该文的评论
      Nizvoo (2002-2-20 11:48:40)
可以,,,继续写
      wcxiang (2002-2-19 23:22:35)
不错,面向对象理解了。
      linyasa007 (2002-2-19 14:12:35)
不错啊!! 继续
      HUANSHILANG (2002-2-16 10:31:21)
go on
      noisy518 (2002-2-15 14:33:32)
坚持
      ioriwellings (2002-2-15 10:51:34)
收下
      Laney (2002-2-12 2:29:02)
同志,请继续 Thanks
      liujf (2002-2-8 20:13:07)
go on ..........
      liujf (2002-2-8 20:12:51)
hehe
      allan615 (2002-2-8 14:01:25)
能看懂,期待下文啦。
      socrolly (2002-2-8 11:35:17)
等待下文
      c_learner (2002-2-8 9:56:14)
估計是筆誤吧,是不是<<,寫得太快了吧?
      yiyo2000_2001 (2002-2-8 0:32:54)
o
      jienao (2002-2-7 12:51:08)
<>是什么作用,真没见过。是说即输入又输出?
      skyie (2002-2-7 12:25:53)
是呀,"cout<<"enter chinese"<>chinese"什么意思呢,能告诉我吗!
      ty3310 (2002-2-3 18:28:31)
I like,more!
      5888 (2002-2-1 19:51:40)
继续写下去,不错
      Iamanders (2002-2-1 18:38:37)
接受
      tlovexyj (2002-2-1 14:12:31)
not bad~ ^^
      bjhz (2002-2-1 13:14:47)
请问大虾这句是什么意思啊? cout<<"enter chinese"<>chinese; 你写的是c++吗?

--
Everybody believes that children are true,
women are beautiful and
men are strong.

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.236.209]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.912毫秒