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. ...
随机推荐
- Matlab quad
1x3−2x−5dx, (from 0 to 1) write a function myfun that computes theintegrand: function y = myfun(x) y ...
- angular 2 - 003 typescript
http://www.typescriptlang.org/docs/index.html var book: string = "hellp angular 2"; var nu ...
- 一步步教你轻松学K-means聚类算法
一步步教你轻松学K-means聚类算法(白宁超 2018年9月13日09:10:33) 导读:k-均值算法(英文:k-means clustering),属于比较常用的算法之一,文本首先介绍聚类的理 ...
- hdu 3555 Bomb ( 数位DP)
Bomb Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Subm ...
- PHP类中self和$this的区别
1.self代表类,$this代表对象2.能用$this的地方一定使用self,能用self的地方不一定能用$this静态的方法中不能使用$this,静态方法给类访问的. 今天在使用静态方法的时候,使 ...
- Linux: Linux C 获取当前系统时间的时间戳(精确到秒、毫秒、微秒) gettimeofday
说明 获取当前的时间的秒数和微秒数本方法需要用到 gettimeofday() 函数,该函数需要引入的头文件是 <sys/time.h> . 函数说明 int gettimeofday ...
- 【原创 Hadoop&Spark 动手实践 13】Spark综合案例:简易电影推荐系统
[原创 Hadoop&Spark 动手实践 13]Spark综合案例:简易电影推荐系统
- ubuntu设置分辨率
前言 装过ubuntu的虚拟机人应该都知道,刚刚装完系统时,分辨率小的令人发指,根本就不能愉快的使用,所以必须调整,但是有些分辨率ubuntu里面也没有,这就需要我们自己自定义. 自定义分辨率 1. ...
- golang:iconv
最近在做邮件解析的工作,遇到需要转字符集编码的情况,go官方好像没有提供这样的库,于是从github上找了一下. https://github.com/qiniu/iconv 开发环境: linux ...
- 【Java】设计模型-五种单例模型
一. 什么是单例模式 只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计. 单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在. 单例模式有很多好处,它能够 ...