在从事软件开发的过程中,由于笔者并不是计算机专业的同学,所以时常会对一些概念感到困惑。比如:
等等。
这些问题对于学习过《软件工程》 这门课程的同学来说,可能会显得比较幼稚;但是对于非专业的同学来说,理解这些概念有助于帮助自己清晰地认识到自己所从事的方向。
有关应用程序的分类可以参考知乎上的回答 —— 应用程序有哪些细致的分类? - 知乎
针对一般的个人计算机而言,根据运行平台,我们日常接触的最多的应用程序可以分为 Desktop 应用程序以及 Web 应用程序。
参考链接:
前端开发和后端开发是软件开发中的两个不同的领域。
前后端开发需要考虑的是如何实现相关功能和信息数据的存取、平台的稳定与性能等等。
我们可能会在 Web 开发领域经常听到这两个名词概念,但需要注意的是:前端和后端这两个概念不仅仅局限于 Web 应用程序开发领域的,这两个概念适用于整个软件架构和程序设计领域。是将软件不同功能的部分相互分离的抽象。
参考链接:
有关 GUI 的介绍还可以参考知乎上的回答 —— 图形用户界面(GUI)入门详解 - 知乎
通过以上的了解我们知道:无论是桌面应用程序、Web 应用程序、移动设备 APP、嵌入式设备程序甚至系统级的软件,只要是通过图形界面为用户提供交互的,都可以称之为是 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 上手简单, 做个简单的小工具基本够用了,但它不够美观,功能太单一。 |
GUI 程序是一种基于图形用户界面的应用程序,它可以让用户通过鼠标、键盘等输入设备与程序进行交互,而不需要记忆复杂的命令。
GUI 程序的编程模型通常是事件驱动的,也就是说,程序的执行流程是由用户触发的各种事件来控制的,比如点击按钮、选择菜单、输入文本等。事件驱动的编程模型的优点是可以实现高度的交互性和灵活性,缺点是可能导致逻辑分散和难以维护。
除了事件驱动之外,GUI程序还可以采用其他的编程模型,比如:
在 GUI 程序中,常见的数据驱动模型有:
这三者即常见的软件架构设计模式