groupofstudentsclass's People
groupofstudentsclass's Issues
Tests
-
Тесты должны тестировать и ситуации, когда что-то пошло не так, и основные пути выполнения методов;
-
Отличается ли чем-либо инициализация переменных в теле 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
- По умолчанию Maven считает, что у Вас пятая версия Java, что порождает проблемы. Поправить можно так
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.