从一个构造函数谈谈的代码的封装性和怎么表现自己的意图

问题背景:

一个机器人,给他下达一个命令,让它按照命令的内容进行相应的移动。最后输出机器人的位置。

题目很简单,我很快写好了一个类

class robot
{
public:
    void SetCmd(string Cmd);
    void SetPos(Point Pos);
    void Action();
private:
    Point Pos;
    string Cmd;
}

有人说,你这样写不好,SetCmd和SetPos这两个方法是多余的,可以直接合并到构造函数中去。

class robot
{
public:
    robot(string Cmd, Point Pos);
    void Action();
private:
    Point Pos;
    string Cmd;
}

他说的有道理,这样函数确实更加简单了,但是这样一定最好吗?不见得。

因为一个机器人在开始被创建的时候不一定会对他输入一个命令,也就是命令不是机器人被创建的必要条件。而且把命令写入构造函数了以后,以后无法对命令进行再次设定,对一个机器人设置两次命令肯定是有的场景。

而位置设置成一个初始值以后,后面机器人只能靠移动来改变位置——除非你的机器人会瞬间移动。而且最重要的是,如果你提供了设置位置的做法,那么别人在开发的时候就有可能去设置机器人的位置,这样就破坏了你当初的设计意图。

因此我把类修改成了下面的写法。我觉得这样既可以有效的封装内部信息,又可以很好的表现我的意图:位置不可以被修改。

class robot
{
public:
    robot(Point Pos);
    void SetCmd(string Cmd);
    void Action();
private:
    Point Pos;
    string Cmd;
}

 

 

转载于:https://www.cnblogs.com/HighFun/archive/2012/09/19/2694513.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值