软件工程

针对在系统开发生命周期中工作的专业人士,学者和学生的问答

9
在编写面向对象的代码时,我是否应该始终遵循设计模式?
任何面向对象的程序都有可想像的设计模式吗?我之所以这么问,是因为最近我看到了带有的Door类的实现Lock。这是测试的一部分,回答说代码遵循Null Object模式: class Lock { public: virtual void close() = 0; virtual void open() = 0; virtual bool is_open() const = 0; virtual ~Lock() { } }; class DummyLock : public Lock { private: DummyLock(); DummyLock(const DummyLock&) = delete; DummyLock& operator=(const DummyLock&) = delete; private: void close() { } void …

6
为什么类型推断有用?
我阅读代码的方式比编写代码的方式要多,并且我假设大多数从事工业软件工作的程序员都这样做。我认为类型推断的优点是减少了冗长和编写的代码。但是另一方面,如果您更频繁地阅读代码,则可能需要可读的代码。 编译器推断类型;有旧的算法可以解决这个问题。但是真正的问题是,当我阅读代码时,程序员为什么要推断出变量的类型?只是阅读该类型的人,是否比思考那里的类型还快? 编辑:作为结论,我理解为什么它有用。但是在语言功能类别中,我发现它在带有操作符重载的存储桶中显示-在某些情况下很有用,但如果滥用则会影响可读性。


6
为什么不在语法级别测试语言是受支持的功能?
您可以找到无穷无尽的博客,文章和网站列表,这些列表可以宣传对单元代码进行单元测试的好处。几乎可以保证,为Java,C ++,C#和其他类型的语言编写编译器的开发人员使用单元测试来验证其工作。 那么,为什么在这些语言的语法中,尽管它很流行,却为什么缺少测试呢? 微软在C#中引入了LINQ,那么为什么他们也不能添加测试呢? 我并不是要预测这些语言的变化,而是要阐明为什么它们一开始就没有。 例如:我们知道您可以编写一个for没有该语句语法的循环for。您可以使用while或if/ goto语句。有人认为for声明更有效,并将其引入语言。 为什么测试没有遵循编程语言的相同演变?

1
用Apache 2.0和我的修改文件
我以纯英语阅读了Apache License 2.0版的原始文本和说明。 好的,我复制世界最佳公司分发的课程,他们的许可证,然后稍微修改一下代码。 原始文件包含我的更改。 /* * Copyright (C) 2011 The Best Company in the World * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at …

4
为什么更喜欢非静态内部类而不是静态内部类?
这个问题是关于将Java中的嵌套类做成静态嵌套类还是内部嵌套类。我在这里和Stack Overflow上进行了搜索,但是实际上找不到关于此决定的设计含义的任何问题。 我发现的问题是关于静态和内部嵌套类之间的区别的,这对我来说很明显。但是,我还没有找到令人信服的理由在Java中使用静态嵌套类-匿名类除外,我不考虑这个问题。 这是我对使用静态嵌套类的影响的理解: 更少的耦合:由于类不能直接访问其外部类的属性,因此通常得到的耦合较少。较少的耦合通常意味着更好的代码质量,更容易的测试,重构等。 Single Class:类加载器不需要每次都照顾一个新类,我们创建外部类的对象。我们只是一遍又一遍地获得同一类的新对象。 对于一个内部类,我通常会发现人们认为访问外部类的属性是有利的。从设计的角度来看,我希望在这方面有所不同,因为这种直接访问意味着我们具有很高的耦合度,并且如果我们想将嵌套类提取到其单独的顶层类中,则只能在本质上转向将其转换为静态嵌套类。 所以我的问题归结为:我是否认为非静态内部类可用的属性访问会导致较高的耦合度,从而导致较低的代码质量,我是错误的,并且据此我推断(非匿名)嵌套类应一般是静态的? 或者换句话说:为什么有一个令人信服的理由为什么人们更喜欢嵌套的内部类?

11
确保每个班级只有一个责任,为什么?
根据Microsoft文档,有关Wikipedia SOLID原则的文章或大多数IT架构师,我们必须确保每个班级仅负一个责任。我想知道为什么,因为如果每个人似乎都同意这条规则,那么似乎没人会同意这条规则的原因。 一些人引用了更好的维护,有人说它提供了简单的测试,或者使类更加健壮或安全。什么是正确的,实际上是什么意思?为什么它可以使维护更好,测试更容易或代码更健壮?

4
为什么有人会花时间在微软“罗斯林”上?
我刚刚阅读了Microsoft“ Roslyn”的一些白皮书和示例,这个概念似乎非常有趣。据我所知,它打开了一个黑框,即编译器,并提供了一个接口,我们可以使用该接口来获取有关在Visual Studio中编写的代码的信息和指标。 Roslyn似乎也具有“编写”代码并即时编译/执行代码的能力(类似于CodeDom),但是根据我的经验,我在使用该功能时仅遇到了有限的使用。 虽然代码分析和指标元素是一个有趣的领域,但是它已经存在了很长时间,并且很多提供商已经在代码分析和重构工具(例如ReSharper,CodeRush)上投入了大量资金。 ,nCover等),他们做得很好! 为什么任何公司都会竭尽全力去实施一些可以通过购买现有工具之一的许可证而以很小的成本提供的东西? 也许我错过了Roslyn项目的一些关键功能,这些功能使它超出了所提及工具的范围...

5
在浏览器中破解JavaScript有多容易?
我的问题与JavaScript安全性有关。 假设您使用的是Backbone或AngularJS之类的JavaScript框架的身份验证系统,并且您需要安全的端点。没问题,因为服务器始终是硬道理,并会检查您是否有权执行所需的操作。 但是,如果在不涉及服务器的情况下需要一点安全性怎么办?那可能吗? 例如,假设您有一个客户端路由系统,并且希望为登录用户保护一条具体的路由。因此,您对服务器执行ping操作,询问是否允许访问受保护的路由,然后继续。问题是,当您对服务器执行ping操作时,会将响应存储在一个变量中,因此,下次访问私有路由时,它将检查您是否已登录(不对服务器执行ping操作),并取决于响应会成功与否。 用户修改该变量并获得访问权限有多容易? 我的安全(和JavaScript)知识不是很好。但是,如果变量不在全局范围内并且在模块模式的私有部分中,该模式仅具有getter而没有setter,即使在这种情况下,您能否破解呢?

5
当您面对从未完成的编程任务时该怎么办?
3个月前,我以.NET开发人员的身份开始了我的职业生涯,在针对各种技术,模式和概念进行了长期培训之后,负责监督我的开发人员决定我准备加入该公司处理的众多项目之一。 我很高兴终于能够开始编码。我加入的团队目前很小,因为正在开始一个新项目,这很棒,因为我参与了该项目的整个生命周期。它是一个基于Web的SPA项目,其支持使用ASP.NET MVC / ASP.NET Web API,并且在前端提供Durandal框架和相关库。 我的问题是,在与同事开会并确定下个月的任务和估计后,我发现自己处于一个不知道自己是否有能力承担任何任务的职位。 我从未完成任何已创建的任务,而且我不知道该如何进行。 例如,创建的任务之一就是为整个应用程序创建通用的错误处理机制。 当面对他从未完成的任务时,通常如何进行?

3
REPL和交互式外壳之间的区别
新手问题。我仅通过阅读Wikipedia上的定义就无法分辨REPL和交互式外壳之间的区别。 Wiki指出REPL是一种特殊的交互式语言外壳。它是否是适当的子集?Wiki定义似乎将术语REPL限制为类似Lisp的语言,而声明的属性实际上并不包含任何区别功能。 特别是,将IPython称为REPL是否正确?



2
为什么PHP不支持函数重载?
我想知道编程语言的主要功能之一是否能够通过参数重载函数。我认为这是面向对象编程必不可少的内容。 它是故意遗留下来并且不允许的吗?还是超载不是一个好习惯?

8
真正的BIG源代码提交是什么术语?[关闭]
有时,当我们检查软件的提交历史时,我们可能会发现确实有一些提交是非常大的-它们可能会更改10或20个文件,其中包含数百个更改的源代码行(增量)。我记得有一个用于BIG提交的常用术语,但是我不记得确切的含义。谁能帮我?程序员通常用来指代这种BIG和巨型提交的术语是什么? 顺便说一句,一起做出很多更改是一种好的做法吗? 更新:谢谢你们的启发性讨论!但是我认为“代码炸弹”是我想要的术语。

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.