Questions tagged «oop»

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

13
命名类-如何避免将所有内容都称为“ <WhatEver> Manager”?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 很久以前,我读过一篇文章(我相信是博客文章),这使我走在命名对象的“正确”轨道上:在程序中命名事物时要非常谨慎。 例如,如果我的应用程序(作为典型的业务应用程序)正在处理用户,公司和地址,则我将具有User,a Company和Address域类-可能会弹出a UserManager,a CompanyManager和a AddressManager来处理这些问题。 所以,你可以告诉那些UserManager,CompanyManager和AddressManager做什么?不可以,因为Manager是一个非常通用的术语,适用于您可以使用域对象执行的所有操作。 我阅读的文章建议使用非常具体的名称。如果它是C ++应用程序,并且UserManager的工作是分配用户并将其从堆中释放出来,那么它将不会管理用户,而是保护用户的生死。嗯,也许我们可以将其称为UserShepherd。 或者,也许UserManager的工作是检查每个User对象的数据并用密码对数据签名。然后我们会有一个UserRecordsClerk。 现在,这个想法一直困扰着我,我尝试应用它。并且很难找到这个简单的想法。 我可以描述这些类的作用,并且(只要我不会陷入快速而肮脏的编码中)我编写的类就可以做一件事。从描述到名称,我想念的是一种名称目录,这是一个将概念映射到名称的词汇表。 最终,我想在脑海中想起一个模式目录(通常,设计模式很容易提供对象名称,例如工厂) 工厂-创建其他对象(取自设计模式的命名) 牧羊人-牧羊人处理对象的生命周期,对象的创建和关闭 同步器-在两个或多个对象(或对象层次结构)之间复制数据 保姆-帮助对象在创建后达到“可用”状态-例如,通过连接到其他对象 等等等 那么,您如何处理该问题?您是否有固定的词汇表,是否在动态地发明新名称,或者您认为命名不那么重要或错误? PS:我也对讨论该问题的文章和博客链接感兴趣。首先,这是让我思考的原始文章:不带“ Manager”命名Java类 更新:答案摘要 这是我同时从这个问题中学到的一些小知识。 尽量不要创建新的隐喻(保姆) 看看其他框架做什么 有关此主题的其他文章/书籍: 您会发现自己经常定期参加哪些课程? 命名类的最佳方法是什么? 图书:设计模式:可重用的面向对象软件的元素(精装本) 书籍:企业应用程序架构的模式(精装) 书籍:实施模式(平装本) 还有我从答案中(主观地!)收集的名称前缀/后缀的当前列表: 协调员 建造者 作家 读者 处理程序 容器 协议 目标 转换器 控制者 视图 厂 实体 桶 道路上的一个好提示: 不要让命名麻痹。是的,名称很重要,但它们的重要性还不足以浪费大量时间。如果您不能在10分钟内想到一个好名字,那就继续吧。

22
“自我”一词的目的是什么?
selfPython 中的单词的目的是什么?我知道它是指从该类创建的特定对象,但是我看不到为什么要将它显式地作为参数添加到每个函数中。为了说明这一点,在Ruby中,我可以这样做: class myClass def myFunc(name) @name = name end end 我很容易理解。但是在Python中,我需要包括self: class myClass: def myFunc(self, name): self.name = name 有人可以通过这个告诉我吗?我的经历(公认有限)并不是我遇到的。
1129 python  class  oop  self 

