`
303178394
  • 浏览: 37521 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Java面对对象类设计随笔

阅读更多
    想要做好设计很不容易,类、接口和模块设计都是一项高难度的工作。在网上也看过很多的总结,这里我就结合前人和我自己的想法,提一下大概我做类设计的步骤:
    1、先需求设计理清整个系统或者整个模块、组件做什么的,就好比现在要开办一家企业,这家企业要做哪方面的业务;
    2、再按功能分包,包的职责尽可能的单一,就好比现在公司开始好,要开始划分公司组织结构了,有销售部、人事部、行政部、内控部、研发一部、研发二部等等,部门的职责单一,由于研发的目标不同,研发部门也应该细分;
    3、 定义类的职责,一个类的职责就是这个类存在的价值,若你不能清晰的给这个类定义职责,那么很可能意味着这个类没有存在的价值。类的职责尽可能的单一,这样以后变化的可能性也是单一的,类可变性越小,修改这个类的机会就越小,从而提高了维护性和减少Bug。这时候类就相当于部门中的岗位,而对象就相当于人。
    4、 定义类的名称,找个好名字来作为类名,通过该名称基本能知道该类的职责。好名字的标准就是用名字表达意图,首先他得有意义,如果找不到有意义的名称来定义,那只能说明类的职责没定义好。一般我们用英文名词来作为类的名称,就像converter就比convert好;
    5、 面向接口设计,像Spring的设计一样,尽可能的通过实现接口去设计,把公共方法集抽成接口,接口应该具备完备方法且无冗余方法(当然也有例外,有时候为了提高类的便利性会有一些冗余方法)。接口的好处就在于接口和实现分离,抽象化,在一个方法需要有很多实现的情况下,接口是能体现出好处的,坏处就是设计的难度变大了,设计阶段接口没设计好,之后接口变了,实现也就乱了。在我理解,接口就相当与企业组织结构中的角色,比如公司中岗位可能只有研发工程师,没有细分设计师、dba、需求分析师,那后者就是所谓的角色,也许这个概念有些牵强,我这么说也只是为了能理解而已。
    6、 后面两步其实都不是在设计阶段了,已经是实际开发中需要做的事情了,但是也是要提前想好的;
    7、 编写类的规范,可以用javadoc来做,这部门在赶工的情况下经常被忽略。
    8、 编写单元测试来使用自己的接口。这里就很好的促使TDD开发的办法。我自己做开发的时候是很喜欢先写单元测试,通过不断的排除单元测试的Failed ,接口与实现类就慢慢的都敲出来了。

    另外,需要注意的有几点细节,也基本是学java的都知道的:
    1、 设计类的时候,封装、信息隐藏这些都是面对对象设计的规范,注意就好了;
    2、 接口的命名、类的命名有一致性,比如接口用I开头,控制类用 xxxcontroller,服务类是xxxservice等等;
    3、 不要在一个类中使用太多的基础类型,如果基础类型太多,则根据职责功能去封装成一个新的业务对象类;
    4、 这次的项目我们准备采用Rest-ful架构,所以API的设计也很关键。好的API,应该是扩展性好,容易被复用。等之后完工,应该会把这块单独拿出来。



    既然说到类设计,那也把基础的UML中的类关系顺带提一下。
    类间关系有很多种,在大的类别上可以分为两种:纵向关系、横向关系。
纵向关系就是继承关系,它的概念非常明确,也成为OO的三个重要特征之一,这里不过多的讨论。
    横向关系较为微妙,按照UML的建议大体上可以分为四种:
    1. 依赖    (Dependency) :虚线 + 箭头

    2. 关联    (Association) :实线 + 箭头

    3. 聚合    (Aggregation) :空心菱形 + 实线 + 箭头

    4. 组合    (Composition) :实心菱形 + 实线 + 箭头

    它们的强弱关系是没有异议的:依赖 < 关联 < 聚合 < 组合。然而它们四个之间的差别却又不那么好拿捏,需要好好体会。

    这里就简单的说一下。
    依赖就是use a的关系,就是一个类的函数中使用到了另个类,而不对该类进行持有。

    关联就是长期持有对象的引用,而且这种关系可以是相互的。当要结束这种关系,只要双方同意就可以结束。好比朋友,你有一个朋友的集合,你也这是他朋友集合中的一个,当你们发生矛盾了,你们可以断开这个引用关系。

    聚合是强版本的关联。被聚合的对象还可以再被别的对象关联,所以被聚合对象是可以共享的。虽然是共享的,聚合代表的是一种更亲密的关系。比如家,可以和你妻子共享,但是你不会随意给朋友共享,而且关系不是相互的。

    组合是关系当中的最强版本,它直接要求包含对象对被包含对象的拥有以及包含对象与被包含对象生命期的关系。比如心脏。
分享到:
评论

相关推荐

    Java完整随笔(学习)

    2. **面向对象编程**:Java的核心特性是面向对象,可能的笔记内容有类、对象、封装、继承、多态等概念,以及如何创建和使用这些概念进行程序设计。 3. **异常处理**:Java中的异常处理机制是编程时必须掌握的部分,...

    java记录随笔

    Java 记录随笔是关于 Java 软件架构设计的笔记,涵盖了软件架构的基本原则、当前流行的技术、数据库存储结构、Web 界面用户接口层、业务层架构、持久层技术、XML 结构化信息传输和存储的重要性等多个方面。...

    Java基于SWT编写记事本

    开发这样的程序需要对Java语言、SWT库以及面向对象设计有深入理解。通过这个项目,开发者不仅可以掌握GUI编程,还能提升文件操作、事件处理和错误处理等方面的能力。同时,由于SWT的跨平台特性,该记事本程序可以在...

    hibernate学习随笔

    - **Hibernate**:是一种Java语言下的对象关系映射(ORM)框架,它能够将面向对象模型的数据存储到关系型数据库中,并且可以自动处理数据的转换,极大地简化了数据库的操作。 - **对象关系映射(ORM)**:指的是一...

    学习欧阳坚Objective_C随笔

    Objective-C是一种面向对象的编程语言,它是在C语言的基础上扩展的,主要应用于Apple的iOS和macOS操作系统。本文将深入探讨Objective-C的关键概念,包括它的语法特性、对象模型以及消息传递机制。 首先,Objective-...

    百度贴吧签到网站源码Java-dp:dp

    ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 ...

    阶段程序汇总

    "总结文件"很显然是作者对所学知识的系统性整理,可能涵盖了Java语法、面向对象编程、异常处理、IO流、集合框架等方面的内容,对于复习和巩固知识非常有帮助。最后,"瞎搞"这个文件名可能指的是作者的一些实验性的、...

    Ext相关随笔

    - **面向对象编程**:采用OOP的思想,使得开发过程更加规范,代码可重用性高。 - **强大的数据处理能力**:支持多种数据格式,并能方便地与数据进行交互。 - **内置动画效果**:提供了一系列预定义的动画效果,提升...

    Eclipse入门级使用教程

    * 随笔提示,当用户操作某一个对象的时候,输入“.”就可以找到其所在类对应的全部方法 * 自动编译,当用户每次保存 java 文件的时候可以自动的将 *.java 文件编译为*.class 文件 Eclipse 快捷键 * 代码自动纠正...

    c#学习笔记.txt

    很多人觉得它应该像C或者C++,但事实上它更像是java的一个clone,所以作为入门,读一下清华大学出版社出版的《Java 语言与面向对象程序设计》可能会对你有所帮助。本文假定你具备一切学习此语言所需的知识,没有也不...

    smbms管理类项目

    1. **Spring框架**:Spring是核心容器,提供了依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)功能。DI使得对象间的依赖关系不再硬编码,而是通过配置文件或注解来决定,...

    Diamond梳理

    1. **依赖注入**:Diamond的核心功能可能是实现依赖注入,这是现代软件设计中的一种重要模式,它允许对象之间的依赖关系在运行时被管理,而不是硬编码在类内部,从而提高代码的可测试性和可维护性。 2. **源码分析*...

    blog:Sunrisenew博客

    Java是一种广泛使用的面向对象的编程语言,适用于各种应用场景,包括桌面应用、Web应用和移动应用(尤其是Android平台)。Java以其“写一次,到处运行”的特性而闻名,它有强大的社区支持和丰富的开源库。 “分享”...

    SpringMvc依赖完整jar

    Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序。在使用 Spring MVC 进行开发时,需要引入一系列的依赖 JAR 包来...

    Google Android SDK开发范例大全

    2. **Java编程基础**:Android应用主要基于Java语言编写,因此,掌握Java语言的基本语法、面向对象编程概念以及异常处理等是开发Android应用的基础。 3. **Android Studio**:作为官方推荐的集成开发环境,Android ...

    IBM android技术文档——从入门到精通.rar

    2. **《手机上的 Scala.htm》**:Scala是一种强大的、面向对象和函数式的编程语言,可以用于Android开发。这篇文档可能介绍了如何在Android平台上使用Scala,包括它的优势、语法特点以及与Java的互操作性。 3. **...

Global site tag (gtag.js) - Google Analytics