Я новичок в Smalltalk и сейчас принимаю класс init. Одна из проблем, мы были назначены требует создания нового класса «HeavyMatrix», который называется так -Создайте класс Matrix, который можно инициализировать, не объявляя сначала размер матрицы
aMatrix := HeavyMatrix new.
Обратите внимание, что не существует начальное назначение размера. Размер должен быть неопределенным при создании. Затем класс добавляет значения матрицы со следующим методом -
aMatrix setRow:1 column:2 value:7.
Все значения в матрице, которые не были заявлены в этом пути по умолчанию 0. Новый класс HeavyMatrix не должен ничего другого подкласса чем объект (т. е. не матрица или массив). Могут ли любые Smalltalkers помочь мне? Есть и другие методы, которые должен содержать класс, но я думаю, что могу все понять, как только я могу инициализировать класс. Благодаря!
Только что * * определяет размер? Будет ли момент времени, когда размер будет фиксированным, а затем сообщение 'setRow: column: value:' станет незаконным? – quamrana
Экземпляры вашего класса могут иметь экземпляр var класса Matrix, изначально установленный в nil. Затем, когда ваш экземпляр получает сообщение setRow: column: value: он вычисляет размер требуемой матрицы, создает экземпляр, а затем устанавливает значение. Последующие вызовы setRow: column: value: может потребоваться создать новую матрицу, скопировать значения старой матрицы и затем сохранить новое значение. Не очень эффективный код, но он должен удовлетворять требованиям. –
Нет, никогда не должно быть времени, когда setRow: column: value: становится незаконным. Я думал о создании матрицы в вызове метода setRow и затем копировании значений в новую матрицу. если этот метод был вызван и объявлен «незаконным». Действительно, не очень эффективно ... Я думал, возможно, используя расширяемую коллекцию, такую как OrderedCollection? Что бы я ни использовал, кажется очень неудобным, если у этого tthing есть необходимый фиксированный размер для объявления. –