Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 合同设计库(接口)思想?_Java_Design By Contract_Contract - Fatal编程技术网

Java 合同设计库(接口)思想?

Java 合同设计库(接口)思想?,java,design-by-contract,contract,Java,Design By Contract,Contract,我正在研究Java库的契约式设计,这是我迄今为止在接口方面提出的 用户可以调用executeContract,executeContract在调用“require”后调用invokeContract。在ExecuteContact之后调用Sure,以确保InvokeContact返回的内容的正确性 此代码还用作回调方法(匿名内部类调用) 你的想法是什么?这是契约式设计吗?到目前为止,这有助于我编写可测试的Java代码 public interface IContractHandler {

我正在研究Java库的契约式设计,这是我迄今为止在接口方面提出的

用户可以调用executeContract,executeContract在调用“require”后调用invokeContract。在ExecuteContact之后调用Sure,以确保InvokeContact返回的内容的正确性

此代码还用作回调方法(匿名内部类调用)

你的想法是什么?这是契约式设计吗?到目前为止,这有助于我编写可测试的Java代码

public interface IContractHandler {

    /**
     * Execute contract will invoke the #invokeContract method.  In the execute method, 
     * check for the validity of the preconditions and the post conditions.
     * 
     * The precondition can be null.
     * 
     * @param    precondInput -  Precondition Input Data, can be null.
     * @return                   Post condition output
     */
    public Object executeContract(final Object precondInput) throws ContractError;

    /**
     * Require that the preconditions are met.
     */
    public Object require(final Object precondInput) throws ContractError;

    /**
     * Ensure that the postconditions are met.
     */
    public Object ensure(final Object precondInput) throws ContractError;

    /**
     * The precondition can be null if the contract allows for that.
     * 
     * @param    precondInput -  Precondition Input Data, can be null.
     * @return                   Post condition output
     */
    public Object invokeContract(final Object precondInput) throws ContractError;

}

实际上,在这种情况下,您需要的是一种称为a的模式。接口不确定实现,这是您在executeContract()方法中尝试执行的操作。

实际上,在这种情况下,您需要的是一种称为a的模式。接口不决定实现,这是您在executeContract()方法中尝试执行的操作。

如果您正在寻找通用的解决方案,我建议使用。所有前置/后置条件(
@requires/@requires
)都可以在要检查的方法上方的注释中指定。据我所知,JML编译器(
jmlc
)将运行时断言插入字节码


我相信ESC/Java2具有类似的功能,但我以前从未使用过它。

如果您正在寻找一个通用的解决方案,我建议您使用。所有前置/后置条件(
@requires/@requires
)都可以在要检查的方法上方的注释中指定。据我所知,JML编译器(
jmlc
)将运行时断言插入字节码


我相信ESC/Java2具有类似类型的功能,但我以前从未使用过它。

您如何知道实现此方法的人会遵守您的executeContract规则(即,它在调用require之后调用invokeContract)?回答-你没有

最好将executeContract放在一个抽象类中,这样您就可以强制执行该行为,如果您真的不希望人们改变该行为,可以将其设置为最终行为

如果invokeContract和require只需要由executeContract调用,则无需将它们公开

我很惊讶需要并确保返回对象,因为它们听起来像是只返回布尔值的那种方法。事实上,返回对象通常是不好的,除非您真的需要。现在的情况是,实现此功能的类的使用者可以得到任何东西,并且不想到处进行instanceof检查

真的需要抛出所有错误吗


希望这能有所帮助。

您如何知道实现此方法的人会遵守您的executeContract规则(即在调用require之后调用invokeContract)?回答-你没有

最好将executeContract放在一个抽象类中,这样您就可以强制执行该行为,如果您真的不希望人们改变该行为,可以将其设置为最终行为

如果invokeContract和require只需要由executeContract调用,则无需将它们公开

我很惊讶需要并确保返回对象,因为它们听起来像是只返回布尔值的那种方法。事实上,返回对象通常是不好的,除非您真的需要。现在的情况是,实现此功能的类的使用者可以得到任何东西,并且不想到处进行instanceof检查

真的需要抛出所有错误吗

希望这有帮助