面向对象和面向过程区别:
1、面向过程程序设计方法的实质上是从计算机处理问题的观点来进行程序设计工作:输入——运算——输出。面向过程程序设计者需要变更习惯的思维方法以贴近计算机的内部工作机理。面向过程程序设计所具有的流的工作性质,试图通过信息流及其转换来认识系统,不仅加大了程序设计的难度,同时亦使得程序的可理解性比较差。面向对象程序设计方法中,一种普遍采用的优化方法是使用结构化的程序设计方法。面向过程程序设计方法一般适宜采用自上而下的设计方法。面向过程程序设计方法需要在一开始就全面的,自上而下的设计整个应用程序的架构,因此要求程序设计者对问题域有全面的了解。
2、面向对象程序设计是一种自下而上的程序设计方法,往往从问题的一部分着手,一点一点地构建出整个程序。面向对象设计一数据为中心,类作为表现数据的工具,成为划分程序的基本单位。
3、面向对象的编程方式有以下几个重要特点:
4、通过一个小游戏深刻理解面向对象的思想
玩家和电脑玩石头、剪刀、布游戏。其中玩家由我们自己控制,可以选择出拳,电脑随机出拳。由裁判根据玩家和电脑出的拳判断输赢。
问题:
- 玩家、电脑如何出拳,记录下出的拳,显示在窗体中,并将出的拳给裁判,用于以后的判断。
- 如何将出的拳给裁判。
- 裁判如何根据玩家和电脑的拳判断输赢。
-
玩家 : 电脑:
石头 1 石头 1
剪刀 2 剪刀 2
布 3 布 3
-
裁判:
玩家赢、 电脑赢 平手
-
玩家赢: 1 2(-1) ;2 3(-1) ;3 1(2)
平手: 相减为0
其他:电脑赢
-
按照面向对象的思想:
1、包含3个类:Player、Computer、Judgement,每个类中有自己的属性和方法
2、Player类:
每出一次拳,需要知道出的是什么,而且知道预先定义好的int型数据是多少,并保存下来,传递给裁判用于判断输赢,另一个要显示在出的是什么拳。
3、Computer类:
系统随机出拳,定义个Random类型,范围(1、2、3),并对应预定义的拳,保存,传递给裁判用于判断输赢,另 一个要显示在出的是什么拳。
4、Judgement类:
通过2个类传递过来的int型变量。计算输赢,显示出来。计算输赢的方法可定义成静态类,从而不用建立裁判对象,直接由类名.方法名调用。
- 玩家类
class Player
{
public int ShowFist(string fist)
{
int num=0;
switch (fist)
{
case "石头":
num=1;
break;
case "剪刀":
num=2;
break;
default:
num=3;
break;
}
return num;
}
}
- 电脑类
class Computer
{
/// <summary>
/// 属性存储随机变量对应的拳头
/// </summary>
public string Fist
{
get;
set;
}
public int ShowFist()
{
Random r=new Random();
//随机数1,2,3
int rNumber= r.Next(1, 4);
switch (rNumber)
{
case 1: Fist="石头";
break;
case 2: Fist="剪刀";
break;
default: Fist="布";
break;
}
return rNumber;
}
}
- Judgement类
{
玩家赢,
电脑赢,
平手
}
class Judgement
{
public static Result PanDuan(int playerNum, int computerNum)
{
if (playerNum-computerNum==-1||playerNum-computerNum==2)
{
return Result.玩家赢;
}
else if (playerNum-computerNum==0)
{
return Result.平手;
}
else
{
return Result.电脑赢;
}
}
}
- 窗体类
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnStone_Click(object sender, EventArgs e)
{
//出拳为石头时,定义一个字符串传递给PlayGame函数,
string str="石头";
PlayGame(str);
}
private void btnCut_Click(object sender, EventArgs e)
{
string str="剪刀";
PlayGame(str);
}
private void btnNo_Click(object sender, EventArgs e)
{
string str="布";
PlayGame(str);
}
/// <summary>
/// 通过玩家出的拳,求对应的int变量playerNum
/// </summary>通过电脑出的拳,求对应的int变量computerNum
///
/// <param name="str"></param>
private void PlayGame(string str)
{
//玩家出的拳显示在label
lblPlayer.Text=str;
Player player=new Player();
int playerNum =player.ShowFist(str);
Computer computer=new Computer();
//Computer类不需要传递变量,由系统随机生成
int computerNum=computer.ShowFist();
lblComputer.Text=computer.Fist;
Result res=Judgement.PanDuan(playerNum, computerNum);
lblResult.Text=res.ToString();//显示判断结果
}
}