《代码整洁之道》摘录---对象和数据结构

简介:   6.1 数据抽象 隐藏实现并非只是在变量之间放上一个函数层那么简单。类并不简单地用getter和setter将变量推向外间,而是暴露抽象接口,以便用户无需了解数据的实现就能操作数据本体。

 

6.1 数据抽象

隐藏实现并非只是在变量之间放上一个函数层那么简单。类并不简单地用getter和setter将变量推向外间,而是暴露抽象接口,以便用户无需了解数据的实现就能操作数据本体。

如下面是一个阅读器,需要获取当前阅读进度。接口定义如下:

   public interface PaperReader

   {

       double getTotalPages();

       double getCurrentPageIndex();

   }

 

而较好的方式是:

   public interface PaperReader

   {

       double getCurrentProgress();

   }

 

添加取值及赋值操作是严肅的事。

 

 

6.2 数据、对象的反对称性

 过程式代码 (使用数据结构的代码)便于在不改动既有数据结构的前提下添加新函数。面向对象代码便于在不改动既有函数的前提下添加新类。

 

6.3 得墨忒耳律 (The law of Demeter)
类C的方法f只应该调用以下对象的方法:
  .类C本身
  .由f创建的对象
  .作为参数传递给f的对象
  .由类C的实体变量持有的对象。

6.4 数据传送对象 (DTO,Data Transfer Objects)
只有公共变量,没有函数的类,称为DTO.
目录
相关文章
|
存储 Java
Java对象数据结构介绍
Java对象是一种复杂的数据结构,它允许我们在内存中存储一系列属性和方法。这些属性和方法可以在程序运行期间被访问和修改,以实现特定的功能和操作。
224 0
|
2月前
|
存储 算法 Java
散列表的数据结构以及对象在JVM堆中的存储过程
本文介绍了散列表的基本概念及其在JVM中的应用,详细讲解了散列表的结构、对象存储过程、Hashtable的扩容机制及与HashMap的区别。通过实例和图解,帮助读者理解散列表的工作原理和优化策略。
48 1
散列表的数据结构以及对象在JVM堆中的存储过程
|
3月前
|
存储 消息中间件 NoSQL
Redis 数据结构与对象
【10月更文挑战第15天】在实际应用中,需要根据具体的业务需求和数据特点来选择合适的数据结构,并合理地设计数据模型,以充分发挥 Redis 的优势。
64 8
|
3月前
|
算法 Java API
【用Java学习数据结构系列】对象的比较(Priority Queue实现的前提)
【用Java学习数据结构系列】对象的比较(Priority Queue实现的前提)
36 1
|
8月前
|
存储 缓存 NoSQL
深入浅出Redis(一):对象与数据结构
深入浅出Redis(一):对象与数据结构
|
4月前
|
Linux C++ Windows
栈对象返回的问题 RVO / NRVO
具名返回值优化((Name)Return Value Optimization,(N)RVO)是一种优化机制,在函数返回对象时,通过减少临时对象的构造、复制构造及析构调用次数来降低开销。在C++中,通过直接在返回位置构造对象并利用隐藏参数传递地址,可避免不必要的复制操作。然而,Windows和Linux上的RVO与NRVO实现有所不同,且接收栈对象的方式也会影响优化效果。
|
5月前
|
存储 算法 Java
"解锁Java对象数据结构的奥秘:从基础到实战,与热点技术共舞,让你的编程之路更激情四溢!"
【8月更文挑战第21天】Java以对象为核心,它是程序的基本单元与数据处理的基础。对象源自类,拥有属性(字段)和方法。对象在内存中分为对象头(含哈希码、GC信息等)和实例数据区(存储属性值)。例如,`Student`类定义了姓名、年龄等属性及相应的方法。通过`new`关键字实例化对象并调用其方法进行数据操作,是Java编程的关键技能。
37 0
|
7月前
|
存储 JavaScript 前端开发
JavaScript中的对象是数据结构,存储键值对,键为字符串,值可为任意类型,包括函数(作为方法)
【6月更文挑战第25天】JavaScript中的对象是数据结构,存储键值对,键为字符串,值可为任意类型,包括函数(作为方法)。
48 2
|
8月前
|
存储 Java
Java对象是一种复杂的数据结构
【4月更文挑战第28天】Java对象是基于类的实例,包含属性和方法。类是对象的蓝图,实例化过程在堆内存中分配空间。对象属性存储各种数据,通过点号运算符访问,方法执行操作。Java提供内置对象如String、Integer,也可自定义对象以实现特定功能,如学生管理系统或电商网站。
23 1
|
SQL 数据挖掘 数据库
【100天精通Python】Day54:Python 数据分析_Pandas入门基础,核心数据结构Serise、DataFrame、Index对象,数据的导入操作
【100天精通Python】Day54:Python 数据分析_Pandas入门基础,核心数据结构Serise、DataFrame、Index对象,数据的导入导出操作
221 0