longkai / lab

广西大学 - 雨无声实验室开放平台
4 stars 6 forks source link

复杂的HTML将限制JavaBean的寿命和灵活性 #20

Open neemo14-15 opened 10 years ago

neemo14-15 commented 10 years ago

如果用户使用不同的系统浏览页面,可以提供一种可以替换的方法。 按着Sun公司的定义,JavaBean是一个可重复使用的软件组件。实际上JavaBean是一种Java类,通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称bean。由于javabean是基于java语言的,因此javabean不依赖平台,具有以下特点: 1. 可以实现代码的重复利用 2. 易编写、易维护、易使用 3. 可以在任何安装了Java运行环境的平台上的使用,而不需要重新编译。 编写javabean就是编写一个java的类,所以你只要会写类就能编写一个bean,这个类创建的一个对象称做一个bean。

neemo14-15 commented 10 years ago

为了能让使用这个bean的应用程序构建工具(比如JSP引擎)知道这个bean的属性和方法,只需在类的方法命名上遵守以下规则: 1. 如果类的成员变量的名字是xxx,那么为了更改或获取成员变量的值,即更改或获取属性,在类中可以使用两个方法: getXxx(),用来获取属性xxx。 setXxx(),用来修改属性xxx.。 2. 对于boolean类型的成员变量,即布尔逻辑类型的属性,允许使用"is"代替上面的"get"和"set"。 3. 类中访问属性的方法都必须是public的,一般属性是private的。 4. 类中如果有构造方法,那么这个构造方法也是public的并且是无参数的。

neemo14-15 commented 10 years ago

JavaBean的任务就是: “Write once, run anywhere, reuse everywhere”,即“一次性编写,任何地方执行,任何地方重用”。这个任何实际上就是要解决困扰软件工业的日益增加的复杂性,提供一个简单的、紧凑的和优秀的问题解决方案。

  1. 一个开发良好的软件组件应该是一次性地编写,而不需要再重新编写代码以增强或完善功能。因此,JavaBean应该提供一个实际的方法来增强现有代码的利用率,而不再需要在原有代码上重新进行编程。除了在节约开发资源方面的意义外,一次性地编写JavaBean组件也可以在版本控制方面起到非常好的作用。开发者可以不断地对组件进行改进,而不必从头开始编写代码。这样就可以在原有基础上不断提高组件功能,而不会犯相同的错误。
  2. JavaBean组件在任意地方运行是指组件可以在任何环境和平台上使用,这可以满足各种交互式平台的需求。由于JavaBean是基于Java的,所以它可以很容易地得到交互式平台的支持。
neemo14-15 commented 10 years ago

JavaBean组件在任意地方执行不仅是指组件可以在不同的操作平台上运行,还包括在分布式网络环境中运行。 3.JavaBean组件在任意地方的重用说的是它能够在包括应用程序、其他组件、文档、Web站点和应用程序构造器工具的多种方案中再利用。这也许是JavaBean组件的最为重要的任务了,因为它正是JavaBean组件区别于Java程序的特点之一。Java程序的任务就是JavaBean组件所具有的前两个任务,而这第3个任务却是JavaBean组件独有的。

neemo14-15 commented 10 years ago

JavaBean的一些具体的主要设计目标: 1.紧凑而方便的创建和使用 JavaBean紧凑性的需求是基于JavaBean组件常常用于分布式计算环境中,这使得JavaBean组件常常需要在有限的带宽连接环境下进行传输。显然,为了适应传送的效率和速度,JavaBean组件必须是越紧凑越好。另外,为了更好地创建和使用组件,就应该使其越简单越好。通常为了提高组件的简易性和紧凑性,设计过程需要投入相对较大的功夫。 现已有的组件软件技术通常是使用复杂的API,这常常搞得开发者在创建组件时晕头转向。因此,JavaBean组件必须不仅容易使用,而且必须便于开发。这对于组件开发者而言是至关重要的,因为这可以使得开发者不必花大量功夫在使用API进行程序设计上,从而更好地对组件进行润饰,提高组件的可观赏性。

neemo14-15 commented 10 years ago

