|
| 1 | +## Задача, которую решает код |
| 2 | + |
| 3 | +Есть список животных: |
| 4 | +- Bird |
| 5 | +- Dog |
| 6 | +- Cat |
| 7 | +- Elephant |
| 8 | +- Rhino |
| 9 | +- Lion |
| 10 | +- Squirrel |
| 11 | + |
| 12 | +Каждое животное занимает какой-то объем: |
| 13 | +- Bird = 0.25 |
| 14 | +- Dog = 0.4 |
| 15 | +- Cat = ? |
| 16 | +- Elephant = 0.6 |
| 17 | +- Rhino = 0.6 |
| 18 | +- Lion = ? |
| 19 | +- Squirrel = ? |
| 20 | + |
| 21 | +А так же список помещений: |
| 22 | +- Hall |
| 23 | +- Bedroom |
| 24 | +- Bathroom |
| 25 | +- Balcony |
| 26 | + |
| 27 | +У каждого помещения есть вместимость (объем), которое задается при создании каждого типа помещения, т.е. может меняться. |
| 28 | + |
| 29 | +> Необходимо разместить список животных в списке помещений по определенной логике. |
| 30 | +> Определенные типы животных должны быть размещены только в определенных типах помещений, а не в любых. |
| 31 | +
|
| 32 | +Функция принимает на вход массив животных и массив помещений, в которых этих животных надо разместить: |
| 33 | +``` |
| 34 | +arrangeAnimalsAmongRooms(Animal[] animals, Room[] rooms) |
| 35 | +``` |
| 36 | + |
| 37 | +Какие животные в каких помещениях должны быть размещены: |
| 38 | +- Bird => Hall |
| 39 | +- Dog => Bedroom |
| 40 | +- Cat => ? |
| 41 | +- Elephant => Balcony |
| 42 | +- Rhino => Bedroom |
| 43 | +- Lion => ? |
| 44 | +- Squirrel => ? |
| 45 | + |
| 46 | +## Замечания после изучения кода |
| 47 | +- Не все типы животных обрабатываются. Нет условий для Cat, Lion, Squirrel. Т.е. они никогда не будут размещены |
| 48 | +- Как следствие из предыдущего пункта, невозможно понять какой объем занимают Cat, Lion, Squirrel и в какие помещения они должны быть размещены |
| 49 | +- После размещения некоторых типов животных, например Dog и Rhino, выбрасывается исключение, что останавливает выполнение программы и размещение остальных животных из массива не будет произведено |
| 50 | +- При размещении животных, `capacity` у помещений проверяется некорректно, т.к. оно сравнивается лишь с 0, хотя после размещения capacity может уйти в минус |
| 51 | +- При размещении Elephant в консоль выводится сообщение `A new elephant just arrived`, хотя при размещении других животных никаких сообщений не выводится, что странно |
| 52 | +- При размещении животных Dog, Rhino присутствует `break`, т.о. эти животные будут размещены только в одном помещении нужного типа. А логика размещения животных Bird, Elephant не содержит `break`, т.о. получится, что одно и то же животное будет одновременно размещено в разных помещениях одного типа, что физически невозможно |
| 53 | +- При размещении Dog, вне зависимости от того нашлось помещение для собаки или нет, то выбрасывается исключение с текстом `Dog(s) can be arranged`, говорящее о том, что с собакой можно разместиться, хотя это может быть не так. Это из-за того, что забыли сделать `foundRoom = true;`. И сам текст исключения не корректный |
| 54 | +- При размещении Rhino текст исключения `Rhinos(s) can be arranged` не корректный. Должно быть написано, что носороги НЕ могут быть размещены |
| 55 | +- Перебор массивов объектов лучше делать через foreach, тогда можно будет не вычислять длину этих массивов, а просто перебирать все элементы |
| 56 | +- Так же не понятно какой итоговый результат мы получаем после вызова функции и как это проверить. Нам же надо наверняка разместить именно всех животных. Если так, то тогда выбрасывание исключений оправдано. |
| 57 | + |
| 58 | +## Каким должен быть код |
| 59 | +- Универсальным и легко расширяемым, соответствующий принципам SOLID, без дублирований |
| 60 | +- Мы должны иметь возможность легко и быстро добавлять как новые типы животных так и новые виды помещений, без изменения ранее написанного кода |
| 61 | +- Логика, свойства и параметры каждого вида животного и помещений должны быть инкапсули́рованы только в этих объектах |
| 62 | +- Т.к. каждый вид животного, в свою очередь, может быть разного размера, то логично, что он может занимать и разный объем в помещении, поэтому сделаем возможность указывать объем каждого животного при его создании |
| 63 | +- Так же нам нужна связь жесткая животного с помещением, в котором его можно размещать. Поэтому этот признак так же будет указан у каждого вида животного. |
| 64 | +- Еще хорошо бы написать Unit-тесты |
0 commit comments