zoukankan      html  css  js  c++  java
  • 面向对象思想

      什么是面向对象?如果让我理解,只有一句话:它是一个与面向过程相对的概念,是一种进化或者升级。人们所设计的程序几乎都是线性思维,即一步一步往下执行。对于一个没有人机交互的简单程序来说,这是简单易行的。然而,对于一个人机交互频繁的复杂程序来说,比如某个你所熟悉的游戏,这绝对是一个毁灭性的灾难。比如一个三人斗地主的游戏,我们会很自然把它描述成一个面向过程的算法。我的意思是说,通常情况下,我们的设计思路应该是这样的:1、选地主  2、发牌  3、轮流出牌  4、判断胜利。显然,这个思路是较为完善的。然而,如果我们进一步的加以思索,就会发现整个流程显得不够精简。我们至少可以提出以下见解:1、对于游戏中的三个玩家,其实他们有很多共同点。都能选地主、出牌、判定。2、我们能否让代码更精简一些。比如每个人都要判断是否胜利,我们能否写一遍就够了。3、地主和农民是有一些区别的,我们如何既能够精简代码,又顺利区分它们。

      我以为,当人们遇到这种问题的时候,很自然的就会根据事物的共性抽象出事物的一个类。就好像根据香蕉、苹果、橘子抽象出水果这个类一样。具体来说,我们把每个玩家看成一个对象,对应于C#语言中的类。必须注意的是,这个类是一个具体的类别。通常情况下,我们总是用一个基类来描述具体类别的属性和方法。并且,具体的类别应该继承基类的属性和方法。我们再详细的说,我们可以把农民作为一个基类,并且规定农民的各项属性,比如发牌数、出牌规则等。紧接着,我们让地主继承农民这个类。这样,农民具有的属性方法,地主也有了。另一方面,地主和农民是有区别,比如地主牌多。这个问题可以用虚方法和重写方法去解决。就是把基类的方法改为虚方法,然后允许子类重写方法。

      我们来总结一下面向对象和面向过程的异同。面向过程需要写很多类似的判断,比如农民需要判断是否胜利,地主也要。而面向对象只要在基类中写好,子类继承就行了。除此之外,这种程序设计思想还有一个巨大的好处:可以被引用。与原来一个程序就一个main函数相比,这种方式的代码重复利用率是十分可观的。很自然的,它也更加有利于程序的扩展。

      到这里,我们说,面向对象思想的出现是极为自然的,并且符合现实需求的。它的出现对于程序设计无疑是一次质的飞跃。

  • 相关阅读:
    Mysql Explain 详解
    TP5和TP3.2的区别
    Http协议详解
    TCP协议三次握手与四次挥手详解
    一些常规面试问题
    计算机网络常识
    队列与栈的区别
    面向对象
    在浏览器中输入 www.baidu.com 后执行的全部过程
    SVN在ubuntu的安装和使用
  • 原文地址:https://www.cnblogs.com/xsddxz/p/5847712.html
Copyright © 2011-2022 走看看