《Java軟件項目(BS架構(gòu))開發(fā)》7JavaBean與利息利率的實現(xiàn)課件_第1頁
《Java軟件項目(BS架構(gòu))開發(fā)》7JavaBean與利息利率的實現(xiàn)課件_第2頁
《Java軟件項目(BS架構(gòu))開發(fā)》7JavaBean與利息利率的實現(xiàn)課件_第3頁
《Java軟件項目(BS架構(gòu))開發(fā)》7JavaBean與利息利率的實現(xiàn)課件_第4頁
《Java軟件項目(BS架構(gòu))開發(fā)》7JavaBean與利息利率的實現(xiàn)課件_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、第7章 JavaBean與利息利率的實現(xiàn)Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第1頁,共69頁。學(xué)習(xí)目標(biāo)了解JavaBean的技術(shù)特點 可視化JavaBean 掌握 如何在JSP中使用非可視化JavaBean Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第2頁,共69頁。JavaBeans與JavaBean JavaBeans是描述Java的軟件組件模型 JavaBean是遵循某種嚴(yán)格協(xié)議的Java類,見案例7-1 以前JavaBean應(yīng)用于可視化的領(lǐng)域,現(xiàn)在更多的應(yīng)用在非可視化領(lǐng)域 ,如服務(wù)器端編程Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第3頁,共69頁。案例7-1:VisualBean

2、Ex.java package sunw.demo.VisualBeanEx;import java.awt.*;import java.io.Serializable;public class VisualBeanEx extends Canvas implements Serializableprivate Color color=Color.green;public VisualBeanEx() setSize(60,40);setBackground(Color.red);Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第4頁,共69頁。public Color getColor() ret

3、urn color;public void setColor(Color newColor) color=newColor;repaint();public void paint(Graphics g)g.setColor(color);g.fillRect(20,5,20,30);Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第5頁,共69頁。可視化的JavaBean JavaBean的最初應(yīng)用是可視化的領(lǐng)域 Jbuilder的很多控件都是JavaBean BDK提供了可視化的工具創(chuàng)建并測試Bean Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第6頁,共69頁。BDK 包括 測試容器BeanBox

4、 示例Bean以及它們的源代碼 BeanBox就像一個可視化的開發(fā)環(huán)境,可以在其中將ToolBox中的Bean,組裝成一個界面,并查看效果 Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第7頁,共69頁。創(chuàng)建一個簡單的可視化JavaBean 創(chuàng)建并編譯Java源文件 創(chuàng)建清單文件 可視化的JavaBean以JAR文件形式打包和發(fā)布 打包Bean相關(guān)的文件為JAR文件 啟動BDK 測試JavaBean Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第8頁,共69頁。非可視化的JavaBean JSP與JavaBean的結(jié)合 從JSP程序抽取常用的代碼,如訪問數(shù)據(jù)庫的代碼,放在JavaBean中,在需要時

5、調(diào)用 Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第9頁,共69頁。 JSP與JavaBean的結(jié)合方法 使用jsp:useBean 在JSP中添加JavaBean 使用jsp:setProperty設(shè)置JavaBean屬性的值 使用jsp:getProperty動作讀取JavaBean屬性的值 案例7-2:說明如何在JSP中通過動作標(biāo)記使用JavaBean 及如何在Tomcat上部署Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第10頁,共69頁。案例7-2的相關(guān)文件的建立按照7.1.2的規(guī)定定義SimpleBean編譯并測試SimpleBean.java建立使用SimpleBean的JSP文件t

6、estSimpleBean.jsp,關(guān)鍵代碼:調(diào)用setProperty前的值調(diào)用setProperty后的值Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第11頁,共69頁。案例7-2的部署如果部署到應(yīng)用程序test2中,則:如果SimpleBean的包名是ch7.bean,則在TOMCAT_HOMEwebappstest2WEB-INFclasses 目錄下建一個子目錄ch7,在ch7下建子目錄bean將SimpleBean.class復(fù)制到TOMCAT_HOMEwebappstest2ch7bean目錄下將使用SimpleBean的testSimpleBean.jsp 復(fù)制到TOMCAT_H

