面向对象的三大特征学习感悟一、封装
顾名思义:就是封闭包装
对于数据来讲:
就是将同种事物的多种信息及其行为聚集合成一个整体,便于调用。
对于行为来讲:
可以为外界提供多种必要的功能,而不显露实现功能的细节。类似于相机,有精美的外表,可以实现拍照的功能,但是相机里面究竟是如何实现拍照的,外界不得而知也不需要知道,同样,内部的实现细节的变化不会改变外部访问原则,体现了高内聚,低耦合的特征。而且在外部多个对象访问下,不会针对每个对象提供服务,而是同时进行服务。
对于设计来讲:
1、为了实现一个大的功能及其需要进行的繁杂的工作,必须进行分工以提高开发效率,封装实现了不同功能可以分开进行,极大提高了工作的效率。
2、封装可以实现将不同种类的事物分别包装,各自实现自己的功能,降低彼此之间因变化引起的影响。当然,对于变化性大的事物,为了避免其因变化而影响其他类,可对其进行单独的封装。
学生管理系统就很好的体现了这一点:
1、要实现学生管理系统的运行,需要学生的信息,包括姓名,年龄等等
2、而管理系统则需要这些数据的逻辑结果,实现增、删、改、显示、排序等等众多功能
3、而为了实现这些功能,还必须对学生信息进行逻辑处理,然后才能得到功能想要的结果。
基于此,将所有学生分为一大类,实现学生信息逻辑处理的方法函数等等归为一大类,而负责显示逻辑处理结果的功能归为一大类,这样一来视线就变得清晰很多,不必为了每个学生的信息单独进行处理,避免了很多的工作量。
class StudentModel:
class StudentManagerController:
class StudentManagerView:
当然封装也有禁忌:
1、避免过度封装,学生在管理系统中信息的种类全部是一样的,区别只在于每个学生信息的内容不同,符合类的要求和封装的思想,没必要分为男生、女生等等类别。像逻辑处理类中的各种功能,比如增加学生、删除学生等等,都是对学生信息进行批量处理,进行相同的操作,如果全都封装起来单独调用,只是徒增工作量,且不便于统一管理,违背了封装高内聚的原则。
2、避免封装过度,将功能集中在一起。例如游戏中,敌人和玩家,都有血量、攻击力等属性和攻击、掉血、死亡等功能,但是不能放在一起统一管理,因为玩家的功能显示和敌人不完全一样,敌人死了游戏可以继续,但是玩家死了游戏就结束,功能有所区别,实现起来就不能统一调用。