Denua 博客

面向对象编程回顾

发布时间: 2018-11-19 13:32   分类 : Java    标签: Java 浏览: 61   


透彻理解面向对象对我们整体水平提高非常有帮助, 它指引着我们设计出更加健壮, 可用性更高, 更加规范的程序, 是作为一个合格程序员必须要做的事情. 面向对象编程的三大特性: 1. 封装 2. 继承 3. 多态 五大基本原则: 1. 单一职责 2. 开放封闭原则 3. 里氏替换原则 4. 依赖倒置原则 5. 接口分离原则 ## 三大特性 ### 封装 字面意思是把一件事物封闭包装, 在编程里就是把客观的事物描述成一个抽象的类, 比如把现实世界的一辆车封装为一个类 Car, 这个类可以有速度,重量,颜色等等. 封装之一, 一辆车的属性是在是太多了, 有外形, 有马力, 发动机型号, 座位数量, 有几个轮子,轮子有多大, 轮子有多宽, 这样一来, 我们不可能把一辆车所有的特性都封装在我们的类里面, **我们只提取其中我们 需要的特性**, 我们需要的特性如何选取呢? 这取决于我们要解决的问题, 比如我们要的是模拟几种不同的车载货, 我们需要的特性 就是车的载货重量, 以及运载货物类型类型和速度. 封装之二, 我们应该给用户提供哪些对车的操作, 我们不可以随意更改修改车的颜色, 因为这不是常用的需求而且违反法律, 我们也不 会去更改轮子的宽度, 更改轮子宽度这个功能也不是不能实现, 但是更改轮子宽度这个事情不但影响一辆车的性能, 还非常容易出现危险. 但是我们可以启动一辆汽车,可以加速,刹车,转向, 因为这些都是我们常用的也是必须要的功能. 这都是小汽车的功能, 而相对小汽车, 公 交车的功能又多了控制前后门开关, 以及到站提醒等等, 火车则不需要转弯这个功能. **对于用户, 我们只提供他们需要的操作, 把不必要的 属性都设为私有, 用户无法更改** 封装的类, 就是把一堆数据, 和对数据操作变幻的代码的集合, 其中部分数据提供对外的更改方法, 部分的数据不允许操作更改访问. 通过封装, 使得一个类的数据得以不同程度访问限制, 不被没有相应权限而无法访问修改, 从而防止程序出错, 也极大程度的精简了该类的操作, 去除不必要 操作方法, 我们设计类的时候也应如此, 尽量的减少不必要的公有方法. ### 继承 一个类继承与另一个类或实现了某个接口, 这就是继承, 继承后的类称为子类, 被继承的类叫做父类(或超类). 继承的思想就是将简单的, 通用的, 普遍的特性封装到一个类中, 这些属性具有普遍性, 其所有子类都具有该父类的属性或方法. 继承是单一层级关系, 一个类只能有一个父类, Java 中提供了接口, 来间接实现多重继承, 但是实现一个接口和继承另一个类是有很大的区别的. 比如, 子类中父类的方法不需要重写而子类与生俱来父类的方法和字段(用 private 关键字标记的除外), 而接口没有方法体, 也没有作用范围 限定关键字, 实现了接口就必须重写该接口的所有方法. 接口的作用更加类似于一种约定, 比如, 生产插座的厂商他约定插座的孔数, 以及每个 孔的作用等等参数, 而家用电器的生产商则必须遵循该约定, 否则你生产的家电用户买回家将无法接电. 而继承, 则是所有插座的属性, 比如, 所有插座都有孔, 都具有需要接通电线. 在设计类的时候, 把多个类共有的方法和字段封装到父类, 可以大量减少冗余代码, 也可以使得类更具有通用性, 扩展性, 在添加新功能时, 我们只需要在父类中添加一次, 就可以在所有子类中调用该方法. ### 多态 多态, 多种形态, 在一个类中多个相同的方法具有不同的参数的表现形式. 多态可以使具有不同内部结构的对象拥有相同的公有接口. 比如, 虽然 针对不同对象的具体操作不同, 但通过一个共同的父类, 则可以通过同一种方式调用. ## 五大基本原则 这五个原则是我们开发必须遵循的最基本的原则, 它指引我们设计出更加规范的代码, 让我们的代码可用性更高, 更具有健壮性. ### 单一职责 一个类的职责应该只有一个, 而不应该混杂所有的功能在一个类, 每个功能都应独立出一个新的类. 这有利于模块化管理, 让项目结构更加清晰. 我们应该把一个类中相对独立的功能分离开来, 或者可以抽象到父类的尽量抽象类父类, 再延伸子类细化相关方法和属性. ### 开放封闭原则 一个模块在扩展性方面应该是开放的, 而更改性方面应该是封闭的. 我们的程序需要出现新功能的时候, 不需对现有的代码进行改变. ### 里氏替换原则 子类应该可以替换父类并出现在父类能出现的任何地方. 我们应该尽量使用抽象类, 或接口作为父类, 这样只需声明一个父类接口, 而具体的实现通过子类完成. ### 依赖倒置原则 高层模块不需要依赖底层模块. 一个类B依赖另一个类A, 一个高通用性一个高度特殊, 此时, A 不该直接使用 B 的具体类对象, 而是应该由 A 定义一个接口, 让 B 去实现. ### 接口分离原则 所有模块和类之间应该通过接口隔离分开, 而不是直接引用具体的类. 应该尽可能的将一个多用接口分离成多个专用接口. (完)

评论    

Copyright denua denua.cn