Java类

2024-10-06

Java类(精选8篇)

Java类 篇1

1 研究背景

JAVA是一种跨平台的语言, 灵活性比较大, 运用范围广, 能运用到各种系统和领域中。聚类技术最近几年越来越受到大家的追捧, 聚类算法的应用也得到了推广, 在生物学上, 聚类能通过基因和蛋白质的这两类的分类或者聚类, 对种群中固定结果的重新认识和分析, 从而推导出不同的植物或者动物种类:在市场关系上, 市场分析人员也可以通过聚类发现客户数据中不同的客户群体, 对这些群体的不相同类的特征进行模式刻画, 从而能预测某客户群体的购买类型。不仅如此, 聚类也能对internet上的web中的文档或者文件进行分类, 而发现对人们有价值的知识, 此外聚类还可以对其他方法进行预处理过程, 对这些方法起辅助作用。

基于JAVA的聚类分析的实现, 给聚类技术的推广起到推风助浪的作用, 使得聚类技术能在更多的领域中拓宽。

2 聚类分析概念

聚类是运用数据对象之间的距离, 并运用相关的聚类分析原则将对象逐一划分到多个簇 (clusters) 中。每一个簇中中也包含了多个相同类属对象, 同一个簇钟的对象之间的相似度要比不同簇的相似度大, 最终的聚类能使得各簇种对象的相似度最小, 这样就达到聚类的目的了。这样的聚类分析不仅可以对数据分析和知道的挖掘提供数据依据, 也可以解开事物数据之间的内在联系和区分, 这使得聚类分析爱成为数据挖掘技术中不可缺少的成员。

聚类分析的过程是将物理或抽象数据集合, 按基于数据之间的距离的聚类分析原则, 把距离最近的数据分配到个个类, 这就使得这些类的对象之间距离最近, 即相似度高, 与其他的类中的对象距离远。从上面定义可以看出聚类分析中提到两个关键词, 就是聚类数据和数据的距离。我们经常用的到距离计算方法就是欧几里德距离, 它的定义如下:

这里的i= (xi1, xi2, .., xie) 和j= (xj1, xj2, .., xje) 是两个e维的数据对象, Qe表示权重。

3 聚类方法的分类

聚类方法有很多, 在这里我们只是提几种常见的。

3.1 基于划分的聚类算法

对现有m个数据对象集合, 按Y种类别进行划分 (其中Y<=m) , 在满足每个划分的类别内至少要包含一个对象, 而且这个数据对象集合的每个对象必须都有其归属类。这种类型的聚类常见的算法有k-均值算法, k-中心点算法等等。

3.2 层次聚类

层次聚类是根据凝聚或分裂的层次分解形式对数据对象集合进行层次分解。分裂的方法是自顶向下的方法, 首先把所有的数据对象点归为一类, 然后以此分裂成更小的类, 分裂到每个对象能够单独在一个类中为止。凝聚与分裂的方法相反, 是一种自底向上的方法, “底”在这里指的是单个数据点, 首先以单个数据点作为一个类, 然后对相近的数据对象进行合并归纳成新的类, 直到所有的数据对象合并成一个类为止, 这个类在层次上面叫着的最上层, 整个运作过程是自底向上的方式运作。常用的算法有利用层次方法的平衡迭代归约和聚类—BIRCH。

3.3 基于密度的方法

基于密度的方法就是让最近区域密度值达到一定的标准, 也就是有一个具体的阀值即对象的个数, 还有就是该区域半径值, 以这些标准来对对象进行聚类。用这种方法的好处是避免了划分方法中发现球状簇的局限。例如基于高密度连接区域的密度聚类方法——DBSCAN。

3.4 基于网格的方法

基于网格的方法就是在网格接结构的基础上对数据进行聚类, 我们将采用量化的方式把空间对象分成有限的数目单元, 这样就是对空间对象进行网格。这种算法有—CLIQUE算法。

3.5 基于模型的方法

基于模型的方式就是给定一个模型, 根据模型的要求寻找最合适的对象的方法。在对象空间的密度数来构建一个模型, 通过统计数字自动来决定聚类的数目, 从而去掉不需要的噪声数据, 使得聚类的方法更有力。这种方法有COBWEB算法, 网络神经方法有SOM算法。

3.6 基于约束的方法

对数据的个体对象进行约束, 或者设置聚类参数来约束, 来进行聚类的方法。因为在我们的客观世界中聚类的问题存在很多的约束条件, 但是这些条件都是很发杂的, 往往不被有效的利用出来, 从而不能对这方法进行进行广泛的推广和应用。这种方法有COD (Clustering with Ob2structed Distance) 。

4 K—Means算法

K—Means算法是中一种基于划分的聚类技术方法, 它相对其他方法比较简单、有效、快捷等优点。此方法首先就要提前假设K个数据点为聚类中心, 并每个聚类中心点求均值, 并以聚类准则函数来判别最小距离, 重新确定聚类中心, 不断反复以上过程, 直止聚类中心不再变化的过程。

4.1 K—Means过程

输入:需要聚类的个数为k, 其中包含n个数据对象点。

输出:满足聚类中心到对象的最小方差为标准的k个聚类。

其流程为:

第一步:从n个数据对象中任意选出k个对象作为初始聚类中心。

第二步:计算每个数据对象到k个聚类中心的距离, 把离i (i∈k) 聚类中心距离最小数据点归为i类, 依次把所有对象都归类到k个聚类中心的类中。

第三步:计算每个聚类中所有对象的均值, 得出新的聚类中心。

第四步:对新的聚类中心重复上面的第二和第三步, 并得到新的聚类中心, 直止新的聚类点不再更新。得出最终的聚类中心。

初值的好坏直接影响到K—Means算法的最后结果, 也可以因为初值的问题导致聚类的结果有天差万别, 因此要改变K—Means算法的初值的取法, 是K—Means算法的改进的关键。

中心点的选取不同直接影响到聚类结果不同, 因此初始聚类中心的选择在K—Means算法中非常重要。实际应用中, 我们即希望中心点能够尽量分散, 也希望这些中心点具有一定的代表性, 这也是我们聚类的目的。我们运用一种基于试探性的算法---最大最小距离算法可以对初始聚类中心的选择做出相对较好判断, 它能相对智能地确定最佳的初始聚类的中心, 可以提高划分初始数据集的效率, 避免过去K—Means算法中选取初始聚类过于邻近, 而导致聚类结果不佳的情况。

4.2 算法描述

这里举例一个给定m个样本数据{x1, x2…, xm}, 需要将他们分类到K个聚类中。

(1) 在样本数据{x1, x2…, xm}中任选择一个样本数据作为第一个聚类中心点设c0, 使得c0=xi, 其中i∈ (1, 2…, m) 任意一个。

(2) 通过欧氏距离计算选取距离最远的数据样本点作为第二个聚类中心, 计算欧氏距离如下:

选取xj作为第二聚类的中心, 而c1=xj