7、OMEwebappstest2或其某子目錄下,如TOMCAT_HOMEwebappstest2ch7useBean目錄下 Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第12頁,共69頁。案例7-2的執(zhí)行部署后重新啟動Tomcat打開IE瀏覽器,在地址欄中輸入:http:/localhost:8080/test2/ch7/useBean/testSimpleBean.jsp Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第13頁,共69頁。像普通類一樣使用JavaBean案例7-3:通過使用命令標(biāo)記像普通類一樣使用案例7-2中定義的SimpleBean動作標(biāo)記使用JavaBean的優(yōu)勢減少JSP程序中

8、的應(yīng)用邏輯 可以根據(jù)需要使用Scope屬性設(shè)定該對象的生命期Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第14頁,共69頁。JavaBean 的生命期標(biāo)記jsp:useBean 的scope屬性設(shè)置JavaBean的生命期page表示這個Bean對象在使用JavaBean的網(wǎng)頁范圍內(nèi)有效,默認(rèn)值request表示在請求過程范圍內(nèi)有效 session表示在一個會話期間內(nèi)有效 application表示在整個應(yīng)用程序期間有效 Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第15頁,共69頁。案例7-4: 使用session JavaBean記錄用戶最近訪問的頁面 可以使用session JavaBean

9、記錄用戶在一個會話內(nèi)所做的操作 使用session JavaBean修改第6章中的案例 ,記錄用戶最近訪問的頁面 定義一個名為ListBean 的JavaBean 在3個JSP文件中使用標(biāo)記,都添加一個生命期為session的同名的ListBean對象,使得3個JSP文件只創(chuàng)建一個對象,然后通過調(diào)用ListBean的addLists()方法將當(dāng)前頁面添加到這個對象的lists屬性中代碼緊湊且結(jié)構(gòu)清晰 Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第16頁,共69頁。案例7-5 :使用application JavaBean跟蹤登錄的用戶 可以使用application JavaBean記錄應(yīng)用程序

10、不間斷運行期間所發(fā)生的事情使用案例7-4定義的ListBean跟蹤最近訪問網(wǎng)頁的用戶 traceUser.jsp在用戶登錄后向用戶顯示最近在他之前訪問本網(wǎng)頁的用戶使用標(biāo)記添加一個生命期為application的ListBean對象調(diào)用ListBean的addLists()方法將用戶名添加到lists屬性中Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第17頁,共69頁。為JavaBean的屬性賦值 將一個變量(param)的值賦給某屬性 如果所有屬性名與對應(yīng)的變量名相同 案例7-6:設(shè)置表單變量名與JavaBean的屬性名相同,簡化多個屬性的賦值 Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第18頁

11、,共69頁。定義一個名為student的JavaBean,有屬性name,no和credit用HTML實現(xiàn)一個學(xué)生信息錄入界面,表單定義如下: 姓名: 學(xué)號: 獲得學(xué)分: 在JSP中創(chuàng)建一個名位myBean的JavaBean,然后使用如下語句將錄入的學(xué)生信息賦給myBean,并顯示學(xué)生信息 Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第19頁,共69頁。第二講 利率查詢與利息計算的實現(xiàn) 用HTML、JavaScript、JSP和JDBC實現(xiàn)Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第20頁,共69頁。學(xué)習(xí)目標(biāo)學(xué)習(xí)如何綜合使用HTML,javaScript,JavaBean,JDBC實現(xiàn)在線儲蓄應(yīng)

