当前位置: 首页 > news >正文

ADT与类的设计

ADT与类的设计

 

个人对ADT的理解是,我们编程时可以从系统任意一个层面去思考,我们可以把精力集中在某一层面的逻辑而不需要过多的考虑底层(相对来说)的实现细节。例如做一个贪吃蛇,我们不需要去关注链表的插入和删除的操作(或者数组元素的操作),我们只需要关心吃食物,随即食物,增长蛇身的操作等。

ADT与类的设计。类的接口应该展现一直的抽象层次,如果一个类包含了多个ADT那么就应该考虑对这个类进行重新设计(如果已经开始实现功能就应该考虑开始重构它!),因为一个业务逻辑层的类是不该包含对数据库的操作的。接口展现一致的抽象,也是类设计的一个原则。

         提供成对的服务。例如开灯,关灯。打开菜单,关闭菜单。获得长度,设置长度等等。

         把不相关的信息转移到其他类中。一个类的职责要单一,不该做很多类的事情,只能做一类事情。一个类也不应该对另一个类过多的依赖(除非这个类完全是一个proxy),应避免把两个类混在一起使用。

         针对接口编程。 编程中更多的应该考虑当前类(或方法)应该做的事和不该做的事情,把自己该做的事情做完做好就ok,应该信任另一个类为你做的事情。任何时候,也不应该为了实现一个功能而实现它,每一个功能的实现,都是为了完成我们设计时,分配给这个类的任务,它有职责完成这些任务,并有义务给其他类提供一致的抽象。类之间也需要“团队合作”。另外,一个类不应过多的了解另一个类。比如调用一个方法,是不应该知道先调用A才能调用B的细节的,一切都应该封装起来,隔离变化,降低每个类(和方法)的复杂度。通常,当你发现自己需要查看类的内部实现来得知如何使用这个类的时候,你就不是在针对接口编程了。透过了接口编程的话,封装性就被破坏了,抽象能力也遭殃了。

         同时考虑抽象和内聚。高内聚的类通常具有很好的抽象,很好的抽象通常也会聚会很高的内聚性。如果发现内聚性不够,就应该问问自己,这个类是否做了不该做的事情,是否展示了一致的抽象。

         展现一致的接口也可以提高代码的可读性。

         不知如何使用一个类时,不是去查看它的内部实现,而是找到这个类的作者,告诉他你不知道如何使用这个类,他check out出来,修改这个类以及其接口,然后告诉你,“你现在知道如何使用它了。”

 

 

 


相关文章:

  • Symbian下stl::String类中Find算法的实现
  • 关于软件设计的一点思考
  • 使用DataGrid中扩展ItemRenderer和HeaderRenderer进行操作
  • 关于软件架构的一点思考
  • 在推广单元测试过程中发现的雷人问题
  • JAVA开发环境配置---JDK的安装与配置
  • Java与C#的垃圾回收机制
  • 在UltraWebGrid单元格中绑定WebNumericEdit或其它可编辑控件
  • 正确编写概要设计...
  • HTML5 本地存储DEMO ---localStorage
  • 倘不能独善其身,何谈兼济天下——外企是?
  • 下载和安装jadclipse
  • java中使用protobuf序列化(反序列化)
  • 《软件开发的边界-管理成功的项目》
  • 二叉排序树与二叉堆
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • Apache Zeppelin在Apache Trafodion上的可视化
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • iOS | NSProxy
  • JS笔记四:作用域、变量(函数)提升
  • JS基础之数据类型、对象、原型、原型链、继承
  • JS学习笔记——闭包
  • Python十分钟制作属于你自己的个性logo
  • Transformer-XL: Unleashing the Potential of Attention Models
  • underscore源码剖析之整体架构
  • uva 10370 Above Average
  • webpack+react项目初体验——记录我的webpack环境配置
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 责任链模式的两种实现
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • 数据可视化之下发图实践
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • #NOIP 2014#Day.2 T3 解方程
  • %@ page import=%的用法
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (多级缓存)多级缓存
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (推荐)叮当——中文语音对话机器人
  • (已解决)什么是vue导航守卫
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net CF下精确的计时器
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .net知识和学习方法系列(二十一)CLR-枚举
  • [Android Pro] android 混淆文件project.properties和proguard-project.txt
  • [Android] 修改设备访问权限
  • [Android]Tool-Systrace
  • [C++]高精度 bign (重载运算符版本)
  • [CSAWQual 2019]Web_Unagi ---不会编程的崽
  • [dart学习]第四篇:函数
  • [Docker]十二.Docker consul集群搭建、微服务部署,Consul集群+Swarm集群部署微服务实战
  • [HTML]Web前端开发技术28(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页
  • [IE编程] IE 是如何决定Accept-Language 属性的