Eiffel 引介 Part IV

类别:编程语言 点击:0 评论:0 推荐:

Eiffel Introduction

Eiffel 引介

 

Rensselaer, 2000

James C. McKim, Jr, Rensselaer at Hartford

 K ][ N G of @ R K 译

 

4. Hello World 以及其它惯用的示例 4.1 Hello(示例)

class HELLO

creation make

feature

    make is

      -- say hello to the significant people in the world.

    do

        io.putstring( “Hello, OOPers%N” )

    end

end

 

变量 io 是一个引用,指向一个型别为 STANDARD_FILES 的对象。后面我们将看到类别 HELLO 如何访问这个变量。

 

4.2 Eiffel 系统[译注3/OOSC2e,p196]

 

l         代码文件的名称通常应该与该代码所包含之类别的名称相同,并以 .e 作为扩展名。

l         因此,类别 HELLO 的代码应该写在名为 hello.e 的文件里。

l         每个不同的系统应该处在不同的目录中。

下面给出了 hello 和 stack 两个系统的示例。

 

4.3 STACK class

class MY_STACK[ G ]

  creation make

  feature

    capacity, depth : INTEGER

    push( x : G ) is

      -- Make x the top item.

      require

        not_full: depth < capacity

      do

        depth := depth + 1

        s.put( x, depth )

      ensure

        depth = old depth + 1

        top = x

    end -- push

    pop is

      -- Remove the top item.

      require

        not_empty: depth > 0

      do

        depth := depth - 1

      ensure

        depth = old depth - 1

        -- top = the item remaining on the stack (if any)

        -- that has been there the least amount of time.

    end -- pop

    top : G is

      -- The item that has been on the stack for the least

      -- amount of time.

      require

        not_empty: depth > 0

      do

        Result := s.item( depth )

    end -- top

  feature{NONE}

    s : ARRAY[ G ]

    make( c : INTEGER ) is

    -- Initialize an empty stack with capacity c.

      require

        c > 0

      do

        capacity := c

        !!s.make( 1, capacity )

      ensure

        capacity = c

        depth = 0

    end -- make

end -- MY_STACK

 

4.4 TEST_STACK

class TEST_STACK

creation make_test

feature{NONE}

  si : MY_STACK[ INTEGER ] ; ss : MY_STACK[ STRING ]

  make_test is

    do

      test_integer_stack

      test_string_stack

  end

  test_integer_stack is

    do

      !!si.make( 3 )

      si.push( 3 )

      si.push( 2 )

      si.push( 1 )

      io.putint( si.depth ) io.new_line

      io.putint( si.top ) io.new_line

      si.pop

      io.putint( si.top ) io.new_line

      si.pop

      io.putint( si.top ) io.new_line

      si.pop

  end

  test_string_stack is

    do

       !!ss.make( 10 )

       ss.push( " in Dixie." )

       ss.push( " I was" )

       ss.push( "Oh, I wish" )

       io.putstring( ss.top )

       ss.pop

       io.putstring( ss.top )

       ss.pop

       io.putstring( ss.top ) io.new_line

  end

end

 

4.5 STACK class(另一种实现)

class MY_STACK[ G ]

creation make

feature{ANY}

  capacity : INTEGER

  depth : INTEGER is

    do

      Result := current_depth

  end

  push( x : G ) is

    -- Make x the top item.

    require

      not_full: depth < capacity

    do

      current_depth := current_depth + 1

      s.put( x, current_depth )

      top := x

    ensure

      depth = old depth + 1 ; top = x

  end -- push

  top : G

    -- The item that has been on the stack for the least

    -- amount of time.

    -- require

    -- not_empty: depth > 0

  pop is

    -- Remove the top item.

    require

      not_empty: depth > 0

    do

      current_depth := current_depth - 1

      if current_depth > 0 then

        top := s.item( current_depth )

      end

    ensure

      depth = old depth - 1

        -- top = the item remaining on the stack (if any)

        -- that has been there the least amount of time.

  end -- pop

feature{NONE}

  s : ARRAY[ G ]

  current_depth : INTEGER

  make( c : INTEGER ) is

    -- Initialize an empty stack with capacity c.

    require

      c > 0

    do

      capacity := c

      !!s.make( 1, capacity )

      current_depth := 0

    ensure

      capacity = c

      depth = 0

  end -- make

end

 

(待续)

本文地址:http://com.8s8s.com/it/it29368.htm