• GUI(UI编程)语言与面向对象、dsl


    看过面向对象程序设计的早期论文吗?这个东西就是为了描述GUI才发明出来的。所以凡是支持OOP足够好的语言,都适合做GUI。

    至于各种declarative programming的学派(譬如用XML),没有下面语言的OOP,你MVVM做不了,data binding做不了,最后都一样是屎。所以就算是描述式语言,也是建立在完美支持OOP的宿主程序上面的。


    作者:vczh
    链接:https://www.zhihu.com/question/276815517/answer/401637827
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    最适合做 GUI 的是 DSL 或者 XML(以及 XML 的扩展)之类的标记语言,而不是编程语言。

    例如 Qt 的 QML,Android 的 XML 或者 WPF 的 XAML 以及大家都再熟悉不过的 HTML/CSS,包括 JavaFX 也有 FXML。

    一门编程语言如果想更适合定义界面,那么它的语法就得往 DSL 方面靠拢(或者支持 DSL 风格)。例如 Kotlin 就是个典型的例子:



    作者:绅士喵
    链接:https://www.zhihu.com/question/276815517/answer/390718261
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
     

    与其问什么语言最适合做 GUI,倒不如问做 GUI 需要语言/框架具有哪些特性。

    首先用代码来“画”界面在现在来看是很怪异的,所以用 DSL + 完善的布局系统来写界面一定是趋势。对应的技术有 WPF、Qt Quick、JavaFX、Android Layout XML...

    其次,界面不能脱离了数据,而如何将数据与界面之间建立起关系是至关重要的,双向数据绑定无疑是最好的实现方法。对应的技术有 WPF、Cocoa、各种 Web MVVM 框架...



    作者:Cyandev
    链接:https://www.zhihu.com/question/276815517/answer/401765634
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
     
    https://www.zhihu.com/question/276815517
     

    在我目前的理解里,GUI 应用的架构实现,依次走过了这些重要的阶段:

    • 过程化绘制时代 - 直接调用 drawLine / drawRect 风格的 API 来绘制像素。在我的树莓派里,只要 include X11 的头文件,就能用 C 语言体验这种硬派的 GUI 开发了。HTML5 中的 Canvas,其实也属于这种风格。
    • 面向对象抽象时代 - 纯粹过程化的代码,并不利于维护事件驱动的业务逻辑。比如,你需要自行计算来判断出某次点击应该选中哪个 UI 元素。在 MFC 和 GTK 的时代,人们实现了面向对象风格的 UI 框架。按钮、输入框等 UI 控件具备了实例方法,能更好地组织代码。
    • 界面与样式分离时代 - 用 C++ 系语言的代码来描述 UI,很容易写出面条式的丑陋代码。因此人们又引入了 XML 风格的语言,专门来表达嵌套式的界面。DirectUI 和 HTML / CSS / JS 基础上的经典 Web,都是这个时代的产物。
    • MVC 与 MVVM 时代 - 如何维护日益复杂的 UI 交互逻辑?许多框架引入了软件工程中的 MVC 和 MVVM 等设计模式。这个时代的代表产物有苹果的 Cocoa 和微软的 WPF,以及 Web 上的 Angular 1 框架。
    • 声明式组件化时代 - 为什么我们必须编写连接 UI 布局语言和业务逻辑的面条代码呢?Facebook 的 React 提出了新的 UI 开发思路。通过 JSX,很容易用 JS 来编写嵌套的、声明式的、更易维护的 UI 组件,并借助 JavaScript 的动态性来实时调试 UI。当前风口上的 Vue,Flutter 和 SwiftUI,都明显地借鉴了这种思想。

    https://www.cnblogs.com/feng9exe/p/12291517.html

  • 相关阅读:
    NPOI操作EXCEL
    几个英文的数学概念
    C#中将鼠标光标变为忙碌状态
    C#使用Linq to Sqlite
    SSM-SpringMVC-25:SpringMVC异常顶级之自定义异常解析器
    SSM-SpringMVC-24:SpringMVC异常高级之自定义异常
    SSM-SpringMVC-23:SpringMVC中初探异常解析器
    SSM-SpringMVC-22:SpringMVC中转发(forward)和重定向(redirect)
    SSM-SpringMVC-21:SpringMVC中处理器方法之返回值Object篇
    jQuery-01:on live bind delegate
  • 原文地址:https://www.cnblogs.com/feng9exe/p/12291834.html
Copyright © 2020-2023  润新知