面向?qū)ο缶幊趟枷隷第1頁
面向?qū)ο缶幊趟枷隷第2頁
面向?qū)ο缶幊趟枷隷第3頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、面向?qū)ο缶幊趟枷?.面向?qū)ο蟮幕靖拍睿好嫦驅(qū)ο缶幊蹋?Object Oriented Programming, OOP,面向?qū)ο蟪绦蛟O(shè)計(jì))是一種計(jì)算機(jī)編程架構(gòu)。 OOP 的一條基本原則是計(jì)算機(jī)程序是由單個(gè)能夠起到子程序作用的單元或?qū)ο蠼M合而成。OOP 是一種計(jì)算機(jī)編程模式 , 它將對(duì)象作為問題空間的基本元素 , 利用對(duì)象和對(duì)象之間的相互作用來設(shè)計(jì)程序。 OOP的設(shè)計(jì)思想是以數(shù)據(jù)為中心 , 自底向上 , 逐步合并。 OOP的最核心屬性就是其可重用性 , 相比其他范式卻并不具有明顯優(yōu)勢(shì) , 但它更接近人類的認(rèn)知模式。OOP 的核心思想可以歸納為 : 以數(shù)據(jù)為中心組織邏輯 , 將系統(tǒng)視為互相作用的

2、對(duì)象的集合 , 并利用繼承與多態(tài)來增強(qiáng)可維護(hù)性 , 可擴(kuò)展性和可重用性。2.對(duì)象對(duì)象是人們要進(jìn)行研究的任何事物 , 從最簡(jiǎn)單的整數(shù)到復(fù)雜的飛機(jī)等均可看作對(duì)象 , 它不僅能表示具體的事物 , 還能表示抽象的規(guī)則 , 計(jì)劃或事件。 如我手上的這部手機(jī)是一個(gè)對(duì)象。3.類具有相同或相似性質(zhì)的對(duì)象的抽象就是類 .。因此 , 對(duì)象的抽象是類 , 類的具體化就是對(duì)象 , 也可以說類的實(shí)例是對(duì)象 .。 iphoneX 是一個(gè)類。4.關(guān)系繼承一般和特殊的關(guān)系 , 它指定了子類如何特化父類的特征和行為,繼承只能單一繼承不能多繼承。例如 , 小米手機(jī)定制版是小米手機(jī)的一種。繼承的好處1) 提高了代碼的復(fù)用性2) 多

3、個(gè)類相同的成員可以放到同一個(gè)類中3) 提高了代碼的維護(hù)性4) 如果功能的代碼需要修改,修改一處即可5) 讓類與類之間產(chǎn)生了關(guān)系,是多態(tài)的前提繼承的弊端1) 好處的第三點(diǎn)同時(shí)也是繼承的弊端2) 類與類之間產(chǎn)生了關(guān)系,讓類的耦合性增強(qiáng)了3) 設(shè)計(jì)原則:高內(nèi)聚低耦合實(shí)現(xiàn)是一種類與接口的關(guān)系 , 表示類是接口的特征和行為的實(shí)現(xiàn)。發(fā)短信這個(gè)功能大伙都知道 , 小米手機(jī)就實(shí)現(xiàn)了發(fā)短信這個(gè)功能 , 而且蘋果手機(jī)也實(shí)現(xiàn)了發(fā)短信這個(gè)功能。1.接口的成員特點(diǎn)成員變量只能是常量:默認(rèn)修飾符public static final構(gòu)造方法沒有,因?yàn)榻涌谥饕菙U(kuò)展功能的,而沒有具體存在成員方法默認(rèn)修飾符public ab

