Tag: oop

何时使用VBA中的类?

什么时候适合在Visual Basic for Applications(VBA)中使用类? 我假设加速开发和减less引入错误是大多数支持OOP的语言的一个共同的好处。 但是用VBA,有没有特定的标准?

C / C ++结构偏移量

我正在寻找一段代码,可以告诉我一个结构中的字段的偏移量,而不分配结构的一个实例。 IE:给 struct mstct { int myfield; int myfield2; }; 我可以写: mstct thing; printf("offset %lu\n", (unsigned long)(&thing.myfield2 – &thing)); 得到“偏移4”的输出。 我怎样才能做到这一点,没有“mstct事”声明/分配一个? 我知道&<struct>并不总是指向结构的第一个字段的第一个字节,我可以在后面说明。

抽象类和接口有什么区别?

假设在一个接口中有两个方法M1()和M2() 。 一个抽象类也有两个相同的抽象方法。 如果任何类实现了这个接口或从抽象类inheritance,它将不得不实现其中的两个方法。 所以对我来说,接口或抽象类对于我的场景来说似乎是相同的。 那么,有没有人可以在这个特定的情况下突出这两者之间的差异,并build议在这里使用抽象类还是接口?

为什么接口首选抽象类?

我最近参加了一个采访,他们问我“为什么接口比抽象类更受欢迎? 我试着给出几个答案,如: 我们只能得到一个Extendsfunction 他们是100%摘要 实现不是硬编码的 他们问我使用任何你使用的JDBC API。 “他们为什么是接口?” 我能得到更好的答案吗?

在Java中@符号意味着什么?

以下是代码片段。 @Intercepts({@Signature( type= Executor.class, method = "update", args = {MappedStatement.class,Object.class})}) public class 有人可以向我解释在Java中@符号的含义吗?

封装与数据隐藏 – Java

采访者:什么是封装,以及如何在Java中实现它? Me:封装是一种隐藏客户端信息的机制。 这些信息可能是数据或实现或algorithm。 我们使用访问修饰符来实现这一点。 采访者:这是数据隐藏。 我们如何在Java中实现封装? 我 :ummmmm 具体问题:除了“访问修饰符”,在Java中实现封装的方式是什么?

在Python中,两个对象何时相同?

看来, 2 is 2和3 is 3将永远在Python中是真实的,一般来说,任何引用一个整数是相同的任何其他引用相同的整数。 None发生了同样的情况(即None is None )。 我知道这不会发生在用户定义的types或可变types上。 但它有时也会在不可变types上失败: >>> () is () True >>> (2,) is (2,) False 也就是说:空的元组的两个独立的构造对内存中的同一个对象产生引用,但是相同的一个(不可变的)元素元组的两个独立结构最终创build了两个相同的对象。 我testing了frozenset ,并以类似于元组的方式frozenset的工作。 什么决定了一个对象是否会被复制到内存中,或者只有一个具有大量引用的实例? 这是否取决于对象在某种意义上是否是“primefaces”呢? 它根据实施情况而有所不同吗?

非Qt基类

我正在使用Qt(我是新来的)4.8.2,用Visual Studio创build了一个名为“Contact”的基类。 我不希望这个类是Qt独占的 ,所以我的意图是创build另一个类“QContact”inheritance“Contact”,QObject处理所有与Qt相关的业务,比如Q_OBJECTmacros等。 不幸的是,当我inheritance,build设失败,说: moc_QContact.cpp(53): error C2039: 'staticMetaObject' : is not a member of 'Contact' moc_QContact.cpp(75): error C2039: 'qt_metacast' : is not a member of 'Contact' moc_QContact.cpp(80): error C2039: 'qt_metacall' : is not a member of 'Contact' 我在网上做了一些研究,发现你不能从非Qt类派生一个Qt类。 所以要解决它,“联系”可以inheritance“QObject”(我试过,它的工作)。 但是这样做会使它独占Qt这是我的问题。 所以我问的是:你怎样才能为Qt类创build一个非Qt的基类? 谢谢。

为什么我应该使用命令devise模式,而我可以轻松调用所需的方法?

我正在研究命令devise模式 ,我对使用它的方式感到困惑。 我有的例子是关于远程控制类,用来打开和closures灯。 为什么不应该使用Light类的switchOn()/ switchOff()方法,而不是使用最终调用switchOn / switchOff方法的单独的类和方法? 我知道我的例子很简单 ,但这是重点。 我无法在Internet上的任何位置find任何复杂的问题,以查看命令devise模式的确切用法。 如果你知道你解决的任何复杂的现实世界问题,可以使用这种devise模式解决,请与我分享。 这有助于我和这篇文章的未来读者更好地理解这种devise模式的用法。 谢谢 //Command public interface Command { public void execute(); } //Concrete Command public class LightOnCommand implements Command { //Reference to the light Light light; public LightOnCommand(Light light) { this.light = light; } public void execute() { light.switchOn(); //Explicit call of selected class's method […]

依赖倒置原则(SOLID)与封装(OOP的支柱)

最近我正在讨论依赖倒置原理 , 控制反转和dependency injection 。 关于这个话题,我们正在辩论这些原则是否违反了OOP的一个支柱,即封装 。 我对这些事情的理解是: 依赖倒置原则意味着对象应该依赖于抽象而不是结核 – 这是实现控制反转模式和dependency injection的基本原理。 控制反转是依赖反转原理的模式实现,其中抽象依赖关系取代具体的依赖关系,允许在对象之外指定依赖关系的结构。 dependency injection是实现控制反转并提供依赖性parsing的devise模式。 当一个依赖被传递给一个依赖的组件时就会发生注入。 实质上,dependency injection模式提供了一种将依赖抽象与具体实现耦合的机制。 封装是高层对象所需要的数据和function被隔离开来并且不可访问的过程,因此程序员不知道如何实现对象。 辩论得到了一个关键点: IoC不是OOP,因为它打破封装 就我个人而言,我认为所有的OOP开发者都应该遵守依存倒置原则和控制倒置的模式,而且我的观点如下: 如果有(可能)不只一个方法去剥皮,那就不要像只有一个。 例1: class Program { void Main() { SkinCatWithKnife skinner = new SkinCatWithKnife (); skinner.SkinTheCat(); } } 这里我们看到一个封装的例子。 程序员只需要调用Main() ,猫就会被剥皮,但是如果他想要剥皮猫,比如说一组锋利的razor呢? 例2: class Program { // Encapsulation ICatSkinner skinner; public Program(ICatSkinner skinner) { // […]