最近 复习了一下基础,感觉有点感觉了,所以想找到题目测试一下哪还有不足,可是从网上找的都是些小例子,感觉不怎么能体现面向对象。。所以特的请各位能给我经典点的题目 ,我去做做,主要是想测一下哪还有不足。。

解决方案 »

  1.   

    http://www.dotnetsky.net/showtopic-722.html
      

  2.   

    一部汽车是由轮子、车门、窗户、引擎等部件构成的。 
    窗户(Window)是一个类,它的属性有水平/垂直坐标(x,y),宽度(width),高度(height),颜色(color),以及绘制自己的方法draw(Graphics g)。 
    车门(Door)是一个类,它的属性有水平/垂直坐标(x,y),宽度(width),高度(height),颜色(color),以及绘制自己的方法draw(Graphics g)。另外,每个门都含有一个窗户,一个把手。 
    引擎(Engine)是一个类,它的属性有水平/垂直坐标(x,y),宽度(width),高度(height),颜色(color),以及绘制自己的方法draw(Graphics g)。 
    轮子(Wheel)是一个类,它的属性有水平/垂直坐标(x,y),直径(Diameter),颜色(color),以及绘制自己的方法draw(Graphics g)。 
    汽车(Car)也是一个类,它的属性有水平/垂直坐标(x,y),宽度(width),高度(height),颜色(color),以及绘制自己的方法draw(Graphics g)。另外,每部汽车都包括一个车门,两个轮子,一个引擎,以及不定数目的窗户。 
    要求:请根据上面的需求陈述,用面向对象的思想设计一个车长、车高以及车子的车窗数可动态改变的系统,并用Java语言实现你的设计方案。发挥你的想象力吧!
      

  3.   

    用委托的
    using System;
    using System.Collections.Generic;
    using System.Text;namespace ConsoleApplication22
    {
        //Person    人
        //Mouse  老鼠
        //Cat   猫    public delegate void CatCryEventHandler(IResponse[] prp, IResponse[] mrp);    public interface IResponse
        {
            void Response();
        }    public class Psrson:IResponse   //起类名的时候笔误了
        {
            private string PName;        public string Name
            {
                get { return PName; }
                set { PName = value; }
            }        public Psrson(string s)
            {
                Name = s;
            }        public void Response()
            {
                Console.WriteLine(PName + "醒了!!!");
            }
        }    public class Mouse:IResponse
        {
            private string Mname;        public string Name
            {
                get { return Mname; }
                set { Mname = value; }
            }        public Mouse(string s)
            {
                Name = s;
            }                public void Response()
            {
                Console.WriteLine(Mname + "跑掉了!!");
            }
        }
        public class Cat
        {
            private string cName;        public string Name
            {
                get { return cName; }
                set { cName = value; }
            }        public Cat(string s)
            {
                Name = s;
                this.catcry += new CatCryEventHandler(Cat_Cry);
            }               public event CatCryEventHandler catcry;        private void Cat_Cry(IResponse[] prp, IResponse[] mrp)
            {
                foreach (IResponse sprp in prp)
                {
                    sprp.Response();
                }
                foreach (IResponse smrp in mrp)
                {
                    smrp.Response();
                }
            }        public void Cry(IResponse[] prp, IResponse[] mrp)
            {
                Console.WriteLine(cName + "叫!");
                catcry(prp, mrp);
            }
        
        }
        public class Start
        {
            public static void Main()
            {
                Cat c = new Cat("猫1");
                Mouse[] ms = { new Mouse("老鼠1"), new Mouse("老鼠2") };
                Psrson[] ps = { new Psrson("张三"), new Psrson("李四"), new Psrson("王五") };
                
                c.Cry(ps,ms);            Console.Read();
            }        
        }
       
    }
      

  4.   


    不用委托的using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;namespace ConsoleApplication20
    {    //Observer  观察者
        //Subject   受监视者,受影响的
        //AimAt     瞄准的目标
        //Person    人
        //Mouse  老鼠
        //Cat   猫    public interface IObserver
        {
            void Resquest();  //观察者的反应
        }    public interface ISubject
        {
            void AimAt(IObserver obs); //被观察者针对观察者的方法
        }    public class Mouse : IObserver
        {
            private string mName;
                   public string Name
            {
                get { return mName; }
                set { mName = value; }        }        public Mouse(string s)
            {
                Name = s;
                
            }        public void Resquest()
            {
                Console.WriteLine(this.mName + "跑掉了!");
            }
        }
        public class Person : IObserver
        {
            private string pName;        public string Name
            {
                get { return pName; }
                set { pName = value; }
            }        public Person(string s)
            {
                Name = s;
            }        public void Resquest()
            {
                Console.WriteLine(this.pName + "醒了!!!");
            }
        }    public class Cat : ISubject
        {
            private string cName;        ArrayList al = new ArrayList();
            ArrayList pal = new ArrayList();        
            public string Name
            {
                get { return cName; }
                set { cName = value; }        }        public Cat()
            { }        public Cat(string s)
            {
                cName = s;
            }         public  void AimAt(IObserver obj)
            {
                al.Add(obj);
            }        public void AimAtp(IObserver pobj)
            {
                pal.Add(pobj);
            }        public void Cry()
            {
                Console.WriteLine(cName +"猫叫!");
                foreach (IObserver o in al)
                {
                    o.Resquest();
                }
                foreach (IObserver i in pal)
                {
                    i.Resquest();
                }
            }
        }    public class Start
        {
            public static void Main()
            {
                Mouse[] ms = { new Mouse("老鼠1"), new Mouse("老鼠2") };
                Person[] ps = { new Person("张三"), new Person("李四"), new Person("王五") };            Cat c1 = new Cat("猫1");            foreach (IObserver obj in ms)
                {
                    c1.AimAt(obj);
                }
                foreach (IObserver pobj in ps)
                {
                    c1.AimAtp(pobj);
                }            c1.Cry();            Console.Read();
            }
        }
       
    }
      

  5.   

    国家宝藏
     
    设计题目:国家宝藏
    本·富兰克林·盖茨(尼古拉斯·凯奇饰)是一个喜爱考古的冒险家。从小就梦想要找到国家宝藏,二十年来这个秘密一直萦绕在他的心头,现在他决定完成这一梦想。假设我们知道国家宝藏在哪里,并且想设计一个系统,如果尼古拉斯碰触国家宝藏中的每箱黄金,系统会自动通知宝藏的守护神。 
    系统中应该有一个抽象的宝藏类(Treature),宝藏类维护着一个聚集,用于对守护神的跟踪,当宝藏被更动时,通知这些守护神,这个聚集可以用一个向量(Vector)作为宝藏类的Obs属性来实现。该类提供一系列的保护神管理方法,可以增加(addObserver())和删除(deleteObserver())宝藏保护神,以及当宝藏状态被更动时,通知(notifyObservers())守护神。当然,宝藏类还要有一些辅助方法,比如探测宝藏状态是否改变的方法(hasChanged()),标记宝藏状态已更动的方法(setChanged())和复位状态变化标志(clearChanged()),以及返回宝藏守护神数目的方法(countObserver())。 
    具体的宝藏如黄金(Gold)也应是一个类,且是宝藏类的子类,维护着自己的状态(State),这可以用String型变量来实现。当然还有获得状态(getState())和改变状态(setState())的辅助方法,并且当重新设定的状态与原状态不同时,会通知看护该箱黄金的所有守护神。 
    你还可发挥想象力定义其他的具体宝藏类,比如钻石(Diamond)类等等。 
    守护神(Eudemon)应是个抽象类或接口,为各种具体的守护神定义一个接口,在得到宝藏的通知时采取行动。这个接口中只包含一个方法update(),用于宝藏状态改变时,具体的保护神所应采取的行动。 
    具体的守护神比如老虎(Tiger)就是一个实现了抽象守护神接口中update()方法的具体守护神。你还可发挥想象力定义其他的具体守护神类,比如狮子(Lion)类等等。 
    最后,尼古拉斯·凯奇(Cage)也是一个类,且是具体类,他将凭借智慧和勇敢,更动(touchTreature())这些国家宝藏的状态,这可要惊动宝藏的守护神呦......
    要求:请根据上面的剧本陈述,设计一个国家宝藏的守护系统,并用Java语言实现你的设计方案。发挥你的想象力吧!  
    农夫果园 
     
    设计题目:农夫果园
    一个农场,专门种植销售各类水果,在这个系统中需要描述下列水果:
    葡萄:Grape
    草莓:Strawberry
    苹果:Apple
    水果与其他的植物有很大的不同,水果最终是可以采摘食用的。那么一个自然的做法就是建立一个各种水果都适用的接口,以便与农场里的其他植物区分开。水果接口规定出所有的水果都必须实现的接口,包括任何水果必须具备的方法:种植plant(),生长grow(),收获harvest()。
    Apple类是水果中的一种,因此它实现了水果接口所声明的所有方法。另外,由于苹果是多年生植物,因此多出一个treeAge性质,描述苹果树的树龄。
    Grape类是水果类的一种,也实现Fruit接口中所声明的所有方法。但由于葡萄分为有籽和无籽的两种,因此比通常的水果多出一个seedless性质。
    Strawberry类也是水果的一种,也实现了Fruit接口。
    农场的园丁也是系统的一部分,自然要由一个合适的类来代表。这个类就是FruitGardener,它会根据农场老板的要求,使用factory()方法创建出不同的水果对象,比如苹果(Apple),葡萄(Grape)或草莓(Strawberry)的实例。而如果接到不合法的要求,会提示错误。
    农场的市场调查员也是系统的一部分,也需要一个类代表,这个类是MarketInquirer,它通过inquire()调查今年市场上哪一种水果热销。
    农场的老板也是系统的一部分,仍需要一个类来代表,这个类是FruitBoss,他会根据市场调查员的反馈信息,通知农场的园丁今年种植哪种水果。
    要求:请你根据上述系统需求,用Java语言设计这个农场系统,发挥你的想象力吧!
    祝你的农场百果丰收! 
     夏日麽麽茶
     
    设计题目:夏日麽麽茶
    在一个茶庄(TeaStall)所使用的系统里,有各种风味的名茶。
    茶(Tea)在系统中要用一个类代表,它有一个属性(Flavor)。
    茶庄的菜单(TeaMenu)在系统中以用类来表示,也可用接口来实现。其中包含了茶庄中可供顾客点的茶。比如"西湖龙井","洞庭碧螺春","白毫银针","君山银针","黄山毛峰 ","武夷岩茶","安溪铁观音","信阳毛尖","庐山云雾","六安瓜片"等。
    茶庄的沏茶员(InfuseMan)是系统中的一个类,他可以根据侍者(Waitor)所下的单,冲泡各种风味的茶,如果订单中风味的茶已沏好,就直接为侍者提供(getTea())茶;如果还没沏好则先冲泡再给侍者提供。沏茶员负责维护茶壶柜(teapotCabinet)和冲泡好的风味数(totalFlavors),这些都可作为沏茶员的属性来维护。由于一个茶庄所能提供的风味数是没有限制的,所以茶壶柜(teapotCabinet)应该能动态调整大小,以容纳下未知数量的茶壶,这可以由一个向量Vecotor来实现。闭店时,沏茶员可以统计(getTotalFlavors())一天冲泡的风味数。
    茶客(TeaClient)也是系统中的一个类,他最喜欢的风味(favoriteFlavor)是一个属性。茶客每天根据菜单点(whatIsYourFavoriteFlavor())适合自己心情的茶。
    侍者(Waitor)也是一个类,他担负着茶客和沏茶员之间的桥梁。他询问茶客最喜欢的风味,并根据顾客的要求下单(takeOrder())给沏茶员,从沏茶员那里接过茶杯放于茶盘(TeacupTray)上,茶盘也可以用一个向量Vector来表示,作为侍者的一个属性由侍者维护。侍者将茶盘上的茶杯端给(serveTeacup())顾客。侍者会在一天中,统计自己招待过的订单数(totalOrders),这可作为侍者的一个属性实现,并在闭店时,统计(getTotalOrders())服务的订单数。
    茶庄(TeaStall)也是系统中的一个类,它聚集了菜单、沏茶员、侍者、顾客,它在创建时会指定一个可容纳的最多顾客数(CLIENT_MAX_NUM),每天开店(open())时,派出一位沏茶员和一位侍者,并接待最多数量的顾客。侍者迎接顾客,为顾客下单,沏茶员沏好茶后,侍者会用茶盘将茶端给顾客。每天闭店(close())后,会统计当天的订单数和沏茶风味数。 要求:你可能玩过大富翁、主题公园、主题医院等策略游戏,这个茶庄系统,就是这类游戏的一个原型,请你根据上述脚本,用Java语言设计这个主题茶馆,发挥你的想象力吧!
     
    茶,
    香叶,嫩芽,
    慕诗客,爱僧家。
    碾雕白玉,罗织红纱。
    铫煎黄蕊色,碗转曲尘花。
    夜后邀陪明月,晨前命对朝霞。
    洗尽古今人不倦,将至醉后岂堪夸。 
      

  6.   

    我另开了个新贴,求上面题目的解,这个贴继续收集好的题目。。http://community.csdn.net/Expert/topic/5569/5569311.xml?temp=.6286585
      

  7.   

    任何水果必须具备的方法:种植plant(),生长grow(),收获harvest()。OO已经被滥用
      

  8.   

    观察者模式可以直接用事件的。
    按照上个题目,代码如下:
          public class ShoutEventArgs : EventArgs
          {
              //构造函数和各种属性
          }      public class Cat
          {
              //事件定义
              public event EventHandler<ShoutEventArgs> Shout;
              //事件处理
              protected void OnNewShout(ShoutEventArgs e)
              {
                  EventHandler<ShoutEventArgs> temp = Shout;
                  if (temp != null) temp(this, e);
              }
              //引发事件函数
              public void Shouting()
              {
                  ShoutEventArgs e = new ShoutEventArgs();
                  OnNewShout(e);
              }
          }      public class Boss
          {
              protected Cat thecat;
              public Cat HisCat
              {
                  get { return thecat; }
                  set 
                  {
                      if (value != null)
                          value.Shout += new EventHandler<ShoutEventArgs> (ReceiveMouseShout);
                      else thecat.Shout -=new EventHandler<ShoutEventArgs> (ReceiveMouseShout);
                      thecat = value;
                  }
              }          public void ReceiveMouseShout(object sender,EventArgs e)
              {
                  this.Wake();
              }
              protected void Wake()
              {
                  Console.WriteLine("Boss wake.");
              }
          }      public class Mouse
          {
              protected Cat thecat;
              public Cat CatNeedNotice
              {
                  get { return thecat; }
                  set
                  {
                      if (value != null)
                          value.Shout += new EventHandler<ShoutEventArgs>(ReceiveMouseShout);
                      else thecat.Shout -= new EventHandler<ShoutEventArgs>(ReceiveMouseShout);
                      thecat = value;
                  }
              }          public void ReceiveMouseShout(object sender, EventArgs e)
              {
                  this.Run();
              }          protected void Run()
              {
                  Console.WriteLine("Mouse run.");
              }
          }      public class MyClass
          {
              public static void Main()
              {
                  Cat cat = new Cat();
                  Boss boss = new Boss();
                  Mouse mouse = new Mouse();
                  mouse.CatNeedNotice = cat;
                  boss.HisCat = cat;
                  cat.Shouting();
                  boss.HisCat = null;
                  cat.Shouting();
                  Console.ReadKey();
              }
          }
      

  9.   

    观察者模式可以直接用事件的。
    ------------------------
    Fortner()  从哪能找到相关资料,我对泛型不熟悉,刚才看了相关的资料也没有这方面的。。
      

  10.   

    还有我看你对泛型很精通,能否帮我解释一下泛型 新帖子地址在这http://community.csdn.net/Expert/topic/5570/5570412.xml?temp=.8426935
      

  11.   

    using System;
    using System.Collections.Generic;
    using System.Text;namespace MyNewCar
    {
        public interface CarInter      //描述汽车各部件的水平,垂直坐标
        {
            void Sharep(double x,double y);
            void SharepColor(string color);
        }
        public interface DrawCar      //实现汽车各部件的绘制方法
        {
            void ShareDraw(double a,double b);
        }
        class Car:CarInter ,DrawCar     //定义一个汽车类
        {
            public string TypeName;    //汽车的类型
            public Car(string name)
            {
                this.TypeName = name;
            }
            public string TypeName1
            {
                get { return TypeName; }
                set { TypeName = value; }
            }
            public void Sharep(double x, double y)
            {
                Console.WriteLine("{0}汽车的坐标为:" + "(" + x + "," + y + ")", TypeName1);
            }
            public void SharepColor(string color)
            {
                Console.WriteLine("汽车颜色是:{0}", color);
            }
            public void ShareDraw(double a, double b)
            {
                double area = 0;
                area = a * b;
                Console.WriteLine("车的面积是:{0}平方厘米", area);
            }
            public void   Show()
            {
                Console.WriteLine("汽车由一个车门,两个轮子,一个引擎组成"); 
            }
        }
        class Window : Car, CarInter, DrawCar       //继承一个基类和两个接口
        {
            public Window(string name)        //定义一个汽车的窗口类
                : base(name)
            {
              //this.TypeName1 =
            }
            public void Sharep(double x, double y)
            {
                Console.WriteLine("{0}汽车的窗户的坐标为:"+"("+x+","+y+")",TypeName1);
            }
            public void SharepColor(string color)
            {
                Console.WriteLine("窗户颜色是:{0}",color);
            }
            public void ShareDraw(double a, double b)
            {
                try
                {
                    double area = 0;
                    area = a * b;
                    Console.WriteLine("窗户的面积为:{0}平方厘米", area);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
        class Cardoor : Car, CarInter, DrawCar                //定义一个汽车的车门类
        {
            //Window carWindows;
            public Cardoor(string name):base(name )
            {
                //this.carWindows = carWindows;
            }
            public void Sharep(double x, double y)
            {
                Console.WriteLine("{0}汽车的车门的坐标为:" + "(" + x + "," + y + ")", TypeName1);
            }
            public void SharepColor(string color)
            {
                Console.WriteLine("车门颜色是:{0}", color);
            }
            public void ShareDraw(double a,double b)
            {
                double  area = 0;
                area = a * b;
                Console.WriteLine("车门占用车的面积是:{0}平方厘米",area );
            }
            public void ShowDoor()
            {            Console.WriteLine("车门有一个窗户");
            }
        }
        class Engine:CarInter ,DrawCar           //定义一个汽车的引擎类
        {
            public Engine()
            { 
            }
            public void Sharep(double x, double y)
            {
                Console.WriteLine("汽车的引擎的坐标为:" + "(" + x + "," + y + ")");
            }
            public void SharepColor(string color)
            {
                Console.WriteLine("引擎颜色是:{0}", color);
            }
            public void ShareDraw(double a, double b)
            {
                double area = 0;
                area = a * b;
                Console.WriteLine("引擎占用车的面积是:{0}平方厘米", area);
            }
        }
        class Wheel:CarInter ,DrawCar             //定义一个汽车的轮胎类
        {
          public  Wheel ()
          {
          }
          public void Sharep(double x, double y)
          {
              Console.WriteLine("汽车的车轮的坐标为:" + "(" + x + "," + y + ")");
          }
          public void SharepColor(string color)
          {
              Console.WriteLine("车轮颜色是:{0}", color);
          }
          public void ShareDraw(double a, double b)
          {
              double area = 0;
              area = a * b;
              Console.WriteLine("车轮占用车的面积是:{0}平方厘米", area);
          }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Text;namespace MyNewCar
    {
        class Program
        {
            static void Main(string[] args)
            {
                Car myCar = new Car("宝马");
                myCar.Sharep(100,200);
                myCar.SharepColor("黑色");
                myCar.ShareDraw(300,400);
                myCar.Show();            Console.WriteLine();            Window myWin = new Window("宝马");
                myWin.Sharep(20,30);
                myWin.SharepColor("紫色");
                myWin.ShareDraw(15,20);            Console.WriteLine();            Cardoor myDoor = new Cardoor("宝马");
                myDoor.Sharep(100,50);
                myDoor.SharepColor("黑色");
                myDoor.ShareDraw(20,30);
                myDoor.ShowDoor();            Console.WriteLine();            Engine myEn = new Engine();
                myEn.Sharep(15,10);
                myEn.SharepColor("红褐色");
                myEn.ShareDraw(15,10);            Console.WriteLine();            Wheel myWheel = new Wheel();
                myWheel.Sharep(20,30);
                myWheel.SharepColor("黑白色");
                myWheel.ShareDraw(15,10);
                Console.WriteLine();
                Console.WriteLine("以上是本人对汽车各组成部件的描述!!");
                Console.Read();
            }
        }
    }