OOD之问题空间到解空间—附FP的建模
通常会被问到,什么事OOD,然后大部分人期待的答案比较死板,继承、封装、多态!懂这个的人多的去了,有什么好问?回答出来的人是否拿着Java又去做一些面向过程的勾当?
计算机革命起源于机器,因此编程语言的产生始于对机器的模仿;因为机器只认得0和1,所以所有的编程语言都得提供一种抽象机制,人们解决问题的复杂性取决于抽象的类型和质量,汇编语言就是对机器码的轻量级抽象,然后像C一样的“命令式”语言是对汇编的抽象;人们为了让计算机去解决问题就需要用这些语言,本质是在把问题基于计算机的抽象结构给出解决方案,这里涉及问题空间和解空间这两个元素:
第一:问题空间
现实世界存在的问题,需要解决,具有其问题的结构特征;特征可以理解为现实世界的模拟抽象;始于人类对自然界分解,组织成的各种概念和关系;因此符合人类的思维方式,容易被人类理解;
第二:解空间
计算机的结构构成的空间,是问题最终得以处理为结果的地方,解空间的每一个解也是人类组织创建,但思想出发点是计算机的比较底层的抽象所组织的,可以认为,这类抽象结果,是一种基于计算机的建模过程;第一段提到面向过程的勾当,就是用高级过程语言抽象的思维去解决问题;因此不可否认,Java也是需要过程性元数据的;
面向对象:
因此,基于解空间,以计算机思维解决问题这类操作是费时费力的,而面向对象就是一种特别的只针对待解决问题的建模;我们将问题空间的元素及其在解空间中的表示称之为:“对象”,这意味着,程序员不仅仅拥有计算机的元类型去解决问题,而且能自定义类型,我们称之为类,它是对象的抽象;有了新类型后,也意味着,计算机允许根据问题来描述问题;而不是根据运行解决方案的计算机来描述问题,这点是关键所在;就好比每个对象是一台微型计算机,它是有状态的,还具有操作;
顺便提一下,每一个对象,都需要接受请求来完成任务,一些对象只能满足某些请求,这些请求是由对象的接口所定义,决定接口的叫类型,这些接口都有一个方法与之关联,当向对象发送请求时,方法就会被调用,此过程通常被概况为:向对象“发送消息”(产生请求),通过发生消息,对象就通过方法知道此消息的目的,然后执行对象行为;在代码表现:需要有对象的引用,声明对象的名称,然后用一个圆点连接消息请求;
每一个对象都提供服务:
当试图开发或理解一个程序设计时,最好的方法之一就是将对象想象为服务提供者,程序本身向用户提供服务,它通过调用其他对象提供服务达到这一目的,你的目标就是去创建能提供理想的服务来解决问题的一系列对象;将对象当做是服务提供者还有一个好处就是:内聚性,内聚性是软件设计的基本质量要求之一,这意味着一个软件构件组合的非常之好,
、、、、待续 5.23
OOD之问题空间到解空间—附FP的建模的更多相关文章
- Qt与FFmpeg联合开发指南(二)——解码(2):封装和界面设计
与解码相关的主要代码在上一篇博客中已经做了介绍,本篇我们会先讨论一下如何控制解码速度再提供一个我个人的封装思路.最后回归到界面设计环节重点看一下如何保证播放器界面在缩放和拖动的过程中保证视频画面的宽高 ...
- AOP技术应用和研究--AOP简单应用
为了更好的理解AOP实践和体现AOP的优势.我们始终将OOP和AOP的比較贯穿到下文中.并在终于总结出AOP与OOP相比所拥有的长处,AOP的缺点以及AOP一般的使用场景. 1.1 问题空间到解空间的 ...
- 201671030108后新莉+实验十四 团队项目评审&课程学习总结
项目 内容 这个作业属于哪个课程 代老师博客主页 这个作业的要求在哪里 实验十四 团队项目评审&课程学习总结 作业学习目标 (1)掌握软件项目评审会流程:(2)温故知新自己的所得:(3)反思总 ...
- FP树(附)
Apriori算法和FPTree算法都是数据挖掘中的关联规则挖掘算法,处理的都是最简单的单层单维布尔关联规则. 转自http://blog.csdn.net/sealyao/article/detai ...
- OpenGL阴影,Shadow Volumes(附源程序,使用 VCGlib )
实验平台:Win7,VS2010 先上结果截图: 本文是我前一篇博客:OpenGL阴影,Shadow Mapping(附源程序)的下篇,描述两个最常用的阴影技术中的第二个,Shadow Volu ...
- wpf 模拟3D效果(和手机浏览图片效果相似)(附源码)
原文 wpf 模拟3D效果(和手机浏览图片效果相似)(附源码) pf的3D是一个很有意思的东西,类似于ps的效果,类似于电影动画的效果,因为动画的效果,(对于3D基础的摄像机,光源,之类不介绍,对于依 ...
- 快速双边滤波 附完整C代码
很早之前写过<双边滤波算法的简易实现bilateralFilter>. 当时学习参考的代码来自cuda的样例. 相关代码可以参阅: https://github.com/johng12/c ...
- python德国信用评分卡建模(附代码AAA推荐)
欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章 python信用评分卡建模视频系列教程(附代码) 博主录制 https://study.163.com/course/i ...
- Asp.net MVC - 使用PRG模式(附源码)
阅读目录: 一. 传统的Asp.net页面问题 二.Asp.net MVC中也存在同样的问题 三.使用PRG模式 四.PRG模式在MVC上的实现 一. 传统的Asp.net页面问题 一个传统的Asp. ...
随机推荐
- 国际化之Android设备支持的语种
昨天发了关于iOS支持的语种,文章最后也补了安卓支持语种列表.但最后发现安卓设备支持跟它列的有出入,我重新完全手工整理了一遍. 我将对应的语种在安卓的语言列表里的显示,也全部逐一列出来了,方便大家到时 ...
- protobuf语法指南
遇到proto编译问问,看看proto语法,记录一下 protobuf3 语法指南 http://colobu.com/2017/03/16/Protobuf3-language-guide/ htt ...
- jquery 多级联动下拉列表含(数据模型)
方法 /** * 级联 * 联动 * @param url:访问json数据的地址 * @param param:参数 * @param levelIds:页面下拉标签数组,为联动级数 * @priv ...
- PHP 使用POST 获取不到部分数据问题
使用PHP开发的一个项目,在测试阶段客户反馈说数据没有保存成功 而我之前测试是通过的,但按客户的信息上却重现了问题 问题是这样的 客户通过浏览器进行保存,但有些数据已经保存成功,但某些数据却没有保存成 ...
- notepad++使用收集
一. 列编辑: 按住alt+鼠标纵向选中:alt+shift+箭头纵向或者横向选中. 列块编辑(编辑->列块编辑),实现跨步增加数字写入或者补0写入. 二. 多行变一行: 1.按Ctrl+F,弹 ...
- iostat各字段的来源和真实含义
The primary tool for inspecting Linux disk performance is iostat. The output includes many important ...
- POSTMAN模拟AJAX请求
环境: 1.测试工具:POSTMAN 2.调试框架:THINKPHP 3.开发工具:PHPSTORM 需求: 1.判断HTTP提交过来的请求是否为AJAX: 是:进行,修改.新增 否:进行查询,并返回 ...
- [转]正则表达式的先行断言(lookahead)和后行断言(lookbehind)
正则表达式的先行断言和后行断言一共有4种形式: (?=pattern) 零宽正向先行断言(zero-width positive lookahead assertion) (?!pattern) 零宽 ...
- 微表面分布函数(Microfacet Distribution Function)确切含义
<Physically-Based Shading Models in Film and Game Production>中说:“D()的值不局限于0到1,可以任意大”,这句话使我比较好奇 ...
- 使用protobuf编译onnx.proto过程中的一些问题总结
使用git clone下载protobuf的源代码,然后git checkout到branch2.7.0: 编译protobuf,先在代码顶层目录执行./configure,然后执行make,成功后执 ...