面向过程和面向对象

面向过程和面向对象的概念及区别

面向过程:
  1. 概念

    • 面向过程是一种以事件为中心的编程范式。
    • 它按照功能将程序结构划分为若干个基本模块,形成树状结构。
    • 每个模块内部一般由顺序、选择和循环三种基本结构组成。
  2. 特点

    • 程序流程在编写时已经确定。
    • 侧重于具体步骤和操作流程。
面向对象:
  1. 概念

    • 面向对象是一种将数据和对这些数据的操作封装在一起的编程范式。
    • 它把同类对象抽象出其共性,形成类,类中的大多数数据只能被本类的方法处理。
  2. 特点

    • 对象与对象之间通过消息进行通信。
    • 程序流程由用户在使用中决定,更加灵活。
区别:
  1. 组织结构

    • 面向过程:程序由功能模块组成,各模块关系简单,功能上相对独立。
    • 面向对象:程序由相互依存的对象组成,对象间通过消息通信。
  2. 数据与方法的关系

    • 面向过程:数据与方法分离,更注重功能的实现过程。
    • 面向对象:数据与方法绑定在一起,形成对象。
  3. 扩展性与重用性

    • 面向对象通常比面向过程具有更高的代码重用性和扩展性。

面向对象的三大特性详解

1. 多态
  • 概念:多态是指允许一个接口被多种数据类型所实现,或一个接口在不同情境中具有多种实现方式。
  • 举例:在Java中,所有的类都继承自Object类,Object类中有一个toString()方法。不同的类可以重写这个方法以提供自己的实现,当调用不同对象的toString()方法时,会表现出不同的行为,这就是多态的体现。
2. 封装
  • 概念:封装是把数据和操作数据的方法绑定在一起,作为对象。它隐藏对象的内部状态和实现细节,只对外提供公共的接口来访问和操作对象。
  • 举例:在Java中,一个类可以将其属性设为private,这样外部就无法直接访问这些属性。然后,类可以提供publicgettersetter方法来允许外部获取或修改这些私有属性。这就是封装的典型应用。
3. 继承
  • 概念:继承是面向对象编程中实现代码重用的重要手段。通过继承,子类可以获得父类的所有属性和方法,并且可以添加或重写自己的属性和方法。
    以下是一些具体的实例(Java实现),用于说明面向对象编程中的多态、封装和继承概念。

实例:动物叫声

假设我们有一个基类Animal,它有一个方法makeSound。然后,我们有两个从Animal派生的子类:DogCat。每个子类都重写了makeSound方法以实现不同的叫声。

public class Animal {public void makeSound() {System.out.println("Some generic animal sound");}
}public class Dog extends Animal {@Overridepublic void makeSound() {System.out.println("Woof!");}
}public class Cat extends Animal {@Overridepublic void makeSound() {System.out.println("Meow!");}
}// 在某处调用
Animal animal1 = new Dog();
Animal animal2 = new Cat();
animal1.makeSound(); // 输出 "Woof!"
animal2.makeSound(); // 输出 "Meow!"

在这个例子中,animal1animal2都是Animal类型的引用,但实际上它们分别引用了DogCat对象。当我们调用makeSound方法时,会表现出多态性,即同一个接口(makeSound方法)在不同的对象上有不同的实现。

封装

实例:一个简单的银行账户类

public class BankAccount {private double balance; // 私有属性,对外界隐藏public BankAccount(double initialBalance) {this.balance = initialBalance;}// 公共的访问方法(getter)public double getBalance() {return balance;}// 公共的修改方法(setter)public void deposit(double amount) {if (amount > 0) {balance += amount;}}public void withdraw(double amount) {if (amount > 0 && amount <= balance) {balance -= amount;} else {System.out.println("Insufficient funds!");}}
}

在这个例子中,balance是一个私有属性,对外界是隐藏的。我们只能通过公共的gettersetter方法来访问和修改它。这样就确保了账户余额的安全性和数据的完整性。

继承

实例:交通工具类及其子类

