Tag: oop

静态类的静态方法与非静态类的静态方法(C#)

在接受采访时我被问到了上述问题。 你能解释一下这个区别吗? (性能 – 内存 – 使用情况 – 何时使用?) 谢谢, 二崁

调用基类的方法

在c + +我会做的 class A { public: virtual void stuff() { //something } }; class B : public A public: virtual void stuff() { //something2 A::stuff() //something } }; 我将如何在C#中执行此操作? 我试过了 public void stuff() { //something2 A.stuff(); //something } 但是这不起作用

自动加载来自不同文件夹的课程

这是我自动加载我的controllers文件夹中的所有类, # auto load controller classes function __autoload($class_name) { $filename = 'class_'.strtolower($class_name).'.php'; $file = AP_SITE.'controllers/'.$filename; if (file_exists($file) == false) { return false; } include ($file); } 但是我在models文件夹中也有类,我也想自动加载它们 – 我该怎么做? 我应该复制上面的自动加载,只是改变pathmodels/ (但不是这个重复??)? 谢谢。 编辑: 这些是我的控制器文件夹中的类文件名: class_controller_base.php class_factory.php etc 这些是我的模型文件夹中的类文件名: class_model_page.php class_model_parent.php etc 这是我通常命名我的控制器类的类(我使用下划线和lowcaps) class controller_base { … } class controller_factory { … } 这是我如何命名我的模型类类通常(我使用下划线和lowcaps), class model_page […]

面向对象的缺点

通常我不想知道面向对象缺点的具体情况,但是当我最近参加的一次采访中有一个争论的时候,我感到有些奇怪。 发布给我的问题是告诉我面向对象编程 (OOP)的一个缺点。 当时,我认为OOP是程序和function模型之后最成熟的编程水平。 所以我回答说,我根本没有看到任何消极的东西。 但是面试官说很less,如果他不介意的话,我让他列出一个。 他举了一个例子,我不好好消化。 他表示,OOP模式并不严格执行遗产规则,并引用卫星/火箭的例子,在火箭发射期间身体部位将定期瓦解以消除重量,并表示inheritance不支持这一点。 他的例子对我来说感觉很奇怪,原因就在于这个例子中inheritance的应用。 我明白,他给出的例子几乎没有任何意义,但我有这个疑问 – 我们可以在一个理想的面向对象的devise中dynamic地拔出类的层次结构(我对Java有信心,这是不可能的)吗?

你使用什么PHP应用程序devise/devise模式?

请和我一起分享您最喜爱的应用程序devise/devise模式以供在PHP中使用。 有些事情我想知道: 你的文件夹是如何devise的 如何在PHP应用程序中使用对象oritentation 你有处理CRUD,分页或其他常见任务的标准方式吗? 你如何避免使用重复的代码? 你有什么方法来图书馆/共享通用代码等? 什么方法可以让你的代码更优雅? 你不必回答所有这些,回答这些或其中一些将是有益的。 我这样问的原因是因为我厌倦了在PHP中编写重复的丑陋代码,我想为自由职业者项目制作一个小框架,这将使编程更容易,让我专注于具有挑战性的任务而不是形成validation,分页以及其他一些普通的活动,这些活动占了PHP编程工作的80% 所有意见表示赞赏

最佳做法:在class级定义中订购公共/保护/私人?

我从头开始一个新的项目,希望它是干净的/有很好的编码标准。 这些经验丰富的开发人员在什么程度上喜欢把课堂内容放在课堂上? 答:1)公共方法2)私有方法3)公共variables4)私人variables B:1)公共variables2)私人variables3)公共方法4)私人方法 C:1)公共方法2)公共方法3)私有方法4)私人variables 我通常喜欢把公共的静态variables放在最上面,但是在你的构造函数之前是否会列出一个公共的静态方法,还是应该首先列出构造函数? 之类的东西… 我知道这是芬尼,但我只是想知道:这是什么最佳做法? PS:不,我不使用抄送。 我知道。 我是一个笨蛋。

为什么我不能声明C#方法是虚拟的还是静态的?

我有一个帮助器类,只是一堆静态方法,并希望inheritance辅助类。 有些行为是独特的,取决于子类,所以我想从基类调用一个虚拟方法,但由于所有的方法都是静态的,我不能创build一个普通的虚拟方法(为了访问虚拟方法需要对象引用)。 有没有办法解决? 我想我可以使用单身.. HelperClass.Instance.HelperMethod()并没有比HelperClass.HelperMethod()更糟糕。 布朗尼指出,任何人都可以指出一些支持虚拟静态方法的语言。 编辑:好吧,我疯了。 谷歌的search结果让我觉得我不在那里。

Java中隐藏的方法是什么? 即使是JavaDoc的解释也是令人困惑的

Javadoc说: 被调用的隐藏方法的版本是超类中的版本,被调用的重写方法的版本是子类中的版本。 不要给我敲钟。 任何清楚的例子显示这个意思,将不胜感激。

多态性或条件是否促进更好的devise?

我最近在googletesting博客中偶然发现了关于编写更多可testing代码的指导原则。 直到现在,我还是同意这位作者: 满足条件的多态性:如果你看到一个switch语句,你应该考虑多态性。 如果你看到相同的条件,在你class里的许多地方重复,你应该再次考虑多态性。 多态性将把你复杂的类分成几个更小的更简单的类,它们清楚地定义哪些代码片段是相关的并且一起执行。 这有助于testing,因为更简单/更小的类更容易testing。 我根本无法把头围住。 我可以理解使用多态而不是RTTI(或DIY-RTTI,视情况而定),但是这似乎是一个如此广泛的陈述,我无法想象它实际上在生产代码中被有效使用。 在我看来,为具有switch语句的方法添加额外的testing用例会比较容易,而不是将代码分解成几十个单独的类。 另外,我的印象是,多态性可能导致各种其他微妙的错误和devise问题,所以我很想知道这里的权衡是否值得。 有人可以向我解释这个testing指南是什么意思吗?

一个面向对象的程序员怎么能够围绕数据库驱动的编程?

我已经在C#和Java中进行了一年多的编程,对于面向对象的编程有一个很好的把握,但是我的新的项目需要一个数据库驱动的模型。 我正在使用C#和Linq这似乎是一个非常强大的工具,但我在devise一个数据库围绕我的面向对象的方法麻烦。 我的两个主要问题是: 我如何处理我的数据库中的inheritance? 比方说,我正在build立一个员工名册,我有一个抽象类Event。 从事件我派生了抽象类ShiftEvent和StaffEvent。 然后我有具体的类Shift(从ShiftEvent派生)和StaffTimeOff(派生自StaffEvent)。 还有其他派生类,但为了争辩,这些就足够了。 我应该有一个ShiftEvents和StaffEvents单独的表? 也许我应该为每个具体的课程分开表格? 这两种方法似乎都会在与数据库交互时给我带来麻烦。 另一种方法可能是有一个事件表,这个表对于我的任何具体类中的每种types的数据都有可以为空的列。 所有这些方法都觉得他们可能会妨碍可扩展性。 我可能还没有考虑过第三种方法。 我的第二个问题: 如何以面向对象的方式处理集合和一对多关系? 假设我有一个Products类和一个Categories类。 类别的每个实例都将包含一个或多个产品,但产品本身不应包含类别知识。 如果我想在数据库中实现这一点,那么每个产品都需要一个映射到类别表的类别标识。 但是从OO的观点来看,这会引入更多的耦合。 产品甚至不应该知道类别的存在,更不用说包含类别ID的数据字段! 有没有更好的办法?