JavaBean组件大部分是基于已有的传统Java编程的类结构上的,这对于那些已经可以熟练地使用Java语言的开发者非常有利。而且这可以使得JavaBean组件更加紧凑,因为Java语言在编程上吸收了以前的编程语言中的大量优点,已经使开发出来的程序变得相当有效率。 2.完全的可移植性 JavaBean API与操作基础的独立于平台的Java系统相结合,提供了独立于平台的组件解决方案。因此,组件开发者就可以不必再为带有Java applet平台特有的类库而担心了。最终的结果都将是计算机界共享可重复使用的组件,并在任何支持Java的系统中无需修改地执行。

neemo14-15 commented 10 years ago

3.继承Java的强大功能 现有的Java结构已经提供了多种易于应用于组件的功能。其中一个比较重要的是Java本身的内置类发现功能,它可以使得对象在运行时彼此动态地交互作用,这样对象就可以从开发系统或其开发历史中独立出来。 对于JavaBean而言,由于它是基于Java语言的,所以它就自然地继承了这个对于组件技术而言非常重要的功能,而不再需要任何额外开销来支持它。 JavaBean继承在现有Java功能中还有一个重要的方面,就是持久性,它保存对象并获得对象的内部状态。通过Java提供的序列化(serialization)机制,持久性可以由JavaBean自动进行处理。当然,在需要的时候,开发者也可以自己建立定制的持久性方案。

neemo14-15 commented 10 years ago

4.应用程序构造器支持 JavaBean的另一个设计目标是设计环境的问题和开发者如何使用JavaBean创建应用程序。JavaBean体系结构支持指定设计环境属性和编辑机制以便于JavaBean组件的可视化编辑。这样开发者可以使用可视化应用程序构造器无缝地组装和修改JavaBean组件。就像Windows平台上的可视化开发工具VBX或OCX控件处理组件一样。通过这种方法,组件开发者可以指定在开发环境中使用和操作组件的方法。 5.分布式计算支持 支持分布式计算虽然不是JavaBean体系结构中的核心元素,但也是JavaBean中的一个主要问题。 JavaBean使得开发者可以在任何时候使用分布式计算机制,但不使用分布式计算的核心支持来给自己增加额外负担。这正是出于JavaBean组件的紧凑性考虑的,无疑分布式计算需要大量的额外开销。

neemo14-15 commented 10 years ago

Java bean:编程语言java中的术语,行业内通常称为java豆,带点美哩口味,飘零着咖啡的味道,在计算机编程中代表java构件(EJB的构件),通常有Session bean,Entity bean,MessageDrivenBean三大类。 Session bean:会话构件,是短暂的对象,运行在服务器上,并执行一些应用逻辑处理,它由客户端应用程序建立,其数据需要自己来管理。分为无状态和有状态两种。 Entity bean:实体构件,是持久对象,可以被其他对象调用。在建立时指定一个唯一标示的标识,并允许客户程序,根据实体bean标识来定位beans实例。多个实体可以并发访问实体bean,事物间的协调由容器来完成。 MessageDriven Bean:消息构件,是专门用来处理JMS(Java Message System)消息的规范(EIB2.0)。JMS是一种与厂商无关的API,用来访问消息收发系统,并提供了与厂商无关的访问方法,以此来访问消息收发服务。JMS客户机可以用来发送消息而不必等待回应。

neemo14-15 commented 10 years ago

一般要求 首先,您必须有一个不带有参数的公用构造器。此构造器也应该通过调用各个特性的设置方法来设置特性的缺省值,例如: public Fireworks()test { setAutoStart(true); setBackground(Color.black); setSpeed(10); setRadius(40); . . . } 如果 bean 是一个从 java.awt.Component 类继承而来的可视 bean,您就应该为 bean 定义一个缺省的首选大小,例如: public Dimension getPreferredSize() { return (new Dimension(radius_3, radius_3)); } public Dimension getMinimumSize() { return getPreferredSize(); }

neemo14-15 commented 10 years ago

对于您需要的每个特性,您应该有一个带有匹配公用 getter 和 setter 方法的专用实例变量,例如: private int speed; . . . public int getSpeed() { return speed; } public void setSpeed(int s) { speed = s; } 此 get 和 set 方法必须有与实例变量相同的名称,但是第一个字母要大写并以 get 和 set 开头。

