应用程序分类与相关基本概念介绍

0、引言

在从事软件开发的过程中,由于笔者并不是计算机专业的同学,所以时常会对一些概念感到困惑。比如:

  • 前些年很火的前端后端是什么意思?
  • 什么是 GUI?什么是 CLI
  • 计算机的应用程序分为哪些种类?

等等。

这些问题对于学习过《软件工程》 这门课程的同学来说,可能会显得比较幼稚;但是对于非专业的同学来说,理解这些概念有助于帮助自己清晰地认识到自己所从事的方向。

1、应用程序的分类

有关应用程序的分类可以参考知乎上的回答 —— 应用程序有哪些细致的分类? - 知乎

针对一般的个人计算机而言,根据运行平台,我们日常接触的最多的应用程序可以分为 Desktop 应用程序以及 Web 应用程序。

Desktop 桌面应用程序
这里不提供有关“桌面应用程序”精准的定义。一般来说,开发者将代码打包成可执行文件或安装包,用户需要在本地计算机上安装的应用程序可以认为是桌面应用程序。比如常用的 Word、Excel、微信等等
Web 网络应用程序
一般指的是无需在本地计算机上安装,开发者将程序部署到服务器上,用户可以直接通过浏览器访问的应用程序。常见的网络应用程序有网页邮箱、购物网站、网络论坛、博客、网络游戏等诸多应用

🔗 参考链接

  1. 什么叫桌面应用程序? - 知乎
  2. 什么是Web应用程序? - 知乎
  3. 网络应用程序 - 维基百科

2、前端和后端

前端开发和后端开发是软件开发中的两个不同的领域。

前端开发
主要涉及网站和 App 用户能够从浏览器或屏幕上看到的东西,比如内容、图片、按钮、动画等。
后端开发
主要涉及网站和 App 用户看不到但又被用来为前端提供支持的东西,比如服务器、数据库、中间件等。

前后端开发需要考虑的是如何实现相关功能和信息数据的存取、平台的稳定与性能等等。

📝 我们可能会在 Web 开发领域经常听到这两个名词概念,但需要注意的是:前端和后端这两个概念不仅仅局限于 Web 应用程序开发领域的,这两个概念适用于整个软件架构和程序设计领域。是将软件不同功能的部分相互分离的抽象。

🔗 参考链接

  1. 前端和后端 - 维基百科
  2. 一文看懂前端和后端开发 - 知乎

3、GUI 和 CLI

Command- Line Interface
命令行界面 是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。也有人称之为 字符用户界面 ( Character User Interface, CUI)。
常见的 CLI 程序有 bash、 cmd.exe、 Windows PowerShell 等等。
Graphical User Interface
图形用户界面 是指采用图形方式显示的计算机操作用户界面。允许用户通过图形图标与电子设备进行交互,而不是基于文本的用户界面、键入的命令标签或文本导航。
在图形用户界面中,计算机画面上显示窗口、图标、按钮等图形,表示不同目的之动作,用户通过鼠标等指针设备进行选择。
小到一款具有图形用户界面的应用程序或者工具软件(如文件资源管理器等),大到操作系统的桌面环境(如 GNOME 等),它们都属于 GUI 程序

有关 GUI 的介绍还可以参考知乎上的回答 —— 图形用户界面(GUI)入门详解 - 知乎

📝 通过以上的了解我们知道:无论是桌面应用程序、Web 应用程序、移动设备 APP、嵌入式设备程序甚至系统级的软件,只要是通过图形界面为用户提供交互的,都可以称之为是 GUI 程序。

🔗 参考链接

  1. 命令行界面 - 维基百科
  2. 图形用户界面 - 维基百科
  3. Graphical user interface - Wikipedia

4、GUI 程序框架

在实际开发过程中,我们有更大的概率是去开发 GUI 程序而不是 CLI 程序,这就涉及到有可能接触各种各样的框架。虽然 GUI 涵盖的范围很广,但通常人们谈论 GUI 程序时,基本上都指的是基于图形用户界面的桌面应用程序。

