`
jokermanager
  • 浏览: 143822 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
文章列表
     所 谓不可变类,是指当创建了这个类的实例后,就不允许修改它的属性值。在JDK的基本类库中,所有基本类型的包装类,如Integer和Long类,都是不 可变类,java.lang.String也是不可变类。以下代码创建了一个String对象和Int ...
1、UP项目将工作和迭代分为四个阶段: 初始,大体上的构想,业务案例、范围和模糊评估。 细化,已精化的构想、核心架构的迭代实现,高风险的解决、确定大多数需求和范围以及进行更为实际的评估。 构造,对遗留下来的风险较低和比较简单的元素进行迭代实现,准备部署。 移交,进行beta测试和部署。 2、初始阶段不是需求阶段,而是研究可行性的阶段,在此阶段要进行充分的调查以确定继续或种植项目。   3、细化阶段也不是需求或设计阶段,而是迭代地实现核心架构并解决高风险问题的阶段。
1、UP倡导的核心思想是:短时间定量迭代、进化和可适应开发。   2、在早期迭代中解决高风险和高价值的问题。   3、不断让用户参与评估、反馈和需求。   4、在早期迭代中建立内聚的核心架构。   5、不断地验证质量:提早、经常和实际地测试。   6、在适当的地方使用用例。   7、进行一些可视化建模(使用UML)。   8、认证管理需求。   9、实行变更请求和配置管理。
1、推荐使用UP活动和制品的简集。记住,所有UP制品都是可选的,除非他们能够增加价值,否则避免创建这些制品。应该致力于早期的编程,而非构建文档。   2、UP是迭代的和不断进化的,所以在实现前的需求和设计都是不完整的。它们是在一系列迭代中,基于反馈而产生的。   3、以敏捷建模实践应用UML。   4、对于整个项目不应该有详细的计划。应该制定估计结束日期和主要里程碑的高阶计划(称为阶段计划),但是不要对这些里程碑详细定义细粒度的步骤。只能预先对一个迭代制定更为详细的计划(称为迭代计划)。详细计划是由一次次迭代的调整而完成的。

final

final在Java中并不常用,然而它却为我们提供了诸如在C语言中定义常量的功能,不仅如此,final还可以让你控制你的成员、方法或者是一个类是 否可被覆写或继承等功能,这些特点使final在Java中拥有了一个不可或缺的地位,也是学习Java时必须要知道和掌握的关键字之一。 final成员 当 你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于 对象变量来说其引用不可再变。其初始化可以在两个地方,一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数中。这两个地方只能选 其一,要么 ...
      在利用Hibernate开发DAO模块时,我们和Session打的交道最多,所以如何合理的管理Session,避免Session的频繁创建和销 毁,对于提高系统的性能来说是非常重要的,以往是通过eclipse的插件来自动完成这些代码的,当然效果是不错的,但是总是觉得不爽(没有读懂那些冗长 的代码),所以现在打算自己实现Session管理的代码。我们知道Session是由SessionFactory负责创建的,而 SessionFactory的实现是线程安全的,多个并发的线程可以同时访问一个SessionFactory并从中获取Session实例,那么 Session是否是线程安全的 ...
ThreadLocal的几种误区  最近由于需要用到ThreadLocal,在网上搜索了一些相关资料,发现对ThreadLocal经常会有下面几种误解  一、ThreadLocal是java线程的一个实现       ThreadLocal的确是和java线程有关,不过它并不是java线程的一个实现,它只是用来维护本地变量。针对每个线程,提供自己的变量版本,主要是为了避免线程冲突,每个线程维护自己的版本。彼此独立,修改不会影响到对方。  二、ThreadLocal是相对于每个session的         ThreadLocal顾名思义,是针对线程。在java web编程上, ...
    早在Java 1.2推出之时,Java平台中就引入了一个新的支持:java.lang.ThreadLocal,给我们在编写多线程程序时提供了一种新的选择。使用 这个工具类可以很简洁地编写出优美的多线程程序,虽然ThreadLocal非常有用,但是似乎现在了 ...
线程封闭 新一篇: 线程安全 <script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.lo ...
设计模式之Visitor 板桥里人 http://www.jdon.com 2002/05/05(转载请保留) Visitor访问者模式定义 作用于某个对象群中各个对象的操作. 它可以使你在不改变这些对象本身的情况下,定义作用于这些对象的新操作. 在Java中,Visitor模式实际上是分离了collection结构中的元素和对这些元素进行操作的行为. 为何使用Visitor? Java的Collection(包括Vector和Hashtable)是我们最经常使用的技术,可是Collection好 ...
1、建模(构建UML草图...)的目的主要是为了理解,而非文档。也就是说,建模的真正行为能够并且是应该能够对理解问 题或解决方案空间提供更好的方式。从这个角度而言,实行“UML”(其真正含义是“实行OOA/D”)的目的并不是指设计者创建大量详细的UML图并递交 给编程者(这其实是非敏捷的和面向瀑布的思维方式),而是指为良好的OO设计快速探索可选的方案和途径。   2、采用敏捷建模并不是不进行任何建模。   3、建模和模型的目的主要用于理解和沟通,而非构建文档。   4、不要对所有或大多数软件设计建模或应用UML。可以将简单的设计问题推延到编程阶段,在编程和测试中解决这些问题。只需要对设计空间中不 ...
1、编程前的分析和设计并非毫无价值。迭代和进化式分析和设计是中庸之道。   2、精化的、高质量的需求基于反馈和计划的。在进行了项目过程的20%时,完成需求的精化,UP中,这一阶段称之为细化阶段。   3、UP提倡“风险驱动”和“客户驱动”相结合的迭代计划。这意味着早期的迭代目标要能够识别和降低最高风险,并且能够构造客户最关心的可视化特性。   4、风险驱动迭代开发更为明确地包含了“以架构为中心”迭代开发的实践。意味着早期迭代主要致力于核心架构的构造、测试和稳定。为什么?因为没有稳定的架构就会带来高风险。   5、敏捷开发方法通常应用时间定量的迭代和进化式开发、使用自适应计划、提倡增量交付并包含其 ...
  一、引子   对于系统中一个已经完成的类层次结构,我们已经给它提供了满足需求的接口。但是面对新增加的需求,我们应该怎么做呢?如果这是为数不多的几次变动,而且你不用为了一个需求的调整而将整个类层次结 ...

代码的坏味道1

 
1、重复的代码   首当其冲的是重复代码。如果在一个以上地点看到相同的程序结构,那么可以肯定,设法将其合二为一,程序会变得更好。 2、长函数   拥有短函数的对象会活的比较好、比较长。间接层所带来的全部利益-解释能力、共享能力、选择能力-都是由小型函数支持的。   应该积极分解函数,应该遵循这样一个原则:每当感觉需要以注释来说明什么的时候,我们就把需要说明的东西写到一个独立的函数中,并以其用途(而非实现手法)命名。   我们可以对一组或甚至短短一行代码做这件事,哪怕替换后的函数调用比函数本身还长,只要函数名称能够解释其用途,我们也该毫不犹豫地那么做。   关键不在于函数的长度,而在于函数“做什 ...
1、瀑布(或顺序)生命周期过程中,视图在编程之前详细定义所有或大部分需求。而且通常在编程之前创建出完整的设计或模型。同样试图在开始之前定义“可靠”的计划或时间表,但常常事与愿违。   2、瀑布模型与高失败率、低生产率、高缺陷率具有极大关系(与迭代项目相比)。   3、瀑布思维常常侵蚀迭代或UP项目。例如“让我们在开发编程之前编写所有用例”或“让我们在开始编程之前用UML完成更多详细的OO模型”。诸如这种不健康的瀑布思维错误地叠加在UP上的例子。   4、初始阶段进行大量的分析和建模是导致瀑布模型失败的一个关键原因。   5、错误假设:假设规格说明是可预知的和稳定的,并且能够在项目开始时就正确定义 ...
Global site tag (gtag.js) - Google Analytics