• Eiffel小抄


    class


    note
    description: "Simple bank accounts"
     
    class
    ACCOUNT
     
    feature -- Access
     
    balance: INTEGER
    -- Current balance
     
    deposit_count: INTEGER
    -- Number of deposits made since opening
    do
    if all_deposits /= Void then
    Result := all_deposits.count
    end
    end
     
    feature -- Element change
     
    deposit (sum: INTEGER)
    -- Add `sum' to account.
    require
    non_negative: sum >= 0
    do
    if all_deposits = Void then
    create all_deposits
    end
     
    all_deposits.extend (sum)
    balance := balance + sum
    ensure
    one_more_deposit: deposit_count = old deposit_count + 1
    updated: balance = old balance + sum
    end
     
    feature {NONE} -- Implementation
     
    all_deposits: DEPOSIT_LIST
    -- List of deposits since account's opening.
     
    invariant
    consistent_balance:
    (all_deposits /= Void) implies (balance = all_deposits.total)
    zero_if_no_deposits:
    (all_deposits = Void) implies (balance = 0)
     
    end -- class ACCOUNT

    inheritance


    note
    description: "Savings accounts"
     
    class
    SAVINGS_ACCOUNT
     
    inherit
    ACCOUNT
    redefine
    deposit
    end
     
    feature -- Element change
     
    deposit (sum: INTEGER)
    -- Add sum to account.
    do
    ... New implementation (see below) ...
    end
     
    ... Other features ...
     
    end -- class SAVINGS_ACCOUNT

    class D
    inherit
    A
    rename
    g as f
    -- g was effective in A
    undefine
    f
    export
    {NONE} all
    {ANY} capacity
    end
    end

    class TEACHING_ASSISTANT
     
    inherit
    TEACHER
    rename
    computer_account as faculty_account
    select
    faculty_account
    end
     
    STUDENT
    rename
    computer_account as student_account
    end
    end

    deferred class

    deferred class
    LIST [G]
     
    feature -- Access
     
    count: INTEGER
    -- Number of items in list
    do
    ... See below; this feature can be effective ...
    end
     
    feature -- Element change
     
    extend (x: G)
    -- Add `x' at end of list.
    require
    space_available: not full
    deferred
    ensure
    one_more: count = old count + 1
    end
     
    ... Other feature declarations and invariants ...
     
    end -- class LIST

    operator

        infix "<=" (other: like Current): BOOLEAN
    -- Is current object less than or equal to `other'?
    require
    other_exists: other /= Void
    do
    Result := (Current < other) or is_equal (other)
    ensure
    definition: Result = (Current < other) or is_equal (other)
    end

    create

                create x.make (2000)
    create x
                create {SAVINGS_ACCOUNT} x.make (2000)
    some_routine (create {ACCOUNT}.make (2000))

    if

                if ... then
    ...
    elseif ... then
    ...
    else
    ...
    end

    switch

                inspect
    exp
    when v1 then
    inst
    when v2 then
    inst2
    ...
    else
    inst0
    end

    loop

                from
    initialization
    until
    exit
    invariant -- optional
    inv
    variant -- optional
    var
    loop
    body
    end

    assert

                check
    x_not_void: x /= Void end
    -- Because x was obtained as a clone of y,
    -- and y is not void because [etc.]
    end

    exception

            local
    attempts: INTEGER
    do
    last_character := low_level_read_function (f)
    rescue
    attempts := attempts + 1
    if attempts < Max_attempts then
    retry
    end
    end
  • 相关阅读:
    python运行时参数m的作用
    如何设置.net控件SplitContainer平均分配
    不用安装Oracle客户端
    视频聊天APP
    Hadoop框架
    Shell
    Linux
    java14带参的方法
    java13人机猜拳
    java12类的无参方法
  • 原文地址:https://www.cnblogs.com/frankbadpot/p/1582787.html
Copyright © 2020-2023  润新知