应用程序分类与相关基本概念介绍
0、引言
在从事软件开发的过程中,由于笔者并不是计算机专业的同学,所以时常会对一些概念感到困惑。比如:
- 前些年很火的前端和后端是什么意思?
- 什么是 GUI?什么是 CLI?
- 计算机的应用程序分为哪些种类?
等等。
这些问题对于学习过《软件工程》 这门课程的同学来说,可能会显得比较幼稚;但是对于非专业的同学来说,理解这些概念有助于帮助自己清晰地认识到自己所从事的方向。
1、应用程序的分类
有关应用程序的分类可以参考知乎上的回答 —— 应用程序有哪些细致的分类? - 知乎
针对一般的个人计算机而言,根据运行平台,我们日常接触的最多的应用程序可以分为 Desktop 应用程序以及 Web 应用程序。
- Desktop 桌面应用程序
- 这里不提供有关“桌面应用程序”精准的定义。一般来说,开发者将代码打包成可执行文件或安装包,用户需要在本地计算机上安装的应用程序可以认为是桌面应用程序。比如常用的 Word、Excel、微信等等 Web 网络应用程序
- 一般指的是无需在本地计算机上安装,开发者将程序部署到服务器上,用户可以直接通过浏览器访问的应用程序。常见的网络应用程序有网页邮箱、购物网站、网络论坛、博客、网络游戏等诸多应用
🔗 参考链接:
- 什么叫桌面应用程序? - 知乎
- 什么是Web应用程序? - 知乎
- 网络应用程序 - 维基百科
2、前端和后端
前端开发和后端开发是软件开发中的两个不同的领域。
- 前端开发
- 主要涉及网站和 App 用户能够从浏览器或屏幕上看到的东西,比如内容、图片、按钮、动画等。 后端开发
- 主要涉及网站和 App 用户看不到但又被用来为前端提供支持的东西,比如服务器、数据库、中间件等。
前后端开发需要考虑的是如何实现相关功能和信息数据的存取、平台的稳定与性能等等。
📝 我们可能会在 Web 开发领域经常听到这两个名词概念,但需要注意的是:前端和后端这两个概念不仅仅局限于 Web 应用程序开发领域的,这两个概念适用于整个软件架构和程序设计领域。是将软件不同功能的部分相互分离的抽象。
🔗 参考链接:
- 前端和后端 - 维基百科
- 一文看懂前端和后端开发 - 知乎
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 程序。
🔗 参考链接:
- 命令行界面 - 维基百科
- 图形用户界面 - 维基百科
- 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 开发,可自行了解相关的技术栈;
相关文章:
应用程序分类与相关基本概念介绍
0、引言 在从事软件开发的过程中,由于笔者并不是计算机专业的同学,所以时常会对一些概念感到困惑。比如: 前些年很火的前端和后端是什么意思?什么是 GUI?什么是 CLI?计算机的应用程序分为哪些种类&#x…...
springcloude gateway的意义
应用场景 1、南北向流量 需要流量网关和微服务网关配合使用,将内部的微服务能力,以统一的 HTTP 接入点对外提供服务。 流量网管主要是接入流量进行负载均衡,上游的微服务网关地址和数量变化不大,对服务发现要求不高。 微服务网…...
重新定义每天进步一点点
日拱一卒,每天进步一点点~ 这个主题之前写过一次,今天看了《全情投入》又有了新的感触,于是将其记录下来。 关于目标的设定问题 目标不是改变自己的日常行动,而是改变进行活动时的思维! 有些事情,坚持下…...
代码随想录算法训练营第51天 | ● 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费
文章目录 前言一、309.最佳买卖股票时机含冷冻期二、714.买卖股票的最佳时机含手续费总结 前言 买卖股票 完结; 一、309.最佳买卖股票时机含冷冻期 确定dp数组以及下标的含义 dp[i][j],第i天状态为j,所剩的最多现金为dp[i][j]。 其实本题很多…...
李佳琦掉粉,国货品牌却从“商战大剧”走向“情景喜剧”
李佳琦直播间带货怼网友,“哪里贵了,国货很难的”“这么多年工资没涨,有没有认真工作?”本人事后垂泪道歉仍掉粉百万,但是闻风而来的国货品牌却迎来了一场流量盛宴。 从蜂花蹲点“捡”粉丝,上架三款79元洗…...
linux 下 C++ 与三菱PLC 通过MC Qna3E 二进制 协议进行交互
西门子plc 有snap7库 进行交互,并且支持c 而且跨平台。但是三菱系列PLC并没有现成的开源项目,没办法只能自己拼接,我这里实现了MC 协议 Qna3E 帧,并使用二进制进行交互。 #pragma once#include <stdio.h> #include <std…...
Spring基础(2w字---学习总结版)
目录 一、Spirng概括 1、什么是Spring 2、什么是容器 3、什么是IoC 4、模拟实现IoC 4.1、传统的对象创建开发 5、理解IoC容器 6、DI概括 二、创建Spring项目 1、创建spring项目 2、Bean对象 2.1、创建Bean对象 2.2、存储Bean对象(将Bean对象注册到容器…...
07 目标检测-YOLO的基本原理详解
一、YOLO的背景及分类模型 1、YOLO的背景 上图中是手机中的一个app,在任何场景下(工业场景,生活场景等等)都可以试试这个app和这个算法,这个app中间还有一个button,来调节app使用的模型的大小,更大的模型实时性差但精…...
每日一题 78子集(模板)
题目 78 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums [1,2,3] 输出:[[],[1],[2]…...
OpenCV之形态学操作
形态学操作包含以下操作: 腐蚀 (Erosion)膨胀 (Dilation)开运算 (Opening)闭运算 (Closing)形态梯度 (Morphological Gradient)顶帽 (Top Hat)黑帽(Black Hat) 其中腐蚀和膨胀操作是最基本的操作,其他操作由这两个操作变换而来。 腐蚀 用一个结构元素…...
设计模式:享元模式
设计模式:享元模式 什么是享元模式 首先我们需要简单了解一下什么是享元模式。享元模式(Flyweight Pattern):主要用于减少创建对象的数量,以减少内存占用和提高性能。享元模式的重点就在这个享字,通过一些共享技术来减少对象的创建ÿ…...
汉诺塔问题(包含了三台柱和四台柱)——C语言版本
目录 1. 什么是汉诺塔 2. 三座台柱的汉诺塔 2.1 思路 2.2 三座台柱的汉诺塔代码 3. 四座台柱的汉诺塔 3.1 思路 3.2 四座台柱的汉诺塔代码 1. 什么是汉诺塔 汉诺塔代码的功能:计算盘子的移动次数,由数学公式知,汉诺塔的盘子移动次数与…...
【实训项目】滴滴电竞APP
1.设计摘要 2013年国家体育总局决定成立一支由17人组成的电子竞技国家队,第四届亚室会中国电竞代表队 出战第四届亚洲室内和武道运动会。 2014年1月13日CCTV5《体育人间》播放英雄联盟皇族战队的纪录片。 在2015到2019年间,我国电竞战队取得的无数值得…...
C++核心编程--类篇
C核心编程 1.内存分区模型 C程序在执行时,将内存大方向分为4个区域 意义:不同区域存放数据,赋予不同的生命周期,更能灵活编程 代码区:存放函数体的二进制代码,由操作系统进行管理的全局区:存放…...
java中用feign远程调用注解FeignClient的时候不重写Encoder和Decoder怎么格式不对呢?
如果在使用 Feign 进行远程调用时,没有重写 Encoder 和 Decoder,但仍然遇到格式不对的问题,可能是由于以下原因之一: 服务端返回的数据格式与客户端期望的格式不匹配:Feign 默认使用基于 Jackson 的 Encoder 和 Decode…...
记录使用Docker Compose 部署《XAPI项目》遇道的问题及解决方案
《XAPI项目》:GitHub仓库(勿打🚫小破站一个) 这篇文档,主要内容是记录使用Docker Compose 部署《XAPI项目》遇道的问题及解决方案 目录 📚 本地MySQL数据如何导入到容器内的MySQL中❎ 解决报错:…...
腾讯云OCR实践 - 降低客服财务运营成本
一、 前言: 随着图片时代的飞速发展,大量的文字内容为了优化排版和表现效果,都采用了图片的形式发布和存储,这为内容的传播和安全性带来了很大的便利,需要做重复性劳动。 OCR文字扫描工具也逐渐的应运而生,…...
springboot+vue上传图片
这里是一个简单的示例,演示了如何在Spring Boot中从Vue.js上传图像: 1.前端Vue.js代码: <template><div><input type"file" change"handleFileUpload"><button click"uploadImage">…...
高压电缆护层接地环流及温度在线监测系统
高压电缆的金属护层是电缆的重要组成部分,当缆芯通过电流时,会在金属护层上产生环流,外护套的绝缘状态差、接地不良、金属护层接地方式不正确等等都会引起护套环流异常现象,严重威胁电缆运行安全。 当电缆金属护层环流出现异常时…...
无涯教程-JavaScript - IPMT函数
描述 IPMT函数根据定期,固定的还款额和固定的利率返回给定投资期限内的利息支付。 语法 IPMT (rate, per, nper, pv, [fv], [type])争论 Argument描述Required/OptionalRateThe interest rate per period.RequiredPerThe period for which you want to find the interest a…...
【EI会议征稿】第三届机械自动化与电子信息工程国际学术会议(MAEIE 2023)
第三届机械自动化与电子信息工程国际学术会议(MAEIE 2023) 第三届机械自动化与电子信息工程国际学术会议(MAEIE 2023)将于2023年12月15-17日在江苏南京举行。本会议通过与业内众多平台、社会各团体协力,聚集机械自动…...
手写实现LRN局部响应归一化算子
1、重写算子的需求 芯片推理过程中遇到很多算子计算结果不对的情况,原因是封装的算子会在某些特殊情况下计算超限,比如输入shape特别大或者数值特别大时,LRN算子计算会出现NAN值,所以需要重写算子。先对输入数据做一个预处理&…...
朗思科技数字员工通过统信桌面操作系统兼容性互认认证
近日,朗思科技数字员工与统信桌面操作系统V20进行了兼容互认,针对上述产品的功能、兼容性方面,通过共同严格测试表明——朗思科技数字员工在统信桌面操作系统 V20上整体运行稳定,满足功能及兼容性测试要求。 北京朗思智能科技有限…...
十六、Webpack常见的插件和模式
一、认识插件Plugin Webpack的另一个核心是Plugin,官方有这样一段对Plugin的描述: While loaders are used to transform certain types of modules, plugins can be leveraged to perform a wider range of tasks like bundle optimization, asset m…...
ChatGPT新增超强插件:文本直接生成视频、海报,支持自定义修改!
全球著名在线设计平台Canva,在ChatGPT Plus(GPT-4)上推出了插件功能,用户通过文本提示,几秒钟就能生成演示文稿、PPT插图、电子书封面、宴会邀请函等各种精美设计海报,同时支持生成视频。 该插件最强大的功…...
亚像素边缘提取的例子
求帮忙下载: 1.http://download.csdn.net/detail/pkma75/925394 pkma75 资源积分:1分 备注:pdf格式,用曲线拟合的方法计算亚像素,编程易实现,具有较强的实用价值 2.http://download.csdn.net/detail/kua…...
Wayland:推动Linux桌面进入下一代图形显示时代
文章首发地址 Wayland是Linux系统下的一种图形显示协议,旨在替代X Window System(X11)作为Linux桌面环境的图形显示服务。下面是对Wayland的详细解释: 背景: 传统的Linux桌面环境使用X Window System(X11&…...
mysql外键(foreign key)
简介 MySQL的外键约束用来在两个表数据之间建立链接,其中一张表的一个字段被另一张表中对应的字段约束。也就是说,设置外键约束至少要有两种表,被约束的表叫做从表(子表),另一张叫做主表(父表&…...
内网穿透——Windows搭建服务器
文章目录 1.前言2. Emby网站搭建2.1. Emby下载和安装2.2 Emby网页测试 3. 本地网页发布3.1 注册并安装cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar内网穿透本地设置 4.公网访问测试5.结语 1.前言 在现代五花八门的网络应用场景中,观看视频绝对是主力应用场景之一&…...
UE5.1 + Android 环境搭建
官方文档:一定一定一定要参照官方文档,因UE不同版本对应的环境搭建并不完全一致。 准备工作 通过EpicGameLaunch下载Android目标平台。 必须安装jdk1.8并配置环境变量,UE5.1不要使用最新的jdk20;下载地址 安装 Android Studio …...
企业免费网站建设哪个品牌好/站长统计性宝app
在VMWare主页中选取新建虚拟机选项卡 2.在新建虚拟机向导中设置安装来源取决于安装方式.如果是通过光盘安装,则选择第一项.这里我使用ISO映像安装,输入用户名密码和密钥一路下一步就可以安装成功.3.安装成功如下图4.下面开始安装VMWare Tools工具点击 VMWare客户端的 虚拟机…...
如何做网站首页/没被屏蔽的国外新闻网站
2019独角兽企业重金招聘Python工程师标准>>> onLoad: function () {var that this// 获取接口城市数据wx.request({url: userCarUtil.host userCarUtil.getCity,success: function (res) {//console.log(res.data)that.setData({citysMap: res.data})}})}转载于:h…...
my eclipse网站开发/友情链接价格
大家好,我是表哥Harker,表妹我来咯~ 从今天起是 Web前端开发基础入门的正式第一篇,早起的鸟儿有虫吃,开饭咯! 顺便说下整个系列有一篇学习导图方便表妹们查找 第一篇讲什么呢? 山不在高,有仙则灵,楼不在高,地基稳才行哟!我们可以观察房地产公司开发一片住宅区楼房时…...
wordpress做招聘网站/长沙企业关键词优化哪家好
测试代码链接 异常过滤器特性: ExceptionFilterAttribute异常过滤器特性:可以在方法执行期间出现异常,被处理掉,有局限性:只有控制器实例化后,方法执行完之前,出现的异常才能被抓住 在WebApiConfig.cs Reg…...
wordpress简约企业主题下载/小广告
由于系统升级为Ubuntu 12.04 LTS版,【Linux菜鸟成长记】系列教程将不再更新,接下来会更新Ubuntu 12.04的新功能和使用方法技巧等文章。故将此系列文章整理存档,供自己和大家使用。遗憾的是未能写下搭建Qt开发环境,接下来会有更新。…...
现在的官方网站怎么做的/百度网站优化软件
笔记内容整理自mooc上北京理工大学嵩天老师python系列课程数据分析与展示,本人小白一枚,如有不对,多加指正 1.python自带的图像库PIL 1.1常用API Image.open() Image.fromarray() im.save() convert(L) b.astype(uint8)(这个API用于处理后的数…...