4、stract2. 類與類 _類與接口 _接口與接口的關(guān)系類與類繼承關(guān)系,只能單繼承,但是可以多層繼承。類與接口實(shí)現(xiàn)關(guān)系,可以單實(shí)現(xiàn),也可以多實(shí)現(xiàn)。還可以在繼承一個(gè)類的同時(shí)實(shí)現(xiàn)多個(gè)接口。接口與接口繼承關(guān)系,可以單繼承,也可以多繼承。3. 抽象類與接口的區(qū)別成員區(qū)別1) 抽象類 變量 ,常量 ;有抽象方法 ;抽象方法 ,非抽象方法2) 接口 常量 ;抽象方法關(guān)系區(qū)別1) 類與類 繼承,單繼承2) 類與接口 實(shí)現(xiàn),單實(shí)現(xiàn),多實(shí)現(xiàn)3) 接口與接口 繼承,單繼承,多繼承設(shè)計(jì)理念區(qū)別1) 抽象類 被繼承體現(xiàn)的是: ” is a的”關(guān)系。共性功能2) 接口 被實(shí)現(xiàn)體現(xiàn)的是: ” like a的關(guān)”系。擴(kuò)展功

5、能組合是整體與部分的關(guān)系 , 但部分不能離開整體而單獨(dú)存在。 如一臺(tái)小米手機(jī)擁有按鍵 , 可是離開了手機(jī) , 按鍵也就失去了意義 .。聚合是整體與部分的關(guān)系 , 且部分可以離開整體而單獨(dú)存在。 一個(gè)豪華小米電視套餐還包含一套音箱 , 這個(gè)音箱也可以是單獨(dú)賣的。關(guān)聯(lián)是一種擁有的關(guān)系 , 一個(gè)類知道另外一個(gè)類的屬性和方法。小米手機(jī)可以控制小米電視機(jī)。依賴是一種使用的關(guān)系 , 一個(gè)類的實(shí)現(xiàn)需要另一個(gè)類的協(xié)助。小米手機(jī)控制小米電視機(jī)的時(shí)候需要有個(gè)路由器。5.基本特征封裝將對(duì)象或其中的方法屬性加一層包裝。電腦有硬盤 , 可是我們只能夠通過操作系統(tǒng)去訪問他。繼承對(duì)象的一個(gè)新類可以從現(xiàn)有的類中派生。多態(tài)不同

6、類的對(duì)象對(duì)同一消息做出不同反應(yīng)。我用不同牌子的手機(jī) , 收到電話的時(shí)候鈴聲是不同的。6.設(shè)計(jì)原則間接 柔勝于剛 ,取勝于直編程中有一句名言 : 任何計(jì)算機(jī)問題均可通過增加一個(gè)間接層來解決。變量間接指代某個(gè)值或表達(dá)式, 函數(shù)也間接指代了某段代碼。一個(gè)適當(dāng)?shù)闹虚g層, 在形式上表現(xiàn)為間接層 , 在實(shí)質(zhì)上體現(xiàn)為抽象層。抽象的意義A. 掩蓋了具體的細(xì)節(jié) , 提高代碼的簡(jiǎn)潔度B. 賦予了明確的語意 , 提高代碼的清晰度間接的意義a) 建立了名與實(shí)的映射 , 提高了代碼的一致性和可維護(hù)性b) 實(shí)現(xiàn)了名與實(shí)的分離 , 提高了代碼的靈活性和可擴(kuò)展性依賴 有求皆苦 , 無欲則剛抽象與規(guī)范是根本 , 間接與分離是手

7、段 , 依賴與控制是關(guān)鍵 , 接口與服務(wù)是核心。接口一方面作為一種抽象類型 , 描述了一類對(duì)象所應(yīng)遵守的行為規(guī)范 ; 另一方面作為間接層 , 把兩個(gè)耦合的具體類進(jìn)行了分離。1) 依賴反轉(zhuǎn)原則 Dependency Inversion Principle高層模塊不應(yīng)該依賴底層模塊 , 它們都應(yīng)該依賴抽象 ; 抽象不應(yīng)該依賴細(xì)節(jié) ,細(xì)節(jié)應(yīng)依賴抽象。2) 依賴注入 Dependency Injection依賴的對(duì)象是從外部注入的, DI 強(qiáng)調(diào)依賴的來源 ,完全有外部提供。 DIP 強(qiáng)調(diào)依賴的抽象性。3)控制反轉(zhuǎn)IoC控制反轉(zhuǎn)是一種管理組建依賴的機(jī)制, 它打破了常規(guī)的流程控制模式, 把控制權(quán)從用戶的應(yīng)

