Giter Club home page Giter Club logo

groupofstudentsclass's People

Contributors

wizarlock avatar

Watchers

 avatar

groupofstudentsclass's Issues

Tests

  1. Тесты должны тестировать и ситуации, когда что-то пошло не так, и основные пути выполнения методов;

  2. Отличается ли чем-либо инициализация переменных в теле Junit-теста и с использованием @before метода?

Implementation

1. Subject можно оставить (с одним полем - именем, или вообще сделать enum-ом - зависит от того, планируете ли Вы поддержку заведения списка предметов), но с точки зрения ООП сопоставить предметы студенту лучше, заведя непосредственно внутри студента коллекцию предмет - оценка. Группа всё же состоит из студентов, кажется логичным, что предметы по отношению к ним - вспомогательные, студент владеет своими оценками - здесь должно быть отношение композии (https://metanit.com/sharp/patterns/1.2.php - has a). Пока очень сложно со структурной точки зрения;

2. Как правило, поля делают private + делают public get/set-методы для них - если Вы контролируете доступ, Вы можете проигнорировать попытку некорректного назначения значений, например (+ менять логику чекеров). Каркасные get/set Идея умеет автогенерировать по выделенным полям Upd. Относительно чекеров - дубликаты фрагментов кода, отвечающих за принадлежность к диапазону стоит вынести в отдельный вспомогательный приватный метод: правой кнопкой мыши -> Refactor -> Extract method; Кроме этого, будьте, пожалуйста готовы ответить на вопрос, throw new IllegalArgumentException - IllegalArgumentException здесь - это проверяемое или непроверяемое исключение? Что позволяет сделать программисту-клиенту, использующему Ваш класс, это исключение? Можно здесь текстом;

3. Мы, по сути, разрабатываем библиотечный компонент. Просьба добавить переопределение методов equals/hashCode/toString к разработанным классам и быть готовым объяснить, зачем каждый из них может быть нужен (+ почему переопределенный equals может быть полезен для тестирования); Upd. Актуально в части пояснения;

4. Возвращать коллекции принято через использование интерфейсов, а не тех реализаций, которые используются внутри класса/ метода (используя интерфейсы, Вы "подписываете обязательство" на то, что возвращаемая коллекция должна реализовывать только часть методов, которыми обладает коллекция, на данный момент реально используемая в реализации - и внешние "клиенты", которым Вы её вернёте, могут рассчитывать только на эти методы. Таким образом, внутри своего метода Вы потом можете менять коллекцию, например, на другие виды, удовлетворяющие интерфейсу - а в использующем коде при этом менять ничего не придётся). Поля также обычно объявляются с применением интерфейсов; Upd. Наверное, но здесь стоит иметь в виду, что выдавать коллекции - давать "ручку доступа" к ним (обладая ссылкой на объект коллекции, любой программист извне может получать/менять его содержимое в обход реализованных Вами методов доступа). Если хочется выдавать коллекцию, можно попробовать так (keeping control of our collections);

5. Есть ощущение, что пока проверки на null есть не везде, возможны NPE (как вариант, добавить их в сеттеры и конструктор, и выбрасывать исключение для конструкторы) Upd. Поясните, пожалуйста, как работают assert-ы и гарантированным ли является такое поведение (см. документацию + открыть сгененрированные *.class файлы через Идею и посмотреть на восстановленный код). Кроме этого, как минимум, equals группы пока вроде кидает логически необусловленное NPE;

6. Assert - отладочный механизм, который (может быть выключен настройками Java при запуске)[https://medium.com/the-java-report/assertions-in-the-java-programming-language-fd64f53e7be1#:~:text=To%20configure%20assertion%20options%20one,class%20or%20package%20as%20follows], если нужно выкинуть исключение - используйте throws; Upd. Пока не очень понятно, почему private Student getNecessaryStudent выкидывает исключение в случае отсутствия студента? Вроде это тот вариант, который возможен с точки зрения корректного использования Вашего метода. Если не хочется возвращать null, хорошей практикой является применение Optional t, с дальнейшим использованием в вызывающем методе через ifPresent;

7. Для именования переменных в Java принято применять lowerCamelCase.

Maven

  1. По умолчанию Maven считает, что у Вас пятая версия Java, что порождает проблемы. Поправить можно так

Screenshot 2021-02-12 at 11 00 01

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.