面向对象编程思想_第1页
面向对象编程思想_第2页
面向对象编程思想_第3页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、面向对象编程思想1.面向对象的基本概念:面向对象编程( Object Oriented Programming, OOP,面向对象程序设计)是一种计算机编程架构。 OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 是一种计算机编程模式 , 它将对象作为问题空间的基本元素 , 利用对象和对象之间的相互作用来设计程序。 OOP的设计思想是以数据为中心 , 自底向上 , 逐步合并。 OOP的最核心属性就是其可重用性 , 相比其他范式却并不具有明显优势 , 但它更接近人类的认知模式。OOP 的核心思想可以归纳为 : 以数据为中心组织逻辑 , 将系统视为互相作用的

2、对象的集合 , 并利用继承与多态来增强可维护性 , 可扩展性和可重用性。2.对象对象是人们要进行研究的任何事物 , 从最简单的整数到复杂的飞机等均可看作对象 , 它不仅能表示具体的事物 , 还能表示抽象的规则 , 计划或事件。 如我手上的这部手机是一个对象。3.类具有相同或相似性质的对象的抽象就是类 .。因此 , 对象的抽象是类 , 类的具体化就是对象 , 也可以说类的实例是对象 .。 iphoneX 是一个类。4.关系继承一般和特殊的关系 , 它指定了子类如何特化父类的特征和行为,继承只能单一继承不能多继承。例如 , 小米手机定制版是小米手机的一种。继承的好处1) 提高了代码的复用性2) 多

3、个类相同的成员可以放到同一个类中3) 提高了代码的维护性4) 如果功能的代码需要修改,修改一处即可5) 让类与类之间产生了关系,是多态的前提继承的弊端1) 好处的第三点同时也是继承的弊端2) 类与类之间产生了关系,让类的耦合性增强了3) 设计原则:高内聚低耦合实现是一种类与接口的关系 , 表示类是接口的特征和行为的实现。发短信这个功能大伙都知道 , 小米手机就实现了发短信这个功能 , 而且苹果手机也实现了发短信这个功能。1.接口的成员特点成员变量只能是常量:默认修饰符public static final构造方法没有,因为接口主要是扩展功能的,而没有具体存在成员方法默认修饰符public ab

4、stract2. 类与类 _类与接口 _接口与接口的关系类与类继承关系,只能单继承,但是可以多层继承。类与接口实现关系,可以单实现,也可以多实现。还可以在继承一个类的同时实现多个接口。接口与接口继承关系,可以单继承,也可以多继承。3. 抽象类与接口的区别成员区别1) 抽象类 变量 ,常量 ;有抽象方法 ;抽象方法 ,非抽象方法2) 接口 常量 ;抽象方法关系区别1) 类与类 继承,单继承2) 类与接口 实现,单实现,多实现3) 接口与接口 继承,单继承,多继承设计理念区别1) 抽象类 被继承体现的是: ” is a的”关系。共性功能2) 接口 被实现体现的是: ” like a的关”系。扩展功

5、能组合是整体与部分的关系 , 但部分不能离开整体而单独存在。 如一台小米手机拥有按键 , 可是离开了手机 , 按键也就失去了意义 .。聚合是整体与部分的关系 , 且部分可以离开整体而单独存在。 一个豪华小米电视套餐还包含一套音箱 , 这个音箱也可以是单独卖的。关联是一种拥有的关系 , 一个类知道另外一个类的属性和方法。小米手机可以控制小米电视机。依赖是一种使用的关系 , 一个类的实现需要另一个类的协助。小米手机控制小米电视机的时候需要有个路由器。5.基本特征封装将对象或其中的方法属性加一层包装。电脑有硬盘 , 可是我们只能够通过操作系统去访问他。继承对象的一个新类可以从现有的类中派生。多态不同

6、类的对象对同一消息做出不同反应。我用不同牌子的手机 , 收到电话的时候铃声是不同的。6.设计原则间接 柔胜于刚 ,取胜于直编程中有一句名言 : 任何计算机问题均可通过增加一个间接层来解决。变量间接指代某个值或表达式, 函数也间接指代了某段代码。一个适当的中间层, 在形式上表现为间接层 , 在实质上体现为抽象层。抽象的意义A. 掩盖了具体的细节 , 提高代码的简洁度B. 赋予了明确的语意 , 提高代码的清晰度间接的意义a) 建立了名与实的映射 , 提高了代码的一致性和可维护性b) 实现了名与实的分离 , 提高了代码的灵活性和可扩展性依赖 有求皆苦 , 无欲则刚抽象与规范是根本 , 间接与分离是手

7、段 , 依赖与控制是关键 , 接口与服务是核心。接口一方面作为一种抽象类型 , 描述了一类对象所应遵守的行为规范 ; 另一方面作为间接层 , 把两个耦合的具体类进行了分离。1) 依赖反转原则 Dependency Inversion Principle高层模块不应该依赖底层模块 , 它们都应该依赖抽象 ; 抽象不应该依赖细节 ,细节应依赖抽象。2) 依赖注入 Dependency Injection依赖的对象是从外部注入的, DI 强调依赖的来源 ,完全有外部提供。 DIP 强调依赖的抽象性。3)控制反转IoC控制反转是一种管理组建依赖的机制, 它打破了常规的流程控制模式, 把控制权从用户的应

8、用代码转给了底层的某个组建 , 以保证组建总能在合适的时候获得合适的依赖。 依赖注射是控制反转的一种实现方式。7.内聚 ( 不是一家人 , 不进一家门)耦合反映模块之间的关联程度, 内聚反映模块内部的关联成强度。面向对象编程设计思想原则:高内聚,低耦合,就近原则。1) 单一职责原则一个类应当只有一个变更的理由。2) 局部化原则让代码的物理紧密程度与逻辑紧密程度保持一致。3) 接口隔离原则不应强迫客户依赖那些他们不用的方法 , 多个专用的接口比单纯一个总接口更好。8.现在讲一个经典的面向对象编程的案例代码*数据库的增删改查操作 *1. 首先创建一个 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.其次创建 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 / 创建一个连接池:但是这个连接池只需要创建一次即可。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 工具类库实现面向对象编程代码: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的实现类* author jt*/public

17、 class DBUtilsDemo3 Test/* ArrayHandler:将一条记录封装到一个Object 数组中*/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 数组的List集合中* 一条记录封装到Objecct数组中,多条记录就是多个Object,那么多个Object 数组就将其装入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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论