继承、实现、依赖、关联、聚合、组合的联系与区别
分别介绍这几种关系:
继承
指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性;
指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性;
可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用;
他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;
聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;
组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;
对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准备定位是很难的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;
但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖;
聚合跟组合其实都属于关联 只不过它们是两种特殊的关联 因为本是同根生 所以它们之间难免会有相似之处 下面让我们一起来看一下它们之间有何不同
聚合与组合的概念相信不用我在此赘述大家就已经了解了 下面直接上例子
程老师的《大话》里举大那个大雁的例子很贴切 在此我就借用一下 大雁喜欢热闹害怕孤独 所以它们一直过着群居的生活 这样就有了雁群 每一只大雁都有自己的雁群 每个雁群都有好多大雁 大雁与雁群的这种关系就可以称之为聚合 另外每只大雁都有两只翅膀 大雁与雁翅的关系就叫做组合 有此可见 聚合的关系明显没有组合紧密 大雁不会因为它们的群主将雁群解散而无法生存 而雁翅就无法脱离大雁而单独生存——组合关系的类具有相同的生命周期
聚合关系图:
组合关系图:
从从代码上看这两种关系的区别在于:
构造函数不同
雁群类:
[csharp] view plaincopy
[csharp] view plaincopy
系统在线演示地址:
http://120.90.2.126:8051
登录账户:system,密码:system###
DEMO下载地址:
http://download.csdn.net/detail/shecixiong/5372895563
一、开发技术:B/S(.NET C# )
1、Windows XP以上 (支援最新Win 8)
2、Microsoft Visual Studio 2010/2012 C#.NET
3、.NET Framework 4.0以上 (支援最新4.5版本)
4、SQL Server 2005以上 (支援2008、R2及2012)
5、Oracle 8以上 (支援9i、10g、11g)
6、支持多个数据
二、功能描述
1.菜单导航管理
2.操作按钮
3.角色管理
4.部门管理
5.用户管理(用户权限)
6.用户组管理(设置成员,用户组权限)
7.系统配置(动态配置系统参数)
8.附加属性(自定义属性)
9.系统日志(异常记录)
10.数据库备份/还原
11.资源管理,(动态数据库)
12.个人信息(基本信息,附加信息,用户角色,拥 有权限)
13.首页快捷
14.数据回收站(业务功能删除过数据,全部保留在回收站)
15.系统个性化设置(切换菜单导航)
1、通用权限管理系统其中最重要的思路就是把常用的模块封装成控件进行重复使用,一则可以避免重复开发,提高开发效率,它能缩短开发时间,减少代码量,使开发者更专注于业务和服务端,轻松实现界面开发,带来绝佳的用户体验,适用于OA、网站、电子政务、ERP、CRM等基于B/S架构的应用软件系统的快速开发框架。
系统截图
如果你做了一段时间的面向对象编程,并且写过类继承的代码,那么你百分之八十写过模板的设计模式,只是写的时候不知道这个简单的写法竟然是一个设计模式。有没有曾经写过类似这样的继承结构,定义了一个基类,它有一些virtual函数又有一些nonevirtual函数,继承类肯定要对virtual函数进行重写,当然对nonevirtual函数不能重写,这就是模板模式。
模板模式是将一些固定的流程或者业务在基类中定义好(以nonevirtual存在,因为继承类也要使用这些方法),不固定的在继承类中去实现(当然这些是virtual方法),这样就达到了最大限度的重用代码,但是还有更重要的作用:
1. 基类定义好了业务流程,这个业务流程就是nonevirtual函数进行支撑的,因为nonevirtual函数的业务逻辑无法修改,继承类只需要根据自己的独特性质实现virtual函数;