12、用程序的利率查詢和利息計算部分Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第21頁,共69頁。主要內(nèi)容利息計算與利率查詢的需求及界面實現(xiàn)相關(guān)技術(shù):客戶端:HTML+JavaScript服務(wù)器端:JSP+JavaBean+JDBC詳細(xì)設(shè)計程序文件組織數(shù)據(jù)庫準(zhǔn)備具體實現(xiàn)Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第22頁,共69頁。需求為所有登錄本網(wǎng)站的用戶提供查詢指定存款類型的年利率計算指定本金的存款類型到期后可以獲得的利息前置條件各種存期的年利息數(shù)據(jù)已經(jīng)保存到數(shù)據(jù)庫中Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第23頁,共69頁。場景 nancy是某公司主管,她有一筆(10萬元)暫時(2年內(nèi))不用的

13、資金(人民幣)。她想知道存放到銀行2年到期后會獲得多少利息,也想順便查詢一下其他存期的年利率。 http:/localhost:8080/bankApp/Home_page.htmlJava軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第24頁,共69頁。實現(xiàn)相關(guān)技術(shù)客戶端需要提供錄入界面并且在客戶端檢查用戶錄入的合法性:HTML+JavaScript服務(wù)器端需要查詢數(shù)據(jù)庫,并返回給用戶計算或查詢結(jié)果JSP+JavaBean(封裝JDBC,就是將訪問數(shù)據(jù)庫的代碼用一個類來實現(xiàn)),這種封裝有什么好處?以上技術(shù)都已經(jīng)在前面相應(yīng)章節(jié)學(xué)過,給大家2分鐘回憶一下這些內(nèi)容,然后考慮一下如果讓你實現(xiàn)以上內(nèi)容,你會用幾個

14、文件?Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第25頁,共69頁。利息計算頁面(圖2.7)Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第26頁,共69頁。用戶輸入不合法時的提示頁面Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第27頁,共69頁。利息計算結(jié)果頁面Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第28頁,共69頁。利率查詢界面 Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第29頁,共69頁。利率查詢錄入不合法的提示信息Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第30頁,共69頁。利率查詢結(jié)果頁面 Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第31頁,共69頁。利息計算及利率查詢的詳細(xì)設(shè)計利率查

15、詢 將各幣種及存期的利率值保存到數(shù)據(jù)庫中提供界面供用戶輸入幣種及存期通過查詢數(shù)據(jù)庫獲得利率利息計算將各幣種及存期的利率值保存到數(shù)據(jù)庫中提供界面供用戶輸入幣種、存期及本金通過本金與查詢數(shù)據(jù)庫獲得的利率計算到期利息Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第32頁,共69頁。程序文件組織客戶端相關(guān)的(共6個):主界面Interest.html:一個左右分隔窗口的幀組FRAMESET,左邊窗口顯示導(dǎo)航鏈接頁面Interest_menu.html,右邊窗口顯示利息計算錄入Interest_cal.html或利率查詢錄入Interest_query.html界面。檢查用戶輸入合法性需要調(diào)用的javaSc

16、ript函數(shù)文件check.js圖片文件interest.jpgJava軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第33頁,共69頁。程序文件組織(續(xù))服務(wù)器端相關(guān),共4個Interest_cal.jsp,用戶在利率計算錄入界面單擊“計算”按鈕將轉(zhuǎn)向的程序,用來完成從數(shù)據(jù)庫中讀出對應(yīng)利息并計算本金到期后可獲得的利息并顯示結(jié)果Interest_query.jsp,用戶在利率查詢錄入界面單擊“查詢”按鈕將轉(zhuǎn)向的程序,用來完成從數(shù)據(jù)庫中讀出對應(yīng)利息并顯示查詢結(jié)果訪問數(shù)據(jù)庫的javaBean文件Conn.java,用來封裝對數(shù)據(jù)庫的操作,如建立數(shù)據(jù)庫連接,創(chuàng)建Sql語句對象并執(zhí)行相關(guān)SQL語句等方法。圖片文件

