4

我正在考虑设计一个允许人们以图形方式开发 C++ 代码的应用程序的可能性。当我发现 Scratch 时,我感到很惊讶(参见网站教程视频)。

我相信大多数 C++ 都可以用图形表示,但预处理器指令和可能的函数指针除外。

您认为哪些 C++ 特性可以(或不)由图形项目表示?这样的应用程序有什么优点和缺点?它比“普通”C++ 简单多少?

回顾和更多:

优点:

  • 直觉的
  • 简单的小型应用程序
  • 有助于避免拼写错误

缺点:

  • 对于大型(中型?)大小的应用程序可能变得不可读
  • 对于有经验的程序员来说,手动编码更快
  • C++ 对于这种方法来说太复杂了

考虑到我们 - 在我的工作中 - 已经有相当多的现有 C++ 代码,我并不是在寻找一种全新的编程方式。我正在考虑另一种与遗留代码完全兼容的编程方式。人们将用于新代码的某种“病毒语言”,并有望最终用于替换现有代码(在可能有用的地方)。

您如何看待这种病毒式方法?

当谈到手动与图形编程时,我倾向于同意你的答案。这就是为什么,理想情况下,我会找到一种方法让用户始终在打字和图形编程之间进行选择。逐行解析器(+部分解释器)可能能够将键入的代码转换为图形设计。这可能的。让我们都祈祷吧。

提供我应该仔细考虑和分析的打字和图形编程功能是否有注意事项?

我已经研究过模板类(以及更普遍的类型级 C++)及其图形表示。有关模板类的图形表示的示例,请参见那里。框表示类或类模板。第一个顶部节点是类本身,接下来的(如果有的话)是类中的 typedef 指令。底部节点是模板参数。当然,边缘将类连接到用于实例化的模板参数。我已经有了一个原型来处理这种类型级别的图表。

如果你觉得这种表示模板类的方式是完全错误的,不要犹豫,说出来为什么!

4

11 回答 11

9

就像我喜欢 Scratch 一样,对于有经验的程序员来说,使用文本编辑器编写代码仍然比拖动块快得多,这已经在任何数量的图形编程环境中一次又一次地得到证明。

于 2009-03-18T17:01:46.847 回答
6

编写代码是开发人员一天中最简单的部分。我认为我们不需要更多帮助。阅读、理解、维护、比较、注释、记录和验证是我们仍然缺乏的地方——尽管有大量的工具和框架。


剖析你的优点:

对于小型应用程序来说直观而简单- 将其替换为“误导性”。它看起来很简单,但实际上并非如此:只要它简单,VB.NET 就更简单。当它变得复杂时,视觉设计就会成为阻碍。

帮助避免拼写错误——这就是良好的风格、一致性和最重要的智能感知。当事情不再简单时,无论如何你需要的东西。


错误级别

你的想法是错误的:C++ 语句不是可重用的、健壮的组件,它们更像是一大袋需要正确组合的齿轮。具有复杂性和例外(规则)的 C++ 甚至不是特别适合。

如果您想让事情变得简单,您需要更高级别的可重用组件。即使你有这些,将它们连接在一起也并不简单。尽管经过多年的奋斗,并在许多环境中进行了多次尝试,但这有时会奏效,但往往会失败。


病毒- 关于该要求,您是正确的 IMO:允许增量采用。这与源代码和可视化表示之间的平滑切换密切相关,这反过来可能意味着您必须能够从修改后的源代码生成可视化表示。


IDE 支持- 这是大多数以语言为中心的方法误入歧途的地方。现代 IDE 不仅仅是文本编辑器和编译器。用断点、数据检查等调试你的图表怎么样?分析器、泄漏检测器等是否会突出显示图表中的节点?源代码管理会给我昨天图表与今天图表的视觉差异吗?


也许你正在做一些事情,尽管我所有的“不”:一种更好的可视化代码的方法,一种在其上放置不同过滤器的方法,以便我看到我需要看到的内容。

于 2009-03-19T11:04:40.817 回答
5

C++ 的早期版本最初是为了编译成 C 而编写的,然后 C 被正常编译。

听起来您所描述的是一种编译为 C++ 的图形语言,然后将正常编译。

因此,实际上您不是在创建图形 C++,而是在创建一种恰好是图形的新语言。这没有错,但不要让 C++ 限制你所做的事情,因为最终你可能希望将图形语言直接编译为机器代码,甚至编译为CILJava ByteCode或其他任何你喜欢的东西。

您可能想要查看的其他图形语言是LabVIEW ,以及更普遍的可视化编程语言类别。

祝你工作顺利。

于 2009-03-18T17:09:54.020 回答
2

非平凡程序的复杂性通常太高而无法用图形符号表示,而图形符号的信息量很低。除非您的方法在某些方面明显不同,否则我怀疑这是否基于过去的努力是否有价值。

因此,实际上,他将仅用于教学目的和非常简单的程序。但对于这样的产品来说,这仍然是一个很好的目标市场。有时人们难以掌握基本原理,而视觉模型可能只是帮助点击的东西。

