1.面向对象思想
面向对象是基于面向过程的编程思想
面向过程:强调的是每一个功能的步骤
面向对象:强调的是对象,然后由对象去调用功能
2.面向对象的思想特点
A: 是一种更符合我们思想习惯的思想 (“懒”)
B: 可以将复杂的事情简单化
C: 将我们从执行者,变成了指挥者
举例:
买电脑:
面向过程: 打开百度----> 搜索电脑 ----> 了解电脑 ----> 了解电脑的基本组成 ----> 了解电脑中的组件 ----> 去电脑城 ---> 挑选电脑 ----> 货比三家 ----> 讨价还价 ---- 买回电脑
面向对象: 我知道我要买电脑 ----> 叫电脑专家去给我买 ---> 电脑就买回来了
洗衣服:
面向过程:找到桶 ----> 脱下衣服 ---> 将衣服放入桶中 ----> 打开水龙头 ----> 放入蓝月亮 ----> 关闭水龙头 ---> 然后浸泡一会 ---> 搓一搓---> 然后弄干 ----> 找衣架 --> 晾衣服
面向对象: 把衣服脱下来 ----> 丢到全自动洗衣机 ---> 找衣架 --> 晾衣服
吃饭:
面向过程: 起床 ---> 开法拉利---> 去菜市场 ---> 挑选食材 ---> 洗菜 ----> 切菜----> 开火---> 放油 ---> 放盐 ---> 放水 --->放食材 ---> 翻炒 ----> 关火 ----> 装盘 ---> 吃饭
面向对象: 打开手机----> 点开美团/饿了么---> 吃饭
家常食物,买洗衣机和点外卖太不划算了,所以找个对象,才是真正面向对象 哈哈哈哈!!(ps:开玩笑)
万物皆对象!
注: 看完例子再对照面向对象的思想特点去看,就一目了然了!
3.把大象装进冰箱
面向过程:
动作有哪些呢?
A:打开冰箱门
B:装进大象
C:关闭冰箱门
代码体现:
class Demo{
public static void main(String[] args){
/*
* 打开冰箱门的动作,我现在仅仅是为了演示,才写一个输出语句表示
* 其实,它可能需要做很多操作,这个时候代码就很多了,假设
我要多次打开冰箱门,代码一多,每次都得写一遍,麻烦不?
这个时候就应该用方法封装
*/
//System.out.println("打开冰箱门");
//System.out.println("装进大象");
//System.out.println("关闭冰箱门");
//写了方法以后,调用就改变了,其实这种就是使用面向过程思想写出来了的
//面向过程就是使用很多很多方法组成的,但什么方法都往里面放,到时候找的时候还得一个一个看
//比如我有一个工具类: 操作字符串的方法也在里面,操作数组的方法也在里面,操作数学相关的方法也在里面,
//到时候要找的时候很麻烦,不明确, 我们应该操作字符串的方法就放在String类中,操作数组的方法就放在Array类中,操作数学相关的方法就放在Math类中,
open();
in();
close();
}
public static void open(){
System.out.println("打开冰箱门");
}
public static void in(){
System.out.println("装进大象");
}
public static void close(){
System.out.println("关闭冰箱门");
}
}
面向对象:
我们怎么才能更符合面向对象的思想呢?
A:有哪些类呢?
B:每一个类里面有哪些东西(功能/方法)呢?
C:类与类之间的关系是什么呢?
A:把大象装进冰箱的分析? 如何分析有哪些类呢? 名称提取法(UML)
大象
冰箱
Demo
B:每一个类里面有哪些东西呢?
大象
in();
冰箱
open();
close();
Demo
main()
C:类与类之间的关系是什么呢?
Demo类中使用大象 和 冰箱的功能
代码体现:
class 大象{
public static void in(){
System.out.println("装进大象")
}
}
class 冰箱 {
public static void open(){
System.out.println("打开冰箱门")
}
public static void close(){
System.out.println("关闭冰箱门")
}
}
class Demo{
public static void main(String[] args){
冰箱调用开门
大象调用进去
冰箱调用关门
}
}
看到这里,你会觉得面向过程,看似代码更少,感觉更好一点,其实不是的,举个例子吧,就是看博客的时候,我们看到写的比较好的文章
都喜欢收藏,像我刚开始用的时候,就直接收藏到默认书签,刚开始收藏几篇,其实想回过头看的时候还很容易找到,但日复一日,年复一年,收藏的
文章越来越多,这时假如你要找一个之前收藏的关于“数据库索引”该篇文章时,你就很找到,因为该文件夹下,什么文章都往里面存过,(这就相当于面向过程,刚开始觉得很方便,随着时间的推移,需求的增加,后面就越来越难维护了)
正确的做法是:将这些文章分类, 创建一个JavaSE的文件夹,下面创建一个面向对象的文件夹, IO的文件夹,集合的文件夹...., 然后对应的文章放到对应的文件夹中去,要找的时候,就可以很快找到
(这就好比,面向对象: 刚开始可能看起来要麻烦一点,但是后期维护起来比较方便,而且结构非常清晰!!)
//如果要做一个复杂的项目,一般采用面向对象的思想,因为后期维护性好,结构非常清晰
4.开发,设计,特征
面向对象开发:
就是不断的创建对象,通过对象调用功能
面向对象设计:
其实就是在管理和维护对象之间的关系
面向对象的特征:
封装
继承
多态