1. 面向对象的世界观里,类有两种职责:数据职责和行为职责,这两种职责并存于类中。
  2. 类和对象都是职责的体现,不同的是一个抽象一个具体。
  3. 面向对象编程是有职责的对象之间的协作。
  4. 不同的视角:结构化方法→行为视角、数据为中心方法→数据视角、面向对象方法→职责视角。
  5. 想要解决一个问题,我们会希望在问题空间找到一种建模的方式,然后将问题空间的问题转化为解空间的答案。
  6. 对象是一种建模方法,它既表示客观世界的问题空间中某个具体的事物,又表示软件系统解空间的基本元素。
  7. 没有行为的类,可以被设计为某个其他类的属性。
  8. 类是描述相同事物的集合,它以概要的方式描述了相同事物集合中的所有元素,但却允许类中的每个实体元素可以在非本质特征上变化。
  9. 为什么不要重复造轮子?因为轮子的设计已经足够应对变更了(疯狂暗示软件复用)。
  10. 代码提交前必须进行单元测试。单元测试针对于软件设计的最小单位方法展开正确性检验。
  11. 单元测试有两种情况:独立且与其他方法无关(独立测试即可);半独立且只与同类中的方法有依赖关系(先测被依赖的方法)。
  12. 一种好的类设计方案:
  13. 封装可以将将潜在的变更与外界隔离开来。
  14. 封装具有三原则:将数据与操作数据的行为放在一起;用职责驱动的设计原则来决定数据和行为在一起;职责要具有完备性。
  15. 关于类设计完备性的说明。
    完备性是一个数学上的概念,下面举例说明:
    比如我们有一个水杯,它只进水不出水就是不完备的……
    特殊情况下,设计可能不能是完备的,比如会计打发票,就算打错了,可以红冲处理掉但不可能把已发生的支付过程取消掉……
  16. 静态不能访问非静态。
  17. 一个对象的整体协议可能会分为多个内聚的逻辑行为组。划分后的每个逻辑行为组就描述了对象的一个独立职责,体现了对象的一个独立角色。如果一个对象拥有多个行为组,就意味着该对象拥有多个不同的职责,需要扮演多个不同的角色。每个角色都是对象的一个职责的体现,所有的角色是对象所有职责的体现。理想的单一职责对象应该仅仅扮演一个角色。
  18. 职责的分配原则:覆盖到所有重要的方面,寻找需要执行的动作以及需要维护和生成的信息。
  19. 单一职责的实施:当发现两变化同时要求我们修改这个类时,就要考虑拆分这个类。
  20. 一组对象共同协作履行整个应用软件的责任。
  21. 系统职责的划分可以是从小到大,将小职责聚合为大职责;也可以是从大到小,将大职责分配给小对象。自底向上和自顶向下往往是同时使用的。
  22. 对于一个对象来说,它可以与四种对象协作:它自身、任何以参数形式传入的对象、被该对象直接创建的对象、其所持有的对象引用。总结就是:一个对象可以和能拿到引用的对象协作。
  23. 面向对象程序设计的一些关系:
    一般关系:依赖
    对象层次的关系:连接、关联
    类层次的关系:继承、实现
  24. 依赖体现了一种物理关系,因为这种依赖关系不仅仅体现在类和类之间,甚至可以存在于其他的软件工程元素之间。
    我们可以说,一个类依赖于另一个类,一个对象依赖于另外一个对象,一个用例依赖于另外一个用例,一个包依赖于另外一个包,总之依赖表达了一种物理上的连接。
  25. 连接表达了对象与对象之间的一种连接,它是一种表达一种联系的具体的实例。
  26. 关联体现了对象与对象之间的一种逻辑关系,可分为:普通关联、聚合、组合。
  27. 关系的强度:依赖 < 普通关联 < 聚合 < 组合
  28. 依赖是一种“…uses a…”关系,就是某个对象的功能依赖于另外的某个对象,而被依赖的对象仅仅作为一种工具在使用,该对象不持有被依赖对象的引用。UML中依赖关系表现为[虚线+鱼骨箭头]。
  29. 关联是一种“…has a…”关系,就是某个对象会长期持有另一个对象的引用,而二者的关联往往也是相互的。关联的两个对象彼此之间没有任何强制性的约束,只要是二者同意,可以随时解除关系或进行关联,它们在生命周期上没有任何约定。被关联的对象还可以被别的对象关联,所以被关联对象是可以共享的。关联可以是单向的也可以是双向的,可以是普通关联也可以是可导航关联。
  30. 关联的多重性通过一条实线来表达,可接鱼骨箭头表示方向性。
  31. 聚合是一种“…owns a…”关系,是一种强版本的关联,它暗含一种所属关系以及生命周期关系。UML中聚合关系中间一条实线,一端是指向所有方的空心菱形,另一端是指向被所有方的鱼骨箭头。被聚合的对象还可以被别的对象关联,所以被聚合对象是可以共享的。
  32. 组合是一种“…is a part of…”关系,是一种最强版本的关联,它直接要求包含对象对被包含对象的拥有以及被包含对象生命周期的关系。UML中组合关系中间一条实线,一端是指向所有方的实心菱形,另一端是指向被所有方的鱼骨箭头。被组合的对象还可以被别的对象关联,所以被聚合对象是可以共享的,然而绝不存在两个包含对象对同一个被包含对象的共享。
  33. 组合不但把关联到的对象作为一个成员变量,并在此处new了一个对象。这一点是非常重要的。
  34. 可修改性有三重含义:狭义可修改性(对已有实现的修改不影响到其他实现)、可扩展性(对新的实现的扩展不影响到已有的其他实现)、灵活性(实现动态配置)。
  35. 继承的由来:利用泛化关系实现代码重用和抽象等。备注:泛化≠继承。
  36. 可以继承什么、可以覆盖什么:
    子类继承了父类所有的成员变量和成员方法。
    子类可以增加父类的成员变量和成员方法。
    子类可以覆盖父类的成员方法。
    子类不可以覆盖父类的成员变量。
  37. 继承是一种“…is a…”关系,“A is B, B is C → A is C”。
  38. 编译时,编译器根据引用变量的类型(而不是引用变量指向的类型)决定能否调用某个方法;执行时,JVM依据实际引用变量指向对象的类型决定实际哪个方法被调用。这就是所谓“编译时类型”和“运行时类型”的区别,即所谓“编译时类型”是我们的Java代码中定义的变量类型,“运行时类型”看的是这个对象到底是什么类型(被new成了什么),这是学习多态时必须理解的。如此,我们就对SuperClass obj = new SubClass();有了更深刻的理解。
  39. 多态通过分离“做什么”和“怎么做”,从另一个角度将接口和实现分离开来。多态不仅能够改善代码的组织结构和可读性,还能创建“可扩展”的程序,即无论在项目最初创建时,还是在需要添加新功能时,都可以进行扩充。
  40. 多态使得系统更容易理解,其作用之一就是消除类型之间的耦合关系。多态方法调用允许一种类型表现出与其他相似类型之间的区别,只要他们都是从同一基类导出来的。这种区别是根据方法行为的不同而表示出来的,虽然这些方法都可以通过同一个基类来调用。
  41. 多态的意思是多种形式,多种形式的意思是可以出现不同的计算类型,并且在运行的时候动态的确定正确的计算。
  42. 多态是指一个多个方法使用同一个名字却有多种解释,当使用这个名字去调用方法时,系统将选择重载自动的选择其中的一个方法。在多态中只关心一个对象做什么,而不关心如何去做。
  43. 子类对象可以赋给父类引用变量,父类对象不可以赋给子类引用对象。
  44. Overriding的限制:参数必须一致,返回值必须兼容,方法的可达性不能降低。
  45. 非抽象类中不可以有抽象方法,抽象类中可以有非抽象方法。
  46. 抽象方法的存在就是为了多态,具体的类必须实现所有的抽象方法,实现抽象方法就像子类覆盖父类的方法一样。
  47. 子类继承父类,就会把父类完全继承过来,二者之间存在一种规约,即父类拥有什么接口,子类也具有什么接口。父类变子类也要变;而组合的两端没有“契约”的存在,有时会显得更好。
  48. 组合和继承要注意:确保继承是一种“…is a…”的关系;使用继承不要仅仅是为了代码复用或是体现多态。
  49. 父类接口的脆弱性会给子类带来很大的麻烦。
  50. 继承的一些问题(补充向):
    (1) 我们肯定是要重写一些什么的,但如果重写一切,那父类就不该是一个类而应该是一个接口;另外,如果不使用任何继承的方法,那继承也毫无意义。
    (2) 我们不希望堆栈支持所有的父类方法,这是一个问题。
    (3) 继承的父类与子类存在共有接口的耦合性,当父类接口发生改变时,子类接口也随之改变。
    (4) 当子类创建对象的时候,就决定了其实现选择,无法实现动态的修改。
  51. 接口定义了一种规约,而类实现了一种规约。
  52. 含有继承关系的初始化:
  53. 新覆盖的方法会在对象创建之前被调用。

