Questions tagged «paradigms»

计算机编程的基本样式。

4
命令式,过程式和结构化编程之间有什么区别?
通过研究(书籍,维基百科,关于SE的类似问题等),我了解到命令式编程是主要的编程范例之一,您在其中描述了一系列要由计算机执行的命令(或语句)(因此,要求其采取特定措施,因此命名为“命令性”)。到现在为止还挺好。 另一方面,过程式编程是命令式编程的一种特定类型(或子集),您可以在其中使用过程(即函数)来描述计算机应执行的命令。 第一个问题:是否有一种非过程式命令式编程语言?换句话说,没有程序就可以进行命令式编程吗? 更新:第一个问题似乎已得到解答。语言可以是必不可少的,而无需程序化或结构化。一个示例是纯汇编语言。 然后还有结构化编程,这似乎是命令式编程的另一种类型(或子集),它的出现是为了消除对GOTO语句的依赖。 第二个问题:过程式编程和结构化编程有什么区别?您能否拥有一个没有另一个,反之亦然?我们可以说过程编程是结构化编程的一个子集吗?

3
为什么贫血领域模型在C#/ OOP中被认为是不好的,而在F#/ FP中却非常重要?
在关于F#的博客文章中,它表示乐趣和收益,它表示: 在功能设计中,将行为与数据分开非常重要。数据类型是简单且“哑”的。然后分别有许多作用于这些数据类型的函数。 这与面向对象的设计正好相反,在面向对象的设计中,行为和数据必须结合在一起。毕竟,这正是一个类。实际上,在真正的面向对象设计中,除了行为外,您应该什么都没有-数据是私有的,只能通过方法访问。 实际上,在OOD中,围绕数据类型的行为不足被认为是一件坏事,甚至有一个名字:“ 贫血领域模型 ”。 鉴于在C#中,我们似乎继续从F#借用,并尝试编写更多的函数式代码;为什么我们不借用分离数据/行为的想法,甚至认为它不好呢?仅仅是因为该定义不与OOP一起使用,还是有一个具体的原因在C#中是不好的,由于某些原因在F#中不适用(实际上是相反的)? (注意:我对C#/ F#中的差异特别感兴趣,因为它们可能会改变对优劣的看法,而不是对博客文章中的任一种看法持不同意见的人)。


9
编码时如何通过分析克服瘫痪?
当我开始一个新项目时,我经常会立即开始考虑实现的细节。“我要在哪里放置DataBaseHandler?我应该如何使用它?要使用它的类应该从某些Abstract超类中扩展。发送请求和解析数据的方法?” 我最终停滞了很长时间,因为我想为可扩展性和可重用性编写代码。但是我觉得几乎不可能过去思考如何实现完美。 然后,如果我只想说“拧紧它,就完成它!”,我很快就会碰壁,因为我的代码没有组织好,混合了抽象级别,等等。 您有什么技术/方法来启动一个新项目,同时建立一个可以很好地扩展的逻辑/模块化结构? - -编辑- - 好吧,这已经是很难接受答案的问题类型了,但是希望获得更多反馈,看看是否有共识。TDD听起来真的很酷,坦率地说,我一直在意欲加快使用JUnit等的速度。与此同时,TDD的拥护者如何看待这一事实,即与TDD有关的合理点解决了我的问题?特别的问题是,TDD似乎并没有真正解决设计问题。当然,我同意TDD将帮助我定义我想做什么,然后我可以逐步研究如何做,但是有许多不同的总体设计模式/结构可以全部通过单元测试。就是这样:它测试单个UNITS。我想我有点困惑...我不知道。也许我' 谢谢!

