委托
如果对象A为了满足某个请求,而寻求另一个对象B的帮助,这被称作是A对B的委托。
对象间的委托,和现实世界中人与人之间的委托一样:如果你“那位”要求你在他外出公干期间帮忙助剪草坪,而你转而雇佣邻居小孩干活,只要他不偷懒,则草坪就不会疯长。
对象之间发生委托,同样也不会为消息发出者所知。
对象的访问
引用变量有时被非正式地看做“抓住了”对象,所以我们常使用非正式术语句柄作类似这样的表达。
如果对象A是对象B的客户,则对象B就被认为是A的服务供应者。
封装
表示将对象状态和行为绑到单一逻辑单元中的机制。
信息隐藏是一种强大的机制,它保护对象数据的完整性,也能在应用程序的私有实现细节被不可避免地修改时防止客户代码出现连锁反应。
对象间关系:
类与类之间结构关系的正式名称是“关联”。关联是指类间关系,术语“链接”则是指两个特定对象(实体)间的结构关系。
关联与链接不同:
换言之,关联让链接称为可能。
定义两个不同类之间的关联关系,称为二元关联。
相同类的两个实体间的关系,称为反身关联。
结构关系
一对一(1:1);
一对多(1:m)
多对多(m:m)
注意,结对关系的概念只是用与关联,不适用于链接。
聚合
聚合:是一种特殊形式的关联,它指明“包括”、“由……构成”或“有……”的关系。和关联一样,聚合用于描述类A和类B之间的关系,不同的是,我们可以用聚合表述更多种关系:某对象属于类A,类A就是聚合类,类A包括一些类型为B的组件对象,或由一些类型为B的组件对象聚合而成。含有“包括”、“由……组成”等短语来命名这种关系,则该关系极有可能是一种聚合关系。
继承
继承常常指出两个类之间的“A是B”关系,因为如果类B派生自类A,则B则是A的一种特例。基类具有的特点对于其派生类都适用。
继承相关术语:
层次结构
继承真的是一种类间关系吗?
关联、聚合和继承都被称作是类间关系。继承与关联、聚合在对象层级上有所区别。
关联(和作为特殊关联的聚合)可以看作依靠相关类之间的现存关联把独立的对象联系起来,与之不同,继承是描述单个对象特征的一种方式。在继承的情形中,对象同时也是派生类和该派生类的所有基类的实体。
层级结构中的所有类——A及其所有子类——都可以来创建根对象。
通过继承,一个对象可以拥有“多重身份”。例如:研究生(GraduateStudent)是学生(Student)也是人(Person)。
类的派生规则:所可为
派生类规则:当不为。
不应该改变特征的语义——即蕴含的目的、表达的意义。
ps:这里从层次结构来看,确实和javaScript里的文档结构有点类似。不过理解时须知,为什么要继承?不单单是为了重用代码,还为了扩展基类的功能(既然是扩展,那么必然具有基类的功能)或重写基类的功能。还有一点:在非叶类已经在应用程序代码中被使用后,如非万不得已,应避免向其添加新特征,以防在整个类继承结构中导致连锁反应(封闭开发原则)。
多载
多载允许同一个类两个或多个不同方法拥有相同方法名和不同的参数签名。
多重继承
如果出于某种目的,需要把两个不同基类的要素融合到一起,创建一个混血类,就得使用多重继承。使用多重继承,类层次结构中的每个类都被允许拥有两个或多个直接祖先类。
表面看起来易如反掌,事实确是:C#语言不支持多重继承。
为什么不支持呢?
根源在于,如果这些基类:拥有同样的签名的方法,但方法体具体实现不同;拥有同样attribute(同样名称和同样类型);拥有同样attribute,但类型不同;在编译时就会造成重复:编译器没有办法知道应该移除哪一个或者继承哪一个,而我们不该移除任何一个(因为它们表达了不同的信息)。这就是OO编程语言实现多重继承之痛。Ps:说白了就是:编译器过不了,我们不放过,这也就是引出了抽象类,接口的出现(下节再说)。
C# 面向对象之概念理解(2),布布扣,bubuko.com
原文:http://www.cnblogs.com/anlen/p/3600766.html