面向对象
面向对象与面向过程
面向对象 (Object Oriented,OO) 的思想对软件开发相当重要,它的概念和应用甚至已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD 技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
面向对象三大特性
面向过程 (Procedure Oriented) 是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。与面向对象明显的不同就是封装、继承、类。
笔者的理解:“面向过程”是做一件事,“面向对象”是造一堆东西。
形象说明
我们用把大象装进冰箱进行说明。
面向过程:
为了把大象装进冰箱,需要3个过程。
-
把冰箱门打开(得到打开门的冰箱)
-
把大象装进去(打开门后,得到里面装着大象的冰箱)
-
把冰箱门关上(打开门、装好大象后,获得关好门的冰箱)
每个过程有一个阶段性的目标,依次完成这些过程,就能把大象装进冰箱。
面向对象:
为了把大象装进冰箱,需要做三个动作(或者叫行为)。
每个动作有一个执行者,它就是对象。
代码实现
面向对象三大基本特性
封装
隐藏实现
继承
接口的重用。
通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。
多态
所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。
面向对象设计目的
强内聚、低耦合,从而使系统
- 易扩展 - 易于增加新的功能
- 更强壮 - 不容易被粗心的程序员破坏
- 可移植 - 能够在多样的环境下运行
- 更简单 - 容易理解、容易维护
面向对象的五大基本原则
单一职责原则(Single-Responsibility Principle)
其核心思想为:一个类,最好只做一件事,只有一个引起它的变化。
职责过多,可能引起它变化的原因就越多,这将导致职责依赖,相互之间就产生影响,从而大大损伤其内聚性和耦合度。
专注,是一个人优良的品质。同样的,单一也是一个类的优良设计
开放封闭原则[(Open-Closed principle)
其核心思想是:软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的。
对于扩展是开放的 (Open for extension)。
对于更改是封闭的 (Closed for modification )。
总之,不需要修改软件实体(类、模块、函数等),就应该能实现功能的扩展
里氏替换原则(Liskov-Substitution Principle)
其核心思想是:子类必须能够替换其基类。
里氏替换原则是关于继承机制的设计原则,违反了Liskov替换原则就必然导致违反开放封闭原则。
接口分离原则(Interface-Segregation Principle)
其核心思想是:使用多个小的专门的接口,而不要使用一个大的总接口。
具体而言,接口隔离原则体现在:接口应该是内聚的,应该避免“胖”接口。一个类对另外一个类的依赖应该建立在最小的接口上,不要强迫依赖不用的方法,这是一种接口污染。
依赖倒置原则(Dependecy-Inversion Principle)
其核心思想是:依赖于抽象。
高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。
创建对象的方式
-
使用关键字new一个对象
-
使用反射机制
User user = (User)Class.forName("xxx.xxx.User").newInstance(); User user = User.class.newInstance();
-
使用clone方法
-
反序列化