论文导读:面向对象编程思想已成为程序员必须掌握的程序开发、思维开发方式了。如何将面向过程的编程思想向面向对象编程思想进行转换。本文探讨使用五子棋这个例子。
关键词:面向过程,面向对象,五子棋
1、引言
面向对象编程思想已成为程序员必须掌握的程序开发、思维开发方式了,如何将面向过程的编程思想向面向对象编程思想进行转换,是我们在教学中一直考虑的问题。在教学中我们总会遇到这样的问题:在使用Windows开发工具的时候,有些学生很快就适应了拖拉点拽的程序设计方式,他们对事件驱动有所了解,写代码的时候往往是兵来将挡,水来土淹,在大量的事件下面填写大量的代码来见招拆招,最后整个程序变得毫无可读性和可维护性。可以说,学生往往是知道在开发工具中如何去定义一个类,怎么创建对象,可是不知道如何在应用中使用类和对象。本文探讨使用五子棋这个例子,使用面向过程和面向对象这两种不同风格的编程思想来实现,解释从而进一步理解结构化的面向过程的程序设计方式和面向对象的可视化的程序设计方式,以帮助学生建立面向对象的思维方式。论文大全。论文大全。
2、两种程序设计思想的特点分析
结构化的面向过程的程序设计是一种结构化、模块化和自顶向下逐步求精的设计方法。单元,是Delphi 7程序易于实现结构化、模块化的基础。单元一般由数据类型、常量、变量以及例程(函数和过程)组成。结构化程序设计方法的强调程序设计风格和程序结构的规范化。而面向对象的程序设计的方式则是建立在结构化程序设计基础上,采用面向对象、事件驱动编程机制。它以类作为构造程序的基本单位,围绕着对象的抽象性、继承性、多态性和封装性的特征开发设计程序。
3.实例开发
五子棋是一种古老而又有趣的游戏,有趣的游戏往往对激发学生的学习兴趣。本文旨在对比结构化与面向对象的软件开发方法,因而只考虑简单地实现两人对弈的五子棋。功能描述:出五子棋盘,供两个玩家对弈。
3.1结构化的面向过程编程思想
习惯结构化开发的同学,通常是这样来组织程序,使用chess数组来储棋盘状态:
procedureTForm1.FormCreate(Sender: TObject);
begin
1.画棋盘;
2.将记录棋盘状态的chess数组初始化;
3.设置好先下棋一方的颜色;
end;
procedureTForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Begin
1.将坐标转换为数组下标;
2.如果下标不越位,则将相应位置的数组元素置为该颜色,并在相应位置画相应棋子;
3.如果棋盘该颜色的五子连线,则给相应提示,并重新初始化,否切换棋子颜色;
end;
3.2采用面向对象编程思想
游戏中涉及到的对象有棋(chess),玩家(play),窗口(form)。棋类提供棋盘,接受棋子,判断是否,供玩家读棋盘状态;窗口则负责界面设计;玩家是一个参与者,主要属性是颜色。
系统的用例图如下:

下棋的的序列图:
从以上分析可以得到;
棋类说明:
type
Tchess=class
private
c:array[1..15,1..15] of string; //15 行15 列的棋盘
function xyok(x,y:integer):boolean;// 检查位置的合法性
public
function accept(x,y:integer;player:string):boolean; //接受棋手在指定位置上落子
function count(player:string;direction,x,y:integer):integer;
//统计(x,y)在direction方向上player的棋子的数目direction取0-7
function five(player:string;x,y:integer):boolean;
//统计(x,y)player在八个方向是否五子连线
procedure init;//棋盘初始化
function readxy(x,y:integer):string; //供外界读棋盘
end;
实现部分代码如下:
functiontchess.xyok(x,y:integer):boolean;
begin
if (x>=1) and (x<=15) and (y<=15) and (y>=1)
then result:=true else result:=false;
end;
functiontchess.accept(x,y:integer;player:string):boolean;
begin
if (x>=1) and (x<=15) and (y<=15) and (y>=1) and (c[x,y]='')then
begin
c[x,y]:=player;
result:=true;
end
else
result:=false;
end;
functiontchess.readxy(x,y:integer):string;
begin
if xyok(x,y) then result:=c[x,y] else result:='error';
end;
proceduretchess.init;
var
i,j:integer;
begin
for i:=1 to 15 do
for j:=1 to 15 do
c[i,j]:='';
end;
functionTchess.count(player:string;direction,x,y:integer):integer;
begin
case direction of
0:begin
if (x<1) or (x>15) or (y<1) or (y>15)
then result:=0
else if readxy(x,y)=player then
result:=1+count(player,0,x-1,y)
else
result:=0;
end;
1:begin
if (x<1) or (x>15) or (y<1) or (y>15)
then result:=0
else if readxy(x,y)=player then
result:=1+count(player,1,x+1,y)
else
result:=0;
end;
\...其他方向代码略
end;
functionTchess.five(player:string;x,y:integer):boolean;
var
d:integer;
Win:boolean;
begin
Win:=false;
d:=0;
while d<8 do
begin
if count(player,d,x,y)+count(player,d+1,x,y)=6 then Win:=true;
1/2 1 2 下一页 尾页 |