


版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、面向?qū)ο缶幊趟枷?.面向?qū)ο蟮幕靖拍睿好嫦驅(qū)ο缶幊蹋?Object Oriented Programming, OOP,面向?qū)ο蟪绦蛟O計)是一種計算機編程架構。 OOP 的一條基本原則是計算機程序是由單個能夠起到子程序作用的單元或?qū)ο蠼M合而成。OOP 是一種計算機編程模式 , 它將對象作為問題空間的基本元素 , 利用對象和對象之間的相互作用來設計程序。 OOP的設計思想是以數(shù)據(jù)為中心 , 自底向上 , 逐步合并。 OOP的最核心屬性就是其可重用性 , 相比其他范式卻并不具有明顯優(yōu)勢 , 但它更接近人類的認知模式。OOP 的核心思想可以歸納為 : 以數(shù)據(jù)為中心組織邏輯 , 將系統(tǒng)視為互相作用的
2、對象的集合 , 并利用繼承與多態(tài)來增強可維護性 , 可擴展性和可重用性。2.對象對象是人們要進行研究的任何事物 , 從最簡單的整數(shù)到復雜的飛機等均可看作對象 , 它不僅能表示具體的事物 , 還能表示抽象的規(guī)則 , 計劃或事件。 如我手上的這部手機是一個對象。3.類具有相同或相似性質(zhì)的對象的抽象就是類 .。因此 , 對象的抽象是類 , 類的具體化就是對象 , 也可以說類的實例是對象 .。 iphoneX 是一個類。4.關系繼承一般和特殊的關系 , 它指定了子類如何特化父類的特征和行為,繼承只能單一繼承不能多繼承。例如 , 小米手機定制版是小米手機的一種。繼承的好處1) 提高了代碼的復用性2) 多
3、個類相同的成員可以放到同一個類中3) 提高了代碼的維護性4) 如果功能的代碼需要修改,修改一處即可5) 讓類與類之間產(chǎn)生了關系,是多態(tài)的前提繼承的弊端1) 好處的第三點同時也是繼承的弊端2) 類與類之間產(chǎn)生了關系,讓類的耦合性增強了3) 設計原則:高內(nèi)聚低耦合實現(xiàn)是一種類與接口的關系 , 表示類是接口的特征和行為的實現(xiàn)。發(fā)短信這個功能大伙都知道 , 小米手機就實現(xiàn)了發(fā)短信這個功能 , 而且蘋果手機也實現(xiàn)了發(fā)短信這個功能。1.接口的成員特點成員變量只能是常量:默認修飾符public static final構造方法沒有,因為接口主要是擴展功能的,而沒有具體存在成員方法默認修飾符public ab
4、stract2. 類與類 _類與接口 _接口與接口的關系類與類繼承關系,只能單繼承,但是可以多層繼承。類與接口實現(xiàn)關系,可以單實現(xiàn),也可以多實現(xiàn)。還可以在繼承一個類的同時實現(xiàn)多個接口。接口與接口繼承關系,可以單繼承,也可以多繼承。3. 抽象類與接口的區(qū)別成員區(qū)別1) 抽象類 變量 ,常量 ;有抽象方法 ;抽象方法 ,非抽象方法2) 接口 常量 ;抽象方法關系區(qū)別1) 類與類 繼承,單繼承2) 類與接口 實現(xiàn),單實現(xiàn),多實現(xiàn)3) 接口與接口 繼承,單繼承,多繼承設計理念區(qū)別1) 抽象類 被繼承體現(xiàn)的是: ” is a的”關系。共性功能2) 接口 被實現(xiàn)體現(xiàn)的是: ” like a的關”系。擴展功
5、能組合是整體與部分的關系 , 但部分不能離開整體而單獨存在。 如一臺小米手機擁有按鍵 , 可是離開了手機 , 按鍵也就失去了意義 .。聚合是整體與部分的關系 , 且部分可以離開整體而單獨存在。 一個豪華小米電視套餐還包含一套音箱 , 這個音箱也可以是單獨賣的。關聯(lián)是一種擁有的關系 , 一個類知道另外一個類的屬性和方法。小米手機可以控制小米電視機。依賴是一種使用的關系 , 一個類的實現(xiàn)需要另一個類的協(xié)助。小米手機控制小米電視機的時候需要有個路由器。5.基本特征封裝將對象或其中的方法屬性加一層包裝。電腦有硬盤 , 可是我們只能夠通過操作系統(tǒng)去訪問他。繼承對象的一個新類可以從現(xiàn)有的類中派生。多態(tài)不同
6、類的對象對同一消息做出不同反應。我用不同牌子的手機 , 收到電話的時候鈴聲是不同的。6.設計原則間接 柔勝于剛 ,取勝于直編程中有一句名言 : 任何計算機問題均可通過增加一個間接層來解決。變量間接指代某個值或表達式, 函數(shù)也間接指代了某段代碼。一個適當?shù)闹虚g層, 在形式上表現(xiàn)為間接層 , 在實質(zhì)上體現(xiàn)為抽象層。抽象的意義A. 掩蓋了具體的細節(jié) , 提高代碼的簡潔度B. 賦予了明確的語意 , 提高代碼的清晰度間接的意義a) 建立了名與實的映射 , 提高了代碼的一致性和可維護性b) 實現(xiàn)了名與實的分離 , 提高了代碼的靈活性和可擴展性依賴 有求皆苦 , 無欲則剛抽象與規(guī)范是根本 , 間接與分離是手
7、段 , 依賴與控制是關鍵 , 接口與服務是核心。接口一方面作為一種抽象類型 , 描述了一類對象所應遵守的行為規(guī)范 ; 另一方面作為間接層 , 把兩個耦合的具體類進行了分離。1) 依賴反轉(zhuǎn)原則 Dependency Inversion Principle高層模塊不應該依賴底層模塊 , 它們都應該依賴抽象 ; 抽象不應該依賴細節(jié) ,細節(jié)應依賴抽象。2) 依賴注入 Dependency Injection依賴的對象是從外部注入的, DI 強調(diào)依賴的來源 ,完全有外部提供。 DIP 強調(diào)依賴的抽象性。3)控制反轉(zhuǎn)IoC控制反轉(zhuǎn)是一種管理組建依賴的機制, 它打破了常規(guī)的流程控制模式, 把控制權從用戶的應
8、用代碼轉(zhuǎn)給了底層的某個組建 , 以保證組建總能在合適的時候獲得合適的依賴。 依賴注射是控制反轉(zhuǎn)的一種實現(xiàn)方式。7.內(nèi)聚 ( 不是一家人 , 不進一家門)耦合反映模塊之間的關聯(lián)程度, 內(nèi)聚反映模塊內(nèi)部的關聯(lián)成強度。面向?qū)ο缶幊淘O計思想原則:高內(nèi)聚,低耦合,就近原則。1) 單一職責原則一個類應當只有一個變更的理由。2) 局部化原則讓代碼的物理緊密程度與邏輯緊密程度保持一致。3) 接口隔離原則不應強迫客戶依賴那些他們不用的方法 , 多個專用的接口比單純一個總接口更好。8.現(xiàn)在講一個經(jīng)典的面向?qū)ο缶幊痰陌咐a*數(shù)據(jù)庫的增刪改查操作 *1. 首先創(chuàng)建一個 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)建一個連接池:但是這個連接池只需要創(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 工具類庫實現(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的實現(xiàn)類* author jt*/public
17、 class DBUtilsDemo3 Test/* ArrayHandler:將一條記錄封裝到一個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:將多條記錄封裝到一個裝有Object 數(shù)組的List集合中* 一條記錄封裝到Objecct數(shù)組中,多條記錄就是多個Object,那么多個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:將一條記錄封裝到一個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:將多條記錄封裝到一個裝有JavaBean的 List 集合中。* *一條記錄就是一個 Java 的對象( JavaBean ),如果多條記錄 (多個 Java 的對象),將多個 Java 對象裝到一個 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 :將一條記錄封裝到一個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:將多條記錄封裝到一個裝有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、一條記錄封裝到一個Map 集合中。將多條記錄封裝到一個裝有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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 佛山廣東佛山市三水區(qū)直屬學校面向高校應屆畢業(yè)生招聘教師62人筆試歷年參考題庫附帶答案詳解
- 人教版九年級化學上冊第七單元 燃料及其利用 課題2 燃料的合理利用與開發(fā)教學設計與反思
- 云南2025年云南師范大學附屬世紀金源學校招聘編外工作人員筆試歷年參考題庫附帶答案詳解
- 酒店項目建設的可行性研究與方案設計(范文)
- 樂山2024年四川樂山市教育局直屬學校赴西南大學招聘事業(yè)單位工作人員20人筆試歷年參考題庫附帶答案詳解
- 麗江2024年云南麗江職業(yè)技術學院第三輪急需緊缺專業(yè)人才招聘筆試歷年參考題庫附帶答案詳解
- 個人車輛借用協(xié)議
- 吸音吊頂施工方案
- 大廈物業(yè)管理合同書范例
- 三人合伙協(xié)議書范例二零二五年
- 婚姻保證忠誠協(xié)議書
- 工信委選調(diào)試題及答案
- GB/T 17591-2025阻燃織物
- 2025年中國白高粱行業(yè)發(fā)展趨勢預測及投資戰(zhàn)略咨詢報告
- 詳解家庭教育指導師考試試題及答案
- 2025長沙市存量房買賣合同(合同版本)
- 制造業(yè)生產(chǎn)成本控制與優(yōu)化策略
- 2025年OTC市場分析現(xiàn)狀
- GB/T 31015-2024公共信息導向系統(tǒng)基于無障礙需求的設計與設置原則和要求
- 2025年安陽職業(yè)技術學院單招職業(yè)適應性測試題庫完整答案
- 老有所學-家庭教育的內(nèi)涵及對老年人生活質(zhì)量的影響
評論
0/150
提交評論