面向对象
在非面向对象编程中,通过使用数字、字符等基本数据类来描述和解决问题。
在面向对象编程中,通过使用问题所处环境中出现的实体、对象描述和解决问题。真实世界的事物(客体,客观存在并可主观感知的任何事物),都具有两种特性:状态和行为。面向对象编程就是从分析/识别/抽象,真实世界的事物开始。
类
类是构造对象的模板,可以用来藐视形容一类特定的事物的内容。就是从具体的事物中抽象出事物的状态(属性)、行为(方法)。
由类构造的对象的过程成为创建类的实例。
作为一个类的实例,特定的对象都有一组特定的实例字段,这些值的集合可以成为是这个对象的当前状态。
public class Student{
private int grade;
private String clazz;
private name;
private ubNumber;
}
基于面向对象分析,学生应该具有年级、班级、姓名、学号属性。这个类在程序中就代表了学生群体。基于抽象的类可以创建一个具体的对象。
new Student (1,"软件一班","小明",12345);
创建了一个一年级,软件一班,学号为12345的小明同学。
下面创建一个自行车类:
public class Bicycle{
private int cadence = 0;
private int speed = 0;
private int gear = 1;
//改变频率
void changeCadence(int newValue){
cadence = newValue;
}
//改变档位
void changeGear(int newValue){
gear = newValue;
}
//改变速度
void changeSpeed(int newValue){
speed = newValue;
}
//刹车降速
void downSpeed(int decrement){
speed = speed - decrement;
}
}
private int cadence = 0;
private int speed = 0;
private int gear = 1;
为属性(状态)
void changeCadence(int newValue)
void changeGear(int newValue)
void changeSpeed(int newValue)
void downSpeed(int decrement)
为改变属性(状态)的方法(行为)
特性
创建以下两个自行车对象:
Bicycle bicycle = new Bicycle(0,0,0);
Bicycle bicycle1 = new Bicycle(0,0,0);
在现实生活中,两个具有同样的频率、档位、速度的自行车显然不是同一辆自行车。
如何区分具有相同行为的与状态的不同对象?
不同类型的事物通常具有一定共同的特性,同时又拥有区别于其他事物的自有的特性,面向对象编程允许从其他类继承状态和行为
需求:设计学校教务系统用户角色:教师,行政教工,学生;用户通过唯一的教工号/学号及密码登录
public class Teacher {
private String name;
//教工号
private int staffNumber;
private String password;
//职称
private String titile;
}
public class Staff {
private String name;
//教工号
private int staffNumber;
private String password;
//部门
private String department;
}
public class Student {
private String name;
//学号
private int ubNumber;
private String password;
//年级
private int grade;
}
在分析三个角色后,进一步抽象出相同的属性,设计用户类型
public class User{
private String name;
//用户唯一标识号
private int number;
private String password;
}
包
包(package),项目由众多独立的文件(类/接口等源文件,配置文件等)组成;包是用来组织相关源码文件,使程序结构更加清晰的命名空间(文件夹目录)
关键词“package”,声明包的路径名称;以“.”点分隔符分隔层次;必须声明在源文件的顶部;源文件位置必须与包声明的相同
CC:包命名规范。倒置的开发单位域名+项目名称+功能模块名称+层次名称等,全部小写的英文单数名词
命名规范
良好的编程规范,会使代码更易于理解,增加代码的可读性,提高代码的可维护性
CC:基本通用命名规范。所有包/类/接口/方法/参数/变量等的命名,必须使用有意义的/无歧义的英文单词/英文单词缩写;禁止使用中文/拼音/拼音缩写/英文拼音混合命名;区分大小写
CC:类命名规范。按驼峰式命名(Camel Case),不能使用关键词;每个单词仅首字母大写,一般为单数,工具类等可以使用复数
CC:大括号使用规范。所有“{}”大括号,左括号必须置于起始语句末,右括号独立一行或在关联语句始