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


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

    映射过程:

    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

  • 相关阅读:
    Qt Quick 简单介绍
    Windows下ElasticSearch及相关插件的安装
    Light OJ 1317 Throwing Balls into the Baskets 概率DP
    Cocos2d-x-lua学习点滴
    JAVA网络编程--UDP通信
    ASP.NET Web API 应用教程(一) ——数据流使用
    NGUI创建Camera参数为Simple 2D的UI UI对象的结构UI Root(2D)
    端口扫描器——ZenmapKail Linux渗透测
    直接操作游戏对象C#游戏开发
    BeagleBone Black项目实训手册(大学霸内部资料)
  • 原文地址:https://www.cnblogs.com/wangzheming35/p/16187351.html
Copyright © 2020-2023  润新知