面向对象特征

来源:互联网 发布:厄舍府的倒塌 知乎 编辑:程序博客网 时间:2024/06/05 16:30


      编程也有一些年头了,我们常常都会提及面向对象编程,那么面向对象编程到底是什么,有一些什么特征呢?

      以下是本人一些粗浅的看法!

      面向对象,一个相对应的概念就是面向过程。面向过程的一个重要观点就是程序 = 算法 + 数据结构。面向过程的思想很符合人类解决问题的直接思维,算法代表了完成一件事情的步骤,先干什么,在干什么,然后事情就完成了。数据结构就是算法中数据的表示及存储。这对于一些中小型的程序而言,面向过程简单快捷。然而,对于大型程序,面向过程暴露出难以维护的噩梦。

     在面向对象中,是以对象为基础构建问题的解决方案。问题空间的中的元素通过抽象成为对象,通过对象技术,可以通过新增对象来解决变化中的问题,利于代码维护和加强代码的复用性。在java编程思想一书中,有提到Alan key总结了面向对象编程语言的五个基本特征。(1)万物皆对象。(2)程序是对象的集合,通过发送消息来告诉对方要做的事。(3)每一个对象都可以由其他的对象组成。(4)每一个对象都有自己的类型。(5)同一类型的对象可以接受相同的消息。这些特征说明了面向对象编程如何通过对象协作来解决问题的。更学术化来说,面向对象的特征主要体现在以下几个方面,抽象,封装,继承,多态。

(1)    抽象。任何一种语言都提供了一定程度的抽象,抽象是将要求解的问题到计算机模型空间的一种转化,在面向对象语言中,将要求解的问题抽象成对象,对象是一个实体,一件事,一个名词等。对象是类的实例,一个对象包含了特定的数据和行为。

(2)    封装。每一个孤立的对象是没有任何意义的,对象之间要相互交互。每一个对象都可以对外提供特定的功能,对象之间通过发消息来完成特定功能。一个对象应该讲自己的属性及实现封装起来,只对外提供特定的接口进行交互。这样,相互之间的影响较少,对象可以改变自己的实现而不影响其他的类。

代码实例:

  <pre name="code" class="java"> <pre name="code" class="java">package com.lee;public class Money {public int amount;public Money(int amount){this.amount = amount;}public Money(){this.amount = 0;}public int getMoney(){return amount;}public static void main(String[] args) {// TODO Auto-generated method stub            Money  money = new Money();            System.out.println(money.amount);            System.out.println(money.getMoney());}}

       如上例,我们定义了一个money对象, 而money对象的属性amount没有封装起来,因此,客户端可以绕过其他方法直接操作amount变量,这不方便Money对象的变化,比方说我以后版本money里面amount变量改为其他名字,或者改变getMoney的实现,都因为amount变量暴露而引起问题。

 

(3)    继承。继承就是子类可以从父类中继承属性和方法,在通过添加自己的特定的属性和方法来形成一个新的类。通过继承,可以提供更丰富,更强大的建模方式,可以复用别人的代码,快速的构建整个体系。

(4)    多态。多态就是一个接口,多种实现,多态分离做什么和怎么做,将接口和实现分离开来。多态使得多态变量与特定的方法绑定起来,通过多态技术,我们可以实现针对接口编程,提高代码的通用性。

   

package com.lee;public abstract class Animal {public abstract void makeSound();public static void main(String[] args){Animal cat = new Cat();Animal dog = new Dog();cat.makeSound();dog.makeSound();}}class Cat extends Animal{@Overridepublic void makeSound() {// TODO Auto-generated method stubSystem.out.println(" mimi");}}class Dog extends Animal{@Overridepublic void makeSound() {// TODO Auto-generated method stubSystem.out.println("wow  wow");}}

    实例:

    上述实例中, Animal对象就是一个多态变量,可以通过任何Animal子对象来实例化它。Makesound为多态方法,通过运行时绑定,每一个animal对象总是能正确的发出声音。

0 0
原创粉丝点击