(3) 计算样本数据集{x1, x2, …, xm}中的每个样本数据与c0, c1之间的距离, 如下:

针对每个样本数据点选其中最小距离:min (di0, di1) , i=1, 2, …, m。

在所有样本数据点的最小距离中, 选取最大距离的哪个样本数据点作为第三个聚类中心即c2, 如下表示

(4) 根据 (3) 的算法继续求下面的几个聚类中心, 找到ck-2即第k-1个聚类中心, 再找最后一个即第k个聚类中心, 如下:

(5) 为已经选取的k个初始聚类中心寻找聚类中心迭代运算的次序号, 如第一迭代运算后分别表示c0 (1) , c1 (1) , ……, ck-1 (1)

(6) 将除k个聚类点以外的样本数据点, 计算其分别到k个聚类中心的最小殴氏距离, 并按最小殴氏距离原则划分给K个聚类中心的某一个聚类, 如下:

(7) 计算出各个聚类中数据样本的均值

其中nj为第J个聚类sj中所包含的数据样本个数, 计算出k个聚类中的样本均值, 以均值得出新的聚类中心, 使得聚类准则函数Ei为最小。

(8) Ifcj (t+1) ≠cj (t) j=0, 1, 2, …, k-1 then

就重新依次回到 (6) (7) (8) , 重新分类, 重新计算出各个聚类中数据样本的均值等迭代运算, 直到cj (t+1) =cj (t) j=0, 1, 2, …, k-1, 则算法收敛结束, 算出最后结果。

4.3 K-Means算法用JAVA语言实现如下