于 2009-03-18T17:08:17.987 回答
1

我更喜欢热键而不是图形菜单和按钮。
我认为图形开发工具也会发生同样的事情。许多人会更喜欢手动编码。

但是,源代码可视化工具 - 应该是件好事。

于 2009-03-18T17:06:47.303 回答
1

您认为哪些 C++ 功能可以 [...] 由图形项目表示?

面向对象设计。因此,类、继承、多态性、可变性、常量性等。还有模板。

这样的应用程序的优点和缺点是什么?

初学者开始编写程序可能更容易。对于有经验的人来说,它可能会摆脱编程的无聊部分。

想想任何其他代码生成器。他们为您创建了一个框架来编写更多涉及的部分。它们还会导致代码臃肿(想想任何所见即所得的 HTML 编辑器)。

在我看来,最大的挑战是任何这样的 UI 都必然会阻碍用户的想象力。

它比“普通” c++ 简单多少?

当您经历大量代码生成器典型的错误时,这可能是一种真正的痛苦。

此外,由于生成了大量代码,您不知道发生了什么——调试变得困难。

此外,对于有经验的人来说,发现生成的代码不符合他们喜欢的编码风格可能会有些恼火。

于 2009-03-18T17:09:42.243 回答
1

有趣的想法。我怀疑我会使用它。我更喜欢在纯文本编辑器中编码,甚至不是 IDE,对于棘手的问题,我更喜欢在纸上。我认识的大多数真正有经验的程序员都是这样工作的,也许是因为我们在不同的环境中长大,但我认为这也是因为我们对编程的看法。随着您获得更多经验,您开始在脑海中看到代码,比任何 GUI 工具向您显示的更清晰。

至于你的问题,我会提名模板作为尝试很好地代表的更难/更有趣的事情之一。它们无处不在,并携带您在设计工具时无法访问的信息。以一种有用的方式将其传递给用户应该是一个有趣的挑战。

于 2009-03-18T17:15:12.043 回答
1

我喜欢这个想法,但我怀疑事情会变得过于复杂而无法以图形方式表示。

但是,鉴于最近的工作经验;将这样的图形界面提供给非技术人员用于创建基本的拖放程序会很有用,让我自己可以自由地进行一些“适当的”编程;-) 如果它可以完成以下工作允许不熟练的人构建功能性的东西可能是一件非常好的事情(即使编程逻辑逃脱了他们)

在这样一个系统中,使用文字 C++ 代码更容易定义您想要做什么,而不是让用户界面妨碍您。对于知道需要编写的精确代码但仅限于设计 GUI 的会话程序员来说,这可能会令人沮丧。我特别考虑了一个更常见的应用程序,例如 html 编辑器/设计器,他们允许新手在根本不知道任何 html 的情况下构建他们的网站。

看看这样的系统如何处理内存的动态分配以及随着时间的推移程序的不同状态将会很有趣。我怀疑有一些非常基本的编程概念可能难以用图形表示..多态..?虚拟类、链接列表、堆栈/循环队列。我想知道你如何在没有巨大显示屏的帮助下成功地解释图像压缩算法(例如 jpg)。

我还想知道这样的系统是否会达到如此低的水平,以及您是否会处理抽象的概念,而编译器是否会找到做某事的最佳方法。

于 2009-03-18T18:17:17.773 回答
1

我一直在研究一种新的模型驱动软件开发范例,名为 ABSE ( http://www.abse.info ),它支持最终用户编程:它是一个基于模板的系统,可以用转换代码进行补充。我还有一个 IDE(名为 AtomWeaver)实现了目前处于 pre-alpha 阶段的 ABSE。

使用 AtomWeaver,作为专家/架构师,您可以构建知识模板,然后开发人员(或最终用户,如果您使元模型更简单)可以通过构建块“组装”系统,然后在表单中填充模板参数风格的编辑器。

最后,按下“生成”按钮将创建建筑师/专家指定的最终系统。

于 2010-03-29T23:32:55.473 回答
0

我很惊讶你认为函数指针会是一个特殊的问题。与指针有什么关系呢?

编程语言可以由节点的层次结构表示 - 这正是编译器将其变成的。非常奇怪的是,用于编辑程序的 UI 仍然是一个被解析的字符序列,因为编辑器中的自由度远远大于可用的允许选择集。但是智能感知有助于大大减少这个问题。

C++ 作为这样一个系统的基础是一个奇怪的选择。

于 2009-03-18T17:07:45.633 回答
0

我认为这种 IDE 的主要问题是生成的代码很容易变得难以维护。

这发生在德尔福身上。它是开发某种应用程序的一个非常好的工具,但是,当我们开始在组件之间添加复杂的关系、开始添加设计模式等时,代码会增长到无法维持的规模。

我相信这也是因为图形工具没有应用 MVC 的概念(或者如果他们这样做,它只是 IDE 理解的方式)。

它对于原型和不会增长的非常小的应用程序非常有帮助,否则它可能会给开发人员带来混乱

于 2009-03-18T17:09:15.207 回答