2018.03.12学习笔记


  1.什么是UML?
        UML(Unified Modeling Language)是一种统一建模语言,为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。下面将对UML的九种图+包图的基本概念进行介绍以及各个图的使用场景。

  2.常用的UML图形有哪些?它们都起什么作用?(原文:https://www.cnblogs.com/jiangds/p/6596595.html)

2.1用例图(UseCase Diagrams): 

    用例图主要回答了两个问题:1、是谁用软件。2、软件的功能。从用户的角度描述了系统的功能,并指出各个功能的执行者,强调用户的使用者,系统为执行者完成哪些功能。

2.2类图(Class Diagrams):

    用户根据用例图抽象成类,描述类的内部结构和类与类之间的关系,是一种静态结构图。 在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)。

     各种关系的强弱顺序: 泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

2.3对象图(Object Diagrams):

    描述的是参与交互的各个对象在交互过程中某一时刻的状态。对象图可以被看作是类图在某一时刻的实例。

      

2.4状态图(Statechart Diagrams):

    是一种由状态、变迁、事件和活动组成的状态机,用来描述类的对象所有可能的状态以及时间发生时状态的转移条件。

      

2.5活动图(Activity Diagrams):

    是状态图的一种特殊情况,这些状态大都处于活动状态。本质是一种流程图,它描述了活动到活动的控制流。    

交互图强调的是对象到对象的控制流,而活动图则强调的是从活动到活动的控制流。

活动图是一种表述过程基理、业务过程以及工作流的技术。

它可以用来对业务过程、工作流建模,也可以对用例实现甚至是程序实现来建模。

      


 2.6序列图-时序图(Sequence Diagrams):

    交互图的一种,描述了对象之间消息发送的先后顺序,强调时间顺序。

    序列图的主要用途是把用例表达的需求,转化为进一步、更加正式层次的精细表达。用例常常被细化为一个或者更多的序列图。同时序列图更有效地描述如何分配各个类的职责以及各类具有相应职责的原因。

    

  消息用从一个对象的生命线到另一个对象生命线的箭头表示。箭头以时间顺序在图中从上到下排列。 

 2.7协作图(Collaboration Diagrams):

    交互图的一种,描述了收发消息的对象的组织关系,强调对象之间的合作关系。时序图按照时间顺序布图,而写作图按照空间结构布图

    

 

  2.8构件图(Component Diagrams):

    构件图是用来表示系统中构件与构件之间,类或接口与构件之间的关系图。其中,构建图之间的关系表现为依赖关系,定义的类或接口与类之间的关系表现为依赖关系或实现关系。

    

  2.9部署图(Deployment Diagrams):

    描述了系统运行时进行处理的结点以及在结点上活动的构件的配置。强调了物理设备以及之间的连接关系。

部署模型的目的:

描述一个具体应用的主要部署结构,通过对各种硬件,在硬件中的软件以及各种连接协议的显示,可以很好的描述系统是如何部署的;平衡系统运行时的计算资源分布;可以通过连接描述组织的硬件网络结构或者是嵌入式系统等具有多种硬件和软件相关的系统运行模型。


  3.简述UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)与符号说明

