目录
编程规范
一、面向对象概述
1.1、什么是面向对象
例1:把大象关进冰箱分几步?(以小明为例)
面向过程:1、小明把冰箱门打开 2、小明把大象装进冰箱 3、小明关上冰箱门
面向对象:1、招一个能操作冰箱的工人,小明(对象)
2、指挥工人把大象装进冰箱
(可以清楚的看到,所有的事情都是小明做的)
人物(对象) | 小明 (能操作冰箱的工人,也就是我们所说的对象) |
功能(属性) | 1、打开冰箱门 2、装大象 3、关闭冰箱门 |
所以
问题更改:把1000只大象装进冰箱分几步?
面对过程:1、小明把冰箱门打开 2、小明把第一只大象装进冰箱 3、小明关上冰箱门
4、小明把冰箱门打开 5、小明把第二只大象装进冰箱 6、小明关上冰箱门
..................循环1000遍(非常死板,复用性低)
面向对象:1、招一个能操作冰箱的工人,小明(对象) 2、指挥工人把大 象依次装进冰箱。(可复用性高)
面向过程---面向对象的转变:
面向过程:
扮演角色:执行者
关 注 点:执行过程/(步骤和顺序)
优缺点:直接高效、复用性低
面向对象:
扮演角色:指挥者
关 注 点:具备功能的整体(对象)(1.有哪些参与者 2.各自需要做什么)
优缺点:复用性高,易于扩展,维护
面向过程 | 面向对象 | |
扮演角色 | 执行者 | 指挥者 |
关 注 点 | 执行过程(步骤和顺序) | 具备功能的整体(对象) 有哪些参与者和各自需要做什么 |
优缺点 | 复用性低(死板) | 复用性高,易于维护,扩展 |
总结:面向对象是一种软件开发方法。
定义:面向对象是相对于面向过程来讲的,把相关的数据和方法组织成一个整体,从更高层次对系统进行建模。
//已经理解的就不用看下面的例子了,不理解的继续看下去
例2、日常场景,一日三餐的解决。
面向过程:
亲力亲为:买菜-做饭-吃饭-洗碗
面向对象:
招聘一个保姆,坐等吃饭
人物(对象):保姆
功能(属性):买菜-做饭-洗碗
例3:你是一个千万富豪,此时,你的生活不限于一日三餐,还有花园修剪,草坪维护,泳池大理等等。
面向过程:此处省略10000000000个子
面向对象:1、招聘一个管家 2、管家招聘各种工人 (指挥管家做事,管家指挥工人做事)
注意;写代码也是一样的,各种功能采取不同的模块,如果只关注过程的话,当代码量达到一定的量后,就写不下去了。
1.2、三大思想(OOA、OOD、OOP)
面向对象分析(OOA):
面向对象设计(OOD):
面向对象程序(OOP):
1.3、三大特征(封装 继承 多态)
封装:封装就是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和 修改的访问级别,将抽象得到的数据和行为(或功能)相结合,形成一个有机的整 体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数 都是类的成员
意义:明确标识出允许外部使用的所有成员函数和数据项,内部细节对外部调用透明, 外部调用无需修改或者关心内部实现。
(1)javabean中的属性私有,提供getset对外访问,因为属性的赋值或者获取逻辑只能 由javabean本身决定,而不能由外部胡乱修改。
private String name:
public void setName(String name){
this name = "tuling_"+name;
}
代码中的name有自己的命名规则,明显不能由外部直接赋值。
(2) ORM框架
在我们操作数据库的时候,不需要担心链接是如何建立的,sql是如何执行的,只需要 引入mybatis,调方法就可以
继承:继承基类的方法,并做出自己的改变活扩展
子类共性的方法或者属性直接使用父类的,不需要自己再定义,只需扩展自己个性化 的。
多态:方法的重载本身就是一个多态性的体现
基于对象所属类的不同,外部对同一方法的调用,实际执行的逻辑不同。继承、方法 重写,父类引用指向子类对象
父类类型 变量名 = new 子类对象;
变量名.方法名();
是无法调用子类特有的功能的
二、类与对象的关系
2.1:类与对象的关系
类:是共性产物,具有综合的特征
例1;
类 名: 人
综合特征:名字、年龄、性别、身高等等所有人的有 的特征,叫综合特征
例2:
类 名:车子
综合特征:颜色、类型、大小、价格等所有车共有的特征,叫综合特征
对象:一种个性产物。具有一种种个性特征
关系;注意:类必须通过对象才可以使用,对象的所有操作都在类中定义
关系:图纸--------------------实物
图纸必须通过实物才可以使用,实物的所有操作都在图纸中定义
属性:相当于人的一个个特征
方法:相当于人的一个个行为:吃饭,睡觉,打豆豆等等
三、类与对象的创建
类的定义格式:
class 类名称{
成员属性;
成员方法;
}
eg:图纸,属性和创建对象类似
class Person{
//属性----特征
String name;
Int age;
char sex;
//方法---行为
}
属性的定义格式:
数据类型 属性名;
属性定义并赋值的格式;
数据类型 属性名 = 初始化值;
方法的定义格式:
package day01;
/*
* class 类名{
* 成员属性;
* 成员方法;
* }
*
* 、、、、
* 类必须编写在.java文件中,一个.java文件中可以有N个类,但是只能存在一个public修饰的类
* public:权限修饰符
* .java文件的文件名称必须与public修饰的类名一致
* **/
public class ClassAddObject {
public static void main(String[] args) {
// TODO Auto-generated method stub
//对象创建
/*格式
* 类名.对象名=new 类名();
* **/
Person p = new Person();
//对象属性赋值
//格式:对象名.属性名=值;
/*调用格式
* 对象名.方法名称(实际参数列表);
* **/
p.name="张三";
p.age=18;
p.sex='男';
//调用说话的方法
p.say();
//调用计算的方法
p.sum(100, 200);
//打印出来
int s=p.sum(100, 200);
System.out.println(s);
}
}
//创建一个类,描述一个人(相当于人的图纸)
class Person{
//成员属性;----特征
String name;
int age;
char sex;
//成员方法----- 行 为
/*方法的定义格式
* 返回值类型 方法名(形式参数列表){
* 方法体;
* return 返回值;
* }
*注意:void 没有返回值
* **/
//创建一个人说话的方法
void say() {
System.out.println("自我介绍:我的名字是:"+name+",我的年龄是:"+age+",性别:"+sex);
}
//创建一个可以计算加法的方法
//返回值类型:int
int sum(int x , int y){
int z= x+y;
return z; //retun代表这个方法执行完了,在return后面不能在写代码
}
}
这些全是基本,在下一篇里我将讲述
1、构造方法
2、方法(构造方法)的重载
3、匿名对象
在下一篇(面向对象进阶)
1、封装
2、this关键字
3、静态static
4、权限修饰符
5、main方法详解