класс КЛИЕНТПроверить Assertion Нарушения в Eiffel с использованием Array_List
class
CUSTOMER
create
make
feature{NONE} -- Creation
make(a_name:STRING)
-- Create a customer with an `account'
local
l_account: ACCOUNT
l_name: IMMUTABLE_STRING_8
l_bank: BANK
do
l_name := a_name
name := l_name
create l_account.make_with_name (a_name)
create l_bank.make
b := l_bank
account := l_account
ensure
correct_name: name ~ a_name
correct_balance: balance = balance.zero
end
feature -- queries
name: IMMUTABLE_STRING_8
balance: VALUE
do
Result := account.balance
end
account: ACCOUNT
b: BANK
invariant
name_consistency: name ~ account.name
balance_consistency: balance = account.balance
end
часть класса БАНКА:
make -- make a bank
do
count := 0
create [ARRAY_LIST][CUSTOMER] customers.make(10)
customers.count.set_Item(10)
end
new(name1: STRING) -- add a new customer to bank
require
....
local
c: CUSTOMER
do
create c.make(name1)
customers.extend(c)
count := count + 1
ensure
...
end
я получаю ошибку проверки утверждения из класса ARRAY_LIST при попытке поставить клиент в массиве. Тег, который я получил, является «valid_index». Я не знаю, почему это неправильно, потому что индекс прав, и я задал счет для массива и дал правильный индекс.
клиенты имеют класса КЛИЕНТА типа
банка клиенты и клиенты имеют счета
КЛИЕНТА имеет СЧЕТ класс
Спасибо за помощь, однако она не сработала слишком хорошо. При постановке заявления «create customers.make (10)» у меня возникла ошибка компилятора, указывающая, что класс, на который я ссылаюсь, отложен. Кроме того, при переключении на расширение я все еще получил ошибку нарушения утверждения проверки. Я сделаю еще одну запись, но на этот раз я покажу весь класс CUSTOMER, чтобы понять, почему он вызывает у меня проблемы. – geforce
@GeForce: Это означает, что 'customers' имеет тип' LIST [CUSTOMER] '(который отложен) или аналогичный. В этом случае требуется спецификация явного типа в инструкции создания. Что касается нарушения утверждения для 'extend' - это действительно связано с этим? Это было бы странно, потому что у него есть только одно предварительное условие 'extendible', которое всегда' True' для 'ARRAYED_LIST'. –
Я редактировал сообщение с классом CUSTOMER. Я добавил банковскую ссылку в CUSTOMER и инициализировал ее, а некоторые из проверок были упущены, но там все еще есть некоторые нарушения проверки. Я думаю, что ошибки могут возникать из класса CUSTOMER, потому что я неправильно определил функции или атрибуты. Есть еще некоторые нарушения после состояния и проверки утверждений, но не каждый тестовый пример больше 1 или 2. Вы видите что-то еще, что я не добавляю к классу CUSTOMER? – geforce