Eclipse下查看MOA源代码
2012-10-16
概要
本篇短文中,此目标包含两层意思:
- 使用Eclipse快速查看java代码,特别是class之间的继承(extends)、实现(implements)等关系;
- 针对MOA源码,有没有什么特别需要注意的地方?例如,快捷方式、项目文件的组织结构等。
依照上面对于目标的定位,本篇将着重讨论如下几个要点:
- java基本理论知识,针对类、继承、抽象类、接口、注解、反射的基本含义及作用进行说明;
- Eclipse下的快捷键,特别是源代码查询,类间继承关系、接口的实现关系的快捷查看;
- MOA基础知识:主要是MOA的目录结构、基本class、interface
此次考虑的class
,主要是跟算法相分离的基本class
,分为以下2类:
- 负责数据存储功能的class,与此同时提供了对数据的基本操作方法:Instance、Stream等;
- 规定算法实现接口的class,这些class一般是Interface或者 Abstract class。
示例准备
此次采用的例子是MOA的Tutorial2中提供的两个示例代码:
代码一:ApiOfTest1.java
源代码名称: ApiOfTest1.java
文档中对应位置:Listing 1
基本功能描述:生成一个stream,并使用learner对其进行学习。
补充说明: 本次例子ApiOfTest1.java
中使用的stream
和learner
做出改动,如下:
RandomTreeGenerator stream = new RandomTreeGenerator();
Classifier learner = new DecisionStumpTutorial();
代码二:DecisionStumpTutorial.java
源代码名称: DecisionStumpTutorial.java
文档中对应位置:Listing 8
基本功能描述:实现了一个单层的决策树分类算法(decision stump classifier)
java基本知识
类(class)
说明 :由属性(attribute
)和方法(method
)构成。
继承(extends)
说明 :java
中类(class
)是__单继承__的,即,最多只能继承一个类。
抽象类(abstract class)
说明 : 无法具体的对象被定义为抽象类(abstract class
);
有时候,我们可能想要构造一个很抽象的父类对象,它可能仅仅代表一种分类或抽象概念,它的实例没有任何意义,因此不希望它能被实例化。例如:有一个父类水果(Fruit)
,它有几个子类苹果(Apple)
、橘子(Orange)
、香蕉(Banana)
等。水果
在这里仅仅只是作为一种分类,显然水果
的实例没有什么意义(就好像一个人如果告诉你他买了一些水果
但是却不告诉你是苹果
还是橘子
,你很难想象他到底买的是什么)。而水果类
又要能被子类化,这就要求我们使用抽象类(abstract class
)来解决这个问题。
说明 :抽象类,可以有抽象方法,但不能实例化。例如:
//定义抽象类水果(Fruit)
public abstract class Fruit {
……
}
//如果我们试图用以下语句来获得一个实例,将无法编译成功。
Fruit fruit = new Fruit();
说明 :抽象类中可以有实例属性。
接口(interface)
接口也是抽象对象,它甚至比抽象类更抽象。接口中的方法都是抽象方法。
一个接口可以继承
其他接口;一个类通过关键字implements声明要实现
一个接口,并具体实现接口的方法。例如:
//有一个接口InterfaceA,
public interface InterfaceA {
void methodA();
}
//类ClassA实现接口InterfaceA。
public class ClassA implements InterfaceA {
public void methodA() {
System.out.println( ”methodA of ClassA implements InterfaceA” );
}
}
说明 :正常的class
实现(implements
)接口(interface
),必须实现接口定义的所有方法;但抽象类(abstract class
)实现接口,可以不用实现接口定义的方法。
说明 :接口中不能有实例属性,如果有属性,必须为静态的常量(static final
)
说明 :java
中一个类,可以同时实现(implements
)多个接口(interface
)
注解(annotation)
Java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用。包含在 java.lang.annotation
包中。
说明 :此次只对注解@Override
进行说明:
@Override
注解用于类方法(Method
),
表示一个方法声明打算重写超类中的另一个方法声明。如果方法利用此注释类型进行注解但没有重写超类方法,则编译器会生成一条错误消息。
反射(Reflection)
说明 :程序运行时,通过反射获得某个类中的各种变量,函数,数组,构造函数以及类本身,并使用它们。
其他概念:内部类
(doing…)
MOA基本知识
参看MOA自带文档,并且对于instanse的基本类借用于weka工程。
原文地址:https://ningg.top/moa-sourcecode-with-eclipse/