Questions tagged «class»

声明对象类型的模板。

4
如何反对业务对象类设计的这种“完全公开”的思维方式
我们做了很多的单元测试,我们的业务对象的重构,而我似乎有很对类设计比其他同龄人不同的意见。 我不喜欢的示例类: public class Foo { private string field1; private string field2; private string field3; private string field4; private string field5; public Foo() { } public Foo(string in1, string in2) { field1 = in1; field2 = in2; } public Foo(string in1, string in2, string in3, string in4) { field1 = …

5
OOP语言和类型的类
在编程语言理论中,类型是一组值。例如,类型“ int”是所有整数值的集合。 在OOP语言中,类是类型,是吗? 当一个类定义了一个以上的成员时,例如 class myclass{ int a; double b; } 当我们谈论课程时,我们的意思是 “ (a,b)哪里a是一个整数,并且b是一个双精度数”,或者 “ { (x,y)| x是整数,y是双精度}”吗? 实例myclass是什么意思? “ (a,b)哪里a是一个整数,并且b是一个双精度数”,或者 一个对象,该对象占用一个内存空间,并且可以(不一定是空)可以存储对象(x,y),xint 在哪里,ydouble在哪里?

6
大量的时间,我想不出拥有对象而不是静态类的理由。对象有比我想象的更多的好处吗?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我了解对象的概念,作为Java程序员,我觉得OO范式在实践中自然而然地出现在我身上。 但是最近我发现自己在想: 等等,使用对象比使用静态类(具有适当的封装和OO做法)实际具有哪些实际好处? 我可以想到使用对象的两个好处(既重要又强大): 多态性:允许您在运行时动态灵活地交换功能。还可以轻松为系统添加新功能“零件”和替代品。例如,如果有一个Car设计用于处理Engine对象的类,并且您想向Car可以使用的系统中添加一个新的Engine,则可以创建一个新的 Engine子类并将该类的Car对象简单地传递给该 对象,而不必改变一切Car。您可以在运行时决定这样做。 能够“传递功能”:您可以动态地在系统中传递对象。 但是与静态类相比,对象还有更多优势吗? 通常,当我向系统添加新的“部件”时,我会通过创建新类并从中实例化对象来实现。 但是最近,当我停下来想一想时,我意识到在很多我通常使用对象的地方,静态类将与对象相同。 例如,我正在为我的应用程序添加一个保存/加载文件机制。 对于一个对象,代码的调用行将如下所示: Thing thing = fileLoader.load(file); 对于静态类,它看起来像这样: Thing thing = FileLoader.load(file); 有什么不同? 通常,当普通的静态类的行为相同时,我只是想不出实例化对象的理由。但是在OO系统中,静态类很少见。所以我一定想念一些东西。 除了上面列出的两个对象以外,对象还有其他优点吗?请解释。 编辑:澄清。在交换功能或传递数据时,我确实发现对象非常有用。例如,我写了一个组成旋律的应用程序。MelodyGenerator有几个不同的子类创建旋律,并且这些类的对象是可互换的(策略模式)。 旋律也是对象,因为传递它们很有用。和弦和音阶也是如此。 但是,系统的“静态”部分又将如何传递呢?例如-一种“保存文件”机制。为什么要在对象而不是静态类中实现它?

1
更改方法签名以在PHP中实现类
有没有关于PHP缺少泛型的体面工作,这些泛型允许静态代码检查以检测类型一致性? 我有一个抽象类,我想对其进行子类化,并且还强制其中一种方法从采用一种类型的参数更改为采用作为该参数的子类的参数。 abstract class AbstractProcessor { abstract function processItem(Item $item); } class WoodProcessor extends AbstractProcessor { function processItem(WoodItem $item){} } PHP不允许这样做,因为它正在更改不允许的方法签名。使用Java样式泛型,您可以执行以下操作: abstract class AbstractProcessor<T> { abstract function processItem(T $item); } class WoodProcessor extends AbstractProcessor<WoodItem> { function processItem(WoodItem $item); } 但是很明显,PHP不支持这些功能。 谷歌针对这个问题,人们建议使用instanceof在运行时检查错误,例如 class WoodProcessor extends AbstractProcessor { function processItem(Item $item){ if …

4
跟踪类的所有对象
我是面向对象编程的新手,并且一直遇到这个问题。(我正在用Java编程)我一直不太愿意问这个问题,因为它看起来像是一个基本问题,但是我找不到关于它的任何信息,也没有关于它的问题,而且都没有我读过的教科书(在相当基本的水平上)已经涉及到这个问题: 我经常需要跟踪已创建的类的所有对象,以出于各种目的遍历它们。我目前编写程序的方式是这样的,许多对象仅从其他对象中引用,这意味着我没有数组或集合来引用它们。 我认为,由于这似乎是OOP中非常基本的必要,因此应该有一种相当制度化且简单的方法来解决此问题吗?保留一个类的所有对象的单独列表是通常的做法吗? 我想到了一个静态数组或集合,通过其构造函数,将添加创建的每个新对象。但是,这将不适用于子类,因为构造函数没有继承吗? 我意识到这个问题可能没有一个简单的答案。我只是希望有人能启发我一些关于这个问题的知识。我感觉好像我在这里缺乏核心知识。

4
返回接口或类
假设我有一个方法 public List<User> GetBatchOfUsers(IEnumerable<int> userIDs) { List<User> users = new List<User>(); // some database stuff return users; } 我已经读过,返回一个接口(IList或者IEnumerable)比返回a 更好List。我听到的一些说法是,它隐藏了数据,并使API开发人员可以灵活地在以后更改数据的内部表示形式。 我只返回an的担心IEnumerable是您失去了功能,例如随机访问和Count属性。 我知道接受a IEnumerable作为参数是有意义的,因为它为用户提供了将数据发送到我的方法的最佳灵活性,这是方法操作的最低要求。 返回类型的最佳实践是什么?
9 c#  interfaces  class 
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.