GUI 程序框架是一种用于开发图形用户界面的软件库或工具包,它提供了一些基本的组件、控件、布局、事件处理等功能,让开发者可以更方便地创建和管理 GUI 应用程序。GUI 程序框架有很多种,不同的框架可能支持不同的语言、平台、风格和功能。GUI 框架通常只涉及用户界面的设计和实现,不涉及业务逻辑和数据处理。下表列举了一些常见的 GUI 框架:

框架名称介绍
Qt一个跨平台的 C++ 图形用户界面应用程序开发框架,它支持数据驱动的编程模型,有自绘引擎,提供了大量的与界面无关但与软件开发息息相关的 API,也有其他语言的绑定,比如 Python 的 PyQt 和 PySide。
GTK一个跨平台的 C 语言图形用户界面应用程序开发框架,它也支持数据驱动的编程模型,有自绘引擎(Cairo),也有其他语言的绑定,比如 JavaScript、Rust 等。GTK 商业授权很友好,但它主要针对 Linux 平台,对 Windows 和 Mac 平台的支持不太完善。
wxWidgets一个跨平台的 C++ 图形用户界面应用程序开发框架,它没有自绘引擎,而是对不同平台下的界面 API 做了整合和封装,让开发者可以创建符合本地风格的 GUI 应用程序。wxWidgets 商业授权很友好,也支持静态连接,但它提供的组件样式比较刻板。
FLTK一个跨平台的 C++ 图形用户界面应用程序开发框架,它非常轻量级,支持静态连接,有自绘引擎(OpenGL),但它的重绘机制有一些问题,需要开发者自己处理。FLTK 商业授权很友好,但它提供的组件样式和绘图 API 都比较少。
Duilib一个基于 Windows 平台的 C++ 图形用户界面应用程序开发框架,它基于 DirectUI 开发,不支持跨平台,但它提供了丰富的组件样式和特效。Duilib 商业授权很友好,但它对高分屏支持不佳,也没有提供系统级的 API。
Sciter一个跨平台的闭源 GUI 框架,它内部封装了一个浏览器核心(Chromium),让开发者可以使用 HTML,CSS,JS 来创建界面。Sciter 商业授权不友好,个人开发者可以免费使用(只能用动态链接库),公司规模超过 3 人就得买版权了(才能静态连接)。
Tkinter一个轻量级的跨平台图形用户界面(GUI)开发工具,是 Python 的自带的官方标准库。Tkinter 上手简单, 做个简单的小工具基本够用了,但它不够美观,功能太单一。

5、GUI 程序的编程模型

GUI 程序是一种基于图形用户界面的应用程序,它可以让用户通过鼠标、键盘等输入设备与程序进行交互,而不需要记忆复杂的命令。

GUI 程序的编程模型通常是事件驱动的,也就是说,程序的执行流程是由用户触发的各种事件来控制的,比如点击按钮、选择菜单、输入文本等。事件驱动的编程模型的优点是可以实现高度的交互性和灵活性,缺点是可能导致逻辑分散和难以维护。

除了事件驱动之外,GUI程序还可以采用其他的编程模型,比如:

帧驱动
这种编程模型适用于需要实时渲染的应用,比如游戏、动画等。帧驱动的基本思想是,每一帧都执行一次更新和渲染的循环,以保持画面的流畅和响应。帧驱动的优点是简单易用,可以方便地控制渲染速度和质量。帧驱动的缺点是可能出现卡顿、掉帧、不同设备上运行效果不一致等问题。
数据驱动
这种编程模型把数据和处理分开,用单独的数据模型来定义数据的结构和关系,用处理类来实现对数据的操作和逻辑。数据驱动的优点是可以实现数据和表现的分离,提高代码的可维护性和复用性。数据驱动的缺点是可能增加开发的复杂度和学习成本。
模型驱动
这种编程模型使用可视化建模技术来定义数据关系、流程逻辑和构建用户界面,使开发人员和业务用户能够快速交付应用程序,而不需要代码。模型驱动的优点是可以降低系统开发和维护门槛,支撑快速开发和运维。模型驱动的缺点是可能上手难度比表单驱动高。

5.1、数据驱动编程模型:MVC、MVP 和 MVVM

在 GUI 程序中,常见的数据驱动模型有:

