神武飞扬

导航

 

面向对象和面向过程详解

我们常说高级语言分为:面向过程和面向对象。

面向过程:c

面向对象:c++, Java

共同点:面向过程和面向对象都是解决实际问题的一种具体思路。

区别:

大家描述一下如下两件事儿:

如何开汽车(事物比较简单,可以用线性的思维去解决)

面向过程:1.采离合2. 挂档3.踩油门,放离合4.开了

面向对象:

驾驶员

2.  汽车

驾驶员开汽车!Motor.start();

如何造汽车(事物比较复杂,使用简单的线性思维无法解决)

面向过程:1. 造车轮 2. 造发动机 3. 造车皮4. 挡风玻璃

面向对象:

车轮

买橡胶

到马来西亚

买飞机票

找到橡胶厂

掏钱买

用船将橡胶运到国内

造磨具

将橡胶放入磨具

出车轮

发动机

….

车壳

….

座椅

挡风玻璃

….

将上面的造出的东东,组装,汽车造出!

对于描述复杂的事物,为了从宏观上把握、从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,可能需要面向过程的思路去处理。

解决简单问题可以使用面向过程解决,解决复杂问题:宏观上使用面向对象把握,细节处理上仍然使用面向过程

面向对象思考方式:遇到复杂问题,先从问题中找到名词,然后确立这些名词哪些可以作为类,再根据问题需求确定类的属性和方法,确定类之间的关系

一 对象和类的概念

java中有一句名言,万事万物皆对象,对象指的是一个具体的事物

比如一个叫小明的人就是一个对象,而类是对对象的抽象

人类就是一个类,小明就是人类的一个实例也就是对象,人类中可能有其他人也就是其他实例,小李,小孙等等

把车作一个类的话,对象就是 我家的别克车,对象也可以是你家的玛莎拉蒂车,对象就是具体的事物,而类就是对象的集合,所有对象的统称

类可以看做是一个模版,或者图纸,系统根据类的定义来造出对象

 比如车类,模板就是有四个轮子,发动机,座位,可以跑

车类的一个对象可以是你家的车,就有四个轮子,发动机,也能跑,也能带着你跑,车是你家的车,是一个实在的例子

类的定义

在java中类的定义方式是  class 类名

1 class Car{
2     
3 }

比如这个Car类

上面的Car类一片空白,可以定义属性,有轮子,发动机,座位 可以定义跑的方法

class Car{
      String name;
      int age;
      String color;
      String zuowei; 
    void run(){
      System.out.println("我是汽车我能跑,还能带人跑");
    }  }

上面定义了属性,有车的名字,车龄,颜色,座位,还有个跑的方法

创建了类了,就该创建对象了,通过车类得到你家的车

类名 对象名 = new 类名()

class Car{
      String name;
      int age;
      String color;
      String zuowei; 
    void run(){
      System.out.println("我是汽车我能跑,还能带人跑");
    }
     public static void main(String[] args){
          Car car = new Car();
          car.name="极品宝马"
          car.age=3;
          car.color="黑色";
          car.zuowei="真皮";
          car.run();
       }   
}        

你家的车改名叫极品宝马,已经3年的历史了,黑色,被你改装成了真皮沙发,还在跑

一般类中除了属性和方法还包含构造器,也就是构造函数,可以在创建对象的时候直接给属性赋值,相当于,直接给对象做个自我介绍

class Car{
      String name;
      int age;
      String color;
      String zuowei; 
      public Car(String name,int age,String color,String zuowei){
            this.name=name;
            this.age=age;
            this.color=color;
            this.zuowei=zuowei;
      }  
    void run(){
      System.out.println("我是汽车我能跑,还能带人跑");
    }
     public static void main(String[] args){
          Car car = new Car("极品宝马",3,"黑色","真皮");
                   car.run();
       }   
}        

这和上面的效果是一样的,如果在定义类的时候不创建构造器,系统会默认定义一个无参构造器

类中的属性:[修饰符]  属性类型  属性名 = [默认值] 

可以直接赋初始值,也可以不赋值,系统会默认初始值

属性可以是基本数据类型,也可以是引用数据类型 

类中的方法:定义该类的功能,比如吃饭,睡觉,打架这些动态的行为,可以这么理解,属性是名词,方法是动词,方法展现的是该类能干什么事,有什么行为

方法定义格式:

[修饰符]  方法返回值类型  方法名(形参列表) {

// n条语句

}

在类中定义的变量成为成员变量,在方法定义在定义的变量称为方法变量,两者之间的区别是什么呢?

(1)在类中的位置不同

      成员变量在类中方法外

      局部变量:方法定义中,或者方法声明上

(2)在内存的位置不同

      成员变量:在堆中

      局部变量:在栈中

(3)声明周期不同

      成员变量:随着对象的创建而存在,随着对象的消失而消失

      局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

(4)初始化值不同

      成员变量:有默认值

      局部变量:没有默认值,必须定义,赋值,然后才能使用  

类和对象实例:

定义一个“点”(Point)类用来表示三维空间中的点(有三个坐标)。要求如下:

可以生成具有特定坐标的点对象。

提供可以设置三个坐标的方法。

提供可以计算该“点”距另外点距离的方法。

class Point {
    double x, y, z;
    
    public Point(double _x, double _y, double _z) {
        x = _x;
        y = _y;
        z = _z;
    }
    
    public double  getDistance(Point p) {//传参数,参数就是Point的一个对象
      //计算两点之间的距离
return Math.sqrt((x - p.x)*(x - p.x) + (y - p.y)*(y - p.y) + (z - p.z)*(z - p.z)); } } class Test { public static void main(String[] args) { Point p = new Point(5.0, 6.0, 7.8); Point origin = new Point(0.0, 0.0, 0.0);
     //通过调用方法得到距离 System.
out.println(p.getDistance(origin)); } }

结果

 上面的例子中有一个 public double getDistance(Point p)方法,没错 它的类型是Point类 也就是我创建的类,它需要传递的是一个Point对象

如果你看到一个方法需要的参数是一个类名,就应该知道这里实际需要的是一个具体的对象。
该方法还可以传递一个匿名对象,所谓匿名对象就是没有名字的对象,
比如getDistance(new Point(1,2,3));这样也可以调用该方法

匿名对象

(1)没有名字的对象
(2)应用场景
A:调用方法,仅仅只调用一次的时候。
b:可以作为实际参数传递。



posted on 2017-04-15 17:52  神武飞扬  阅读(432)  评论(4编辑  收藏  举报