![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
FISHIGUI(道法自然:面向对象设计指南读书笔记)
文章平均质量分 56
aaronlyt
这个作者很懒,什么都没留下…
展开
-
软件开发架构分析和架构模式一
架构分析:架构分析工作主要从宏观上考虑一个软件系统应该如何组织。通常,在架构分析工作中,我们需要确定一些策略性的设计方针,原则和基本模式。在它们的指导下,我们可以高屋建瓴地分析软件系统的宏观结构,认识软件系统由哪些组件构成,了解组件之间的接口和协作关系。架构分析的结果对于后续的面向对象设计工作也是一种约束,有助于消除设计和实现过程中的随意性。因此,架构分析有时也被称为策略设计组件指的是原创 2014-12-16 08:40:36 · 1532 阅读 · 0 评论 -
FishiGUI:观察者模式
观察者模式的设计意图:定义对象之间多对一的依赖关系,也即多个对象依赖于一个对象的关系,同时保证,当被依赖的对象状态发生变化时,所有的依赖者会被自动地通知。观察者模式的另一个名称是“”出版-----订阅模式“:当被依赖的对象向外发布自己的状态,而此前订阅了该状态的所有对象都会得到通知当一个对象需要通知另外一些对象,而无法预知哪些对象将被通知时,通过观察者模式就可以减弱通过对象和被通知对象之间的耦合关系当一个模块(模块A)的变化需要另外一个模块(模块B)相应的修改,而你不知道有多少个类会被修改,使用观察原创 2014-12-24 09:18:47 · 721 阅读 · 0 评论 -
FishiGUI:双向依赖--强双向依赖和弱双向依赖
强双向依赖:即在父亲类中聚合了一个孩子,而孩子类中有聚合一个父亲,首这种强双向依赖的关系不仅在现实世界根本不存在,在面向对象世界也不可能存在:“父亲有一个孩子,孩子有一个父亲”涉及到了两个命题,一个是因,一个是果,它们不能互为因果,在面向对象世界里,互为因果的代码则无法通过编译;头文件互相循环嵌入的代码也无法通过编译,这种情况类似于进程之间的死锁问题,编译器想要成功地编译父亲类,就会要求孩子类在父亲类之前被定义,而孩子类有要求父亲类咸鱼孩子类被定义---显然是自相矛盾的事情在C++语言,如果一定要实现双原创 2014-12-24 08:48:05 · 2217 阅读 · 0 评论 -
FishiGUI:全局变量和单件模式及其内存释放
全局变量的缺陷:变量名冲突:项目经理必须小心地维护变量名规则,所有工程师开发代码时,单个实例问题:全局变量不能阻止程序员定义一个类的多个对象实例,如果没有其他技术手段的帮助,保证一个类只有个类只有单个实例很困难初始化顺序:全局变量不可能保证相互之间遵循特定的初设计意图:保证一个类只有一个对象实例,并且提供一个访问该对象实例的全局访问点(不允许程序员随意创建该类的对象实例,但是可以从该类提供的静态成员函数得到该类唯一的对象实例的指针或者引用)原创 2014-12-24 10:55:33 · 856 阅读 · 0 评论 -
类与类之间的几种关系
类与类之间的几种关系(转载自http://www.cnblogs.com/liuling/archive/2013/05/03/classrelation.html)一、继承关系 继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。在Java中继承关系通过关键字extends明确标识,在设计时一般转载 2014-12-11 10:46:21 · 682 阅读 · 0 评论 -
继承树: 透明VS安全 以及类型转换
继承树的透明和安全:透明:让客户程序透明地,无障碍地访问不同层次的类,这时面向对象语言提供继承机制的主要意图,也是完全替换原则的要求。在这种方案中最高层的抽象类如图11-3中的“动物”定义了适用于所有动物的接口,其他的派生类实现相应的接口即可。透明和职责分配的冲突;透明的继承用起来方便,但是存在一些问题:首先,当继承上的动物种类非常多时,很多动物都会有自己特有的一些行为,如果我们把这些行为全部定义在最高层的抽象类中,那么“动物“这个抽象类就会异常庞大,不易扩展和维护;其次,”飞“这个职责是否应该放在最原创 2014-12-26 15:43:55 · 1054 阅读 · 0 评论 -
fishGUI:复合模式
复合模式设计意图:当一个系统中的对象需要组合成树形结构,以表示整体和部分的层次关系时,就可以使用复合模式。在继承关系的统一性和聚合关系的实用性得到了最好的结合基本结构:实现符合模式的关键是建立一个抽象类来代表所有简单对象和复合对象,使它们拥有公共的接口,系统中的简单对象和复合对象都是这个抽象类的派生类部件(Component)类:整颗继承树的抽象类,定义了整颗树中所有类的接口,其中包括管理和访问被聚合部件的接口,在这个抽象类中,可以实现一些缺省的行为,有时也需要定义访问上层部件的方法,这样可以使遍历整原创 2014-12-26 15:46:19 · 1657 阅读 · 0 评论 -
FishGUI:迭代器设计模式二-----迭代器模式
设计意图:迭代器模式提供一了一种机制,可以使我们按照一种统一的方式遍历容器中的所有的节点,而无需了解容器的内部结构,实现这一点的关键是分离容器和容器的迭代器算法;如果不使用迭代器模式:遍历容器的算法就必须在容器内部。如果用户希望使用多种方式遍历容器,容器结构就会变得非常复杂;如果用户希望在同一时刻使用两种不同的方法来遍历容器,很难在一个类中同时为多种遍历算法记录当前的节点位置基原创 2014-12-27 14:34:34 · 744 阅读 · 0 评论 -
fishGUI:迭代器模式一------单链表和双链表的设计
问题:屏幕类和窗口类都能容纳其他的对象,因此在面向对象设计阶段为它们设计了一个公共的基类---容器类。这样如果要实现保存多个对象的机制可以在容器类中直接使用双向链表,代码的复用性就大幅提高了。但是如何具体地实现这种方案,并且尽可能复合面向对象原则并且可复用性最大化?实现方案一:问题:管理链表的数据结构分散在两个类中而且还要通过共有数据成员的方式把一个类中的内部信息暴露给另一给类原创 2014-12-27 09:14:50 · 958 阅读 · 0 评论 -
分析模型
面向对象分析产生的分析模型:功能模型:把用户的功能性需求转化为开发人员和用户都能理解的一种表达方式,一般结果是用例模型对象模型:通过对用例模型的分析,把系统分解成互相协作的分析类,一般情况下,通过类图和对象图来描述系统中的所有对象,对象的属性以及对象之间的相互关系,对象模型使系统的静态模型动态模型:描述系统的动态的行为,通过顺序图和协作图来描述系统中对象之间的交互关系,解释所有对象是如原创 2014-12-12 10:14:22 · 1400 阅读 · 0 评论 -
提取实体类对象和实体类 提取属性 提取关系
设计者可以依据用例文本描述中出现的名词和名词短语来提取实体对象【abbott ,1983】另一种方法是根据预先定义的概念型列表,逐项判断系统中是否有对应的实体对象,这种方法可以作为第一种方法的补充原创 2014-12-12 10:18:12 · 7317 阅读 · 0 评论 -
软件 函数 对象耦合
耦合性(英语:Coupling,dependency,或称耦合力或耦合度)是一种软件度量,是指一程序中,模块及模块之间信息或参数依赖的程度。内聚性是一个和耦合性相对的概念,一般而言低耦合性代表高内聚性,反之亦然。耦合性和内聚性都是由提出结构化设计概念的赖瑞·康斯坦丁所提出[1]。低耦合性是结构良好程序的特性,低耦合性程序的可读性及可维护性会比较好。耦合性的分类[编辑]转载 2014-12-12 11:29:03 · 1094 阅读 · 0 评论 -
面向对象设计步骤二-------指定属性的类型和可见性,分配职责(GRASP),消息驱动,设计模式进行局部设计
增加遗漏的属性,指定属性的类型和可见性:分配职责,定义执行每个职责的方法:专家模式:创建者模式:低耦合:。高内聚:多态:纯虚构:中介者模式:不要和陌生人讲话:对消息驱动的系统,明确消息传递方式:利用设计模式进行局部设计:在面向对象设计的过程中,应该尽量使用成熟的设计模式来优化模型的局部设计:使用外观模式为适配器子系统添加一个统一的接口;通过实施观察者模式,是适配器子系统向框架层发送消息时,无需依赖于框架层的具体实现;对于系统中存在的只有唯一的对象实例的类,使用单件模式;原创 2014-12-23 08:55:14 · 1615 阅读 · 0 评论 -
面向对象设计:共性VS个性-------继承的粒度和聚合的粒度以及类的重构
共性和个性继承的粒度首先,必须基于需求来确定集成的力度,其次,对象的某些共性更适合用于属性而不是用新的基类和派生类来表达最后,要清楚,利用类和对象来模拟现实世界是手段而不是目的,我们最终的目的是最大限度的实现代码复用,提高软件质量,聚合的粒度:在UML语言中,聚合关系指的是整体和部分之间的关联关系纯粹为代码复用而存在的设计方案:在许多的实际的软件设计方案里,许多设计是纯粹为代码复用而存在的,也就是说,设计方案中的某些类无法对英语现实世界中的实际物体和关系,但是这些类的存在有助于提高代码的复用原创 2014-12-22 20:55:04 · 1099 阅读 · 0 评论 -
分层模型的典型应用和FishiGUI的分层模型
分层模式的典型应用:对于交互类型的软件也可以采用分层模式来进行架构分析,一般来说将交互性的软件分为三个层次比较合适:显示层的职责是为了显示信息,应用逻辑层封装那些一般不容易发生变化的核心逻辑,而数据持久层则用于数据处理并且把数据记录在文件,数据库等存储位置对于系统类型的软件,一般将软件分为中间层和系统层两个层次,中间层包括对话框架系统.数据管理接口以及一些与平台无关的服务,系统层则包括原创 2014-12-16 10:10:26 · 1100 阅读 · 0 评论 -
子系统设计和FishiGUI的子系统设计
目的和问题:除了依赖关系,还要规范操作系统适配层的所有接口,只要操作系统适配层的接口在移植过程中始终保持稳定,框架层的设计和实现就不会收到影响,但是为了实现同一接口的目标,为了保证同样的功能接口可以适用于不同的操作系统,必须对操作系统适配层进行更进一步的分解和细化子系统设计:子系统设计属于面向对象设计的范畴,是在面向对象分析工作结束之后进行的,对于那些相对独立却又比较复杂,不能用一个类原创 2014-12-16 11:32:56 · 878 阅读 · 0 评论 -
FishiGUI系统架构分析 和层次结构 二
FishiGUI的类型FIshiGUI属于为应用程序提供图形界面服务的框架系统,它并不直接与最终用户交互(负责与最终用户交互的是在FishiGUI基础上开发的应用程序),而是接受操作系统传来的硬件消息,完成相应的处理后,再将绘图消息发送给操作系统的图形接口,因此FishiGUI是一个系统类型的软件层体系结构:层体系结构有助于构建这样的应用:它能被分解成自任务组,其中每个子任原创 2014-12-16 09:43:37 · 1404 阅读 · 0 评论 -
需求分析的基本概念步骤和设计方案选择
设计方案选择的基本思路项目组面临两难选择时:首先用鱼和熊掌来识别矛盾的两个对立面:项目组用小鱼来比喻那些开发和维护代价较小,结构简单但是缺乏某些灵活性的设计方案,用熊掌来比喻那些灵活易扩展但是结构复杂,开发和维护成本较高的设计方案。在进行最终抉择的时候,项目组必须坚持如下准则:在满足需求的情况下,尽量选择小于,而舍弃熊掌;只有在存在无可置疑的理由时,才选择熊掌作为设计方案需求分原创 2014-12-18 11:28:29 · 4323 阅读 · 0 评论 -
用例建模及其作用和步骤
用例建模的作用:首先,用例模型是一种标准的语言,很容易成为开发人员之间交流和沟通的媒介,用例模型可以精确地定义软件需求,出现歧义的可能性很小,这可以保证用户和开发人员对需求理解的一致性其次,用例模型可以成为我们评估压法工作量的一个标准,特别是对于迭代式开发言。迭代式开发模型里,通常依据用例模型来划分软件的开发周期:优先级别高的用例会在早期的迭代周期中实现,而优先级别低的用例则被安排在后原创 2014-12-17 22:02:48 · 22094 阅读 · 0 评论 -
面向对象设计的基本原则和过程
面向对象设计的基本原则: 开放原则:完全替换::‘是’依赖倒置原则:避免循环依赖:况;简化的设计;只实现需要的东西,不去实现认为需要的东西;不去重复自己,任何代码尽可能只出现一次面向对象设计的过程; 面向对象分析架构分析:面向对象设计编码:测试:原创 2014-12-11 09:34:43 · 1837 阅读 · 0 评论 -
设计模式后的设计理念:需求变化,针对接口编程,优先使用聚合
模式的基本元素架构模式:设计模式:通用职责分配软件模式(GRASP模式):蕴含在设计模式中的设计原则和理念:设计模式最根本的意图是适应需求变化:针对接口编程,而不是针对实现编程:优先使用聚合而不是继承继承反映的是类之间的“‘.......是一个.......”这样的关系,聚合反映的是类之间“.................有一个.....”的关系原创 2014-12-18 16:38:42 · 1090 阅读 · 0 评论 -
用例级别--用户用例,高层用例和子功能用例
用例级别:用例级别指的是我们对用例模型的抽象和细化程度;在《编写有效用例》一书中,将由高到低的不同用例级别形象地比喻为云朵和风筝,海平面,海平面以下的鱼虾等自然界的事务,用户目标级用例:高层级别用例子功能级别用例扩展关系和包含关系原创 2014-12-18 15:01:03 · 6204 阅读 · 0 评论 -
设计模式的分类和种类及其适用情景
设计模式的分类和种类及其适用情景模式的种类及其适用情况原创 2014-12-18 18:13:45 · 773 阅读 · 0 评论 -
外观模式以及FishiGUI子系统外观模式的实现
外观模式:外观模式可以为一个子系统中的多个类提供统一的接口,外观模式定义了一个高层次的接口,并使一个子系统更易于使用;把一个组件单元构建成一个子系统有助于减少软件的复杂性,而且可以使子系统和其他的组件的通信更简洁和更容易控制,最大幅度地降低组件之间的耦合度。在面向对象设计的领域里,达到这一目标的最好的方法就是引进一个外观类,让它为子系统的通用功能提供一个简单的一致的公共接口子系统的接口不一定是具体的外观类,它和外观类之间的关系可能会有两种:子系统的接口是一个抽象类,不包含任何属性和具体的实现,其中原创 2014-12-23 11:16:42 · 652 阅读 · 0 评论 -
面向对象设计的工作步骤一:细化和重组类,细化和实现类间的关系明确可见性
面向对象设计:面向对象设计是以面向对象分析阶段产生的分析模型作为输入,通过对分析模型中所有对象和类的分析,明确对象的属性和操作,指定属性的类型特征,不全对象之间的关系,并在不断细化的基础上,把分析模型转化为详细描述如何解决问题如何实现软件系统的对象模型;面向对象设计工作的主要工作步骤:细化和重组类细化和实现类间的关系,明确其可见性增加遗漏的属性,指定属性的类型和可见性分配职责,定义执行每个职责的方法对消息驱动的系统,明确消息传递方式利用设计模式进行局部设计画出详细的顺序图或者协作图原创 2014-12-22 21:04:39 · 2248 阅读 · 0 评论 -
MVC模型和FishiGUI应用层的MVC模型
MVC概述:MVC (Modal View Controler)M是指数据模型,V是指用户界面,C则是控制器。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应原创 2014-12-16 10:52:37 · 969 阅读 · 0 评论