Model- View- Controller
把程序分为三层,模型层负责管理数据,视图层负责显示用户界面,控制器层负责处理用户输入和业务逻辑。MVC 的优点是可以实现高内聚低耦合,方便进行单元测试和团队协作。MVC 的缺点是可能导致控制器层过于臃肿,难以维护。
Model- View- Presenter
在 MVC 的基础上,把控制器层替换为展示器层,展示器层负责将模型层的数据转换为视图层所需的格式,并处理视图层的事件。MVP 的优点是可以进一步解耦视图层和模型层,提高视图层的可测试性。MVP 的缺点是可能增加代码量和复杂度。
Model- View- View Model
在 MVP 的基础上,把展示器层替换为视图模型层,视图模型层负责维护视图层所需的状态,并通过双向绑定机制与视图层同步。MVVM 的优点是可以减少视图层和视图模型层之间的代码交互,提高开发效率和用户体验。MVVM 的缺点是可能导致内存泄漏和性能问题。

📝 这三者即常见的软件架构设计模式

6、了解自己喜欢的方向

  • 对 Windows 应用程序开发感兴趣的同学,可以参考 MSDN 上有关 Windows 应用开发文档入门;
  • 对 Windows 桌面应用程序开发感兴趣的同学,可以参考 MSDN 上编写适用于 Windows 的应用:选择开发技术文档选择适合于自己的开发技术;
  • 对 Web 应用程序开发感兴趣的同学,根据前端和后端 Web 开发,可自行了解相关的技术栈;

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

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

相关文章

报错: “Data is Null. This method or property cannot be called,解决方法

在进行导入的时候报错 System.Data.SqlTypes.SqlNullValueException: "Data is Null. This method or property cannot be called on Null values."是一个在使用DataReader.GetString(i)方法时出现的异常情况。当对应字段的值为Null时,这个方法会抛出异常…

用户案例 | 蜀海供应链基于 Apache DolphinScheduler 的数据表血缘探索与跨大版本升级经验

导读 蜀海供应链是集销售、研发、采购、生产、品保、仓储、运输、信息、金融为一体的餐饮供应链服务企业。2021年初,蜀海信息技术中心大数据技术研发团队开始测试用DolphinScheduler作为数据中台和各业务产品项目的任务调度系统工具。本文主要分享了蜀海供应链在海…

【Node.js】—基本知识点总结

【Node.js】—基本知识总结 一、命令行常用操作 二、Node.js注意点 Node.js中不能使用BOM和DOM操作 总结 三、Buffer buffer是一个类似于数组的对象,用于表示固定长度的字节序列buffer的本质是一段内存空间,专门用来处理二进制数据 特点:…

postgresql-子查询

postgresql-子查询 子查询简介派生表IN 操作符ALL 操作符ANY 操作符关联子查询横向子查询EXISTS 操作符 子查询简介 子查询(Subquery)是指嵌套在其他 SELECT、INSERT、UPDATE 以及 DELETE 语句中的 查询语句 子查询的作用与多表连接查询有点类似&#x…

ElementUI浅尝辄止18:Avatar 头像

用图标、图片或者字符的形式展示用户或事物信息。 常用于管理系统或web网站的用户头像&#xff0c;在用户账户模块更换头像操作也能看到关于Avatar组件的应用。 1.如何使用&#xff1f; 通过 shape 和 size 设置头像的形状和大小。 <template><el-row class"de…

基于Python机器学习、深度学习提升气象、海洋、水文应用教程

详情点击链接&#xff1a;基于Python机器学习、深度学习提升气象、海洋、水文应用教程 前沿 Python是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;能够在不同操作系统和平台使用&#xff0c;简洁的语法和解释性语言使其成为理想的脚本语言。除了标准…

vue深拷贝的几种实现方式

1、通过递归方式实现深拷贝 比较全面的深拷贝&#xff0c;缺点是较为繁琐 function deepClone(obj) {var target {};for (var key in obj) {if (Object.prototype.hasOwnProperty.call(obj, key)) {if (typeof obj[key] object) {target[key] deepClone(obj[key]);} else {…

链表例题小总结:

链表&#xff1a; 第一种题型&#xff1a;双指针 力扣203&#xff1a;移除链表元素 力扣题目链接 题意&#xff1a;删除链表中等于给定值 val 的所有节点。示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5]示例 2&#xff1…

