标签: eiffel

.NET 4.0的合同设计与Eiffel相比如何?

除了Bertrand Meyer本人之外,我很高兴在大学里教埃菲尔,并且只读了.NET 4.0将包括合同设计.

任何有洞察力的人都可以详细说明这与Eiffel的现有功能集相比有多强大吗?

是否支持接口合同?

.net design-by-contract eiffel

11
推荐指数
1
解决办法
834
查看次数

是否有一种美妙的方式来断言Java方法中的前提条件?

我的很多函数在声明之下都有一大堆验证代码:

if ( ! (start < end) ) {
    throw new IllegalStateException( "Start must be before end." );
    }
Run Code Online (Sandbox Code Playgroud)

我想精确地指定某些输入的有效范围 - 例如A> B,C => 1或str_d.length()> 0.

鉴于我的一些函数有很多必须经过验证的论证,我最终可能会编写大量的样板来验证前置条件.我正在编写一个主要由非技术开发人员使用的库,我们发现验证函数输入是帮助我们的用户正确操作API的最佳方法.我们越早提出错误,客户就越不需要做的工作.

是否有更优雅的方法来指定我的方法中的前置条件,后置条件(以及可能的不变条件).

一位同事告诉我有关Eiffel编程语言的一个特性,它允许以非常自然的方式描述前/后/不变条件,而无需重复大量的样板代码.是否有Java语言的附加组件,这将允许我使用这些魔术?

java eiffel contract

11
推荐指数
4
解决办法
6214
查看次数

面向对象的C++回调?

是否有一些库允许我在c ++中轻松方便地创建面向对象的回调?

例如,埃菲尔的语言具有"代理人"的概念,其或多或少的工作方式如下:

class Foo{
public:
    Bar* bar;

    Foo(){
        bar = new Bar();
        bar->publisher.extend(agent say(?,"Hi from Foo!", ?));
        bar->invokeCallback();
    }

    say(string strA, string strB, int number){
        print(strA + " " + strB + " " + number.out);
    }

}

class Bar{
public:
    ActionSequence<string, int> publisher;

    Bar(){}

