软件体系结构——第二章<如何上升到面向对象>

一、面向对象软件开发方法

映射过程:

image.png

出发点:使描述问题的问题空间(问题域)与实现解法的解空间(求解域)在结构上尽可能一致。

常见的开发方法:

  • 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)

我们可以运用筛选法:

image.png

结构化思维:

image.png

面向对象思维:

image.png

运用类图,

image.png

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;
}

优势:

image.png

UML中的对象表示方法

image.png

三、如何建立面向对象思维

3.1、例一

“TanHuobin是北航软件学院的一名教师” 可描述为:TanHuobin是Teacher类的一个实例,该实例是基于BeiHangUniversity对象的softwareSchool成员对象工作。

类GraduateStudent的所有实例都可以通过Course类的对象OOTechnology建立关联,并可发送phone消息(消息内容:82338518-862)或email消息 (消息内容:thbin@buaa.edu.cn)

类图

image.png

通信图

image.png

3.2、例二

业务描述:昨天我的一个朋友结婚了

①学会抽象类和属性

这句话涵盖了什么人和物品?

  • 月老、小伙、姑娘、恋人、玫瑰花

每个人和物品看上去有什么特征?

  • 月老:看上去有些年纪了,挺热心的

  • 小伙:看上去很强壮,很诚实的

  • 姑娘:看上去好漂亮,还很温柔

  • 恋人:看上去很黏糊,当然就结婚了

  • 玫瑰花:火红火红的,难怪姑娘动情了

②抽象行为

每个人和物品起什么作用?

  • 月老:牵线搭桥,介绍认识

  • 小伙:追求献花,表达爱意

  • 姑娘:仰慕倾情,以身相许

  • 恋人:拍拖,…,结婚

  • 玫瑰花:令姑娘头晕,传情示爱

③形态表现

这些人和物品都呆在什么地方?

  • 月老:婚介所,交友网站

  • 小伙:软件园,住回龙观

  • 姑娘:人民医院,住望京

  • 恋人:情侣路,电影院, …

  • 玫瑰花:花店里,小伙手中,姑娘手中

④事物关系描述

这些人和物品之间有什么关系?

image.png

⑤确定行为

这些人和物品是怎么办事的?

  • 月老牵线搭桥,介绍小伙和姑娘认识
  • 姑娘和小伙一见钟情,成为一对恋人
  • 一对恋人开始拍拖
  • 小伙追求献花,表达对姑娘的爱意
  • 姑娘收到999火红玫瑰,激动得头晕目眩
  • 小伙真心求婚,姑娘以身相许
  • 一对恋人终于走入婚姻殿堂

UML描述分析过程:

image.png

活动图搞清结婚过程:

image.png

顺序图复述情节:

image.png

通信图理清头绪:

image.png

状态机图定点观察状态:

image.png

我们要学会从6个方面去用对象的观点认识事物:

  • 类与对象
  • 类的属性
  • 类的操作
  • 类的行为、状态、部署
  • 类间的关联关系
  • 类间的协作

业务术语和专业术语:

image.png

posted @ 2022-04-24 20:05  我在吃大西瓜呢  阅读(126)  评论(0编辑  收藏  举报