面向对象随想

来源:互联网 发布:我的世界pe联机枪械js 编辑:程序博客网 时间:2024/04/29 10:44

一直以来对面向对象思想在思考,怎么才能更好的理解和使用,很多时候都在想什么时候去使用接口,使用继承。很多时候也想用现实中的事物来描述面向对象,

既然是面向对象那一定可以跟现实中的对照吧!对面向对象的理解很多都是来自于书籍,不过大部分都是大同小异,比如下面的:

主要的uml关系有四种:泛化(继承),实现,依赖,关联(聚合,组合))

泛化:可以是子类继承父类,子接口继承父接口 在java中一般用extends来实现继承关系

实现:主要是类与接口之间 一个类想要实现其他模块的功能可以先让抽象类实现接口然后子类去继承抽象类让这些与外部模块交互的交给抽象类

依赖:是类与类之间的连接,一个类依赖另一个类的定义,依赖关系一般出现在一个类内部的局部变量,方法参数和对静态方法的调用可以举个列子来说比如:一个人要上高楼可以走楼梯也可以走电梯想要使用电梯就要去依赖电梯。

关联:关联关系与依赖关系比较像关联关系是一种强依赖关系与依赖关系的一些特点不同。

但是需要理解一些细节关联关系一般使用实例变量来实现一般用实例变量

这里主要介绍关联关系中的聚合和组合

聚合主要是整体和个体如人和他身上的某一部分,计算机和cpu,整体内部与包含的部分的关系是has-a关系

组合主要也是整体和个体如家庭和家庭的某一个人,班级和班级的某一个人,整体是由个体组合而成是一种contains -a关系

上面两个关系主要得根据语义来区分。


理论知识很多我们怎么去理解和使用才能保证代码内聚性高耦合度低呢

             通常我们要区分开模块与模块然后在每个模块上写接口比如说我门的电脑鼠标接口我们在电脑主板模块上提供接口给鼠标,我们生产鼠标的时候不能随便连几根线就来当做鼠标,既然是鼠标就一定有他共有的特性我们把这些共有的特性抽取出来做成理想化的模型做成抽象模型在代码中就是抽象类了我们让这些抽象的模块去实现这些电脑提供的接口比如说插上电脑接口的那个头有无线鼠标有有线鼠标他们共有的特性都需要插在电脑上实现来自电脑的接口去读取数据然后传到我们手操作的鼠标中接口中提供的功能有很多,有滑轮,左键,右键,单击,双击,有的有声音,但是我们生产的鼠标的时候就不一定会全部实现这些功能这些功能只是抽象在抽象类和接口中,我们要做的鼠标可以去继承这个抽象类(模板),然后把我们想要的某个功能去实现去重写,我们重写的时候肯定有一些功能是需要调用电脑提供的接口的这个时候我们的鼠标就开始依赖电脑主板了,鼠标实现了抽象类实现usb接口主板也提供了这个usb接口我们不用知道主板的提供的这些接口的细节怎么做了我们只要声明我们的接口然后去通过这个接口的声明来创建一个存在的主板对象我们的接口作为对象的声明,这个对象可以放到抽象类里面也可以放到鼠标子类里面我们只要一个声明的接口和他对应的主板(我们创建的那个)我们使用的时候是使用接口来调用鼠标那个地方需要调用主板的接口就使用这个声明的接口就行了。子类可以通过父类来与接口交互。好好处理这些细节低耦合的程序就有了。


下面的接口不是interface的那个接口

那么再抽象一点对于我们每一次在某一个类中创建对象的时候我们是不是也可以理解每个类的声明都是接口我们从程序入口开始比如main方法中原来程序什么也没有只有一个空白main,我们需要很多很多功能来执行我们就要去声明很多对象这个对象其实就是接口我们去创建这个接口有private,protected,public等等我们开始在主程序main类中声明接口声明接口然后通过接口来创建实体当main来聚集了很多接口的时候我们就可以去调用这些接口类实现各种各样的功能创建过对象的接口我们调用的时候就会有存在的主体来给我们调用如果不存在我们调用的时候就报空,如果接口中的方法是在我们访问区域的如public,同一包下的protected等等,那么我们写程序的时候就要好好想想这个类中的方法哪些是要提供给外部访问的(做为接口)哪些是我们类内部的,好好处理这些细节高内聚的程序就出现了。

比如说电脑我们原来只有一个空白的主板我们需要里面的二极管,电阻需要外部的接口我们给这个空白的主板声明了很多对象有的对象插上我们创建对象后的实体(new)只有我们的主板中的对象就可以相互调用他们,我们不仅仅有电脑内部的接口也需要提供给外部一些我们电脑去实现他之后提供出来就行了。

高内聚低耦合不仅仅是模块之间也是我们每个类与每个类之间的,想要写好需要多思考多练习。

以上纯属个人思考,严密性不会很高,参考就行勿乱喷,写写~~

1 0