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

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

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

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

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

  • 相关阅读:
    [51单片机] TFT2.4彩屏1 [文字显示 画矩形]
    [51单片机] 中断1-中断整体介绍
    [汇编] 从键盘输入一个一位数字,然后响铃n声
    [汇编] 比较2个字符串是否相等
    [汇编] 将字符串里的一个'&'字符换成空格
    [汇编] 2数相加极简单版
    mysql的IFNULL函数
    mysql 中 unix_timestamp和from_unixtime函数
    Excel实现二级菜单联动
    Hibernate中@Embedded和@Embeddable注解
  • 原文地址:https://www.cnblogs.com/xsddxz/p/5847712.html
Copyright © 2011-2022 走看看