Questions tagged «oop»

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

10
为什么我们在Java中将父引用分配给子对象?
我在问一个很简单的问题,但是对此我有些困惑。 假设我有一堂课Parent: public class Parent { int name; } 并开设另一堂课Child: public class Child extends Parent{ int salary; } 最后是我的Main.java类 public class Main { public static void main(String[] args) { Parent parent = new Child(); parent.name= "abcd"; } } 如果我做一个子对象 Child child = new Child(): 然后child对象可以访问两个name and salary变量。 我的问题是: Parent parent …



8
一个单元应该如何测试hashCode-equals合同?
简而言之,根据Java的object.hashCode(),hashCode契约: 除非影响equals()的内容发生变化,否则哈希码不应更改 equals()表示哈希码== 让我们假设主要是对不可变数据对象感兴趣-它们的信息在构造之后就不会改变,因此假定#1保持不变。留下#2:问题仅仅是确认是否等于隐含哈希码==之一。 显然,除非该集合很小,否则我们无法测试每个可能的数据对象。那么,编写可能会遇到常见情况的单元测试的最佳方法是什么? 由于此类的实例是不可变的,因此构造此类对象的方法有限。如果可能,此单元测试应涵盖所有这些内容。在我头顶上,切入点是子类的构造函数,反序列化和构造函数(应简化为构造函数调用问题)。 [我将尝试通过研究回答自己的问题。来自其他StackOverflowers的输入是此过程中受欢迎的安全机制。] [这可能适用于其他OO语言,因此我要添加该标签。]
79 java  unit-testing  oop 


11
传递哈希而不是方法参数
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 改善这个问题 我看到在Ruby(通常是动态类型的语言)中,一种非常常见的做法是传递哈希,而不是声明具体的方法参数。例如,与其声明一个带有参数的方法并像这样调用它: def my_method(width, height, show_border) my_method(400, 50, false) 您可以这样操作: def my_method(options) my_method({"width" => 400, "height" => 50, "show_border" => false}) 我想知道您对此的看法。这是好事还是坏事,我们应该做还是不做?在哪种情况下使用此做法是有效的,并且在什么情况下可能会有危险?
78 ruby  oop  coding-style 

13
具有太多参数的类:更好的设计策略?
我正在使用神经元模型。我正在设计的一个类是细胞类,它是神经元(连接在一起的几个隔室)的拓扑描述。它有很多参数,但是它们都是相关的,例如: 轴突节段数,根尖分叉,体长,体径,根尖长,分支随机性,分支长度等……总共约有15个参数! 我可以将所有这些设置为某个默认值,但我的类看起来有些疯狂,其中包含几行参数。这种事情也必须偶尔在其他人身上发生,是否有一些明显的更好的设计方法或者我做对了? 更新: 正如您中的一些人所要求的那样,我已经在该类的代码中附加了代码,您可以看到该类具有大量参数(> 15),但是它们都被使用,并且对于定义单元格的拓扑结构是必需的。本质上,问题在于它们创建的物理对象非常复杂。我已经附上了由此类产生的对象的图像表示。有经验的程序员将如何以不同的方式执行此操作,以避免定义中包含如此多的参数? class LayerV(__Cell): def __init__(self,somatic_dendrites=10,oblique_dendrites=10, somatic_bifibs=3,apical_bifibs=10,oblique_bifibs=3, L_sigma=0.0,apical_branch_prob=1.0, somatic_branch_prob=1.0,oblique_branch_prob=1.0, soma_L=30,soma_d=25,axon_segs=5,myelin_L=100, apical_sec1_L=200,oblique_sec1_L=40,somadend_sec1_L=60, ldecf=0.98): import random import math #make main the regions: axon=Axon(n_axon_seg=axon_segs) soma=Soma(diam=soma_d,length=soma_L) main_apical_dendrite=DendriticTree(bifibs= apical_bifibs,first_sec_L=apical_sec1_L, L_sigma=L_sigma,L_decrease_factor=ldecf, first_sec_d=9,branch_prob=apical_branch_prob) #make the somatic denrites somatic_dends=self.dendrite_list(num_dends=somatic_dendrites, bifibs=somatic_bifibs,first_sec_L=somadend_sec1_L, first_sec_d=1.5,L_sigma=L_sigma, branch_prob=somatic_branch_prob,L_decrease_factor=ldecf) #make oblique dendrites: oblique_dends=self.dendrite_list(num_dends=oblique_dendrites, bifibs=oblique_bifibs,first_sec_L=oblique_sec1_L, first_sec_d=1.5,L_sigma=L_sigma, branch_prob=oblique_branch_prob,L_decrease_factor=ldecf) #connect axon to soma: axon_section=axon.get_connecting_section() …

