一、什么是面向对象
学过JAVA的人都知道,JAVA是一个面向对象语言,那什么是面向对象呢?
我们常见的编程范式有命令式编程,函数式编程,逻辑式编程,而面向对象编程也是一种命令式编程。
命令式编程式面向计算机硬件的一种抽象,有变量(存储单元),赋值语句(获取存储指令),表达式(内存引用和算术运算)和控制语句(跳转指令),命令式程序就是对一个冯诺依曼机的指令序列的抽象,面向对象是对我们现实世界模型的一个抽象,之后在映射到冯诺依曼机的指令序列。
面向对象的基本特性
如果只是用变量,赋值语句,表达式,控制语句去构建现实世界模型的话会非常困难,所以面向对象的出现的根本原因就是就是为了解决这个问题,以及这个问题放在工程生产中产生的新的更为复杂的问题。
面向对象让我们从指令代码操作变量转变为通过指令操作对象。 当我们理解了这个以后再去看面向对象的基本特征:
抽象
封装
首先抽象就是建立一个对现实模型的抽象,封装就是将变量,赋值语句,表达式,控制语句进行组合来描述上面的抽象,并且将他们“打包”,看成一个原子结构,之后的程序逻辑都是围绕着这个原子结构进行的。(可以说的简单一些,就是把具体事物的共通性抽象出来,然后用编程语言来阐述它,把它封装成一个对象)
最后,面向对象的编程就是将原来的 ”模式一“ 改变为 ”模式二”
模式一:程序 = (赋值语句+表达式+控制语句)+ 变量
模式二:程序 = 对象 + 对象(对象之间的调用)
“万物皆对象”
面向对象的高级特性
对象之间的关联关系
抽象,封装只是对现实模型和冯诺依曼机之间基本的映射关系,而现实世界中模型与模型之间还存在很多关系,如继承、组合、依赖等。
而维护这些关系也成为面向对象语言的一个特性,并且有相应的语法支持。
1.继承is-a组合:一个类继承具有相似功能的另一个类,根据需要在所继承的类基础上进行扩展。
优点: 具有共同属性和方法的类可以将共享信息抽象到父类中,增强代码复用性,同时也是多态的基础。
缺点: 子类中扩展的部分对父类不可见,另外如果共性比较少的时候使用继承会增加冗余代码。
2.组合has-a组合:has-a组合是在一个类中引用另一个类作为其成员变量。
优点: 可扩展性和灵活性高。在对象组合关系中应优先考虑has-a组合关系。
缺点: 具有共性的类之间看不到派生关系。
当你对这些有概念的时候,你就会清楚为什么JAVA语言的精华或者说面向对象语言的精华就是老三样:封装、继承、多态
二、理解对象
面向对象的开发方法把软件系统看成各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的子系统。面向对象的开发方法将软件系统看成各种对象的集合,接近人的自然思维方式。
※ 对象是对问题领域中事件的抽象。对象具有以下特性:
1)万物皆为对象。问题领域中的实体和概念都可以抽象为对象。例如学生,成绩单、教师、课和教室。
2)每个对象都是惟一的。正如世界上不存在一模一样的叶子。
3)对象具有属性和行为。
例如小张,性别女,年龄22,身高1.6m, 体重40kg, 能够学习,唱歌。小张的属性包括姓名、性别、年龄、身高和
体重,行为包括学习、唱歌。
例如一部手机,牌子是诺基亚、价格是2000元,银白色,能够拍照、打电话和收发短信等。这部手机的属性包括品
牌类型type、价格price和颜色color,行为包括拍照takePhoto(),打电话call(),收发短信receiveMessage()和发短
信sendMessage().
4)对象具有状态。状态是指某个瞬间对象的各个属性的取值。对象的某些行为会改变对象自身的状态,即属性的取值。
例如小张本来体重为40kg,经为减肥后,体重减到35kg.
肥胖状态: 40kg
|
减肥行为
|
肥胖状态: 35kg
5)每个对象都是某个类的实例。(内存中开辟区储存特定的数据:是类的具体体现)小张和小王都属于学生类、中国和美国都属于国家类、中文和英文都属于语言类。
. 类是具有相同属性和行为的对象的集合。
. 同一个类的所有实例都有相同属性,但属性取值不一事实上相同,但是它们的状态不一定相同。例如小张和小王都属于学生类,都有姓名、性别、年龄、身高和体重这些属性,但是他们的属性取值不同。
. 同一个类的所有实例都有相同行为,意味着它们具有一些相同的功能。
三、JAVA中面向对象的体现
对象构建:
类——》JVM类构建对象(属性的构建初始化,方法的构建)——》对象——》测试(方法和特征的调用)
exc:
Student
学号 姓名 性别 年龄 班级 身高 体重 地址
行为:学习 吃饭 睡觉
教务系统
Student
学号 姓名 性别 年龄 班级
体检中心
Student
学号 姓名 性别 年龄 班级 身高 体重
//特征(属性)的声明
修饰符 类型 属性名[=属性值];
class Student{
public long id;
public String name;
public boolean gender;
public int age;
}
//构建行为
修饰符 返回类型 方法的名字(参数args…){}
行为 方法的构建2种
public void 方法名(参数…){}
public Object 方法名(参数…){
return object;
}
看完这么多,你应该对JAVA中的面向对象已有了模糊的概念,让你在以后的学习道路上走得越来越远,虽然这篇文章给予你的帮助不大,但是可以让你有所收获我就很开心了。
领取专属 10元无门槛券
私享最新 技术干货