行为子类型与Liskov替换原则

Java 中编译器执行的规则(静态类型检查):
• 子类型可以增加方法,但不可删

• 子类型需要实现抽象类型中的所有未实现方法

• 子类型中重写的方法必须有相同或子类型的返回值

• 子类型中重写的方法必须使用同样类型的参数

• 子类型中重写的方法不能抛出额外的异常

Liskov Substitution Principle (LSP)即Liskov替代原则

1.更强的不变量

2.更弱的前置条件

3.更强的后置条件

LSP 是子类型关系的一个特殊定义,称为(强)行为子类型化。在编程语言 中,LSP 依赖于以下限制:
• 前置条件不能强化

• 后置条件不能弱化

• 不变量要保持

• 子类型方法参数:逆变 
• 子类型方法的返回值:协变

• 异常类型:协变

泛型的通配符

无界通配符类型使用通配符(?)指定,例如 List <?>,这被称为未知类型 的列表。

委托与组合

如果你的 ADT 需要比较大小,或者要放入 Collections 或 Arrays 进行排序,可 实现 Comparator 接口并 override compare()函数。下面为具体例子

另一种方法:让你的 ADT 实现 Comparable 接口,然后 override compareTo() 方法。与使用 Comparator 的区别:不需要构建新的 Comparator 类,比较代码 放在 ADT 内部。下面为具体例子。

委派/委托:一个对象请求另一个对象的功能 。例如上面排序的例子,Sorter 委派了 Comparator 的功能。委派是复用的一种常见形式。分为显性委派:将发 送对象传递给接收对象;以及隐性委派:由语言的成员查找规则。

SC review 5.2 设计可复用软件的更多相关文章

  1. 终端复用软件 tmux

    Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权. Tmux 所使用的快捷键前缀默认是组合键 Ctrl-b(同时按下 Ctrl 键和 b 键). 技巧 ...

  2. ui设计用什么软件

    Ui设计用什么软件?作为ui设计师,你必须要熟练的使用以下几款设计软件,不然可能也无法胜任ui设计师的职位. ui设计除了要学习一些基本的操作软件,如PS AI AE AXURE 以外呢,还要学习比如 ...

  3. Unity 3D Framework Designing(4)——设计可复用的SubView和SubViewModel(Part 1)

    『可复用』这个词相信大家都熟悉,通过『可复用』的组件,可以大大提高软件开发效率. 值得注意的事,当我们设计一个可复用的面向对象组件时,需要保证其独立性,也就是我们熟知的『高内聚,低耦合』原则. 组件化 ...

  4. Unity应用架构设计(4)——设计可复用的SubView和SubViewModel(Part 1)

    『可复用』这个词相信大家都熟悉,通过『可复用』的组件,可以大大提高软件开发效率. 值得注意的事,当我们设计一个可复用的面向对象组件时,需要保证其独立性,也就是我们熟知的『高内聚,低耦合』原则. 组件化 ...

  5. Unity 3D Framework Designing(4)——设计可复用的SubView和SubViewModel(Part 2)

    在我们设计和开发应用程序时,经常要用到控件.比如开发一个客户端WinForm应用程序时,微软就为我们提供了若干控件,这些控件为我们提供了可被定制的属性和事件.属性可以更改它的外观,比如背景色,标题等, ...

  6. Unity应用架构设计(4)——设计可复用的SubView和SubViewModel(Part 2)

    在我们设计和开发应用程序时,经常要用到控件.比如开发一个客户端WinForm应用程序时,微软就为我们提供了若干控件,这些控件为我们提供了可被定制的属性和事件.属性可以更改它的外观,比如背景色,标题等, ...

  7. UI设计中的软件知识

    最近挺想学学UI的,因为我们公司没有UI,所以做页面都是全靠摸索,老是被领导说没有审美[捂脸] 学习UI所需要的软件 PS  AI Sketch XD Sketch是MAC才能安装的软件 作者:彼岸舞 ...

  8. linux 下终端复用软件推荐——tmux

    使用过些linux终端,比如Tilda.Terminator. 之前最经常用的是Terminator,其可以上下左右分屏,比较方便,但其有个缺点是经常无故崩溃. 后来遇到Tmux,根据网上的设置配置了 ...

  9. 原型设计 Axure8.1 软件注册码

    用户名:Koshy 注册码: wTADPqxn3KChzJxLmUr5jTTitCgsfRkftQQ1yIG9HmK83MYSm7GPxLREGn+Ii6xY

随机推荐

  1. sql2000-text类型数据只能看到256个字节

    工具只能看到256个字节,其实数据是完整的,可以自己写个程序取数据试一试

  2. [javaSE] 数组(排序-选择排序)

    两层嵌套循环,外层循环控制次数,内层循环进行比较 for(int x=0;x<arr.length;x++){ for(int y=0;y<arr.length;y++){ if(arr[ ...

  3. Android sdk manager 下载速度慢的问题

    不多说了,直接附上方法: 首先打开Ecplise 中Android sdk manager,打开后, 在此窗口的上方打开偏好设置选项,然后在里面设置HTTP Proxy server和HTTP Pro ...

  4. Resharper 使用帮助-自动生成文件头

    VS2012 安装完resharper 后,在resharper选项中选择 Code Editing – File Header Text . 输入自定义的文件头格式.如果需要在文件头外层添加regi ...

  5. 面向连接的传输TCP(一)

    这篇博客主要是对计算机网络自顶向上做的阅读笔记,深入地了解TCP 一.TCP连接 1.特点: a.TCP是面向连接的,因为一个进程在向另一个进程进行数据传输之前必须先要握手,即要互相发送报文,以确认信 ...

  6. Notepad++去除COPY代码行号的几种方法

    解2:打开 Notepad++,按住 Alt,鼠标点击拖出选择框,这个是列选 方法,相当拉风: 效果图如下

  7. 微信小程序--分享界面自定义图片

    一般小程序页面都会大于等于1页,每个页面右上角都会有分享功能,建议把以下方法封装到app.js文件,在页面直接调用该方法,避免重复代码,提高性能.(代码用到ES6语法,若不支持,请自行还原js) // ...

  8. linq中如何实现多个条件的联合查询

    目前接触处理数据这一块比较多,在处理内存中的数据源的时候我一般使用的是linq,linq使用起来像sql语句一样,用法简单,功能强大. 最近需要实现一个从两个不同的文件读取不同的数据,然后根据这两个数 ...

  9. centos文件基本操作

    centos彻底删除文件夹.文件命令(centos 新建.删除.移动.复制等命令: 1.新建文件夹 mkdir 文件名 新建一个名为test的文件夹在home下 view source1 mkdir ...

  10. setTimeout OR setInterval?

    setTimeout 和setInterval从字面上应该是可以知道其大意的.timeout:延时:interval:间隔: 两者的区别就像是它们自己的英文解释一样:setTimeout是延时执行,并 ...