【C++】面向对象编程引入 ③ ( 面向过程编程的结构化程序设计方法 | 结构化程序设计方法概念 / 特点 / 优缺点 | 面向对象编程引入 )

文章目录

  • 一、面向过程编程的结构化程序设计方法
    • 1、结构化程序设计方法概念
    • 2、结构化程序设计方法特点
    • 3、结构化程序设计方法优缺点
  • 二、面向对象编程引入





一、面向过程编程的结构化程序设计方法



如果使用 面向过程语言 ( 如 : C 语言 ) , 开发 大型 项目 , 一般使用 结构化程序设计方法 ;


1、结构化程序设计方法概念


结构化程序设计方法 的 设计思路如下 :

  • 自顶向下 , 分而治之 ;
  • 分解功能 , 每个功能都抽象出一个功能模块 ;

如下图所示 , 结构化程序设计方法 , 就是 将一个大问题 , 分解成很多小问题 , 每个小问题都使用独立的 子模块 解决 , 多个 子模块 共同构成一个 大的软件系统 ;

在这里插入图片描述


2、结构化程序设计方法特点


使用上述思路 设计出的 程序结构 有如下特点 :

  • 是一个 树状结构 , 每个叶子节点都是一个基本功能模块 ;
  • 模块之间 功能独立 , 每个模块都相当于一个子程序 , 调用模块就是调用该子程序即可 ;
  • 模块内部只有 顺序 , 选择 , 循环 代码逻辑 ;

3、结构化程序设计方法优缺点


结构化程序设计 的 优点 就是可以 将 复杂庞大的系统 , 拆分成若干子任务 , 方便开发 , 控制 , 维护 ;


结构化程序设计 也有 很多缺点 :

  • 可重用性差 : 每个模块子程序 的 代码 基本不可重用 ;
  • 数据安全性差 : 没有 数据安全 , 开发者可以随意访问任意功能的任意变量 ;
  • 不适合开发图形界面 : 图形界面的事物 使用 过程语言 进行 描述 并 实现 很难 , 即使开发出来也不容易维护 ; 因此很多 C 语言的程序都是命令行程序 , 如 : ffmpeg 等 ;
  • 数据和处理过程分离 : 模块中 数据 ( 变量 ) 和 处理过程 ( 方法 ) 定义在不同的地方 , 给代码维护带来很多麻烦 ;
  • 可维护性差 : 一旦 数据结构发生改变 , 需要 修改大量的代码 ;




二、面向对象编程引入



鉴于 面向过程编程 有上述缺点 , 这里引入 面向对象编程 思想 ;

针对 " 数据和处理过程分离 " 问题 , 面向对象 可以 将 事物的 数据 以及 对数据的处理过程 , 都定义在一个类中 , 将它们封装在一起 ;

针对 " 可重用性差 " 问题 , 面向对象 中 , 对 相同类型的 事物 , 抽象出其共有特点 , 形成一个类 , 该类可以重复使用 , 并可以创建多个该类型事物 ;

针对 " 不适合开发图形界面 " 问题 , 面向过程 中 抽象实现 界面元素很麻烦 , 但是如果使用面向对象 , 可以直接将界面抽象成一个类 , 界面中的按钮等元素也可以抽象成一个类 , 将这些类对象组合在一起 , 就是一个图形界面程序 ;

针对 " 数据安全性差 " 问题 , 面向对象中 , 封装数据和方法时 , 会为每个成员指定可访问的范围 , 如 public , protected , private 等访问范围 , 外部无法访问 private 成员 ;

引入面向对象后 , 极大地提高了 程序的 可维护性 ;

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

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

相关文章

uniapp微信小程序区分正式版,开发版,体验版

小程序代码区分是正式版,开发版,还是体验版 通常正式和开发环境需要调用不同域名接口,发布时需要手动更换 或者有些东西不想在正式版显示,只在开发版体验版中显示,也需要去手动隐藏 官方没有明确给出判断环境的方法&a…

scrollIntoView 导致整个页面上移问题

更改参数 block: ‘start’, behavior: smooth’更改为 behavior: ‘smooth’, block: ‘nearest’, inline: ‘start’ 在这里插入图片描述

Selenium之css怎么实现元素定位?

世界上最远的距离大概就是明明看到一个页面元素站在那里,但是我却定位不到!! Selenium定位元素的方法有很多种,像是通过id、name、class_name、tag_name、link_text等等,但是这些方法局限性太大, 随着自动…

一百五十九、Kettle——Kettle9.2通过配置Hadoop clusters连接Hadoop3.1.3(踩坑亲测、附流程截图)

一、目的 由于kettle的任务需要用到Hadoop(HDFS),所以就要连接Hadoop服务。 之前使用的是kettle9.3,由于在kettle新官网以及博客百度等渠道实在找不到shims的驱动包,无奈换成了kettle9.2,kettle9.2的安装…

Flink之Task解析

Flink之Task解析 对Flink的Task进行解析前,我们首先要清楚几个角色TaskManager、Slot、Task、Subtask、TaskChain分别是什么 角色注释TaskManager在Flink中TaskManager就是一个管理task的进程,每个节点只有一个TaskManagerSlotSlot就是TaskManager中的槽位,一个TaskManager中可…