【Java】《基于Java的面向对象范式》学习笔记分享相关推荐

  1. Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25

    Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25 目录 Rule20 接口优于抽象类 Rule21 为后代设计接口 Rule22 接口只用于定义类型 ...

  2. Java转义工具类StringEscapeUtils的学习笔记

    Java转义工具类StringEscapeUtils的学习笔记 前言 ​ 在java.commons.lang3 的包中有许多方便好用的工具类,类似于处理字符串的StringUtils,处理日期的Da ...

  3. 面向对象程序设计·学习笔记(1/2)

    面向对象程序设计·学习笔记(1/2) 前言 第1章 类与对象 1.1 用类制造对象 1.2 定义类 1.3 成员变量和成员函数 1.4 对象初始化 第2章 对象交互 2.1 对象交互 2.2 访问属性 ...

  4. 基于Solr的空间搜索学习笔记

    基于Solr的空间搜索学习笔记 在Solr中基于空间地址查询主要围绕2个概念实现: (1) Cartesian Tiers 笛卡尔层 Cartesian Tiers是通过将一个平面地图的根据设定的层次 ...

  5. python小车行驶路线图_基于opencv-Python小车循线学习笔记

    基于opencv-Python小车循线学习笔记 加入摄像头模块,让小车实现自动循迹行驶 思路为:摄像头读取图像,进行二值化,将白色的赛道凸显出来 选择下方的一行像素,黑色为0,白色为255 找到白色值 ...

  6. 基于MVS的三维重建算法学习笔记(二)— 立体视觉的几何基础总结

    基于MVS的三维重建算法学习笔记(二)- 立体视觉的几何基础总结 声明 概述 1. 常见三维数据类型 2. 三维形状的几种表达形式 3. 三维空间刚体运动 4. 李群和李代数 5. 相机标定 6. 非 ...

  7. 基于python的数字图像处理--学习笔记(三)

    基于python的数字图像处理--学习笔记(三) 前言 一.灰度拉伸 二.幂律(伽马)变换 三.对数变换 前言 进入冈萨雷斯的第三章内容,并用python实现功能.我更改了代码源,之前找到太烂了,代码 ...

  8. 基于tiva的匿名飞控学习笔记(1)

    基于tiva的匿名飞控学习笔记(1) 开关状态任务 遥控器数据处理任务 数传数据交换 延时存储任务 开关状态任务 匿名飞控的开关状态任务为函数Swtich_State_Task(u8 dT_ms),定 ...

  9. 基于MVS的三维重建算法学习笔记(一)— MVS三维重建概述与OpenMVS开源框架配置

    基于MVS的三维重建算法学习笔记(一)- MVS三维重建概述与OpenMVS开源框架配置 声明 1. MVS(Multi-view stereo)概述 稀疏重建与稠密重建的区别 稀疏重建--SFM(S ...

  10. 基于MVS的三维重建算法学习笔记(五)— 立体匹配经典算法PatchMatch论文翻译及要点解读

    基于MVS的三维重建算法学习笔记(五)- 立体匹配经典算法PatchMatch论文翻译及要点解读 声明 问题提出 问题建模 通过PatchMatch获取平面参数--Inference via Patc ...

最新文章

  1. ubuntu快捷键收集
  2. mongodb数据库,批量插入性能测试记录
  3. Mac上设置图片或视频的默认打开软件的方法
  4. 写在随手记2亿美金融资之后,财务金融是伪命题还是真风口?
  5. 他一年写了200篇原创笔记,帮助你快速入门Python与机器学习
  6. 节后安全生产会议记要
  7. rabbitMQ概述/在springboot下测试五种模式
  8. 病毒木马查杀实战第024篇:MBR病毒之编程解析引导区
  9. 浅谈C++中的多线程(一)
  10. 信号完整性分析学习--13--IBIS模型(2)
  11. 【报告分享】2021中国消费者洞察-埃森哲(附下载)
  12. 通过置换标签的方式给数据集加噪声
  13. plot画图 python 双线_Python使用多种滤波器对脑电数据去除伪影
  14. 基于Hadoop的企业人力资源管理
  15. 华为2012机试题目及解答程序(仅供参考,版权归华为所有)
  16. 【无标题】怎么申请3A认证?
  17. python3.5权限问题
  18. 计算机与化学相关论文,计算机与化学论文写作.doc
  19. Exception in thread “main“ java.lang.NoClassDefFoundError: org/apache/velocity/context/Contex
  20. Java - JDK 安装、环境配置

热门文章

  1. 软件工程--第一周学习进度
  2. maven POM总结
  3. typecho除了首页其他大部分网页404怎么办?
  4. debian下ror新建项目报错解决
  5. 蓝桥杯第七届省赛JAVA真题----压缩变换
  6. byte[]和InputStream的相互转换
  7. 1bit和1byte_1byte等于( )bit_学小易找答案
  8. 岗位po是什么意思_劳务派遣是什么意思,劳务派遣和正式员工区别在哪
  9. linux命令行大全 笔记,《Linux命令行大全》读书笔记
  10. MySQL笔记创建表结构_MySQL表结构笔记9