面向过程 面向对象

———-面向对象
概述:java编程语言是纯粹的面向对象思想的语言。

现在程序开发有两个主流的方法:
(1)结构化程序设计,也叫面向过程程序设计
主张以功能/步骤来进行软件设计。

如在解决问题时,主要是思考的是解决问题的步骤思路:
围棋游戏:
1.游戏开始,2,黑棋执行,3,绘制图片,4,判断输赢,
5,白棋执行,6,绘制图片,7,判断输赢,8,返回2. 
9,游戏结束

结构化程序设计是以函数为程序单元 ,从一个函数开始,调用其他
普通函数,进行一些数据处理,一直调用下去。

设计思想:自顶而下,逐步精分,模块化

此种方式的编程语言有C,Basic,Pascal

(2)面向对象程序设计。
面向对象编程思想逐渐成熟起来。
它使用类,对象,继承,封装,消息等概念来进行程序设计。
主要从现实世界的客观事物(即对象)出发来进行开发软件系统,
尽可能的运用人的自然思维方法 ,从客观事物来思考问题,
认识问题。 从这些事物的本质特点,来抽象出系统所需要的类,
作为程序的基本单元。

  围棋游戏:
       黑白棋子及其行为,棋盘, 输赢规则

 类是面向对象编程的基本单元,类含有一类事物的共同特征,
 类可以产生多个对象,这些对象构成了程序中所需要的数据。

 从图中我们可以看出,软件系统是由多个类组成的。
 类是一类事物的抽象体现,而这些事物都有一些状态数据。
 即Field ,如,人,有身高,体重,姓名,性别,爱好等(
  程序设计时,只关心业务所需要的数据

)

Field,我们称之为成员变量,有些资料称之字段,也有些资料
称之为属性,java有property关键字 是属性的。

类除了封装了一些事物的状态数据外,还提供了操作这些状态数据的
方法(Method),实现逻辑。

从上述内容可以总结出
        成员变量(状态数据)+方法(行为)定义=类的定义

此类方法的编程语言:C++,java,C#, Ruby

==================================
完成一个“猪八戒吃西瓜”这样的逻辑

面向过程: 函数吃 是核心
        吃(猪八戒,西瓜)
面向对象: 一类事物的一个:猪八戒,吃是猪八戒的行为
                    一类事物的一个:西瓜
        猪八戒.吃(西瓜)

组装电脑:
如果是主板,硬盘,内存条这样的大件,容易组装
—面向对象

        如果是二极管,三极管,电路板这样的小件进行组装,
        很难 ---面向过程   

面向对象要比面向过程的粒度要大,相对来说容易,简单。
面向过程要比面向对象的性能要高,因为面向对象要进行对象的实例化,
比较吃内存,吃性能。

===========================================
抽象数据类型:用一堆不同类型的状态数据来描述的一种新的事物。

reg: 描述电脑,
颜色, 尺寸, 型号, 主板, 内存, 硬盘,显卡
0xFF00FF 15.6 thinkpadT460 华硕 三星 希捷 , inter
0xFF00FF 15.6 lenovoE40 三星 三星 西数 , inter

这些事物的共同行为:
                   办公
        playGame
        play

 用状态数据(成员变量)总结一类事物的共同特征,
 用方法总结一类事物的共同行为。

类的定义: =成员变量+方法

格式语法:
  修饰词  class  类名{
  type  field1;
  type  field2;
  .....

        修饰词 返回值类型  method1(形参){}
        修饰词 返回值类型  method2(形参){}
  .....     

}

定义一个类型:Person

   成员变量(状态数据-共同特征):
     name,gender,age,birth,idcard,isMarry
   方法(行为)
     eat()
     sleep()
     work()
     sport()   

对象:类的实例化,即类中的个体
如何创建对象:使用关键字new
类名 引用变量 = new 类名();

引用变量,简称引用,存储的是对象的地址信息

成员变量的调用:
引用.成员变量名
方法的调用:
引用.方法名(有参传参)

类与对象的关系:
类是对象的模板,对象是类的实例化

内存管理机制:
jvm将其管理的内存分成三大主要区域:方法区,堆,栈
方法区:当程序运行时,将所需要的class文件(类的信息)加载到此区间
堆: 用于存储引用类型所产生的对象,如果对象有成员变量,会给成员变量分配空间

栈:方法内的变量(局部变量)是在栈中开辟的

基本类型的变量与引用类型的变量:

值传递:
基本数据类型的变量里存储的是基本类型的数据,
int a = 5;
int b = a;//将a里的5复制了一份,传递给了b

址传递:
引用类型的变量里存储的是对象的地址信息
Car c = new Car();
Car d = c;//将c里的地址信息复制了一份,传递给了d

空指针异常:
java.lang.NullPointerException
在程序运行时,可能会出现此异常,出现的原因:
Car c = new Car();
System.out.println(c.color);//0
Car c = null;
System.out.println(c.color);//就会出现空指针异常

