软件体系结构——第二章<如何上升到面向对象>
一、面向对象软件开发方法
映射过程:
出发点:使描述问题的问题空间(问题域)与实现解法的解空间(求解域)在结构上尽可能一致。
常见的开发方法:
-
Booch方法——对象分解取代功能分解
-
Coda/Yourdon方法——建立了五个层次(主题、类与对象、结构、属性、服务)、四个子系统(问题域、人机交互、任务管理、数据管理)
-
对象建模技术OMT方法——三个模型(对象、动态、功能)
-
面向对象软件工程OOSE方法
-
UML方法
UML全称 — Unified Modeling Language
特性:
-
具有指定的建模元素(图形符号)
-
严格的语法(构图规则)
-
明确的语义(逻辑含义)的建模语言
UML方法是面向对象技术领域内占主导地位的标准建模语言——基于UML的软件工程。
二、案例:从素数问题看面向对象
素数的定义: 除了1与本身之外,不能被其他正整数整除的数,叫作素数,也叫质数。
按照习惯规定,1不算素数,最小的素数是2,其余的是 3、5、7、11、13、17、19……等等
由定义来判断素数:对于数n,从i=2,3,4,5…到n-1判断n能否被i整除;如果全部不能整除,则 n 是素数;只要有一个能除尽,则 n 不是素数;为了提高运行效率需要压缩循环次数,可将判断范围从2 ~ n-1 改为 2~ sqrt(n)
我们可以运用筛选法:
结构化思维:
面向对象思维:
运用类图,
class Item{ //基类Item
public:
Item* source;
Item (Item* src) {source=src;}
virtual int out() {return 0;}
};
class Counter: public Item{ //计数器类Counter
int value;
public:
int out() {return value++;}
Counter(int v):Item(0){value=v;}
};
class Filter:public Item{ //过滤器类Filter
int factor;
public:
int out(){
while(1){
int n=source->out();
if (n%factor) return n;
}
}
Filter(Item *src, int f):Item(src) {factor=f;}
};
class Sieve: public Item{ //筛子类Sieve
public:
int out(){
int n=source->out();
source= new Filter(source, n);
return n;
}
Sieve(Item *src):Item(src){}
};
void main(){ //主函数,构造类的对象演绎应用场景
Counter c(2);
Sieve s(&c);
int next, n;
cin>>n;
while(1){
next=s.out();
if(next>n) break; //关键判断代码
cout<<next<<" ";
}
cout<<endl;
}
优势:
UML中的对象表示方法:
三、如何建立面向对象思维
3.1、例一
“TanHuobin是北航软件学院的一名教师” 可描述为:TanHuobin是Teacher类的一个实例,该实例是基于BeiHangUniversity对象的softwareSchool成员对象工作。
类GraduateStudent的所有实例都可以通过Course类的对象OOTechnology建立关联,并可发送phone消息(消息内容:82338518-862)或email消息 (消息内容:thbin@buaa.edu.cn)
类图
通信图
3.2、例二
业务描述:昨天我的一个朋友结婚了
①学会抽象类和属性
这句话涵盖了什么人和物品?
- 月老、小伙、姑娘、恋人、玫瑰花
每个人和物品看上去有什么特征?
月老:看上去有些年纪了,挺热心的
小伙:看上去很强壮,很诚实的
姑娘:看上去好漂亮,还很温柔
恋人:看上去很黏糊,当然就结婚了
玫瑰花:火红火红的,难怪姑娘动情了
②抽象行为
每个人和物品起什么作用?
月老:牵线搭桥,介绍认识
小伙:追求献花,表达爱意
姑娘:仰慕倾情,以身相许
恋人:拍拖,…,结婚
玫瑰花:令姑娘头晕,传情示爱
③形态表现
这些人和物品都呆在什么地方?
月老:婚介所,交友网站
小伙:软件园,住回龙观
姑娘:人民医院,住望京
恋人:情侣路,电影院, …
玫瑰花:花店里,小伙手中,姑娘手中
④事物关系描述
这些人和物品之间有什么关系?
⑤确定行为
这些人和物品是怎么办事的?
- 月老牵线搭桥,介绍小伙和姑娘认识
- 姑娘和小伙一见钟情,成为一对恋人
- 一对恋人开始拍拖
- 小伙追求献花,表达对姑娘的爱意
- 姑娘收到999火红玫瑰,激动得头晕目眩
- 小伙真心求婚,姑娘以身相许
- 一对恋人终于走入婚姻殿堂
UML描述分析过程:
活动图搞清结婚过程:
顺序图复述情节:
通信图理清头绪:
状态机图定点观察状态:
我们要学会从6个方面去用对象的观点认识事物:
- 类与对象
- 类的属性
- 类的操作
- 类的行为、状态、部署
- 类间的关联关系
- 类间的协作
业务术语和专业术语: