![面向?qū)ο缶幊趟枷隷第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/8d1ef551-9dc1-401d-8fb5-20b636c2c052/8d1ef551-9dc1-401d-8fb5-20b636c2c0521.gif)
![面向?qū)ο缶幊趟枷隷第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/8d1ef551-9dc1-401d-8fb5-20b636c2c052/8d1ef551-9dc1-401d-8fb5-20b636c2c0522.gif)
![面向?qū)ο缶幊趟枷隷第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/8d1ef551-9dc1-401d-8fb5-20b636c2c052/8d1ef551-9dc1-401d-8fb5-20b636c2c0523.gif)
![面向?qū)ο缶幊趟枷隷第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/8d1ef551-9dc1-401d-8fb5-20b636c2c052/8d1ef551-9dc1-401d-8fb5-20b636c2c0524.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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ì)象作為問(wèn)題空間的基本元素 , 利用對(duì)象和對(duì)象之間的相互作用來(lái)設(shè)計(jì)程序。 OOP的設(shè)計(jì)思想是以數(shù)據(jù)為中心 , 自底向上 , 逐步合并。 OOP的最核心屬性就是其可重用性 , 相比其他范式卻并不具有明顯優(yōu)勢(shì) , 但它更接近人類的認(rèn)知模式。OOP 的核心思想可以歸納為 : 以數(shù)據(jù)為中心組織邏輯 , 將系統(tǒng)視為互相作用的
2、對(duì)象的集合 , 并利用繼承與多態(tài)來(lá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ì)象 , 也可以說(shuō)類的實(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)造方法沒(méi)有,因?yàn)榻涌谥饕菙U(kuò)展功能的,而沒(méi)有具體存在成員方法默認(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)系 , 但部分不能離開(kāi)整體而單獨(dú)存在。 如一臺(tái)小米手機(jī)擁有按鍵 , 可是離開(kāi)了手機(jī) , 按鍵也就失去了意義 .。聚合是整體與部分的關(guān)系 , 且部分可以離開(kāi)整體而單獨(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ì)象或其中的方法屬性加一層包裝。電腦有硬盤 , 可是我們只能夠通過(guò)操作系統(tǒng)去訪問(wèn)他。繼承對(duì)象的一個(gè)新類可以從現(xiàn)有的類中派生。多態(tài)不同
6、類的對(duì)象對(duì)同一消息做出不同反應(yīng)。我用不同牌子的手機(jī) , 收到電話的時(shí)候鈴聲是不同的。6.設(shè)計(jì)原則間接 柔勝于剛 ,取勝于直編程中有一句名言 : 任何計(jì)算機(jī)問(wèn)題均可通過(guò)增加一個(gè)間接層來(lái)解決。變量間接指代某個(gè)值或表達(dá)式, 函數(shù)也間接指代了某段代碼。一個(gè)適當(dāng)?shù)闹虚g層, 在形式上表現(xiàn)為間接層 , 在實(shí)質(zhì)上體現(xiàn)為抽象層。抽象的意義A. 掩蓋了具體的細(xì)節(jié) , 提高代碼的簡(jiǎn)潔度B. 賦予了明確的語(yǔ)意 , 提高代碼的清晰度間接的意義a) 建立了名與實(shí)的映射 , 提高了代碼的一致性和可維護(hù)性b) 實(shí)現(xiàn)了名與實(shí)的分離 , 提高了代碼的靈活性和可擴(kuò)展性依賴 有求皆苦 , 無(wú)欲則剛抽象與規(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)依賴的來(lái)源 ,完全有外部提供。 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ù)庫(kù)的增刪改查操作 *1. 首先創(chuàng)建一個(gè) Account 類public class A
9、ccount 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 money;public void setMoney(Double money
10、) this.money = money;Overridepublic String toString() return "Account id=" + id + ", name=" + name + ", money=" + money + ""2.其次創(chuàng)建 JDBCUtils 工具類/* JDBC 的工具類* author jt*/public class JDBCUtils2 / 創(chuàng)建一個(gè)連接池:但是這個(gè)連接池只需要?jiǎng)?chuàng)建一次即可。privatestaticfinalComboPooledDataSourced
11、ataSource=newComboPooledDataSource();/* 獲得連接的方法* throws SQLException*/public static Connection getConnection() throws SQLExceptionreturn dataSource.getConnection();/* 獲得連接池 :*/public static DataSource getDataSource()return dataSource;/* 釋放資源的方法*/public static void release(Statement stmt,Connection c
12、onn)if(stmt != null)try stmt.close(); catch (SQLException 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 (SQL
13、Exception e) e.printStackTrace();rs = null;if(stmt != 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 工具類庫(kù)實(shí)現(xiàn)面向?qū)ο缶幊檀a:/* ResultSetHandler的實(shí)現(xiàn)類* author jt*/public class D
14、BUtilsDemo3 Test/* ArrayHandler:將一條記錄封裝到一個(gè)Object 數(shù)組中*/public void demo1() throws SQLException QueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource();Objectobjs= queryRunner.query("select* from accountwhereid = ?", newArrayHandler(), 1);Test/* ArrayListHandler:將多條記錄封裝到一個(gè)裝有Obje
15、ct 數(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*fromaccount",newArrayListHandler();for (Object object
16、s : list) Test/* BeanHandler:將一條記錄封裝到一個(gè)JavaBean中*/public void demo3() throws SQLException QueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource();Account account = queryRunner.query("select * from account where id = ?",new BeanHandler<Account>(Account.class), 2);Test/* B
17、eanListHandler:將多條記錄封裝到一個(gè)裝有JavaBean的 List 集合中。* *一條記錄就是一個(gè) Java 的對(duì)象( JavaBean ),如果多條記錄 (多個(gè) Java 的對(duì)象),將多個(gè) Java 對(duì)象裝到一個(gè) List 集合中。*/public void demo4() throws SQLException QueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource();List<Account>list=queryRunner.query("select*fromaccou
18、nt",newBeanListHandler<Account>(Account.class);for (Account account : list) Test/* MapHandler :將一條記錄封裝到一個(gè)Map 集合中,Map 的 key 是列名,Map 的 value就是表中列的記錄值。*/public void demo5() throws SQLExceptionQueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource();Map<String,Object> map =
19、queryRunner.query("select * from account where id= ?", new MapHandler(), 4);Test/* MapListHandler:將多條記錄封裝到一個(gè)裝有Map 的 List 集合中。*/public void demo6() throws SQLExceptionQueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource();List<Map<String,Object>> list = queryRunner
20、.query("select * from account", newMapListHandler();for (Map<String, Object> map : list) Test/* ColumnListHandler:將某列的值封裝到List 集合中*/public void demo7() throws SQLExceptionQueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource();List<Object> list = queryRunner.query(
21、"select name,money from account", newColumnListHandler("name");for (Object object : list) Test/* ScalarHandler:單值封裝*/public void demo8() throws SQLExceptionQueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource();Objectobj=queryRunner.query("selectcount(*)fromacc
22、ount",newScalarHandler();Test/* KeyedHandler :將一條記錄封裝到一個(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() Test/* 增加一條記錄信息*/public
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 木材運(yùn)輸時(shí)間保障合同
- 三農(nóng)產(chǎn)品包裝與儲(chǔ)存方案設(shè)計(jì)
- 生產(chǎn)流程標(biāo)準(zhǔn)化與持續(xù)改進(jìn)實(shí)踐
- 食品飲料行業(yè)品質(zhì)控制與安全保障指南
- 駕校場(chǎng)地出租合同
- 場(chǎng)調(diào)查委托合同協(xié)議書
- 冷卻塔填料采購(gòu)合同
- 全新攪拌樁合同
- 2025年河南貨運(yùn)從業(yè)資格考試模擬考試題庫(kù)答案大全
- 小學(xué)二年級(jí)數(shù)學(xué)上冊(cè)口算筆算天天練
- 廣西壯族自治區(qū)北海市2024-2025學(xué)年九年級(jí)上學(xué)期1月期末化學(xué)試題(含答案)
- 2025年浙江紹興杭紹臨空示范區(qū)開(kāi)發(fā)集團(tuán)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025年人教五四新版八年級(jí)物理上冊(cè)階段測(cè)試試卷含答案
- 2024年殯儀館建設(shè)項(xiàng)目可行性研究報(bào)告(編制大綱)
- 礦山2025年安全工作計(jì)劃
- 基本藥物制度政策培訓(xùn)課件
- 2025年包裝印刷項(xiàng)目可行性研究報(bào)告
- 小紅書營(yíng)銷師(初級(jí))認(rèn)證理論知識(shí)考試題庫(kù)(附答案)
- 2025年民營(yíng)醫(yī)院工作總結(jié)及2025年工作計(jì)劃
- 2025年九年級(jí)物理中考復(fù)習(xí)計(jì)劃
- 企業(yè)融資報(bào)告特斯拉成功案例分享
評(píng)論
0/150
提交評(píng)論