面向对象和面向对象编程

流过昼夜 提交于 2020-02-10 20:26:04

一、面向过程

(一)面向过程的特点

1. 分析解决步骤,使用函数一步步实现步骤

2. 以算法为核心

3. 自顶向下设计,最初就必须对问题深入了解

4. 大问题——>小问题来求解

5. 表现形式:使用函数作为划分程序的基本单位

6. 直接面向问题

(二)面向过程的优点

1. 易于掌握理解,符合人类的思维模式

2. 对需求明确、规模不大、变动较小的问题非常适合

(三)面向过程的缺点

1. 数据与操作分离,对数据与操作的修改非常困难

2. 数据安全得不到保证

3. 程序架构的依赖关系不合理

main();函数依赖于子函数,子函数又依赖于更小的函数

子函数实现细节,一个函数是否成功就依赖于这些细节,但这些细节又经常变化。

main();函数程序的核心逻辑依赖于外延的细节,一个细节上的变动会引起一系列变动,如果一个小细节出现问题,将会导致整个程序崩溃

4. 对需求不明确、规模大、变动大的问题非常不适合

 

二、面向对象

(一)面向对象的设计思想

确定该问题由那些事物组成,使用类模拟出该事物。

通过类间接解决问题

自下而上设计,从问题的一部分入手,一点点构建出整个程序

表现形式:用类来作为划分程序的基本单位

对需求明确、规模不大、变动较小的问题显得累赘

对需求不明确、规模大、变动大的问题非常不适合

 

三、类与对象

(一)什么是类

1. 类:把一类事物的静态属性和动态可执行操作组合在一起

2. 类是抽象的,用来模拟一类事物,是一个概念

3. 一旦类被定义,类的概念就永远存在了

(二)什么是对象

1. 类是一个个体

2. 具体的,实实在在存在的事物

3. 生命周期短暂,会有生存和消亡

(三)类与对象

类:汽车设计图

对象:具体的第一辆汽车、第二辆汽车……

(四)类的定义

/*
时间:2020年2月
编辑人:pinkowonote
功能:
目的:java
*/
package demo;

class Person
{
    /*age是【变量 / 类的属性 / 类数据成员 / 字段 / 域】*/
    int age;
    /*shout()是【方法 / 类的成员函数】
     *shout()方法可以直接访问同一个类中的age变量 */
    void shout() 
    {
        System.out.println("Oh my god!I am" + age);
    }
}

public class Demo 
{
    public static void main(String[] args) 
    {
        /*……*/
    }
}
/*
    在VS_2013中输出结果是:
--------------------------------
--------------------------------
    总结:
*/

(五)程序执行过程

内存是一个线性的一维空间

内存中分为若干个区域:eg:把内存中的区域模拟为栈和堆(栈内存和堆内存是同一个物理硬件上的内存)

 

 C语言中【aa】和【new A()】是两个不同的对象:(* aa).i、(* aa).j

(* aa):aa内的地址指向的对象

(* aa).i:【aa内的地址指向的对象】的成员 i

 引用即指针

JAVA中【aa】和【new A()】其实把他们当作同一个对象,指针变量aa表示的就是该变量指向的那块内存:aa.i、aa.j

 aa.i:【静态指针变量aa】所指向的动态内存中的 A 对象中 i 成员

/*
时间:2020年2月
编辑人:pinkowonote
功能:
目的:JAVA内存分配
*/
package demo;

class A
{
    int i;
    int j;
}

public class Demo 
{
    public static void main(String[] args) 
    {
        /* new A();:在堆中动态分配一块区域,当作A类的对象使用
         * aa:本身的内存是在栈中分配
          *  堆中【A类的对象的内存地址】赋值给了aa
         * aa指向堆中的内存(代便堆中的内存)*/
        /* int * p =(int *)malloc(sizeof(int));
         * A * aa = (A *)malloc(sizeof(A));*/
        A aa = new A();
        
        aa.i = 10;
        aa.j = 20;
        
        System.out.printf("%d %d\n", aa.i, aa.j);
    }
}
/*
    在VS_2013中输出结果是:
--------------------------------
10 20
--------------------------------
    总结:
*/

 

aa1和aa2指的是两个不同的new对象

/*
时间:2020年2月
编辑人:pinkowonote
功能:
目的:JAVA内存分配
*/
package demo;

class A
{
    int i;
    int j;
}

public class Demo 
{
    public static void main(String[] args) 
    {
        /*两个new A();肯定不是同一个对象*/
        A aa1 = new A();
        A aa2 = new A();
        
        aa1.i = 50;
        aa2.i = 80;
        
        System.out.printf("%d %d\n", aa1.i, aa2.i);
    }
}
/*
    在VS_2013中输出结果是:
--------------------------------
50 80
--------------------------------
    总结:
*/

/*
时间:2020年2月
编辑人:pinkowonote
功能:
目的:JAVA内存分配
*/
package demo;

class A
{
    int i;
    int j;
}

public class Demo 
{
    public static void main(String[] args) 
    {
        /* 有3块内存aa1、new A();、aa2
         * */
        A aa1 = new A();
        A aa2 = aa1;
        
        aa1.j = 50;
        
        System.out.printf("%d %d\n", aa1.j, aa2.j);
    }
}
/*
    在VS_2013中输出结果是:
--------------------------------
50 50
--------------------------------
    总结:
*/

四、访问控制符

五、构造函数

六、关键字this

七、关键字static

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!