public class Vehicle {protected String brand;public Vehicle(String brand) {this.brand = brand;}public void startEngine() {System.out.println(brand + " vehicle engine started.");}
}public class Car extends Vehicle {private int numberOfSeats;public Car(String brand, int numberOfSeats) {super(brand); // 调用父类的构造函数this.numberOfSeats = numberOfSeats;}public void honk() {System.out.println(brand + " car is honking!");}
}public class Motorcycle extends Vehicle {public Motorcycle(String brand) {super(brand); // 调用父类的构造函数}public void revEngine() {System.out.println(brand + " motorcycle is revving its engine!");}
}

在这个例子中,CarMotorcycle都是Vehicle的子类。它们继承了Vehicle类的属性和方法,并且各自添加了特有的属性和方法。通过继承,我们能够实现代码的重用和扩展。例如,CarMotorcycle都继承了VehiclestartEngine方法,但Car类添加了honk方法,而Motorcycle类添加了revEngine方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/10412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实现ApplicationContextAware接口完成springboot项目的初始化处理工作

需求&#xff1a;在项目启动的时候&#xff0c;从数据库里取出所有敏感词&#xff0c;放到map里面。 ApplicationContextAware 的实现类的setApplicationContext方法可以获取到IOC容器&#xff0c;虽然这个案例里面并没有什么用&#xff0c;但是项目初始化一般实现ApplicationC…

C++中rand()函数和随机数种子

C中rand()函数的用法 rand() % (b-a1) a ; 就表示 a~b 之间的一个随机整数。 表达式 int num rand() % 100 1; 产生的是1到100之间的随机数&#xff0c;而不是1到99。 rand() % 100 会产生一个从0到99的随机数&#xff0c;因为 % 是取模运算符&#xff0c;它会给出 rand() …

【算法刷题day49】Leetcode:123.买卖股票的最佳时机III、188. 买卖股票的最佳时机 IV

文章目录 Leetcode 123.买卖股票的最佳时机III解题思路代码总结 Leetcode 188. 买卖股票的最佳时机 IV解题思路代码总结 草稿图网站 java的Deque Leetcode 123.买卖股票的最佳时机III 题目&#xff1a;123.买卖股票的最佳时机III 解析&#xff1a;代码随想录解析 解题思路 定…

【AI】人工智能的应用及挑战

AI是人工智能&#xff08;Artificial Intelligence&#xff09;的缩写&#xff0c;它是一种模拟人类智能的技术和系统&#xff0c;旨在使计算机能够模仿人类的思维、学习、推理、理解自然语言&#xff0c;并能执行各种任务。AI利用大数据、机器学习、模式识别、自然语言处理等技…

通过 Java 操作 redis -- 基本通用命令

目录 使用 String 类型的 get 和 set 方法 使用通用命令 exists &#xff0c;del 使用通用命令 keys 使用通用命令 expire,ttl 使用通用命令 type 要想通过 Java 操作 redis&#xff0c;首先要连接上 redis 服务器&#xff0c;推荐看通过 Java 操作 redis -- 连接 redis 关…

思维导图在线怎么制作?推荐这些工具

思维导图在线怎么制作&#xff1f;在如今的快节奏时代中&#xff0c;思维导图作为一种高效的信息组织与思考工具&#xff0c;受到了广泛的应用。在线制作思维导图成打破了时间和空间的限制&#xff0c;使得团队协作变得更加便捷&#xff0c;个人创作也更为灵活。以下是四款备受…

建模电梯的状态图和学生选课ER图

第一题 尝试建模电梯的状态图&#xff08;选做&#xff09; 第二题 学校规定&#xff1a; 一个学生可选修多门课&#xff0c;一门课有若于学生选修。 一个教师可讲授多门课&#xff0c;一门课只有一个教师讲授。 一个学生选修一门课&#xff0c;仅有一个成绩。 学生的属性有学号…

JS中的arguments是什么?

arguments是当我们不确定有多少个参数传递时&#xff0c;就可以使用argument来获取。在js中&#xff0c;arguments实际上就是当前函数的一个内置对象&#xff0c;存储了我们传递的所有实参。arguents的展示形式就是一个伪数组&#xff0c;所以我们可以对它进行遍历。 我们先来…

机器学习-监督学习

监督学习是机器学习和人工智能中的一个重要分支&#xff0c;它涉及使用已标记的数据集来训练算法&#xff0c;以便对数据进行分类或准确预测结果。监督学习的核心在于通过输入数据&#xff08;特征&#xff09;和输出数据&#xff08;标签或类别&#xff09;之间的关系&#xf…

基于Python的飞机大战游戏

学习目标 了解 飞机大战游戏的规则 理解 面向对象思想,会独立设计游戏的类与模块 掌握 pygame模块的使用 1.1 游戏介绍 飞机大战是一款由腾讯公司微信团队推出的软件内置的小游戏,这款游戏画面简洁有趣,规则简单易懂,操作简便易上手,在移动应用兴起之初曾风靡一时。 1.1.…

使用YOLOv8 YOLOv5 进行距离测量,速度测量。使用目标检测进行测距,测速是如何实现的呢?

文章大纲 简介差帧算法(Frame Difference Algorithm)目标检测测距使用YOLOv8 进行测距代码样例代码原理目标检测测速使用YOLOv8 进行测速代码原理参考文献综述简介 导读 在精确检测车速车距的方案中,视觉方案是非常具有挑战性的,但由于没有昂贵的距离传感器而大幅降低成本…

oracle 9i 行头带有scn的表

oracle 9i 行头带有scn的表 conn scott/tiger drop table t1; drop table t2; create table t1(c varchar2(5)); create table t2(c varchar2(6)) ROWDEPENDENCIES; --t2表每行都有scn,会增加六个字节的开销 alter table t1 pctfree 0; alter table t2 pctfree 0; insert in…

WordPress原创插件:超链接点击访问统计

WordPress原创插件&#xff1a;超链接点击访问统计 https://download.csdn.net/download/huayula/89296775

【Ajax零基础教程】-----第四课 简单实现

一、XMLHttpRequest对象 通过XMLHttpRequest对象来向服务器发送异步请求&#xff0c;从服务器获取数据。然后用JavaScript来操作DOM而更新页面。XMLHttpRequest是ajax的核心机制&#xff0c;它是IE5中首先引入的&#xff0c;是一种支持异步请求的技术。 简单的说&#xff0c;也…

面试官:请把ArrayList与LinkedList、Vector、Array做个比较

文章目录 ArrayList 和 LinkedList 有什么区别&#xff1f;Vector 和 ArrayList 有什么区别Array 和 ArrayList 一样吗&#xff1f;如何实现数组和 List 转换&#xff1f; ArrayList 和 LinkedList 有什么区别&#xff1f; ArrayList和LinkedList都是Java中常用的集合类 Array…

第四百九十八回

文章目录 1. 概念介绍2. 使用方法2.1 固定样式2.2 自定义样式 3. 示例代码4. 内容总结 我们在上一章回中介绍了"GetMaterialApp组件"相关的内容&#xff0c;本章回中将介绍使用get显示SnackBar.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在介…

查看iqn编码

cat /etc/iscsi/initiatorname.iscsi ## for each iSCSI initiator. Do NOT duplicate iSCSI InitiatorNames. InitiatorNameiqn.2004-10.com.ubuntu:01:9ebe1a68

MT4目录结构

Experts 该文件夹包含用户编写的EA程序代码文件。可以自动将用户编写的交易策略应用到行情中&#xff0c;其中后缀名为mq4的是源代码&#xff0c;后缀名为ex4的是可执行文件。 EA&#xff1a;Expert Advisors&#xff0c;译为专家顾问&#xff0c;通俗的来说&#xff0c;就是…

学习java第六十七天

注入 Bean 的注解有哪些&#xff1f; 答&#xff1a; Autowired&#xff1a;根据类型进行注入&#xff0c;如果匹配到多个Bean&#xff0c;则会爆出异常。可以和Qualifier搭配使用&#xff0c;指定使用哪个名称的Bean Resource&#xff1a;首先根据名称注入&#xff0c;如果…

ppt通过修改幻灯片母版修改页脚

修改幻灯片母版 幻灯片母版就可以了&#xff0c;就可以修改页脚