题外话:人的大脑其实就是一个单核CPU,其实只能运行一个线程。所以做事要一心一意!
More information, please refer to
http://www.lifevv.com/sysdesign/doc/20071211214255251.html
一个好的系统 应该是像树一样的结构,或者人体的结构。
GRASP是General Responsibility Assignment Software patterns(通用职责分配软件模式)的简称,它的核心思想是“职责分配(Responsibility Assignment)”,用职责设计对象:"Designing Objects with Responsibilities"。它包含了9个基本模式:
1,信息专家 (Information expert) 职责独立
2,创建者(Creator) 创建责任:工厂模式
3,高内聚 (High Cohesion) 多个类合成一个类
4,低耦合 (Low coupling) 类和类之间关系尽可能少,单向联系,单线联系
5,控制器 (Controller) ActionServlet
6,多态性 (Polymorphism) 类和方法的运行时期的多态
7,纯虚构 (Pure Fabrication) 处理类 动作类 DAO,BO,DTO
8,间接性 (Indirection) Mediator模式 不要让类有网状联系
9,变化预防 (Protected Variations) 一个接口XXXable引用行为,可扩展
GRASP的主要特征:
- 对象职责分配的基本原则。
- 主要应用在分析和建模上。
GRASP的核心思想的理解:
自己干自己的事(职责的分配)
自己干自己的能干的事(职责的分配)
自己只干自己的事(职责的内聚)
面向对象设计
所谓面向对象设计,就是在系统设计的过程中,通过把系统分成相对独立但又互相联系的对象组合的一种设计方法。
对象具有属性和行为,对象间通过消息进行交互(协作)。
面向对象设计一般有以下几个关键步骤:
1,发现对象。找出系统应该由哪些对象构成。
2,对象的属性。对象具有哪些属性。
3,对象的行为。对象具有哪些行为,或者说对象需要做什么,它的职责是什么。
4,对象的关系。对象与对象之间的关系是什么,怎样进行交互,协作等等。
发现对象
对象的发现超出了本文的讨论范围。我们简单地介绍一下对象发现的过程与手段。
一般意义上的对象是现实世界上物体的抽象。也就是说,现实世界里有什么物体,就有什么对象;物体存在什么属性,对象就有什么属性。
我们可以用“名词筛选法”来发现系统的对象。
比如,一个学生考试成绩管理系统,有以下简单的用例:
- 管理员创建题库(把题条加入题库)
- 系统根据管理员输入的某些条件随机生成试题
- 学生成绩入库与管理
我们可以通过字面意思找出名词,就可以找出“管理员”,“题条”,“题库”,“试题”,“学生”,“学生成绩”等几个对象。
一般通过这种方法(名词筛选法)就可以找出系统的绝大部分对象。
对象行为
行为是对象应该执行的动作,也就是对象的职责。对象具有哪些职责呢?相对于上面所说的“名词筛选法”,可以简单地用“动词筛选法”来发现“对象的行为”。
比如,上面的“学生考试成绩管理系统”一例中,有“创建题库”,“输入(条件)”,“生成试题”,“成绩入库”, “成绩管理”等动词,也就是说,系统的对象至少具有以上这些行为(或职责)。
有时,我们可能还会发现某些“行为”的粒度过大,这时,可以通过进一步细化用例的描述,来发现更多更细的“行为”。这里不再详述。
问题1:找出对象的行为(职责)之后,怎么样分配这些行为呢?也就是说怎么确认“行为”属于哪个对象呢?
对象关系
系统的所有对象不可能是一个个单独存在毫无关系的个体,它们或多或少的有着各种联系(协作关系)。
问题2:如果2个对象之间有协作关系,他们之间最好通过什么样的方式协作呢?
对象扩展特性
问题3:已经被抽象出来的对象,如何面对将来可能发生的变化呢?
GRASP提出9个基本模式,用于解决以上设计过程中遇到的各种问题。
分享到:
相关推荐
1. **单一职责原则(Single Responsibility Principle, SRP)**: 一个类或对象应该只有一个引起它变化的原因。这意味着每个类都应有一个明确且单一的职责,避免职责混杂导致代码耦合度过高。 2. **开闭原则(Open...
在“深刻理解对象设计及面向对象设计”这一主题中,我们将探讨对象设计的基本概念,职责分配的原则,以及GRASP(一般职责分配原则)的设计模式。 首先,对象设计涉及到对象的角色(Role)、职责(Responsibility)...
"SOLID"和"GRASP"就是两个重要的概念,它们为软件设计提供了坚实的理论基础。本项目"Actividad-2 --- Implementación de principios SOLID y GRASP"显然关注的是如何在JavaScript开发中应用这些原则。 **SOLID** ...
1. 单一职责原则(Single Responsibility Principle, SRP) 一个类应该只有一个引起它变化的原因。这意味着一个类应该只有一个职责,这样可以降低类之间的耦合度,提高代码的可测试性和可维护性。 2. 开放封闭原则...
Almost every topic is followed by well designed live programmes so that it becomes easy to grasp the underlying principle or programming technique. A total of more than 450 live programmes are ...
本文将深入探讨面向对象设计的核心原则及其应用,并结合GRASP(General Responsibility Assignment Software Patterns)模式进行详细分析。 ### 一、面向对象设计概述 面向对象设计(Object-Oriented Design, OOD...
11. **GRASP(General Responsibility Assignment Software Principles)**:包括控制器、工厂、多态、信息专家、高耦合者、低耦合者、间接耦合、保护变化、开闭原则等原则,指导类和对象的责任分配。 12. **SOLID...
11. **GRASP(General Responsibility Assignment Software Principles)原则** - 包括如控制器(Controller)、工厂(Factory)、多态(Polymorphism)等设计模式,用于指导类和对象的职责分配。 以上设计原则是...
Starting with a detailed analysis of object-oriented analysis and design, you will use the Python programming language to clearly grasp key concepts from the object-oriented paradigm. This book fully ...
本文将深入探讨面向对象设计原则,尤其是开闭原则、依赖倒置原则、Liskov替换原则以及一些设计模式,如GRASP模式。 #### 开闭原则:灵活性与稳定性的平衡 开闭原则(Open/Closed Principle, OCP)主张软件实体(类、...
5. **GRASP(Generalized Responsibility Assignment Software Principles)**:通用职责分配原则,包括: - 控制器(Controller):负责处理输入。 - 工厂方法(Factory Method):用于创建对象。 - 信息专家...
The author includes run-time memory structure diagrams, and an accompanying essay to help readers grasp the dynamics behind Linux and similar software systems. Identifies through diagrams the ...
【系统分析课件,注明老师编写 - 设计模式详解】主要探讨了面向对象设计中的一个核心原则:单一职责原则(Single-Responsibility Principle,SRP)。面向对象设计(OOD)和面向对象编程语言(OOPL)的目标是提高程序...
This module fully explains classes, data encapsulation, inheritance, polymorphism, abstraction, and exceptions with an emphasis on when you can use each principle to develop well-designed software....
设计原则,如GRASP(Generality, Responsibility Assignment, Separation of Concerns, Principle of Least Knowledge等),指导我们如何合理分配职责,保持模块的低耦合和高内聚,以达到这些目标。 在实际开发中,...
Stacks are data structures that follow the Last-In-First-Out (LIFO) principle, useful for managing function calls and temporary data storage. Subroutines are reusable blocks of code that perform a ...
A fundamental principle of lean manufacturing is continuous improvement (kaizen). This involves regularly reviewing and refining processes to eliminate waste and increase efficiency. Production flows ...