这是自己的思维导图:
![](https://box.kancloud.cn/2016-03-16_56e9102721131.jpg)
###(一)泛化和继承的区别?
**1.定义看:**
1)泛化:是类元的 一般描述和具体描述,具体描述建立在一般描述之上,并对其进行了拓展
举个例子,贷款就是一般性的描述,房贷就是一种具体的贷款,贷款的要求一般有借贷人,担保人(都算贷款的条件描述)就可以了,房贷还要考虑房子的这个因素,便做到了拓展
2)继承:利用已有的数据类型定义新的数据类型,新生成的数据类型不仅有新定义的成员还有旧的成员,这种机制叫做继承
但从定义上去看的区别就相当于拿我自己举例子吧:在家,我的身份是家里最小的孩子,都管我叫佳佳(小名),在廊坊师范学院都管我叫李建敏院长,好像看起来是一个人,但还是有所差别,因为当我是院长的身份是我就是一种机制代表而不在是我自己,单从定义上看确实很容易另人发懵,接下来就从用途上来进行说明
**2.用途看:**
泛化有两个用途:1)当一个变量(如参数或过程变量)被声明承载某个给定类的值时,可使用类(或其他元素)的实例作为值,这被称作可替代性原则
并不清楚这和泛化有什么关系,也不知道这算什么用途,在大话设计模式中为了做到松耦合就用到了这个(代码如下)**
~~~
<span style="font-size:18px;"><strong>public static IUser CreateUser()//在某类下面定义了一个IUser类型的方法
{
IUser result=null;//声明了一个IUser变量(叫对象应该更合适),来接收一个值
switch(db)
{
case"sqlserver";
result=new sqlserverUser();//返回了一个实例化的值,之所以能返回这样的值便是sqlserverUser是IUser的一个子类
break;
}
return result;//此时便符合了用途1
}</strong></span>
~~~
~~~
<span style="font-size:18px;"><strong> 2)给继承机制一个可视化视图,利用继承机制实现,就是告诉你谁应该继承谁,告诉你之后用面向对象中的继承机制去实现,军事的作用</strong></span>
~~~
~~~
<span style="font-size:18px;"><strong>
</strong></span>
~~~
继承的用途:在学C#的时候我们就已经接触过了,1、继承可以减少重复的代码。比如父类已经提供的方法子类可以直接使用,不必再去实现。
2、继承是多态性的前提。当然使用继承的同时也提高了类的耦合度。
~~~
<span style="font-size:18px;"><strong>using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 继承
{
public class Person//人类一会将被继承,所以也是父类
{
public string Name;//定义了一些基本字段
public int Age;
//基类提供构造函数以进行初始化
public Person(string Name, int Age)//给name和age赋值
{
this.Name = Name;
this.Age = Age;
Console.WriteLine(Name);
Console.WriteLine(Age);
}
}<span style="color:#454545;">
</span><span style="color:#ff0000;">public class Student : Person//这就是继承,在该类后面用冒号隔开,后面是要继承的父类,因为继承了person类所以就直接使用name和age</span><span style="color:#454545;">
{
private int _Id;
//调用Person构造函数
public Student(string Name,int Age,int _Id)
:base(Name,Age)//利用构造函数赋值,如果与父类的字段一样就用base进行区别
{
this._Id=_Id;
Console.WriteLine(_Id);
}
}
class Program
{
static void Main(string[] args)
{
Student objStu = new Student("Tom", 20, 1001);
}
}
}</span></strong></span>
~~~
**3.面向的使用对象**
泛化是在Uml中的,在绘制图时用到的一种关系
继承是面向对象编程时使用的,是oo的三大特征,是在写代码时要用到的一种机制
如果单纯的说人与男人和女人是什么关系,说泛化关系或者继承关系都没问题
**4.小结:**
在代码实现时用面向对象的继承机制来实现泛化关系**
###(二)用例图的作用?
![](https://box.kancloud.cn/2016-03-16_56e9102743173.jpg)
1.通过这个图我们就可以知道老师需要的是1、2、3、4、5,而学生只需1、2 就可以了,由此可以需求分析作用
2.当我们做完系统功能是不能齐全,来看看就知道了,由此可知项目验收的参考
3.看着这个我们就可以知道要实现哪些,由此可知过程的向导,类似工程图
###(三)UML图可以分成几类,每类有哪些?
总体可以分成静态图和动态图两大类
![](https://box.kancloud.cn/2016-03-16_56e910275bf87.jpg)
还可以分成用例图、静态图、行为图、交互图、实现图五大类**
![](https://box.kancloud.cn/2016-03-16_56e910276cb5e.jpg)
###(四)交互图有哪些,有什么区别?
有时序图和协作图,在代码实现过程中比较有用的两种图,主要还是说一下区别吧,这两种图的区别还是比较明的:
1)时序图注重的时间和逻辑,对象之间先做什么后做什么一目了然,针对的是全局所有的对象
2)协作图是比较注重空间可以这么说,展示的是对象之间发生了什么样的交互,利于分层
###(五)UML图归何档,有谁来看?
在软件工程中感觉文档就像电子书,UML图就像视频(好的还能转换成代码),搭配使用事半功倍,下面就是自己思考后的一些想法:
每个图放在哪个文档主要还是看该图的作用,文档有可行性分析文档、需求文档、概要设计文档、详细设计文档、数据要求文档、数据库文档、测试计划文档、测试结果文档、软件开发计划、开发报告总结、操作手册、用户手册、开发进度月报,十种图可以这样:
用例图:软件开发计划、需求文档
类图、对象图:概要设计文档
包图:概要设计文档
时序图:开发进度月报、详细设计文档、测试计划文档、操作手册
协作图:详细设计文档
活动图:详细设计文档、数据库文档、测试计划文档、用户手册
构件图:测试文档
状态图:详细设计文档、数据要求文档
部署图:用户手册**
###(六)总结
正如导图中画的一样UNL中有泛化关系、扩展关系、包含关系、依赖关系、关联关系(聚合关系、组合关系)、实现关系,是本来就存在的,某一个图只是用到了某些关系,然后泛化关系和包含关系是肯定被执行的,扩展不一定被执行
对如何具体在代码中实现很疑惑,但通过师傅和师姐的讲解就是具体问题具体分析,可以做一些实验,不要拘泥于自己没有做过的东西,继续向前吧