用CA类来实现K—Means算法, 建立了Data Point (点) 、Centroid (中心) 、Cluster (簇) 的类为CA作服务, 程序部分设计如下:Public class CA{//中心点聚类分析

5 聚类分析实现

对一组有关时间分布数据进行聚类分析, 原始数据分布图如图1。

运用改进的K-Means算法编写到weka挖掘工具中, 根据日期分布数据图, 如图2所示。

从中可以明显地看出日期是分两个簇, 因此我的k取值是2, 进行K-Means数据挖掘, 挖掘的结果数据如图3所示。

K-Means算法算出最集中的时间点, 从图3所示K—Means算法结果看最集中的两个点日期分别是2009年4月1日还有2009年6月27日点, 分类中成员数据分别为9651个和1356个。

摘要:由于聚类技术的不断发展, 近几年运用范围越来越大, 在生物学上, 营销分析学上, 在对Internet上的Web中文档管理上都有很大的运用。但是这些跨领域, 跨专业的运用需要一个公用平台来实现, 这就是本篇文章提倡的基于Java来实现聚类分析。

关键词:聚类技术,Java

参考文献

[1]朱福喜.Java程序设计技巧与开发实例[M].北京:人民邮电出版社, 2004, 2.

[2]陆惠恩.实用软件工程[M].北京:清华大学出版社, 2006, 5.

[3] (美) Bruce Eckel著, 陈昊天译.Java编程思想[M].北京:机械工业出版社, 2007, 6.

[4]朱福喜, 黄昊.Java项目开发与毕业设计指导[M].北京:清华大学出版社, 2008, 6.

[5]郑人杰, 殷人昆.陶永雷.实用软件工程[M].北京:清华大学出版社, 2004, 11.

Java类 篇2

无论学习那种语言都难免要接触到文件系统,要经常和文件打交道。Java当然也不例外,有人觉得IO的设计很烦琐,有的时候我也有这样的感觉,其实用的熟练了,倒是觉得这个东西还是挺方便的。在介绍Java IO之前首先介绍一下非常重要的一个类File。

在看到这个类的名字后你一定认为它代表一个文件,事实上这样认为并不准确,因为Java中的File类可以代表文件也可以代表目录。在API doc中说明了这一点,同时把File用abstract pathname来代表。不过想想目录不也就是特殊的文件吗?

File的使用非常的简单,它有四个构造函数:

File(String parent,String child)

File(File parent,String child)

File(URI uri)

File(String pathname)

其中前面两个可以让我们在某个已知特定的目录下新建文件或者目录,后面两个我们可以通过pathname或者URI新建文件或者目录。有一点需要注意, File虽然是一个系统无关的代表,但是pathname的表示是和系统相关的,比如UNIX下“/”表示root目录,而windows下通常用盘符来表示。比如绝对路径C:helloworldmingjava,如果是相对路径的话则不以“/”开头,一般相对路径是相对当前目录的。当我们创建一个 File的时候可以通过exists方法判断它是否存在,如果不存在我们可以选择是创建为文件还是创建为目录。例如

File file = new File(“hehe”);

if(!file.exists())

{

file.mkdir();

}

for(int i=0;i <5;i++)

{

File listFile = new File(nextFile,“ming”+i+“.txt”);

if(!listFile.exists())

{

listFile.createNewFile();

}

}

如果我们已经知道一个File对象,希望在他的目录之下新建文件,那么就可以使用第一个构造器了。比如

File nextFile = new File(file,“minghehe”);

if(!nextFile.exists())

{

nextFile.mkdirs();

}

注意创建多层目录的时候要用mkdirs()。我们还可以列举出一个目录下的文件列表,通过list()方法可以得到一个String[]类型的数组,这就是目录下的文件名称。

String[] list = nextFile.list();

for(int j = 0;j

{

System.out.println(list[j]);

}

File的使用并不复杂,如果有问题多参考一下API doc一般就可以解决了,下面是我写的一个小例子,说明如何使用File文件,

import java.io.*;

import java.net.*;

public class TestFile

{

public static void main(String[] args) throws IOException

{

File file = new File(“hehe”);

if(!file.exists())

{

file.mkdir();

}

File nextFile = new File(file,“minghehe”);

if(!nextFile.exists())

{

nextFile.mkdirs();

}

System.out.println(nextFile.getParent());

if(nextFile.isDirectory())

{

File newFile = new File(nextFile,“ming.txt”);

if(!newFile.exists())

{

newFile.createNewFile();

System.out.println(newFile.getName());

System.out.println(newFile.getAbsoluteFile());

}

for(int i=0;i <5;i++)

{

File listFile = new File(nextFile,“ming”+i+“.txt”);

if(!listFile.exists())

{

listFile.createNewFile();

}

}

String[] list = nextFile.list();

for(int j = 0;j

{

System.out.println(list[j]);

}

}

}

}

输出结果为:

heheming

ming.txt

ming0.txt

ming1.txt

ming2.txt

ming3.txt

ming4.txt

Press any key to continue...

Java类 篇3

1 Java类加载器

Java加载体系灵活, 一个程序可允许多种不同类别加载器存在, 并允许一定程度的自定义。总体而言, Java加载器可分为Bootstrap Class Loader和用户自定义两种。Bootstrap Class Loader是JVM实现的一部分, 依据JVM实现形式的不同, 可成为实现形式的一部分, 其通过默认方式加载Java运行环境提供了核心类 (是所有应用程序必须的核心类) , 并永驻JVM, 直至JVM退出基础操作系统。Bootstrap Class Loader还加载Ext Class Loader与App Class Loader两个用户类加载器, 以满足不同类型的加载需求。自定义加载器顾名思义, 可采用自定义方式加载, 其可支持Java语言编写, 还可被翻译成为class文件, 还能被实例化, 实际上自定义加载器已成为程序的一部分。自定义加载器最大的优势在于为扩展Java提供了可能。

2 Java动态类加载机制

JVM解释字节码过程主要可分为加载、连接与初始化三个步骤:

(1) 加载:寻找类或接口子解码文件, 并进行解析, 并构造成为JVM内部对象能够表示的组件;

(2) 连接:是将已加载的数据合并进入JVM中允许, 连接又可分为坚持、准备、解析三个步骤;

(3) 初始化, 是将静态变量、代码快, 进行初始化工作。前文提到JVM运行需要多种加载器, 每个加载器的稳定运行都需要许多类加载器进行支持, 类加载器又有许多分级、分工, 不同的类加载器复杂加载不同的类, JVM据此构建复杂的层级关系, 构建“全盘负责双亲委托模型”机制进行加载。当有载入某类加载器需求时, 便通过路径寻找父加载器载入, 若无对应的父类加载器, 则需要按照搜索路径进行递归性搜索, 这个类加载器在载入一个类时, 该类所以来的父类或搜索获得的引用类都有该类加载器载入。当一个加载器被请求载入某类时, 在确认该类若已被加载, 则直接返回已被加载过的类对象, 若未被加载, 则定义后委托父类加载, 若能加载成功, 则发挥该类对应的class对象, 否则继续移交, 一直到获得根引导类加载器。整个过程遵循严格的递归调用, 尽管耗时费力, 但是经过严格的层级检查, 则相对安全, 不易被植入恶意基础类, 保证类根类使用的安全性。

前文提到, 因为类加载器会检查目标类是否被加载, 故每个类仅会被同一个类加载器加载1次。再次过程中, 每个被加载的类被加载过程都由其名称以及加载器名称控制。在每个类没装载解析后, JVM都会形成对应的java.lang.Class对象, 提供有关于此次加载过程的描述, 每个Class对象都有一个完整的定义, 以供加载器引用。

3 Java动态类加载实现

JVM加载类的方式主要可分为隐式加载与显式加载两种, 前者主要针对new等方式生成的对象, 通过隐式调用加载, 后者主要通过程序员调用自定义加载器调用加载需要的类, 其又可经过Class.for Name (1) 方法与load Class (2) 提供, 显示加载灵活性强, 大大提高了JVM的适应性。自定义加载器任何子类中创建, 通过制定的已存在的父加载器, 挂载到JVM加载器层次树中。此外, 任何类的加载都需通过抽象Class Loader类及其子类实现, 后者是Java核心API的重要组成部分, 所有的自定义类都必须继承并实例化该类, 可供选择的途径主要有: (1) Class load Class (String name, boolean recsove) , 使用制定的二进制加载类, name是指已有的指定二进制类名称, 在初始化类之前需进行类解析, 该方法使用委托机制加载类, 若已加载则采用find Class方法加载; (2) Class define CLass (String name, byte[]b, int off, int len) , 将byte数组转化为Class类实例并解析, 即将一个字节组转化为类的字节码; (3) find Class (String name) 按照指定的二进制查找类, 被load Class方法调用, 在自定义加载器时仍按照委托模型加载类; (4) Class find System Class (String name) :是指通过系统类加载器加载该类文件, 通过按照委托模型进行加载, 若存在, 则将原始字节转化为类对象, 并将文件自动转化为类; (5) Class find Loaded Class (String name) , 如果Java虚拟机已将此加载器记录为具有给定二进制名称的某个类的加载器, 则返回该二进制名称的类。

4 Java动态类加载的应用

Java语言的动态类加载功能十分强大, 可对已完整的程序进行改造, 通过控制某些类难得加载过程, 丰富程序功能。如常用的网络页面, 通过建立一个耳机网站, 后台分配控制栏目、公共功能, 并建设新的差异化、可拔插模块, 使静态页面动态化, 满足不同个体的需求。灵活的调整模块功能, 增加了系统的可扩展性、灵活性, 同时这种动态加载, 降低了系统模块之间的耦合性, 提高了系统稳定性、可控性, 有助于降低受攻击风险。

参考文献

[1]周志明.深入理解Java虚拟机:JVM高级特性与最佳实践[M].北京:机械工业出版社, 2010.191-197.

[2]王万森, 龚文.Java动态类加载机制研究及应用[J].计算机工程与设计, 2011, 32 (6) :2154-2158.

Java类 篇4

关键词:内部类,静态内部类,局部内部类,匿名内部类,外部类

通常情况下Java中类的定义包括属性和方法, 特殊用途下, 类中还可以定义类, 被包含的类叫做内部类[1]。相对于内部类而言, 包含内部类的类叫做外部类。根据内部类在外部类中使用方式不同, 又可以分为常规内部类、静态内部类、局部内部类和匿名内部类四种。以下论述中外部类命名为Outer, 内部类命名为Inner。

1 常规内部类

1.1 常规内部类的定义

在外部类中直接定义无static修饰的类, 称为常规内部类。例如:

public class Outer{;private int i=10;;private class Inner{;public void print () {;System.out.println (i) ;}};public void fun () {;Inner in=new Inner () ;;in.print () ;}}。

1.2 常规内部类的使用约束

第一, 定义时可以加访问控制符, public、protected、默认和private均可。第二, 不能定义静态属性和静态方法。第三, 可以访问外部类的属性和方法。第四, 外部类可以访问内部类的所有属性和方法。

1.3 常规内部类的引用方式

私有的常规内部类只能在外部类内引用, 格式为Inner in=new Inner () 。对于非私有的常规内部类可以在外部类之外进行引用, 格式为:Outer.Inner in=new Outer () .new Inner () 。

1.4 常规内部类的实现原理

Java编译器对内部类和外部类是分别进行编译的, 编译后产生Outer.class和Outer$1Inner.class两个字节码文件, 外部类能实例化私有常规内部类的根本原因在于编译器在编译私有常规内部类时生成了部分附加代码, 通过反编译技术对Outer$1Inner.class进行反编译可以查到附加代码如下:

final Outer this$0;;private Outer$1Inner () {this$0=Outer this;super () ;};Outer$1Inner (Outer$1Inner outer$1inner) {this () ;}。

反编译Outer.class时发现实例化私有常规内部类时的代码被改为1Inner in=new 1Inner (null) , 实际上调用的是包可见构造器, 包可见构造器内部又调用了私有构造器, 因此外部类可以实例化私有常规内部类。因为私有常规内部类通过构造器初始化了外部类引用变量, 所以私有常规内部类能够访问外部类的属性和方法, 对于能够访问外部类私有属性的原因在于编译器对外部类私有属性生成了专门的静态方法static int access$0 (Outer) , 代码隐藏不可见, 通过在内部类中使用静态的access$0方法引用外部类中的私有属性[2]。

2 静态内部类

2.1 静态内部类的定义

在外部类中直接定义有static修饰的类, 称为静态内部类, 例如:

public class Outer{;private static int i=10;;private static class Inner{;public void print () {;System.out.println (i) ;}}};

2.2 静态内部类的使用约束

只能访问外部类的静态属性和静态方法, 其它约束与常规内部类使用约束基本相同。

2.3 静态内部类的引用方式

静态内部类的引用方式同常规内部类的引用方式相同。

2.4 静态内部类的实现原理

反编译Outer$1Inner.class时发现编译器对静态内部类并不产生外部类引用变量, 因此静态内部类无法得到外部类的引用, 所以静态内部类只能访问外部类的静态属性和静态方法。

3 局部内部类

3.1 局部内部类的定义

在方法中定义的类, 称为局部内部类, 例如:

public class Outer{;private int i=10;;public void fun (final int j) {;class Inner{;public void print () {;System.out.println (i) ;;System.out println (j) ;}};Inner in=new Inner () ;;in.print () ;}}。

3.2 局部内部类的使用约束

第一, 局部内部类定义时不能加访问控制符, 只能在方法内部使用。第二, 局部内部类能访问外部类的属性和方法。第三, 局部内部类只能访问包含方法中fi nal修饰的变量。

3.3 局部内部类的引用方式

局部内部类只能在方法内部进行引用, 使用方式同基本类。

3.4 局部内部类的实现原理

反编译Outer$1Inner.class时发现编译器对局部内部类生成“fi nal Outer this$0”和“private fi nal int val$j”。局部内部类通过外部类引用变量可实现访问外部类的属性和方法, val$j是fi nal修饰的形参j的一个备份, 目的在于方法运行结束时, 避免Java垃圾回收器对方法内的资源进行垃圾回收时导致局部内部类在访问内部资源时查找失败[3]。

4 匿名内部类

4.1 匿名内部类的定义

只创建一个对象且不用命名的局部内部类, 称为匿名内部类, 例如:

public class Outer extends Frame{;public void init () {;this.add Window Listener (new Window Adapter () {;public void window Closing (Window Event e) {;e.get Window () .dispose () ;}}) ;}}。

4.2 匿名内部类的使用约束

匿名内部类由于没有类名, 因此不能定义构造器, 其它使用约束同局部内部类。

4.3 匿名内部类的引用方式

匿名内部类通常以方法的参数形式出现, 分为继承式匿名内部类和接口式匿名内部类两种。引用方式为new父类名 () {//重写父类方法}或new接口名 () {//实现接口方法}。

4.4 匿名内部类的实现原理

编译产生匿名内部类名称为Outer$1, 反编译后发现生成fi nal Outer this$0, 证明匿名内部类可以访问外部类的属性和方法。

5 结束语

通过反编译技术的使用, 深入研究了Java内部类的实现原理, 加深了对内部类定义方式、使用约束和引用方式的认识, 提高了对Java技术的应用水平。

参考文献

[1]张孝祥.Java就业培训教程[M].北京:清华大学出版社, 2003.

[2]郭广军, 陈代武, 王剑波.Java内部类的研究及应用[J].湖南人文科技学院学报, 2007 (06) :32-38.

浅析Java抽象类和接口的使用 篇5

一、抽象类的使用

抽象类特点之一就是不能实例化。在接触到抽象类这个概念之前,我们一定学习了类和对象的概念及使用,其中类和对象两者之间最重要的联系就是可以通过类来创建多个对象。但是生活中,有些类实例化以后是没有实际含义的,因此我们使用abstract来修饰这些类,使其不能实例化。比如:我们开发电子宠物系统,抽象出Dog类和Cat类,在这两个类中有许多相同的属性和方法,name、sex属性和shout方法。为了避免代码重复,我们将这两个类中相同的属性和方法提取出来放到一个单独的Pet类中,让Pet类作为父类,Dog类和Cat类作为子类,Dog类和Cat类继承Pet类。这时就出现一个问题,Pet pet=new Pet(),创建pet对象是没有意义的,因为现实生活中有狗,有猫,而没有一种叫宠物的动物,宠物只是我们抽象出来的一个概念。因此我们引入抽象类来限制Pet类,不让它实例化。比如:

此时,编译无法通过,提示不能实例化类型Pet。

抽象类还有另外一个特点就可以有抽象的方法,且抽象方法也要通过abstract关键字来修饰。比如:刚才建立的抽象类Pet,其中包含shout方法。子类Dog类和Cat类继承了shout方法,但狗叫声和猫叫声是不同的,所以只是简单在父类的shout方法内写入宠物叫声是不对的。我们可以将父类的shout方法写成抽象方法,在子类Dog类和Cat类中重写这个方法,这样才能正确执行shout方法。比如:

二、接口的使用

如果抽象类中所有的方法都是抽象方法,就可以使用Java提供的接口来表示。从这个角度来讲,接口可以看作是一种特殊的“抽象类”,但是采用与抽象类完全不同的语法来表示,两者的设计理念也是不同的。Java语言使用关键字interface定义一个接口,一个接口或类可以继承多个接口,一个类可以通过implements实现多个接口。

1、接口表示一种约定

接口是程序间的约定,但它仅仅是实现某种特定功能的一组对外接口和规范,具体功能的实现是在实现这个接口的各类中完成的。比如:USB接口是一些企业和组织等制定的一种约定,它规定了接口的大小、形状等,按照该约定设计的各种设备,例如U盘、USB风扇等都可以插到USB口上正常工作。下面通过编写Java代码来模拟USB接口,通过service0方法提供服务。

定义USB风扇类,实现USB接口,获得电流让风扇转动。

通过这个案例,我们可以进一步理解接口表示一种约定。一个类实现了某个接口,就可以称为这个类符合了某个约定。

2、接口表示一种能力

在招聘软件工程师时,要求应聘人员不仅要具备编码能力,还要懂业务。只要是符合这连个要求的人员都有机会被录取,而不是针对某些人招聘。在Java编程中,如果要描述和实现这样一个问题,我们可以使用接口来实现。比如;

定义Programmer接口,具备编码的能力。

public interface Programmer{public void writeProgram0;}

定义BizAgent接口,具备讲解业务的能力。

public interface BizAgent{public void giveBizSpeech0;}

定义SoftEngineer类,同时实现Programmer和BizAgent接口。

public class SoftEngineer implements Programmer,BizAgent{

这个案例表明接口是一种能力,一个类实现了某个接口,就表示这个类具备了某种能力。生活中一个人可以具有多项能力,一个类也可以实现多个接口。

三、抽象类和接口的使用比较

通过以上案例,我们发现抽象类和接口在使用的过程中,特别是支持抽象类的定义方面具有较高的相似性,但两者在设计理念上也存在着不同点。下面我们系统的总结两者在使用过程需要注意的内容:

1、接口和类、抽象类是一个层次的概念,命名规则相同。

如果修饰符是Public,则该抽象类和接口在整个项目中可见。如果省略修饰符,则该内容只在当前包可见。

2、抽象类和接口都不能实例化

抽象类中可以有变量,而接口中不能定义变量,即接口中属性都会自动用public static final来修饰,都是全局静态常量,且必须在定义时指定初始值。抽象类中可以有具体方法和抽象方法,抽象类的子类也可以是抽象类;而接口中所有方法都是抽象方法,接口中方法都会自动用public abstract修饰。抽象类属于一种特殊的类,类的继承必须满足一个子类只能有一个父类。而接口可以实现多继承,即一个接口可以有多个父接口。由于接口不涉及实现,从这点上看,接口在抽象化程度方面比抽象类的更高。抽象类和接口都与Java语言中的多态性密切相关。

四、小结

抽象类和接口都能实现对一组行为的抽象,其中面向接口编程,可以降低代码间的耦合性,提高代码的可扩展性和可维护性,开发系统时,主体构架使用接口,接口构成系统的骨架;抽象类一般用于关系密切的对象,它能更准确地模拟对问题领域的理解,并提供实现的模式,使实现功能的代码更简单。

理解抽象类和接口,是真正使用面向对象的思想去分析问题,解决问题的开始。合理使用这两种机制,充分发挥各自的优势,是程序设计中一个重要的部分。

摘要:本文基于Java面向对象的特点给出了抽象类和接口在Java语言程序设计中的具体使用,并总结了抽象类和接口的作用。

关键词:Java,抽象类,接口,使用

参考文献

[1]北京阿博泰克北大青鸟信息技术有限公司.使用Java实现面向对象编??程[M].科学技术文献出版社,2011.

[2]刘虢傻.浅析Java的接口和抽象类[J].广西轻工业,2007,11

[3]罗涛.Java抽象类和接口解析[J].电脑知识与技术,2009,7

[4]纪娜,李静,黄婉林.Java抽象类与接口的比较[J].杨凌职业技术学院学报,2008,3.

Java类 篇6

1 功能设计

(1) 定义一个Image类型数组引入坦克图片。

(2) 定义4个布尔变量代表键盘4个方向键的按下情况。

(3) 实现父类drawTank方法。

(4) 让Goodtank类的坦克能够在键盘方向键的控制下8方向移动。

2 功能分析

(1) 因为坦克要能够朝八个方向移动, 每个方向都需要对应一张坦克图片, 所以需要8张坦克图片。为了调用方便, 用一个数组来存储这些图片。

(2) 要做到用键盘的方向键来控制坦克的移动, 首先要通过方向键按下与否来判断是哪个方向, 从而让坦克朝该方向前进。但是4个方向键如何表示出8个方向呢?可以定义4个布尔值的变量, 代表上下左右4个方向键, 哪个方向键被按下了其布尔变量就为true, 否则为false。然后根据这个布尔值变量的取值就可以组合出8个方向。

(3) Tank类中的drawTank方法是抽象的, 这里需要具体实现它。事先准备好8张图片, 然后根据坦克的方向变量dir来决定显示那张图片即可。

(4) 写一个方法keyPress, 其内容为键盘方向键按下就把4个布尔值变量置为true;再写一个keyReleased方法, 键盘方向键抬起就置为false。再写一个getDir方法, 在该方法中根据4个布尔值变量的取值来断定表示方向的枚举类型变量dir的取值, 从而得到当前坦克的移动方向。

在GoodTank类中, 定义一个图片数组, 存储8张坦克图片, 定义4个布尔值, 代表键盘的4个方向键是否被按下;然后在drawTank方法中根据dir值来绘制相应的坦克图片;最后写keyPress和keyReleased方法, 在这两个方法中根据键盘4个方向键的按下与否来设置4个布尔变量的值, 从而在getDir方法中根据这4个布尔变量的值来确定坦克最后的走向, 在通过调用Tank的move方法来移动坦克, 让坦克向该方向前进。

3 具体实现

这段代码写好后, 在主类TankWar中生成一个Goodtank对象gTank, 然后把Tankwar的paintComponent方法修改成如下所示:

现在运行程序后, 会看到一个坦克自上向下移动, 但此时按下键盘的方向键坦克却不会在其控制下移动, 这是因为还没有添加键盘事件。现在考虑如何添加键盘事件:因为程序是从主类TankWar开始运行的, 它负责获取键盘的按键情况, 监听键盘事件, 所以键盘事件要添加到TankWar类里, 并且实现keyPress和keyReleased两个方法, 在这两个方法里分别调用GoodTank的keyPress和keyReleased方法, 这样按下键盘时就能被TankWar监听到, 并且执行键盘事件的keyPress和keyReleased方法, 从而能够执行GoodTank的keyPress和keyReleased方法, 让坦克移动起来。TankWar的键盘事件代码如下:

然后让窗体jf对象注册该监听器类, 如下:

jf.addKeyListener (t.new KeyMoniter () ) ;

再次运行程序, 坦克可以接受键盘按键, 在键盘控制下移动了, 不过还有一个小问题, 就是当键盘都抬起时, 坦克就会消失。这是因为在定义枚举类型dir时, 除了定义了8个方向外, 还定义了一个STOP值, 8个方向有八张坦克图片与之对应, 但是当dir取STOP值的时候没有图片与之对应, 所以会出现上述问题。STOP值不能去掉, 因为坦克总会有停止的时候, 那么坦克停止时应该用哪张图片呢?很自然的, 刚才移动时朝哪个方向, 现在停止就该用朝哪个方向的图片。

在Tank类里再定义一个Direction类型的变量rDir, 让该变量不能取STOP值, 只能取8个方向之一。这样, Goodtank类的drawTank方法根据r Dir来引入图片就没有问题了。那么如何做到让rDir只取8个方向呢?其实也很简单, 在Tank类move方法的最后加上如下代码:

move方法会根据dir的取值改变坦克坐标, 如果取值为STOP则不会改变坦克坐标。这里判断只要dir不是STOP, 就让rDir等于dir, 这样r Dir就只会取8个方向的值了。

到此GoodTank类就完成了。现在我方坦克就能在键盘控制下自由移动了, 运行效果如图1所示, 敌方坦克随机地自动移动, 而我方坦克在键盘的控制下移动。

4 难点释疑——引入图片的方法

在上一讲和本讲中都使用了图片, 这里总结一下Java中图片的引入方法。Java中能识别的图片有gif和jpg两种格式, 用图片主要有两个场合:

4.1 图形界面中

在组件中使用, 比如按钮上加一个图标, 标签组件加一个图片等。此时需要首先获得一个ImageIcon对象 (ImageIcon类能根据URL、文件名或字节数组创建一个图像) , 然后用组件的setIcon方法加入。

4.2 图形处理中

图片不是加到组件上, 而是画在某个地方, 比如画到JPanel面板内。此时先获得一个Image对象 (Image类是一个抽象类, 不能实例化, 可以借助ImageIcon来得到一个Image对象)

得到了一个图片对象后, 接下来, 如何把该图片画出来?使用Graphics类提供的drawImage () 方法, 它能完成将Image对象中的图像显示在屏幕的特定位置上, 就像显示文本一样方便。drawImage () 方法的调用格式如下:

其中img参数就是要显示的Image对象。x和y参数是该图像左上角的坐标值。observer参数则是一个ImageObserver接口 (interface) , 它用来跟踪图像文件装载是否已经完成的情况, 通常都将该参数置为this, 即传递本对象的引用去实现这个接口。比如本程序中坦克图片就是这种方法画出的。

5 结语

Java类 篇7

在所以面向对象 (object) 的程序设计语言的概念中, 类 (class) 是同一类型事物数据的抽象, 是对象共性的抽象, 是客观对象在人脑中的主观反映, 是一种抽象的数据类型;类包含了属性, 方法, 构造三部分。所有的对象 (object) 都是通过类来描绘的, 但是反过来却不是这样。并不是所有的类都是用来描绘对象 (object) 的, 如果一个类中没有包含足够的信息来描绘一个具体的对象 (object) , 这样的类就是抽象类 (abstract class) 。抽象类 (abstract class) 用来表征我们在对问题领域进行分析、设计中得出的抽象概念, 是对一系列看上去不同, 但是本质上相同的具体概念的抽象。

在面向对象领域, 抽象类主要用来进行类型隐藏。为了能够实现面向对象设计的一个最核心的原则OCP (Open-Closed Principle) , 抽象类是其中的关键所在。

2 抽象类 (a bs tra ct cla s s)

使用abstract修饰的类为抽象类, 抽象类是用来被继承, 子类去实现的。抽象类就像一张图纸, 实现后的子类则就像根据图纸生产的产品。abstract类与多态性密不可分的。抽象类可以声明一个引用。抽象类不能创建对象。抽象类可以调用静态方法, 不能调用非静态方法。一个抽象类可以被子类继承, 子类也可以是抽象类。一个类中有抽象方法, 则这个类必须是抽象类。一个抽象类中不一定要有抽象方法。abstract类是一种很有用的语法, 在实际开发中, 它主要用来抽象出一些子类的共性, 在抽象类中只声明方法, 表示出方法能做什么, 但因不同子类可能方法的实现不一样, 所以方法实现就是个性。抽象类中抽象方法可有可无, 但通常都含有抽象方法 (这是定义抽象类的目的所在) , 就是让子类继承。如果子类没有把抽象类中所有的抽象方法都重写, 则这个继承了抽象类的子类也会成为抽象类;如果子类把抽象类中所有的抽象方法都重写, 则这个子类就可以实例化了。在现实世界中, 某类事物能做什么是可以确定的, 所以现实中的类常常都是抽象类, 它的抽象方法的定义与实现分开的, 抽象类就是用来定义一类事物能做什么, 而子类可以实现抽象类的部分抽象方法。抽象类对象是不能独立存在的, 但若创建子类时候, 先构造父类对象则是可以的。抽象类是有无参构造的, 是留给子类使用的。抽象类就是用来定义一个标准, 定义某类事物的方法标准, 而让其被不同子类继承, 去覆盖实现这些方法。对于调用者而言, 只需知道抽象类的方法定义, 则就可以调用不同子类的实现。抽象类屏蔽了不同子类的方法对调用者的差异。

3 接口 (inte rfa ce s)

Java中的接口 (interfaces) 是一系列方法的声明, 是一些方法特征的集合, 一个接口只有方法的特征没有方法的实现, 因此这些方法可以在不同的地方被不同的类实现, 而这些实现可以具有不同的功能。接口的作用是实现多继承, 这只是接口的一部分功能。接口是一个类的附加信息, 接口的多继承是不会破坏类的单继承的。一个类的父类与该类实现的接口并不在同一个层次上, 一个类实现的接口, 往往是对多个类的共性再做一个抽象。接口是对事物的共性再抽象:任何一个对象都是多继承的, 不可能是单个类型的, 但对象的多个类型之间有一个主次关系。主要的做成类:存储设备, 输入设备;次要的就做成接口:usb设备, 也称副类型。接口是提供了一个标准, 它使得方法的使用者与实现者之间是弱耦合关系;因为接口中都是抽象方法所以接口是一个解耦合工具。当多个父接口 (直接, 间接) 指向接口同一个实现类的对象时, 则各个接口引用能调用的方法是该接口引用中的方法。实现了子接口的类也可以调用间接父接口的方法, 因为一个类实现了子接口, 也就是实现了父接口。

接口的特性:接口也是一个抽象类;接口也可以继承;在一个接口文件中:只能有一个公开的接口, 可以写多个接口, 编译生成的.class文件名与接口名一样;继承接口后的子接口是抽象类, 无需实现;接口之间可以实现多继承的;接口不能new对象, 但可以声明引用;接口可以被一个类继承, 类继承接口时用implements;一个类在继承一个类的同时, 还可以实现多个接口。

4 抽象类 (a bs tra ct cla s s) 和接口 (inte rfa ce s)

从以上的说明中我们可以看出抽象类 (abstract class) 和接口 (interfaces) 在Java面向对象 (object) 程序设计语言中是支持类定义的两种不同的机制。正是由于这两种不同机制的存在, 使得Java具有强大的功能。抽象类 (abstract class) 和接口 (interfaces) 之间在对于抽象类定义的支持方面具有很大的相似性, 甚至可以相互替换。而两者之间在联系的同时也有很大的区别。接口的作用是实现多继承。接口继承和实现继承的规则不同, 一个类只有一个直接父类, 但可以实现多个接口。Java接口本身没有任何实现, 因为Java接口不涉及表象, 而只描述public行为, 所以Java接口比Java抽象类更抽象化。Java接口的方法只能是抽象的和公开的, Java接口不能有构造器, Java接口可以有public, 静态的和final属性。接口把方法的特征和方法的实现分割开来。这种分割体现在接口常常代表一个角色, 它包装与该角色相关的操作和属性, 而实现这个接口的类便是扮演这个角色的演员。一个角色由不同的演员来演, 而不同的演员之间除了扮演一个共同的角色之外, 并不要求其它的共同之处。两个类中的两个类似的功能, 调用他们的类动态的决定一种实现, 那他们提供一个抽象父类, 子类分别实现父类所定义的方法。接口提供了关联以及方法调用上的可插入性, 软件系统的规模越大, 生命周期越长, 接口使得软件系统的灵活性和可扩展性, 可插入性方面得到保证。在理想的情况下, 一个具体的Java类应当只实现Java接口和抽象Java类中声明的方法, 而不应当给多余方法。Java接口 (以及抽象类) 一般用来作为一个类型的等级结构的起点。

5 结束语

抽象类 (abstract class) 和接口 (interfaces) 是Java语言中的两种定义抽象类的方式, 它们之间有很大的相似性。但是对于它们的选择却又往往反映出对于问题领域中的概念本质的理解、对于设计意图的反映是否正确、合理, 因为它们表现了概念间的不同的关系。

abstract class在Java语言中表示的是一种继承关系, 一个类只能使用一次继承关系。但是, 一个类却可以实现多个interface。在abstract class中可以有自己的数据成员, 也可以有非abstarct的成员方法, 而在interface中, 只能够有静态的不能被修改的数据成员 (也就是必须是static final的, 不过在interface中一般不定义数据成员) , 所有的成员方法都是abstract的。abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系, interface表示的是"like-a"关系。实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。接口中定义的变量默认是public static final型, 且必须给其初值, 所以实现类中不能重新定义, 也不能改变其值。抽象类中的变量默认是friendly型, 其值可以在子类中重新定义, 也可以重新赋值。接口中的方法默认都是public, abstract类型的。

摘要:抽象类 (abstract class) 和接口 (interfaces) 在Java面向对象 (object) 程序设计语言中是支持类定义的两种不同的机制。正是由于这两种不同机制的存在, 使得Java具有强大的功能。抽象类 (abstract class) 和接口 (interfaces) 之间在对于抽象类定义的支持方面具有很大的相似性, 甚至可以相互替换。其实, 两者之间还是有很大的区别的, 对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。本论述将对它们之间的区别进行一番剖析, 以便让设计人员对二者在使用时有比较明确的抉择, 以利于程序的流畅执行。

关键词:类,接口,抽象类

参考文献

[1]Patrick Chan.The Java Developers Almanac1.4.NewYork:Ad-dison Wesley, 2002.

[2]武传海 (译) .Java编程基础、应用与实例[M].北京:人民邮电出版社, 2005.10.

Java类 篇8

我国国内对任务激励式教学法的研究开始的比较晚。虽然有关任务激励式教学法的研究与应用有一些进展,但是这方面理论研究总体上起步较慢,没有形成体系,对任务激励式教学法的基本理论大多是援引国外的,而且主要侧重于基本概念、特征、要素等方面[2]。近几年任务激励式教学法的实际应用正在得到推广,课堂实践尤其是应用的案例逐渐增多,但主要集中在一些中小学、职业学校、培训机构以及企业中,在高校的教学中应用较少,而且在高校教学中数量不多的应用主要局限于应用性较强的单独某门课程教学中,在高校本科专业理论课程中关于某个课程体系或类别的任务激励式教学法的应用几乎还是空白[3]。因此,积极开展任务激励式教学法在本科专业理论课程体系或类别中的应用研究是势在必行的。

1 Java类课程的教学现状

沈阳师范大学软件学院是在2002年经辽宁省教育厅批准成立的以培养21世纪高级软件人才为宗旨的高等学府。学院采用全新的办学体制、先进的教学理念、实训式的教学模式,紧密衔接IT行业发展,使学生毕业后具有软件编程、项目开发及工程规划的实际工作能力。同时,学院与国内外一些大学和知名IT企业及研究院所(如中科院沈阳计算所、辽宁省信息中心等)合作,实现了学业与职业的“零距离”对接,提供与国内知名IT企业就业的直通渠道。Java类课程是软件学院为了满足辽宁省及沈阳市信息产业发展对计算机高级应用型人才的需求而设立的核心课程。与其它课程相比,本类课程不仅要求学生对所学的知识进行充分的理解和掌握,更要达到学以致用,能够把知识融会贯通地应用到实际问题的解决过程中去,为以后的开发工作和继续学习打下良好的技术基础[4]。在学院的计算机科学与技术、软件工程等本科专业的建设中,Java课程作为各专业主干课注重加强与行业企业的协作,突出实践性教学环节,强调实际操作技能的培养,已初步形成了具有软件学院特色的人才培养体系。特别是Java课程体系核心课程链的《Java语言程序设计》、《Java Web应用开发技术》和《J2EE应用开发》,经过几年的努力建设取得了一定的成绩。但是,我们也必须正视当前Java类课程教学过程中存在的问题和差距,比如现行课程内容存在一定的学科体系的烙印,教师在实际授课过程中还存在较多的机械式知识传授的现象,而对课程结构设计不够重视;现行课程体系虽然与行业企业有一定合作,但是和真实工作情景相比还有一定距离,学生在毕业后可能仍然在岗位适应能力上存在一定的欠缺。

软件学院作为沈阳师范大学唯一的计算机专业学院,在当前高等教育改革的大潮中更要迎头赶上,任务激励式课程已经成为当前高等教育课程改革的方向,因为它符合教育规律,容易激发学生的学习兴趣,培养学生综合应用专业知识的能力。所以,本研究以Java课程体系为例在本科专业理论课程中实施真正意义上的任务激励式课程,即改变以知识为基础设计课程的传统,换之以工作任务为中心来组织知识和专业课程内容,以岗位能力为基础来设计课程的一些思路和做法,并希望通过Java类课程任务激励式教学改革的经验对相关专业乃至全院的课程改革起到推动和引领作用。

2 实践教学改革方案

2.1 调整教学内容

本研究主要以沈师软件学院Java课程体系,即《Java语言程序设计》、《Java Web应用开发技术》和《J2EE应用开发》三门课程为主轴进行本科专业理论课程的任务激励式教学改革,包括:以岗位工作任务为中心重组课程体系,调整教学内容,开发专业教学标准;以学生职业生涯发展为目标,明确专业的培养目标;以工作任务为基础,开发职业能力标准;以工作过程为线索,重组专业课程体系;以职业能力为依据,开发Java核心课程的课程标准、Java项目综合实训指导书;以典型设计案例为载体,设计Java核心课程的任务激励教学方案;以技术发展为指针,建设反映新技术、新应用的任务激励式教材。最终建立一条能力递进的“阶梯状”课程链(如图1所示),体现由简单到复杂的工作过程,发展学生的职业编程及软件设计能力。

图1所示课程链是Java课程体系的课程主链。“阶梯状”设计的依据来自美国德莱福斯关于高等职业教育的经验迁移理论以及德国技术和教育研究所(ITB)的实证研究。借鉴该理论,我们希望通过Java类课程链的建设,使学生的职业成长遵循“从完成简单工作任务到完成复杂工作任务”的能力发展过程。

“阶梯状”设计并不是简单地割裂课程链,而是遵循职业能力发展的阶段性,以Java基础编程、Java应用软件设计、Java企业级软件开发为线索,按照工作范围的广度与深度,建立三个阶段的工学交替学习制度,解构学科内容并进行系统化处理,构成三个相对独立的技能发展阶段。以案例驱动,任务引导,提出问题,解决问题,培养学生在实际工作中处理解决问题的能力。

2.2 改革教学方法

1)与行业主流企业合作,注重学生职业能力培养

依托沈师软件学院的合作企业平台(如神州数码、东软集团、微软中国等),加强与世界领先企业的合作,教学内容和技能训练以相关企业的实际产品和具体技术应用为素材,使学生通过对一种具体的、有代表性的软件开发产品的亲身体验,在加强实践能力训练的同时也加深了对理论的理解与掌握。

2)以工作任务及工作过程组织教学内容

本研究相关的三门核心课程以完成Java基本编程、Java应用软件设计、Java企业级软件开发为目标,是一个按工程逻辑推进的完整工作过程,三门课程层层递进并相互嵌套。每一门课程内部按照工作岗位目标要求,结合企业专家共同制定的任务激励课程标准,以“总-分-总”的模式进行编排,即以总体任务为指针,先确定完成任务需要达到的总体目标,然后分解总体任务为单独的模块化职业活动,在熟悉每个主题学习单元的应用场合、基本原理和操作规范后,再在期末完成一个具体方案从设计、实施、维护到排错、评估的完整工作过程。

3)采用双语教学,自编特色教材,加强国际认证训练

使用本院老师自编的特色教材授课,采用专业理论、实践、英语三位一体的教学方法,授课过程中根据教材适当穿插JAVA国际认证试题的讲解,取得了较好的效果,为学生毕业后考取认证资格打下了良好的基础。

总之,在计算机专业Java类课程的改革中,在行业专家和课程专家的指引下,以职业能力为依据,开发课程标准;以案例为驱动,以典型产品为载体,设计任务激励式教学方案;以实物为平台,以操作为线索,创新了从个别到一般、从实际到理论、从具体到抽象的高等教育建设思路,实现教、学、做结合,理论与实践一体化的教学设计。

2.3 深化教学实践

本研究开展Java课程体系的任务激励式改革实践的侧重点为:

1)以市场调研结果确定职业岗位

首先经过大量的市场调研,针对毕业生在Java软件开发方向可能面向的就业单位,如系统集成企业、软件开发公司、行政事业单位等,分析不同的岗位群和岗位工作任务,先行了解大概的市场需求,并以学生职业生涯发展为目标确定培养目标。

2)通过工作任务分析确定职业能力