7
对象,类,功能
我想知道-JavaScript对象,类和函数之间有什么区别?我认为类和函数是对象的类型对吗? 什么使类与函数有区别?还是它们真的是同一回事,只是针对它们的术语会根据其用法而变化? function func() { alert('foo'); } // a function func(); // call the function - alerts 'foo' var func2 = function () { alert('hello'); } // acts the same way as 'func' surely? func2(); // alerts 'hello' var Class = function() { alert('bar'); }; // a class var c …
78 javascript  class  oop 

8
使用addEventListener的处理程序中“ this”的值
我已经通过原型创建了一个Javascript对象。我正在尝试动态呈现表。尽管呈现部分很简单并且可以正常工作,但我还需要为动态呈现的表处理某些客户端事件。那也很容易。我遇到问题的地方是处理事件的函数内部的“ this”引用。而不是“ this”引用对象,而是引用引发事件的元素。 参见代码。问题区域在ticketTable.prototype.handleCellClick = function(): function ticketTable(ticks) { // tickets is an array this.tickets = ticks; } ticketTable.prototype.render = function(element) { var tbl = document.createElement("table"); for ( var i = 0; i < this.tickets.length; i++ ) { // create row and cells var row = document.createElement("tr"); var cell1 = …

7
设计C#类库时,何时应选择通过接口继承?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 改善这个问题 我有一个数字Processor类,可以做两种非常不同的事情,但是是从通用代码中调用的(“控制反转”情况)。 我想知道在决定它们是否都应该继承自BaseProcessor或实现IProcessor为接口时,我应该了解哪些设计考虑因素(或者对您来说是对用户有用的认识)。

4
C#属性实际上是方法吗?
到现在为止,我对Properties&的印象是MethodsC#中的两件事。但是后来我做了下面的事情。 这对我来说是个“开眼神”。我期待一种属性stringProp和一种方法,stringProp但是我得到了。 为什么会这样?有人可以解释一下。
77 c#  .net  oop 

14
大型Switch语句:糟糕的OOP?
我一直认为,大型switch语句是OOP设计不良的征兆。过去,我已经阅读了讨论该主题的文章,他们提供了基于OOP的替代方法,通常基于多态来实例化处理案例的正确对象。 我现在处在一个奇怪的switch语句的情况下,该语句基于来自TCP套接字的数据流,该协议中的协议基本上由换行符终止命令,随后的数据行和结束标记组成。该命令可以是100个不同命令中的一个,因此我想找到一种方法来将此怪物切换语句减少为更易于管理的内容。 我已经进行了一些谷歌搜索来找到我记得的解决方案,但是可悲的是,如今,对于许多类型的查询,谷歌已经变成了无关紧要的结果。 有没有解决此类问题的模式?关于可能的实现有什么建议吗? 我曾经想到的是使用字典查找,将命令文本与要实例化的对象类型进行匹配。这具有仅创建一个新对象并为任何新命令在表中插入新命令/类型的优点。 但是,这也存在类型爆炸的问题。现在,我需要100个新类,此外,我还必须找到一种将它们与数据模型完全接口的方法。“一个真正的转换声明”真的可行吗? 非常感谢您的想法,意见或评论。

7
在静态函数中使用$ this失败
我有想要在其中使用$ this的方法,但我得到的是:致命错误:不在对象上下文中时使用$ this。 我怎样才能使它工作? public static function userNameAvailibility() { $result = $this->getsomthin(); }
77 php  oop  this  static-methods 

9
在Python中创建一个空对象
是否有在Python中定义空对象的快捷方式,还是总是需要创建自定义空类的实例? 编辑:我的意思是一个空的对象可用于鸭打字。
77 python  oop 

7
PHP 7中的类型提示-对象数组
也许我错过了一些东西,但是是否有任何选择来定义该函数应该具有参数或返回用户对象数组的示例? 考虑以下代码: <?php class User { protected $name; protected $age; /** * User constructor. * * @param $name */ public function __construct(string $name, int $age) { $this->name = $name; $this->age = $age; } /** * @return mixed */ public function getName() : string { return $this->name; } public function getAge() …

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.