1
什么是表格编程?
在猎鹰的编程语言标榜自己是支持表格程序: Falcon提供了六个集成的编程范例:过程式,面向对象,面向原型,函数式,表格式和消息式。而且您不必掌握所有这些知识。您只需要选择所需的成分,然后让代码遵循您的灵感即可。 该文档在某种程度上扩展了表格式编程语言的工作方式,但重点在于该语言自身的结构和语法,并没有真正解释该范式的好处(当然,从那些简单的例子中可以明显看出这些范例的好处) 。 我对整个内部运作方式有些困惑,据我了解,Falcon Table是一个或多或少可以用作关系表的本机结构,并且可以描述为(具有面向对象的语言)(具有面向对象的关系集)。我知道这是一个可怕的描述(怪罪我的OO根源和多年滥用龙舌兰酒)。 您能帮助我更好地了解什么是表格编程及其内部运作方式吗? 澄清:我不是在询问表格模型编程。
34 paradigms 

3
错误处理注意事项
问题: 长期以来,我对这种exceptions机制感到担心,因为我觉得它并不能真正解决应有的问题。 要求:关于该主题的争论很长时间,而且大多数人都在努力比较exceptions和返回错误代码。这绝对不是这里的主题。 尝试定义错误,我同意Bjarne Stroustrup和Herb Sutter的CppCoreGuidelines 错误表示该功能无法实现其广告目的 要求:该exception机制是用于处理错误的语言语义。 要求:对我来说,没有“没有借口”的功能不能完成任务:要么我们错误地定义了前后条件,所以该功能无法确保结果,或者某些特殊情况对于花时间在开发上没有足够重要的意义。一个办法。考虑到IMO,常规代码和错误代码处理之间的区别(在实施之前)是非常主观的。 要求:使用异常指示何时不保留前置条件或后置条件是该exception机制的另一个目的,主要是用于调试目的。我的目标不是这里的用法exceptions。 在许多书籍,教程和其他资料中,它们倾向于将错误处理显示为一门相当客观的科学,可以解决这一问题,exceptions而您只需要catch它们具有强大的软件就可以从任何情况下恢复。但是,作为开发人员的几年时间使我从另一种方法来看问题: 程序员倾向于通过抛出异常来简化他们的任务,而这种特殊情况似乎太少而无法仔细实现。典型的情况是:内存不足问题,磁盘已满问题,文件损坏等,这可能就足够了,但并不总是从体系结构级别决定。 程序员往往不会仔细阅读有关库中异常的文档,并且通常不知道函数何时何地抛出。而且,即使他们知道了,他们也并没有真正管理它们。 程序员往往没有足够早地捕获异常,当他们捕获异常时,主要是记录并抛出更多异常。(请参阅第一点)。 这有两个结果: 经常发生的错误可以在开发的早期发现并进行调试(很好)。 罕见的异常无法管理,并且会使系统在用户家崩溃(带有一条漂亮的日志消息)。有时会报告错误,甚至不会报告。 考虑到这一点,海事组织错误机制的主要目的应该是: 在不管理某些特定情况的代码中使可见。 发生这种情况时,将问题运行时与相关代码(至少是调用方)进行通信。 提供恢复机制 exception语义作为错误处理机制的主要缺陷是IMO:很容易看到a throw在源代码中的位置,但是绝对不明显,通过查看声明来知道特定功能是否会抛出。这带来了我上面介绍的所有问题。 该语言不会像对语言的其他方面(例如强类型的变量)那样严格执行和检查错误代码 尝试解决方案 为了改善这一点,我开发了一个非常简单的错误处理系统,该系统试图使错误处理的重要性与普通代码相同。 这个想法是: 每个(相关)功能都接收到对success非常轻的对象的引用,并可能将其设置为错误状态。在保存文本错误之前,该对象非常轻。 如果提供的对象已经包含错误,则鼓励函数跳过其任务。 绝对不能覆盖错误。 完整的设计显然会全面考虑每个方面(约10页),以及如何将其应用于OOP。 Success该类的示例: class Success { public: enum SuccessStatus { ok = 0, // All is fine error = 1, // …

5
UNIX哲学中的编程是否与函数式编程相同?
UNIX编程环境(经典文本)指出,UNIX编程方法是构建小型的,定义明确的工具,可以将其组合起来以解决更复杂的问题。在学习C和Bash shell时,我发现这是一个功能强大的概念,可用于处理各种编程问题。 仅使用Linux平台,这个概念就很清楚并且一直使用。在命令行上形成的用于重定向I / O,链接系统工具(如ls,grep等)的任何表达式都表明了此概念的强大之处。 让我感到困惑的是,其中许多程序都是使用命令性/过程式编程风格以C语言编写的,但是在命令行上使用它们并将它们结合在一起的方式对我来说更像是函数式编程,其中每个程序都是一个独立的函数,不依赖于它可能加入的任何其他程序的状态。 理解UNIX编程原理是否准确,基本上就是使用可能是用命令式编程风格构建的工具进行的函数式编程吗?

8
有没有一种编程范例可以促进使依赖关系对其他程序员来说非常明显?
我在一个数据仓库中工作,该数据仓库通过许多流和层为多个系统提供源,并且具有迷宫般的依赖关系,将各种工件链接在一起。几乎每天我都会遇到这样的情况:我运行某些东西,它不起作用,运行大量代码,但是几个小时后,我意识到我已经设法将现在所知的一小部分概念化为流程图需要一天的稍后时间,所以我问一个人,他们告诉我必须先运行另一个流,并且如果我在这里检查(表明其他编码依赖项的巨大堆栈中某些看似任意的部分),则我将看到了这个。真令人沮丧。 如果我能够向团队建议,如果我们做更多的事情来使对象之间的依赖关系更加可见和明显,而不是将它们深深地嵌入到递归代码级甚至数据中,那可能是个好主意。之所以必须存在,是因为它被另一个流填充了,也许是通过引用一个众所周知的,经过测试的软件范例进行的,那么我也许可以使我的工作变得简单,而其他所有人都可以简化很多。 向我的团队解释这种好处是很困难的。他们倾向于按照现状接受事物,而不是“想大”,因为他们看到了能够以新方式概念化整个系统的好处–他们并没有真正看到是否可以为大型系统建模高效,那么就不太可能遇到内存效率低下,流停止唯一约束和重复键,废话数据的情况,因为这样可以更轻松地进行设计以符合原始视觉,并且以后不会遇到所有这些问题我们现在正在经历,我知道这与以往的工作不同寻常,但他们似乎认为这是不可避免的。 那么,有谁知道一个强调依赖关系并促进系统通用概念模型以确保长期遵守理想的软件范例?目前,我们几乎陷入了混乱,每个冲刺的解决方案似乎都是“只是在这里,这里和这里添加此东西”,而我是唯一一个担心事情真的开始崩溃的人。

13
您最反对函数式编程的观点是什么?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 函数式编程是最古老的编程范例之一。但是,与更流行的范例相比,它在业界使用不多。但是在学术界已经大大强调了这一点。 您最反对函数式编程的观点是什么?

5
学习每种编程语言
我多次听说,每个程序员都应该学习每种语言中的一种。现在,这不一定是正确的,但我认为这是一个好主意。 我学到了程序语言(Perl的),但什么是其他类型的? 它们之间有什么区别,每个都有哪些示例?

5
对于哪些常见问题,函数式编程不适合?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 函数式编程是一种声明式范例。FP的优势之一是避免了副作用。据说对于某些问题,FP不太适合。 对于哪些常见问题,函数式编程不适合吗?

11
OOP是现实世界中占主导地位的编程模型吗?
对象永不?好吧,几乎没有 在ACM通讯的VIEWPOINT部分中,我找到了一篇有趣的文章,标题为“ Objects Never?Well,Hardever Ever ”。这与“对象优先”或“对象迟”的观点截然不同。他建议“从不设对象”或“由对象开设研究生院”。 作者讨论了OOP,并提出了有关在现实世界编程环境中如何使用OOP的问题。他认为OOP不是主要的编程模型。他声称,例如,有70%的编程是针对OOP不太适合的嵌入式系统完成的。 当一些大学的教授想谈论OOP的好处时,他们谈论的是代码重用。他又说,作为另一个例子,这不是现实世界中的真实情况。重用代码比大学声称的要难: 我声称使用OOP并不像大多数人所相信的那样普遍,它不如其支持者所声称的那样成功,因此,没有理由证明它在CS课程中的中心地位。 我很高兴知道堆栈溢出中的人们对此有何看法?从程序员的角度来看,OOP是占主导地位的编程模型吗? 如果我应该只选择/学习/使用一种方法,那么它是否是面向对象的?为什么?

6
用Java编写UI 100%并通过API提供数据是个好主意吗?
我的主要工作是制作HTML应用程序。我的意思是,内部使用CRUD类型的应用程序,其中包含许多可编辑的Gridview,文本框,下拉菜单等。我们目前正在使用ASP.NET Web窗体,虽然确实可以完成工作,但是性能通常很差,而且通常您必须跳篮球才能获得所需的东西。吊在天花板上的铁环会燃烧。 所以我想知道将所有UI移到JavaScript端是否是一个好主意。开发一组强大的可重用控件,这些控件专门针对我们的需求量身定制,并且仅与服务器交换数据。是的,我喜欢“控件”(又名“小部件”)范例,它非常适合此类应用程序。因此,在服务器端,我们仍将具有与当前ASPX标记类似的基本布局,但是之后将仅发送给客户端一次,而Javascript部分将负责所有后续的UI更新。 问题是我以前从未做过此事,也从未见过任何人这样做过,所以我不知道会有什么问题。我特别担心: 性能依然。基准测试表明,当AJAX更新后浏览器尝试重新呈现大部分页面时,当前主要延迟在客户端。ASP.NET webforms生成的标记为“ web”一词赋予了新的含义,丰富的Devexpress控件在此之上添加了自己的Javascript复杂性层。但是,重新计算Javascript方面的所有必要更改然后仅更新需要更新的内容会更快吗?请注意,我所谈论的表单具有多个可编辑的gridview,许多文本框,许多下拉列表,每个下拉列表中都包含了半百万个可过滤项,等等。 易于发展。现在将有更多的Javascript,并且可能与页面的HTML标记混合。那或某种新的视图引擎将必须被生产。Javascript的Intellisense也比C#代码差很多,并且由于Javascript的动态特性,不能期望它会变得更好。编码实践可以使它有所改善,但幅度不大。另外,我们的大多数开发人员主要是C#开发人员,因此会有一些学习过程和最初的错误。 安全性。许多安全检查将必须进行两次(服务器端和UI端),并且数据处理服务器端将必须包含更多安全检查。当前,如果您在服务器端将文本框设置为只读,则可以依赖于其值在客户端往返过程中是否保持不变。该框架已经具有足够的代码来确保(通过视图状态加密)。使用纯数据方法会变得更加困难,因为您必须手动检查所有内容。另一方面,可能会更容易发现安全漏洞,因为您只需要担心数据。 总而言之,这将解决我们的问题,还是使它们变得更糟?有没有人尝试过,结果如何?是否有任何框架可以帮助这种工作(不包括jQuery和道德上的对等)?

7
对于什么问题,面向对象编程不是一个好的选择?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 这个问题有点启发:对于什么常见的问题,函数式编程不太适合?-但是我一直想问这个问题,但是太害怕问了。 我一直都在...好吧,实际上我们一生都可以称之为工程软件开发,而且在所有时间里,尽管OO一直都存在(嗯,大部分时间),但我从未使用过“它的方式”,也不学习这种范式。我们一直使用相当简单的程序结构,例程/函数/模块,尽管它与当今管理这些程序的最佳实践(程序的最大LOC约为300k,没有太大的问题)相反,但从未证明是困难的,更不用说不可能了。 因此,我想问你,对于哪种面向对象范例不是一个好的选择会有什么问题?与程序编程相比?
19 paradigms 


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.