![第一講 Java概述與面向?qū)ο蠡A(chǔ)課件_第1頁](http://file4.renrendoc.com/view/81365df437faa477ef122c6872b8a6ae/81365df437faa477ef122c6872b8a6ae1.gif)
![第一講 Java概述與面向?qū)ο蠡A(chǔ)課件_第2頁](http://file4.renrendoc.com/view/81365df437faa477ef122c6872b8a6ae/81365df437faa477ef122c6872b8a6ae2.gif)
![第一講 Java概述與面向?qū)ο蠡A(chǔ)課件_第3頁](http://file4.renrendoc.com/view/81365df437faa477ef122c6872b8a6ae/81365df437faa477ef122c6872b8a6ae3.gif)
![第一講 Java概述與面向?qū)ο蠡A(chǔ)課件_第4頁](http://file4.renrendoc.com/view/81365df437faa477ef122c6872b8a6ae/81365df437faa477ef122c6872b8a6ae4.gif)
![第一講 Java概述與面向?qū)ο蠡A(chǔ)課件_第5頁](http://file4.renrendoc.com/view/81365df437faa477ef122c6872b8a6ae/81365df437faa477ef122c6872b8a6ae5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第一講 Java概述與面向?qū)ο蠡A(chǔ)2022/7/252內(nèi)容提要軟件與編程什么是JavaJava的歷史Java的特點Java相關(guān)的概念面向?qū)ο蟾拍頙ava與面向?qū)ο?. 軟件與編程2022/7/2541.1 軟件歷史1821年,英國數(shù)學(xué)家C. Babbage(1791-1871)設(shè)計了差分機,這是第一臺可自動進行數(shù)學(xué)變換的機器,因此他被稱為“計算之父”。此后,他又設(shè)計了能夠處理數(shù)學(xué)公式的分析機。然而,這兩種機器都沒有真正實現(xiàn)。Ada Lovelace(1815-1852)為 Babbage 的分析機設(shè)計了程序,被稱為“第一位程序員”。2022/7/255Grace Hopper于1943年參加美
2、國海軍,并參與了Mark 1的研制工作;1946年為UNIVAC 1開發(fā)了第一個高級語言編譯程序;1959年開發(fā)了第一個面向商業(yè)信息處理的語言COBOL的編譯程序;于1973年和1985年分別晉升為美國海軍上校與海軍少將。Hopper 是第一位發(fā)現(xiàn)并排除了程序錯誤(bugs)的人。此后,人們把發(fā)現(xiàn)和排除程序錯誤的過程稱為 debugging,把這樣的軟件工具稱為 debuger.2022/7/2561.2 軟件的社會地位計算無所不在,軟件無所不在軟件不僅僅是在計算機上運行的程序?qū)τ诳陀^世界的認識,和對問題求解的思維與模式. 它把現(xiàn)代科學(xué)研究和工程問題求解嵌入在各種類型的系統(tǒng)中,是現(xiàn)代產(chǎn)品和服務(wù)
3、的關(guān)鍵因素軟件的應(yīng)用領(lǐng)域商業(yè)、金融、交通、醫(yī)療、電信、軍事、工業(yè)生產(chǎn)過程、娛樂、辦公 系統(tǒng)軟件,實時軟件,商業(yè)軟件,工程和科學(xué)計算軟件,嵌入式軟件,個人計算機軟件,基于Web的軟件(網(wǎng)站),人工智能軟件 2022/7/2571.3 程序編寫過程2022/7/2581.4 程序執(zhí)行2. 什么是Java2022/7/25102.1 Java是什么由Sun Microsystems(James Gosling)開發(fā)是一種通用的編程語言基于C/C+針對Web/Internet應(yīng)用廣泛應(yīng)用Java powers more than 4.5 billion devices including:800 mi
4、llion PCs 1.5 billion mobile phones and other handheld devices (source: Ovum) 2.2 billion smart cards Set-top boxes, printers, Web cams, games, car navigation systems, lottery terminals, medical devices, parking payment stations, and more. 2022/7/25112022/7/25122022/7/25132.2 另外的角度看Java是一門編程語言: Java
5、是SUN公司開發(fā)的源于Internet的一種現(xiàn)代程序設(shè)計語言。多年來,SUN公司對Java產(chǎn)品不斷改進升級,使之緊跟時代步伐,滿足了日益復(fù)雜的軟件開發(fā)需求。 是一種體系架構(gòu)是一種思考方式是一個運行環(huán)境3. Java歷史2022/7/2515Java的起源Java是Sun公司1995年正式推出的新一代面向?qū)ο蟪绦蛟O(shè)計語言, 特別適合于Internet應(yīng)用程序開發(fā), 其平臺無關(guān)性直接威脅到Wintel 的壟斷地位。Java來自于1991年Sun公司的一個叫Green的項目, 其原先的目的是為家用消費電子產(chǎn)品開發(fā)一個分布式代碼系統(tǒng), 可以把E-mail發(fā)給電冰箱、 電視機等家用電器, 對它們進行控制
6、。開始, 準(zhǔn)備采用C+, 但C+太復(fù)雜, 安全性差, 最后基于C+開發(fā)了一種新的語言O(shè)ak(Java的前身), Oak是一種用于網(wǎng)絡(luò)的精巧而安全的語言。1994年下半年, Internet的快速發(fā)展, 促進了Java語言研制的進展, Green項目組成員用Java編制了HotJava 瀏覽器, 觸發(fā)了Java進軍Internet,使得它逐漸成為Internet上受歡迎的開發(fā)與編程語言,現(xiàn)已發(fā)展成為一種重要的Internet平臺。2022/7/25161991年 Sun公司的一個叫Green的項目開始啟動1992年 “Oak”編程語言誕生,綠色小組開發(fā)出Star Seven (*7), Duke
7、作為Java語言的吉祥物登上國際舞臺 1993年 綠色工程成為焦點,Mosaic v1.0版本發(fā)布 (歷史上第一個多媒體的網(wǎng)絡(luò)瀏覽器) 1994年 第一個支持移動對象和動態(tài)可執(zhí)行內(nèi)容的瀏覽器WebRunner發(fā)布 1995年 以James Gosling為首的編程小組在wicked. 網(wǎng)站上發(fā)布了Java技術(shù),Java語言的名字從Oak變?yōu)镴ava,Java 技術(shù)通過Sun world正式發(fā)布 1996年 第一次舉辦JavaOne 開發(fā)者大會 , JDK 1.0 軟件發(fā)布1997年 三周內(nèi)超過22萬的開發(fā)者下載了JDK 1.1 軟件,超過8,000名開發(fā)者參加了JavaOne
8、大會,Java Card 2.0平臺發(fā)布 1998年 JDK 1.1發(fā)布,其被下載次數(shù)超過2 百萬,VISA公司應(yīng)用Java Card技術(shù)推出了世界上首張智能卡,Java社區(qū)(JCP)成立 2022/7/25171999年 Java 2平臺源代碼公開,JavaOne大會參會人數(shù)增長到20,000人,J2EE beta軟件發(fā)布 2000年 全球有超過400個Java開發(fā)團隊, 在JavaOne大會上,Steve Jobs與Scottn McNealy一起宣布蘋果公司會全力支持Java技術(shù)2001年 首個國際性JavaOne會議在日本橫濱召開,超過百萬的開發(fā)者下載Java Platform Ent
9、erprise Edition (Java EE) SDKGoogle公司的PageRank查詢算法被授予專利 2002年 2EE SDK下載次數(shù)達2百萬,78%的決策者認為,J2EE技術(shù)是最有影響力的網(wǎng)絡(luò)構(gòu)建開發(fā)平臺 2003年 大約有5.5億個桌面系統(tǒng)應(yīng)用了Java技術(shù),有75%的專業(yè)開發(fā)者使用Java 編程語言,并將其作為主要的開發(fā)語言2004年 Java 2 Platform, Standard Edition 5 發(fā)布,利用Java技術(shù)開發(fā)的火星探測器成功登陸火星,Sun Java Studio Creator發(fā)布2005年 有大約450萬名開發(fā)者正在使用Java 技術(shù),全球有25億
10、臺設(shè)備使用了Java技術(shù),用于生態(tài)系統(tǒng)中的Java 技術(shù)約合1000億美金 展望Java EE 5.0 代號: Tiger J2SE 6.0: 代號:Mustang 野馬J2SE 7.0: 代號:Dolphin 海豚 2022/7/2518“Java之父” James Gosling 1991年開始從事“綠色計劃” 項目,隨后創(chuàng)造了Java。 Java 2 元勛Joshua Bloch 將Java“哺育”成長 , 主要貢獻:JDK 1.1 中的java.math、 JDK 1.4 中的assertions、Collections Framework、Tiger, 2004年7月離開Sun到Go
11、ogle公司。 Bill Joy,軟件行業(yè)的愛迪生 1954年出生,是兼通計算機軟硬件技術(shù)的天才,Sun的創(chuàng)始人之一,世界上最優(yōu)秀的程序員(Best Coder)Acott McNealySun十年來的掌舵者,Sun的前CEO、總裁兼董事長Doug Lea世界上對Java影響力最大的個人,因為在Java的兩次大變革中,他都起了舉足輕重的作用,服務(wù)于紐約州立大學(xué)Oswego分校計算機科學(xué)系Bruce EckelThinking in Java的作者,具有超人的表達能力和捕捉機會的能力4. Java的特點2022/7/25204.1 優(yōu)點簡單風(fēng)格類似于C+, 基本語法與C語言類似;摒棄了C+中容易
12、引發(fā)程序錯誤的地方, 如指針和內(nèi)存管理; 提供了豐富的類庫。面向?qū)ο竺嫦驅(qū)ο螅褐С朱o態(tài)和動態(tài)風(fēng)格的代碼繼承及重用,是完全面向?qū)ο蟮? 它不支持類似C語言那樣的面向過程 的程序設(shè)計技術(shù)。2022/7/2521解釋執(zhí)行Java編譯器產(chǎn)生字節(jié)碼,而不是機器代碼產(chǎn)生的字節(jié)碼是平臺無關(guān)的Java字節(jié)碼在執(zhí)行時被翻譯成機器可讀的指令 (Java Virtual Machine)解釋執(zhí)行:Java解釋器(運行系統(tǒng))能直接運行目標(biāo)代碼指令可移植一個應(yīng)用到處運行原始數(shù)據(jù)類型大小在各個機器上都是一樣的庫定義了可移植的接口平臺無關(guān):Java源程序被編譯成一種高層次的與機器無關(guān)的 byte-code格式語言, 被設(shè)計
13、在Java虛擬機上運行2022/7/25222022/7/2523可靠Java致力于檢查程序在編譯和運行時的錯誤類型檢查幫助檢查出許多開發(fā)早期出現(xiàn)的錯誤Java自已操縱內(nèi)存減少了內(nèi)存出錯的可能性Java還實現(xiàn)了真數(shù)組, 避免了覆蓋數(shù)據(jù)的可能安全安全:Java的安全性可從兩個方面得到保證。一方面, 在Java語言里, 象指針和釋放內(nèi)存等C+功能被刪除, 避免了非法內(nèi)存操作。 另一方面, 當(dāng)Java用來創(chuàng)建瀏覽器時, 語言功能和一些瀏覽器本身提供的功能結(jié)合起來, 使它更安全。2022/7/2524多線程多線程:Java提供的多線程功能使得在一個程序里可同時執(zhí)行多個小任務(wù)。多線程帶來的好處是可以有更
14、好的交互性能和實時控制性能。動態(tài)性動態(tài):Java的動態(tài)特性是其面向?qū)ο笤O(shè)計方法的拓展,它允許程序動態(tài)地裝入運行過程中所需要的類。2022/7/25254.2 缺點比編譯型語言,例如C來得慢1999年做的一個試驗,說明Java比C或者C+要慢3到4 倍title of the article: “Comparing Java vs. C/C+ Efficiency Issues to Interpersonal Issues” (Lutz Prechelt)adequate for all but the most time-intensive programs5. Java相關(guān)的概念2022/
15、7/2527與Java相關(guān)的幾個常見名詞Java Application ( Java應(yīng)用程序): 用Java語言編寫的通過獨立的Java解釋器來解釋運行的桌面應(yīng)用程序(類似于其它高級語言編制的應(yīng)用程序)。Java Applets (Java小程序):用Java語言編寫的、嵌入在HTML編寫的Web頁面中的非獨立程序,由Web瀏覽器內(nèi)部包含的Java解釋器來解釋運行,是動態(tài)、安全、跨平臺的網(wǎng)絡(luò)應(yīng)用程序。JSP (JavaServer Pages, Java 服務(wù)器頁): 是一種實現(xiàn)普通靜態(tài)HTML和動態(tài)HTML混合編碼的技術(shù),是在Sun公司倡導(dǎo)及多個公司參與下共同建立的一種動態(tài)網(wǎng)頁標(biāo)準(zhǔn),實現(xiàn)了
16、Web動態(tài)內(nèi)容與其顯示的分離,用于構(gòu)建動態(tài)Web網(wǎng)站,JSP文件運行于服務(wù)器端,2022/7/2528J2EE Java 2 Platform, Enterprise Edition (Java 2企業(yè)版)J2EE首先是一種構(gòu)架,它包羅了Java的多種先進的技術(shù),最合適使用MVC的方法來構(gòu)建系統(tǒng),其表現(xiàn)層使用JSP,控制層可以使用Servlet或Session Bean,用于實現(xiàn)業(yè)務(wù)邏輯,Entity Bean則對業(yè)務(wù)實體進行抽象。此外它還使用JAAS(Java驗證和授權(quán)API )實現(xiàn)安全機制,JNDI用于查詢資源,JDBC和JTA訪問數(shù)據(jù)庫和管理事務(wù);JMS實現(xiàn)企業(yè)的消息處理;JavaMai
17、l實現(xiàn)與企業(yè)外界的聯(lián)系。2022/7/2529J2SEJava 2 Platform, Standard Edition (Java 2標(biāo)準(zhǔn)版),是Java最核心的技術(shù)J2MEJava 2 Platform, Micro Edition (Java 2袖珍版), 是一個重要的用于無線方面的 Java 平臺,它從可移植的、以網(wǎng)絡(luò)為中心的 Java 虛擬機轉(zhuǎn)變而來。JVMJava Virtual Machine (Java虛擬機),它通過采用一種被稱之為Java虛擬機的虛擬微處理器的規(guī)范,用軟件在計算機芯片內(nèi)模擬出一個假芯片,然后開始運行程序,為Java程序提供統(tǒng)一的脫離軟、硬件平臺的運行環(huán)境。2
18、022/7/2530JDKJava Development Kit (Java開發(fā)工具包),由Sun公司免費發(fā)行的,JDK有多個版本,大體經(jīng)歷過1.02、1.1.x、1.2、1.3、1.4、1.5、1.6幾個系列JSDKJava Server Development Kit (Java服務(wù)器開發(fā)工具包),是JDK 的一個典型的擴展工具包。JDBCJava DataBase Connectivity(Java數(shù)據(jù)庫連接),是一種用于執(zhí)行SQL語句的Java API(應(yīng)用程序接口),可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,是由一組用Java語言編寫的類和接口組成。2022/7/2531AppletJav
19、a Applet 是用 Java 語言編寫的、包含在網(wǎng)頁里的“小 應(yīng)用程序”,通常被放在 Web 服務(wù)器上。當(dāng)有人上網(wǎng)瀏覽時,Applet 隨網(wǎng)頁一起 下載到客戶端的瀏覽器中,并借助瀏覽器中的 Java 虛擬機(JVM)運行工作。Servlet Servlet是用Java編寫的Server端程序,它與協(xié)議和平臺無關(guān)。Servlet運行于Javaenabled Web Server中。Java Servlet可以動態(tài)地擴展Server的能力,并采用請求響應(yīng)模式提供Web服務(wù)。 Servlet與Jsp之間的交互為開發(fā)Web服務(wù)提供了優(yōu)秀的解決方案。2022/7/2532Swing與 AWT(抽象窗
20、口工具包)是Java設(shè)計 GUI (圖形用戶界面)的基礎(chǔ) 。AWT設(shè)計有嚴(yán)重缺陷,不能滿足發(fā)展的需要Swing是在AWT基礎(chǔ)上發(fā)展起來的,為Java GUI編程提供了強大豐富的API和靈活的結(jié)構(gòu)設(shè)計,提供了替代AWT重量組件的輕量組件,Swing 中大部分是輕量級組件。Swing 幾乎無所不能,不但有各式各樣先進的組件,而且更為美觀易用。二者最好不要混用。2022/7/2533與Java相關(guān)的幾個常見名詞EJB(Enterprise JavaBeans)-J2EE核心組件,EJB并不是一個產(chǎn)品。它是Java服務(wù)器端服務(wù)框架的規(guī)范,軟件廠商根據(jù)它來實現(xiàn)EJB服務(wù)器。2022/7/2534Plat
21、form Evolution (Java平臺的進化)2022/7/2535Java著名產(chǎn)品Sun JDKJava的基石 ,Sun公司產(chǎn)品,1996年1月推出JDK1.1,目前是2004年9月推出的J2SE 5.0Eclipse 以構(gòu)架贏天下,2001年IBM投資成立了Eclipse聯(lián)盟,是目前最受歡迎的Java開發(fā)工具Junit/Ant讓Java自動化的絕代雙驕, Junit是單元測試的工具,Ant是編譯部署工具,是Java程序員的必備工具Websphere1999年IBM推出,開發(fā)Web 應(yīng)用程序的平臺WebLogic1998年BEA推出的以Java為基礎(chǔ)的應(yīng)用平臺服務(wù)器JBuilderJa
22、va開發(fā)工具的王者,是由Borland公司推出的Java 集成開發(fā)環(huán)境,半年推出一個新版本,目前為2005版Jdeveloper IDEOracle公司提供的Java開發(fā)工具6. 面向?qū)ο蟾拍?022/7/2537歷史回眸開發(fā)模式傳統(tǒng)方法學(xué)面向?qū)ο蠓椒▽W(xué)面向?qū)ο蠡靖拍顚ο蠼M成面向?qū)ο蠓治?設(shè)計/編程2022/7/25386.1 歷史回眸現(xiàn)在的計算機的數(shù)學(xué)理論基礎(chǔ)是由計算機的開山鼻祖,大名鼎鼎的圖靈于1937年提出的圖靈機模型。 隨后不到十年,電子計算機就誕生了(1945)。(埃尼亞克) 它當(dāng)時的主要任務(wù)之一就是用于導(dǎo)彈彈道軌跡的計算。當(dāng)時的軟件開發(fā)(如果可以稱之為軟件開發(fā)的話)與現(xiàn)在的大不相
23、同。為了算一道題,要有人事先把完成加減乘除等各類運算的部件像搭積木那樣搭起來,如果換一道題,則要把這些部件分解開來,根據(jù)新的要求重新搭建,效率極低(與現(xiàn)在比)。 2022/7/2539現(xiàn)代電子計算機的體系結(jié)構(gòu)及實際計算模型來自馮.諾依曼的思想。 1946年他和他的同事們發(fā)現(xiàn)了埃尼亞克的缺陷,發(fā)表了一份報告,提出了程序放入內(nèi)存,順序執(zhí)行的思想,這樣,當(dāng)算一道新題時就只需采取改變計算機中的程序的“軟”的方法。英國的科學(xué)家維爾克斯實現(xiàn)了馮.諾依曼的思想,領(lǐng)導(dǎo)研制了“艾克薩克” 。因此,現(xiàn)在的計算機通常被稱為馮.諾依曼計算機。 2022/7/2540早期程序員們使用機器語言來進行編程運算;隨著編譯技術(shù)
24、的出現(xiàn),人們設(shè)計了許多更高級別的語言;這些語言擺脫了機器語言繁瑣的細節(jié),更接近于人的自然語言,迅速流行開來。據(jù)統(tǒng)計,全世界的高級語言起碼有幾千種,但從可計算性的角度看,它們的計算能力都等價于圖靈機。 已經(jīng)證明,一個計算機語言,只要除了賦值語句之外,還包括順序語句,條件語句和循環(huán)語句,它的計算能力即相當(dāng)于圖靈機。 這里當(dāng)然要排除其他技術(shù)因素的影響,如程序長度,變量個數(shù),數(shù)據(jù)精度等。 2022/7/2541由于圖靈機的想法是把問題轉(zhuǎn)化為一步一步按規(guī)則執(zhí)行的機械求解過程,各種計算機語言也不過都是某種形式語言,因此軟件開發(fā)的過程實質(zhì)上就是程序員們對客觀世界問題域的形式化的過程。 程序員們先建立問題的模
25、型(形式化),再用計算機語言加以合適的表達,最后再輸入計算機里進行計算。 2022/7/2542最早的高級語言大約誕生于1945年,是德國人楚譯為他的Z-4計算機設(shè)計的Plan Calcul,比第一臺電子計算機還早幾個月;在電子計算機上實現(xiàn)的第一個高級語言是美國尤尼法克公司于1952年研制成功的Short Code;而真正得到推廣使用,至今仍在流行的第一個高級語言是美國的計算機科學(xué)家巴科斯設(shè)計,并于1956年首先在IBM公司的計算機上實現(xiàn)的FORTRAN語言。2022/7/2543早期的高級語言主要是應(yīng)用于科學(xué)和工程計算,其代表作有FORTRAN和ALGOL60。計算機進入商業(yè)和行政管理領(lǐng)域以
26、后,出現(xiàn)了COBOL和 RPG等便于商界使用的語言。這類語言和數(shù)據(jù)庫技術(shù),圖形界面技術(shù)(可視化編程),面向?qū)ο蟮乃枷爰癛AD(Rapid Application Development)的概念相結(jié)合,形成了一批更方便使用的所謂第四代語言(4GL),如Powerbuilder,Delphi,VB等。 2022/7/2544前一類應(yīng)用于科學(xué)和工程計算的大型語言相對來說更為基礎(chǔ),因而也更為靈活,應(yīng)用范圍更為廣泛。 在FORTRAN,BASIC(學(xué)習(xí)型)之后,自70年代以來,模塊特征更明顯,簡單易用,可靠性強的PASCAL異軍突起,在世界范圍內(nèi)廣泛流行。 但進入80年代以后,它的地位又逐漸為更實用的C
27、語言替代。 到現(xiàn)在,C語言的地位已相當(dāng)于一種“高級匯編語言”了。 2022/7/254580年代后期,面向?qū)ο蟮恼Z言開始浮出水面,C+借助使用C語言的龐大程序員隊伍,一舉建立了面向?qū)ο笳Z言的老大地位。從而OO的思想正式統(tǒng)治了整個軟件開發(fā)界。C+的流行甚至使得美國軍方從80年開始大力扶植的Ada語言還未及推廣便胎死腹中了。 2022/7/254690年代以后,計算機世界更是發(fā)生了天翻地覆的變化,原先的單機平臺讓位于WEB,“網(wǎng)絡(luò)就是計算機”,新的語言不僅要是OO的,Visual的,更要是基于WEB的。 Java語言借INTERNET的東風(fēng),橫空出世,一夜紅遍天下。上述這些變化,表面是不同的編程工
28、具的流行,但其背后反映的卻是一種更為深刻的認識論的改變,即你是用何種觀點來認識這個世界的? 2022/7/25476.2 開發(fā)模式(Paradigm)開發(fā)模式又稱為范型、范例、風(fēng)范或模式(Pattern)。開發(fā)模式定義了特定問題和應(yīng)用的開發(fā)過程中將遵循的步驟;確定將用于表示問題和解的那些成分的類型;利用這些成分表示與問題解決有關(guān)的抽象;直接得到問題的結(jié)構(gòu)。2022/7/2548開發(fā)模式的選擇影響到整個軟件開發(fā)生存期。就是說,它支配選擇:設(shè)計方法編碼語言測試和檢驗技術(shù)2022/7/25496.3 傳統(tǒng)方法學(xué)傳統(tǒng)方法學(xué):瀑布模型,結(jié)構(gòu)化分析/設(shè)計/編碼瀑布模型的缺點:僵化瀑布模型要求:生命周期各階
29、段間遵守嚴(yán)格的順序,實際情況是:軟件開發(fā)往往在反復(fù)實踐中完成瀑布模型要求:預(yù)先定義并“凍結(jié)”軟件需求,實際情況是:某些系統(tǒng)的需求的一個逐漸明確的過程,且預(yù)先定義的需求到軟件完成時可能已經(jīng)過時2022/7/2550 SA - SD - SP 技術(shù)的缺點:本質(zhì)上是功能分解,以實現(xiàn)功能的過程為中心,而用戶的需求變化主要是針對功能的。這就使基于過程的設(shè)計不易被理解;且功能變化往往引起結(jié)構(gòu)變化較大,穩(wěn)定性不好系統(tǒng)有明確的邊界定義,且系統(tǒng)結(jié)構(gòu)依賴于系統(tǒng)邊界的定義,這樣的系統(tǒng)不易擴充和修改數(shù)據(jù)與操作分開處理,可能造成軟構(gòu)件對具體應(yīng)用環(huán)境的依賴,可重用性(reusability)較差2022/7/25516.
30、4 面向?qū)ο蠓椒▽W(xué)的起源維特跟斯坦是本世紀(jì)乃至人類哲學(xué)史上最偉大的哲學(xué)家之一。 他生前只于1922年出版了一本著作邏輯哲學(xué)論(Tractatus Logico-Philosophicus)。 在該書中,他闡述了一種世界觀,或者說一種認識世界的觀點,這種觀點,在六七十年后的今天,終于由一種哲學(xué)思想沉淀到技術(shù)的層面上來,成為計算機業(yè)界的寵兒,這就是“OO”,Object-Oriented,面向?qū)ο蟆?2022/7/2552維特根斯坦在邏輯哲學(xué)論 一書中提出了如下思想:世界可以分解為事實 ( The world divides into facts.)事實是由原子事實 (atomic facts)組
31、成的。一個原子事實是多個對象(objects)的組合。對象是簡單的(基本的) The Object is simple。對象形成了世界的基礎(chǔ)。2022/7/2553杭 州北 京Post-officeMessageSend by method對象ObjectObject= 數(shù)據(jù)AttributeAttributes: location; employee; + 操作MethodMethods: send; sell; 注意:Object內(nèi)部的attributes不允許外部用戶直接改動,只有當(dāng)它提供了相應(yīng)的服務(wù)method時,用戶才能通過發(fā)送message來提請它執(zhí)行。我想把郵局搬到我家門口,多加
32、幾個郵遞員,24小時都開門對不起,本郵局不提供此類服務(wù)唉,那就先送束花吧 Post_office.Send (request, payment)2022/7/2554特點:盡可能模擬人類習(xí)慣的思維方式,即問題域與求解域在結(jié)構(gòu)上盡可能一致。與傳統(tǒng)方法相反,OOM以數(shù)據(jù)或信息為主線,把數(shù)據(jù)和處理結(jié)合構(gòu)成統(tǒng)一體 對象。這時程序不再是一系列工作在數(shù)據(jù)上的函數(shù)集合,而是相互協(xié)作又彼此獨立的對象的集合。6.5 面向?qū)ο蠓椒▽W(xué)的要素2022/7/2556(1) 對象:世界由對象構(gòu)成對象是面向?qū)ο箝_發(fā)模式的基本成份。每個對象可用它本身的一組屬性和它可以執(zhí)行的一組操作來定義。屬性一般只能通過執(zhí)行對象的操作來改變
33、。操作又稱為方法或服務(wù),它描述了對象執(zhí)行的功能,若通過消息傳遞,還可以為其它對象使用。2022/7/2557(2) 類:物以類聚類是一組具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作的對象的集合。類的定義包括一組數(shù)據(jù)屬性和在數(shù)據(jù)上的一組合法操作。類定義可以視為一個具有類似特性與共同行為的對象的模板,可用來產(chǎn)生對象。2022/7/2558在一個類中,每個對象都是類的實例 (Instance),它們都可使用類中提供的函數(shù)。對象的狀態(tài)則包含在它的實例變量,即實例的屬性中。2022/7/2559例: class Post_office private : loc_type location ; emp_type empl
34、oyee ; public : void send (req_type request, money_type payment); void sell (int goods, money_type payment) ; ; main ( ) Post_office My_PO ; req_type My_request ; money_type My_payment ; My_PO.Send ( My_request, My_payment) ; 2022/7/2560繼承(inheritance):類可分層,下層子類與上層父類有相同特征,稱為繼承繼承是使用已存在的定義做為基礎(chǔ)建立新定義的技術(shù)
35、。新類的定義可以是既存類所聲明的數(shù)據(jù)和新類所增加的聲明的組合。新類復(fù)用既存的定義,而不要求修改繼承類。既存類可當(dāng)做基類來引用,則新類相應(yīng)地可當(dāng)做派生類來引用。(3) 繼承:世界的相似性與多樣性2022/7/25612022/7/2562使用繼承設(shè)計一個新類,可以視為描述一個新的對象集,它是既存類所描述對象集的子集合。這個新的子集合可以認為是既存類的一個特殊化。Quadrilateral類是Polygon類的特殊化。Quadrilateral是限制為四條邊的多邊形。我們還可以進一步地把類Quadrilateral特殊化為Rectangle 。2022/7/2563類Quadrilateral的界
36、面可以等同于類Polygon的界面,而Rectangle類的界面又與Quadrilateral類的界面相同。新類的界面還可以被看做是既存類界面的一個擴充界面。例如,從一個既存的車輛類派生的四輪驅(qū)動車類可能不僅是車輛類子集合定義的特殊化,而且還可能在新類的界面中引入新的能力。2022/7/25642022/7/2565在類的繼承層次中,Quadrilateral的實際參數(shù)可以替換Polygon的形式參數(shù)。類Quadrilateral的界面與類Polygon的界面是相容的Quadrilateral的界面可響應(yīng)Polygon界面的所有消息。 2022/7/2566(4) 消息:合作之道消息(mess
37、age):對象間只能通過發(fā)送消息進行聯(lián)系,外界不能處理對象的內(nèi)部數(shù)據(jù),只能通過消息請求它進行處理(如果它提供相應(yīng)消息的話)。2022/7/2567消息是一個對象與另一個對象的通信單元,是要求某個對象執(zhí)行類中定義的某個操作的規(guī)格說明。發(fā)送給一個對象的消息定義了一個方法名和一個參數(shù)表(可能是空的),并指定某一個對象。一個對象接收的消息則調(diào)用消息中指定的方法,并將形式參數(shù)與參數(shù)表中相應(yīng)的值結(jié)合起來。2022/7/2568OOM = Object +Class +Inheritance +Communication with messages2022/7/2569傳統(tǒng)方法:面向過程設(shè)計,以計算為核心,
38、數(shù)據(jù)與操作分離,不易理解OOM:以object 為核心,強調(diào)對現(xiàn)實概念的模擬而不強調(diào)算法?!懊嫦?qū)ο蠓椒▽W(xué)的基本原則,是按照人們習(xí)慣的思維方式建立問題域的模型,開發(fā)出盡可能直觀、自然地表現(xiàn)求解方法的軟件系統(tǒng)”。Class:由特殊到一般的歸納(induction)Inheritance:由一般到特殊的演繹(deduction)(5) 傳統(tǒng)方法與OO的比較2022/7/2570傳統(tǒng)方法:結(jié)構(gòu)依賴于功能,不穩(wěn)定。OOM:以object模擬實體,需求變化不會引起結(jié)構(gòu)的整體變化,因為實體相對穩(wěn)定,故系統(tǒng)也相應(yīng)穩(wěn)定。傳統(tǒng)方法:通過建立標(biāo)準(zhǔn)函數(shù)庫來重用軟構(gòu)件。但標(biāo)準(zhǔn)函數(shù)缺少必要的“柔性”,難以適應(yīng)不同場合的
39、不同需要OOM:一個class所有的 instances 都可重用它的代碼;由 inheritance 派生出的新的 class 可重用其父類的代碼,并且可以修改、擴充而不影響其父類的使用。2022/7/2571傳統(tǒng)方法:可維護性是最令人頭痛的問題。OOM:從以下幾方面改善了可維護性 穩(wěn)定性好:軟件功能需求的變化不牽動全局,只需局部修改;Class 獨立性強:只要修改不涉及class的對外接口,則內(nèi)部修改完全不影響外部調(diào)用;Inheritance和多態(tài)性(polymorphism)使其很容易被修改和擴充;容易理解;容易測試、調(diào)試。有這一條就什么都好辦了!這一點還可商榷2022/7/2572OO
40、M并不是減少了開發(fā)時間,而是通過提高可重用性、可維護性,進行擴充和修改的容易程度等,從長遠角度改進了軟件的質(zhì)量。OOM與Prototyping結(jié)合使用效果好。6.6 對象概念2022/7/2574f1f2f3fifnfi(X)Sgi(X,S)S輸出輸出1、Object : = ID + Method + Attribute + Message2022/7/2575特點:以數(shù)據(jù)為中心,不設(shè)與數(shù)據(jù)無關(guān)的操作;Object主動處理而不 被動地等待被處理,外部只能通過message請求操作;具有黑盒性:外部操作時,無須知道該object內(nèi)部的數(shù)據(jù)結(jié)構(gòu)及算法;具有并行性:不同object各自獨立地處理自
41、身數(shù)據(jù),彼此間僅通過傳遞message完成通信;模塊獨立性好:內(nèi)聚強( )、耦合松( )2022/7/25762、Class:具有相同數(shù)據(jù)和相同操作的一組對象;3、Instance:某個class描述的具體對象;4、Message: = object_ID. method_ID (parameter(s);5、Method: object能做的操作,亦稱為service 、responsibility, 在 class 中須定義相應(yīng)的代碼;6、Attribute :object 的固有數(shù)據(jù); 7、Inheritance:子類自動共享父類的attributes 和methods ,而不必重復(fù)定義
42、。2022/7/2577Class 中國人中國人 Attributes中國人 Methods張山 (instance) Class 中國人 張山的 AttributesClass 上海人 (子類)上海人 Attributes 上海人 Methods Class 中國人李士 (instance) 中國人李士的 Attributes上海人李士的 Attributes Class 上海人例:2022/7/2578特點:若上海人的 methods中有與中國人的同名,則李士執(zhí)行該 method 時以上海人為準(zhǔn),不執(zhí)行中國人中定義的同名 method。傳遞性(transitivity):AB、BC AC,
43、 一個 class 繼承了上層全部 classes 的一切性質(zhì)。一個子類只 有 一 個父類稱為單 繼 承 (single inheritance), 一個子類可有多個父類稱為多重繼承(multiple inheritance). “低層性質(zhì)override高層性質(zhì)”“縣官不如現(xiàn)管”2022/7/2579注意:multiple inheritance 在定義中應(yīng)避免二義性(ambiguity),即二個父類中定義重名,但各具不同性質(zhì)。例:FemaleChineseScholarICardDeckGraphicalObjectGraphicalDeckMethod:Draw := take a card from a deckMethod:Draw := displaya graphical objectMethod:Draw := ?例:2022/7/25808 Polymorphism:不同層次的 classes 可共享一個method名,但按各自的方式來實現(xiàn)這種 method。修改與擴充可以很容易地通過派生子類來完成 Which formdo youneed,master?AladdinsGenie2022/7/2581double avg (const double a , int size)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 用人單位勞動勞務(wù)合同書(29篇)
- 2024文明禮儀學(xué)習(xí)心得(14篇)
- 蛋雞飼料加工智能化生產(chǎn)項目可行性研究報告寫作模板-備案審批
- 2025年世界知名品牌代理商合作協(xié)議
- 2025年購房意向策劃金協(xié)議范本版
- 2025年專利技術(shù)購買與轉(zhuǎn)讓合同范例
- 2025年硅藻泥項目申請報告模式
- 2025年信息技術(shù)咨詢服務(wù)收購協(xié)議
- 2025年鈉濾膜項目提案報告模板
- 2025年信用卡債務(wù)分期償還安排協(xié)議
- 運動按摩全套課件
- 除銹、油漆檢驗批質(zhì)量驗收記錄樣表
- pp顧問的常見面試問題
- 法理學(xué)原理與案例完整版教學(xué)課件全套ppt教程
- 2021年蘇州市職業(yè)大學(xué)職業(yè)適應(yīng)性測試試題及答案解析
- 軟體家具、沙發(fā)質(zhì)量檢驗及工藝
- 電鍍廢水中各種重金屬廢水處理反應(yīng)原理及控制條件
- Q∕GDW 12118.1-2021 人工智能平臺架構(gòu)及技術(shù)要求 第1部分:總體架構(gòu)與技術(shù)要求
- 數(shù)據(jù)結(jié)構(gòu)英文教學(xué)課件:chapter3 Linked Lists
- 中建一局醫(yī)院直線加速器室專項施工方案
- 會計英語專業(yè)詞匯全
評論
0/150
提交評論