在面向对象软件开发中抽象是最基本的方法,抽象到底是什么呢?抽象和接口有什么关系呢?在这里谈谈自己的看法。
抽象的过程也是一个裁剪的过程,不同的、非本质性的特征全部裁剪掉了,即就是抽取事物的共同特征就是抽取事物的本质特征,舍弃不同特征。如:商场中有面包、洗发水、纸杯等,它们在商场交易中共同的特性就是具有价格的商品,忽略其使用价值和使用方法,得出商品概念的过程,就是一个抽象的过程。
面向对象软件开发的起点就是抽象建模过程,即就是识别参与问题领域的实体,并对其进行抽象,此时并不考虑具体的实现细节,仅给出该对象应该具备的功能即可,也就是形成接口或抽象类。
举个例子:房屋装修是业务领域要解决的问题,需要改水电、铺地砖、墙面处理等工作内容。如果用面向对象的思想考虑家庭房屋装修问题,不再关注整个流程的执行过程,我们可以抽象出水工、电工、瓦工和漆工几个对象,定义出各个对象应该具备的技能,如瓦工具有铺砖、水工具有刻槽子、铺线管的方法即可,此时并不关心该技能是如何实现的,此时抽象出来的结果就是接口或抽象类;这样做出的装修方案是稳定的。
水工甲具有刻槽子、铺线管技能,瓦工乙具有铺砖技能,则水工甲、瓦工乙就是实现了接口(继承了抽象类)的具体类。装修开始选择水工甲和瓦工乙施工,后发现瓦工乙的铺砖工艺和选择的瓷砖不匹配,可以轻松的将瓦工乙换成给符合条件的瓦工丙,对施工工期和装修方案不会产生影响。
老子讲:“一生二,二生三,三生万物”。系统的稳定体现在抽象类,系统的变化体现在具体类。抽象类的层次要高于具体类。 系统因抽象而稳定,因具体而生动多变
抽象过程还在于创造性,问题领域中对象并不是现实世界已经存在的对象,需要软件设计人员进行抽象加工得到的。如:mybatis中SqlSession和SqlSessionFactory都是程序设计人员抽象出来的结果。又如:商城系统中商品结算程序的设计,优惠卷、会员折扣、促销活动等都会参与到结算中来,此时可以抽象出来优惠卷、会员、促销活动三种类,优惠卷用来判断是否可用、会员计算会员折扣、促销活动用于计算减免金额等。会员有铂金卡会员、金卡会员、普通会员均实现会员接口;促销活动有满减活动、打折活动实现促销活动接口形成一个个具体的类,满足系统复杂多变的特性。

面向对象程序设计中对抽象的理解相关推荐

  1. 面向对象程序设计中“超类”和“子类”概念的来历

    众所周知,在面向对象程序设计中,子类从超类中继承数据成员和成员方法,然后在此基础上再根据实际需要进行扩展并增加属于子类的数据成员和成员方法.也就是说,子类的对象比超类的对象具有更加丰富的属性,或者具有 ...

  2. java里面比较重要的东西_Java面向对象程序设计中很重要的一些东西

    面向对象具有多方面的吸引力.对于管理人员,它实现了更快和更廉价的开发与维护过程.对于分析与设计人员,能生成清晰.易于维护的设计方案.对于程序开发人员,对象的理解又是如此浅显.此外,面向对象的工具以及类 ...

  3. Java面向对象基础接口和抽象的理解

    第一,抽象类: 我们都知道,在面向对象的领域中,一切都是一个对象,所有的对象都是用类来描述的,但不是所有的类都是用对象来描述的.如果一个类没有足够的信息来描述一个特定的对象,并且需要其他特定的类来支持 ...

  4. Python面向对象程序设计中对象析构方法的调用时机

    开学第一课:一定不要这样问老师Python问题 中国大学MOOC"Python程序设计基础"第6次开课时间 董付国老师Python系列教材推荐与选用参考 ============= ...

  5. c#面向对象程序设计——类的抽象

    7.1类的抽象: 在面向对象思想中,所有的对象都可以通过类来描述.但并不是所有的类都是用来描述对象的,如果一个类中没有包含能够描述具体对象的信息,那么就称其为抽象类. 语法: abstract cla ...

  6. 面向对象编程中多态的快速理解

    1,函数重写回顾: 父类中被重写的函数依然会继承给子类: 子类中重写的函数将覆盖父类中的函数: – 重写父类当中提供的函数是因为父类当中提供的这个函数版本不能满足我们的需求,因此我们要重写: – 期望 ...

  7. Python面向对象程序设计中属性的作用与用法

    公开的数据成员可以在外部随意访问和修改,很难保证用户进行修改时提供新数据的合法性,数据很容易被破坏,并且也不符合类的封装性要求.解决这一问题的常用方法是定义私有数据成员,然后设计公开的成员方法来提供对 ...

  8. java面向对象程序设计第三版_JAVA面向对象程序设计之创建型设计模式

    [本文详细介绍了JAVA面向对象程序设计中的创建型设计模式,欢迎读者朋友们阅读.转发和收藏!] 1 基本概念 1.1 什么是设计模式 设计模式( Design pattern )是一套被反复使用.多数 ...

  9. OOP_面向对象程序设计概述

    李际军老师"面向对象程序设计"课程第一课笔记整理 面向对象程序设计概述 20世纪90年代以来面向对象程序设计(Object Oriented Programming, 简称OOP) ...

最新文章

  1. 2018.12.15 bzoj3676: [Apio2014]回文串(后缀自动机)
  2. 报名 | 腾讯组织的区块链技术沙龙,本周六在深圳!
  3. Oracle中SQL语句学习五(统计分组语句group by和having)
  4. Linux内核代码风格
  5. fsk调制解调实验报告 matlab,基于MATLAB的-FSK调制与解调-通信原理实验
  6. 王者荣耀回应服务器崩了:已处理完成 将陆续补发相应赔偿
  7. FeiQ(飞秋)更新用户列表的原理
  8. Linux下的编曲软件,MuseScore(免费作曲编曲软件) V3.0.1 Linux版
  9. 矩阵乘法 算法训练 试题_计算方法练习题及答案汇总(共八套).docx
  10. MIUI 13 去除输入法广告
  11. 银行爱“IOE”爱得有多深
  12. codelite开发php,CodeLite环境搭建
  13. ARM芯片内部堆栈的理解及MAP文件的查看
  14. 全景krpano相关问题解答
  15. 好玩的WPF第二弹:电子表字体显示时间+多彩呼吸灯特效button
  16. 命令行修改文件md5
  17. android studio 根目录,AS 根目录结构说明
  18. gorilla/mux的使用
  19. 我看到西电通院考试——学生应该做的事情?
  20. 基于PaddleSeg实现眼底血管分割——助力医疗人员更高效检测视网膜疾病

热门文章

  1. wilcoxon rank sum test R代码
  2. LaTex\TexStduio设置参考文献Bibtex
  3. WPS--world使用格式刷
  4. nc63文件服务器,nc命令传输文件
  5. native聊天界面 react_ReactNative 聊天 App 实战|RN 仿微信界面群聊|朋友圈
  6. HTML制作手风琴效果,纯js+html和纯css+html制作手风琴效果,css手风琴
  7. Linux进程管理四大工具ps \dstat\ top\ htop
  8. Win2003 Server磁盘配额揭密之删除篇
  9. 洛谷P1463 - 反素数
  10. app逆向--美图秀秀sig参数