对象建模最佳实践

原文链接:https://dzone.com/articles/good-object-modelling

OOP是关于封装的全部

恩,那就对了。面向对象编程旨在将属性和方法封装到统一对象中,以便可以在对象上执行操作。整个目标是摆脱程序功能,这些功能不容易推理或证明是正确的。但是这个原则经常被违反,人们使用对象编写程序代码。这是一个经典的例子:

class Rectangle {
    private Long length;
    private Long breadth;
    //gettters
    //setters
    //constructors
}

呼叫者通过以下方式计算面积:

Rectangle r = new Rectangle (3,4);
System.out.print("Area is: "+(r.getLength()*r.getBreadth());

这是滥用对象的一个​​非常糟糕的例子。事实上,这是程序性的,非封装的代码,恰好使用该对象。如果我们有一个空的构造函数,这个例子可能会更糟 Rectangle。

Rectangle r = new Rectangle();
r.setLength();
r.setBreadth();

再次,这是一个可怕的滥用对象。我们已经创建了一个关于其正确性/完整性无法推理的对象。我认为这种行为是鼓励的,因为我们一宣布一个类就开始编写一个空的构造函数和公共getter / setter。我意识到这确实是非常糟糕的做法。更重要的是,这是鼓励程序员违反构建OOP的基础的基础。

1.不要写空构造函数
不要让你的对象被创建statelesss。拥有空对象会使代码很难推理。你永远不能依赖于对象的状态。想象一下,发送你的朋友为你做点什么(例如煮咖啡),然后你的朋友去吧。但是等等,他不能走路,因为他没有腿,或者因为没有手而无法做好准备。看,你不能推理你的对象(朋友)的状态 - 除非有一个有效的,合理的场景(想到Jackson对象映射器)以避免使用空构造函数。

通过避免空构造函数,我们避免了对象可能处于不一致状态的情况。这也避免了程序员拥有公共设置者的情况。

2.不要在暴露所有吸气剂的情况下开始
通过暴露所有公众的吸气剂开始是非常方便和诱人的。但这严重违反了封装原则。我们可能真的需要一些公共吸气剂(toString想到),但只在严格要求时添加。

在你get离开一个物体之前,想一想为什么。你打算用这个价值做什么?你要计算一些东西吗?然后,将它建模为对象内的方法是不是更好。这将极大地提高代码中使用对象的一致性。
在上面的例子中,我们意识到我们需要Rectangle 在创建对象之后计算更长的区域 (一个有效的场景,我们不能总是有清晰的洞察力)。我们应该考虑是否可以通过仍然保持封装来获得,而不是获得长度和广度以及倍增。

良好封装的例子

class Rectangle{
    private Long length;
    private Long breadth;
    public Rectangle(Long length, Long breadth){
        this.length=length;
        this.breadth=breadth;
    }
    public Long getArea(){
        return this.length*this.breadth;
    }
}

现在,这是相当好的封装。我们也没有空的构造函数和setter。我们可以公平地说,如果有一个矩形对象,它是一个一致且有效的对象。如果有人想要计算该对象的区域,则有一种一致的方法可以满足公共吸气剂的需求。

(想自学习编程的小伙伴请搜索圈T社区,更多行业相关资讯更有行业相关免费视频教程等待你来学习。完全免费哦! )

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值