Opened 4 years ago

Closed 4 years ago

#813 closed ожидаются исправления (задача сдана)

WW #14

Reported by: Kreslavski Kirill Owned by: Артур Гулецкий (huletski)
Component: WW_exceptions Version: 3.0
Keywords: Cc:

Description

Дико извиняюсь, я как-то продолбал дедлайн, а осознал это совсем не сразу.
У меня, прямо скажем, не работающая нормально версия, отправил то, что было на момент осознования моего косяка. Оно из хорошего умеет только хорошо компилироваться и хорошо выглядеть (возможно). Я её не тестировал от слова совсем, поэтому это своеобразный кот в мешке. Ещё раз прошу прощения, был уверен, что дедлайн во вторник вечером, скорее всего что-нибудь ещё исправлю во вторник.

Change History (8)

comment:1 Changed 4 years ago by Kreslavski Kirill

Я всё доделал, теперь всё работает как должно и оно впринципе работает. Надеюсь, что я не слишком опоздал с дедлайном (хаха, кого я обманываю).

comment:2 Changed 4 years ago by Артур Гулецкий (huletski)

Type: ожидается проверкаожидаются исправления
Version: 1.0

Замечания:

  • программа неверно работает, если попытаться считать файл в неверном формате;
  • переделайте хранение данных: используйте хранения в сырых указателях (для тренировки);

matrix.h

  • 7: не добавляйте все имена из std в глобальное пространство имен, тем более в хедере;
  • 14: override, noexcept
  • rule of 3 violation: не хватает чего-то;
  • не хватает const у методов, опционально - noexcept;
  • 33: аргументы было бы логичнее сделать типа std::size_t или другого unsigned типа;
  • print, read лучше реализовать через перегрузку операторов; в read лучше передавать std::istream (разобрали на практике мотивацию).

matrix.cpp

  • 19: ловите bad_alloc в main.cpp, пусть код интерпретатора решает какое сообщение печатать;
  • 30, 43: именa: sum, product - точнее;
  • 58: а зачем this-матрицу умножать? метод же не operator*=;
  • 77: дублирование код конструктора, почитайте какие конструкторы есть у вектора, можно одним вызовом конструктора инициализировать данные матрицы (без if и циклов);
  • 84: operator= у вектора: matrix_ = other.matrix_? Неясно: используются векторы (контейнер/RAII объект), а явно все равно логику присваивания пишете;
  • 115: x3;
  • про плюсы использования исключений потоков поговорили на практике;
  • 131: исключения можно не перебрасывать, само "вылетит" из метода, если не ловить;

main.cpp

  • 24: дублирование (см. код ниже);
  • 49: неясно, зачем решено было реализовать op+, а не op+=.

Баллы: 3.5, доделывайте.

Last edited 4 years ago by Артур Гулецкий (huletski) (previous) (diff)

comment:3 Changed 4 years ago by Kreslavski Kirill

Type: ожидаются исправленияожидается проверка

Я сделал изменения, они не кардинальные, но всё же.

comment:4 Changed 4 years ago by Артур Гулецкий (huletski)

Type: ожидается проверкаожидаются исправления
Version: 1.02.0

Замечания:

  • все еще некорректно обрабатываются файлы в неверном формате (см. ниже).

matrix.h

  • MatrixException? лучше наследовать от исключения из стандартной библиотеки (std::exception/std::logic_error). Мотивацию разбирали на практике;
  • Matrix хранит элементы в векторе, для тренировки была просьба сделать на указателях;

matrix.cpp

  • 9: неясно зачем: пусть бы были пустые векторы;
  • 28: к слову, у вектора конструктор есть от начального числа элементов и элемента по умолчанию -> использовали бы его, не нужно было бы цикл писать;
  • 55: s/answ/product как в методе выше;
  • 75: избыточно, исключение вылетит само, если не ловить -> перебрасывать не обязательно;
  • 93-103: дублирование кода конструктора, другая проблема - базовые гарантии не предоставляются: если файл в неверном формате (всего одно число) изменится только n_ -> инвариант matrix_.size() == n_ нарушится в общем случае. Fix: читать во временный объект, если чтение успешно - swap состояния с this;
  • 116: а вот это зря. Тут как в сказке про царевну-лягушку: не вы (метод read) открыл поток, не вам (методу read) его и закрывать;

Стало получше, но использование векторов - чит, который практически ootb предоставляет базовые гарантии.

Баллы: 4.5. Можно доделывать, если решите оставить хранение в векторах, максимум будет не 10, а 7.5.

comment:5 Changed 4 years ago by Kreslavski Kirill

Type: ожидаются исправленияожидается проверка
Version: 2.03.0

Я исправил замечания по MatrixException?, исправил обработку некорректных файлов (как мне кажется), изменил создание матрицы на вызов конструкотра 1 вектора, пофиксил баг с отсутствием базовой гарантии в read и закрытием потока там же. Но матрица всё ещё написана на std::vector, потому что я не готов сейчас переписывать её (так как есть новые лабы).

comment:6 Changed 4 years ago by Артур Гулецкий (huletski)

Type: ожидается проверкаожидаются исправления

matrix.h

  • 14, 15: вместо throw() пишите noexcept;
  • 14: деструктор можно было явно не писать;
  • 15: virtual избыточный, override не хватает.

matrix.cpp

  • 8: в список инициализации, ловля bad_alloc и его перебрасывание избыточны;
  • 62: same; т.к. элементы хранятся в векторе, явно конструктор копирования можно было не реализовывать (подошел бы сгенерированный по умолчанию);
  • 94: не нужно явно перебрасывать исключения, они вылетят и так.

Баллы: учитывая хранение элементов матрицы в векторах, 6.5.

comment:7 Changed 4 years ago by Артур Гулецкий (huletski)

Дедлайн.

comment:8 Changed 4 years ago by Артур Гулецкий (huletski)

Resolution: задача сдана
Status: assignedclosed
Note: See TracTickets for help on using tickets.