软件工程

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

5
我们可以在没有任何网络访问权限的情况下在本地计算机上设置svn服务器吗?
我想在没有任何网络访问权限的情况下在计算机上设置SVN存储库。我正在编写没有任何协作者的代码,所以我不希望它公开。 我读了这篇文章,但是它建议使用提供免费存储库的在线SVN存储库服务。在这种情况下,我的代码将公开可用(包括在免费计划的条款中)。 因此,我想知道是否可以在Windows XP计算机上设置本地服务器,即使我没有任何互联网连接也只能访问该本地服务器?
25 svn 

2
LGPL v3的“分发”是什么构成
我正在考虑基于LGPL Web应用程序构建一些新软件。我想利用此新软件为雇主创建一个网站,我们不打算将软件本身出售或分发给任何人。从LGPL软件发布网页是否构成许可证中的“分发”,所以我也必须发布对LGPL代码的更改? 我知道你们都不是律师,因此暗示IANAL。我也了解我可以联系LGPL软件的开发人员,并索取不同的许可证。

4
我应该如何向已存在的对象添加功能?
我有一个具有一定数量明确定义的功能的接口。比方说: interface BakeryInterface { public function createCookies(); public function createIceCream(); } 这对于大多数接口实现都很有效,但是在某些情况下,我需要添加一些新功能(例如,可能已添加到新方法中createBrownies())。这样做的显而易见/天真的方法是扩展接口: interface BrownieBakeryInterface extends BakeryInterface { public function createBrownies(); } 但是有一个很大的缺点,就是我不能在不修改现有API的情况下添加新功能(例如,更改类以使用新接口)。 我正在考虑使用适配器在实例化后添加功能: class BrownieAdapter { private brownieBakery; public function construct(BakeryInterface bakery) { this->brownieBakery = bakery; } public function createBrownies() { /* ... */ } } 这会让我感到类似: bakery = new …

5
如何将OOP概念应用于构建简单但真实的Web应用程序?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我已经尝试了很长时间,将自己的头放在OOP上。我看到了它的优势。我阅读了很多很多教程,并观看了相同数量的有关该主题的视频。我得到了动物/猫/狗的例子,我得到了汽车/驱动器的例子。我苦苦挣扎的是如何在实际应用程序中应用这些概念。因此,我着手使用OOP构建一个。 我并不是在寻求语法或编写特定代码方面的帮助-我可以在文档中以及通过搜索论坛等方式找到自己。我真正需要的是一些指导,并时不时地朝着正确的方向发展。有经验丰富的程序员愿意指导我吗? 作为我的学习项目,我想构建一个简单的分类“ Web应用程序”。类似于Craigslist,但在范围方面被淡化。我想使用PHP5和MySQL,因为我对它们很熟悉。 假设只有以下两种用例: 发布要出售的东西 浏览/搜索要购买的东西 什么是事物“物”?我可以想象每个项目都可以是一个对象,但是在什么时候呢?又为什么呢 因此,例如,用户填写“待售物品”表格,该表格是否应该变成一个对象,然后传递给另一个将值插入数据库的对象? 当另一个用户正在浏览并要求查看C类的所有项目时该怎么办?是否有必要在应用程序必须连接到其数据库时创建一个数据库对象,然后获取一堆项目对象并将其显示在页面上,这是否有意义?……将其写出来无疑使我意识到我对OOP仍然一无所知。请帮我解决这个问题。 如果您认为这不是开始涉足OOP的好项目,请随时提出另一个想法!

3
多线程应用程序的UML图
对于单线程应用程序,我喜欢使用类图来概述该应用程序的体系结构。但是,在尝试了解大量的多线程/并发应用程序时,这种类型的图并不是很有用,例如,因为类的不同实例在不同的线程上“处于活动状态”(意味着访问一个实例仅从一个实例中保存)线程继续存在)。因此,类之间的关联并不一定意味着我可以在那些对象上调用方法,而是必须在目标对象的线程上进行该调用。 我在该主题上挖掘过的大多数文献 ,例如Hassan Gomaa的UML设计并发,分布式和实时应用程序,都有一些不错的主意,例如将线程边界绘制到对象图中,但总体而言似乎有点学术性和冗长性真的很有用。 我不想将这些图用作问题域的高级视图,而只是作为我的类/对象,它们之间的相互作用以及我上面提到的线程边界所造成的限制的详细描述。 因此,我想知道: 您发现哪种类型的图对理解多线程应用程序最有帮助? 对经典UML的扩展是否考虑了多线程应用程序的特殊性,例如通过说明 有些对象可能生活在某个线程中,而另一些对象则没有线程亲和性; 对象的某些字段可以从任何线程读取,但只能从一个线程写入。 有些方法是同步的并返回结果,而另一些方法则是异步的,这些方法使请求排队,并例如通过不同线程上的回调返回结果。

7
一个人在功能语言上应该有不同的评论吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我才刚刚开始函数式编程,我想知道注释我的代码的正确方法。 注释一个简短的函数似乎有点多余,因为名称和签名已经可以告诉您所有您需要知道的内容。注释较大的函数似乎也有些多余,因为它们通常由较小的自描述函数组成。 注释功能程序的正确方法是什么?我应该使用与迭代编程相同的方法吗?

13
学习实验语言值得吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我是一个年轻的程序员,希望有一天能在程序员领域工作。我知道Java,VB.NET和C#。我想学习一种新的语言(作为程序员,我知道扩展我所知道的东西很有价值-学习使您产生不同看法的语言)。我在网上看了看常见的语言。每个人都了解C和C ++(即使是那些对计算机了解甚少的麻瓜),所以我想,也许我应该追求C。 C和C ++很好,但是它们已经很老了。诸如Haskell和Forth之类的东西(等等,等等)已经过时并且已经失去了流行性。由于相同的原因,我不敢学习C(甚至C ++)。Java也相当老,并且运行缓慢,因为Java由JVM运行并且未编译为本机代码。 我从事Windows开发已经有一段时间了。我最近开始使用Java-只是因为它更通用并且可以扩展到其他地方。问题在于,由于以下原因,它看起来不是一种非常实用的语言: 它最常用于Web应用程序和手机应用程序(特别是Android) 就使用它制作的实际产品而言,唯一想到的是Netbeans,Eclipse(用于制作的hurrah和具有IDE所用语言的IDE-就像制作用于编写HTML / CSS / Javascript的网页一样)和Minecraft碰巧是有趣的,但就计算机规格而言却有些迟钝和双极。支持。 除此之外,它还用于服务器,但是非常麻烦-我不仅想制造/配置服务器。 .NET语言很好,但是: 如果我在认真的谈话中甚至提到VB.NET或C#,人们都会大笑。 除非您使用MONO(它仍在开发中并且需要进行一些改进),否则它不是跨平台的。 缺少底层的东西,因为像Java与JVM一样,它是由CLR运行/管理的。 我首先想到的是学习C之类的东西,然后用它跳入C ++(只是为了确保我有很强的理解力/基础),但是就像我之前说的那样,它在每分钟变得越来越老。 我所期待的 Fantom看起来不错。这就像是我最喜欢的两种语言之间的中间人,甚至可以让我在两种语言之间互换地发布,但是,与我想要的不同,它可以编译为CLR或JVM(取决于您将其发布到何处),而不是完全编译。 D看起来也不错。这似乎是一个非常有用的语言和MULTIPLE来源似乎确实优于C / C ++。我会马上接受,但是我仍然不确定它的成功,因为在这一点上它显然还不是很主流。 还有其他一些看起来很不错的应用程序,它们专注于其他事情,例如带有Web开发的Opa和GOOGLE的Go。 我的问题 值得学习这些“实验”语言吗?我读过其他一些问题,这些问题说,如果您不不断学习语言并向所有语言开放,那么您就没有正确的编程思想。我理解这一点,但我可能仍未完全理解,但实际上,如果一种语言不会成为主流,我应该花时间学习其他东西吗?我不想学习旧的(或即将成为旧的)编程语言。我知道很多人认为这很重要,*但是你们中的任何人是否会真正考虑(假设您还不知道)FORTRAN?我的目标是保持最新状态,以确保我将来能成功。 免责声明 是的,我是一个年轻的程序员,所以我可能在问题中做了很多幼稚的陈述。 随时对我进行纠正! 我必须在某个地方开始学习,因此我确信我的很多知识都是粗略的,足以导致错误的陈述或思想缺陷。请在评论中留下您的任何想法。 结果... 我对这些惊人的反应感到非常惊讶,其中的大多数都很好地指出了我的误解和错误判断。我从中学到了很多东西,很高兴能够利用我学到的一切!接下来,我可能会开始学习Haskell(不是那么古老的语言,尽管已有20多年的历史了-hahaha),然后开始研究我周围的其他选择。 谢谢

4
完美的淡入淡出
我发现很难用语言来描述这个问题,这就是为什么我制作了一个视频(45秒)来说明它的原因。这是问题的预览,请在Vimeo上查看它:http : //vimeo.com/epologee/perfect-crossfade 在过去十年中,在许多领域中,我一直都在反复讨论如何创建完美的淡入淡出效果或溶解两个图像或形状的问题。首先是视频编辑,然后是Flash动画,现在是iOS编程。当您开始对其进行谷歌搜索时,可以找到许多解决方法,但是我这次真的想解决这个问题,而不会受到黑客的攻击。 摘要: 如果要使生成的透明度与任一原始位图相匹配,则在对两个半透明,同色位图进行交叉渐变时应用的技术或曲线的名称是什么? 是否存在(数学)函数来计算淡入淡出期间所需的部分透明度/ alpha值? 是否有编程具有这些功能为预设语言,类似ease in,ease out或ease in out在ActionScript或可可中发现的功能呢? 更新:除了视频,我还制作了一个示例项目(需要Xcode和iOS SDK)并将其发布在github上。它显示了与视频相同的动画,但是这次使用了正方形:https : //github.com/epologee/StackOverflow-Example-Code

5
如何在“不要说话”和“命令查询分隔”之间进行选择?
告诉不要问的原则说: 你应该努力告诉对象你想要他们做什么;不要问他们关于他们的状态的问题,做出决定,然后告诉他们该怎么做。 问题在于,作为调用者,您不应基于所调用对象的状态来做出决定,而导致您随后更改对象的状态。您正在实现的逻辑可能是被调用对象的责任,而不是您的责任。对于您来说,在对象之外进行决策会违反其封装。 一个简单的“告诉,不要问”的例子是 Widget w = ...; if (w.getParent() != null) { Panel parent = w.getParent(); parent.remove(w); } 告诉版本是... Widget w = ...; w.removeFromParent(); 但是,如果我需要知道removeFromParent方法的结果,该怎么办?我的第一个反应就是更改removeFromParent以返回一个布尔值,该布尔值指示是否删除了父对象。 但是后来我遇到了“ 命令查询分离模式”,它说“不要这样做”。 它指出,每个方法都应该是执行操作的命令,或者是将数据返回给调用方的查询,但不能同时是两者。换句话说,提出问题不应改变答案。更正式地讲,方法仅在引用透明且因此没有副作用的情况下才应返回值。 这两个真的是彼此矛盾的,如何在两者之间进行选择?我可以和Pragmatic Programmer或Bertrand Meyer一起使用吗?
25 java  coding 

8
有意义的简洁方法命名准则
最近,我开始发布一个开源项目,虽然我是该库的唯一用户,但我并不关心名称,但知道我想为每种方法分配聪明的名称,以使其更易于学习,但我还需要使用简洁的名称,因此也易于编写。 我在考虑一些有关命名的准则,我知道许多准则只关心字母大小写或一些简单的注释。在这里,我正在寻找有意义但又简洁的命名准则。 例如,这可能是我所遵循的准则的一部分: 将现有项目添加到目标时,请使用添加;要创建新项目并将其添加到目标时,请使用创建。 要从目标中删除现有项目时,请使用“删除”;要永久删除项目时,请使用“删除”。 将AddXXX方法与RemoveXXX方法配对,并将CreateXXX方法与DeleteXXX方法配对,但不要混合使用。 如以上示例所示,我想找到一些在线资料,以帮助我找到符合英语语法和单词含义的命名方法和其他项目。 对于以英语为母语的人来说,以上指导可能是直观的,但对我来说,英语是我的第二语言,因此需要告知我这种情况。
25 naming 

6
编程学生更容易使用哪种DVCS(git或hg)?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 5年前关闭。 有一点背景:我正在上大学三年级。学生分为4人一组。几乎每个人都将在Windows下工作(除了像我这样在Linux上的一些人)。作为学校课程的一部分,我们将很快开始为一个真正的客户开发项目,但是我和另一个团队想知道哪种方法最适合彼此共享我们的代码。 我从事兼职工作已有3年,并且在不同项目上同时使用git和mercurial有丰富的经验,因此使用一个或另一个系统没有任何问题。但是,我的队友以前从未使用过版本控制系统。还有另一个团队尝试使用SVN但遇到了重大问题,并且希望尝试其他尝试,因此他们征询了我的意见。 我的想法:听说Mercurial + TortoiseHg在Windows下具有更好的集成,但是我想知道即使我解释了匿名头的概念是否也可能使他们感到困惑。另一方面,我发现git分支对于初学者来说更容易理解(每个程序员的工作分离清晰),但在Windows下效果不佳。

8
使用预先存在的不良做法还是与旧代码不太适合的良好做法更好?
我之所以这样想,是因为我试图为现有的3rd party软件编写扩展,而他们的数据库却被严重地非规范化。我需要使用他们现有的表并添加一堆新字段。 我可以选择以其设计风格(包含几乎所有属性都放在一个大表中)创建新表,或者一起创建一组新表,并使用诸如触发器之类的其他功能在新表和新表之间同步数据。旧桌子。 我最终选择了使用现有不良设计风格的第一种选择,但是我面临的问题是:采用预先存在的不良做法还是实施与现有代码不能很好地配合的良好做法更好?在某些情况下,我应该选择一个? 注意:到目前为止,许多答案都与缓慢重构错误代码有关,但是我无法做到这一点。该代码不是我们的,供应商经常对其进行更新。我只能在上面建立。

14
我是合同开发者,我想快要搞砸了[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 8年前关闭。 此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 我在合同开发方面。您可以说我是合同开发商?考虑到我只有一个客户,我会说那不完全是事实-更像是我做一份零工,需要一些额外的现金。它最初是“重建我们的网站,我们将向您支付1万美元”类型的项目。一旦完成(有点超出计划,但肯定不会超出预算),该公司就聘用了我作为“长期支持”承包商。该合同将从今年3月开始,到今年12月31日为止,为期10个月。在每个月30号要按固定金额付款。 我一直在各方面履行合同的最后期限-进行服务器维护,应用程序和数据库更改,进行紧急更改以及几乎超出范围。目前,我正在开发iPhone移动应用程序(基于PhoneGap),该应用程序即将完成(提交后大约3-4周)。 虽然还不是全部都是桃花。每当我的薪水到期时,每个月似乎总是有各种各样的问题。这些问题在最初的项目期间并没有发生,仅在支持合同期间发生。实际合同规定,我的支票应在当月30日寄出。我大约一次收到了我的准时支票(时间大约是30日内的2-3天)。我已经在下个月的15号收到了薪水-迟了两个星期。我忍受了,因为我需要薪水。曾经有过承诺和承诺,“我们下次会准时发送!我保证”-只是在下个月底才收到。当我问到付款时,他们给我的感觉是:“为什么只担心钱?” -不幸的是我没有 不用担心金钱。最后一根稻草是我8月份的付款,应该已经在8月30日寄出了。我于9月12日收到。延误的原因?“ USPS正在延迟它!我们是在一号发出的!” 是我得到的原因。当我终于收到邮件中的支票时,信封上的邮资已标记为9月10日-通过邮递机运行的日期。在这一点上,我已经完全撒谎了。信封上的邮资已标记为9月10日-通过邮递机运行的日期。在这一点上,我已经完全撒谎了。信封上的邮资已标记为9月10日-通过邮递机运行的日期。在这一点上,我已经完全撒谎了。 我继续工作,因为再次-我需要薪水。我策划了将应用程序移至新服务器的过程,进行了一系列新更改并继续在iPhone应用程序上进行工作。总而言之,我可能已经超过了每小时的分配额(我每个月有40个小时的报酬,我可能至少投入了50个小时)。1月6日星期六,我给公司的主要联系人(顺便说一下,这是3个公司-这不是什么大公司)打了个电话,向他介绍了我过去两周的工作状况。自9月中旬以来,我再也没有收到他的来信。他的回答是“哦……好吧,这很好,嗯。好工作。好吧,我们一直在公司内部谈论事情,而且我们当然还有一些决定……”-不是一字不漏但您明白了(我希望吗?)。 废话,这份合同要提早结束-圣诞节就到了!很好,没关系,没问题。我会在最近几个月的工作中获得报酬,因此定为一天。不幸的是,我上个月还没有得到检查,现在我感到沮丧。“哦..我们在转帐时遇到问题,我们会尝试明天将其邮寄出去”和“我和财务人员一起离开了虚拟机,但我无法得到他的支持”。所以我感觉到自己9月份所做的所有工作都没有得到报酬。这显然是违反合同的,我很生气。 我不合理地思考,考虑过更改他们的所有密码,并把他们的东西当作人质。在我仔细考虑之前(顺便说一句,我不会这样做,意识到这可能会给我带来麻烦),我先尝试为各个帐户尝试一些密码。 Google Apps?哦,我不再是这里的管理员。去吧爸爸?糟糕,密码无效。Disqus?不,这里的密码也无效。Google Adsense / Analytics?无效的密码。专用服务器客户经理?无效的密码。 现在,我有了服​​务器的root密码-上周我刚刚搭建了盒子,还没有机会向这个家伙发送root密码。并不着急,我管理服务器,他们从不碰它。现在突然更改了除该密码以外的所有密码;文字在墙上-我出去了。这是难题。 我有root密码,但没有。如果我给他们这个密码,我拥有的所有杠杆都将消失,无论是出门还是出手。在我为什么不给我报酬的争论中,那个家伙给我发了一封电子邮件,说“哦,对了,服务器的根用户名和密码是什么?”。考虑到他一无所知,我给了他一个“管理员”帐户,该帐户实际上几乎没有任何权限。我仍然拥有对该服务器的独占访问权,但我不知道该去哪里。 我可以将他们的数据作为人质,但是我几乎肯定这是错误的做法。不管我是否已经付款,我都认为这是勒索。 我可以“破坏”服务器上的某些内容,并给他们整体“很好,如果您付钱给我,我可以修复它!” 斯皮尔。从“好吧,他没有把他们的人质扣为人质”的角度来看,这是行得通的,但是又是什么阻止他们雇用其他人来解决当前问题呢?据我所知,这些侄子是“ l33t hax0r”,可以免费找到它。 我会尽量让步,提供文件证明,然后把他带到小额钱债法庭。这是违反合同,我没有得到报酬。我有一个案子吧? ???? 有人在这方面有经验吗?我能做什么?我有什么选择?我破产了,我负担不起律师,而且我承受不了这份薪水。我妻子不工作(我工作两个工作,所以她不必工作-我们只有1岁),并且已经在寻找一份兼职工作来支付账单。长期来看,我们会好的,但是这使我不敢相信! 帮帮我,我快被搞砸了。
25 legal 

7
我们应该使用python 2.6还是2.7或3.x?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 6年前关闭。 我正在使用的python版本是2.6,并且有2.7和3.x。通常我将python用于一些琐碎的程序/片段。我意识到2.x和3.x之间有一些主要区别。我真的很想知道,如果我要使用python创建更大的项目,应该使用哪个版本的python? 我应该升级到2.7,还是升级到3.x或继续使用2.6? 该决定应基于以下条款: 互联网上作为社区的用户数。更多的用户意味着更多的开源软件包和他们的帮助。 功能性。 官方开发团队的支持。 与现有模块/软件包的兼容性。 谢谢!
25 python 

4
用伪代码:=是什么意思?
标题为“ 算法实现 ”的部分具有以下代码: // Return RC low-pass filter output samples, given input samples, // time interval dt, and time constant RC function lowpass(real[0..n] x, real dt, real RC) var real[0..n] y var real α := dt / (RC + dt) y[0] := x[0] for i from 1 to n y[i] …
25 algorithms 

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.