抽象出共性

      今天梁老师要求做下面的一个题目:

     要求:创建EGoodsManager的项目

     题目:现在市面上的电子产品层出不穷,小张准备了一个储存柜专门存放这些产品。请根据题目要求完成简单的储存柜管理程序。

1.存储柜里有若干个格子(为说明问题,假定为3个),每个格子可以放不同的产品,包括MP3播放器(MP3),数码相机(Camera)和手机(Phone),但同一时刻一个格子只能放0或1件商品。

2.管理系统模拟实际储存物品的方式,需要存储新的产品时如果有空位置,按顺序为该产品分配存储的格子;取出产品时显示该产品的信息。

3.定义描述储存柜的类EBox,其中有3个格子用于存放各类电子产品。

4.定义基类EGoods,至少包括纯虚函数ShowMe用于显示产品信息。

5.定义派生类MP3, Camera和Phone,这些产品除了拥有价格(整数)、品牌(字符串)之外,MP3还拥有存储容量(整数,单位M)属性,Camera还拥有光学变焦倍数(整数)属性,Phone还拥有电话号码(字符串)属性。具体实现上述纯虚函数ShowMe,显示每类产品的相应信息。

6.编写main函数,测试上述所要求的各种功能,即根据菜单命令为新的产品分配存储柜子、取走产品(输入格子编号,考虑格子中可能为空的情况)时输出该产品信息.

我的答案是:

电子产品的共性部分是都包含品牌和价格,以及显示自己信息的方法:共性部分的实现代码是:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EGoodsManage
{
    public class EGooks
    {
        private float price;
        public float Price
        {
            get { return price;}
            set { price=value;}
        }
        private string brand;
        public string Brand
        {
            get { return brand; }
            set { brand = value; }
        }
        public virtual string ShowEGoods()
        {
            return " price is " + Price + " brand is " + Brand;
        }
    }
}

     对于不同的电子产品,它们有不同的特性,因此在某个具体类型的电子产品类只要继承与电子产品的共性部分,就能使具体类型的电子产品拥有电子产品的共性。对于它们的特性则在子类中进行添加,或者重写。

     根据题目要求,三个具体类型的电子产品的实现为:

 //数码相机    

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EGoodsManage
{
    public class Camera:EGooks
    {
        private int multi;
        public int Multi
        {
            get { return multi; }
            set { multi = value; }
        }
        public override string ShowEGoods()
        {
            return "multi is "+multi+base.ShowEGoods();
        }
    }
}

 

 

 

//电话

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EGoodsManage
{
    public class Phone:EGooks
    {
        private string number;
        public string Number { get; set; }
        public override string ShowEGoods()
        {
            return "Number is "+number+base.ShowEGoods();
        }

    }
}

 

 

 

//MP3

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EGoodsManage
{
    public class Mp3:EGooks
    {
        private string capacity;
        public string Capacity { get; set; }
        public override string ShowEGoods()
        {
            return "Capacity is " +capacity+base.ShowEGoods();
        }
    }
}

 

储存柜设计:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EGoodsManage
{
    public class EBox
    {
        public List<EGooks> goods = new List<EGooks>(3);

        public bool AddGood(EGooks good)
        {
            if (goods.Count==3)
            {
                return false;
            }
            else
            {
                goods.Add(good);
                return true;
            }
           
        }

        public void Remove(EGooks good)
        {
            goods.Remove(good);
           
        }

    }
}

 主函数设计:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EGoodsManage
{
    class MainEntry
    {
        public static void Main(string[] args)
        {
            EBox box3 = new EBox();
            EGooks[] egoods = new EGooks[3];
            Camera nikon = new Camera();
            nikon.Brand = "nikon";
            nikon.Price = 800;
            nikon.Multi = 5;
            Mp3 newman = new Mp3();
            newman.Brand = "newman";
            newman.Price = 200;
            newman.Capacity = "1G";
            Phone huawei = new Phone();
            huawei.Brand = "huawei";
            huawei.Price = 50;
            huawei.Number = "7141627";
            egoods[0] = nikon;
            egoods[1] = newman;
            egoods[2] = huawei;

            for (int i = 0; i < egoods.Length; i++)
            {
                box3.AddGood(egoods[i]);
                Console.WriteLine("存储成功,信息为:"+egoods[i].ShowEGoods());
            }

            for (int i = 0; i < egoods.Length; i++)
            {
                box3.Remove(egoods[i]);
                Console.WriteLine("取出成功,信息为:" + egoods[i].ShowEGoods());
            }
        }
    }
}

 

 学习心得:在以后的学习中要培养抽象思维的能力,各个类之间存在着共性部分,把这些共性可以设置为父类或者抽象类,或者接口。而特性部分,则有各个具体的类来实现。本题目,就是把电子产品的共性取出来,放到一个父类中,子类通过继承,拥有这些共性,从而实现了代码的复用。基类的引用可以调用实例类的方法,从而实现多态。本题目中,在父类中把显示信息方法定义为虚函数,虚函数实现了显示共性信息的功能。在子类中对虚函数的重写和调用,从而减少了代码的工作量。

posted @ 2008-08-31 21:05  IT-CEO  阅读(366)  评论(0编辑  收藏  举报