8、用代碼轉(zhuǎn)給了底層的某個(gè)組建 , 以保證組建總能在合適的時(shí)候獲得合適的依賴。 依賴注射是控制反轉(zhuǎn)的一種實(shí)現(xiàn)方式。7.內(nèi)聚 ( 不是一家人 , 不進(jìn)一家門)耦合反映模塊之間的關(guān)聯(lián)程度, 內(nèi)聚反映模塊內(nèi)部的關(guān)聯(lián)成強(qiáng)度。面向?qū)ο缶幊淘O(shè)計(jì)思想原則:高內(nèi)聚,低耦合,就近原則。1) 單一職責(zé)原則一個(gè)類應(yīng)當(dāng)只有一個(gè)變更的理由。2) 局部化原則讓代碼的物理緊密程度與邏輯緊密程度保持一致。3) 接口隔離原則不應(yīng)強(qiáng)迫客戶依賴那些他們不用的方法 , 多個(gè)專用的接口比單純一個(gè)總接口更好。8.現(xiàn)在講一個(gè)經(jīng)典的面向?qū)ο缶幊痰陌咐a*數(shù)據(jù)庫的增刪改查操作 *1. 首先創(chuàng)建一個(gè) Account 類package com.it

9、heima.dbutils.domain;public class Account private Integer id;private String name;private Double money;public Integer getId() return id;public void setId(Integer id) this.id = id;public String getName() return name;public void setName(String name) = name;public Double getMoney() return mone

10、y;public void setMoney(Double money) this.money = money;Overridepublic String toString() return "Account id=" + id + ", name=" + name + ", money=" + money + ""2.其次創(chuàng)建 JDBCUtils 工具類package com.itheima.jdbc.utils;import java.sql.Connection;import java.sql.ResultS

11、et;import java.sql.SQLException;import java.sql.Statement;import javax.sql.DataSource;import com.mchange.v2.c3p0.ComboPooledDataSource;/* JDBC 的工具類* author jt*/public class JDBCUtils2 / 創(chuàng)建一個(gè)連接池:但是這個(gè)連接池只需要?jiǎng)?chuàng)建一次即可。privatestaticfinalComboPooledDataSourcedataSource=newComboPooledDataSource();/* 獲得連接的方法*

12、throws SQLException*/public static Connection getConnection() throws SQLExceptionreturn dataSource.getConnection();/* 獲得連接池 :*/public static DataSource getDataSource()return dataSource;/* 釋放資源的方法*/public static void release(Statement stmt,Connection conn)if(stmt != null)try stmt.close(); catch (SQLE

13、xception e) e.printStackTrace();stmt = null;if(conn != null)try conn.close(); catch (SQLException e) e.printStackTrace();conn = null;public static void release(ResultSet rs,Statement stmt,Connection conn)/ 資源釋放:if(rs != null)try rs.close(); catch (SQLException e) e.printStackTrace();rs = null;if(stm

14、t != null)try stmt.close(); catch (SQLException e) e.printStackTrace();stmt = null;if(conn != null)try conn.close(); catch (SQLException e) e.printStackTrace();conn = null;3.然后利用DBUtils 工具類庫實(shí)現(xiàn)面向?qū)ο缶幊檀a:package com.itheima.dbutils.demo3;import java.sql.SQLException;import java.util.Arrays;import java.

