Tag: oop

我怎样才能以编程方式获得Django模型字段的max_length?

说我有一个Django类是这样的: class Person(models.Model): name = models.CharField(max_length=50) # … 我如何编程地获得name字段的max_length值?

我应该推荐密封类默认?

在一个大项目中,我正在考虑推荐其他程序员,如果他们没有考虑如何将他们的类分类,他们将永远封闭他们的类。 通常经验不足的程序员从不考虑这一点。 我觉得奇怪的是,在Java和C#分类是非密封/非最终公关默认。 我认为使类密封极大地提高了代码的可读性。 请注意,这是在内部代码,我们可以随时改变,如果我们需要inheritance的罕见情况发生。 你有什么经验? 我对这个想法颇有些抵触。 懒惰的人是不是可以打扰“密封”?

艾伦霍勒布写道:“你不应该使用获取/设置function”,他是正确的?

艾伦霍勒布写了以下内容, 没有一些耦合,你不能有一个程序。 尽pipe如此,通过严格遵循OO(面向对象的)规则(最重要的是对象的实现应该完全从使用它的对象中隐藏),可以大大减less耦合。 例如,对象的实例variables(不是常量的成员字段)应始终保密。 期。 没有例外。 永远。 我是认真的。 (您可以偶尔使用受保护的方法,但受保护的实例variables是可憎的。) 这听起来合理,但他接着说, 你不应该使用get / set函数出于同样的原因 – 他们只是过于复杂的方式来公开一个字段(尽pipe访问函数返回成熟的对象而不是基本types的值是合理的,在返回的对象类是devise中的关键抽象)。 坦率地说,对我来说听起来很疯狂。 我理解隐藏信息的原理,但是如果没有访问器和修改器,就根本无法使用Java Bean。 我不知道如何在模型中没有访问器的情况下遵循MVCdevise,因为模型不能负责渲染视图。 但是,我是一个年轻的程序员,每天都会学习更多关于面向对象的devise。 也许有更多经验的人可以考虑这个问题。 艾伦霍勒布的文章供参考 为什么延伸是邪恶的 为什么Getter和Setter方法是邪恶的 相关问题: 爪哇:吸气剂和固化剂是邪恶的吗? 是不是真的没有使用setter和getters? 获得和设置functionstream行与C ++程序员? 你应该使用类中的访问器属性,还是仅仅从类之外?

为什么派生类不能在这段代码中调用受保护的成员函数?

#include <iostream> class Base { protected: void somethingProtected() { std::cout << "lala" << std::endl; } }; class Derived : public Base { public: void somethingDerived() { Base b; b.somethingProtected(); // This does not compile somethingProtected(); // But this is fine } }; int main() { Derived d; d.somethingDerived(); return 0; } 我想也许只有这个被保护的成员可以被使用,并且被保护的其他实例的成员永远是不可达的。 但: class Derived […]

魔术__get getter在PHP中的静态属性

public static function __get($value) 不起作用,即使这样做了,恰巧我已经在同一个类中需要魔术__get getter来获取实例属性。 这可能是一个是或否的问题,所以,这是可能的?

什么是混合(作为一个概念)

我试图让我的头在Mixin的概念,但我似乎无法理解它是什么。 我看到的方式是通过inheritance来扩展类的function。 我读过,人们称他们为“抽象的小类”。 谁能解释为什么? 如果你能根据下面的例子来解释你的答案,我将不胜感激(来自我的演讲幻灯片演示):

实例和对象有什么区别?

实例和对象有什么区别? 有没有区别?

为什么我们不允许在接口中指定构造函数?

可能重复: 定义构造函数签名的接口? 我知道你不能在.Net的接口中指定一个构造函数,但为什么我们不能呢? 对于我目前的项目来说,能够指定必须使用构造函数传入一个“引擎”是非常有用的,但是因为我不能,所以我必须对该类有一个XML注释。

什么是面向对象编程中的抽象数据types?

什么是面向对象编程中的抽象数据types? 我已经通过维基这个话题,但我还不清楚。 有人能澄清吗?

C#接口inheritance到Abstract类

假设我有一个如下定义的接口: public interface IFunctionality { void Method(); } 我为抽象类实现了这个接口,如下所示: public abstract class AbstractFunctionality: IFunctionality { public void Method() { Console.WriteLine("Abstract stuff" + "\n"); } } 再次我有一个具体的类inheritance抽象类如下: public class ConcreteFunctionality: AbstractFunctionality { public void Method() { Console.WriteLine("Concrete stuff" + "\n"); } } 现在我有下面的代码, ConcreteFunctionality mostDerived = new ConcreteFunctionality(); AbstractFunctionality baseInst = mostDerived; IFunctionality interfaceInst = mostDerived; […]