zoukankan      html  css  js  c++  java
  • 从一个构造函数谈谈的代码的封装性和怎么表现自己的意图

    问题背景:

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

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

    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;
    }
  • 相关阅读:
    docker~save与load的使用
    docker~从Dockerfile到Container的过程(终于算是OK了)
    docker~使用阿里加速器
    Draw2d中的布局管理器Layout比较
    利用glibc中锁结构的信息解决死锁问题
    android 利用重力感应监听 来电时翻转手机后静音。
    hdu 1754 I Hate It
    九度笔记之 1209最小邮票数
    java zip工具类
    基于XMPP实现的Openfire的配置安装+Android客户端的实现
  • 原文地址:https://www.cnblogs.com/HighFun/p/2694513.html
Copyright © 2011-2022 走看看