【数据结构与算法】十大经典排序算法-希尔排序

🌟个人博客:www.hellocode.top 🏰Java知识导航:Java-Navigate 🔥CSDN:HelloCode. 🌞知乎:HelloCode 🌴掘金:HelloCode ⚡如有问题,欢迎指正&#…

数据结构之动态内存管理机制

目录 数据结构之动态内存管理机制 占用块和空闲块 系统的内存管理 可利用空间表 分配存储空间的方式 空间分配与回收过程产生的问题 边界标识法管理动态内存 分配算法 回收算法 伙伴系统管理动态内存 可利用空间表中结点构成 分配算法 回收算法 总结 无用单元收…

机器学习、cv、nlp的一些前置知识

为节省篇幅,不标注文章来源和文章的问题场景。大部分是我的通俗理解。 文章目录 向量关于向量的偏导数:雅可比矩阵二阶导数矩阵:海森矩阵随机变量随机场伽马函数beta分布数学术语坐标上升法协方差训练集,验证集,测试集…

SpringBoot案例 调用第三方接口传输数据

一、前言 最近再写调用三方接口传输数据的项目,这篇博客记录项目完成的过程,方便后续再碰到类似的项目可以快速上手 项目结构: 二、编码 这里主要介绍HttpClient发送POST请求工具类和定时器的使用,mvc三层架构编码不做探究 pom.x…

43、TCP报文(一)

本节内容开始,我们正式学习TCP协议中具体的一些原理。首先,最重要的内容仍然是这个协议的封装结构和首部格式,因为这里面牵扯到一些环环相扣的知识点,例如ACK、SYN等等,如果这些内容不能很好的理解,那么后续…

SASS 学习笔记

SASS 学习笔记 总共会写两个练手项目,成品在 https://goldenaarcher.com/scss-study 可以看到,代码在 https://github.com/GoldenaArcher/scss-study。 什么是 SASS SASS 是 CSS 预处理,它提供了变量(虽然现在 CSS 也提供了&am…

web集群学习:搭建 LNMP应用环境

目录 LNMP的介绍: LNMP组合工作流程: FastCGI介绍: 1、什么是 CGI 2、什么是 FastCGI 配置LNMP 1、部署LNMP环境 2、配置LNMP环境 LNMP的介绍: 随着 Nginx Web 服务的逐渐流行,又岀现了新的 Web 服务环境组合—…

面向对象编程(OOP):Python中的抽象与封装

文章目录 🍀引言🍀 类与对象🍀封装🍀继承🍀多态🍀面向对象编程的优势🍀使用面向对象编程的场景🍀实例化与构造函数🍀 成员属性和类属性🍀魔术方法&#x1f34…

初识Sentinel

目录 1.解决雪崩的方式有4种: 1.1.2超时处理: 1.1.3仓壁模式 1.1.4.断路器 1.1.5.限流 1.1.6.总结 1.2.服务保护技术对比 1.3.Sentinel介绍和安装 1.3.1.初识Sentinel 1.3.2.安装Sentinel 1.4.微服务整合Sentinel 2.流量控制 2.1.簇点链路 …

K8S调度

K8S调度 一、List-Watch 机制 controller-manager、scheduler、kubelet 通过 List-Watch 机制监听 apiserver 发出的事件,apiserver 通过 List-Watch 机制监听 etcd 发出的事件1.scheduler 的调度策略 预选策略/预算策略:通过调度算法过滤掉不满足条件…

什么是EM(最大期望值算法)

什么是EM(最大期望值算法) 在现实生活中,苹果百分百是苹果,梨百分白是梨。 生活中还有很多事物是概率分布,比如有多少人结了婚,又有多少人有工作, 如果我们想要调查人群中吸大麻者的比例呢?敏感问题很难得…

PHP8的字符串操作1-PHP8知识详解

字符串是php中最重要的数据之一,字符串的操作在PHP编程占有重要的地位。在使用PHP语言开发web项目的过程中,为了实现某些功能,经常需要对某些字符串进行特殊的处理,比如字符串的格式化、字符串的连接与分割、字符串的比较、查找等…

【Hyper-V】Windows11 家庭版怎么启用虚拟机Hyper-V

在电脑Windows11系统上启用虚拟机Hyper-V,打开 启用和关闭WIndows功能,找到其中一项Hyper-V,对于家庭版的系统用户来说,这个选项是没有的,接下来讲一讲怎么开启。 安装Hyper-V 创建一个文件名为Hyper-v.bat&#xff…

springcloud3 hystrix实现服务降级的案例配置2

一 服务降级的说明 1.1 服务降级说明 "服务器忙,请稍后在试"不让客户达等待,立即返回一个友好的提示。 1.2 服务降级的触发情况 1.程序运行异常; 2.超时; 3.服务熔断触发服务降级;4 .线程池/信号量打…

Web菜鸟教程 - Springboot接入认证授权模块

网络安全的重要性不言而喻,如今早已不是以前随便弄个http请求就能爬到数据的时代,而作为一个架构师,网络安全必须在产品开发之初就考虑好。因为在产品开发的后期,一方面是客户增多,压力变大,可供利用的时间…