设为首页 加入收藏

TOP

面向对象编程(OOP)(一)
2023-07-25 21:42:16 】 浏览:39
Tags:向对象 OOP

面向对象编程(OOP)

属性+方法=类

面向过程

  • 步骤清晰简单, 第一步做什么, 第二步做什么...
  • 适用于处理简单的问题

面向对象

  • 物以类聚和分类的思想模式
  • 思考解决问题需要做出哪些分类, 然后对这些分类进行单独思考和研究
  • 最后,将分类下的细节进行了面向过程的研究
  • 面向对象适用于复杂问题, 适合处理多人协作的问题

区别

  • 面向对象其实就是将一个大问题,将其分类发配,对分类后的问题进行面向过程的处理

  • 如: 建一栋大厦, 需要分类, 建材采购; 外观设计; 外围建筑; 室内设计...等等模块, 最后构建成大厦, 而分类的问题就是面向过程的研究

  • 对于复杂事物, 从宏观上、从整体上分析, 需要使用面向对象的思路来分析整个大系统(将大厦分类成建材采购; 外观设计; 外围建筑; 室内设计...) 但是, 具体到微观操作后, 需要使用面向过程的思想(具体建材采购; 外观设计; 外围建筑; 室内设计...该如何执行)

  • 面向过程是自己把每个方面步骤都写一遍。面向对象是把别人写的步骤作为基础指令再编写步骤实现更复杂的功能。

  • 面向对象就是框架, 面向过程就是对象内的具体执行


什么是面向对象

  • 面向对象编程(Object-Oriented Programming, OOP)

  • 本质: 以类的方式组织代码, 以对象的组织封装数据

  • 抽象

  • 三大特性

    • 封装: 一个存钱罐, 对外留一个小口取钱
    • 继承: 儿子会继承父亲的所有东西. 儿子有了父亲的所有特性和东西
    • 多态: 同样是学习, 但你我学到的东西都是不同的(同一事物表现出的多种形态)
  • 从认识论角度考虑是先有对象后有类

    • 对象是具体事物; 类是抽象,对对象的抽象: (教师是一个抽象的类; 张老师就是一个具体的对象)
  • 从代码运行角度考虑是先有类后有对象(类其实用C语言来说类似结构体)

    • 类是对象的模板(人民币的属性和模样就是类, 而对象就是根据类创建一张一张5元,100元等)(人都是有名字,性别,年龄等属性构成类即模板, 而具体的张三,男,22就是一个类的对象)

方法的回顾

  • 修饰符: public static / public void等(static/void可不写)
  • 返回类型: 基本数据类型和数组
  • **break和return区别: **
    • **break是跳出switch和结束循环; **
    • return是用于方法的结束, 方法内,return语句后都不无效
  • 方法名: 驼峰规则和见名知意
  • 参数列表: (参数类型 参数名); (int a) (int[] x)等
  • 递归的return: 每次的return是返回到上次调用的方法的时候

方法的一些原则

  • 遵循一个原则:被static修饰的内容会跟随类的加载而加载,所以静态化的内容可以不用实例化就直接调用,同时两个静态方法之间也可以互相调用

  • 两个非静态可以互相调用是因为它们的类实例化后两个一起被创建

  • 非静态方法都是在创建一个对象后产生的,所以它们互相知道存在

  • 实际参数和形式参数的数据类型需要对应


参数的传递

  • 值传递:复制一份;

  • 引用传递:新建一个快捷方式(用的时候是同一个地址)/(本质是值传递)

    • 值传递:实参和形参在内存上是独立的两个变量。

    • public class TestNum {
          public static void main(String[] args) {
              int num = 3;
              System.out.println("修改前的num值:"+num);
              changeva lue(num);
              System.out.println("修改后的num值:"+num);
          }
      
          private static void changeva lue(int num) {
              num = 5;
              System.out.println("形参num值:"+num);
          }
      }
      
      /*
      字符串修改前:zhangsan
      字符串修改后:zhangsan
      */
      

    • 引用传递:实参和形参在内存上指向的是同一个地址

    • user是对象的引用,为实参,然后创建一个副本temp,把它传递给形参user1。但是,他们实际操作的都是堆内存中的同一个User对象。因此,对象内容的修改也会体现到实参user上。


类和对象的关系

  • 类是一种抽象的数据类型, 它是对某一类事物的整体描述/定义, 但并不代表某一具体事物

    • 动物、植物、手机、人...
    • Person类、Animal类、Car类等, 这些类都是用于描述/定义某一类具体事物应具有的特点和行为
  • package ObjectDemo;
    
    //学生类
    public class Students {
        //属性:字段
        //String name = 小明;
        //可以这么写但没用,学生是一个抽象概念,并不是所有学生叫小明
        
        
        String name;// 未赋值,默认null
        int age;//未赋值,默认0
    
        //方法
        public void study() {
            System.out.println(this.name + "在学习");
            //this代表当前这个类的name
            //this是实例本身,哪个实例调用,this就是哪个实例
        }
    }
    
    

对象

  • 对象是抽象类型的具体实例

    • 张三就是人(类)的一个具体实例; 家里的旺财就是狗(类)的一个具体实例
    • 能够体现出特点, 展现出功能是具体的实例, 而不是一个抽象概念
  • 以下代码就是根据上述类(模块)的抽象概念, 进行实例化对象

  • package ObjectDemo;
    
    //一个程序应只有一个main方法
    public class Application {
        public static void main(String[] args) {
            // 类是抽象的; 需要实例化
            // 实例化后会返回一个对象; idea的功能,你按住alt+enter就行了
            //stu_1就是对象的变量或者盒子, stu_1就是一个根据Students类的具体实例
    
            //以下代码产生了两个个不同对象; 类可以产生很多对象(这些对象都有共同属性, 如名字,年龄等)
            //根据学生类(模板)创建两个具体的学生对象
            Students stu_1 = new Students();//实例化变量stu_1(可以理解一个叫stu_1的空壳/地址(指针),但还未对其进行添加属性,如还没给stu_1躯体的姓名,年龄等)
            //stu_1对象添加属性的赋值
            stu_1.name = "WoOD";
            stu_1.age = 18;
            System.out.println(stu_1.name);
            System.out.println(stu_1.age);
            System.out.println("=============================");
            Students xMing = new Students();//实例化变量xMing(可以理解一个叫xMing的空壳/地址(指针),但还未对其进行添加属性,如还没给xMing躯体的姓名,年龄等)
            //对象添加属性的赋值
            xMing.name = "小红";
            xMing.age = 17;
            System.out.println(xMing.name);
            System.out.println(xMing.age);
    
        }
    }
    

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Spring Cloud服务发现组件Eureka 下一篇如何通过Terraform Associate考试..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目