Eiffel 引介 Part IV

    技术2022-05-11  187

    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

     

    (待续)


    最新回复(0)