面向对象的特征:

        计算机软件系统是现实生活中的业务在计算机中的映射,而现实生活中的业务其实就是一个个对象协作的过程。面向对象编程是按现实业务一样的方式将程序代码按一个个对象进行组织和编写,让计算机系统能够识别和理解对象方式组织和编写的程序代码,这样就可以把现实生活中的业务对象映射到计算机系统中。

       面向对象的编程语言有:封装、继承、抽象、多态等4个主要特征。

1.封装


       封装是保证软件部件具有优良的模块性的基础,封装的目标就是实现软件部件的“高内聚,低耦合”,防止程序相互依赖性而带来的变动影响。在面向对象语言的编程语言中,对象是封装的最基本的单位,面向对象的封装比传统的更为清晰,更为有力。面向对象的封装就是把描述一个对象属性和行为的代码封装在一个模块里,也就是一个类中,属性是变量定义,行为用方法进行定义,方法可以直接访问同一个对象中的属性。通常情况下,只要记住让变量和访问这个变量的方法放在一起,将一个类中的成员方法定义为私有的,只有这个类自己的方法可以访问这些成员方法,这就基本实现了对象的封装,就很容易找到要分配到这个类的方法了,就基本是面向对象的编程了。把握一个原则:把同一事物进行操作的方法和相关方法放在同一个类中,把方法和操作的数据放在同一个类中。

 例如1:

    人在黑板上画圆,这一共涉及三个对象:人、黑板、圆,画圆的方法要分配给哪个对象呢?

       由于画圆需要使用到圆心和半径,圆心和半径显然是圆的属性,如果把它们定位私有的成员变量,那么,画圆的方法必须分配给圆,它才能访问到圆心和半径这两个属性,人以后调用画圆的方法,表示给圆发消息而已,画圆这个方法不应该分配到人这个对象上,这就是面向对象的封装性,即对象封装成一个高度自治和相对封闭的个体,对象状态(属性)由这个对象自己的行为(方法)来读取和改变。

例如2:

司机将火车刹住了,刹车的动作是分配给司机还是分配给火车?

       显然,应该分配给火车,因为司机自身是不可能将火车刹住的,只有火车自己才能完成这个动作,火车需要调用内部的离合器和刹车片才能完成刹车这个动作,司机刹车的过程只是给火车发了一个消息,通知火车刹车而已。

2 .抽象


        抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一个类,这个类只考虑这些事物的相似之处和共性之处,并且会忽略与当前主题和目标无关的那些方面,将注意力集中在与当前目标有关的方面。例如,看到一只蚂蚁和大象,你能想象出的它们的共同之处,那就是抽象,抽象包括行为抽象和状态抽象两个方面。

例如:定义一个Person类,如下:

  

calss Person{
    String name;
    int     age;
   }

        人本来就是很复杂的动物,有很多的方面,但因为当前系统只需要了解人的姓名和年龄,所以上面定义的类中只包括姓名和年龄这两个属性,这就是一种抽象。使用抽象可以避免考虑一些与目标无关的细节,我对抽象的理解就是不要用显微镜去看一个事物的的所有的方面,这样涉及的内容就太多了,而是要善于划分问题的边界,当前系统需要什么,就只考虑什么。

3.继承


        在定义一个类时,可以在一个已经存在的类的基础上进行,把这个已经存在的类所定义的内容作为自己的内容,并可以加入若干新的内容,或者修改原来的方法使之更适合特殊的需要,这就是继承,继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提高了软件的可重用性和可扩展性。

4.多态


        多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程中并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类的中实现的方法,必须要在程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序的代码,就可以让引用绑定到个种类的实现上,从而导致该引用的具体方法随之改变,即在不改变程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。多态性增加了程序的灵活性和扩展性。

例如:

下面的代码中的UserDao是一个接口,它定义引用变量UserDao指向的实例对象由daofactory.getDao()在执行的时候返回,有时候指向的是UserJdbcDao这个实现,有时候指向的是UserHibernateDao这个实现,这样,不用修改源代码,就可以改变UserDao指向的具体的类实现,从而导致userDao.insertUser()方法调用的具体代码也随之改变,即有时候调用的是userJdbcDao的insertUser方法,有时候调用的是UserHibernatteDao的insertUser()方法;

UserDao user=daofactory.getDao();
userDao.insertUser(user);

 5.java中实现的多态机制是什么?


        靠的是父类和接口定义的引用的变量可以指向子类或者具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。

 

猜你喜欢

转载自blog.csdn.net/ranguangrong/article/details/88371230