Questions tagged «oop»

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



5
如果Singletons不好,那么服务容器为什么好?
我们都知道单身人士是多么糟糕,因为它们隐藏了依赖以及其他原因。 但是在一个框架中,可能有许多对象仅需要实例化一次,并可以从任何地方调用(记录器,数据库等)。 为了解决这个问题,我被告知要使用所谓的“对象管理器”(或类似symfony的服务容器)在内部存储对服务(记录器等)的所有引用。 但是,为什么服务提供者不像单纯的Singleton那样糟糕? 服务提供者也隐藏了依赖关系,他们只是包装了第一个实例的创建。因此,我真的很难理解为什么我们应该使用服务提供商而不是单例。 PS。我知道不隐藏依赖项应该使用DI(如Misko所述) 加 我会补充:现在,单例并没有那么邪恶,PHPUnit的创建者在这里解释了这一点: http://sebastian-bergmann.de/archives/882-Testing-Code-That-Uses-Singletons.html DI + Singleton解决了以下问题: <?php class Client { public function doSomething(Singleton $singleton = NULL){ if ($singleton === NULL) { $singleton = Singleton::getInstance(); } // ... } } ?> 即使这不能解决所有问题,这还是很聪明的。 除了DI和Service Container 之外,还有什么好的可接受的解决方案来访问此帮助对象?

7
如何从扩展PHP类中的静态调用获取类名?
我有两节课:Action和MyAction。后者声明为: class MyAction extends Action {/* some methods here */} 我需要的只是Action类中的方法(仅在其中使用,因为会有很多继承的类,而且我不想在所有类中都实现此方法),它将从静态调用返回类名。这是我在说的: Class Action { function n(){/* something */} } 当我称它为: MyAction::n(); // it should return "MyAction" 但是父类中的每个声明只能访问父类__CLASS__变量,该变量的值为“ Action”。 有什么可行的方法吗?
91 php  oop  inheritance 

