首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

Delphi汽车种作业之反思与改进

2012-08-28 
Delphi汽车类作业之反思与改进本来昨天晚上以为汽车类的作业已经做好了,虽然也觉得自己做得太简单了因为有

Delphi汽车类作业之反思与改进

    本来昨天晚上以为汽车类的作业已经做好了,虽然也觉得自己做得太简单了因为有太多的工作要做,就没太在意改进的事情。

    昨天上了Delphi程序调试的课程,对调试程序有了新的认识。印象最为深刻的有以下几点:

   关注编译期间的非语法错误:Warning 和Hints,这些小东西很可能造成潜在的bug;   断点有四种类型:普通断点,条件断点,数据断点和地址断点,而我仅仅使用了普通断点,其它的都还不会!!!  记录测试的过程,不仅仅是记录出现过的问题方便以后查阅,更是要用来明确调试的进度;  聚焦差异:使用svn和beyondCompare;  反思总结:总结出现错误的原因,避免再犯;  把自己遇到的问题讲给别人听,往往在这个过程中问题会得到解决;      以上几点warning和hints以前从来就没注意过,断点也只会普通的断点,svn更是除了作业还没用过。      这周内要学会以上几种断点和svn的实际使用。      晚上在网盘里把大家的作业下下来看了一下,发现我的程序设计有问题,还有很多毛病:     有30+个wanring和hints,原因是很多属性和函数声明了却没有使用;    题目要求是在Car基类的基础上实现各种不同类型的汽车,应该直接通过Car基类来对具体类型的车进行创建,不必再声明为新的类;    夕会的时候问过辅导员,一个Unit文件中可以有多个类(十几个),这些类之间相互关联即可。因此我的刹车类,方向盘类,车身类以及发动机类作为汽车的部件应该放在一个单元文件中。    单元文件的命名要体现文件的用途和含义,这点做得不好。       基于以上问题,对整个汽车类作业推翻重来,从晚上十一点多做到凌晨四点才做好,还有一些需要改进的地方我已经来不及改了,必须得休息一会,今天还有一天的课程。很神奇我居然能扛到快天亮的时候,感觉时间过得特别快。 下面汇报我的成果:        经过重新思考以后,我的工程包含三个单元文件:      第一个是AutoMobileComponents.pas,这个单元文件包含刹车类,方向盘类,车身类的声明和实现;      第二个是AutoMobile.pas,这个单元文件定义了汽车类,汽车类包含一些字段和部件类对象和方法;      第三个是主窗体AutoMobileShow.pas,用来展示效果。     虽然展示出来的效果跟修改前几乎相同,但是所有定义的属性和方法都被调用,waring和hints为0,pas文件个数明显减少,文件命名一目了然。下面开始上代码:     AutoMobileComponents.pas
{----------------------------------------- Unit Name: myCar Author:    huyp Date:      06-八月-2012 Purpose:   分别调用TBaseCar TAudiA4 TAudiQ7 TBenzC200类模拟汽车过程 History:   V1.0-----------------------------------------}unit AutoMobileShow;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, AutoMobileComponents, AutoMobile;type    TCarForm = class(TForm)    btnCarProcess: TButton;                        //一般汽车操作按钮    btnAudiA4: TButton;                            //AudiA4操作按钮    btnBenzC200: TButton;                          //BenzC200操作按钮    btnAudiQ7: TButton;                            //AudiQ7操作按钮    procedure btnAudiA4Click(Sender: TObject);     //模拟奥迪A4流程    procedure btnAudiQ7Click(Sender: TObject);     //模拟奥迪Q7流程    procedure btnBenzC200Click(Sender: TObject);   //模拟奔驰C200流程    procedure btnCarProcessClick(Sender: TObject); //模拟一般汽车流程  private    { Private declarations }  public    { Public declarations }  end;var  CarForm: TCarForm;  huypCar : TCar;implementation{$R *.dfm}{-----------------------------------------  Procedure: btnAudiA4Click  Author:    huyp  Date:      06-八月-2012  Arguments: Sender: TObject  Result:    None  Function: 模拟奥迪A4从启动到停止的流程,调用 TAudiA4类的成员方法-----------------------------------------}procedure TCarForm.btnAudiA4Click(Sender: TObject);var  AudiA4 : TCar;begin  AudiA4 := TCar.Create;  AudiA4.SetType('AudiA4');  AudiA4.price := 28;  //方向盘  AudiA4.huypSteeringWheel.SetWheelDiameter(40);  AudiA4.huypSteeringWheel.SetWheelDirection(trunLeft);  //刹车  AudiA4.huypBrake.SetBrakeState(stop);  //车身  AudiA4.huypCarBody.SetCarColor('黑色');  AudiA4.huypCarBody.SetCarLength(2);  //发动机  AudiA4.huypEngine.SetEngineId(12344321);  AudiA4.huypEngine.SetEngineState(on);  ShowMessage('大家好,我是'+ AudiA4.GetType +#13+''+  '我的发动机编号是:' + inttostr(AudiA4.huypEngine.GetEngineId)+#13+''+  '我的颜色是:'+ AudiA4.huypCarBody.GetCarColor+', 车身的长度是'+inttostr(AudiA4.huypCarBody.GetCarLength)+'m'+#13+''+  '我的方向盘的直径是'+inttostr(AudiA4.huypSteeringWheel.GetWheelDiameter)+'cm');  AudiA4.starting;  AudiA4.driving;  AudiA4.stopping;  AudiA4.Free;end;{-----------------------------------------  Procedure: btnAudiQ7Click  Author:    huyp  Date:      06-八月-2012  Arguments: Sender: TObject  Result:    None  Function: 模拟奥迪Q7从启动到停止的流程,调用 TAudiQ7类的成员方法-----------------------------------------}procedure TCarForm.btnAudiQ7Click(Sender: TObject);var  AudiQ7 : TCar;begin  AudiQ7 := TCar.Create;  AudiQ7.SetType('AudiQ7');  AudiQ7.price := 85;  //方向盘  AudiQ7.huypSteeringWheel.SetWheelDiameter(40);  AudiQ7.huypSteeringWheel.SetWheelDirection(trunLeft);  //刹车  AudiQ7.huypBrake.SetBrakeState(stop);  //车身  AudiQ7.huypCarBody.SetCarColor('蓝色');  AudiQ7.huypCarBody.SetCarLength(2);  //发动机  AudiQ7.huypEngine.SetEngineId(12344321);  AudiQ7.huypEngine.SetEngineState(on);  ShowMessage('大家好,我是'+ AudiQ7.GetType +#13+''+  '我的发动机编号是:' + inttostr(AudiQ7.huypEngine.GetEngineId)+#13+''+  '我的颜色是:'+ AudiQ7.huypCarBody.GetCarColor+', 车身的长度是'+inttostr(AudiQ7.huypCarBody.GetCarLength)+'m'+#13+''+  '我的方向盘的直径是'+inttostr(AudiQ7.huypSteeringWheel.GetWheelDiameter)+'cm');  AudiQ7.starting;  AudiQ7.driving;  AudiQ7.stopping;  AudiQ7.Free;  end;{-----------------------------------------  Procedure: btnBenzC200Click  Author:    huyp  Date:      06-八月-2012  Arguments: Sender: TObject  Result:    None  Function: 模拟BenzC200从启动到停止的流程,调用 TBenzC200类的成员方法-----------------------------------------}procedure TCarForm.btnBenzC200Click(Sender: TObject);  var  BenzC200 : TCar;begin  BenzC200 := TCar.Create;  BenzC200.SetType('BenzC200');  BenzC200.price := 38;  //方向盘  BenzC200.huypSteeringWheel.SetWheelDiameter(40);  BenzC200.huypSteeringWheel.SetWheelDirection(trunLeft);  //刹车  BenzC200.huypBrake.SetBrakeState(stop);  //车身  BenzC200.huypCarBody.SetCarColor('红色');  BenzC200.huypCarBody.SetCarLength(2);  //发动机  BenzC200.huypEngine.SetEngineId(12344321);  BenzC200.huypEngine.SetEngineState(on);  ShowMessage('大家好,我是'+ BenzC200.GetType +#13+''+  '我的发动机编号是:' + inttostr(BenzC200.huypEngine.GetEngineId)+#13+''+  '我的颜色是:'+ BenzC200.huypCarBody.GetCarColor+', 车身的长度是'+inttostr(BenzC200.huypCarBody.GetCarLength)+'m'+#13+''+  '我的方向盘的直径是'+inttostr(BenzC200.huypSteeringWheel.GetWheelDiameter)+'cm');  BenzC200.starting;  BenzC200.driving;  BenzC200.stopping;  BenzC200.Free;end;{-----------------------------------------  Procedure: btnCarProcessClick  Author:    huyp  Date:      06-八月-2012  Arguments: Sender: TObject  Result:    None  Function: 模拟car从启动到停止的流程,调用 TCar类的成员方法-----------------------------------------}procedure TCarForm.btnCarProcessClick(Sender: TObject);var  myCar : TCar;begin  myCar := TCar.Create;  myCar.SetType('a Common Car');  myCar.starting;  myCar.driving;  myCar.stopping;  myCar.Free;end;end.



热点排行