面向对象以及相关基本定义

2018-12-17 10:47:42来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

 摘要:本文简单介绍了面向对象的编程方式,以及与之有关的一些基本定义。

面向对象

什么是面向对象

面向对象编程是一种对现实世界建立计算机模型的一种编程方法。简称OOP(Object Oriented Programming)。

面向对象是一种编程思想,是一种思考问题的思维方式。

在现实世界中,当我们提到动物这个概念,实际上它是一个抽象的概念,而具体动物是指老虎,狮子,大象等等。

在对应的计算机模型中,我们把动物这种抽象的概念称之为Class,也就是类。而那些具体的对象称之为实例,并且用不同变量标识不同的实例。

面向对象和面向过程

面向过程与面向对象都是我们编程中,编写程序的一种思维方式。

面向过程的程序设计方式,是遇到一件事时,先做什么,再做什么,然后一步步实现的过程。

面向对象的程序设计方式,是遇到一件事时,先思考有哪些类和对象,然后思考类和对象里有哪些属性和方法,然后分析类和类之间的关系,最后一群对象合力能把事就好。

类和对象

定义

类是一组具有相同特征的对象的集合,是一个抽象的概念。类中定义了这一类对象所具有的静态属性(属性)和动态属性(方法)。

对象是一个类具体的某一个实例,是看得见摸得着的东西。世间存在的一切都可以看做是对象。

语法

定义类:

 1 public class 类名 {
 2     属性类型 属性名 = 属性值;
 3     ...
 4     public void 方法名(int i) {
 5         方法体;
 6     }
 7     ...
 8     public static void main(String[] args) {
 9         主函数方法体;
10     }
11 }

定义对象:

1 类名 对象名 = new 类名();

方法

定义

方法就是用来完成解决某件事情或实现某个功能的办法。

在Java中,声明一个方法的具体语法格式如下:

1 修饰符 返回值类型 方法名(参数类型 参数名, 参数类型 参数名, ... , 参数类型 参数名) {
2     执行语句;
3     return 返回值;
4 }

修饰符:

方法的修饰符比较多,有对访问权限进行限定的,有静态修饰符static,还有最终修饰符final等,这些修饰符在后面的学习过程中会逐步介绍。

返回值类型:

用于限定方法返回值的数据类型,返回给调用方,返回类型可以是任意类型。

如果不需要返回值,则写void,也不需要写return和返回值。如果需要返回值,则需要写一个返回类型,并且return后的返回值需要和返回类型一致。

方法名:

功能块的名字,命名规则和变量命名规则一样。

参数类型和参数名:

参数类型用于限定调用方法时传入参数的数据类型,可以为任意类型。参数类型和返回类型没有任何关系。

参数名是一个变量,用于接收调用方法时传入的数据。

参数:

参数类型和参数名组成参数。

参数可以有多个,中间用逗号隔开。

方法定义时参数称为形式参数,简称形参。方法调用时参数称为实际参数,简称实参。

形参和实参的类型、个数、顺序必须一致,名字没有要求。

执行语句:

里面可以写任何逻辑语句,表示的是此方法的具体功能。

return和返回值:

return用于结束方法以及返回方法指定类型的值。

返回值是被return语句返回的值,该值会返回给调用者。

调用

方法的调用可以通过如下方式调用:

1 类型 变量名 = 对象实例.方法名(参数);

但是在不同的情况下又有不同的区分,有的可以不写或者不能写。

是否有参数

如果有参数,那么需要在括号中填写参数,多个参数用逗号分隔: 类型 变量名 = 对象实例.方法名(参数, 参数); 。

如果没有,则不需要填写参数: 类型 变量名 = 对象实例.方法名(); 。

是否有返回值

如果方法有返回值,那么需要用接收返回值,也可以不接收,但建议用对象接收: 类型 变量名 = 对象实例.方法名(参数); 。

如果没有返回值,则不需要接收返回值: 对象实例.方法名(参数); 。

是否在当前类中使用

如果在当前类中使用,则可以直接调用,不需要通过对象实例调用: 类型 变量名 = 方法名(参数); 。

如果在其他类中使用,则需要通过对象实例调用: 类型 变量名 = 对象实例.方法名(参数); 。

如果是被statis修饰的方法,则可以通过类名调用: 类型 变量名 = 类名.方法名(参数); 。

参数传递

参数传递是指,调用方法时,将实参的值传递给形参过程。

定义方法时,参数列表中的变量,我们称为形式参数。调用方法时,传入给方法的数值,我们称为实际参数。

当调用方法时,如果传入的数值为基本数据类型(包含String类型),形式参数的改变对实际参数不影响。

当调用方法时,如果传入的数值为引用数据类型(String类型除外),形式参数的改变对实际参数有影响。

重载

同一个类中,方法名相同,参数列表不同,这种现象称为方法重载(overload)。

所谓的参数不一样,主要有两点:第一是参数的个数不一样,第二是参数的类型不一样。只要这两方面有其中的一方面不一样就可以构成方法的重载了。

重写(覆盖)

方法覆盖是说子类重新定义了父类的方法,是在两个类中,必须有相同的方法名,相同的参数列表,相同的返回类型。

被重写的方法不能拥有比父类的方法更严格的访问控制权限。

构造方法不能被继承,因此不能被重写,在子类中只能通过super关键字调用父类的构造方法。

UML类图

简介

在UML中,类使用包含类名、属性和操作且带有分隔线的长方形来表示,类图分为三层。

第一层是类的名称,如果是抽象类或接口,就用斜体表示,其中接口名称的上部会用<<interface>>修饰。

第二层是类的成员变量,通常是字段和属性。表示方式为: 可见性 名称:类型 [ = 缺省值 ] 。

第三层是类的成员方法。表示方式为: 可见性 名称(参数列表) [ : 返回类型] 。

类的成员变量和成员方法的修饰符分为+、#、-,分别表示public、protected、private。

类之间的关系

类之间的关系有实现(Realize),泛化(Generalize),关联(Associate),聚合(Aggregate),组合(Compose),依赖(Dependency)。

其中,聚合(Aggregate),组合(Compose)属于关联(Associate),是特殊的关联(Associate)关系。

关系强度(耦合度)由高到低为:泛化=实现>组合>聚合>关联>依赖。

实现(Realize)

关系:用来表示类与接口、抽象类与接口之间的关系。

箭头:用空心三角形+虚线表示,箭头指向接口。

泛化(Generalize)

关系:泛化是一种继承关系,用来表示类与类、类与抽象类、抽象类与抽象类、接口与接口之间的关系。

箭头:用空心三角形+实线表示,箭头指向父类或父接口。

关联(Associate)

关系:关联可以是双向的,也可以是单向的;关联关系可以进一步划分为聚合及组合关系。

箭头:用实线箭头表示,双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

聚合(Aggregate)

关系:聚合用来表示整体与部分的关系,是一种弱的关联关系,体现为A可以包含B,但B不一定是A的一部分。

箭头:用空心的菱形+实线箭头表示,菱形指向整体。

组合(Compose)

关系:组合用来表示整体与部分的关系,是一种强的关联关系,体现了严格的整体和部分的关系,整体和部分的生命周期一样。

箭头:用实心的菱形+实线箭头表示,菱形指向整体。

依赖(Dependency)

关系:依赖用来表示两者之间的依从关系。

箭线:用虚线箭头表示,箭头指向被依赖的对象。

完整的关系图

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Java:使用DOM4j来实现读写XML文件中的属性和元素

下一篇:java类中成员的初始化顺序(一)