面向对象的特征

面向对象

对象:

Every thing Is a object  对象(object)是一件事、一个实体、一个名词,一切可以获得的东西。可以想像有自己标识的任何东西。

从程序员角度:一个对象是一个具有状态、行为和标识符的实体。

什么是对象:

亚里士多德的《形而上学》:
实体独立存在现实世界由实体构成的东西,是一切属性的承担者
实体分为三类:
    可感的可毁灭的实体
    可感的不可毁灭(永恒)的实体
    永恒不动的、无生无灭的,是万物运动的最后动因--神

抽象类

抽象类(abstract class)是一种不能被直接实例化的类,抽象类主要用于描述高层次的类,因为其操作无法具体实现
比如:动物具有行为“吃”
拥有至少一个抽象操作的类必定是一个抽象类

public abstract Animal{
abstract void eat(String food);
}

接口

接口(Interface) 描述了一组行为的契约
接口可以看作是没有属性和具体实现行为的特殊抽象类
如果类实现一个接口,则它必须实现接口的所有操作 
`public Interface Animal{
    void eat(String food);
}`

共同点:

抽象类和接口很相似,都定义了抽象操作而推迟了实现部分; 都不能被实例化

比较

代码层次

--接口不允许实现任何方法;接口的属性只能有静态属性常量;类可以继承多个接口;
--抽象类允许实现部分方法;抽象类的属性定义没有任何限制;类只能继承一个父类(抽象类)

设计层次

--抽象类体现了一种继承关系,父类和派生类之间必须存在“is a”关系,即父类和派生类在概念本质上应该是相同的。
--接口表现出,实现类实现了interface定义的契约而已,即实现了接口规定的功能,是一种” like a”关系。

面向对象三大特性

封装
是指对象自身状态的改变完全依赖于自身的行为,在一个系统中,对象之间以各种方式相互依赖,如果其中一个对象出现故障,软件工程师不得不修改它的时候,对其它隐藏这个对象的操作意味着只需修改这个对象而不需要改变其它对象。
优点:良好的封装可以降低耦合度;类的内部可以自由修改;类具有对外的清晰接口。
继承
继承描述对象之间存在内在的静态关系,并最终以层次结构描述了整个世界
从现实世界看
    如果没有继承,世界上的对象都是独立的,对象与对象之间只有在特定的场景下才会发生联系,即描述动态关系
    世界可以按层次结构对实体进行归类,即描述静态关系
    比如:人->哺乳动物->动物->生物
从编程角度看
      有利于复用代码
多继承
--最早出现,目前多数语言已不支持;
--由于继承多个父类,子类经常存在命名冲突
--二义性:两个父类中有同名方法的时候,你不得不在子类的调用中指明此方法出自那个父类
--多继承的滥用增加了系统复杂性,导致无法维护
单继承
--目前的主流继承方式,比如java,C#;
--继承结构清晰,为树状结构;
--类可以继承一个父类,但可以继承多个接口
--从完全封装(对象必须是属性+行为)到半封装(承认了行为的独立性,契约式)
多态
相同的行为表现出不同的实现过程
多态的表现形式
--子类以父类的身份出现;
--子类在运行时以自己的方式实现;
--子类以父类的身份出现时,子类特有的属性和方法不可以使用。
二种实现方式:覆盖和重载
覆盖
    --子类重新定义父类的函数的做法
    --子类可以选择使用override将父类的实现替换为自己的实现
重载
    --指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)
重载只是一种编译器造成的语言特性,即函数地址是在运行期绑定的(晚邦定) ,与多态无关,与面向对象也无关。

对象之间的关系

一个系统一般由很多对象组成,对象之间并不是互相孤立的,而是存在着各种各样的关系。
包括:
    部分/整体
    一般/特殊
    关联
聚合
聚合是一种强连接
    对象之间存在的部分与整体的结构关系。把对象放在一起,变成一个更大的对象。比如电脑由CPU、内存、硬盘、显示器、机箱组成。
    比如:CPU从电脑中取出,CPU是一个独立的对象,但是电脑就不能构成一个完整的电脑了。
范化
一般/特殊是一种强连接
   对象之间存在着一般和特殊的结构关系,也就是说它们存在继承关系。很多时候也称作泛化和特化关系。
   比如:人和医生、学生三个对象之间存在着一般和特殊的关系。
关联
关联是一种弱连接
     对象是独立的,通过消息和事件在特定的场景下对象产生了联系。这种关联是松散的
     比如我开车,可以是QQ,也可以是奔驰
     比如你操作电脑,即你与电脑发生了联系
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值