[Java入门笔记] 面向对象编程基础(一):类和对象

什么是面向对象编程?

  我们先来看看几个概念:

面向过程程序设计

面向过程,是根据事情发展的步骤,按进行的顺序过程划分,面向过程其实是最为实际的一种思考方式,可以说面向过程是一种基础的方法,它考虑的是实际地实现,一般的面向过程是从上往下步步求精。

例如:如果你要吃饭,那需要:“买菜-洗菜-做饭-吃饭”等等,一步一步的来设计,就是面向过程

结构化程序设计

结构化程序设计是主张通过按功能来分析系统需求的一种设计思想。其主要原则可以概括为:

自顶向下:程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。

逐步细化:对复杂问题,应设计一些子目标作为过渡,逐步细化。

模块化设计:一个复杂问题,肯定是由若干稍简单的问题构成。模块化是把程序要解决的总目标分解为子目标,再进一步分解为具体的小目标,把每一个小目标称为一个模块。

结构化程序设计首先采用结构化的程序分析方法进行功能需求分析,然后使用结构化设计方法对系统进行设计,最后采用结构化编程方式进行系统实现。
这种采用结构化程序设计主张按功能把软件逐步细化,因此这种方法也被称为面向功能的程序设计方法

结构化程序设计里最小的程序单元是函数,每个函数都负责完成一个功能,作为程序入口的函数被称作主函数,由主函数调用其他函数,其他函数再调用其他一些函数,从而完成整个程序的功能。

图中可以看出,结构化程序设计自顶而下的设计方式,将一些功能定义成函数模块,再一步步细化功能。结构化程序设计具有两个不足之处:

1、设计不够直观,需要将客观世界的模型分解成一个一个的功能,每个功能处理一定的数据。

2、可扩展性不强,当其中某一个函数需要修改其功能是,需要自上而下地修改模块结构。

 面向对象程序设计

面向对象就是针对一个功能,而进行模块的划分,这部分和结构化程序很相似,但是有不同点,就是对象有继承,多态等形式,使得你没必要在大体相同地方要重新写程序。它从现实世界中客观存在的事物出发来构造软件系统,强调以现实世界中的事物(既对象)来思考问题。

使用面向对象方式开发,其最小的程序单元是类,这些类可以生成系统中的多个对象,而这些对象则直接反应为客观世界中的各种事物,如:

有“人”这样一个类,他有什么特征(年龄、体重等),有什么功能(吃饭、行走等),如果我们要完成上面面向过程中的功能,我们只需调用某个“人”对象的“食”方法即可。

程序的三种基本结构

无论是上面的哪种设计思想设计和实现程序,程序的设计都有可能会涉及都下面三种程序的结构:

顺序结构

顺序结构表示程序中的各操作是按照它们出现的先后顺序执行的。

选择结构

选择结构表示程序的处理步骤出现了分支,它需要根据某一特定的条件选择其中的一个分支执行。选择结构有单选择、双选择和多选择三种形式。

循环结构

循环结构表示程序反复执行某个或某些操作,直到某条件为假(或为真)时才可终止循环。在循环结构中最主要的是:什么情况下执行循环?哪些操作需要循环执行?循环结构的基本形式有两种:当型循环和直到型循环。

当型循环:表示先判断条件,当满足给定的条件时执行循环体,并且在循环终端处流程自动返回到循环入口;如果条件不满足,则退出循环体直接到达流程出口处。因为是"当条件满足时执行循环",即先判断后执行,所以称为当型循环。

直到型循环:表示从结构入口处直接执行循环体,在循环终端处判断条件,如果条件不满足,返回入口处继续执行循环体,直到条件为真时再退出循环到达流程出口处,是先执行后判断。因为是"直到条件为真时为止",所以称为直到型循环。

类和对象

面向对象的程序设计过程中有两个重要的概念:类(class)和对象(Object)。

什么是类?

类是对现实生活中一类具有共同特征的事物的抽象,它是一个抽象的概念。

比如小轿车、摩托、卡车、公交车,他们都有共同的特征,能够机动化的行走以及运载人或物品。所以我们可以把他们抽象为一个类:车。

什么是对象?

 对象是类这个抽象概念的一个具体体现,比如有一个类叫“人”,而这个叫张三的人、那一个叫李四的人,都是“人”这个类的具体的体现,所以他们是对象。需要注意的是:对象一定具体到某个个体,张三不一定是一个对象,因为可以有很多个叫张三的,一定是“这一个张三”才是一个对象。

