行为子类型与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. JDK动态代理[3]----WeakCache缓存的实现机制

    上一篇我们分析了Proxy类的内部是怎样产生代理类的,我们看到了Proxy内部用到了缓存机制,如果根据提供的类加载器和接口数组能在缓存中找到代理类就直接返回该代理类,否则会调用ProxyClassFa ...

  2. Head First Python学习笔记3——持久存储

    经过上几章的学习,完成如下任务:读取一个文本文件里的内容,将每一行的内容按“:”分割成两部分,根据分割出第一项判断并分别放入两个列表里,去除首尾空白,在屏幕上打印. # 两个列表用于存储数据man=[ ...

  3. AVFoundation-视频录制以及拍照

    一般如果UI和UE在设计时只要求功能,对相机界面没什么要求的话,个人觉得调用系统相机(UIImagePickerController)就可以满足我们的需求比如照相或者录制视频,但是考虑界面美观性,有时 ...

  4. linux总结之find搜索文件(times 3)

    个人原创,转自请在文章头部显眼位置注明出处:https://www.cnblogs.com/sunshine5683/p/10091341.html find命令的各种搜索 一.根据文件名进行查找 命 ...

  5. Oracle-检查原因并重新编译无效的存储过程

    1.查看存储过程编译无效的原因 show errors procedure hr.getperson; 2.指定一个存储过程进行编译 alter procedure  hr.getperson com ...

  6. cakephp引入其他控制器封装方法

  7. mysqli 更新&插入操作及事务

    $mysqli = new mysqli('localhost', 'root', '1234', 'shop'); $query1 = " update sw_goods set good ...

  8. CentOS7.4 + Ambari 2.6.1.5 + HDP 2.6.4.0 安装部署

    1. 参考说明 参考文档: https://docs.hortonworks.com/HDPDocuments/Ambari-2.6.1.5/bk_ambari-installation/conten ...

  9. AE中IHookHelper的用法 来自http://blog.sina.com.cn/s/blog_6faf711d0100xs1x.html

    IHookHelper 主要在用在自定义类型于AE带的的ICommand或ITool等, 1.实例化IHookHelper 对象: IHookHelper m_hookHelper = new Hoo ...

  10. 自定义标签+阻尼动画+圆角图片+titleBar随滑动渐隐和显示

    写这个小Demo,也是因为刚好手里没什么事然后看到很多朋友还在好奇这个阻尼界面效果,还有自定义标签,其实这个标签因为现在Google已经有推出更好使用的东西可以替代,那就是“FlexboxLayout ...