简洁代码--对象和数据

代码整洁之道笔记

[TOC]

对象和数据结构

数据抽象

具象和抽象的区别,坐标点:

代码一
public class Point {
    public double x;
    public double y;
}
代码二
public interface Point {
    double getX();
    double getY();
    void setCartesian(double x, double y);
    double getR();
    double getTheta();
    void setPolar(double r, double theta);
}

代码二 不仅呈现出一种数据结构,而且还固定了一套存取策略
类并不简单的向外推变量,而是暴露抽象接口,从而使用户不用了解数据的实现就能操纵数据本体。

数据、对象的反对称性

对象将数据隐藏起来,暴露操纵数据的方法。
数据结构是直接暴露其数据。

过程式代码:

public class Square {
    public Point topLeft;
    public double side;
}

public class Circle {
    public Point center;
    public double radis;
}

public class Geometry {
    public final double PI = 3.14159265;

    public double area(Object shape) throw NoSuchShapeException {
        if (shape instanceof Square) {

        } else if (shape instanceof Circle) {

        }

        throw new NoSuchShapeException();
    }
}
明显,当添加一个新的形状时,需要修改Geometry中的代码。 但是添加新的函数则不会影响现有的形状。

使用多态:

public class Square implements Shape {
    public Point topLeft;
    public double side;

    public double area() {

    }
}

public class Circle implements Shape {
    public Point center;
    public double radis;
    public final double PI = 3.14159265;

    public double area() {

    }
}

对象与数据结构的二分原理:
过程式代码便于在不改动现有数据结构的前提下添加新的函数。
面向对象代码便于在不改动既有函数的前提下添加新的数类。

The Law of Demeter

对象不应该通过存取器暴露内部的数据结构。

火车失事型代码:

final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();

混杂:既有执行操作的函数,也有公共的变量

隐藏结构:

  1. 了解失事代码的目的:得到临时目录的绝对路径是为了创建指定名称的临时文件。
  2. 让ctxt对象自己来做这件事情:ctxt.createScrachFileSteam(classFileName)。

数据传送对象

DTO:只有公共变量,没有函数的类。充当原始数据和数据库之间的胶水。
参见JavaBean.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 将变量设置为private有一个理由:我们不想其他人依赖这些变量。我们还想在心血来潮的时候能自由修改其类型或实现。...
    清风流苏阅读 1,159评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,766评论 18 399
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,368评论 11 349
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,392评论 25 708
  • 岁月无情 我爱回忆 人生无奈 我爱微笑 情感困惑 我爱小酌 工作失利 我爱思考 身心疲惫 我爱雨天回忆着你,听着你...
    听海的贝壳阅读 93评论 0 0