UML学习之面向对象技术

来源:互联网 发布:马云 阿里云 演讲 编辑:程序博客网 时间:2024/05/18 15:53

    到了UML(Unified Modeling Language),进行了一次重温和升华面向对象技术的学习。不得不说,原来的理解还只是一些概念性的东西,现在加上了一些感性上的知识,使得对它的理解更深了一点,等真正到了工程实践后肯定会是另一番感悟。也就是说,现在还停留在认知阶段,没到应用阶段。不过,学习就是一点一点的积累,没有认知哪有应用?接下来就要开始我的UML学习之旅。

    首先重新认识一下面向对象技术(提到的很多概念会在后续的学习中详细介绍):

    基本原则

  • 抽象(Abstraction)

        抽象就是从真实的客观世界抽象出一个个名词,然后将名词抽象为一个个类。如:奥拓、奥迪、奔驰、玛莎拉蒂,它们是一个个名词,但可以归结为一类:汽车。

  • 封装(Encapsulation)

        封装就是对客户隐藏实现,客户仅仅看到接口。如我们用的电视机遥控,只能看到一个个按钮,按下去之后电视就会做出相应的反应,但我们并不知道这些按钮连接的线路是怎么工作的。

  • 模块化(Modularity)

        模块化就是将代码按照逻辑关系存放起来,分为各个模块,每个模块都实现其特有的某一功能。

  • 层次性(Hierarchy)

        将系统分为一层一层的类,从而实现代码的复用。如下图所示的艺术分层:

                                                                

   基本概念

  • 对象(Object)

         1、范畴广泛,例如:

                                         物理实体:一辆火车

                                         概念实体:化学药品

                                         软件实体:一个队列

         2、对象描述一个事物,它具有状态(静态信息)、行为(动态信息)、和标识(对象名字)。

         3、对象的表示:类+对象名字。如小李是一个讲师。单纯的说小李,这只是一个符号,而讲师是一个类,两者结合就能说明小李的工作。

  • 类(Class)

         1、概念:类是对一组具有相同属性、行为、关系和语义的对象的描述

         2、类的表示(UML图)

                                                                         

                                                                                 图1                                图2                             图3                            图4

            图1给出了类名、属性、方法;图2给出了类名、属性,隐藏了方法;图3给出了类名、方法,隐藏了属性;图4只给出了类的名字。

         3、类与对象的关系:a.类定义了属性和方法

                                            b.类提供了一个创建对象的模板

                                            c.一个对象是一个类的实例

  • 属性(Attribute)

         1、概念:a.描述类的静态信息

                         b.给类赋予不同的状态值,得到不同的对象

          2、举例:

                                                                                              

  • 操作(Operation)

        1、概念:操作就是通过操作访问读取修改属性值,也叫做方法

        2、举例:

                                                                                                              

  • 接口(Interface)

         1、概念:不同功能层之间的通信规则称为接口。

         2、与类的区别: 接口指定必须由类提供的成员或实现它的其他接口。与类相似,接口可以声明属性、方法、事件和类型(但不能声明变量),但并不能设置这些成员的

                                     具体值,也就是说,只能定义,不能给它里面定义的东西赋值。

        

          3、举例:

                                                                                  

  • 组件(Componet)

        1、概念:对数据和方法的简单封装

        2、包含:a.源程序(Source )

                         b.运行时动态库(.Dll)

                         c.可执行程序(.Exe)

        3、举例:a.可视化源代码之间的依赖关系

                                                                                       

                        b.可视化Dll、Exe之间的依赖关系

                                                                                

                    

  • 包(Package)

        1、概念:包是对代码逻辑的划分,使得代码的结构更加清晰。包可以进行嵌套。

        2、举例:包的一个简单内部结构                                                      

Package Animal;class Cat{}class Dog{}

 

  • 子系统(Subsystem)

                                                                                  

                                                                                                                         表示子系统实现了Interface接口

  • 关系(Relationship)

        a.关联

       1、作用:表示类与类之间的连接,它使一个类知道另一个类的属性和方法

       2、分类:  a.1 聚合  

                          a.2 组合   

       3、举例:下图中,火车头相对于火车来说就是属于聚合的关系,火车头可以单独于火车车厢存在,也可以属于不同种类如货运或者客运的火车。而节点则不能单独于链表

                        而存在,链表没了,节点也将不复存在。其实就是聚合的约束力比组合的约束力小而已,它们的作用是类似的。也可以称组合为强聚合。

                                                                               

        b.依赖

       1、作用:可以简单的理解为类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的,非常弱,但是类B的变化会影响到类A。

       2、举例:比如下面的图示客户与供货商的关系:

                                                                                      

        c.泛化 :

          1、作用:子类继承得到父类的属性和方法。最大的好处就是实现了代码的复用,更好的应对需求变化,减少了系统开发和维护工作量。

          2、分类:c.1 单重继承

                           c.2 多重继承

          3、举例:下图中Bird类为多重继承,其他的类为单重继承

                                                                                  

                  

        d.实现

       作用:指的是一个Class类实现Interface接口(可以是多个)的功能。它是类与接口之间最常见的关系。

   发展历史

                                                                                   

                                         概括为:机器语言→汇编语言→高级程序设计语言,其中C++、Java、C#语言是目前世界上比较流行的面向对象程序设计语言。

   程序设计语言特点

    1、继承性:就是上面所说的泛化关系特点

    2、封装性:把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,只保留有限的对外接口使之与外部发生联系。

    3、多态性:统一操作作用于不同的类的实例,将产生不同的执行结果,即不同类的对象收到相同的消息时,得到不同的结果。如一个乐团当中,当指挥员下达同一演奏命令的时候,各种不同的乐器就会按照相同的乐谱进行,演奏出不同的声音。

原创粉丝点击