neemo14-15 commented 10 years ago

由于连接而在任何时候更改它们的特性时,确认 Bean 在运行时行为正确也是很重要的。如果特性的更改影响到 Bean 的可视外观,您应该以此特性设置的方法来调用 repaint();。 同样,如果特性的更改影响到 bean 的大小和位置,您需要确认获得验证的事物。我们建议编写您自己的 validateAll 方法,如下所示: private void validateAll() { if (isValid()) { Component self = this; self.invalidate(); Component myParent = self.getParent();

neemo14-15 commented 10 years ago

if (myParent != null) { myParent.invalidate(); self = myParent; } self.validate(); } } 然后以此特性设置的方法调用 validateAll();。 bean 类将无法进行关于调用特性设置方法命令的假设。您应该写 bean 以便可以初始构造它,然后在不引起错误的同时在任何命令中设置其特性。

neemo14-15 commented 10 years ago

对于每个您需要的操作,您应该有一个公用方法,例如: public void start() { if(thread==null) { thread=new Thread(this); thread.start(); } } 您为操作写的方法应该在无须期待用户创建连接或设置很多特性的情况下独立操作。 例如,如果您写了一个音频 Bean,您希望通过播放操作处理打开声音的所有步骤、完成您需要的所有设置并播放声音。同样,即使声音未播放,停止操作也应起作用。

neemo14-15 commented 10 years ago

对于您需要的每个事件或事件设置,您应该定义事件和侦听器类。对于此例,查看 FireworksEvent.java 源文件以及 Fireworks.java 文件。此事件类的源应该如同这样: import java.awt.; import java.util.; publicclassFireworksEvent extends EventObject { public static final int EXPLODED = 1; int id = 0; public FireworksEvent(Component source, int id) { super(source); = id; } public int getID() { return id; } }

neemo14-15 commented 10 years ago

为此事件设置中的每个事件定义一个公用静态结束事件标识符,例如在此例子中的 EXPLODED。 对于侦听器类的源,查看 FireworksListener.java源文件: import java.util.*; public interface FireworksListener extends EventListener { public abstract void exploded(FireworksEvent e); } 您应该为此事件设置中的每个事件定义一个公用抽象方法,例如在此例子中的 exploded。 而且,侦听器类必须扩展 EventListener ,以使 JAR 向导能够找到它。 然后,如果由 bean 类播送事件,它必须跟踪侦听事件的对象。

neemo14-15 commented 10 years ago

定义侦听器实例变量以及 addListener 和 removeListener 方法。返回 Fireworks.java 源,例如,您将查看到: private Vector listeners = new Vector(); public void addFireworksListener(FireworksListener f) { listeners.addElement(f); } public void removeFireworksListener(FireworksListener f) { listeners.removeElement(f); } 最后,bean 类需要以正确的次数将事件实际播送到所有的侦听器。

neemo14-15 commented 10 years ago

您需要定义 processEvent 方法并以适当的次数调用它,例如: public void processFireworksEvent(FireworksEvent e) { for (Enumeration enum = listeners.elements(); enum.hasMoreElements(); ) ((FireworksListener)enum.nextElement()).exploded(e); } public void run() { processFireworksEvent(new FireworksEvent(this, FireworksEvent.EXPLODED)); }

neemo14-15 commented 10 years ago

形式文法,计算机科学中的概念,在计算机科学中,形式语言是某个字母表上一些有限长字串的集合,而形式文法是描述这个集合的一种方法。形式文法之所以这样命名,是因为它与人类自然语言中的文法相似的缘故。形式文法描述形式语言的基本想法是,从一个特殊的初始符号出发,不断的应用一些产生式规则,从而生成出一个字串的集合。产生式规则指定了某些符号组合如何被另外一些符号组合替换。

neemo14-15 commented 10 years ago

程序静态分析(Program Static Analysis)是指在不运行代码的方式下,通过词法分析、语法分析、控制流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。 目录1分析技术及实践

2形式化方法

3著名的静态分析工具

4使用简介

5使用目的

6用法

▪ FindBugs ▪ PMD ▪ CheckStyle 7检查表