如何定义类

定义语法:

[修饰符] class 类名{
    //类的内容
}

 

 如:

public class Person{
    
}

 

 我们定义了叫“Person”的一个类。

因为Java语言是区分大小写的,所以需要注意关键字的大小写的问题,类名可以自己任意定义,建议起名要具有实际意义以及每个单词首字母大写。

对于一个类而言,它包含三种最常见的成员:构造器、Field和方法。三个成员都可以定义0个或多个。

构造器

构造器是一个类创建对象的根本途径,如果一个类没有构造器,通常无法创建对象,所以系统会为每一个类默认定义一个构造器,在不明确定义的情况下,它是隐藏的,如果明确定义了,则不会默认定义。

 定义构造器的语法:

[修饰符] 类名([形参 参数名]){
  功能代码
}

 

 修饰符可以是public private protected 或者不写。

例:

public class Person{
    public Person(){}
}

 

 Field(属性)

Field用于定义该类或该类实例所包含的状态数据、描述对象的特征等,定义语法如下:

[修饰符] 数据类型 属性名 = 值;

 

 例:

public class Person{
    public String name;
    public int age;
}

 

 

 Person(人)这个类有两个Filed,分别用来描述姓名、年龄。上面这个例子中没有为其定义一个构造器,所以系统会为其默认一个构造器:public Person(){}

方法

方法用来定义该类或该类实例的行为特征或功能实现。

语法如下:

[修饰符] 返回值 方法名([形参 参数名]){
    //功能代码
}

 

例:

public class Person{  //定义一个Person类
    public String name;  //具有Field 姓名(name)、年龄(age)
    public int age;

    public Person(){}  //第一个构造方法

    public Person(String n, int a){  //第二个构造方法,有两个参数n和a,在创建对象是如果调用了该构造方法就会将name属性设置为传进来的n,age为a。
        name = n;
        age = a;
    }

    public void eat(String s){  //方法,模拟吃东西的功能
        System.out.println(name + "在吃" + s);
    }

    public void sleep(int hour){  //方法,模拟睡觉功能
        System.out.println(name + "睡了" + hour + "个小时");
    }
}

 

 

对象的创建和使用

前面已经说明过,创建对象的根本途径是构造器,通过new关键字调用该类的构造器来创建一个对象,如:

上面我们已经定义了一个“人”类,我们通过它创建一个对象。

Person p;  //定义一个Person类型的变量
p = new Person();  //通过new关键字Person类的第一个构造器,返回一个Person实例,也就是该对象。

 

也可以这样:

Person p = new Person("张三", 20);  //我们将上面的两步简化为一步,并且调用第二个构造方法,传递两个参数,为这个对象设置了姓名和年龄。

 

 

有了对象,我们就可以使用它了:

使用对象:使用“.”进行以下操作
  给类的属性赋值:对象名.属性
  调用类的方法:对象名.方法名()
System.out.println(p.name);  //将这个对象的名称打印出来
p.sleep(5);  //调用睡觉的方法

 

创建和使用对象在内存中的示例

上面我们有这样一行代码:Person p = new Person("张三", 20);

这行代码创建了一个Person对象,这个对象被赋值给p变量。

这行代码中实际产生了四个东西,p变量和Person对象、"张三"对象、数字20

当有等号时会先执行等号右边的代码new Person("张三", 20),这句代码中调用的是public Person(String n, int a)构造方法,而我们发现,在这个方法中也有两个变量String类型的n和int类型的a,所以执行这句话时内存中是这样的:

产生两个变量s和a,s是一个引用类型的变量,它在栈内存中存储的是一个堆内存中的内存地址,该地址指向堆内存中String类型的一个对象,啊变量是一个int类型数据,所以它的数值直接存储在栈内存中。

调用构造方法首先会创建一个Person类型的对象,对象中有name和age两个属性:

构造方法中有两句代码

name = n; age = a;

此时会将两个值赋给给对象

name = n:指向同一个对象

age = a:将值复制给age

继续执行,构造方法结束,清除a变量和s变量,执行语句等号右边代码,创建一个Person类型变量p,该变量指向通过构造方法返回的Person对象

                          

对象创建完成。

 

 

谢谢大家阅读,如有错误之处,欢迎大家指正。( ^_^ )

posted @ 2015-12-04 15:40  平平平平平  阅读(1606)  评论(1编辑  收藏  举报