问题:为什么要重新认识oop?最近总是会发现这样的问题:(1)如何准确的命名一个对象?(2)如何把握系统结构
分析:对象是这样解释的:由一组属性和一系列的行为构成的一个基本单位
由此来看对象有两个重要特征:属性和行为
(1)针对于第一个问题,如何准确定义一个对象?生活中有一个经典例子
人(object)
姓名,性别,年龄.....(property)
吃饭,睡觉......(action)
对象 ‘人’ 有这么多属性,有这么多行为。反过来来说有这些行为属性特征的东西叫做 ‘人’
通常的,先有对象,再搜集属性和行为较为顺遂。但是总会遇到,根据一系列行为和属性去归纳总结创造对象这种情况,那么如何科学的归纳,如何命名将成为一个问题,因为我们将要创造新的词语并赋予它特定的含义。
举个例子
某对象
两栖动物,绿色(property)
跳(action)
归纳为 青蛙(object)
(2)如何把握分层结构,该怎么分层,如何分层
比如
人
男,女
大人,小孩
又比如mybatis执行流程
那么我们如何科学把握这个分层标准
begin
1,引入jar包 mybatis和数据库驱动包
2,新建数据表
3,新建三个类,bean,dao,xml
4,test
如下
未看源码之前 当前来看 mybatis执行分为如下几步
1,加载数据库配置文件生成sqlSession
2,sqlSession加载dao类
3,执行dao类的方法
到此 产生以下问题
1,第三步dao类的方法执行后得到结果集。目前来看它和jdbc没有任何关系,它是如何和数据库交互的?
2,dao类是个接口,没有实现方法,它是如何 接口.方法 就能执行xml的sql语句?
3,它是如何自动关联bean的?
带着以上三个问题开始阅读源码
打开SqlSessionFactory
发现SqlSessionFactory是个接口,有两个实现类 DefaultSqlSessionFactory和SqlSessionManager
uml类图如下
回到使用的第一步
new SqlSessionFactoryBuilder().build(reader);
所以应当找到SqlSessionFactoryBuilder
打开SqlSessionFactoryBuilder
一路跟进来到了这个地方
实例化了XMLConfigBuilder一个并返回了DefaultSqlSessionFactory实例
、
因此
SqlSession sqlSession = sqlSessionFactory.openSession();
userDao interObject=sqlSession.getMapper(userDao.class);
执行的是DefaultSqlSessionFactory的行为
继续打开XMLConfigBuilder
发现XMLConfigBuilder继承自BaseBuilder
暂停一下,仔细观察XMLConfigBuilder继承自BaseBuilder,BaseBuilder有个参数为Configuration类型的构造方法,可是检查下子类没有Configuration类型的构造方法,而且编译器没有报错?wtf?发生了什么事?
验证一下这个想法
仔细阅读源码,发现
ok,从这里将get到至少两个知识点
1,父类若是有有参的构造方法,那么继承的子类必须显式 super一下,若父类若是没有参的构造方法,会隐式的super
2,
this这里是什么?我们知道 this.变量,this.函数,this代表的是对象,但是在这个地方很明显对象还未创建,那么它是什么?百度查到this也可以代表引用,那么就很好解释了,这里的this表示本类的引用,进入testA();又去引用testA(String name, String pass);按照这个猜想testA(),引用完仍会执行下面的代码。试一下
猜想正确