17、interest.jpg,與客戶端相同Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第34頁,共69頁。還有一個不能忽略的問題 前面做需求分析時,已經(jīng)提到一個條件:各種存期的年利息數(shù)據(jù)已經(jīng)保存到數(shù)據(jù)庫中,問題是:為了實現(xiàn)這部分功能,我們要做什么樣的數(shù)據(jù)準(zhǔn)備?要不要在數(shù)據(jù)庫中創(chuàng)建一個表?要不要在表中插入一些數(shù)據(jù)進行測試?回答是:都要Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第35頁,共69頁。數(shù)據(jù)庫準(zhǔn)備保存不同存期利息的表Interest創(chuàng)建表Interest在表Interest中插入一些存期的利息記錄作為測試數(shù)據(jù) Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第36頁,共69頁。利息計算錄入界面相關(guān)文

18、件Interest_cal.html重要代碼: Checkpass函數(shù)對輸入的合法性進行檢查 check.js 將判斷一個字符串是否為整數(shù)字符串、實數(shù)字符串和一個字符是否為數(shù)字的函數(shù)分離出來 Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第37頁,共69頁。訪問數(shù)據(jù)庫的JavaBean ConnDB.java 在無參的構(gòu)造中加載JDBC驅(qū)動程序 定義方法executeQuery() ,用來建立數(shù)據(jù)庫連接并處理對數(shù)據(jù)庫的查詢 定義方法executeUpdate(),用來處理對數(shù)據(jù)庫的插入、刪除和修改等操作 定義方法prepareStatement()方法,封裝Connection的prepareSt

19、atement()方法以產(chǎn)生一個PreparedStatement對象 Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第38頁,共69頁。在TOMCAT_HOMEwebappsbankappWEB-INFclasses下建立一個子目錄bean 將字節(jié)碼文件ConnDB.class復(fù)制到TOMCAT_HOMEwebapps bankapp WEB-INF classesbean目錄下。注意ConnDB.java的包名bean與目錄的對應(yīng)關(guān)系 重新啟動Tomcat 將ConnDB部署到TomcatJava軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第39頁,共69頁。計算利息并返回結(jié)果頁面的Interest_c

20、al.jsp 關(guān)鍵代碼: 第1行語句設(shè)置頁面編碼方式 ,處理中文顯示亂碼問題 第2行語句引入java.sql包 Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第40頁,共69頁。第3行語句使用動作標(biāo)記在當(dāng)前JSP中創(chuàng)建一個ConnDB的對象db 第1317行語句定義了變量rate、amt、interest、per和cur,用來存放當(dāng)前利率、本金、利息、存期和幣種,以便在JSP其他部分可使用這些變量。 Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第41頁,共69頁。第19行語句設(shè)置請求參數(shù)的編碼方式,以便能夠正確地訪問數(shù)據(jù)庫 request.setCharacterEncoding(GBK); 第20

