引言:
面向对象最大的特点就是分析的过程不再采用解决问题的步骤作为分析的切入点,而是换成问题域中参与的的角色作为切入点。它主要针对的是大型问题域,由于过程复杂,数据的交互比较繁琐,所以必须有这么一个分析过程,去整理清楚角色、角色职责和角色的关系。
由此引出面向对象和面向过程的对比。在我个人观点来看这个问题是一个比较性的问题,而不是得出谁更好的结论,应该是在某个问题域当中谁比谁更自然一些。
什么是封装
作为普通人,一想到“封装 ”,脑海里面浮现的是以上如图。没错!这就是封装包裹的过程。就是这样一个过程,我们能很明确的感觉到:封装。“封”是形容“装”的,这是两个动作,先装再封。“装”的目的是把东西归纳到一起,是为了方便处理和使用;而“封”的目的才是把信息隐藏,但信息隐藏也绝对不是说绝对的看不到,它分出了各种的级别;
结合一下编程的思想和语法
我们在学习类的定义,访问修饰符这些都是属于面向过程当中“封装”这个特性。
其实“类”的定义,其实本质就是就是在学习封装当中“装”这个过程。我们把在系统中所需要用到的数据和功能进行分门别类的放置,有些设计在A类,有些在B类当中。我们可以认为“类定义”当中的那对“{}”其实就是我们装的边界。
包的引入其实也是一个“装”的体现。一个包里面的类理论上只能直接认识本包中的其他类,来自于其他包的类必须使用 “import 告知”。我们在写一个类的时候,不需要用import来告知的是什么呢?
-
来自于java.lang包中JDK类;
-
自定义于本包中的类。
-
有一种特殊情况,我们要在自定义类中使用多个需要import进来的同名类,咋办呢?
多个同类型的对象如何处理? --- 我们把它们可以装到一个集合中去。 而集合大家目前只学习过一种,叫做数组。这里,对象也可以放到数组中去。 数组的产生语法证明了数组本身就是一个对象,它是存在内存的“堆”当中的。
new int[]{13,56,96,-3,6};
数组最大的问题有三个:
1、只能存放同一数据类型;
2、连续地址内存空间
3、空间大小不可变。
再比如:循环语句块。这个语法就是把一堆代码作为一个整体(“装”在一起),每次循环执行一次。
for(int i=0;i<10;i++){
//循环语句块
}
还有方法块:也是白一些系列语句作为一个整体,在调用方法就把这些语句块执行一次。
void method(int a){
//方法实现的语句块
}
访问修饰符肯定是“封装”的体现
它们就是为“封装”而生的!从各方面来看,“封装”绝不是“封死”,它是由范围和级别的。所以才会有各种修饰符来针对不同的情况。
访问修饰符 | 封装范围 | 级别 |
Private | 私有 | 1 |
默认 | 同包 | 2 |
Protected | 受保护 | 3 |
Public | 公共 | 4(访问权限最大) |
接下来对于一个放东西的容器,其能够完成的常见操作无非就是如下五个:
1.放数据----增
2.取出数据----查
3.修改数据----改
4.删除某个数据----删
这四个动作就是对数据操作的最本质的四个动作---增删查改(CRUD)
5.获取放入了多少个元素数据。
总结:Java的封装作用
1.提高了程序的安全性,保护数据
2.隐藏代码的实现细节
3.统一接口
4.增强系统的可维护性
❀ 提问环节❀
1.封装的本质是否就是尽量把变量和方法写在自定义里面?
封装的本质就是“信息隐藏”;这个不要对“信息”有误解,误认为信息就是数据。此处的“信息”是广义的。包括数据,结构,设计思路,算法,实现步骤,,,,,。
封装的表现形式在聚的编程语言当中要去遵循该语言的语法。类的定义是封装的一种表现形式;以后还有很多;包括“继承”,“抽象”这些也有封装思想的体现;代码级别有封装思想的体现,程序的组织结构同样也有封装的体现。