MySQL——数据类型以及对表结构的修改

MySQL的数据类型 刚才我们在创建表的时候&#xff0c;说到了一个字段类型&#xff0c;所谓的字段类型就是这个字段能存放的数据的数据类型&#xff0c;在MySQL中有以下几种数据类型&#xff1a; 数据类型 大小&#xff08;字节&#xff09; 用途 格式 INT 4 整数 FLOAT…

Unity控制程序退出

大家好&#xff0c;我是阿赵。   最近把公司的游戏发布到各种PC的游戏大厅&#xff0c;遇到了挺多奇怪的需求。之前介绍了一些Unity发布PC端控制窗口最大最小化、修改exe信息等问题&#xff0c;这次来探讨一下退出游戏的问题。 一、收到奇怪的需求 某游戏大厅要求&#xff0…

RabbitMQ从入门到精通之安装、通讯方式详解

文章目录 RabbitMQ一、RabbitMQ介绍1.1 现存问题 一、RabbitMQ介绍二、RabbitMQ安装三、RabbitMQ架构四、RabbitMQ通信方式4.1 RabbitMQ提供的通讯方式4.2 Helloworld 方式4.2Work queues4.3 Publish/Subscribe4.4 Routing4.5 Topics4.6 RPC (了解) 五、Springboot 操作RabbitM…

【MyBatisⅡ】动态 SQL

目录 &#x1f392;1 if 标签 &#x1fad6;2 trim 标签 &#x1f460;3 where 标签 &#x1f9ba;4 set 标签 &#x1f3a8;5 foreach 标签 动态 sql 是Mybatis的强⼤特性之⼀&#xff0c;能够完成不同条件下不同的 sql 拼接。 在 xml 里面写判断条件。 动态SQL 在数据库里…

LeetCode 202 快乐数

题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 法一&#xff1a;哈希 使用哈希表循环判断每次经过平方和的数&#xff0c;如果为1则直接返回true&#xff0c;若之前存在过但不为1则直接返回false 代码 class Solution { public:// 计算…

pytorch中squeeze函数用法

squeeze的中文意思是“挤压”&#xff0c;顾名思义&#xff0c;该函数的作用是压缩维度 squeeze(input, dimNone) -> Tensor input一个高维张量&#xff0c;如果各个维度中存在大小为1的维度&#xff0c;squeeze才起作用&#xff0c;下面举例说明 x torch.arange(6).res…

Http Content-type 对照表

文件扩展名Content-Type(Mime-Type)文件扩展名Content-Type(Mime-Type).*&#xff08; 二进制流&#xff0c;不知道下载文件类型&#xff09;application/octet-stream.tifimage/tiff.001application/x-001.301application/x-301.323text/h323.906application/x-906.907drawing…

MySql 游标 触发器

游标 1.什么是游标 MySQL游标是一种数据库对象&#xff0c;它用于在数据库查询过程中迭代访问结果集中的每一行。游标可以被看作是一个指向查询结果集的指针&#xff0c;通过移动游标&#xff0c;可以按行读取和处理结果集的数据。在MySQL中&#xff0c;游标可以用于在存储过程…

【MySQL基础|第一篇】——谈谈SQL中的DDL语句

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】&#x1f388; 本专栏旨在分享学习MySQL的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 前言&#xff…

力扣(LeetCode)算法_C++——有效的数独

请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图&#xff09; …

ChatGPT AIGC 完成多维分析雷达图

我们先让ChatGPT来帮我们总结一下多维分析雷达图的功能与作用。 同样ChatGPT AIGC完成的动态雷达图效果如下; 这样的一个多维分析动态雷达图是用HTML,JS,Echarts 来完成的。 将完整代码复制如下: <!DOCTYPE html> <html style="height: 100%"><h…

等保测评 —— 安全控制点

等保测评 —— 安全控制点 技术 第1章 安全物理环境 物理位置的选择 物理访问控制 防盗窃和防破坏 防雷击 防火 防水和防潮 防静电 温湿度控制 电力供应 电磁防护 第2章 安全通信网络 网络架构 通信传输 可信验证 第3章 安全区域边界 访问控制 入侵防范 恶…