邀请来自企业和行业一线的工程师共同召开研讨会,以学生的就业岗位为基础,进行工作任务的分析,从而总结专业对应岗位的职业能力标准。

3)以典型产品设计任务活动

依据工作过程的完整性,设置阶段性实训任务。在确定了课程体系和课程标准后,以典型产品为载体(如Eclipse、Net Beans IDE等)来设计任务活动。以实训任务带动知识学习和技能的掌握,把知识与技能的学习相融合,激发学生的学习兴趣,体现课程设计的职业性与实践性。

4)依据职业认证和技术发展开发活页式教材

在课程设计上,我们一方面积极与国际上主流的IT厂商进行密切合作,将其职业认证和培训课程引入到学历教育中来;另一方面,又不完全拘泥于厂商课程,而是根据本专业在市场调研和专业研讨基础上形成的培养目标进行内容的取舍与整合。所以,近几届学生的教材已先后进行了三次大幅修订,以实现和市场需求及技术发展的紧密结合与无缝接轨。

2.4 丰富教学手段

在教学过程中,通过计算机、网络等信息技术手段的应用,充分发挥多媒体课堂教学、实验案例教学、任务激励教学、网络教学等多种教学手段的功能性和优越性,最大限度地拓展教学和实践空间,实现二者的有效融合。

