• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
pinkowonote
博客园    首页    新随笔    联系   管理    订阅  订阅
面向对象和面向对象编程

一、面向过程

(一)面向过程的特点

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

posted on 2020-02-10 19:29  pinkowonote  阅读(165)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3