第一篇:Power專題十二JAVA程序設(shè)計(jì)語言
專題十二: JAVA程序設(shè)計(jì)語言
Java語言簡介: 背景
1991年 ,SUN MicroSystem公司的 Jame Gosling、Bill Joe等人 ,在電 視、控制烤面包箱等家用消費(fèi)類電子產(chǎn)品上進(jìn)行交互式操作的開發(fā),開始時(shí)是使用C++語言,但是,后來發(fā)現(xiàn)C++在某些方面并不能很好的滿足設(shè)計(jì)者的需要,從而考慮自行設(shè)計(jì)一門新的語言,這種新的語言并不局限于擴(kuò)充語言機(jī)制本身,而是更注重語言所運(yùn)行的軟硬件環(huán)境。主要是可以使用其建立一個(gè)系統(tǒng),這個(gè)系統(tǒng)運(yùn)行于一個(gè)巨大的、分布的異構(gòu)網(wǎng)絡(luò)環(huán)境中,完成各種電子設(shè)備之間的通信與協(xié)同工作。基于這種思想而開發(fā)了一個(gè)名為Oak 的(即一種橡樹的名字)新語言。
Java語言簡介
Oak先是被用于家電控制中,可通過手持設(shè)備控制家電。在當(dāng)時(shí)并沒有引起人們的注意 ,直到1994年下半 年 ,Internet的迅猛發(fā)展 ,環(huán)球信息網(wǎng) WWW的快速增長 ,促進(jìn)了 Java語言研制的 進(jìn)展 使得它逐漸成為 Internet上受歡迎的開發(fā)與編程語言。用java編寫的Applet應(yīng)用小程序能夠嵌入到網(wǎng)頁中運(yùn)行,而實(shí)現(xiàn)聲音、動畫等功能。同時(shí),在一般的應(yīng)用程序設(shè)計(jì)方面也不遜色,完全可以用面向?qū)ο蟮募夹g(shù)與方法進(jìn)行開發(fā),符合最新的軟件開發(fā)規(guī)范的要求。由于oak已經(jīng)被注冊,所以,最終更名為java。
Java對軟件開發(fā)技術(shù)的影響
工業(yè)界不少人預(yù)言 :“Java語言的出現(xiàn) ,將會引起一場軟件革命 ”,這是因?yàn)?傳統(tǒng)的軟件往往都是與具體的實(shí)現(xiàn)環(huán)境有關(guān) ,換了一個(gè)環(huán)境就需要作一番改動 ,耗 時(shí)費(fèi)力 ,而 Java語言能在執(zhí)行碼(二進(jìn)制碼)上兼容 ,這樣以前所開發(fā)的軟件就 能運(yùn)行在不同的機(jī)器上 ,只要所用的機(jī)器能提供 Java語言解釋器即可。
Java對軟件開發(fā)技術(shù)的影響重要體現(xiàn)在以下四個(gè)方面:
1、軟件的需求分析 :可將用戶的需求進(jìn)行動態(tài)的、可視化描述 ,以提供設(shè)計(jì)者更加直觀的要求。用戶的各色各樣的需求都可以用 Java語言描述清楚。
2、軟件的開發(fā)方法 :由于 Java語言的面向目標(biāo)的特性 ,所以完全可以用 O-O 的技術(shù)與方法來開發(fā)。
3、Java語言的動畫效果。利用 WWW提供的巨大 動畫資源空間 ,可以共享全世界的動態(tài)畫面的資源。
4、軟件最終產(chǎn)品 :用 Java語言開發(fā)的軟件可以具有可視化、可聽化、可操 作化的效交互、動畫與動作 “,要它停就停 ,要它繼續(xù)就繼續(xù) ,而這是在電影與電視播放過程中難以做到的。
Java是一個(gè)廣泛使用的網(wǎng)絡(luò)編程語言 ,它是一種新的計(jì)算概念。首先 ,作為一種程序設(shè)計(jì)語言 ,它簡單、面向?qū)ο?、不依賴于機(jī)器的結(jié)構(gòu)、具有可移植性、安全性、并且提供了并發(fā)的機(jī)制、具有很高的性能。其 次 ,它最大限度地利用了網(wǎng)絡(luò) ,Java的小應(yīng)用程序(applet)可在網(wǎng)絡(luò)上傳輸而 不受 CPU和環(huán)境的限制。另外 ,Java還提供了豐富的類庫 ,使程序設(shè)計(jì)者可以很 方便地建立自己的系統(tǒng)。
Java的特點(diǎn): 簡單性
Java語言衍生自C++,是一種面向?qū)ο蟮恼Z言 ,它通過提供最基本的方法來完成指定的 任務(wù) ,只需理解一些基本的概念 ,就可以用它編寫出適合于各種情況的應(yīng)用程 序。Java略去了運(yùn)算符重載、多重繼承等模糊的概念 ,并且通過實(shí)現(xiàn)自動垃圾收集大大簡化了程序設(shè)計(jì)者的內(nèi)存管理工作。另外 ,Java也適合于在小型機(jī)上運(yùn)行 ,它的基本解釋器及類的支持只有 40KB左右 ,加上標(biāo)準(zhǔn)類庫和線程的支持也只有 215KB左右。庫和線程的支持也只有 215KB左右。
面向?qū)ο笮裕?/p>
Java語言的設(shè)計(jì)集中于對象及其接口 ,它提供了簡單的類機(jī)制以及動態(tài)的 接口模型。對象中封裝了它的狀態(tài)變量以及相應(yīng)的方法 ,實(shí)現(xiàn)了模塊化和信息隱藏;而類則提供了一
類對象的原型 ,并且通過繼承機(jī)制 ,子類可以使用父類 所提供的方法 ,實(shí)現(xiàn)了代碼的復(fù)用。
體系結(jié)構(gòu)中立:
Java解釋器生成與體系結(jié)構(gòu)無關(guān)的字節(jié)碼指令 ,只要安裝了 Java運(yùn)行時(shí)系統(tǒng) ,Java程序就可在任意的處理器上運(yùn)行,使得 Java程序可以方便地被移植到網(wǎng)絡(luò)上的不同機(jī)器。同時(shí) ,Java的類庫中也實(shí)現(xiàn)了與不同平臺的接口 ,使這些類庫可以移植。這樣大大降低了開發(fā)、維護(hù)和管理的工作。安全性 :
用于網(wǎng)絡(luò)、分布環(huán)境下的 Java必須要防止病毒的入侵。Java不支持指針, 一切對內(nèi)存的訪問都必須通過對象的實(shí)例變量來實(shí)現(xiàn) ,這樣就防止程序員使用 ”特洛伊 “木馬等欺騙手段訪問對象的私有成員 ,同時(shí)也避免了指針操作中容易 產(chǎn)生的錯(cuò)誤
支持網(wǎng)絡(luò)編程:
Java語言的特性使它可以最大限度地利用網(wǎng)絡(luò)。Applet是 Java的小應(yīng) 用程序 ,它是動態(tài)、安全、跨平臺的網(wǎng)絡(luò)應(yīng)用程序。Java Applet嵌入 HTML語 言 ,通過主頁發(fā)布到 Internet。網(wǎng)絡(luò)用戶訪問服務(wù)器的 Applet時(shí) ,這些Applet 從網(wǎng)絡(luò)上進(jìn)行傳輸 ,然后在支持 Java的瀏覽器中運(yùn)行。由于 Java語言的安全機(jī) 制 ,用戶一旦載入 Applet,就可以放心地來生成多媒體的用戶界面或完成復(fù)雜的計(jì)算而不必?fù)?dān)心病毒的入侵。分布性:
Java是面向網(wǎng)絡(luò)的語言。通過它提供的類庫可以處理 TCP/IP協(xié)議 ,用戶 可以通過 URL地址在網(wǎng)絡(luò)上很方便地訪問其它對象。豐富的類庫:
? 語言包提供的支持包括字符串處理、多線程處理、例外處理、數(shù)學(xué)函數(shù)處理等。? 實(shí)用程序包提供的支持包括哈希表、堆棧、可變數(shù)組、時(shí)間和日期等。
? 輸入輸出包用統(tǒng)一的 “流 ”模型來實(shí)現(xiàn)所有格式的 I/O,包括文件系統(tǒng)、網(wǎng)絡(luò)、輸入
? 低級網(wǎng)絡(luò)包用于實(shí)現(xiàn) Socket編程。
? 抽象圖形用戶接口包實(shí)現(xiàn)了不同平臺的計(jì)算機(jī)的圖形用戶接口部件
? 網(wǎng)絡(luò)包支持 Internet的 TCP/IP協(xié)議 ,提供了接口。面向?qū)ο蟪绦蛟O(shè)計(jì)——對象、類與實(shí)體
“對象”譯自英文的“object”,現(xiàn)實(shí)世界實(shí)際上是由object組成的,我們看到的一切都是object。程序設(shè)計(jì)語言為解決現(xiàn)實(shí)世界的問題而存在,因此,我們自然會想到,讓程序設(shè)計(jì)按照我們平??词澜绲姆绞竭\(yùn)作,這樣才最自然,這就是面向?qū)ο蟮某绦蛟O(shè)計(jì)的出發(fā)點(diǎn)。面向?qū)ο蟪绦蛟O(shè)計(jì),確切的說,對象是現(xiàn)實(shí)世界的某個(gè)具體的物理實(shí)體在計(jì)算機(jī)邏輯中的映射和體現(xiàn)。比如:每個(gè)人都是一個(gè)具體存在的實(shí)體,有高度、體重等很多屬性,也有走路、工作等很多行為。這樣的實(shí)體在程序設(shè)計(jì)中可以表達(dá)為計(jì)算機(jī)可以理解和操作的對象。
類:每個(gè)對象都是屬于某種類別的。也就是說類是同種對象的集合與抽象。屬于類的某個(gè)對象被稱為是類的一個(gè)實(shí)例。
對象的狀態(tài)與行為:對象的狀態(tài)也稱為靜態(tài)屬性。用計(jì)算機(jī)術(shù)語來說也就是變量。每個(gè)對象都有自己專有的變量。比如,具體的一個(gè)人,有身高、體重等。
對象的行為也稱為動態(tài)屬性,在計(jì)算機(jī)內(nèi)部用方法來表示。比如,人有走路、工作的行為。
對象的關(guān)系:
包含:當(dāng)對象A是對象B的屬性的時(shí)候,稱對象B包含對象A。比如電腦與主板
繼承:當(dāng)對象A是對象B的特例的時(shí)候,稱對象A繼承了對象B。比如,鯉魚是魚的一種特例。
關(guān)聯(lián):對象A的引用是對象B的屬性,A和B之間是關(guān)聯(lián)關(guān)系。Java和 C、C++之間的比較:
對于變量聲明、參數(shù)傳遞、操作符、流控制等 ,Java使用了和 C、C++ 相同的傳統(tǒng) ,使得熟悉 C、C++的程序員能很方便地進(jìn)行編程。同時(shí) ,Java為 實(shí)現(xiàn)其簡單、安全等特性 ,也摒棄了 C和 C++中許多不合理的內(nèi)容。
全局變量: Java程序中 ,不能在所有類之外定義全局變量 ,只能通過在一個(gè)類中定 義公用、靜態(tài)的變量來實(shí)現(xiàn)一個(gè)全局變量。例如 : Class GlobalVar{
public static global_var;}
在類 GlobalVar中定義變量 global_var為 public static,使得其它類 可以訪問和修改該變量。Java對全局變量進(jìn)行了更好的封裝。而在C和 C++中 ,依賴于不加封裝 的全局變量常常造成系統(tǒng)的崩潰。
Goto語句:Java不支持 C、C++中的 goto語句 ,而是通過例外處理語句 try, Catch, final等來代替 C、C++中用 goto來處理遇到錯(cuò)誤時(shí)跳轉(zhuǎn)的情況 ,使程序更可讀 且更結(jié)構(gòu)化。
指針:指針是 C、C++中最靈活 ,也是最容易產(chǎn)生錯(cuò)誤的數(shù)據(jù)類型。由指針?biāo)M(jìn)行的內(nèi)存地址操作常會造成不可預(yù)知的錯(cuò)誤,從而破壞安全性 ,造成系統(tǒng)的崩潰。而 Java對指針進(jìn)行完全的控制 ,程序員不能直接進(jìn)行任何指針操作。同時(shí) ,數(shù)組作為類在Java 中實(shí)現(xiàn) ,良好地解決了數(shù)組訪問越界這一C、C++中不作檢查的錯(cuò)誤。
內(nèi)存管理:在 C中 ,程序員通過庫函數(shù) malloc()和 free()來分配和釋放內(nèi)存 , C++ 中則通過運(yùn)算符 new和 delete來分配和釋放內(nèi)存。再次釋放已釋放的內(nèi)存塊或未被分配的內(nèi)存塊 ,會造成系統(tǒng)的崩潰;同樣 ,忘記釋放不再使用的內(nèi)存塊也會逐漸耗盡系統(tǒng)資源。而在 Java中 ,所有的數(shù)據(jù)結(jié)構(gòu)都是對象 ,通過運(yùn)算符new 為它們分配內(nèi)存堆。通過new得到對象的處理權(quán) ,Java對此自動地進(jìn)行管理并且進(jìn)行垃圾收集 ,有效防止了由于程序員的誤操作而導(dǎo)致的錯(cuò)誤 ,并且更好地利用了系統(tǒng)資源。
數(shù)據(jù)類型的支持:在 C、C++中 ,對于不同的平臺 ,編譯器對于簡單數(shù)據(jù)類型如 in t,float 等分別分配不同長度的字節(jié)數(shù) ,例如:int在 IBM PC中為 16位 ,在 VAX-11中為 32位 ,這導(dǎo)致了代碼的不可移植性 ,但在 Java中 ,對于這些數(shù)據(jù)類型總是分 配固定長度的位數(shù) ,如對 int型 ,它總占 32位 ,這就保證了 Java的平臺無關(guān)性。
類型轉(zhuǎn)換:在 C、C++中 ,可以通過指針進(jìn)行任意的類型轉(zhuǎn)換,而 Java中 ,運(yùn)行時(shí)系統(tǒng)對對象的處理要進(jìn)行類型相容性檢查 ,以防止不安全的 轉(zhuǎn)換。
頭文件:C、C++中用頭文件來聲明類的原型以及全局變量、庫函數(shù)等 ,在大的系 統(tǒng)中 ,維護(hù)這些頭文件是很困難的。而 Java不支持頭文件 ,類成員的類型和訪 問權(quán)限都封裝在一個(gè)類中 ,運(yùn)行時(shí)系統(tǒng)對訪問進(jìn)行控制 ,防止對私有成員的操作。同時(shí) ,Java中用 import語句來與其它類進(jìn)行通訊 ,以便使用它們的方法。
結(jié)構(gòu)和聯(lián)合:C、C++中的結(jié)構(gòu)和聯(lián)合中所有成員均為公有 ,這就帶來了安全性問題。Java中不包含結(jié)構(gòu)和聯(lián)合 ,所有的內(nèi)容都封裝在類中。
預(yù)處理:C、C++中用宏定義來實(shí)現(xiàn)的代碼給程序的可讀性帶來了困難。在 Java 中 ,不支持宏 ,它通過關(guān)鍵字 final來聲明一個(gè)常量 ,以實(shí)現(xiàn)宏定義中廣泛使 用的常量定義。
簡 單 的 Java程 序:
Application 與 Applet程序 java程序可以分為兩類:java application 和java applet。前者是完整的應(yīng)用程序,需要獨(dú)立的解釋器來解釋運(yùn)行;后者則是嵌在網(wǎng)頁中的非獨(dú)立程序,由瀏覽器所自帶的java解釋器來解釋運(yùn)行。
簡 單 的Application程序:
public class HelloWorldApp { //an application
public static void main(String args[ ]){
System.out.println(”Hello World!“);} }
簡 單 的 Applet程序: import java.awr.*;import java.applet.*;
public class HelloWorldApplet extends Applet { //an applet
public void paint(Graphics g){
g.drawString(”Hello World!“,20,20);} }
由 于 Applet中 沒 有 main()方 法 作 為 Java解 釋 器 的入 口 ,我 們 必 須 編 寫 HTML文 件 ,把 該 Applet嵌入 其 中 ,然 后 用 appletviewer來 運(yùn) 行 ,或 在 支 持 Java的 瀏 覽 器 上 運(yùn) 行。HTML文 件 如 下 :
第二篇:2008級程序設(shè)計(jì)語言(Java)教學(xué)大綱
《程序設(shè)計(jì)語言(Java)》教學(xué)大綱
課程名稱: 程序設(shè)計(jì)語言(Java)英文名稱:Programming Language(Java)課程編碼: 212013 學(xué) 分: 4
學(xué) 時(shí): 64(其中理論學(xué)時(shí): 32,實(shí)踐學(xué)時(shí): 32)適用專業(yè):非計(jì)算機(jī)專業(yè)理工類本科 先修課程: 《大學(xué)計(jì)算機(jī)基礎(chǔ)》
一、課程的性質(zhì)、目的與任務(wù) 課程性質(zhì):
該課程面向全校非計(jì)算機(jī)專業(yè)理工類本科生,是程序設(shè)計(jì)語言類必修的公共基礎(chǔ)課之一。該課程的前導(dǎo)課程是《大學(xué)計(jì)算機(jī)基礎(chǔ)》,側(cè)重于Java語言的基本語法和面向?qū)ο缶幊谭椒ǖ慕榻B。課程目的:
通過本課程的學(xué)習(xí),學(xué)生不僅應(yīng)掌握 Java語言的基本特點(diǎn)和編程方法,還應(yīng)掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思想、基本概念和基本方法,并能運(yùn)用所學(xué)的知識和技能對一般問題進(jìn)行分析和程序設(shè)計(jì),能解決本專業(yè)的一些實(shí)際問題。課程任務(wù):
本課程采用引導(dǎo)式、啟發(fā)式、實(shí)例講解和實(shí)作演練等教學(xué)方法來組織教學(xué),在注重Java語言基本概念和基本語法知識介紹的同時(shí),注重培養(yǎng)學(xué)生面向?qū)ο蟮某绦蛟O(shè)計(jì)能力和思維方式,加強(qiáng)學(xué)生創(chuàng)新能力的培養(yǎng),為進(jìn)一步使用Java進(jìn)行技術(shù)開發(fā)奠定堅(jiān)實(shí)基礎(chǔ)。
二、教學(xué)基本要求
通過本課程的學(xué)習(xí),學(xué)生應(yīng)達(dá)到下列基本要求:
1.掌握J(rèn)ava語言的基本語法、數(shù)據(jù)類型、運(yùn)算符和表達(dá)式、流程控制語句、數(shù)組、向量和字符串、Swing界面設(shè)計(jì)、Applet小應(yīng)用程序編制以及常見Java數(shù)據(jù)流的使用。
2.掌握對象和類的基本概念,學(xué)會使用Java進(jìn)行面向?qū)ο蟪绦蛟O(shè)計(jì)開發(fā)的基本技能。
3.理解Java語言的特點(diǎn)、抽象類和內(nèi)部類的概念、異常處理方法、控制組件外觀的方法、Applet的安全機(jī)制和生命周期。
4.了解Java包的工作機(jī)制、對象持續(xù)化的基本概念、常見Java類的用法以及API文檔的查閱方法。
三、教學(xué)條件
本課程教學(xué)在多媒體教室進(jìn)行,實(shí)踐教學(xué)要求在計(jì)算機(jī)機(jī)房進(jìn)行,要為每個(gè)學(xué)生提供一臺高性能計(jì)算機(jī),并安裝有JDK 6.0,UltraEdit,JCreator等開發(fā)工具。實(shí)踐教學(xué)完成后,要上交相應(yīng)部分的實(shí)驗(yàn)報(bào)告。
四、教學(xué)內(nèi)容與學(xué)時(shí)安排
本課程共分三篇十章,內(nèi)容涉及Java語言的基本概念和面向?qū)ο蟮木幊谭椒?。第一篇為Java編程基礎(chǔ)篇,包括第1,2,3章,主要介紹Java的基本語法、數(shù)據(jù)類型及其流程控制語句;第二篇為Java編程提高篇,包括第4,5,6章,主要介紹數(shù)組、向量和字符串、Java面向?qū)ο蟮木幊谭椒ㄒ约爱惓L幚?;第三篇為Java編程進(jìn)階篇,包括第7,8,9,10章,介紹Java圖形界面設(shè)計(jì)、Applet以及數(shù)據(jù)流方面的知識。第1章 概述 1.1 什么是Java語言
1.2 一個(gè)基本的Java應(yīng)用程序 1.3 程序的編譯和運(yùn)行 1.4 常見錯(cuò)誤
1.5 使用Java核心API文檔
第2章 標(biāo)識符和數(shù)據(jù)類型 2.1 Java的基本語法單位 2.2 Java編碼體例
2.3 Java的基本數(shù)據(jù)類型 2.4 復(fù)合數(shù)據(jù)類型
2.5 類和對象的初步介紹
第3章 表達(dá)式和流程控制語句 3.1 表達(dá)式 3.2 流控制
第4章 數(shù)組、向量和字符串 4.1 數(shù)組
4.2 Vector類 4.3 字符串類型
第5章 進(jìn)一步討論對象和類 5.1 抽象數(shù)據(jù)類型
5.2 對象的構(gòu)造和初始化 5.3 this引用 5.4 子類 5.5 方法重寫 5.6 Java包 5.7 類成員
5.8 關(guān)鍵字final 5.9 抽象類 5.10 接口 5.11 內(nèi)部類 5.12 過時(shí)信息
第6章 Java語言中的異常 6.1 異常 6.2 異常示例 6.3 異常處理 6.4 異常分類 6.5 拋出
(2學(xué)時(shí))
(4學(xué)時(shí))
(4學(xué)時(shí))
(4學(xué)時(shí))
(4學(xué)時(shí))
2學(xué)時(shí))
(6.6 創(chuàng)建自己的異常
第7章 Java的圖形用戶界面設(shè)計(jì)(4學(xué)時(shí))
7.1 AWT與Swing 7.2 容器 7.3 布局 7.4 事件處理
第8章 Swing組件(4學(xué)時(shí))
8.1 按鈕 8.2 標(biāo)簽 8.3 組合框 8.4 列表 8.5 文本組件 8.6 菜單組件
8.7 對話框、標(biāo)準(zhǔn)對話框與文件對話框 8.8 控制組件外觀
第9章 Java Applet(2學(xué)時(shí))
9.1 編寫Applet 9.2 Applet的方法和Applet的生命周期 9.3 Applet的運(yùn)行
9.4 在Applet中的多媒體處理 9.5 Applet的事件處理
9.6 Applet與普通應(yīng)用程序的結(jié)合
第10章 Java數(shù)據(jù)流(2學(xué)時(shí))
10.1 數(shù)據(jù)流的基本概念 10.2 基本字節(jié)數(shù)據(jù)流類 10.3 基本字符流 10.4 文件的處理
五、考核方式和成績記載
本課程結(jié)束后由計(jì)算中心統(tǒng)一安排無紙化上機(jī)考試,成績記載為: 總評成績(理論)=平時(shí)成績(40%)+無紙化上機(jī)考試成績(60%)
其中:平時(shí)成績=平時(shí)出勤和課堂提問(50%)+作業(yè)(50%)總評成績(實(shí)踐)=平時(shí)成績(60%)+綜合課題設(shè)計(jì)成績(40%)
其中:平時(shí)成績=上機(jī)出勤和表現(xiàn)(40%)+上機(jī)練習(xí)記錄(30%)+單元實(shí)驗(yàn)報(bào)告(30%)
六、教學(xué)參考書 [1] 辛運(yùn)幃等,《Java程序設(shè)計(jì)(第二版)》,清華大學(xué)出版社,2006年8月 [2] 辛運(yùn)幃等,《Java程序設(shè)計(jì)題解與上機(jī)指導(dǎo)(第二版)》,清華大學(xué)出版社,2006年11月
七、說明
執(zhí)筆人: 普運(yùn)偉 審定人: 王建華 教學(xué)基層組織主任: 秦衛(wèi)平
第三篇:Java面向?qū)ο蟪绦蛟O(shè)計(jì)語言課程設(shè)計(jì)指導(dǎo)書
山東建筑大學(xué)商學(xué)院電子商務(wù)專業(yè)
《Java面向?qū)ο蟪绦蛟O(shè)計(jì)語言》課程設(shè)計(jì)(實(shí)驗(yàn))指導(dǎo)書
一、對學(xué)生的基本要求:
1、理論聯(lián)系實(shí)際、嚴(yán)肅認(rèn)真、實(shí)事求是的科學(xué)態(tài)度和勇于探索的創(chuàng)新精神。
2、運(yùn)用所學(xué)基礎(chǔ)理論與專業(yè)知識分析和解決實(shí)際問題,培養(yǎng)獨(dú)立思考完成任務(wù)的能力。
3、運(yùn)用Java面向?qū)ο蟪绦蛟O(shè)計(jì)方法、標(biāo)準(zhǔn)與規(guī)范開發(fā)小型應(yīng)用軟件系統(tǒng)。
二、設(shè)計(jì)的要求及內(nèi)容及要求:
應(yīng)用Java面向?qū)ο蟪绦蛟O(shè)計(jì)語言開發(fā)小型應(yīng)用軟件系統(tǒng)??梢詮慕o定的選題中選擇一個(gè)課題或自擬課題(自擬課題需經(jīng)指導(dǎo)教師批準(zhǔn)),完成系統(tǒng)分析、設(shè)計(jì)和開發(fā)。
具體要求如下:
(1)針對你所選擇的系統(tǒng)進(jìn)行需求分析,寫出系統(tǒng)的功能要求,設(shè)計(jì)的應(yīng)用程序應(yīng)具有的功能要素。
(2)程序代碼應(yīng)符合教學(xué)中應(yīng)該具有的規(guī)范要求,類名、方法名,屬性名稱應(yīng)與設(shè)計(jì)中實(shí)際的應(yīng)用含義相符,程序中具有相應(yīng)的注釋。(3)程序的界面要合理、美觀。
(4)每人最終提交一個(gè)可行的應(yīng)用軟件程序和規(guī)范的課程設(shè)計(jì)說明書。說明書應(yīng)嚴(yán)格按照說明書的要求,格式清晰、規(guī)整。并提交所設(shè)計(jì)程序的電子文檔。
三、設(shè)計(jì)進(jìn)度: 1、17周周一~周二:選題,系統(tǒng)的需求分析。分析并規(guī)劃你所設(shè)計(jì)的系統(tǒng)應(yīng)達(dá)到的功能,滿足什么樣的要求。2、17周周二~周四:系統(tǒng)設(shè)計(jì)。分析要達(dá)到你所要求的功能需要編寫什么類,規(guī)劃類的層次結(jié)構(gòu),設(shè)定好類明、方法名、屬性名;規(guī)劃你所設(shè)計(jì)的系統(tǒng)應(yīng)具有什么樣的界面布局。查閱資料幫助自己規(guī)劃好你的系統(tǒng)。3、17周周五~18周周二:程序設(shè)計(jì)。根據(jù)自己所規(guī)劃的程序進(jìn)行具體代碼設(shè)計(jì),代碼設(shè)計(jì)要符合程序設(shè)計(jì)的規(guī)范要求,注意程序的編寫格式。4、18周周三:程序測試。對自己所規(guī)劃的程序進(jìn)行測試,看是否有異常及程序Bug出現(xiàn),并進(jìn)行調(diào)試修正程序代碼。5、18周周三:編寫課程設(shè)計(jì)說明書。按照本指導(dǎo)書要求格式編寫程序設(shè)計(jì)報(bào)告(見附件)。6、18周周四上午交所設(shè)計(jì)程序的電子文檔,和課程設(shè)計(jì)說明書的電子文檔。7、18周周四~周五:成績評定。等待指導(dǎo)老師提問答辯。
四、選題
根據(jù)自己的愛好從以下題目中選擇一個(gè)題目進(jìn)行設(shè)計(jì)。
1、設(shè)計(jì)題目:學(xué)籍管理系統(tǒng)
設(shè)計(jì)目的:設(shè)計(jì)一個(gè)學(xué)籍管理系統(tǒng),保存所有學(xué)生信息。
第1頁 設(shè)計(jì)要求:學(xué)籍管理系統(tǒng)一般包括學(xué)生的基本信息,如,學(xué)號、姓名、班級、籍貫、聯(lián)系電話、學(xué)生成績等;能夠添加、查找、刪除學(xué)生信息等功能;程序執(zhí)行時(shí)候,需要從文件中導(dǎo)入數(shù)據(jù),程序推出后再將數(shù)據(jù)保存到文件中。
2、設(shè)計(jì)題目:出版物管理
設(shè)計(jì)目的:對出版物書籍、CD或者磁帶進(jìn)行管理。
設(shè)計(jì)要求:使用圖形界面的方式,對書籍、CD或者磁帶的基本信息進(jìn)行管理。
書籍界面包括:書籍的名稱、書籍的價(jià)格、書籍的出版社、書籍的作者、書籍的ISBN、及書籍的出版日期等;可以通過選擇菜單來進(jìn)行書籍信息的添加、修改和刪除等,所有的書籍信息會顯示在一個(gè)列表組件中,當(dāng)某本書籍的信息改變時(shí),列表中會相應(yīng)的進(jìn)行改變。CD界面包括:CD的名稱、CD的價(jià)格、CD的出版社、CD的演唱者、CD的發(fā)行者、CD的ISRC等;可以通過選擇菜單進(jìn)行CD信息的添加、修改和刪除,所有CD信息會顯示在一個(gè)列表組件中,當(dāng)某張CD的信息改變時(shí),列表中會相應(yīng)的進(jìn)行改變。
磁帶界面包括:磁帶的名稱、磁帶的價(jià)格、磁帶的出版社、磁帶的演唱者、磁帶的ISRC等;可以通過選擇菜單進(jìn)行磁帶信息的添加、修改和刪除,所有磁帶信息會顯示在一個(gè)列表組件中,某張磁帶的信息改變時(shí),列表中信息會相應(yīng)的進(jìn)行改變。
3、設(shè)計(jì)題目:Java程序編輯器
設(shè)計(jì)目的:設(shè)計(jì)一個(gè)Java程序編輯器,能夠進(jìn)行簡單的文字處理。
設(shè)計(jì)要求:類似一個(gè)Windows系統(tǒng)的記事本,能夠?qū)崿F(xiàn)打開、保存文件;查找、替換字符串;定時(shí)自動更新文件,并創(chuàng)建備份文件;將Java的關(guān)鍵字以不同顏色或不同字體顯示。
4、設(shè)計(jì)題目:設(shè)置日期時(shí)間屬性
設(shè)計(jì)目的:設(shè)計(jì)類似Windows系統(tǒng)中“設(shè)置日期時(shí)間屬性”的窗口及功能,綜合運(yùn)用各種組件、日期類、日歷類、線程等內(nèi)容。
設(shè)計(jì)要求:設(shè)計(jì)類似Windows系統(tǒng)中“設(shè)置日期時(shí)間屬性”的窗口及功能,設(shè)計(jì)相似界面,實(shí)現(xiàn)日期和時(shí)間的多種運(yùn)算和顯示,保證運(yùn)算正確性。
5、設(shè)計(jì)題目:交通信號燈的線程設(shè)計(jì)
設(shè)計(jì)目的:使用多線程設(shè)計(jì),同步機(jī)制設(shè)計(jì)一個(gè)交通信號燈。
設(shè)計(jì)要求:設(shè)計(jì)線程;設(shè)計(jì)路口信號燈示意圖界面;進(jìn)一步將兩個(gè)方向的信號燈分成3種車道燈:左轉(zhuǎn)、直行和右轉(zhuǎn);根據(jù)車流量進(jìn)行時(shí)間的模糊控制。
6、設(shè)計(jì)題目:聊天程序
設(shè)計(jì)目的:圖形界面與Socket通信及輸入/輸出流的綜合運(yùn)用。
設(shè)計(jì)要求:設(shè)計(jì)一個(gè)圖形界面,以Socket通信機(jī)制實(shí)現(xiàn)類似QQ的網(wǎng)絡(luò)聊天程序,該聊天程序最少可以達(dá)到兩個(gè)人聊天,并可以保存聊天的內(nèi)容。
7、銀行貸款多種還款方式的計(jì)算
設(shè)計(jì)目的:圖形界面與算法設(shè)計(jì)。
設(shè)計(jì)要求:設(shè)計(jì)一個(gè)圖形界面,在界面上能夠?qū)崿F(xiàn)的實(shí)際貸款和還款的一般規(guī)則(參照教材P409)。
第2頁
8、日歷組件
設(shè)計(jì)目的:圖形界面與算法設(shè)計(jì)。
設(shè)計(jì)要求:自定義一個(gè)日歷組件:顯示當(dāng)月日歷、當(dāng)前日期、上/下日歷等,界面樣子參照教材P409。
9、地址薄管理器
設(shè)計(jì)目的:圖形界面與輸入/輸出流和文件操作。
設(shè)計(jì)要求:設(shè)計(jì)一個(gè)存儲朋友電子郵件地址及電話號碼的地址薄應(yīng)用程序,界面自行設(shè)計(jì)(也可參照教材P411)。
(1)設(shè)計(jì)一個(gè)人員類,成員變量包括類別、姓名、電話號碼和郵件地址等,成員方法包括插入、移動、刪除、更改類別等。所有人員信息保存在以對象為單位的記錄文件中,以對象流實(shí)現(xiàn)數(shù)據(jù)讀取和保存功能。
(2)設(shè)計(jì)圖形用戶界面,在此界面上可實(shí)現(xiàn)針對朋友電子郵件和電話號碼的各種操作(可參照教材P411)。
(3)添加主菜單和快捷菜單,實(shí)現(xiàn)插入、刪除、移動等功能,快捷菜單會根據(jù)當(dāng)前組件自動執(zhí)行不同對象的插入、刪除、移動等操作。
10、搜索文件
設(shè)計(jì)目的:圖形界面與輸入/輸出流和文件操作。
設(shè)計(jì)要求:參照Window的資源管理器,給特定搜索文件名的部分字符,在制定的范圍內(nèi)搜索文件,顯示搜索結(jié)果的文件名列表、文件路徑及文件屬性。
其他選題,需征求指導(dǎo)教師同意,由指導(dǎo)教師根據(jù)擬定的題目難度給予相應(yīng)的評分標(biāo)準(zhǔn)。
五、考核內(nèi)容及分值分配
1、課程設(shè)計(jì)說明書。(30分)1)正文:(手寫課程設(shè)計(jì)報(bào)告4頁以上)(20分)(1)、概述
包括項(xiàng)目背景、編寫目的、軟件定義、開發(fā)環(huán)境、所用的知識等內(nèi)容。
(2)、功能說明
問題陳述、需完成的功能。
(3)、程序類說明
定義的類、接口等的名稱,并將其在程序中起到的作用進(jìn)行簡要說明,并根據(jù)面向?qū)ο蟪绦蛟O(shè)計(jì)的原則畫出類的層次關(guān)系圖。(4)、軟件系統(tǒng)測試說明
對你所設(shè)計(jì)的軟件進(jìn)行使用測試,列舉該軟件出現(xiàn)的問題和不完善的地方。
(5)、用戶使用說明
將所設(shè)計(jì)的軟件能夠達(dá)到的功能進(jìn)行描述。2)結(jié)束語:(5分)
第3頁 寫出完成本課程設(shè)計(jì)的心得,有哪些收獲。軟件還需要哪些改進(jìn)。3)參考文獻(xiàn):按照要求格式寫出你所參考的文獻(xiàn)資料。(5分)
2、開發(fā)的應(yīng)用軟件系統(tǒng)(60分)1)程序代碼的格式(10分)
代碼格式是否規(guī)范,是否有相應(yīng)的注視,程序類名、方法名、屬性名是否具有可讀性。2)程序界面設(shè)計(jì)(10分)
界面設(shè)計(jì)布局是否合理美觀,操作是否簡單方便。3)程序功能(40分)
程序功能是否達(dá)到了你所選系統(tǒng)的要求。基本滿足可得24~28分;完全滿足可得28~32分;完全滿足并能夠進(jìn)行相應(yīng)的異常處理可得32~40分;如果在此基礎(chǔ)上還能進(jìn)行相應(yīng)創(chuàng)新可根據(jù)創(chuàng)新的程度進(jìn)行適當(dāng)加分。
3、答辯及課程設(shè)計(jì)說明書資料歸檔規(guī)范性(10分)
注:每個(gè)學(xué)生都要獨(dú)立完成一個(gè)題目,如發(fā)現(xiàn)雷同者,對所有雷同學(xué)生按照不及格處理。
附件:說明書(論文)格式(可以參照論文范例)2.說明書(或論文)結(jié)構(gòu)及要求
(1)封面(由商學(xué)院統(tǒng)一發(fā)課程設(shè)計(jì)封面紙)(2)任務(wù)書(由指導(dǎo)教師填寫)(3)目錄
以上內(nèi)容由指導(dǎo)教師統(tǒng)一下發(fā)。(4)正文:(4頁課程設(shè)計(jì)報(bào)告紙以上)1)、概述
2)、功能說明 3)、程序類說明
4)、軟件系統(tǒng)測試說明 5)、用戶使用說明(5)結(jié)束語
(6)參考文獻(xiàn)(資料)
參考文獻(xiàn)必須是學(xué)生在課程設(shè)計(jì)中真正閱讀過和運(yùn)用過的,文獻(xiàn)按照在正文中的出現(xiàn)順序排列。各類文獻(xiàn)的書寫格式如下: a.圖書類的參考文獻(xiàn)
序號 作者名·書名·(版次)·出版單位,出版年:引用部分起止頁碼。b.翻譯圖書類的參考文獻(xiàn)
序號 作者名·書名·譯者·(版次)出版單位,出版年:引用部分起止頁碼。c.期刊類的參考文獻(xiàn)
序號 作者名·文集名·期刊名·年,卷(期):引用部分起止頁碼。
第4頁
(7)附件
可以根據(jù)說明需要將設(shè)計(jì)界面及相關(guān)其他材料附在此處,也可以沒有。
第5頁
第四篇:程序設(shè)計(jì)語言
程序設(shè)計(jì)語言
一般分為機(jī)器語言、匯編語言和高級語言。
1、機(jī)器語言
機(jī)器語言是用二進(jìn)制數(shù)表示的、計(jì)算機(jī)唯一能理解和直接執(zhí)行的程序語言。機(jī)器語言不直觀,編寫難度大,易于出錯(cuò),調(diào)試、修改繁瑣,但執(zhí)行速度最快。機(jī)器語言是最低級的程序設(shè)計(jì)語言。
2、匯編語言
匯編語言是將機(jī)器語言“符號化”的程序設(shè)計(jì)語言。
匯編語言編寫的程序,機(jī)器不能直接識別,要由匯編程序?qū)⑵浞g成機(jī)器語言才能執(zhí)行。
特點(diǎn):比機(jī)器語言程序更易于編寫、檢查和修改,也保持了機(jī)器語言編程質(zhì)量高、運(yùn)行速度快、占用存儲空間少等優(yōu)點(diǎn)。但匯編語言的通用性和可移植性差。匯編語言也屬于低級語言。
3、高級語言
常用的高級語言有BASIC、FORTRAN、PASCAL、C、C++、JAVA等。
特點(diǎn):與匯編相比,①更接近自然語言,一般采用英語單詞表達(dá)語句,便于理解、記憶和掌握。②易于編寫、查找錯(cuò)誤和修改③通用性強(qiáng)。
第五篇:如何學(xué)習(xí)程序設(shè)計(jì)語言
如何學(xué)習(xí)程序設(shè)計(jì)語言
經(jīng)常有人會問,“怎樣才能學(xué)會某某語言?”、“我該怎么學(xué)好某某語言?”,其實(shí)在學(xué)習(xí)某種程序設(shè)計(jì)語言之前,你需要弄明白一個(gè)問題,編程的目的是什么?我們?yōu)槭裁匆幊??編程就是為了解決各種問題,通過一系列的指令來解決這些問題。那我們學(xué)習(xí)編程,到底需要學(xué)什么呢?因?yàn)榫幊痰哪康氖菫榱私鉀Q問題,顯而易見,我們學(xué)編程,就是要學(xué)會如何解決問題。高手和新手就是看你解決問題的能力。
我們應(yīng)該如何學(xué)習(xí)?舉個(gè)例子,有一天你想買個(gè)空調(diào)(我想學(xué)編程),于是就是市場上了解空調(diào)的情況,進(jìn)行比較,最終確定某個(gè)品牌的空調(diào)(對目前的編程語言作些了解,根據(jù)自身的情況,最終確定一門語言來學(xué)習(xí))??照{(diào)買來后,有專業(yè)的安裝工人給你安裝調(diào)試(學(xué)習(xí)前先配置好程序的調(diào)試運(yùn)行環(huán)境,讓你編寫的程序能在電腦上跑起來,通過網(wǎng)上的教程或者購買的書本來了解這方面的知識)。安裝工人走了之后,你想學(xué)會控制空調(diào),這時(shí)你就遇到問題了“我怎么才能學(xué)會控制它呢?”(我該如何學(xué)習(xí)編程呢?)首先,你會找來空調(diào)的說明書(程序語言的語法手冊,可以從網(wǎng)上查找或者買本書來看)和遙控器(電腦),邊看說明書,邊通過遙控器來控制空調(diào)(邊看資料邊在電腦上編寫程序解決某個(gè)問題),隨著操作的熟練你就不再看說明書了。當(dāng)說明書上的說明和你實(shí)際的操作對應(yīng)不起來時(shí),你會向廠家咨詢,問明原因(可以在某個(gè)技術(shù)社區(qū)或聊天工具上向熟手請教)??傊?,一句話,學(xué)習(xí)時(shí)邊看資料邊實(shí)踐(在電腦上編寫、運(yùn)行、調(diào)試你的程序)。
在寫代碼前,一定要先養(yǎng)成良好的習(xí)慣,先把握住程序的整體,然后再細(xì)分,一步一步去完善、去實(shí)現(xiàn)全部功能。無論做哪一步時(shí),你都要明白,你的程序在為你解決什么問題?不然,你的解決問題的能力無法提高,學(xué)習(xí)的目的性也不強(qiáng)。不是有句話,“書到用時(shí)方恨少”,就是在你實(shí)際操作時(shí),會遇到各種各樣問題,你通自己的探索來解決各種問題時(shí),是最有針對性的學(xué)習(xí),因?yàn)槟阌羞@個(gè)需求“要如何解決這個(gè)問題”,所以當(dāng)你滿足自己的這個(gè)需求時(shí),也是最有動力學(xué)習(xí)的時(shí)候了。學(xué)習(xí)編程,特別在程序出現(xiàn)問題,不按照自己的意愿去運(yùn)行時(shí),一定要有耐心,一行、一行的去閱讀程序,想辦法輸出它的運(yùn)行結(jié)果,看看是否符合自己的意愿,然后找出出現(xiàn)錯(cuò)誤的這一行代碼,最后針對這行代碼進(jìn)行分析、調(diào)試來解決這個(gè)BUG。
當(dāng)你完成一個(gè)學(xué)習(xí)任務(wù)后,其實(shí)你已經(jīng)進(jìn)入編程的大門了,以后只要按照這個(gè)思路繼續(xù)學(xué)習(xí),你就會掌握越來越多的知識和經(jīng)驗(yàn),解決問題的能力也會越來越強(qiáng)。
如何學(xué)習(xí)程序設(shè)計(jì)
有許多網(wǎng)友都曾迷惑地問我:“怎么樣才能學(xué)好程序設(shè)計(jì)?”,這不是一兩句話能說
清楚的,于是我就寫了這篇文章,給廣大愛好者一個(gè)能解惑的方法,無論你是什么樣的“鳥”相信都能在這篇文章里找到你想要的什么是程序設(shè)計(jì)
話就從一個(gè)著名的公式說起:程序設(shè)計(jì)=數(shù)據(jù)結(jié)構(gòu)+算法
每當(dāng)我寫下這個(gè)公式的時(shí)候,心中總有一種新的感悟,可是就這個(gè)程序界盡人皆知的公
式卻難倒了一大批想和Bill·Gates一爭高下的朋友,下面我為大家解剖這個(gè)公式:
“程序設(shè)計(jì)”說白了就是大家所謂編程,先不管這個(gè)詞中有什么深刻的內(nèi)涵,先看看等式
右面的這兩個(gè)名詞。
按照官方的定義:數(shù)據(jù)結(jié)構(gòu)即非數(shù)值計(jì)算的程序設(shè)計(jì)問題中的計(jì)算機(jī)的操作對象以及它
們之間的關(guān)系和操作;算法是對特定問題求解步驟的一種描述,是對指令的有序序列。官方的解釋就是經(jīng)典,可是我們看了卻更糊涂了。別急,聽我給大家解釋。
程序設(shè)計(jì)就像蓋房子,數(shù)據(jù)結(jié)構(gòu)就像磚、瓦,而算法就是設(shè)計(jì)圖紙。你若想蓋房子首先
必須有原料(數(shù)據(jù)結(jié)構(gòu)),但是這些原料不能自動地蓋起了你想要的房子;你必須按照設(shè)計(jì)圖紙(算法)上的說明一磚一瓦地去砌。這樣你才能擁有你想要的房子。程序設(shè)計(jì)也一樣,你使用的編譯工具中有各種功能語句或基本結(jié)構(gòu),它們不會自動排列成你要的程序代碼。你得按照程序規(guī)定的功能去編寫,而程序的功能是實(shí)現(xiàn)就是算法的具體體現(xiàn)。所以通俗地說:你必須按照特定的規(guī)則,把特定的功能語句和基本結(jié)構(gòu)按照特定的順序排列起來,形成一個(gè)有
特定功能的程序,這就是:程序設(shè)計(jì)=數(shù)據(jù)結(jié)構(gòu)+算法。數(shù)據(jù)結(jié)構(gòu)是程序設(shè)計(jì)這座大廈的基礎(chǔ),沒有基礎(chǔ),無論設(shè)計(jì)有多么高明,這座大廈不可能建造起來的。算法則是程序設(shè)計(jì)的思想,它的靈魂!沒有靈魂的程序不能叫程序,只是一堆雜亂無章的符號而已。在程序設(shè)計(jì)中,數(shù)據(jù)結(jié)構(gòu)就像物質(zhì),算法就是意識。這就像哲學(xué)上說的:意識是依賴與物質(zhì)而存在的,物質(zhì)是由于意識而發(fā)展。雙方是相互依存、缺一不可的!
數(shù)據(jù)結(jié)構(gòu)內(nèi)容不多僅僅有幾個(gè)系統(tǒng)自帶的基本結(jié)構(gòu)(像順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、函數(shù)過程)數(shù)據(jù)類型(整型、實(shí)型、布爾、字符等)和用戶定義的高級點(diǎn)的數(shù)據(jù)結(jié)構(gòu)(數(shù)組、集合、文件、指針(隊(duì)列、棧、樹、圖等)······)就這么多??墒撬惴▍s不同了,它是多中多樣的!它可以讓你讓數(shù)據(jù)以你想要的方式排列(當(dāng)然要符合語法和功能要求^_^)。再打
個(gè)比方,數(shù)據(jù)結(jié)構(gòu)是人體的各種組織、器官,算法則是人的思想。你可以用你的思想去支配你身體的各個(gè)可以運(yùn)動的器官隨意運(yùn)動。如果,你想去取一個(gè)蘋果,你可以走過去,也可以跑過去,只要你想,你甚至可以爬過去。但是無論如何,你你的器官還你的器官(沒有變),目的還是同一個(gè)目的(取蘋果),而方式卻是隨心所欲!這就是算法的靈活性,不固定性。因此可以這樣說:數(shù)據(jù)結(jié)構(gòu)是死的,而算法是活的!現(xiàn)在明白許多了吧?。牵?ON
怎樣學(xué)習(xí)程序設(shè)計(jì)
上面說了許多數(shù)據(jù)結(jié)構(gòu)的在程序設(shè)計(jì)中重要性,所以努力學(xué)習(xí)好數(shù)據(jù)結(jié)構(gòu)是學(xué)好程序設(shè)計(jì)的第一步,也是關(guān)鍵的一步。你初學(xué)起來一定會覺得難,枯燥(其實(shí)我當(dāng)時(shí)也是這么想的 ^_^),什么標(biāo)準(zhǔn)文件、標(biāo)準(zhǔn)類型、標(biāo)準(zhǔn)函數(shù)、標(biāo)準(zhǔn)過程搞的你煩不勝煩。于是,就有許多初學(xué)者就厭倦了,停滯不前了,退縮了。你若是想編好程序的話就想:難道就這么一點(diǎn)點(diǎn)小困難就難倒我了嗎?我還要挑戰(zhàn)Bill·Gates呢?我一定能行,相信自己,一定會闖過這一關(guān)的!這樣以來,你就具備了程序員最基本的素質(zhì)——毅力。這一點(diǎn)是程序員必備的,否則在后面開發(fā)程序的漫長時(shí)間里,你會熬不住的。而且只有這樣你才能靜下心來學(xué)習(xí)。這一端時(shí)間沒有什么捷徑,只有多看書、多練習(xí),把所有結(jié)構(gòu)和類型的用法都找掌握牢固。不懂就要問。最好呢,有一位老師指引,這樣比自己在這條路是摸黑前進(jìn)強(qiáng)多了,而且往往還事半功倍。切記!只要跨出了第一步,以后就容易多了,萬事開頭難嘛!一定要堅(jiān)持,當(dāng)你過了這一端時(shí)間以后,你就發(fā)現(xiàn)程序設(shè)計(jì)根本沒有你想象的那樣難。當(dāng)你把所有的東東都學(xué)會時(shí),程序設(shè)計(jì)的大門已經(jīng)向你敞開了一扇,而另一扇就是······
算法,這個(gè)是程序設(shè)計(jì)的重點(diǎn),也是難點(diǎn)。許多菜鳥和老鳥的區(qū)別主要在對算法掌握的熟練程度上面。有許多朋友曾這樣問我:“我數(shù)據(jù)結(jié)構(gòu)上面的都學(xué)會了,也知道該怎么樣用,可是我為什么還是在編程時(shí),不知道該怎樣用呢?其實(shí),這就是缺少算法思想的一個(gè)具體表現(xiàn)。并不是學(xué)好了數(shù)據(jù)結(jié)構(gòu)就會編程了。算法是靈活多變的,它不像數(shù)據(jù)結(jié)構(gòu)那樣有固定的形式。算法是不固定性就決定了它的特點(diǎn),你不可能把所有的算法都學(xué)會,因?yàn)樗菬o窮盡的。但是你要是能把自己學(xué)的有限的算法融會貫通了,那你就了不起了。就好象你只學(xué)會了1、2、3這三個(gè)數(shù),但是你可以組成12、23、32、123······。所以算法這條路既長有短,既難又易。
學(xué)習(xí)好算法的方法不少,在此詳細(xì)的給大家舉幾個(gè)例子。
首先,你要養(yǎng)成一個(gè)良好的程序設(shè)計(jì)風(fēng)格和習(xí)慣。這也分許多種。其中最重要的是養(yǎng)成自上向下逐步求精的程序設(shè)計(jì)思想和方法。怎樣才是自上向下逐步求精的程序設(shè)計(jì)呢。舉個(gè)例子。有這樣一個(gè)問題:已知三角形的兩邊及夾角,求第三邊及面積。
現(xiàn)在,當(dāng)你看到這個(gè)問題是,你不要立即下手去編寫,而是要思考一下怎樣才能求解(算法),然后把她寫下來以免忘記。于是就寫了:
一級算法:
1 輸入兩邊的長度a、b以及夾角A
2 計(jì)算第三邊c和面積s
3 輸出c以及s
當(dāng)你寫完之后,你若覺得第2步不太清晰,還不能寫出代碼,那就繼續(xù)求精。二級求精:
1、將α的角度轉(zhuǎn)換為弧度;
2、c=sqrt(a*a+b*b-2*a*b*cos(α));
3、s=1/2*(a*b*sin(α))
哈哈,這樣問題不就得到解決了嗎?接著就可以輕松的編代碼了。再仔細(xì)看看上面的步驟:先寫出一級算法,如果覺得由此還是得不到源代碼,或者是其中有一步還有很多步驟要寫,那么就繼續(xù)求精,直到你認(rèn)為可以很清晰的寫出代碼為止。但是求精可以因人而異,像上面的題目,若是一個(gè)編過很多程序的大蝦來說,可能不用什么求精,代碼就可以直接寫出來了;但要是一個(gè)菜鳥(像我一樣)就可能要寫到二級求精。
這樣說來,你可能認(rèn)為這個(gè)求精是不是太慢,抑或根本就是在浪費(fèi)時(shí)間。我大聲告訴你:根本不是!這可是眾多的編程先驅(qū)、編程達(dá)人們推薦的基本方法。你知道編程中,主要時(shí)間用在了哪里嗎?不是編寫代碼,而是用在了求解算法和調(diào)試程序上了!而算法的求精就是縮短這些時(shí)間的最好的方法。它可以使你不用再很費(fèi)力的苦思冥想到底該怎樣構(gòu)造算法,使這個(gè)過程更條理、更簡明;它也很可能使你不用再為了一個(gè)小小BUG而調(diào)試半天,因?yàn)椋o出的算法已經(jīng)趨于完美。其實(shí),列一個(gè)小提綱(算法)就可以解決很多的問題,生活中不也是如此嗎?!所以,第一,求精算法這個(gè)最重要的習(xí)慣一定要養(yǎng)成哦!
還有一個(gè)好的習(xí)慣就是要做到:程序源代碼的清晰度與可讀性一定要高。
這是為什么呢?在源代碼中,每行代碼前面的空格的有無與多少并不影響程序的運(yùn)行,但是它影響人的閱讀。你想,當(dāng)你看到一片代碼,格式雜亂無章,沒有什么主次內(nèi)外一定會頭痛不已,絕對是看了第一遍就不想再看第二遍了。而且當(dāng)你調(diào)試這樣的代碼時(shí),也會被一
個(gè)小錯(cuò)誤弄的找不到北了。如果格式很清晰的話,這樣的代碼就非常易讀,結(jié)構(gòu)很清晰,begin..end都看的清清楚楚。我想這樣的代碼閱讀和調(diào)試起來一定很順手的。
還有就是在有些重要的代碼塊后加入注釋,也可以提高程序的可讀性。不說別人,就說我就深有體會:以前代碼不加注釋,當(dāng)時(shí)對其結(jié)構(gòu)很清楚,可是過了幾個(gè)星期之后,再看代碼簡直就像看另外一個(gè)人寫的一樣,要費(fèi)不少工夫才能弄懂,代碼越多越如此。自己還很難理解自己的代碼,更不用說別人了。因此費(fèi)點(diǎn)力氣加上注釋還是值得的。
還有的人喜歡用 goto語句跳來跳去,雖然增加了編寫代碼的靈活性,可是卻嚴(yán)重破壞了程序的結(jié)構(gòu)化,容易造成程序運(yùn)行和大腦思維的邏輯混亂,很可能導(dǎo)致一些很不容易發(fā)現(xiàn)的錯(cuò)誤。而且所有的goto都可以用其他的語句來代替。所以在這里建議大家少用goto。能不用就不用。以上是說了要提高代碼的清晰度與可讀性。
上面用了不少字來介紹程序設(shè)計(jì)中良好習(xí)慣的作用與好處,這算是程序設(shè)計(jì)的一個(gè)基礎(chǔ),希望對大家能有所幫助。下面介紹其他促進(jìn)編程水平的方法。
其次,就是多加練習(xí)和多多與別人交流心得,研究和欣賞別人優(yōu)秀的程序代碼(上面說的清晰度與可讀性的重要的一點(diǎn)就在這里體現(xiàn)了)。無論干任何事情,只有經(jīng)常練習(xí)才能熟練的掌握與應(yīng)用。它不僅能幫你提高對算法的認(rèn)知程度,還可以使你更好的理解數(shù)據(jù)結(jié)構(gòu);而交流心得與欣賞別人的代碼則是要你學(xué)習(xí)別人優(yōu)秀的獨(dú)特的見解與邏輯思維,許多?老鳥?就是在研究優(yōu)秀代碼中慢慢成長起來的。但研究和欣賞并不是意味著讓你?全盤西化?;它是說既不要拘泥于自己一成不變的思考方式,也不要成為別人思想奔馳的高速路,而是讓你取長補(bǔ)短,取其精華,去其糟粕,這才是我要說的。另外,在編譯一個(gè)程序時(shí),要多想幾種不同的算法,反復(fù)比較,看看究竟哪個(gè)更適合這個(gè)程序。這樣,不僅有助于提高你程序的運(yùn)行效率,更重要的是有助于提高你對算法的認(rèn)識和思維的廣度。
看完上面這么多,你會發(fā)現(xiàn)程序設(shè)計(jì)的這半扇門似乎并不是想象的那么容易打開;但是如果你能耐住寂寞與枯燥的考驗(yàn),按部就班、循序漸進(jìn)的練習(xí),思考,不知不覺中你的水平已經(jīng)提高了很多。
除了上面說的求精算法和數(shù)據(jù)結(jié)構(gòu)外,數(shù)學(xué)方法和邏輯思想對你的程序設(shè)計(jì)也會有一定的影響(這也屬于算法)先說數(shù)學(xué)方法,它是指導(dǎo)你學(xué)習(xí)的一個(gè)重要的助手。比如你要實(shí)現(xiàn)一個(gè)看似很復(fù)雜的函數(shù),而且你編寫了一大堆代碼,什么結(jié)構(gòu)和類型都用上了,可是還是實(shí)現(xiàn)不了。這時(shí)候先別著急,也許在你做這個(gè)函數(shù)前就要靜下心來,仔細(xì)思考,看看有什么數(shù)學(xué)上學(xué)習(xí)的特別公式能夠?qū)崿F(xiàn)這個(gè)問題嗎?如果你真的靈感大發(fā),把它挖了出來,恭喜你!
(答對了?。┪蚁脒@個(gè)時(shí)候你一定會高興的手舞足蹈,這種感受,我想大家在做數(shù)學(xué)題OR其他難題時(shí)一定深有體會。
這樣說太空洞,不如舉個(gè)例子:將8個(gè)?車?放在8X8的國際象棋棋盤上,如果它們兩兩均不能互吃,那么稱8個(gè)?車?處于安全狀態(tài)。問總共有多少種不同安全狀態(tài)?對于這樣的題一般的解法是用?回溯法?,即先有順序的固定一個(gè)棋子,然后將剩下的逐行試探,如果可以則擺放下一個(gè),要是不行就把該棋子換一個(gè)位置,直到所有的方法都用(遍歷)一遍。這樣看來這個(gè)方法真的很麻煩,不因需要編寫大量代碼,而且還要用到?遞歸?(編程的一個(gè)重要的算法)。使程序的效率大大降低。但是我們可以想想有沒有更好的數(shù)學(xué)方法??隙ㄓ校∧憧丛诘谝恍兄?,棋子可以在8個(gè)空格內(nèi)隨意擺放而不會受到攻擊;而第二行,棋子則只有在7個(gè)空格內(nèi)再挑選一個(gè)了;第三行就只有6個(gè)……依次類推第8行就只剩下一個(gè)空格了。所以這個(gè)方法一共有8X7X6X5X4X3X2X1即8!種解法,這不就是數(shù)學(xué)中的排列與組合的問題嗎?若不進(jìn)一步思考,盲目地逐個(gè)枚舉方案,其笨拙是可想而知的了。所以在設(shè)計(jì)算法時(shí),一定要仔細(xì)思考有沒有更好的數(shù)學(xué)公式或思想與之相關(guān)聯(lián),這樣往往會收到意想不到的好效果。
說完數(shù)學(xué),再說哲學(xué)。
其實(shí),哲學(xué)是所有學(xué)科是總和。她當(dāng)然也包括程序設(shè)計(jì)這門新興的學(xué)科了。(不要以為它們之間沒有關(guān)系哦?。?/p>
我這里說的是哲學(xué)的一小部分,那就是邏輯學(xué)。一個(gè)人若沒有嚴(yán)格的邏輯思維,他/她的程序一定有不少蟲子(bug)。然而對于這些蟲子,他/她可能不知道;也很有可能知道了,但是就不知道哪里出錯(cuò)了。這就是因?yàn)樗?她沒有把問題出現(xiàn)的情況(包括出錯(cuò)的情況)考慮全面而造成的。雖然理論上所有的程序都有一定的漏洞(尤其是代碼越多的程序越是如此),但是我們可以盡我們的全力把問題考慮全面,使錯(cuò)誤發(fā)生的幾率降低到最小,以確保程序的穩(wěn)定性。咱們來看一個(gè)很有趣的反面例子:偶在很久以前編過一個(gè)小程序(老師布置的作業(yè)),其功能是輸入你的生日,然后再輸入某天的日期,最后計(jì)算出你到這一天一共活了多少天。我很快就完成了,用數(shù)據(jù)測試幾次還不錯(cuò),于是讓老師來檢查我的作業(yè)。他讓我輸入,我于是就輸入了1989 1 28,然后回車,再輸入1999 1 28,我太激動了把1999輸入成了1899,而且我竟然沒有發(fā)覺。于是偶自信的敲了回車。結(jié)果出來了,當(dāng)時(shí)大家都笑翻了,此后,我有一段時(shí)間再也不敢讓老師“欣賞”我作的題目…… 以上就是偶因?yàn)檫壿嫴粐?yán)密造成的笑話,大家可不要學(xué)我??!所以說,提高邏輯思維能力也是提高編程效率的很有效的方法。
世界上所有的學(xué)科都有聯(lián)系。當(dāng)數(shù)學(xué)與邏輯學(xué)擦出?愛情?的火花時(shí),程序設(shè)計(jì)就有了雛形。
其實(shí)還有其他的學(xué)科也會影響程序設(shè)計(jì),比如英語,地球人都知道,現(xiàn)在絕大多數(shù)程序源代碼是用英文編寫的,而且很多開發(fā)工具、編譯工具還有一些用來參考的小程序幾乎都是英文界面。學(xué)好英語對代碼的分析、對數(shù)據(jù)結(jié)構(gòu)的了解以及對開發(fā)程序或軟件的效率都有幫助。因此在學(xué)習(xí)程序設(shè)計(jì)這門課程時(shí),可不要丟了其他??!
學(xué)習(xí)編程心態(tài)要放低,雖然你可能夢想要打倒微軟帝國,可是你不要以為自己真的就有實(shí)力把Bill PK掉,一定要從最簡單的開始做起,不要眼高手低,荒于練習(xí)。否則你可能給他打工他都不要哦?。ū貍洌?/p>
一顆堅(jiān)定的信念。搞程序設(shè)計(jì)有時(shí)是很累人的(要不然大家都成軟件工程師了,BILL的飯碗不就砸了),在某一個(gè)關(guān)鍵點(diǎn)是你要付出超乎想象的汗水和不計(jì)其數(shù)的腦細(xì)胞。這就叫“衣帶漸寬終不悔,為伊消的人憔悴!”要保持一種吃苦耐勞的打不垮精神,革命才能成功啊!同志們。(必備)
其實(shí)總而言之呢,無論是新手還是大蝦,要的就是勤學(xué)苦練,只有這樣,你才能走上通向程序設(shè)計(jì)金殿的成功之路。
到了這里你會發(fā)現(xiàn),這就是程序設(shè)計(jì),就這么簡單、有趣,而有充滿的艱辛與苦澀。設(shè)計(jì)一個(gè)艱難的程序,就像母親分娩一樣,一定會有巨大的痛楚。但當(dāng)你為你早已調(diào)試了N^N次的代碼加上最后一筆時(shí),一個(gè)嶄新的生命就誕生了!Eureka!它帶著羞澀而好奇的神態(tài)向這個(gè)世界發(fā)出第一句“Hello,World!”的問候時(shí)。你那種感覺就像是上帝面對自己親手造出來的生命,你以往所有的不快都會煙消云散。你會發(fā)現(xiàn)程序設(shè)計(jì),這項(xiàng)偉大的工程,教予你的不僅僅是一種技術(shù),更是對生命的熱愛,對人生的執(zhí)著,對完美夢想的追求!
有人說,學(xué)習(xí)是無聊的,但有億萬蕓蕓學(xué)子不懈地投入其中。
有人說,科學(xué)是艱難的,但仍有大批科學(xué)家為之奮斗終生。
也有人說,編程是枯燥的,可是我要站起來最全世界說:”我愛她,就像愛我的生命!“