Questions tagged «oop»

面向对象的编程是一种使用“对象”的编程范式:由数据字段和方法及其相互作用组成的数据结构。

7
什么时候应该使用stdClass,什么时候应该在php oo代码中使用数组?
在工作中进行大量重构的中间,我希望引入stdClass *****作为从函数返回数据的一种方式,并且我试图找到非主观论据来支持我的决定。 在任何情况下,何时最好使用一种而不是另一种? 使用stdClass而不是数组有什么好处? 有人会说,函数必须尽可能少且特定,才能返回一个值。我决定使用stdClass是暂时的,因为从长远来看,我希望为每个进程找到正确的Value Objects。
68 php  oop  stdclass 

2
适用于高级PHP开发人员的MVC [关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 6年前关闭。 改善这个问题 我需要经验丰富的程序员的帮助。我想提高我的MVC技能。但是我在Google for MVC上找不到很好的教程。Google始终会为“初学者提供MVC”。 我了解MVC是什么,我可以做到,但是我没有足够的经验来做OOP实用的东西。 如果有人知道MVC的优秀面向对象教程,请引导我到正确的地方-我正在寻找好的链接,书籍等。


6
如果更少的编程(基本上没有条件)
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 2年前关闭。 改善这个问题 我有一个同事告诉我,他曾经在一家公司工作过,该公司的政策是永远在代码中没有条件(“ if”和“ switch”语句),并且他们让代码中的所有决定都使用多态性和(我猜)其他一些面向对象原则。 我有点理解这背后的原因,即拥有更干且更易于更新的代码,但我正在寻找对此概念的更深入的说明。也许这是更通用的设计方法的一部分。 如果有人对此有任何资源,或者愿意解释甚至有更多与此相关的术语,我可以使用它来寻找更多的答案,我将不得不这样做。 我在SO上发现了一个与之相关的问题,但是我不熟悉C ++,所以我对那里的答案不太了解。 (我不是OO大师,但我可以管理) 我最精通PHP,在Python之后,我更喜欢使用这些语言的信息。 更新:我将向我的同事询问有关他确切含义的更多信息。 2015年更新:经过多年的编程经验,我现在看到该策略的目的可能是防止程序员通过在某些地方仅添加条件(如果语句)来随意添加功能。扩展软件的更好方法是使用“打开/关闭原则”,其中通过使用继承和多态性来扩展软件。我强烈怀疑该政策是否在所有条件上都过于严格,因为如果没有这些条件,很难完全执行。

3
Laravel:差异App :: bind和App :: singleton
对于laravel在IOC容器和外墙方面提供的所有美好功能,我感到有些困惑。由于我不是一个经验丰富的程序员,因此学习变得不知所措。 我想知道这两个示例之间有什么区别: “ Foo”的外观,并通过 App::bind() “ Foo”的外观,并通过 App::singleton() 以我的最佳理解,Foo::method()将$app->make['foo']->method()在第一个示例中重写Foo该类的多个实例,在第二个示例中,由于它是通过绑定的App::singleton(),因此Foo每次调用该对象上的Method时,都将返回的同一实例。 很抱歉,这个问题的答案很明显,但是我找不到关于此事的任何确认,也没有明确的解释。

4
为什么派生类不能在此代码中调用受保护的成员函数?
#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; …
67 c++  oop 

10
面向对象的编程-如何避免在因变量而略有不同的过程中重复
在我目前的工作中,经常发生的事情是有一个通用的过程需要发生,但是该过程的奇数部分需要根据某个变量的值而稍有不同,所以我不是非常确定处理此问题的最优雅方法是什么。 我将使用我们通常使用的示例,该示例的处理方式会根据所处理的国家/地区而略有不同。 所以我有一堂课,我们称之为Processor: public class Processor { public string Process(string country, string text) { text.Capitalise(); text.RemovePunctuation(); text.Replace("é", "e"); var split = text.Split(","); string.Join("|", split); } } 除了某些国家只需要采​​取其中一些行动。例如,只有6个国家需要资本化步骤。要分割的字符可能会因国家/地区而异。'e'仅根据国家/地区,才需要替换重音符号。 显然,您可以通过执行以下操作来解决此问题: public string Process(string country, string text) { if (country == "USA" || country == "GBR") { text.Capitalise(); } if (country == "DEU") …
64 c#  oop 

3
如何在Raku中实施
在Perl中,可以使用Moo实现子around,这些子将包装类中的其他方法。 around INSERT => sub { my $orig = shift; my $self = shift; print "Before the original sub\n"; my $rv = $orig->($self, @_); print "After the original sub\n"; }; 如何在Raku中实现此行为,最好使用a role?
13 oop  raku 

1
Erlang中的进程/消息和Smalltalk中的对象/消息有什么区别?
我试图了解Smalltalk中的对象/消息与Erlang中的进程/消息之间的区别。我阅读了有关该主题的以下文章。 据我了解,在Smalltalk中,所有事物都是一个对象,并且所有事物都具有相同的“对象/消息”抽象-甚至数字1都是只能通过消息传递才能到达的对象。是1在Erlang / Elixir中进行的过程吗?Erlang中的所有内容是否都是对消息/程序范例的响应?您可以向Erlang中的号码发送消息吗? 非常感谢。

4
与标准卡组相比,为更复杂的扑克牌类型创建类的好方法吗?
我对面向对象的编程非常陌生,并且正尝试通过制作简单的纸牌游戏(似乎很传统!)来开始使用python学习。我已经完成了下面的示例,该示例运行良好,并且教会了我有关制作PlayingCard()该类的多个实例以创建该类的实例的信息Deck(): class PlayingCard(object): def __init__(self, suit, val): self.suit = suit self.value = val def print_card(self): print("{} of {}".format(self.value, self.suit)) class Deck(object): def __init__(self): self.playingcards = [] self.build() def build(self): for s in ["Spades", "Clubs", "Diamonds", "Hearts"]: for v in range(1,14): self.playingcards.append(PlayingCard(s,v)) deck = Deck() 我现在想用更复杂的卡做一些事情,而不仅仅是一个标准的52副牌(具有很好的递增值)。我想到的套牌是“大富翁”纸牌游戏: 卡共有3种基本类型-ACTION卡,PROPERTY卡和MONEY卡。操作卡执行不同的操作,属性卡属于不同的颜色集,而货币卡可以具有不同的值。此外,属性卡可以是“通配符”,并且可以用作两个集合之一的一部分。最后,每张卡还具有同等的货币价值(在每张卡的左上角指示)。在租赁行动卡中,该卡只能应用于卡上指示的颜色属性。 我的问题只是一般如何处理这种情况,在基于类的python程序中包括这些不同的卡的最佳方法是什么?我应该保持我的单一PlayingCard()班级,并且只有很多输入,例如PlayingCard(type="PROPERTY", value="3M")。还是会更好地创建单独的类,如ActionPlayingCard(),PropertyPlayingCard()等?或者,还有更好的方法?就像我说的那样,我正在这里开始学习,以及如何根据更高级别的设计来组织这类情况。 非常感谢。

1
与类访问修饰符相比,限制较少的成员访问修饰符有什么用?
假设我有一个包含一些成员的类,并且这些成员的限制访问修饰符比类本身少。 一个具体的例子可能是: package apples; class A { // package private public int foo() { // public (=> less restrictive than *package private*) return 42; } } 据我了解,与成员访问修饰符相比,限制更严格的类访问修饰符将覆盖限制性较小的成员访问修饰符。因此,限制较少的成员访问修饰符应该完全无效。 我的理解正确吗? 如果没有,后果是什么? 限制成员访问修饰符较少的正当理由是什么? 最后,有什么最佳实践可遵循? 我也做了一些试验,因为我认为一旦开始传递函数引用,它可能会产生后果,但是即使那样,访问修饰符似乎也没有关系。 我构造的情况如下: apples.B提供一个bla()返回对的引用的公共方法apples.A.foo。 然后pizzas.C调用apples.B.bla获取A.foo对它的引用并对其进行调用。 因此对A.foo()不能直接看到C,而只能通过间接访问B.bla() 我已经对其进行了测试,并且无论是否将foo() 包的访问修饰符设置为私有都不会有任何区别。 package apples; import java.util.function.IntSupplier; public class B { public IntSupplier getReferenceToAFoo() { …

2
在Java中,何时应在接口中使用私有实例方法?
从Java 9开始,接口中的方法可以是私有的。私有方法可以是静态方法,也可以是实例方法。由于私有方法只能在接口本身的方法中使用,因此它们的使用仅限于接口其他方法的辅助方法。 Cay S. Horstmann,核心Java第一册-基础 我知道我们可以将通用功能放在私有方法中,而不是公开使用。但是我们可以在这里有两种私有方法: private private static 使用private static方法是可以理解的,但是什么时候应该使用private方法呢?我们不在这里处理实例,因为这是一个接口,那么为什么private允许创建方法?我们不是只需要private static方法吗?
9 java  oop 
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.