Tag: oop

沮丧和倒戈

我是C# (和OOP )的新手。 当我有如下的代码: class Employee { // some code } class Manager : Employee { //some code } 问题1 :如果我有其他代码这样做: Manager mgr = new Manager(); Employee emp = (Employee)mgr; 这里的Employee是一名Manager ,但是当我把这样的Employee投给一名Employee这意味着我在向他们投资? 问题2 : 当我有几个Employee类对象,但有些不是全部都是Manager的时候,我怎样才能在任何可能的情况下下注他们?

Java中的抽象与封装

可能重复: 抽象VS信息隐藏VS封装 我知道这个问题在这个论坛上可能已经有好几千次的问题了,甚至networking上也充斥着很多关于这些概念的定义,但是听起来都是一样的,都使用相同的技术词汇。 例如下面的定义 封装是将数据和对数据进行操作的代码绑定或包装成一个实体的过程。 这样可以保证数据不受外界接口和误用。 考虑封装的一种方法是作为一种保护包装,防止代码和数据被包装器外部定义的其他代码任意访问。 我从上面的定义中明白的是,创buildvariables,将它们标记为private,并为这些variables生成getter-setter,并使用object访问这些getter和setter。 这样数据就隐藏在对象内部,只能通过对象访问。 希望我是对的 。 抽象是Java中抽象的过程,用来隐藏某些细节,只显示对象的本质特征。 换句话说,它处理对象(接口)的外部视图。 现在这是总让我困惑的部分。 每当我想到抽象概念时,我想到的就是Abstract类(可能是因为两者都有Abstract关键字)。 上面的定义是说抽象意味着隐藏数据,只显示需要的细节,但这就是我们已经在封装的权利? 那么有什么区别。 我也没有得到什么是对象的外侧视图在处理对象的外部视图 。 有人能请一些真实生活的例子或一些程序化的例子,如果可能的话更多的照顾这个。

关系数据库中的空值是否可以?

有一种思想是在关系数据库中不应该允许使用空值。 也就是说,一个表的属性(列)不应该允许空值。 从软件开发背景来看,我真的不明白这一点。 看来,如果null在属性的上下文中是有效的,那么它应该被允许。 这在Java中非常普遍,对象引用通常是空的。 没有广泛的数据库经验,我想知道我是否在这里失去了一些东西。

编写健壮的“现代”Fortran代码

在一些科学环境中,由于大多数开发人员只知道习惯用法,并且有很多遗留代码和相关经验,所以经常不能没有FORTRAN。 坦率地说, 高性能编程没有太多其他的跨平台选项(C ++可以完成这个任务,但是语法,零开始数组和指针与某些人不兼容)。 因此,我们假设一个新的项目必须使用Fortran 90,但是我想用最新的编译器(Intel ifort,还包括Sun / HP / IBM编译器)来兼容最新的软件架构, 所以我正在考虑强加一些广为人知的常识,但在我的环境中还不是一个标准: 全局variables被禁止,没有gotos,没有跳转标签, implicit none ,等等。 “面向对象的编程”(具有数据types和相关子程序的模块) 模块化/可重用的function,有据可查的可重用的库 断言/先决条件/不变式(使用预处理器语句实现) 所有(大多数)子程序和“对象”的unit testing 一个强烈的“debugging模式”( #ifdef DEBUG )与更多的检查和所有可能的英特尔编译器检查可能(数组边界,子程序接口等) 统一并强制执行易读的编码风格,使用代码处理工具助手。 所有的目标都是要有值得信赖,可维护和模块化的代码。 而在大量的遗留代码中,可重用性并不是一个重要的目标。 我search了关于面向对象的Fortran,合同编程(断言/前置条件/​​等等)的参考资料,并且find了没有大型项目参与的人员所做的丑陋和过时的文档,语法和论文以及死了的项目。 任何有关此主题的良好url,build议,参考文献/书籍?

重写类常量与属性

我想更好地理解为什么在下面的场景中,inheritance类常量和实例variables的方式有所不同。 <?php class ParentClass { const TEST = "ONE"; protected $test = "ONE"; public function showTest(){ echo self::TEST; echo $this->test; } } class ChildClass extends ParentClass { const TEST = "TWO"; protected $test = "TWO"; public function myTest(){ echo self::TEST; echo $this->test; } } $child = new ChildClass(); $child->myTest(); $child->showTest(); 输出: TWO TWO ONE TWO […]

base()和this()构造函数的最佳实践

在什么条件下,我应该做:base()和:this()构造函数调用遵循我的构造函数的括号(甚至在代码中的其他地方)。 什么时候这些被称为良好做法,什么时候是强制性的?

如何使用__getattribute__方法?

我想覆盖对一个类中的一个variables的访问,但通常返回所有其他的variables。 我如何用__getattribute__完成这个工作? 我试过以下(这也应该说明我在做什么),但我得到一个recursion错误: class D(object): def __init__(self): self.test=20 self.test2=21 def __getattribute__(self,name): if name=='test': return 0. else: return self.__dict__[name] >>> print D().test 0.0 >>> print D().test2 … RuntimeError: maximum recursion depth exceeded in cmp

Mixin与inheritance

混合和inheritance有什么区别?

Java方法应该默认是静态的吗?

假设你在类A中写入方法foo() ,foo不会访问任何A的状态。 你什么都不知道foo做什么,或者它如何performance。 它可以做任何事情。 无论有什么其他的考虑,foo总是静止的吗? 为什么不? 看来我的class级总是积累很多私人帮手的方法,因为我把任务分解并应用唯一写一次原则。 这些大多数不依赖于对象的状态,但在类自身的方法之外决不会有用。 他们应该默认静态? 结束了大量的内部静态方法是错误的吗?

避免Java中的“instanceof”

我有以下(也许是常见的)问题,目前绝对困惑我: 有几个生成的事件对象扩展了抽象类Event ,我想把它们分成Session Beans,就像 public void divideEvent(Event event) { if (event instanceof DocumentEvent) { documentGenerator.gerenateDocument(event); } else if (event instanceof MailEvent) { deliveryManager.deliverMail(event); … } … } 但是将来可能会有两种以上的事件types,所以if-else会很长,也许不可读。 另外我认为instanceof在这种情况下并不是真正的“最佳实践”。 我可以将一个抽象方法添加到Eventtypes,并让它们自己分割,但是我必须在每个实体中注入特定的Session Beans。 是否有任何暗示为这个问题实现“漂亮”的解决scheme? 谢谢你的帮助!