21、22行代碼使用內(nèi)建對象request獲得用戶輸入的幣種、本金和存期amt=Double.parseDouble(request.getParameter(amount);per=Integer.parseInt(request.getParameter(period);cur=(String)(request.getParameter(currency);第2332行的try語句使用db的executeQuery()方法查詢利率、計算到期時的利息,并將計算的值保留2位小數(shù)。 Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第42頁,共69頁。tryString strQuery=select * f

22、rom interest where currency=+cur+ and period=+per;ResultSet rs=db.executeQuery(strQuery);while(rs.next()rate=rs.getFloat(rate); interest=(long)(rate*amt*per/12)/100; db.close();catch(Exception e)Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第43頁,共69頁。第3438行語句將當(dāng)前幣種、本金、存期、從數(shù)據(jù)庫中查到的利率和計算出的利息 幣種: 本金: 存期: (月) 利率: 利息:Java軟件項目(B/S架

23、構(gòu))開發(fā) 覃國蓉第44頁,共69頁。利率查詢錄入頁面Interest_query.html 類似于利息計算錄入頁面Interest_cal.html ,而且更簡單 Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第45頁,共69頁。利率查詢處理Interest_query.jsp 類似于利息計算處理Interest_cal.jsp ,而且不用計算Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第46頁,共69頁。利息利率界面左窗口的菜單頁面Interest_menu.html 定義一個1列7行的表格控制布局 表格的第1行的單元格插入一個圖片,見代碼第6行語句表格的第3行的單元格是“利息計算”超鏈接表格的第

24、5行的單元格是“利率查詢”超鏈接表格的第7行的單元格是“退出”超鏈接,返回主頁,注意超鏈接的屬性TARGET=_parent Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第47頁,共69頁。利息計算及利率查詢主界面Interest.html 定義一個幀組(FRAMESET)將頁面分成左右2個窗口,左邊顯示菜單鏈接,右邊顯示利息計算和利率查詢的相關(guān)頁面 ,代碼如下:Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第48頁,共69頁。思考如果你實現(xiàn)利息計算錄入界面,你會怎么做?通用做法是:用一個 html文件實現(xiàn),其中定義一個表單,表單中有一個錄入幣種的列表框,錄入存期和本金的文本框,還有“計算”和“取消

25、”按鈕定義javaScript函數(shù)檢查用戶輸入的合法性:是否沒輸入任何數(shù)據(jù)就提交,錄入的本金是否是一個實數(shù),錄入的存期是否是 一個整數(shù)等Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第49頁,共69頁。利息計算相關(guān)程序錄入界面Interest_cal.htmlcheck.js單擊“計算”按鈕后調(diào)用的服務(wù)器端程序Interest_cal.jsp封裝數(shù)據(jù)庫訪問的Java BeanConnDB.java 文件之間關(guān)聯(lián):如文件之間的調(diào)用關(guān)系,數(shù)據(jù)的傳遞等Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第50頁,共69頁。思考實現(xiàn)了利息計算的相關(guān)程序,利率查詢部分是不是很容易?有哪些程序可以共用利息計算的?有哪些

26、程序只需要對利息計算的進行少量修改就得到?Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第51頁,共69頁。利率查詢相關(guān)程序與利息計算類似,比利息計算簡單錄入界面文件Interest_query.html,可修改利息計算得到check.js,與利息計算共用單擊“查詢”后調(diào)用的服務(wù)器端程序Interest_query.jsp,可修改利息計算得到封裝數(shù)據(jù)庫訪問的Java BeanConnDB.java,與利息計算共用文件之間關(guān)聯(lián):如文件之間的調(diào)用關(guān)系,數(shù)據(jù)的傳遞等Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第52頁,共69頁。利息利率主界面顯示主界面的文件Interest.html右邊窗口顯示的文件in

27、terest_cal.html左邊窗口顯示的文件Interest_menu.htmlJava軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第53頁,共69頁。思考分析貨幣兌換的需求,考慮如何借鑒利息利率部分實現(xiàn)貨幣兌換部分?考慮用幾個文件實現(xiàn)?每個文件的功能或作用是什么?各文件之間的調(diào)用關(guān)系如何?哪些文件可以共用利息利率部分?哪些可修改利息利率部分實現(xiàn)?Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第54頁,共69頁。作業(yè)為周三、周五完成貨幣兌換部分做上機準(zhǔn)備Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第55頁,共69頁。兌換率查詢與兌換計算的需求與實現(xiàn)提示 用HTML、JavaScript、JSP和JDBC實現(xiàn)Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第56頁,共69頁。學(xué)習(xí)目標(biāo)借鑒利率查詢和利息計算部分的實現(xiàn)完成貨幣兌換率查詢及貨幣兌換計算的實現(xiàn)Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第57頁,共69頁。主要內(nèi)容兌換計算與兌換率率查詢的需求及界面實現(xiàn)相關(guān)技術(shù):客戶端:HTML+JavaScript服務(wù)器端:JSP+JavaBean+JDBC詳細(xì)設(shè)計程序文件組織數(shù)據(jù)庫準(zhǔn)備具體實現(xiàn)Java軟件項目(B/S架構(gòu))開發(fā) 覃國蓉第58頁,共69頁。貨幣兌換及兌換率查詢功能的詳細(xì)設(shè)計 一般銀行不直接提供2個外幣的兌換率,而是提供該100元外幣對人

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論