28
函数式编程会取代GoF设计模式吗?
自从我去年开始学习F#和OCaml以来,我已经阅读了大量文章,这些文章坚持认为设计模式(尤其是Java语言)是命令式语言中缺少功能的变通方法。我发现一篇文章提出了相当有力的主张: 我遇到的大多数人都阅读 过《四人帮》(GoF)的《设计模式》一书。任何自以为是的程序员都会告诉您,该书与语言无关,并且无论您使用哪种语言,该模式通常适用于软件工程。这是一个崇高的主张。不幸的是,它与事实相去甚远。 函数式语言极富表现力。在一种功能性语言中,因为该语言可能非常高级,所以不需要设计模式,因此您最终只能使用可以消除所有设计模式的概念进行编程。 函数式编程(FP)的主要功能包括一流的功能,柯里化的,不变的值等。在我看来,OO设计模式无法近似所有这些功能。 此外,在支持OOP的功能语言(例如F#和OCaml)中,对我来说显而易见的是,使用这些语言的程序员将使用与其他OOP语言相同的设计模式。实际上,现在我每天都使用F#和OCaml,并且在这些语言中使用的模式与在用Java编写时使用的模式之间没有显着差异。 函数式编程消除了对OOP设计模式的需求,这有何道理?如果是这样,您是否可以发布或链接到典型的OOP设计模式及其等效功能的示例?


17
公共,私有和受保护的有什么区别?
什么时候以及为什么要在类中使用public,private和protected函数以及变量?它们之间有什么区别? 例子: // Public public $variable; public function doSomething() { // ... } // Private private $variable; private function doSomething() { // ... } // Protected protected $variable; protected function doSomething() { // ... }
988 php  oop  private  public  protected 

16
什么是mixin,为什么它们有用?
在“ Python编程 ”中,Mark Lutz提到了“ mixins”。我来自C / C ++ / C#背景,以前没有听说过这个词。什么是mixin? 在本示例的两行之间进行阅读(我已经链接到它,因为它很长),我认为这是使用多重继承来扩展类而不是“适当的”子类的一种情况。这是正确的吗? 为什么我要这样做而不是将新功能放入子类中?因此,为什么混合/多重继承方法比使用组合更好? 什么将mixin与多重继承分开?这仅仅是语义问题吗?



30
“编程到接口”是什么意思?
我已经看过几次这个问题了,我不清楚它是什么意思。您何时以及为什么要这样做? 我知道接口的作用,但是我不清楚这一点,这让我觉得我错过了正确使用它们的机会。 如果要这样做,是否只是这样: IInterface classRef = new ObjectWhatever() 您可以使用任何实现的类IInterface吗?您什么时候需要这样做?我唯一能想到的是,如果您有一个方法,并且不确定要实现的对象将传递什么对象IInterface。我不认为您需要多久这样做一次。 另外,如何编写一个方法来接受实现接口的对象?那可能吗?

8
如何根据对象的属性对对象列表进行排序?
我有一个Python对象列表,我想按对象本身的属性对其进行排序。该列表如下所示: &gt;&gt;&gt; ut [&lt;Tag: 128&gt;, &lt;Tag: 2008&gt;, &lt;Tag: &lt;&gt;, &lt;Tag: actionscript&gt;, &lt;Tag: addresses&gt;, &lt;Tag: aes&gt;, &lt;Tag: ajax&gt; ...] 每个对象都有一个计数: &gt;&gt;&gt; ut[1].count 1L 我需要按递减计数对列表进行排序。 我已经看到了几种方法,但是我正在寻找Python的最佳实践。
803 python  list  sorting  oop  count 

18
Python的__init__和self是做什么的?
我正在学习Python编程语言,遇到了一些我不太了解的东西。 用类似的方法: def method(self, blah): def __init__(?): .... .... 怎么self办?这是什么意思?它是强制性的吗? 该__init__方法做什么?为什么有必要?(等等。) 我认为它们可能是OOP构造,但我不太了解。
790 python  oop  self 

4
函数式编程与面向对象的编程
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 到目前为止,我主要接触过OO编程,并期待学习一种功能语言。我的问题是: 什么时候选择函数编程而不是面向对象? 函数编程是更好的选择,典型的问题定义是什么?

30
接口与基类
什么时候应该使用接口,什么时候应该使用基类? 如果我不想实际定义方法的基本实现,是否应该始终是一个接口? 如果我有猫狗班。为什么我要实现IPet而不是PetBase?我可以理解具有用于ISheds或IBarks(IMakesNoise?)的接口,因为可以将它们逐个放置在每个宠物上,但是我不知道该为通用Pet使用哪个接口。



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.