面向过程的软件开发通过非常集中化的控制机制来分解功能,在程序设计中表现就是大量的条件判断,深层次的循环嵌套等. 这种模式下,我们可以通过分析方法的参数,局部变量及其访问的全局变量来得到方法对数据的依赖性,但是我们只有分析整个项目代码才能得到数据对方法的依赖性. 面向对象的软件开发主要关注在非常分布的环境中分解数据以及同数据相关的功能.通过高内聚(数据与其相关行为的高度融合)和低耦合(实体之间的相互隔离)来 实现功能的分布,典型表现就是不需要过多的条件判断以及深层次的循环嵌套等. 这里我们可以通过…
3.7 从设计中取出不需要的类 只有Get/Set方法的类不算是一个必要的类,Get/Set方法也不算是有意义的行为.这种类降级为属性更加合适. 3.8 去除系统外部的类 如果一个类只调用系统领域的方法,而系统没有向该类调用,则可以认为这个类并不属于系统.可能只是系统的使用者,我们没必要去为此建模.     创建此类时应该问一问“这个类在系统内做什么事情?” 3.9 不要把操作变成类. “我需要一个做...事情的类”,如果有这种想法,请先认真斟酌.这个类真的代表了某个关键抽象概念吗? 名字是动词…
4.7 类包含的对象数目不应当超过开发者短期记忆数量,这个数目通常应该是6左右 4.8 让系统在窄而深的包含体系中垂直分布 假设有如下两份菜单: 正餐 --->甜瓜 --->牛排 --->土豆 --->豌豆 --->玉米 --->馅饼 或者 正餐 --->甜瓜 --->牛排套餐 --->牛排 --->配菜--->豌豆 --->土豆 --->玉米 --->馅饼 对使用者来说,哪种更科学呢? 回答1或者回答2都是错的,面向对象…
4.5 如果类包含另一个类的对象,那么包含类应当向被包含的对象发送消息(调用方法).  也就是说,所有的包含关系都应当是使用关系. 如果不是这样,那么包含的类有什么用处呢?当然,面向过程的开发人员会想到可能有一个Get方法供其它类使用这个包含的对象,那么按照“数据隐藏原则”,为什么 不让使用包含类的类直接包含被包含的这个对象呢? 包含一个对象一定是需要使用它才包含. 比如说汽车包含了发动机,如果违背这条原则的话则定义如下: class 汽车 { 发动机 m_发动机; 发动机 Get发动机(){r…
4.9 在实现语义约束时,最好根据类定义来实现.但是这经常会导致泛滥成灾的类,在这种情况下约束应当在类的行为中实现,通常在类的构造函数中实现,但不是必须如此. 还是以汽车为例,我们看汽车的定义,为了集中注意力,先只关心汽车的发动机 class 汽车 { 汽车(发动机 para) { m_发动机=para; } 发动机 m_发动机; } class 发动机{...} 我们可以定义奥迪A6,凯梅瑞等等汽车 class 奥迪A6:汽车{......} class 凯梅瑞:汽车{......} 同样我们…
4.6 尽量让类中定义的每个方法尽可能多地使用包含的对象(即数据成员) 这其实就是高内聚的翻版强调.如果每个类的情况并非如此,那很可能是这一个类表示了两个或更多的概念,记住一个类只应该表示一个概念. 最明显的情况就是类的一半方法使用了一半的数据成员,而另一半方法使用了另一半的数据成员,那么这个类就应该一分为二. 我们假设一个澡堂,有VIP客户和普通客户,各自有不同的服务(普通客户享受中专生服务,VIP客户享受大学生服务),则定义如下: class 澡堂 { stack<中专生> 普通服务员;…
4.1 尽量减少类的协作的数量,即减少使用者和被使用者的数量. 协作意味着一定程度的耦合,但是完全没有协作的类也是没有意义的,最多只能作为一个库使用. 通过抽象,依赖接口,可以最大程度减少依赖的实现类,对使用者来说,只看到接口的依赖,而具体的实现的依赖可以通后后期绑定来配置依赖关系. 如 菜单 ----〉牛肉 ----〉羊肉 ----〉鸡肉       可以抽象为 菜单---->肉类 <===牛肉                       <===羊肉                 …
使用关系 对象A的方法MethodA使用了B的方法MethodB,则表示A对B存在使用关系 使用关系的最关键问题在于,A如何找到B,存在6种方案 方案一: A包含了B,B作为一个成员定义在A的类中,那么在MethodA中可以直接调用B.MethodB() 如汽车可以包含车轮. 如果汽车需要加油,那么就需要调用"加油站B.加油()" class 汽车 { 加油站 m_加油站; 加油(...) { //调用某加油站的加油方法 m_加油站.加油(); } } 那么关键问题在于,汽车如何知道加…
一,继承只应被用来为特化层次结构建模 实际上也就是要满足LSP原则,水果类<-榴莲的继承是特化   二,派生类必须知道他们的基类,基类不应当知道他们的派生类   复用的前提   三,基类中的所有数据都应该是私有的,不要使用保护数据(方法不在此原则约束下)    数据封装,物体的重量看起来可以用一个保护数据来表达,而不是get/set方法,但是考虑其他星球上,那么重量的应该实现为质量*加速度的时候呢?   四,理论上,继承层次越深越好    继承越深,意味着复用的功能越多   五,如果没有合适的可…
一个对象一定会有如下4个属性: 1,它的身份标示,可能只是它在内存中的地址; 2,它的类的属性(通常是静态属性)和这些属性的值(通常是动态的); 3,它的类的行为(从实现者的角度看); 3,它的公开接口(从用户的角度看). 2.1 所有数据都应该隐藏在它所在的类内部. 考虑最简单的点Point类(X,Y),再考虑可能点的实现是用的极坐标,那么是否该领悟到这一点了?   2.2,类的使用者必须依赖类的公共接口,但类不能依赖它的使用者.     房子可以依赖闹钟,但是闹钟不能依赖房子,否则这个闹钟就…
1.将主功能看成一个巨大的结构: 2.将切面注入的交叉业务看成是一组结构修改的注册:目标对象+方法是修改的键值: 3.Aspects引擎是修改的执行者.记录者.和维护者: 4.函数和方法是它操作和面对的数据单元: 5.结构的修改通过isa动态代理机制实现代理转发,通过消息转发机制实现重定向: AspectInfo:修改键信息: AspectIdentifier:修改参量信息: AspectsContainer:基于类和方法名的修改记录信息: AspectTracker:基于类的继承层次的修改记录…
1.面向过程-----> 面向对象 面向过程:面向的是完成这件事儿的过程,强调的是完成这件事儿的动作. 把大象塞进冰箱里1.打开冰箱门2.把大象塞进去,亲下大象的屁股3.关闭冰箱门 孙全 瘦小 矮  小屌丝孙全踩着小板凳打开冰箱门孙全找翟盼盼帮忙把大象塞进冰箱里,孙全踩着板凳去亲.孙全踩着板凳关闭冰箱门 翟XX  190cm  非常大力气1.翟自己就能打开冰箱门2.翟自己将大象塞进冰箱里,翟可以自己亲一下.3.翟自己关闭冰箱门 如果我们用面向过程的思想来解决这件事儿,当执行这件事的人的不同的时候…
Vehicle 一个车辆的虚基类 class Vehicle {public: virtual double weight()const = 0; virtual void start() = 0; virtual Vehicle* copy() = 0; virtual ~Vehicle() {};}; 衍生出RoadVehicle AutoVehicle两个类 如果有一个停车场类 可以容纳100辆车 一开始计划 有Vehicle[100]这种变量来表示停车场 但是Vehicle是虚基类 不能…
1. 面向过程与面向对象的优劣 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可. 缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身. 应用场景:一旦完成基本很少改变的场景,著名的例子有Linux內核,git,以及Apache HTTP Server等. 面向对象的程序设计的核心是对象(上帝式思维),要理解对象为…
一.基本定义 (一).面向过程(procedure oriented programming POP) 面向过程是分析解决问题的步骤,然后用函数把这些步骤一步一步的实现,然后在使用的时候一一调用则可. (二).面向对象(object oriented programming OOP) 面向对象是把构成问题的事务分解成各个对象,而建立对象的目的也不是为了完成一个个步骤,而是为了描述某个事物在解决整个问题的过程中所发生的行为. 二.通俗理解面向过程和面向对象区别 知乎上面经典的答案(一): 面向过程…
从网上摘录了一些面向过程vs.面向对象的分析,先简单记录如下,稍后会继续整理. 为什么会出现面向对象分析方法? 因为现实世界太复杂多变,面向过程的分析方法无法实现. 面向过程 采用面向过程必须了解整个过程.每个步骤都有因果关系,每个因果关系都称成了一个步骤,多个步骤就构成了一个系统.因为存在因果关系,每个步骤很难分离,非常紧密,当任何一步骤出现问题,将会影响到所有的系统. 面向对象 面向对象会将现实世界分割为不同的单元(对象),实现各个对象,如果完成某个功能,只需要将各个对象协作起来就可以. 蛋…
1.[C++沉思录]句柄1 存在问题: 句柄为了绑定到Point的对象上,必须定义一个辅助类UPoint,如果要求句柄绑定到Point的子类上,那就存在问题了.2.有没有更简单的办法呢? 句柄使用Point*直接绑定到Point对象上(包括子类),为了保持多个句柄引用计数的一致性,使用int* 指向引用计数.3.代码如下:#include "point.h"class Handle_2{public: Handle_2():_p(new Point),_u(new int(1)){}…
1.在[C++沉思录]代理类中,使用了代理类,存在问题: a.代理复制,每次创建一个副本,这个开销有可能很大 b.有些对象不能轻易创建副本,比如文件2.怎么解决这个问题? 使用引用计数句柄,对动态资源封装,句柄包含指针,多个句柄可以指向同一个对象.复制的时候,只是复制句柄的指针.3.使用引用计数句柄,是为了避免不必要的对象复制,因此我们要知道有多少个句柄绑定到当前对象,也就是引用计数, 这样才能确定何时可以释放资源.4.需要注意的是:引用计数不能是句柄的一部分,如果怎么做,当前句柄必须知道指向同…
1.围墙里的墓碑 第一次世界大战期间,驻守意大利某小镇的年轻军官结识了镇上的牧师.虽然军官信仰信教,而牧师是天主教牧师,但两人一见如故. 军官在一次执行任务中身负重伤,弥留之际嘱托牧师无论如何要把自己葬在牧师负责的墓园中.军官去世后,牧师着手为挚友料理后事,结果在墓地问题上遇到了麻烦.天主教教会对军官的不幸表示同情,却反对把异教徒葬在天主教墓园中.没办法,牧师只好把军官安葬在墓园外紧挨围墙的地方. 很多年过去了,一个老兵回小镇看望牧师.临走时,他想起当年的战友,便请求牧师带他去军官的目前悼念.令…
本文转载:http://www.cnblogs.com/willick/p/3174803.html 1.小托蒂的悲剧 意大利小男孩托蒂,有一只十分奇怪的眼睛,因为从生理上看,这是一只完全正常的眼睛,但却是失明的. 原来,托蒂刚出生时,这只眼睛轻度感染,曾用绷带缠了两个星期.这对常人来说几乎没有人任何副作用,对刚出生的婴儿来说,大脑由于长时间没有从这只眼睛接受任何外界信息,就认为它瞎了,原本该为它服务的大脑神经组织,也随之"战略转移"了. 小托蒂的不幸遭遇并非偶然个案.后来,研究人员在…
1.小托蒂的悲剧 意大利小男孩托蒂,有一只十分奇怪的眼睛,因为从生理上看,这是一只完全正常的眼睛,但却是失明的. 原来,托蒂刚出生时,这只眼睛轻度感染,曾用绷带缠了两个星期.这对常人来说几乎没有人任何副作用,对刚出生的婴儿来说,大脑由于长时间没有从这只眼睛接受任何外界信息,就认为它瞎了,原本该为它服务的大脑神经组织,也随之“战略转移”了. 小托蒂的不幸遭遇并非偶然个案.后来,研究人员在动物身上做了很多类似的实验,发现结果都是一样的,身体器官都严格执行着“用进废退”的规则. 沉思录: 1.安逸幸福…
一.问题 javascript是面向对象的,还是面向过程的?基于对象是什么意思? 对象: 指的是对某一类事物进行抽象,抽象出这一类事物共同的特征以及行为(也就是属性和方法),那些拥有这一共同属性和方法的事物就是对象 二.分析 面向对象和基于对象的区别:引用一个例子,比如建造房子 面向对象:是先设计好图纸,然后按照这个图纸的设计去建造房子 基于对象:是先建造一个房子,然后根据房子的样子,再去建造房子 也就是说: 面向对象:是先有一个抽象的对象描述(类), 然后根据这个描述去构建新的对象(实例化对象…
面向过程 VS 面向对象 面向过程的程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式. 优点是:复杂度的问题简单化.流程化 缺点是:一套流水线或者流程就是用来解决一个问题,生产汽水的流水线无法生产汽车,即便是能,也得是大改,改一个组件,牵一发而动全身. 应用场景:一旦完成基本很少改变的场景,著名的例子有Linux內核,git,以及Apache HTTP Server等. 面向对象的程序设计:核心是对…
原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 结束了第一个hello world程序后,我们来用面向过程和面向对象两个方法来求解圆的面积这个问题,以能够更清晰的体会面向对象和面向过程. 第一,面向过程计算圆的面积 程序中我们看到一个标准输入流cin,之前我们接触过标准输出cout,我们来大概说一下这两个东西!仅供理解! cout是干什么的呢?cout是标准输出流,就是表示某某某输出到屏幕上,cout<<某某某,这个左移操作符在这里已经进行了重载,表示不同的意思,比如小溪的水流,…
Atitit. 沉思录 与it软件开发管理中的总结 读后感 1. <沉思录>,古罗马唯一一位哲学家皇帝马可·奥勒留所著 2 2. 沉思录与it软件开发管理中的总结 2 2.1. 要有自己的培训..(不要总是依靠公共图书馆) 2 2.2. 要做大架构,优先大架构 2 2.3. 各司其职 世间万物各有所用,各司其职 2 2.4. 优秀的培训不一定能造就出强大的成员...但总比没有强 2 2.5. 顺势而为,随遇而安. 2 2.6. 看穿生死,淡泊名利. 2 2.7. 保持理智,洞察世事 2 2.8…
php程序编写分为面向过程和面向对象.两者在功能实现上没有区别,但是在代码编写上区别很大,面向过程的代码很乱,不易管理,而面向对象把常用的功能封装为一个类,这样代码清楚多了. 下面举个小例子说明一下: php连接数据库: 面向过程:$conn = mysql_connect('服务器名称', '数据库登陆名', '密码') or die('连接不成功!');          mysql_select_db('库名', $conn) or die('数据库不存在!');          $qu…
昨天在阅读essential C++中看到了一个关于面向过程和面向对象的区别的例子,感觉挺好的.记录下来.... 这个例子是关于照相机的.照相机有三个性质,一个是控制位置:通常使用3个浮点数据来表示其坐标:还有一个视角方向的性质:可以使用3个浮点数据来表示其坐标:最后是一个宽高比的性质,可以使用1个浮点数据来表示. 对于面向过程而言,在编程的过程中势必要不断的在相机的抽象的性质和这7个浮点数据之间反复来回.就好比我们定义一座大楼,面向过程就是要不断在建造大楼的砖头进行打交道,这明显和现实生活的思…
相关文章:PHP的mysql扩展整理,操作数据库的实现过程分析  PHP PDO扩展整理,包括环境配置\基本增删改查\事务\预处理 介绍 mysqli是PHP程序与mysql数据库进行数据交互的桥梁,它支持面向过程和面向对象两种方式 . 面向过程方式 现在面向对象编程已经成为了主流,mysqli面向过程化的编程方式可能已经没有太多实用价值,但是通过面向对象的和面向过程两种方式实现同一段代码,对体会对象和过程两种编程思想还是很有意义,个人觉得这个比较十分有趣! 流程图: 实例: <?php hea…
/* * * title: 从面向过程到面向对象再到MVC * author: tanghao * date: 2020.9.30 * version: 1.0 * */ 前言 本文档通过一个显示2019年英雄联盟半决赛的比赛信息及队伍信息的实例,使用JSP+MySQL从面向过程编程,改写成为面向对象编程,再改写成为MVC的实现模式.利用代码系统地演示从面向过程到面向对象,再到MVC的过程.使你能够初步了解这些编程方法的基本区别一些思想方法. 参考了一篇PHP在这方面的文章. 数据库:test_…
面向过程与面向对象: 1.面向过程思想的典型栗子是C语言,C语言实现一个程序的流程是:在主函数中一步一步地罗列代码(定义子函数来罗列也是一样的道理),以此来实现我们想要的效果: 2.面向对象思想的典型栗子是Java语言,Java是一种完全面向对象的语言,它实现一个程序的流程是:事先从我们创建的对象中挑选需要的对象,让他们做出各自的行为,以此来实现我们想要的效果: 3.两者的区别:面向过程思想的耦合性强,扩展性差,这样会导致用面向过程写出来的程序相对于面向对象写出来的程序适用范围小很多:但是对于小…