面向过程以及面向对象的差异以及面向对象的三大特性
面向对象编程与面向过程编程是相对应的。
面向过程(Procedure Oriented 简称 PO)
面向过程指的是将一件事情进行拆分,分解成一个个方法和数据,然后按照一定的顺序对这些方法进行执行,等方法执行完毕,那么事情也将会完成。
(每个不同的方法可以视为每个不同的工程,所以称为面向过程)
面向对象(Object Oriented 简称 OO)
面向对象指的是将事物抽象成对象的概念,先抽象出对象,然后赋予对象一些属性以及方法,然后再使每个对象执行自己的方法,使问题得到解决。
举例说明
例子:进入商城进行购物
面向过程
执行:进入商城(方法)-> 挑选商品(方法) -> 结账(方法)
//面向过程编程
System.out.println("进入商城");
System.out.println("挑选商品");
System.out.println("结帐");
面向对象
创建(new)出对象”人“;
”人“对象加入数学以及方法:进入商城(方法)、挑选商品(方法)、结账(方法);
执行:人.进入商城(方法) -> 人.挑选商品(方法) -> 人.结账(方法)。
//面向对象编程
class person{ //创建对象“人”
public void Enter() {
System.out.println("进入商城");
}
public void Select() {
System.out.println("挑选商品");
}
public void Checkout() {
System.out.println("结账");
}
}
//调用对象执行
person p = new person();
p.Enter();
p.Select();
p.Checkout();
二者优缺点对比
面向过程:
优点:性能比面向对象高,无需实例化对象(只需按一定的顺序执行过程)
缺点:可维护性差(若结账时分有现金结账或手机支付)
面向对象:
优点:易维护、易复用、易扩展,面向对象具有封装、继承、多态的特征,能够设计出低耦合的系统,使系统更加灵活,更加易于维护
缺点:性能方面比面向过程低
面向对象的特性:封装、继承、多态
封装:将客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象进行操作,对不可信的进行信息隐藏。(简单来说就是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。)
继承:继承可以使用现有的类的所有功能,并且无需重新编写原来的类的情况下对这些功能进行扩展。
多态:一个类实例的相同方法在不同情形有不同表现形式。
实例说明
依旧按照上面的例子,对面向对象的三个特性进行说明
封装:
如p.Enter()
,是由person
类的实例化对象p
进行调用,而该Enter
方法的实现细节已经被封装在Person
类中,反观面向过程,则直接将方法细节暴露出来。
//面向过程实现“进入商城”
System.out.println("进入商城");
//面向对象实例化对象实现“进入商城”
person p = new person();
p.Enter();
继承:
假如现在有了小朋友的出现,小朋友除了进入“挑选商品”外还会有“参与游戏”这一方法。
class children extends person {
public void Game() {
System.out.println("参与游戏");
}
}
//children类继承了person类的方法,并且可以进行扩展
//实例化children对象,其不仅具备“进入商城”方法,同时有了“参与游戏”这一方法
children c = new children();
c.Enter();
c.Game();
输出结果:
多态:
假如在商城中,年轻人希望在结算时通过手机支付,而老年人希望使用现金支付,那么多态的作用就很明显的展现出来。
//年轻类,将结账方法进行修改
class young extends person {
public void Checkout(){
System.out.println("使用手机支付结账");
}
}
//老年类,将结账方法进行修该
class old extends person {
public void Checkout(){
System.out.println("使用现金支付结账");
}
}
//进行调用后相同的方法因为不同的的情况有了不同的表现形式
young y = new young();
y.Checkout();
old o = new old();
o.Checkout();
输出结果: