Tag: oop

在PHP5类中,何时调用私有构造函数?

比方说,我正在写一个PHP(> = 5.0)类,这是一个单身人士。 我读过的所有文档都说,使类构造器是私人的,所以类不能直接实例化。 所以如果我有这样的事情: class SillyDB { private function __construct() { } public static function getConnection() { } } 有没有什么情况下__construct()被调用,而不是如果我正在做一个 new SillyDB() 在课堂内部打电话? 为什么我允许从内部实例化SillyDB呢?

何时使用委托而不是inheritance?

有人可以解释什么时候我想要使用代表团而不是inheritance?

你如何定义一个单一的责任?

我知道“有单一理由的class级”。 那么究竟是什么呢? 有没有一些气味/迹象可以说明class级没有一个单一的责任? 或者真正的答案可以隐藏在YAGNI中,只有在class级第一次改变时才重构为单一责任?

为什么我应该重载方法?

我在我的重载方法书中发现了两个例子,但是它并没有清楚地解释为什么它是有用的: package keepo; public class Main{ public static void main(String [] args) { int newScore = calculateScore("Tim", 500); System.out.println("New Score is" + newScore); calculateScore(75); } public static int calculateScore(String playerName, int score){ System.out.println("Player" + playerName +"Has score" + score); return score * 1000; } public static int calculateScore(int score){ System.out.println("Unnamed player scored" + score + […]

什么时候应该使用接口?

我知道一个接口没有一个方法定义的主体。 但是什么时候我应该使用接口? 如果我为某人提供一组没有身体的接口,为什么他们觉得需要编写函数体? 他们会用抽象的方法写出自己的抽象类更好吗? 编辑: 如果你是一个团队的一员,我想接口的使用更多。 假设团队A写了一些代码,他们想看看是否调用方法。 与名称getRecords(),是否完成。 这将帮助团队B编写提供给他们的界面主体,团队B必须保持方法名称相似,以便团队A的代码运行。 只是一个想法。 我可能错了。 我认为接口对单个开发人员没有用处。 编辑: 感谢所有的答案。 用你们所有人的回答,我认为接口有更多的用途,当你正在做类似的API?

Douglas Crockford在JavaScript中使用Class Free OOP

道格拉斯·克罗克福德(Douglas Crockford)在ES6的“更好的部分”(The Better Parts)上做了非常好的演讲 除此之外,他鼓励摆脱原型inheritance,转而采用免class级的面向对象方式 。 在这里,他说他停止使用new , Object.create ,而this ,但没有真正解释一个替代scheme。 任何人都可以填写我可能看起来如何?

在OO中编码标准ML模块

ML模块系统是数据抽象的编程语言支持的高水准标志。 然而,从表面上看,它似乎很容易用支持抽象types成员的面向对象语言进行编码。 例如,我们可以在Scala中对SML模块系统的元素进行编码,如下所示: SML签名:没有具体成员的斯卡拉特质 具有给定特征的SML结构:扩展给定特征的Scala对象 通过给定签名参数化的SML函子:Scala类将扩展给定特征的对象作为构造函数参数 有什么重要的function,这样的编码会错过? 任何可以用SML模块表示的编码无法expression的东西? SML使这种编码无法做到的任何保证?

你如何重构一个大杂乱的代码库?

我有一大堆的代码。 无可否认,我自己写的 – 一年前。 它没有很好的评论,但它也不是很复杂,所以我可以理解它 – 只是不足以知道从哪里开始重构它。 我违反了过去一年里我读过的每一条规则。 有多种职责,有间接访问(我忘记了这个词 – 就像foo.bar.doSomething() ),就像我说的那样,它没有很好的评论。 最重要的是,这是一个游戏的开始,所以graphics与数据,或者我尝试去耦graphics和数据的地方,我公开的数据,以便graphics能够访问数据它需要… 这是一个巨大的混乱! 我从哪说起呢? 你将如何开始这样的事情? 我目前的做法是采取variables并将其切换为私有,然后重构那些破碎的碎片,但这似乎还不够。 请build议其他策略,通过这混乱趟过,把它变成干净的东西,让我可以继续我离开的地方! 两天后更新:我一直在绘制出类似UML的图表,并一路捕捉到了一些“低悬的果实”。 我甚至发现了一些代码是新function的开始,但是当我试图减less一切,我已经能够删除这些位,并使项目更清洁。 在安装我的testing用例之前,我可能会尽可能地重构(当然,只有100%肯定不会影响function的东西),所以我不必重构testing用例,因为我改变function。 (你认为我是对的还是对的,在你看来,我会更容易把它搞砸,并且先写testing?) 请投票给最好的答案,以便我可以公平地标记! 随意添加你自己的答案,以及还有空间给你! 我会再给它一天左右,然后可能标记最高票数的答案被接受。 感谢到目前为止所有人的回应! 2010年6月25日:我发现了一篇博客文章 ,直接回答这个问题,这个人似乎对编程有很好的把握(或者,如果你阅读他的文章,也许不会):) 为此,当我需要重构代码时,我做了四件事情: 确定代码的目的是什么 绘制所涉及的类的UML和动作图 选购正确的devise模式 确定当前类和方法的更清晰的名称

如何在不扩展类的情况下实现dynamic多态

我在采访中被问及如何在不扩展类的情况下实现dynamic多态性。 如何才能做到这一点?

每一个物体都应该有一个界面,所有的物体都是松散耦合的?

从我读过的最好的做法是有基于接口的类和松散耦合的对象,以帮助代码重用和unit testing。 这是正确的,这是一个应该始终遵循的规则吗? 我问的原因是我最近在一个有100多个不同对象的系统上工作。 几个共享的通用接口,但大多数不知道是否应该有一个接口镜像这些类的每个属性和function? 我正在使用C#和dot net 2.0,但我相信这个问题将适合多种语言。