Return Home Investments Find Mortgage Home Mortgages

Findmortgagehomemortgages Tag Prevue Pet Products Find Mortgage Home Mortgages 高手瞬间

Findmortgagehomemortgages Tag Prevue Pet Products Find Mortgage Home Mortgages

searchsearchsearchsearchb Pet n Pet u Pet . Products 0 Pet Products Products Tag Findmortgagehomemortgages Products searche Products Tag Prevue w. Findmortgagehomemortgages Ddaa66.coma owww.aaaqe.comu Findmortgagehomemortgages t Prevue asearch6 Prevue c Products md Tag a Prevue 6searchc Products mro Products u Findmortgagehomemortgages t Prevue s Pet awww.ddaa66.comc Pet Products esearchrwww.aaaqe.comh Pet

ubuntu8.10源列表
thread-43287-1-1.html
硬盘 安装 ubuntu8.10
Linux/2008-11/17077.htm
FreeBSD安装
os/freebsd_book_chs/ch02.htm
0 评论

2009年3月6日 星期五

java 抽象类 接口

考虑这样一个例子,假设在我们的问题领域中有一个关于Door的抽象概念,该Door具有执行两个动作open和close,现在要求Door还要具有报警的功能。我们该如何设计针对该例子的类结构呢。
AlarmDoor在概念本质上是Door,同时它
有具有报 警的功能。我们该如何来设计、实现来明确的反映出我们的意思呢?注意abstract
class在Java语言中表示一种继承关系,而继承关系 在本质上是"is-a"关系。所以对于Door这个概念,我们应该使用abstarct
class方式来定义。另外,AlarmDoor又具有报警功能,说
明它又能够完成报警概念中定义的行为,所以报警概念可以通过interface方式定义。如下所示:
abstract class Door{}
interface Alarm{}
class Alarm Door extends Door implements Alarm{}
void close(){}
void alarm(){}
}

这种实现方式基本上能够明确的反映出我们对于问题领域的理解,正确的揭示我们的设计意图。abstract class表示的是"is-a"关系,
interface表示的是"like-a"关系,
大家在选择时可以作为一个依据,当然这是建立在对问题领域的理解
上的,比如:如果我们认为AlarmDoor在概念本质上是报警器,同时又具有Door的功能,那么上述的定义方式就要反过来了。
  小结
  1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
 
 2.在abstract class
中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是
static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。
  3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。
  4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
  5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
  6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。
  7.接口中的方法默认都是 public,abstract 类型的。
结论:
 abstract class 和 interface 是
Java语言中的两种定义抽象类的方式,它们之间有很大的相似性。但是对于它们的选择却又往往反映出对于问题领域中的概
念本质的理解、对于设计意图的反映是否正确、合理,因为它们表现了概念间的不同的关系(虽然都能够实现需求的功能)。这其实也是语言的一种的惯用法,希望
读者朋友能够细细体会

2009年2月28日 星期六

ubuntu Install OpenGL Development Environment

本文是在Ubuntu下配置OpenGL的过程

首先不可或缺的,就是編譯器與基本的函式庫,如果系統沒有安裝的話,請依照下面的方式安裝:首先不可或缺的,就是编译器与基本的函式库,如果系统没有安装的话,请依照下面的方式安装:

sudo apt-get install build-essential sudo apt-get install build-essential

安裝OpenGL Library 安装OpenGL Library

接下來要把我們會用到的Library 裝上去,首先安裝OpenGL Library接下来要把我们会用到的Library装上去,首先安装OpenGL Library

sudo apt-get install libgl1-mesa-dev sudo apt-get install libgl1-mesa-dev

安裝OpenGL Utilities 安装OpenGL Utilities

OpenGL Utilities 是一組建構於OpenGL Library 之上的工具組,提供許多很方便的函式,使OpenGL更強大且更容易使用。 OpenGL Utilities是一组建构于OpenGL Library之上的工具组,提供许多很方便的函式,使OpenGL更强大且更容易使用。 接下來我們安裝OpenGL Utilities接下来我们安装OpenGL Utilities

sudo apt-get install libglu1-mesa-dev sudo apt-get install libglu1-mesa-dev

安裝OpenGL Utility Toolkit 安装OpenGL Utility Toolkit

OpenGL Utility Toolkit 是建立在OpenGL Utilities 上面的工具箱,除了強化了OpenGL Utilities 的不足之外,也增加了OpenGL對於視窗介面支援。 OpenGL Utility Toolkit是建立在OpenGL Utilities上面的工具箱,除了强化了OpenGL Utilities的不足之外,也增加了OpenGL对于视窗介面支援。

sudo apt-get install libglut-dev sudo apt-get install libglut-dev

設定編譯參數與編譯 设定编译参数与编译

在這之前,我們需要一個測試範例,example.c 如下:在这之前,我们需要一个测试范例,example.c如下:

#include #include

void init(); void init();
void display(); void display();

int main(int argc, char* argv[]) int main(int argc, char* argv[])
{} }

void init() void init()
{} }

void display() void display()
{} }

有了測試範例、基礎編譯環境與各個OpenGL 相關的函式庫之後,我們所需要做的就是告訴編譯器我們有安裝OpenGL 函式庫,編譯程式時要連結這些函式庫。有了测试范例、基础编译环境与各个OpenGL相关的函式库之后,我们所需要做的就是告诉编译器我们有安装OpenGL函式库,编译程式时要连结这些函式库。

gcc example.c -o example.out -lGL -lGLU -lglut gcc example.c -o example.out -lGL -lGLU -lglut

因為我們安裝了OpenGL Utility Toolkit ,它是建立在OpenGL Utilities 與OpenGL Library 之上,因此我們可以簡單連結OpenGL Utility Toolkit 的函式庫就可以達到我們的目地了。因为我们安装了OpenGL Utility Toolkit ,它是建立在OpenGL Utilities与OpenGL Library之上,因此我们可以简单连结OpenGL Utility Toolkit的函式库就可以达到我们的目地了。 下面的編譯參數跟上面的是同樣效果:下面的编译参数跟上面的是同样效果:

gcc example.c -o example.out -lglut gcc example.c -o example.out -lglut

下面簡單說明一下所使用的gcc 參數下面简单说明一下所使用的gcc参数

-l 告訴gcc 去連結指定Library -l告诉gcc去连结指定Library
-o 指定執行檔的輸出名字 -o指定执行档的输出名字

執行 执行

接下來我們就可以來看看我們的結果,如果看到右圖,代表成功了!接下来我们就可以来看看我们的结果,如果看到右图,代表成功了!
圖片:Teapot.png 图片:Teapot.png
Freesamael用OpenGL 畫的茶壺 Freesamael用OpenGL画的茶壶

./example.out ./example.out

參考 参考
連結 连结

* OpenGL 官方網站: OpenGL官方网站:

OpenGL 教學文件 OpenGL教学文件

* NeHe: NeHe:
* 康考迪亞大學的OpenGL 教材: ~r_rajago/graphics/tutorials/康考迪亚大学的OpenGL教材: ~r_rajago/graphics/tutorials/

Grep 命令