面向对象的六大原则(之二)

前言
今天的分享会主要是针对程序员的,只能尽量举现实例子讲的通俗易懂,不过尽量保持通用的情况下,我还是会偏向专业.希望能够理解.

1.初中级程序员与高级程序员的差别
1.个人理解初中级程序员跟高级程序员的差别在于编程思想,如果仅仅只是为了实现功能而去编写代码,大家都能实现。但是不注重代码本身的质量的话.你写出来的产品很有可能就变成一个一次性的产品,一个高级程序员,编写的代码.有扩展性,维护性,可读性.这才是一个好的代码.基于这种代码上面的产品才可以长远的发展。经得起风浪.

如果一份代码,仅仅是为了实现功能,而忽略了以上性质的话.当这份代码交由下一个程序员之手的时候,对他来说可能就是一个灾难片了.这个影响十分的大.首先会影响下一任程序员的心情,从而影响了工作效率,拖慢了产品的迭代进度.导致产品跟不上时代的变化..可谓是蝴蝶效应.

所以一个好的程序员编写的代码.除了实现功能以外,还会给产品带来一个十分弹性的发展空间,相反...

2.拥有一个良好的编程原则和思想对自身的发展和代码的水平是重中之重~
1.无论是对自己也好,还是对公司也好.掌握了良好的编程原则.带来的好处是多方面的.所以今天我未必能讲出精髓,但是我希望能让大家了解一些编程的思想,甚至打开一个大门,帮助大家过渡一个阶段.甚至让已经在这个阶段的同志们,更加的深刻,和巩固.

3.不断学习才会成功,紧跟时代变化
1.就算多聪明的人都好.不学习始终都会被时代抛弃.保持学习.保持谦虚的心.保持危机感.才会在这个时代之中找到自己的位置,走出自己的道路,所以在场的小伙伴们,让我们坐着船票,一起策马奔腾把.(乘风破浪)


在这个时代在场的大家都是面向对象的程序员,所以我接下来会向大家介绍一下面向对象的6大原则其中两个,不过Java的面向对象可能对比其他语言会有所差异,所以有可能某些地方会理解不到.不过思想是通用的,希望各位能尽量吸收,如果我有什么说错的地方,欢迎立马指出来修正

首先简单回顾一下面向对象
1.面向对象
1.什么是面向对象
 “ 面向对象 是一种以事物为中心的编程思想。
面向对象程序设计,是一种程序开发的方法。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
2.面向对象的三大特征
1.封装
1.什么是封装?
1.将具体的属性或行为封装到对象中。
2.封装的好处
1 :隐藏了类的具体实现
2:提高对象数据的安全性
3:提高了程序的可维护性和安全性
2.继承
1.什么是继承?
1.让类与类之间产生关系,为多态做出了前提

2.继承的好处
1 :描述类和类之间的关系
2 :降低类和类之间的重复代码
3: 规范了共性(行为和属性)
3.多态
1.什么是多态?
一个对象,多个形态.简单来说就是狗也是动物,貓也是动物,人也是动物.可以说每个对象都有多个形态.Java中的多态前提是继承.
2.多态的好处
1.提高程序的扩展性
2. 把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

2.面向对象的六大原则之一(单一职责模式)
1.什么是单一职责模式
1.就一个类而言,应该仅有一个引起它变化的原因,简单来说。一个类里面应该是一组相关性很高的函数,数据.

#当我们定义类的时候,往往很多时候会混杂了很多类以外的功能和属性在其中.这样就会导致一个类十分的复杂和混乱.经过几次迭代之后.这个类会变成脆弱不堪.维护困难.

举一个现实例子来说.我们一开始只想造一个游戏鼠标.但是逐渐的,我们为这个鼠标新增了许多功能.甚至取代的键盘.用起来好像十分方便,但是到最后发现.这个鼠标里面混杂有键盘的功能.甚至播放音乐的功能.耦合在一起沉重不堪.当播放音乐的功能出现故障或者替换的时候.拆开这个鼠标维护已经十分困难。因为里面都是很多一条条的电线.让你无从下手维护或替换.到最后反而成为了缺陷

