摘自《Java核心技术》卷I:基础知识 p140 第4章对象与类 - 类设计技巧

1)一定将数据设计为私有。

最重要的是:绝对不要破坏封装性。有时候,需要编写一个访问器方法或更改器方法,但是最好还是保持实例域的私有性。很多惨痛的经验告诉我们,数据的表示形式很可能会改变,但它们的使用方式却不会经常发生变化。当数据保持私有时,它们的表示形式的变化不会对类的使用者产生影响,即使出现bug也易于检测。

2)一定要对数据初始化。

Java不对局部变量进行初始化,但是会对对象的实例域进行初始化。最好不要依赖于系统的默认值,而是应该显式地初始化所有的数据,具体的初始化方式可以是提供默认值,也可以是在所有构造器中设置默认值。

3)不要在类中使用过多的基本数据类型。

就是说,用其他的类代替多个相关的基本数据类型的使用。这样会使类更加易于理解且易于修改。例如,用一个称为Address的新的类替换下面的Customer类中的实例域:

private String street;

private String city;

private String state;

private int zip;

这样,可以很容易地顺应地址的变化,例如,需要增加对国际地址的处理。

4)不是所有的域都需要独立的域访问器和域更改器。

或许,需要获得或设置雇员的薪金。而一旦构造了雇员对象,就应该禁止更改雇用日期,并且在对象中,常常包含一些不希望别人获得或设置的实例域,例如,在Address类中,存放州缩写的数组。

5)使用标准格式进行类的定义。

一定采用下面的顺序书写类的内容:

公有访问特性部分

包作用域访问特性部分

私有访问特性部分

在每一部分中,应该按照下列顺序列出:

实例方法

静态方法

实例域

静态域

毕竟,类的使用者对公有接口要比对私有的实现细节更感兴趣,并且对方法要比对数据更感兴趣。

但是,哪一种风格更好并没有达成共识。Sun的程序设计风格建议Java程序设计语言先书写域,后书写方法。无论采用哪种风格,重要的一点是要保持一致。

6)将职责过多的类进行分解。

这样说似乎有点含糊不清,究竟多少算是“过多”?每个人的看法不同。但是,如果明显地可以将一个复杂的类分解成两个更为简单的类,就应该将其分解(但另一方面,也不要走极端。设计10个类,每个类只有一个方法,显然也太小了)。

下面是一个反面的设计示例。

public class CardDeck// bad design

{

public CardDeck(){...}

public void shuffile(){...}

public void draw(){...}

public int getTopValue(){..}

public int getTopSuit(){..}

private int[] value;

private int[] suit;

}实际上,这个类实现了两个独立的概念:一副牌(含有shuffle方法和draw方法)和一张牌(含有查看面值和花色的方法)。另外,引入一个表示单张牌的Card类。现在有两个类,每个类完成自己的职责:

public class CardDeck// better design

{

public CardDeck(){...}

public void shuffile(){...}

public void draw(){...}

public int getTopValue(){..}

public int getTopSuit(){..}

private Card[] cards;

}

public class Card {

public Card(int value,int aSuit){..}

public int getTopValue(){..}

public int getTopSuit(){..}

private int value;

private int suit;

}

7)类名和方法名要能够体现它们的职责。

与变量应该有一个能够反映其含义的名字一样,类也应该如此(在标准类库中,也存在着一些含义不明确的例子,如:Date类实际上是一个用于描述时间的类)。

命名类名的良好习惯是采用一个名词(Order)、前面有形容词修饰的名词(RushOrder)或动名词(有“-ing”后缀)修饰名词(例如,BillingAddress)。对于方法来说,习惯是访问器方法用小写get开头(getSalary),更改器方法用小写的set开头(setSalary)。

