zoukankan      html  css  js  c++  java
  • Java 对象和类

              

    面向过程思想到面向对象思想的演变过程:

      在面向过程中,是以方法来进行组织代码的,然后方法之间的相互调用。这样场景在数据相对较少,方法相对较少的情况下,是没有问题的。但当应用程序庞大复杂时,一个根本完成不了,需要多人协作来进行开发时,这时就有问题了。

    别人在不清楚你所写的功能代码的情况下是很难上手的,因为我们是以方法来进行组织代码的,别人需要把整个流程熟悉后,才能进行在之前的基础上进行开发(别人需要把每一个方法内部的实现细节都要了解,才能进行修改,否则很有可能把之前程序的逻辑性打乱,从而引发BUG。比如,之前的逻辑是A方法中调用了B方法,但是经过修改之后,又调用了C方法,导致整个逻辑就出现了问题。)

    所以,以面向过程的思维进行大型开发时,程序的管理比较复杂,不易于程序的扩充;对于程序的可维护性比较低;

    但是,在C语言中,有一个结构体的特性,可以把每一类型的变量存放到每一个结构体中来进行管理。比如,把车相关的变量存放到车的结构体中,把行车导航仪的相关的变量存放到导航仪的变量中。当变量使用时,使用结构体.变量来调用对应的变量。方法也类似的操作,封装到一个个的结构体中。

    但是,这样还是存在缺陷的,比如,车相关的方法:启动的方法,需要调用启动相关的变量时,必须要调用封装启动变量的结构体,才能获取数据。在此基础上,就在思考,为什么不把车启动的变量和方法的数据封装到一起呢,这样明显更加具有条理性。

    于是,把每一类型的数据封装到一起,这时,类的概念就出现了(C++,在C语言的基础做了升级)。这个就是面向对象的思维;

    以类的方式组织代码后,之前1000个变量和1000个方法的代码结构就会变为n个类,这样管理程序的效率就能大大提高。同时,程序也变的更容易扩展。比如,在现在的功能之上,添加自动驾驶的功能时,只需要添加一个相关的类即可,原有的代码结构并不需要修改。其次,程序的开发分工更加合理,比如按照功能来进行分工,从而提高程序开发的效率;当出现人员变更时,新人只需要研究对应的功能即可,不需要把整个应用程序流程研究一遍才能上手,这样也大大降低程序的维护成本;

    在选择面向过程开发,还是面向对象开发时,是分应用场景的,如果程序的逻辑比较庞大复杂时,选择面向对象。如果代码比较少,逻辑比较简单时,选择面向过程即可,没必要去选择面向对象。

     

    面向过程思维和面向对象思维的对比

    举例:

    如何驾驶汽车?

    面向过程:                              面向对象:

    1、踩离合;                              1、驾驶员;

    2、挂挡;                                2、汽车;

    3、踩油门,放离合;                      3、驾驶员开汽车;

    4、车走了;

    面向过程属于线性思维,考虑的是第一步做什么,第二步做什么。。。。。,当事情比较简单时合适。但当事情变的复杂,需求他人的帮助下才能完成时,就需要面向对象的思维了。

    面向对象思维来思考事情该如何做时,首先考虑这件事情中,包含有哪些对象,比如,有驾驶员和汽车两个对象,把如何驾驶汽车的多个方法封装到汽车对象当中,汽车直接调用即可实现。所以,在面向对象当中,是包含着面向过程,是对面向过程的高级封装;

    面向过程:以事件为中心,强调的是做一件事的步骤;

    面向对象:以事物为中心,强调的是由谁来做;

    二者最终的目的一样,但方式不同;

    面向对象思想编程 总结:

    0)编程的本质:

    把现实中存在的逻辑,使用代码来实现;现实中逻辑,就是使用语言了进行表达的。

    1)面向对象编程(OOP)的本质:

    以类的方式组织代码,以对象的方式封装数据(以面向对象的思维组织代码,封装数据)。

    2)什么是对象:

    对象是具体的事物,一类事物具体的一个实例;

    举例:张三、李四就是人的对象;

    什么是类:

    是对对象的一种抽象(抽象,抽出像的部分),一类事物的一个抽象;

    举例:人、动物、汽车,都是类;

     

    在编程思想中,必须先定义类,才有对象,对象是java的核心;

    抽象的两个方面,也就是一个类包含的两个部分;

    1、静态属性------>成员变量;

    2、动态行为------>成员方法;

    每一个对象都有自己的属性,属性值一般和另一个对象的属性是不一样的。

    调用一个方法,必须先new一个对象,然后对这个对象来调用这个方法。针对不同对象调用的方法,它的作用域是不一样的。

    类是对象的模版,new出来的对象,都共享类的模版;

    3)面向对象也叫做面向类的编程:

    作为面向对象,在处理业务逻辑时,不应该先考虑第一步做什么,第二部做什么;

    考虑:

    1、在问题当中,有哪些类,哪些对象;

    2、在这些类和对象中,应该具有哪些属性和方法;

    3、类与类之间有怎么样的关系;

    技巧:找类的方法:名词,判断名词是类,还是属性;

    4)如何在内存中区别类和对象:

    类是静态的,在内存的代码区;

    对象是new出来的,在堆内存;

    5)对象的创建和使用:

    1、必须使用new关键字来创建对象;

    2、使用对象名(引用).成员变量来引用对象的成员变量;

    3、使用对象名(引用).方法(形参列表)来调用对象的方法;

    4、操作对象,就是操作它的地址,对象名(引用)就是地址;

    6)对象和类 总结:

    对象和类的关系:特殊到一般,具体到抽象;

    类:class;

    对象:Object(事务) , instance(实例) ;

    类可以看成一类对象的模版,对象可以看成该类的一个具体实例;

    类是用于描述同一类型的对象的一个抽象的概念,类中定义了这一类对象所应具有的静态和动态属性。

    对象是java程序的核心,在java程序中“万事万物皆对象”;

    JDK提供了很多类供编程人员使用,编程人员也可以自定义类;

    创建Java自定义类:

    步骤:

    1)定义类(考虑修饰符、类名)

    2)编写类的属性(考虑修饰符、属性类型、属性名、初始化值)

    3)编写类的方法(考虑修饰符、返回值类型、方法名、形参等)

    类的属性、类的方法:

    1)属性,field,属于成员变量;

    2)属性用于定义一个类或一个类的对象所包含的数据,或者说静态属性;

    3)属性的作用范围是整个类体;

    4)在定义成员变量时,可以对其进行初始化,如果不对其初始化,Java使用默认值对其初始化;

    5)属性定义格式:

    [修饰符] 属性类型 属性名 = [默认值];

    6)面向对象中,整个程序的基本单位是类,方法是从属于类的。

    7)java中方法参数传递是:值传递;

    类包含的元素:

    1)成员变量:描述对象的静态属性,分为静态成员变量、非静态成员变量;

    2)代码块:

    3)构造方法;

    4)成员方法:描述对象的动态行为,分为静态成员方法、非静态成员方法;

    5)内部类;

    构造方法:

    1)构造器:也叫构造方法,constructor;

    2)构造器的作用:(1)用于构造该类的实例(对象),(2)用来初始化对象的属性;

    3)语法格式:

    [修饰符] 类名(形参列表){

    代码块;

    4)构造器是一种特殊的方法:

    A ) 使用new + 构造方法,来创建一个类的新对象;

    B )  构造器虽然有返回值,但是不能定义返回类型(返回值的类型肯定是本类对象),不能在构造器里调用return;

    C ) 如果没有定义构造器,则编译器会自动定义一个无参的构造方法。如果已经定义则编译器不会添加;

    D ) 构造器的方法名必须和类名一致;

    E ) 构造方法可以有多个,构造方法的重载;

    F ) 最好同时定义无参和有参构造方法;

  • 相关阅读:
    Unique Binary Search Trees 解答
    Unique Paths II 解答
    Unique Paths 解答
    Maximum Subarray 解答
    Climbing Stairs 解答
    House Robber II 解答
    House Robber 解答
    Valid Palindrome 解答
    Container With Most Water 解答
    Remove Duplicates from Sorted List II 解答
  • 原文地址:https://www.cnblogs.com/zhangze-lifetime/p/11597444.html
Copyright © 2011-2022 走看看