欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap 谈天说地
   您现在位于: 首页技术专栏开发语言 → 正文
变形金刚带你初探面向对象编程
07-10-19 16:12:17 作者:冲亚 出处:
有学弟问我什么是面向对象编程


我说“类”是一些具有相同“属性”和“方法”的“对象”的抽象。比如说,

张三李四王五都是人类的不同对象,都会说话,都是站着用两脚走路;

欢欢毛毛豆豆都是狗类的不同对象,都会旺旺,都是趴着用四爪爬行;

同一类中的不同对象之间有差异,但仅仅是具体的属性值的差异,如张三李四王五身高不同,

不同类之间则具有不同的属性,如欢欢毛毛豆豆与张三李四王五相比,没有身高这个属性。

还可以进一步抽象,人类和狗类都是哺乳动物类,都具有哺乳动物类的一些特征:哺乳,胎生……

这就叫人类和狗类“继承”了哺乳动物类的一些特征,或哺乳动物类“派生”出人类和狗类,

哺乳动物类是人类和狗类的“基类”或“父类”,人类和狗类是哺乳动物类的“派生类”或“子类”。

----------------------------------------GIS大学论坛---------------------------------------------------

为了进一步说清楚这些抽象的概念,我写了个小程序。

首先创建了一个基类:变形金刚(Transfer),

然后创建了两个派生类:博派汽车人(Autobot)和狂派霸天虎(Decepticon)。

所有变形金刚都具有这三个属性:姓名(name)、战斗力(power)和状态(state),以及一个方法:战斗(fight)。

博派和狂派毕竟是两个不同的类,因此也有差异:

博派具有一种独特的方法:奔跑(Run),狂派也有一种独特的方法:飞行(Fly)。

最后在窗体中,我用做好的类定义了两个汽车人对象和两个霸天虎对象,让他们Run、Fly和Fight。


在C#程序中我有意区分了“字段”和“属性”,以及“私有”、“保护”和“公有”,还使用了“抽象类”和“构造函数”的“重载”。配了大量注释,希望大家仔细阅读后能够有一些理解,然后再搜一些面向对象编程的概念或教程看看。

--------------------------------------------www.gisuniversity.net------------------------------------------

变形金刚类Transfer.cs代码如下:
/////////////////////////////////////////////////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.Text;

namespace OO
{
    //变形金刚类。是个抽象类,不能被实例化。
    abstract public class Transformer
    {
        //字段:姓名。这是个私有类型,不能被派生类继承,但是通过下面公有的Name属性可以访问。
        private string name;
        //字段:状态。这是个保护类型,可以被派生类继承。
        protected string state;
        //字段:战斗力。这是个公有类型,可以随便访问。
        public int power;

        //属性:姓名。可读可写。
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        //属性:状态。可读不可写。
        public string State
        {
            get { return this.Name + this.state; }
        }

        //方法:战斗。参数:对手。返回战斗结果。
        public void Fight(Transformer rival)
        {
            if (this.power > rival.power)
            {
                this.state = "赢了";
            }
            else if (this.power < rival.power)
            {
                this.state = "输了";
            }
            else
            {
                this.state = "平了";
            }
        }
    }
}
////////////////////////////////////////////////////////////////////////////////////

-------------------------------------------《GIS初学者》--------------------------------------------------

博派汽车人类Autobot.cs代码如下:
////////////////////////////////////////////////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.Text;

namespace OO
{
    //博派(汽车人)类。继承了变形金刚类。
    class Autobot:Transformer
    {
        //构造函数1(无参)
        public Autobot()
        {
        }
        //构造函数2(带参)
        public Autobot(string itsName)
        {
            this.Name = itsName;
        }

        //方法:奔跑
        public void Run()
        {
            this.state = "在奔跑";
        }
    }
}
/////////////////////////////////////////////////////////////////////////////////////

--------------------------------------gisbeginner@163.com---------------------------------------

狂派霸天虎类Decepticon.cs代码如下:
/////////////////////////////////////////////////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.Text;

namespace OO
{
    //狂派类(霸天虎)。继承了变形金刚类。
    class Decepticon : Transformer
    {
        //构造函数1(无参)
        public Decepticon()
        {
        }
        //构造函数2(带参)
        public Decepticon(string itsName)
        {
            this.Name = itsName;
        }

        //方法:飞行
        public void Fly()
        {
            this.state = "在飞行";
        }
    }
}
//////////////////////////////////////////////////////////////////////////////////////

------------------------------全中国GIS初学者们,团结起来!---------------------------------

在窗体设计器中只有一个按钮Button1,窗体Form1.cs代码如下:
//////////////////////////////////////////////////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace OO
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

    //点击按钮
        private void button1_Click(object sender, EventArgs e)
        {
            Start();
        }

        //开始
        private void Start()
        {
            //创建并设置两个博派(汽车人)和两个狂派(霸天虎)
            Autobot myAutobot1 = new Autobot();
            myAutobot1.Name = "擎天柱";
            myAutobot1.power = 100;
            Decepticon myDecepticon1 = new Decepticon();
            myDecepticon1.Name = "威震天";
            myDecepticon1.power = 100;
            //注意这里用了第二种构造函数
            Autobot myAutobot2 = new Autobot("大黄蜂");
            myAutobot2.power = 90;
            Decepticon myDecepticon2 = new Decepticon("红蜘蛛");
            myDecepticon2.power = 80;

            //用来存放文字信息
            string result = "";

            //一个霸天虎在飞
            myDecepticon2.Fly();
            result += myDecepticon2.State +" ";
            //一个汽车人扁它
            myAutobot2.Fight(myDecepticon2);
            result += myAutobot2.Name + "挑战" + myDecepticon2.Name + " " + myAutobot2.State + "\n";

            //又有霸天虎在飞
            myDecepticon1.Fly();
            result += myDecepticon1.State + " ";
     
9 7 3 1 2 4 8 :

(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  

    关于我们 友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.

                   滇ICP备05006901号