#因为方便.把功能耦合在一起.在代码中想补救的时候已经有点晚了.所以必须从一开始抓起.把功能分开.解耦.再组合一起用.比起耦合一起使用会更加好

定义类的时候想明白这个类的功能.定义好每个类.不要贪图方便把功能都写在一个类里面

2.举例说明(伪代码)
1.我们来看一份代码,我们不需要理解具体实现,我们在只知道这个类有那些属性和函数,这个属性和函数,分别有什么用就可以了


3.总结
1.如何划分一个类,一个函数的职责,每个人都有自己的看法,这需要根据个人经验,具体业务逻辑而定

2.但是还是有一个基本的指导原则:两个完全不一样的功能就不应该放在一个类中,一个类中应该是一组相关性很高的函数、数据

3.熟悉运用这个单一职责原则后.会令你的代码耦合度降低.提高扩展性以及维护性.以及可读性.收益无限.

4.我们需要不断的审视自己的代码,根据具体的业务、功能对类进行相应的拆分,这才是程序员优化代码迈出的第一步

3.面向对象的六大原则之二(开闭原则)
1.什么是开闭原则
开闭原则的定义是:软件中的对象(类、模块、函数等)应该对扩展是开放的,但是,对于修改是封闭的,在软件的声明周期内,因为变化,升级,破坏原有的系统,因此,当软件需要变化时候,我们应该尽量通过扩展的方式来实现变化,而不是通过修改已有代码来实现,当然,在实际开发中,只通过继承的方式来升级,维护原有系统只是一个理想化的愿景,因此在实际开发中修改原有的代码、扩展代码往往是同时存在的。

举一个现实例子:
1.扩展
我们现在主机里面有内存槽和金士顿内存.我们可以理解成两个对象。内存槽这个对象中含有海盗船内存条这个对象.大家知道.内存槽其实是有通用性的,其实除了插对金士顿这个牌子内存还可以插海盗船的内存.对不对.内存槽可以说是一个典型的开闭原则的拥护者,每当硬件有变化的时候.内存槽都能够插入内存.这里的内存意思.是所有内存实体的基类(抽象类).而所有具体牌子的内存条,都是内存的实现类.根据面向对象的多态的特征,内存槽这个对象本身只需要一个内存对象,你是什么牌子的内存都好.都可以插进这个内存槽里面.

简单说,每当我们内存需要更换的时候.我们只需要选好一个牌子的内存插进去就可以了,不需要去担心内存槽会因为插了某个牌子的内存,而需要改变内存槽的本体。

那么一来,就不需要因为更换内存而去修改内存槽本身.估计说到这里大家都有点迷茫,关系上面有点乱,下面就放出一个图来理解一下刚才的话

1.扩展: 通过多态.子类继承基类,运用多态,达到这个扩展的效果

看到这里 大家都会觉得,啊,内存槽真是万能,其实不是这样的,现实里面也会修改到内存槽本身,比如内存的架构变化了,DDR3进化到DDR5,这一下,内存槽里面也不得不必须因为需要识别到DDR5的内存而作出本质的改变.
现实中不可能百分百避免修改类本身,不过通过一些面向对象的技巧,还是能避免到百分之60~70的~

2.举例说明
//有兴趣的可以来看我这里询问我伪代码,考虑到时间不够我就不展示伪代码了
3.总结
1.每当软件需要变化的时候,应该尽量通过扩展的方式来实现变化,而不是通过修改已有的代码来实现
2.我们的开发过程中也没有那么理想化的状态,完全不用修改原来的代码,因此,在开发过程中需要自己结合具体情况考量,是通过修改旧代码还是通过继承使得软件更加稳定,灵活,在保证“代码腐块”的同时,也必须保证原有模块的正确性




你可能感兴趣的:(面向对象的六大原则(之二))