1)尽可能适用多媒体教学形式。在案例教学中,适当的电教设施的使用会收到事半功倍的效果。尤其是在课堂案例教学及模拟教学中,如果仅单纯地依靠教师或学生口述有关事实,既占用大量的课堂时间,又显得不够直观生动,难以将案例描述得透彻清楚。通过多媒体课件或录像、图片、幻灯等视听材料的运用,则能充分调动学生的情绪,增加案例教学的生动性、形象性,同时还能有效地增加课堂信息含量,极大地丰富教学内容。此外,制作预设案例与程序演示相结合的视频课件,可以帮助学生对重点内容进行回顾理解,有效的指导学生课外的动手实践。

2)开发课程网络教学系统,提供虚拟交流平台。教师负责搭建课程学习与交流的网站,提供教学大纲、教学日历、教学课件、作业习题、学习指导等教学资源与学生共享,满足不同层次学生的不同学习需要,使学生能够方便快捷、准确高效的获取信息资源。同时,开设网络交流论坛或相关即时通讯软件群,用于实现教师与学生、学生与学生之间的多向信息交流与沟通。此外,Java类课程教师应该在每周的约定时间轮班与学生进行在线答疑,即可以及时的为学生答疑解惑,又可以亲密的与学生互动交流,拉近了与学生的距离,有利于学生消化理解已讲授课程内容的重点与难点,及时跟进后续知识点的学习。