java的类的设计_Java 类设计技巧相关推荐

  1. java类与对象_Java类与对象

    类与对象 1,面向对象编程简介 Java语言最大的特点在于面向对象的编程设计,并且面向对象的编程设计也在由于Java自身的发展而不断发展.面向过程编程(C语言).函数式编程(Scala).面向对象编程 ...

  2. java类继承语法_java类的继承(基础)

    ---恢复内容开始--- 这篇随笔和大家讲讲java中类的继承是什么?希望对你们有所帮助. 目录 一.java继承是什么? 二.为什么使用java继承 三.java继承的实现 1.1  java继承的 ...

  3. java建立类的思想_JAVA类和对象创建

    面向对象 学习目标: 理解面向对象的编程思想 理解类与对象的关系 如何创建类与对象 方法重载 一:什么是面向对象编程(OOP) 面向对象编程(Object Oriented Programming,O ...

  4. java面向对象设计_Java面向对象设计

    全屏 本教程将通过示例了解Java中面向对象(OOP)的概念.讨论面向对象编程的特性,以及编写面向对象程序包括创建类,并从这些类创建对象,以及创建应用程序,这些应用程序是使用这些对象的独立可执行程序. ...

  5. java扫雷设计_Java扫雷设计

    1.java扫雷设计 1.项目介绍 这是一个简单的自主开发的扫雷游戏,可以实现基本的游戏功能,比如正常游戏.重开.选择难度.计时. 2.前期调查 我主要是向复刻经典windows小游戏扫雷,前期调查也 ...

  6. java打字游戏课程设计_Java课程设计打字游戏.docx

    中南大学 Java 课程设计报告 题 目 打字游戏 学生姓名 窦立阳 指导教师 陈丽萍 学 院 信息科学与工程学院 专业班级 计科 1204 完成时间 2015 年1月15日 目录 第二章 总体设计 ...

  7. java打字游戏课程设计_java课程设计打字游戏

    <java课程设计打字游戏>由会员分享,可在线阅读,更多相关<java课程设计打字游戏(32页珍藏版)>请在金锄头文库上搜索. 1.Java 课程设计 1各专业全套优秀毕业设计 ...

  8. 人事管理java 课程设计_java课程设计人事管理系统

    <java课程设计人事管理系统>由会员分享,可在线阅读,更多相关<java课程设计人事管理系统(31页珍藏版)>请在人人文库网上搜索. 1.人事管理系统一. 系统需求分析: ( ...

  9. java蜘蛛纸牌课程设计_Java课程设计-蜘蛛纸牌游戏.doc

    Java课程设计-蜘蛛纸牌游戏.doc 还剩 33页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: Java 课 ...

  10. java前端设计_Java课程设计之——Web前端

    主要使用的技术 Javascript/JQuery html css Jsp 前期调查 能看到的网页大致可以分为两个部分,一个是搜索的首页index.html,一个是搜索结果页/s index.htm ...

最新文章

  1. 怎么逐步突破,成为Python高手?
  2. html 标签开发,前端开发入门之HTML基础标签一
  3. java网络编程(二)
  4. 面向消息的中间件 (Message-Oriented Middleware, MOM)
  5. 判断js中的数据类型的方法
  6. 连接远程电脑中的虚拟机---端口映射
  7. 盘点2019年5G:商用大戏开唱 三大问题亟待解决
  8. 流程建设过程中个人和团队可能面临的问题
  9. 海思Hi3798处理器参数,Hi3798芯片详细信息介绍
  10. android锁屏显示
  11. CQI的解释(完整版)
  12. 芝诺数解|「五」千言万语,都在锅里——重庆火锅
  13. 码农翻身全年文章精华
  14. git cherry-pick 的时候出现git cherry-pick xxx  fatal: bad object xxx
  15. 利用python爬取实习僧网站上的数据
  16. 安装wpa_supplicant工具
  17. 虚拟化、云计算与超融合的简单总结
  18. js的对象继承的讲解
  19. 随机生成6位数字(包括字母和数字)
  20. 计算机网络概述 网络的体系与标准化组织

热门文章

  1. [Linux]Ubuntu下用apt-get安装的应用程序位置
  2. 利用 Domino V8 新特性开发 Mashup 应用(转载)
  3. windows调试工具集
  4. 算法高级(43)-过滤垃圾邮件、短信?-朴素贝叶斯算法
  5. 怎么理解anchor
  6. 深度优先搜索及广度优先搜索
  7. java colormodel_ColorModel
  8. PHP实现一个轻量级容器
  9. windows下sublime通过sftp扩展上传文件到linux服务器上
  10. 使用Xamarin.Forms的企业应用程序模式(电子书)--访问远程数据