如何理解面向对象

如何理解面向对象

关于“面向对象”,网上有很多相关的介绍--《百度百科》,《维基百科》等都有详细的解释

这里笔者不准备讲什么理论,希望用更贴切日常生活的方式帮助大家理解面向对象设计的一些技巧,希望对大家有帮助

记得当年,JAVA课第一讲就是面向对象,用老师的一句话“一切皆对象”,那么如何理解程序设计中的面向对象,我们重点关注下面向对象程序设计中的几个关键点,下面将以问答形式阐述(代码以JAVA示范,读者可联系其它面向对象语言):

*什么是对象,对象的方法/属性又是什么?

这里的对象可以是一切的事物,包括:人、物体等

属性即是该事务的一些特征,如:颜色、大小等

方法是事务的动作,如:跑,跳等

举个例子:

家里养了一只棕色的泰迪,它今年一岁半了,喜欢“汪汪”叫

这里的泰迪就是一个对象,“棕色、一岁半”都是它的属性,叫是它的动作(即方法),用代码示范:

class Teddy{

public Color color;//属性

public double age;//属性

public void bark(){}//方法

}

*怎么理解程序中的类?

所谓“类”,即分类、归类(--可能有点不太恰当,但是方便理解)

就是把具有相似特征的事物放在一起统称为类

例如:生物学上有:鸟类、哺乳类等划分

*什么是继承?

我们还拿上面的泰迪举例:

泰迪、腊肠、黄毛、斑点等,它们有犬类所共有的特征:都有眼睛、有鼻子、有耳朵、会叫、会跳。。。这些属性和方法都是从犬类继承过来的

这时我们就可以对上面泰迪的代码做些改动,首先定义一个犬类,它有一些通用的属性和方法

class Dog{

public Color color;//属性

public double age;//属性

。。。。

public void bark(){}//方法

}

class Teddy extends Dog{//泰迪继承了犬类,即拥有犬类的通有属性和方法

}

*什么是多态?

我们在上面的基础上再做一些改动,可以看出泰迪和腊肠都继承了犬类“叫”的动作,但是它们的叫又有些区别,像这不同的犬都用“叫”这个动作,但又有它们各自的特点,这就是多态

Dog类不变

class Teddy extends Dog{

@override

public void bark(){}

}

class Dachshund extends Dog{//腊肠

@override

public void bark(){}

}

*什么是封装?

这个其实比较好理解,拿现实生活的例子来说“汽车发动机”,如某国产轿车采用原装进口发动机,那么这个轿车生产商直接拿进口发动机来用,不知道发动机内部构造以及如何生产(PS:笔者衷心希望国产汽车能够强大起来)

class Engine{

private List materials;

private List parts;

。。。。

privateEngine produce(){

............

}

/*****上面的原材料,零部件,生产工艺等等我们是看不到的***/

publicEngine getEngine(){//只能得到现成的发动机

returnproduce();

}

}