3)善于将教学内容转化为学习任务,以激励方式推进课程体系改革。教师授课过程中,将教学目标视为总体任务,结合企业实际需求、行业流行产品将课程内容中重点章节的知识点细化为阶段学习任务,融合到实际案例进行情景教学,将会强烈激发学生的学习热情,发挥学生学习的主观能动性,起到事半功倍的教学质量与效果。如模拟出一项企业任务,即开发人力资源管理系统;或假象成一项创业计划,即构建网上图书商城,这种教学手段有利于激励学生的潜能释放和兴趣培养,学生通过给定的任务活动,对任务的各个环节及各环节关键点所涉及到的学习内容与知识要点,都会有一个清楚的认识和牢固的把握。在这项任务中,教师应该把真实的背景资料也一并给学生,有时甚至可以给出一些干扰因素,提高学生在复杂的环境中自己分析问题、自己解决问题的能力。教师要有详细的任务实施规划、评价规则及学生应完成的总体与阶段任务目标,由于任务目标明确、实施规划细致、评价规则合理,故能激发学生的学习热情、增强学习的积极性和主动性。

3 结束语

本研究通过探索完善理论、实践、专业英语三位一体的任务激励式特色教学方式,开发具有自主知识产权的课程教学资源库,在Java课程体系上形成真正的基于工作过程的任务引领型激励课程,从而对整个本科计算机专业理论课程起到示范和引领作用。

教学实践表明,任务激励式教学模式很适合Java类课程体系授课,适用于培养学生创新开发、沟通协作的精神以及提高学生分析问题、解决问题的能力。通过协作参与任务激励的实践训练,培养了学生良好的软件开发职业素养,为学生工作就业与企业招贤纳士起到了桥梁和纽带的重要作用。

参考文献

[1]刘启玉,于欣,范良忠.基于任务激励的程序设计类课程教学模式[J].计算机教育,2011(4):41-44.

[2]陈凡健.任务激励教学法在数据库应用技术教学中的应用[J].广西轻工业,2008(8):113-114.

[3]黄洪,赵小敏,张繁,等.任务驱动教学法在JAVA程序设计课程中的应用[J].计算机时代,2012(4):49-51.

【Java类】推荐阅读:

上一篇:旅游村镇下一篇:安全技术措施

本站热搜

    相关推荐