Tag: oop

具有太多参数的类:更好的devise策略?

我正在与神经元模型。 我正在devise的一个类是一个细胞类,这是一个神经元的拓扑描述(几个连接在一起的隔间)。 它有很多参数,但都是相关的,例如: 顶端双翅,体长,体细胞直径,顶端长度,分枝随机性,分枝长度等等…总共有15个参数! 我可以将所有这些设置为默认值,但我的类看起来很疯狂,几行参数。 这种事情也必须偶尔发生在别人身上,有没有一些明显的更好的方法来devise这个或者我做对了吗? 更新:正如你有些人问我已经附加了我的类的代码,正如你可以看到这个类有大量的参数(> 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() […]

Django中的类视图

Django视图指向一个函数,如果你只想改变一些function,这可能是一个问题。 是的,我可以有百万个关键字参数,甚至更多的if语句,但是我正在考虑更多的面向对象的方法。 例如,我有一个显示用户的页面。 这个页面与显示一个组的页面非常相似,但是与使用另一个数据模型不太相似。 集团也有成员等… 一种方法是将视图指向类方法,然后扩展该类。 有没有人尝试过这种方法或有任何其他的想法?

什么是Javascript中的多态性?

我已经阅读了一些我可以在互联网上find的关于多态性的文章 。 但是我觉得我不太明白它的意思和它的重要性。 大多数文章没有说明为什么它是重要的,我怎么能在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; […]

减less构造函数的参数个数

我正在阅读“清洁代码”,并无法弄清楚如何保持我的一些函数(通常是构造函数)的最大3个参数。 通常我的对象需要大量的信息才能工作 – 我应该做一个小的构造函数,然后使用mutator函数来给他们所有的信息? 这似乎并不比使用一个大的构造函数更好。 举个例子,我有一个“MovablePatch”类。 它可以让用户在窗口中拖动一个正方形。 它需要几个参数,包括Radius,Color,Renderer,InitialPosition和Visibility。 目前我从我的GUI收集所有这些,然后打电话给: MovablePatch(int radius, Renderer* renderer, Color color, Position initial, bool visibility) 这些只是我在这堂课中需要的一些东西。 任何人都可以build议我怎么可能打包这个信息传递给构造函数? 我没有看到任何明显的“分成小class”出现在这里。

匿名与命名的内部类? – 最佳实践?

我有一个类,我们称之为LineGraph,它呈现一个线条图。 我需要inheritance它,但派生类只在一个地方使用,并耦合到使用它的类。 所以我正在使用一个内部类。 我看到两种方法来做到这一点: 匿名的内部类 public class Gui { LineGraph graph = new LineGraph() { // extra functionality here. }; } 命名的内部类 public class Gui { MyLineGraph graph = new MyLineGraph(); private class MyLineGraph extends LineGraph { // extra functionality here. } } 我不是匿名的内部类的粉丝,因为坦率地说,我认为它看起来真的很丑。 但是对于只在一个地方使用的子类来说,是一个命名的内部类的矫枉过正? 什么是公认的做法?

什么是抽象类和抽象方法?

可能重复: Java中的抽象类 我有几个解释,但到目前为止我无法理解什么是Java中的抽象类和方法。 有人说这个程序的安全性需要做些什么,其他人说这不是什么问题。 即使从Dietel&Dietel的书中,我也不明白它的目的。 何时,何地以及为什么我们使用它? 请解释一下,就像你在教初学者,我真的很感激你的帮助。

functionOO混合语言的devise模式?

Scala等语言已经有最佳实践吗? 我已经find了function语言的devise模式,function性战略编程的devise模式 。 有OO语言的GoFdevise模式。 但是functionOO混合动力车有没有什么模式? 我所见过的就是这个清单。 什么是已知的?

C ++inheritance和成员函数指针

在C ++中,成员函数指针可以用来指向派生的(甚至是基类)成员吗? 编辑:也许一个例子会有所帮助。 假设我们按照inheritance的顺序有三个类X , Y , Z的层次结构。 因此, Y有一个基类X和一个派生类Z 现在我们可以为Y类定义一个成员函数指针p 。 这写成: void (Y::*p)(); (为了简单起见,我假定我们只对签名void f() )的函数感兴趣 这个指针现在可以用来指向Y类的成员函数。 这个问题(真的有两个问题)是: 可以用p指向派生类Z的函数吗? p可以用来指向基类X的函数吗?

具有最终未初始化字段的抽象类

我想知道下面的代码是否有意义,因为编译器警告“空白的最终字段对象可能没有被初始化”。 有没有更好的方法来做到这一点? public abstract Test { protected final ArrayList<Object> objects; } public TestSubA extends Test { public TestSubA() { objects = new ArrayList<Objects>(20); // Other stuff } } public TestSubB extends Test { public TestSubB() { objects = new ArrayList<Objects>(100); // Other stuff } }

多态可能没有inheritance?

在一次采访中,我被问到是否可以在没有inheritance的情况下实现多态。 这可能吗?