15、util.List;import java.util.Map;import mons.dbutils.QueryRunner;import mons.dbutils.handlers.ArrayHandler;import mons.dbutils.handlers.ArrayListHandler;import mons.dbutils.handlers.BeanHandler;import mons.dbutils.handlers.BeanListHandler;import mons.dbutils.handlers.ColumnListHandler;import mons.dbut

16、ils.handlers.KeyedHandler;import mons.dbutils.handlers.MapHandler;import mons.dbutils.handlers.MapListHandler;import mons.dbutils.handlers.ScalarHandler;import org.junit.Test;import com.itheima.dbutils.domain.Account;import com.itheima.jdbc.utils.JDBCUtils2;/* ResultSetHandler的實(shí)現(xiàn)類* author jt*/public

17、 class DBUtilsDemo3 Test/* ArrayHandler:將一條記錄封裝到一個(gè)Object 數(shù)組中*/public void demo1() throws SQLException QueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource();Objectobjs= queryRunner.query("select* from accountwhereid = ?", newArrayHandler(), 1);System.out.println(Arrays.toStri

18、ng(objs);Test/* ArrayListHandler:將多條記錄封裝到一個(gè)裝有Object 數(shù)組的List集合中* 一條記錄封裝到Objecct數(shù)組中,多條記錄就是多個(gè)Object,那么多個(gè)Object 數(shù)組就將其裝入List 集合中即可。*/public void demo2() throws SQLException QueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource();List<Object>list=queryRunner.query("select*fromaccou

19、nt",newArrayListHandler();for (Object objects : list) System.out.println(Arrays.toString(objects);Test/* BeanHandler:將一條記錄封裝到一個(gè)JavaBean中*/public void demo3() throws SQLException QueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource();Account account = queryRunner.query("select

20、 * from account where id = ?",new BeanHandler<Account>(Account.class), 2);System.out.println(account);Test/* BeanListHandler:將多條記錄封裝到一個(gè)裝有JavaBean的 List 集合中。* *一條記錄就是一個(gè) Java 的對(duì)象( JavaBean ),如果多條記錄 (多個(gè) Java 的對(duì)象),將多個(gè) Java 對(duì)象裝到一個(gè) List 集合中。*/public void demo4() throws SQLException QueryRunner

21、queryRunner = new QueryRunner(JDBCUtils2.getDataSource();List<Account>list=queryRunner.query("select*fromaccount",newBeanListHandler<Account>(Account.class);for (Account account : list) System.out.println(account);Test/* MapHandler :將一條記錄封裝到一個(gè)Map 集合中,Map 的 key 是列名,Map 的 value就是

22、表中列的記錄值。*/public void demo5() throws SQLExceptionQueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource();Map<String,Object> map = queryRunner.query("select * from account where id= ?", new MapHandler(), 4);System.out.println(map);Test/* MapListHandler:將多條記錄封裝到一個(gè)裝有Map 的 L

23、ist 集合中。*/public void demo6() throws SQLExceptionQueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource();List<Map<String,Object>> list = queryRunner.query("select * from account", newMapListHandler();for (Map<String, Object> map : list) System.out.println(map

24、);Test/* ColumnListHandler:將某列的值封裝到List 集合中*/public void demo7() throws SQLExceptionQueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource();List<Object> list = queryRunner.query("select name,money from account", newColumnListHandler("name");for (Object object :

25、 list) System.out.println(object);Test/* ScalarHandler:單值封裝*/public void demo8() throws SQLExceptionQueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource();Objectobj=queryRunner.query("selectcount(*)fromaccount",newScalarHandler();System.out.println(obj);Test/* KeyedHandler :將

26、一條記錄封裝到一個(gè)Map 集合中。將多條記錄封裝到一個(gè)裝有Map集合的*/Map集合中。而且外面的Map的key是可以指定的。public void demo9() throws SQLExceptionQueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource();Map<Object,Map<String,Object>>map=queryRunner.query("select*fromaccount", new KeyedHandler("id");for (Object key : map.keySet() System.out.println(key

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論