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

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 开发,可自行了解相关的技术栈;

你可能感兴趣的:(软件工程,desktop,app,web,application,前端,后端,GUI,mvc)