(转载自:http://www.cnblogs.com/me115/p/4092632.html)

  泛化关系(generalization)

类的继承结构表现在UML中为:泛化(generalize)与实现(realize):

继承关系为 is-a的关系;两个对象之间如果可以用 is-a 来表示,就是继承关系:(..是..)

eg:自行车是车、猫是动物

泛化关系用一条带空心箭头的直接表示;如下图表示(A继承自B);

uml_generalization

eg:汽车在现实中有实现,可用汽车定义具体的对象;汽车与SUV之间为泛化关系;

uml_generalize

注:最终代码中,泛化关系表现为继承非抽象类;

实现关系(realize)

实现关系用一条带空心箭头的虚线表示;

eg:”车”为一个抽象概念,在现实中并无法直接用来定义对象;只有指明具体的子类(汽车还是自行车),才 可以用来定义对象(”车”这个类在C++中用抽象类表示,在JAVA中有接口这个概念,更容易理解)

uml_realize

注:最终代码中,实现关系表现为继承抽象类;

聚合关系(aggregation)

聚合关系用一条带空心菱形箭头的直线表示,如下图表示A聚合到B上,或者说B由A组成;

uml_aggregation

聚合关系用于表示实体对象之间的关系,表示整体由部分构成的语义;例如一个部门由多个员工组成;

与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在;例如, 部门撤销了,人员不会消失,他们依然存在;

组合关系(composition)

组合关系用一条带实心菱形箭头直线表示,如下图表示A组成B,或者B由A组成;

uml_composition

与聚合关系一样,组合关系同样表示整体由部分构成的语义;比如公司由多个部门组成;

但组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,则部分也不存在了;例如, 公司不存在了,部门也将不存在了;

关联关系(association)

关联关系是用一条直线表示的;它描述不同类的对象之间的结构关系;它是一种静态关系, 通常与运行状态无关,一般由常识等因素决定的;它一般用来定义对象之间静态的、天然的结构; 所以,关联关系是一种“强关联”的关系;

比如,乘车人和车票之间就是一种关联关系;学生和学校就是一种关联关系;

关联关系默认不强调方向,表示对象间相互知道;如果特别强调方向,如下图,表示A知道B,但 B不知道A;

uml_association

注:在最终代码中,关联对象通常是以成员变量的形式实现的;

依赖关系(dependency)

依赖关系是用一套带箭头的虚线表示的;如下图表示A依赖于B;他描述一个对象在运行期间会用到另一个对象的关系;

uml_dependency

与关联关系不同的是,它是一种临时性的关系,通常在运行期间产生,并且随着运行时的变化; 依赖关系也可能发生变化;

显然,依赖也有方向,双向依赖是一种非常糟糕的结构,我们总是应该保持单向依赖,杜绝双向依赖的产生;

注:在最终代码中,依赖关系体现为类构造方法及类方法的传入参数,箭头的指向为调用关系;依赖关系处理临时知道对方外,还是“使用”对方的方法和属性;

  4.使用 java代码实现以下设计模式:工厂方法模式、抽象工厂模式、单例模式(饿汉模式,懒汉模式,要求线程安全)、代理模式、观察者模式、命令模式

1、工厂方法模式:

public class CourseFactory {
/**

* 静态工厂方法
* @return
*/
public static Course createCourse(){

return new Course();
}

public Course createCourse2(){

return new Course();
}


  5.整理 spring学习笔记
   spring开发步骤:
1.新建工程,构建package包结构
2.导入spring的核心包和依赖关系包(或根据提示进行导入)
  导入log4j和junit测试环境

3. 编写spring 上下文配置文件
配置spring上下文环境时,需要注意xsd的引用,spring包含了很多功能模块,不同的功能模块需要使用不同的xsd;
spring核心工厂引入的xsd是:http://www.springframework.org/schema/beans/spring-beans.xsd

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">

xmlns - xml - extensive markup language     -ns naming space   - URI

4.把需要有spring bean工厂实例化的类交给spring进行管理(在spring配置文件中,配置一个bean关联类),
<bean  id = "now"   class = "java.util.Date"></bean>

5.编写测试程序或在业务程序中使用spring实例化对象,spring实例化对象时,可以使用spring的核心IOC/DI
1).实例化spring上下文环境
2).通过spring上下文context环境得到实例对象
3).使用实例对象进行业务操作

spring使用工厂方法实例化对象的开发步骤:
1.编写工厂类,设计工厂方法获得对象实例
/**
 * <pre>
 * 1.常用的工厂设计模式:简单工厂,抽象工厂,工厂方法
 *
 * -- 使用工厂方法设计模式
 * 包含一个静态方法,用于返回其他类型的对象那个实例
 * 
 * </pre>
 * @author Park
 *
 */
public class CourseFactory {

/**

* 静态工厂方法
* @return
*/
public static Course createCourse(){

return new Course();
}

public Course createCourse2(){

return new Course();
}

2.配置spring文件,配置工厂类,并指定工厂方法
<!-- 通过静态工厂方法实例化对象  实例化: 课程对象-->
<bean id="course2" class="com.neuedu.springdemo.bean.CourseFactory"  factory-method="createCourse"/>

<!-- 通过实例工厂方法实例化对象  实例化: 课程对象-->
<!-- 1).配置spring工厂实例 -->
<bean id="factory" class="com.neuedu.springdemo.bean.CourseFactory" ></bean>
<!-- 2).配置通过工厂实例,得到实例对象:课程对象 -->
<bean id="course3"  factory-bean="factory"  factory-method="createCourse2"></bean>

3.通过spring环境获取对象实例
* 4.spring获取实例的常用方法:
* 1).通过id名称进行获取
* Course course = (Course)context.getBean("course");

* 2).通过类型获取对象
* Student student = context.getBean(Student.class);
Student student1 = context.getBean(com.neuedu.springdemo.bean.Student.class);

//2.通过spring的bean工厂实例化对象
logger.info("准备执行getBean方法");
//spring获取实例对象的常用方法:1.通过id名称进行获取
/*Course course = (Course)context.getBean("course");*/

//2.通过类型获取对象
Student student = context.getBean(Student.class);
Student student1 = context.getBean(com.neuedu.springdemo.bean.Student.class);

//方法3 - 通过静态工厂方法获得实例对象
/*course = context.getBean("course2",Course.class);
course.setCourseName("spring入门与提高");*/

//方法4.通过实例工厂方法获取实例对象
course = context.getBean("course3",Course.class);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值