以类似于图形的图形方式编写C ++?

时间:2009-03-18 16:58:40

标签: c++ graphical-programming

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

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

您认为哪些C ++功能可以(或不是)由图形项表示? 这种申请的利弊是什么?它比“普通”C ++简单得多吗?

RECAP和更多:

优点:

  • 直观
  • 适用于小型应用程序
  • 有助于避免拼写错误

缺点:

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

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

您对这种病毒式方法有何看法?

说到手动和图形编程,我倾向于同意你的答案。这就是为什么理想情况下,我会找到一种方法让用户总是在打字和图形编程之间做出选择。逐行解析器(+部分解释器)可能能够将类型化代码转换为图形设计。 是可能的。让我们全都交叉。

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

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

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

11 个答案:

答案 0 :(得分:9)

就像我喜欢Scratch一样,对于有经验的程序员来说,使用文本编辑器编写代码比使用文本编辑器编写代码更快 更快这已经一次又一次地用任何数字证明图形编程环境。

答案 1 :(得分:6)

编写代码是开发人员日最容易的部分。我认为我们不需要更多的帮助。阅读,理解,维护,比较,注释,记录和验证是在哪里 - 尽管有大量的工具和框架 - 我们仍然缺乏。


剖析你的专业人士:

对于小型应用程序

直观简单 - 将其替换为“误导性”。它使它看起来很简单,但它不是:只要它很简单,VB.NET就更简单了。当它变得复杂时,视觉设计会妨碍它。

帮助避免拼写错误 - 这就是一个好的风格,一致性和最后的智能感知。当事情不再简单时,你需要的东西。


错误的等级

您正在考虑错误的级别:C ++语句不是可重用的,强大的组件,它们更像是需要将正确放在一起的大量齿轮。 C ++与它的复杂性和异常(对规则)甚至不是特别适合。

如果您想简化操作,则需要更高级别的可重用组件。即使你有这些,将它们插在一起并不简单。尽管经历了多年的努力,并且在许多环境中进行了许多尝试,但这种做法有时会失败。


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


IDE支持 - 这是大多数以语言为中心的方法误入歧途的地方。现代IDE不仅仅是文本编辑器和编译器。如何调试图表 - 使用断点,数据检查等?轮廓仪,检漏仪等会突出显示图表中的节点吗?源代码控制会给我一个昨天图表与今天图表的视觉差异吗?


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

答案 2 :(得分:5)

最初编写C ++的早期版本是为了将它们编译为C,然后将C编译为正常。

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

所以你真的不是在创建一个图形化的C ++,而是在创建一种恰好是图形的新语言。这没有什么不对,但是不要让C ++限制你做的事情,因为最终你可能想要将图形语言直接编译为机器代码,甚至是CILJava ByteCode等等。否则会让你觉得好奇。

您可能希望查看的其他图形语言为LabVIEW,更常见的是visual programming languages的类别。

祝你好运。

答案 3 :(得分:2)

非平凡程序的复杂性通常太高,无法用信息内容较低的图形符号表示。除非您的方法在某种程度上有明显不同,否则我对此持怀疑态度根据过去的努力,这将是有价值的。

因此,实际上,他只会用于教学目的和非常简单的程序。但对于像这样的产品来说,这仍然是一个很好的目标市场。有时候人们在掌握基础知识方面遇到困难,视觉模型可能只是帮助点击的东西。

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

  

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

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

  

此类申请的利弊是什么?

初学者开始编写程序可能更容易。对于经验丰富的人来说,可能会摆脱编程的枯燥部分。

考虑任何其他代码生成器。他们为您创建了一个框架,用于编写涉及更多的部分。它们还会导致膨胀代码(想想任何WYSIWYG HTML编辑器)。

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

  

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

当你消除代码生成器典型的卡车错误时,这可能是一个真正的痛苦。

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

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

答案 6 :(得分:1)

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

至于你的问题,我提名模板作为更难/更有趣的事情之一,试图表现得很好。它们无处不在,并且随身携带您在设计工具时无法访问的信息。以有用的方式向用户提供这应该是一个有趣的挑战。

答案 7 :(得分:1)

我喜欢这个想法,但我怀疑有些事情变得太复杂而无法用图形表示。

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

在这样的系统中有一点,使用文字C ++代码更容易定义您想要做的事情,而不是让用户界面妨碍;对于会话程序员来说,知道需要编写的精确代码然后仅限于设计GUI会让他感到沮丧。我特别想到一个更常见的应用程序,比如html编辑/设计师,他们允许新手在不知道任何HTML的情况下构建他们的网站。

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

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

答案 8 :(得分:1)

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

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

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

答案 9 :(得分:0)

我很惊讶你认为函数指针会成为一个特殊的问题。如何处理指针呢?

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

基于这样的系统,C ++将是一个奇怪的选择。

答案 10 :(得分:0)

我认为这种IDE的主要问题是生成的代码很容易变得无法更新。

这发生在德尔福。这是开发某种应用程序的一个非常好的工具,但是,当我们开始在组件之间添加复杂的关系时,开始添加设计模式等等。代码增长到不可容忍的大小。

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

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