Tag: oop

什么是水合物体?

当有人谈论保湿物品时,这是什么意思? 我在Web上看到一个名为Hydrate的Java项目,它可以在不同表示(RDMS到OOPS到XML)之间转换数据。 这是对象水合的一般意义吗? 在表示之间转换数据? 这是否意味着从存储的表示重构对象层次?

私人纯虚函数的意义何在?

我在头文件中遇到以下代码: class Engine { public: void SetState( int var, bool val ); { SetStateBool( int var, bool val ); } void SetState( int var, int val ); { SetStateInt( int var, int val ); } private: virtual void SetStateBool(int var, bool val ) = 0; virtual void SetStateInt(int var, int val ) = 0; }; […]

何时使用嵌套在模块中的嵌套类和类?

我很熟悉何时使用子类和模块,但最近我已经看到这样的嵌套类: class Foo class Bar # do some useful things end end 以及嵌套在模块中的类如下所示: module Baz class Quux # more code end end 无论是文档和文章都很less,或者我对这个主题没有足够的了解,没有find正确的search条件,但我似乎无法find关于这个主题的很多信息。 有人可以提供关于为什么/何时使用这些技术的post的例子或链接?

封装与抽象?

这里是封装和抽象的简单定义。 抽象: Java中的抽象过程用于隐藏某些细节,只显示对象的基本特征。 换句话说,它处理对象(接口)的外部视图。 唯一很好的例子,我看到这个跨越不同的网站是界面。 封装: 它基本上是隐藏的对象的状态,像私人,公共,保护等修饰符的帮助下,我们只有在需要的情况下通过公开的方法暴露国家。 我们用private , public等修饰符实现的function,也从外面的世界隐藏了不必要的细节,这只不过是一个抽象的概念 所以,从上面的解释看来封装是抽象的一部分,或者我们可以说它是抽象的一个子集。 但是,为什么封装术语只能在抽象化的时候发明呢? 我相信应该有一些重大的区别,但是网上的资料大部分都是一样的。 虽然这个问题在这个论坛上也提过了,但是我再次发表了一些具体的疑问。 有些答复也说抽象是一个概念,封装是实现。 但我不买这个 – 如果这是真的,那么我可以认为这两个不同的概念提供给我们混淆。 更新: – 5年后,我已经拿出了我自己的答案这是基于这个post和下面的答案的要点 抽象和封装之间的区别? 封装vs抽象现实世界的例子

带有Java中的参数的单例

我正在阅读Wikipedia上的Singleton文章,并且遇到了这个例子: public class Singleton { // Private constructor prevents instantiation from other classes private Singleton() {} /** * SingletonHolder is loaded on the first execution of Singleton.getInstance() * or the first access to SingletonHolder.INSTANCE, not before. */ private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() […]

为什么Java Map不能扩展集合?

我惊讶于Map<?,?>不是一个Collection<?> 。 如果这样宣布的话,我觉得它很有意义: public interface Map<K,V> extends Collection<Map.Entry<K,V>> 毕竟, Map<K,V>是Map.Entry<K,V>的集合,不是吗? 那么为什么没有这样实施呢? 感谢Cletus提供了一个最权威的答案,但是我仍然想知道为什么,如果你已经可以将Map<K,V>视为Set<Map.Entries<K,V>> (通过entrySet() ),相反,只是扩展这个接口。 如果一个Map是一个Collection ,那么元素是什么? 唯一合理的答案是“键值对” 确实, interface Map<K,V> extends Set<Map.Entry<K,V>>会很棒! 但是这提供了非常有限的(并且不是特别有用的) Map抽象。 但是,如果是这样的话,为什么是由接口指定的entrySet ? 这一定是有用的(我认为这个位置很容易争论)。 您不能问一个给定的键映射到什么值,也不能删除给定的键的条目,而不知道它映射到的值。 我不是说这就是Map的全部内容! 它可以而且应该保留所有其他的方法(除了entrySet ,现在是多余的)!

必须dependency injection是以牺牲封装性为代价的吗?

如果我理解正确,dependency injection的典型机制是通过类的构造函数或通过类的公共属性(成员)注入。 这暴露了被注入的依赖关系,违反了封装的OOP原则。 我是否正确地认定这个权衡? 你如何处理这个问题? 请看下面我自己的问题的答案。

为什么在Java中没有多重inheritance,但是允许实现多个接口?

Java不允许多重inheritance,但它允许实现多个接口。 为什么?

什么是代表?

我很困惑,代表的实际angular色是什么? 我在面试中多次被问到这个问题,但我不认为面试官对我的回答满意。 任何人都可以用一个实际的例子用一句话告诉我最好的定义吗? 谢谢

为什么java.lang.Object不是抽象的?

可能重复: Java:Object类的基本原理不被声明为抽象的 为什么Object类是Java的基础类,而不是抽象的? 这个问题我真的有很长的一段时间,纯粹是出于好奇而被问到,就是这样。 我的代码或者任何人的代码都没有破坏,因为它不是抽象的,但是我想知道为什么他们把它变成具体的? 为什么会有人想要这个对象类的“实例”(而不是它的存在和参考)? 一种情况是一个糟糕的同步代码,它使用一个对象的实例进行locking(至less我这样用了一次..我的坏)。 对象类的“实例”有没有实际的用法? 它的实例如何适合OOP? 如果将它标记为抽象(当然在为其方法提供实现之后)会发生什么?