面向对象(一)

本文介绍了面向过程和面向对象的设计思想、典型语言以及它们在解决问题上的优势和局限性。强调了类、对象、构造方法和方法重载的概念,并区分了值传递和引用传递在Java中的应用。
摘要由CSDN通过智能技术生成

面向过程和面向对象

面向过程(procedure -Oriented Programming),POP

设计思想:面向过程关注的焦点是过程,就是操作数据的步骤。如果某个过程的实现代码重复出现,那么就可以把这个过程抽取为一个函数。这样就可以大大简化冗余代码,便于维护。

典型语言:C语言。

优缺点:是一种“执行者思维” ,适合解决简单问题。分析出解决问题所需要的步骤,然后把步骤一步一步实现。但是扩展能力差、后期维护难度较大。

面向对象( Object Oriented Programming),OOP

设计思想:面向对象关注的焦点的类。在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,用类来表示。

典型语言:Java、C#、C++、python、Ruby和PHP等

优缺点:是一种设计者思维,适合解决复杂问题。代码扩展性强、可维护性高。

两者之间的联系

面向对象可以帮助我们从宏观上把握、从整体上分析整个系统。 但是,具体到实现部分的微观操作(就是一个个方法),仍然需要面向过程的思路去处理。他们是相辅相成的。面向对象离不开面向过程

面向对象

类和对象

类(Class)和对象(Object)是面向对象的核心概念

具有相同特征的事物的抽象描述,是抽象的、概念上的定义。

类的结构

变量:事物属性的描述(名词)

方法:事物的行为(可以做的事情 动词)

构造方法:初始化对象

块:一段没有名称的代码块

内部类:即在类体中声明的类

如何写一个类

第一步:发现类。

例如:各种车,根据不同类型的车,抽象出"车类"。

声明格式为:

[访问权限修饰符] [修饰符] class Car{

}

访问修饰符有两种public,无(默认)

修饰符:final,abstract

关键字class用来定义一个类

第二步:发现类的共有属性(成员变量)

public class Car{
//成员变量定义
String name; //名称
String color; // 颜色
float price;//价格
​
}

第三步:发现类的共有行为(成员方法)

方法的声明格式为:

访问权限修饰符  修饰符 void start(){

System.out.println("汽车启动");

return 返回值;

}

对象

实际存在的该类事物的每个个体,是具体的,因而也称为实例。

创建并使用对象

Car car= new Car();

Car car:使用Car类作为类型声明一个变量car.

new Car():使用new 创建对象,然后调用Car类的构造方法初始化对象.

= :将右边创建的对象地址赋给左边的car变量

同一类的每个对象有不同存储空间。

总结

类是一类事物的抽象概念,是一个模型. 对象是由这个模型所创造的,一个个具体存在的,实实在在存在的实例. 所以创建对象的过程也叫实例化对象.

现实生活中先有对象后有类,而编程时先设计类后创建对象.

构造方法

定义:构造方法名与类名相同,且没有返回值,且不需要使用void修饰

作用: 在构造方法中为创建的对象成员变量初始化赋值

特点:每个类都有构造方法,如果没有显式地为类定义构造方法,Java将会为该类提供一个默认无参构造方法,但是只要在一个Java类中定义了一个有参构造方法后,默认的无参构造方法会失效。

一个类可以有多个构造方法。

public class Car{
    String n;
public Car(){ }
public Car(String name){ 
     n = name;
   }
}

创建Car类的对象

Car car1 = new Car();

Car car2 = new Car(“宝马”)

方法的重载

定义:方法的重载是指一个类中具有相同的名字,但参数不同的多个方法。

不同之处:参数不同(可以有三方面的不同)

1、参数数量不同

2、参数类型不同

3、参数顺序不同

调用时会根据不同的参数表选择对应的方法。

public void max(int x,int y){
        a=x;
        b=y;
        System.out.println("最大值为:" + (a > b ? a : b));
    }
    public void max(double x,double y){
        a1=x;
        b1=y;
        System.out.println("最大值为:" + (a1 > b1 ? a1 : b1));

方法重载跟方法的返回值类型没有任何关系

对象与引用

Java 语言中除基本类型之外的变量类型都称之为引用类型。

Java中的对象是通过引用对其操作的

例如我们自定义一个类:

class Car{
String name;
String color;
float price;
}
Car car= new Car();

通常把这条语句的动作称之为创建一个对象,其实,它包含了三个动作

1)右边的“new Car()”,是以Car类为模板,在堆空间里创建一个Car类对象。

2)左边的“Car car”创建了一个Car类型引用变量。所谓Car类的引用,就是以后可以用来指

向Car对象的对象引用。

3)”=”操作符使对象引用指向刚创建的那个Car对象。

其实是有两个实体:一个是对象引用变量,一个是对象本身。

Java中进行方法调用中传递参数时,参数传递有两种:

值传递

形参数类型是基本数据类型,方法调用时,实际把它自己的值传给形式参数,是两个不同的存储单元,所以形参值的改变不影响实参的值。

public class Test1 {
    public static void main(String[] args) {
        int a = 20;
        Test1 test1 = new Test1();
        test1.add(a);
        System.out.println("a= "+a);
    }
        public void add(int x){
            x = 65;
            System.out.println("x="+x);
        }
}

 

引用传递

形参数类型是引用数据类型参数,实际传递的只是地址,实参和形参指向的是同一地址,任何一方改变对象的值,另一方也会改变。

public class Test2 {
    String name;
    public void set(Test2 t){
        t.name = "小黄";
        System.out.println("name = "+t.name);
    }
    public static void main(String[] args) {
        Test2 test2 = new Test2();
        test2.name = "小黑";
        test2.set(test2);
        System.out.println("name = "+test2.name);
    }
}

 

基本类型传递的是该数据值本身。引用类型传递的是对对象的引用,而不是对象本身 。但是无论是值传递还是引用传递,其本质都是传值,所以也都统称值传递.

  • 22
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值