9
访问同一类中另一个对象的私有字段
class Person { private BankAccount account; Person(BankAccount account) { this.account = account; } public Person someMethod(Person person) { //Why accessing private field is possible? BankAccount a = person.account; } } 请忘记设计。我知道OOP指定私有对象是该类的私有对象。我的问题是,为什么将OOP设计为使私有字段具有类级别的访问权限而不具有对象级别的访问权限?
91 java  c++  .net  oop 

13
Python中的抽象属性[重复]
这个问题已经在这里有了答案: 如何在python抽象类中创建抽象属性 (3个答案) 6个月前关闭。 在Python中使用抽象属性实现以下Scala代码的最短/最优雅的方法是什么? abstract class Controller { val path: String } ControllerScala编译器强制使用的子类来定义“路径”。子类如下所示: class MyController extends Controller { override val path = "/home" }

6
Javascript中的多态性是什么?
我读过一些我可以在互联网上找到的关于多态的文章。但是我认为我不太了解它的含义及其重要性。大多数文章都没有说明为什么它很重要,以及如何在OOP中实现多态行为(当然是在JavaScript中)。 我无法提供任何代码示例,因为我不知道如何实现它,因此我的问题如下: 它是什么? 我们为什么需要它? 这个怎么运作? 如何在javascript中实现这种多态行为? 我有这个例子。但是很容易理解该代码的结果。它没有对多态性本身给出任何清晰的想法。 function Person(age, weight) { this.age = age; this.weight = weight; this.getInfo = function() { return "I am " + this.age + " years old " + "and weighs " + this.weight +" kilo."; } } function Employee(age, weight, salary) { this.salary = salary; …

6
如何在Python中声明实例变量的默认值?
我应该给班级成员这样的默认值吗? class Foo: num = 1 还是这样? class Foo: def __init__(self): self.num = 1 在这个问题中,我发现在两种情况下 bar = Foo() bar.num += 1 是一个定义明确的操作。 我知道第一个方法会给我一个类变量,而第二个方法则不会。但是,如果我不需要类变量,而只需要为实例变量设置默认值,那么这两种方法是否一样好?还是其中一个比另一个更“ pythonic”? 我注意到的一件事是,在Django教程中,他们使用第二种方法声明模型。我个人认为第二种方法更优雅,但是我想知道什么是“标准”方法。
90 python  class  oop 

2
什么时候实施和扩展?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 去年关闭。 改善这个问题 什么时候应该implement还是extend可以用吗? 有哪些实际示例? 它是否正确? 实现似乎是一种强制某种方法存在于类中并且这些方法函数调用的格式正确的方法。实现不是将变量或“设置”传递给类的方法吗? 预期的现实生活场景:我有一个电子商务平台,其中包含多个都遵循相同设计的支付类别。当应添加新的付款类别时interface,从一开始就很容易遵循已定义的付款方式设计,以确保所有零散的信息都在那里。 扩展类使扩展(子类)类继承其父类的所有内容,但声明为private?的方法和变量除外。 预期的现实生活场景:我有一个名为的类sessions,两个名为sessioncookies和的子类databasesessions。sessioncookies和databasesessions一起从其父会话继承许多相互配置选项,从而轻松更改配置选项以影响各种最终访问者数据存储。
90 php  oop  extend 

12
聚合与构成[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 改善这个问题 我很难理解UML中的组合和聚合之间的区别。有人可以给我一个很好的比较和对比吗?我也很想学习识别代码之间的区别和/或看一个简短的软件/代码示例。 编辑:我问的部分原因是因为我们在工作中正在进行反向文档活动。我们已经编写了代码,但是我们需要返回并为代码创建类图。我们只想正确捕获关联。
89 java  oop  uml 

7
指向成员函数的函数指针
我想将一个函数指针设置为一个类的成员,该类是指向同一类中另一个函数的指针。我这样做的原因很复杂。 在此示例中,我希望输出为“ 1” class A { public: int f(); int (*x)(); } int A::f() { return 1; } int main() { A a; a.x = a.f; printf("%d\n",a.x()) } 但这无法编译。为什么?

3
国际象棋游戏的面向对象设计
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 1年前关闭。 改善这个问题 我试图了解如何以面向对象的方式进行设计和思考,并希望从社区中获得有关此主题的一些反馈。以下是我希望以面向对象的方式设计的国际象棋游戏的示例。这是一个非常广泛的设计,在此阶段,我的重点只是确定谁负责哪些消息以及对象之间如何交互以模拟游戏。请指出是否存在设计不良的因素(耦合度高,内聚力不良等)以及如何对其进行改进。 国际象棋游戏具有以下类别 板 播放器 片 广场 国际象棋游戏 董事会由正方形组成,因此可以使董事会负责创建和管理Square对象。每块也都在一个正方形上,因此每块也都有对其所在正方形的引用。(这有意义吗?)。然后,每一块负责将自己从一个正方形移动到另一个正方形。Player类拥有对他拥有的所有作品的引用,并且还负责其创建(玩家应该创建Pieces吗?)。播放器有一个方法takeTurn,该方法又调用属于棋子类的movePiece方法,该方法将棋子的位置从其当前位置更改为另一个位置。现在,我对董事会班级究竟应负责什么感到困惑。我假设需要确定游戏的当前状态并知道游戏何时结束。但是当一块改变的时候 的位置板应该如何更新?它是否应该在存在的碎片上保持独立的正方形阵列,并且随着碎片的移动而更新? 同样,ChessGame最初创建棋盘和玩家对象,然后分别创建正方形和棋子并开始模拟。简而言之,这可能就是ChessGame中的代码的样子 Player p1 =new Player(); Player p2 = new Player(); Board b = new Board(); while(b.isGameOver()) { p1.takeTurn(); // calls movePiece on the Piece object p2.takeTurn(); } 我不清楚董事会的状态将如何更新。作品应该对董事会有参考吗?责任在哪里?谁拥有什么参考?请帮助我提供您的意见,并指出此设计中的问题。我故意不关注任何算法或游戏玩法的更多细节,因为我只对设计方面感兴趣。我希望这个社区能够提供宝贵的见解。
88 chess  oop 

6
垂头丧气
我是C#(和OOP)的新手。当我有如下代码时: class Employee { // some code } class Manager : Employee { //some code } 问题1:如果我还有其他代码可以做到这一点: Manager mgr = new Manager(); Employee emp = (Employee)mgr; 这Employee是一个Manager,但是当我将其像这样投射到时,Employee是否表示我要cast弃它? 问题2: 当我有几个Employee类对象,而有些(但不是全部)都是时Manager,如何在可能的情况下将其转换?
88 c#  oop  downcast  upcasting 

7
依赖注入和单例设计模式
我们如何确定何时使用依赖注入或单例模式。我在许多网站上都读过,他们说“对单例模式使用依赖注入”。但是我不确定我是否完全同意他们的观点。对于我的中小型项目,我肯定看到单例模式的使用很简单。 例如记录器。我可以使用Logger.GetInstance().Log(...) But,而不是使用它,为什么我需要使用记录器的实例注入我创建的每个类?


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.