目录
面向过程 ---> 面向对象
随着计算机硬件的发展,软件的应用范围从科学运算走向各个领域,开发人员对问题域的认知度需要从方法上发生根本性的变化。
面向过程 ---- 基于分析问题域的解决步骤
面向对象 --- 基于分析问题域的参与角色
至于要说这两个方法谁更好,我认为只能说面向不同的问题域那种方法更适合,更自然;面向对象内部也存在面向过程的思维方式,我认为是不可分割的。
类的概念
概念:类是通过人脑的思维,把具有相同属性和行为的一组实体抽取为一种共同的抽象概念。
基本组成:属性和行为
本质:类是用户自定义的一种“数据类型”,属于引用数据类型。
对象的概念
概念:对象则是数据和动作的结合,是在软件系统中表现的具体的实际的存在,又被称之为“实例”。
基本组成:属性和行为
本质:根据“类”这种数据类型,在内存中真正产生的数据量,既能保存值数据,也能提供行为。
类与对象的关系
类是对象的抽象,对象是类的实例
类的语法
语法:
public class 类名{
//属性 --- 值数据
//行为 --- 方法(功能)
}
示例:
public class Dog {
public String name;
public int age;
public void taoHao{
System.out.println("摇尾巴");
}
}
属性
语法 ---- 定义变量 或 定义常量 的语法
具体表现:
1、访问修饰符 数据类型 变量名;
2、访问修饰符 final 数据类型 常量名 = 常量值;
示例:
public class Test {
public final String xingBie = "男";
public String name;
public int age;
}
类当中的变量属性具有自动初始化的效果:
1、基本数据类型变量初始化为0
2、引用数据类型变量初始化为null
如上new一个Test对象,若不给对象赋值,那么name会自动初始化为null,age为0。
行为
语法 --- 声明方法(函数)的语法
具体表现:
访问修饰符 可选修饰符 返回类型 方法名 (形参列表 ) {
方法实现语句;
}
类与类之间的关系
use - a 关系 在某个方法中绑定(使用)
has - a 关系 在类的定义中组合(拥有)
is - a 关系 继承
对象的语法
产生对象
new关键字产生对象
语法:
类名 对象变量 = new 类名( );
内存模型
特例:匿名对象
没有对象变量存放该对象的引用,所以只能使用一次。
使用对象
“.”点操作符,语法:
1、对象.属性;
2、对象.方法(实参);
销毁对象
垃圾回收机制(GC)
System.gc();
1、垃圾回收是独立的运行机制,有自身算法去控制回收,程序员没有办法干预;
2、当一个对象没有引用指向的时候,就会被GC纳入到回收机制当中。
如何在一个问题域当中设计类、属性和方法
1、首先在问题域当中寻找名词---对象应关注而产生;
2、是不是找到的名词都是要自定义的类呢?
不一定,判断是否有现成的数据类型就能够满足问题域对该名词的要求;如果有,直接使用现成的数据类型;没有才自定义类!
3、通过问题域判定,名词与名词之间的关联关系;
如果是has-a关系,那么把对方作为自己的一个属性;
4、找动词,动词都是行为;
5、把行为划分到它所属的类型当中去;
6、合并考虑行为和use-a关系,决定哪些行为是需要绑定另外一个类型的。