null:是引用类型的默认值

作业:
【练习题】01.类的成员变量:
设计一个立方体类Box,定义三个属性,分别是长,宽,高。定义二个方法,分别计算并输出立方体的体积和表面积

public class Box {
int length;
int width;
int height;
/* 计算box的体积/
public int volume() {
return length*width*height;
}
/计算box的表面积/
public int area() {
return 2*(length*width+length*height+width*height);
}
public void run() {
int a = 3;
int b = 4;
int c = a+b;
return;
}

public static void main(String[] args) {
    Box b = new Box();
    b.length = 5;
    b.width = 5;
    b.height = 5;

    System.out.println("b的体积是"+ b.volume());
    System.out.println("b的表面积:"+b.area());
    b.run();
}

}

【练习题】02.类的成员变量:
请定义一个交通工具(Vehicle)的类,其中有:
属性:速度(speed),体积(size)等等
方法:移动(move(int s)),设置速度(setSpeed(int speed)),加速speedUp(),减速speedDown()等等.
最后在测试类Vehicle中的main()中实例化一个交通工具对象,并通过方法给它初始化speed,size的值,并且通过打印出来。另外,调用加速,减速的方法对速度进行改变。调用 move方法输出移动距离

package com.hyxy.oop.day01.homework;

public class Vehicle {
int speed;//速度
int size;//体积
/**
* 输出s秒后运行的距离
* @param s 时间 单位是秒
*/
public void move(int s) {
System.out.println(speed*s+”米”);
}
/* 设置速度/
public void setSpeed(int speed) {
this.speed =speed;
}
/* 加速/
public void speedUp() {
speed+=10;
}
/*减速/
public void speedDown() {
speed-=10;
}
public static void main(String[] args) {
Vehicle car = new Vehicle();
//System.out.println(car.speed);
//System.out.println(car.size);
car.size = 20;
car.setSpeed(100);
System.out.println(car.speed);
car.speedUp();
car.speedUp();
System.out.println(car.speed);
car.move(2);
car.speedDown();
car.speedDown();
car.speedDown();
car.speedDown();
car.move(10);

}   

}

【练习题】03.类的成员变量与方法
定义一个Hero类
属性有 power,name,分别代表体力值和英雄的名子,体力值默认为100;
方法有
1.void go(); //行走的方法,如果体力值为0,则输出不能行走,此英雄已死亡的信息
2.void eat(int n); //吃的方法,参数是补充的血量,将 n的值加到属性power中,power的值最大为100,
3.void hurt();//每受到一次伤害,体力值-10,体力值最小不能小于0
编写测试类,来测试以上代码

package com.hyxy.oop.day01.homework;

public class Hero {
int power;
String name;
public void go() {
if(power<=0) {
System.out.println(name+”已死亡”);
}else {
System.out.println(name+”正在拯救世界”);
}
}
public void eat(int n) {
power+=n;
if(power>100) {
power=100;
}
}
public void hurt() {
power-=10;
if(power<=0) {
System.out.println(name+”已死亡”);
}
}
public static void main(String[] args) {
Hero hero = new Hero();
hero.name = “SuperMan”;
hero.power = 50;
hero.go();
hero.hurt();
hero.hurt();
hero.hurt();
hero.hurt();
System.out.println(“—–0—–”);
hero.hurt();
hero.hurt();
hero.go();
System.out.println(“—–1—–”);

    hero.eat(100);
    hero.go();
    System.out.println("-----2-----");



}

}

【练习题】04.方法的参数及返回值
定义一个计算器;它的功能有
加,减,乘,除,累加,阶乘
求平方,求次方,判断一个数是否为素数;boolean(int),并写测试类来测试这个方法

package com.hyxy.oop.day01.homework;

public class Calculator {
public void sum(int a,int b) {
System.out.println(“和:”+(a+b));
}
public void substract(int a,int b) {
System.out.println(“差:”+(a-b));
}
public void mul(int a,int b) {
System.out.println(“乘积::”+a*b);
}
public void div(int a,int b) {
System.out.println(“除法:”+a/b);
}
public void sum1(int a,int b,int c) {
System.out.println(“累加的结果:”+(a+b+c));
}
public void fac(int num) {
int fac = 1;
for(int i=num;i>=1;i–) {
fac*=i;
}
System.out.println(“阶乘:”+fac);
}
public void square(int num) {
System.out.println(“平方:”+num*num);
}
/*
* a是底数,b是指数
*/
public void square1(int a,int b) {
int f = 1;
for(int i=1;i<=b;i++) {
f*=a;
}
System.out.println(“次方:”+f);
}
/**
*
* @param num 判断num是不是素数
* @return
* true表示是素数
* false表示不是素数
*/
public boolean isTri(int num) {
if(num<=1) {
return false;
}
for(int i=2;i

猜你喜欢

转载自blog.csdn.net/dizi1802/article/details/81436582