面向对象(封装和封装策略)

封装

概念:

封装(数据的隐藏)
通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。

意义:

1.提高程序的安全性,保护数据
2.隐藏代码的实现细节
3.统一接口
4.系统可维护增加了

我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的的方法给外部使用

总结:

封装:

1.属性私有

2.在类中定义:set/get方法存取属性,set方法优点:可以做参数有效性判断

this关键字:用来区分同名变量的

快捷键:

alt+insert(Windows) 、control+enter(Mac)

可以快速创建有参构造、无参构造、set方法、get方法

面向对象(类与对象)文章总结,我们得出如果我们不对类中的重要属性进行封装,那么会导致属性可以被任意修改,这是很不安全的,学习了封装之后我们就可以对其重要的属性进行封装了,我们先来看如果不对类中重要的属性进行封装会导致什么情况:如下图所示:

从图中可以看出,在没有对属性进行封装的前提下我们可以对其任意修改,现在我们将其属性进行封装看看有什么区别,如下图所示:

封装之后,无论是设置对象的属性,或者访问对象的属性,如果不通过get或者set方法都是不行的,如果student类中不给属性对应set方法就无法对这个属性进行改变,同理不给属性对应的get方法也就无法对这个属性进行访问.

这里抛出两个问题:

1.如果对student类中的属性进行封装了,那么有参构造方法还有必要写吗?直接都用属性对应的set方法进行赋值不可以吗?

解答:我最初想到这个问题的时候也是分的疑惑和纠结,我们可以这样想,其实set()方法和有参构造方法两者并不冲突。当我们实例化一个对象后最开始我们要对他的属性进行赋值吧,初始化的时候用有参构造方法是最方便的,如果不用有参构造方法,假如这个对象有100个属性,那么我就需要调用100次set方法进行初始化赋值,这就是十分的繁琐了。所以初始化值的时候利用有参构造方法,后面需要对其某个属性进行改变的时候进行用这个属性对对应set方法操作。

2.使用快捷键alt+insert(Windows)、control+enter(Mac)创建set方法或者get方法后,方法中this关键字是什么作用?

解答:如上图所示创建的set方法或者get方法中都有this关键字,我们可以发现set方法或者get方法中的参数名和student类中的属性名相同的,如果不加this关键字,系统就无法区分这个名字到底指的是student中的属性名字还是方法中的参数名字,所以需要this关键字来进行区分的。

1.this关键字表示当前对象的...

2.this.name 表示当前对象的name属性

3.作用是用来区分同名变量的

封装策略

优先选择第二种方法

通过上面对封装的学习,我们结合实际的开发项目经验,可以把封装策略大概分为两种情况。

首先一个项目会包含:

1.实体类(entity):包括属性,构造方法,get/set方法,...

2:业务类(service):包括业务方法

第一种封装策略:

.业务类和实体类合二为一,把业务方法写在实体类中,省去业务类的定义(小型系统)

第二种封装策略

业务类和实体类分离,业务类只关注数据的定义(属性,构造,get/set),业务类关心业务功能,它们是分离的(中大型系统)

注意:第二种封装策略更有利于后期的升级和维护!!!!!!

这里举一个例子方便理解:以学生管理系统为例,它包含实体类、业务类。

实体类就主要包含了属性,构造方法,get/set方法,...,如果我们把业务类(成绩录入、排名情况、学号查询这一类的业务方法)和实体类合二为一了,那么当我们想要升级某个方法的时候,就必须让整个学生管理系统不能运行。但是如果我们将实体类和业务类分开,当我想升级某一个方法的时候,我只需要停止这个功能的使用,然而其他的功能是可以正常运行的,互相不影响,虽然最初构建项目的时候代码量增加了但是后期维护效率大大提升了!

posted @ 2022-03-16 19:45  JanoCode  阅读(254)  评论(0)    收藏  举报