    invokeCallback(){
        publisher.call("Hi from Bar!", 3);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出将是:嗨来自Bar!3来自Foo!

所以 - 代理允许将成员函数封装到一个对象中,沿着一些预定义的调用参数(来自Foo的Hi)给它,指定打开的参数(?),然后将它传递给其他对象,然后再调用它.

由于C++不允许创建非静态成员函数的函数指针,似乎并不容易实现容易在C++使用的东西.我在c ++中找到了一些关于面向对象回调的谷歌的文章,但是,实际上我正在寻找一些我可以导入的库或头文件,它允许我使用一些类似优雅的语法.

有人给我一些提示吗?

谢谢!

c++ oop eiffel member-function-pointers callback

8
推荐指数
3
解决办法
7855
查看次数

Racket Scheme的"合同设计"功能与Eiffel不同?

我知道Eiffel(祖先)和Racket都实现了"按合同设计"的功能.可悲的是,我不确定如何区别于另一个.Eiffel的DBC依赖于OOP范式和继承,但是Racket,一种非常不同的语言如何解释这种差异?

scheme design-by-contract eiffel racket

7
推荐指数
3
解决办法
1354
查看次数

学习埃菲尔的经验

有没有人有任何学习埃菲尔语的经验.

Eiffel Studio是否像Visual Studio一样?

这是学习OOP的好方法吗?

等等

eiffel

5
推荐指数
1
解决办法
2303
查看次数

埃菲尔不可变的阶级

我想POINT在埃菲尔做一个不可变的课.下面的代码定义了一个吗?和字段的{NONE}可访问性是否足够?我可以写一些类不变的类,或者我怎样才能实现不变性?xyx = x'

class POINT
    create
        make
    feature {NONE}
        x: DOUBLE
        y: DOUBLE
    feature
        make (x_: DOUBLE; y_: DOUBLE)
        do
            x := x_
            y := y_
        ensure
            set: x = x_ and y = y_
        end

    feature --accessors
        get_x: DOUBLE
        do
            Result := x
        ensure
            Result = x
        end
    end
Run Code Online (Sandbox Code Playgroud)

eiffel point invariants immutability

5
推荐指数
1
解决办法
227
查看次数

埃菲尔:放松前提条件并收紧后期条件?

在埃菲尔说,我们应该"放松前提条件并收紧后期条件",但我不确定这意味着什么.这种好处/如何受益于子类别?

谢谢

oop eiffel code-contracts

4
推荐指数
1
解决办法
298
查看次数

如何在Eiffel的声明中初始化局部变量?

我试着这样做:

local
    condition: BOOLEAN
    condition := true
do
Run Code Online (Sandbox Code Playgroud)

这样的事情:

local
    condition: BOOLEAN := true
do
Run Code Online (Sandbox Code Playgroud)

显然既不起作用,但我需要在声明中初始化变量,因为如果执行重试指令,我不希望变量重新初始化.我查看了Eiffel的官方文档和教程,但它们始终将操作体中的变量初始化.

variables eiffel

4
推荐指数
1
解决办法
1425
查看次数

关于纯OO的各种问题(设置没有ide;教程;相关书籍)

我一直想要进入一种纯OO语言一段时间,但是我觉得他们似乎都需要一个IDE,我找不到任何不在视频中的好教程格式.

我很高兴以后使用IDE ,但我不想通过一个学习语言.我正在寻找的是一个简单的控制台解释器或命令行编译器,如gcc,ghc,ghci和python IDLE(是的,它是一个IDE,但它是如此极简主义,它可能只是一个命令行解释器).我发现当我不想同时使用IDE时,我会更快,更好,更全面地学习语言.所以,请不要告诉我吱吱声是唯一的方法:P

我也在寻找以文本而非视觉方式呈现的教程.再一次,当我盯着一个页面并且一遍又一遍地阅读别人的咒语时,我会更快地学习,而不是暂停视频,将其取回10秒,按下播放,再次执行,再次,然后再次.

我对不同程度的OO纯度的各种语言感兴趣,我计划在某些时候学习它们.任何一个smalltalk方言都让我感兴趣,Self(一个极端原型导向的smalltalk版本(非常有趣,越激进越好的imo)),strongtalk,vanilla smalltalk(或者一些实现,就像你能得到的那样).

我也对Eiffel感兴趣,我见过的代码片段看起来非常优雅,我读到它实际上非常具有创新性(引入代码合同和其他类似的东西).然而,我会优先考虑来自小型营地的一种语言而不是埃菲尔一侧的语言,因为面对价值的埃菲尔似乎是OO和命令式编程之间的混合体.同样,我宁愿避免Scala(混合OO和功能)和其他混合语言.所以没有C#,Java,C++,D,python等等.我不是在考虑这些语言,因为我认为它们很糟糕,只是因为我开始学习纯OO而且那些语言是混合OO:不是真的是我在找什么.

此外,任何人都可以推荐官方书籍吗?对于smalltalk,有"蓝皮书"AKA"Smalltalk-80:语言及其实现".对艾菲尔来说,有"艾菲尔:语言".我问,因为根据我的经验,你可以通过阅读该语言作者撰写的书籍(参见K&R C编程语言)以及阅读一般书籍来学到很多东西.

所以,是的,我的问题:开始使用纯OO语言会有什么好处?如何在不使用IDE的情况下学习它?是否有一本由语言作者撰写的相关书籍?

ide oop smalltalk eiffel squeak

2
推荐指数
6
解决办法
1040
查看次数

你如何在埃菲尔开发webapps?

你如何在埃菲尔开发一个Web应用程序?

是否有针对eiffel的webapp框架?

是否有使用eiffel开发的网络应用程序示例?

eiffel web-applications

2
推荐指数
1
解决办法
952
查看次数