Conversation
| @@ -0,0 +1,26 @@ | |||
| package Devices.Device | |||
There was a problem hiding this comment.
Случайно продублировал три класса. Из кода их уже удалил.
VladimirBelyakof
left a comment
There was a problem hiding this comment.
Ок. Прокоментировал все.
Почитай подумай, как можно убрать существующие недостатки.
Еще по схеме БД вроде не было информации в реквесте вроде.
Если будут вопросы пиши, но я только направить могу или какие-то отдельные сложные моменты разяъснить. В основном старайся сам информацию найти
| <component name="VcsDirectoryMappings"> | ||
| <mapping directory="$PROJECT_DIR$" vcs="Git" /> | ||
| </component> | ||
| </project> No newline at end of file |
There was a problem hiding this comment.
Этого файла не должно быть в коде проекта. Этот файл относится к конкретно твоим настройкам, конкретно твой IDE и не должен быть в репозитрии. Смотри в сторону gitignore или просто не добавляй данный фал в коммит.
There was a problem hiding this comment.
Да в ignore ты его добавил. Но не до конца понял как это работает. Сейчас ты все еще предлагаешь этот файл добавить в проект. Иначе бы он тут не отображался. И я не смог бы написать тут комментарий. Нужно сделать так чтобы этого фала не было в реквесте
| import Interfaces.Observer | ||
| import Interfaces.Subject | ||
|
|
||
| abstract class Cab(office: Subject) : Observer { |
There was a problem hiding this comment.
В ООП должны быть четкие абстракции. Например Корова являеется животным.
В тввоем случае Кабинет является Наблюдателем? Помещением может быть, видом комнаты возможно, но при чем тут наблюдатель?
|
|
||
| import Interfaces.Subject | ||
|
|
||
| class Cabinet2(office: Subject) : Cab(office) No newline at end of file |
There was a problem hiding this comment.
Зачем тебе 3 одинаковых класса?
Каждый класс должен асоциороваться с объектом реального мира. Такое чувство, что ты хочешь создать просто новый объект класса.
Давай дам пример. Если я создаю иерархию классов на примере живтоных, то я бы создал базовый класс животное и несколько наследников, напрмер собака которая имеет родословную и корову, которая умеет давать молоко.
Если бы я хотел создать двух коров это были бы два объекта данного класса Cow("Буренка") и Cow("Мэри")
Подумай почитай в каких случаях создается новый класс а в каких я могу просто вынести разницу в аргументы контруктора.
|
|
||
| import Interfaces.Subject | ||
|
|
||
| class Cabinet3(office: Subject) : Cab(office) No newline at end of file |
There was a problem hiding this comment.
Кабинет не должен принимать родителя в контруктор.
Классы нужно делать настолько независимыми от других, насколько это возможно.
Вдруг ты захочешь сделать кабинет у себя дома. Как быть все переписывать? Можно конечно извратиться, но в целом это неправильно. Кабинет это составная часть оффиса но не наоборот
|
|
||
| init { | ||
| emp.addEmp(this) | ||
| } |
There was a problem hiding this comment.
То же самое. Зачем человеку знать о каком то внешнем хранилище где он может находиться. А если потребуется завтра создать человека который не нахоидтся ни в каком списке. Читай понимай про абстракции. Имя, Фамилия являются частью человека. Какой-то список сотрудников абсолютно не нужен и не понятен для существования человека.
There was a problem hiding this comment.
И еще нарушение принцыпов наследования. Корова всегда является животным, собака всегда является животным. легушка всегда является животным. Для них мы выделяем общую абстракцию "Животное".
Разве любой человек является работником? Совсем нет. (или что значт Works полагаю ты имел ввиду Worker или Employer)
|
|
||
| interface Works { | ||
| fun upd(name: String, surname: String) | ||
| } No newline at end of file |
There was a problem hiding this comment.
Works не понятно. Интерфрейс/класс как провало это существительное в единственнном числе. Ты хотел сказать Worker или Work? В любом случае в данной абстракции сложно представить назначение метода upd. что он должен делать?
|
|
||
| class Office(var cabinets: ArrayList<Observer> = ArrayList(), var employers: ArrayList<Works> = ArrayList()): Subject, Employers { | ||
|
|
||
| private var number: Int = 0 |
There was a problem hiding this comment.
Немного не понял. В задании было что кабинет имеют номрера. Номер оффиса, это намерено сделано или ошибка?
| val cab: Observer = cabinets[i] | ||
| number++ | ||
| cab.update(number) | ||
| } |
There was a problem hiding this comment.
Не понял что тут просиходит. Пробегаем по кабинетам и увеличиваем им номер на 1?
|
|
||
| fun showAllCabinets() { | ||
| notifyCabinets() | ||
| } |
There was a problem hiding this comment.
Так вывыести все кабинеты или уведомить все кабинеты о чем-то? ОПять же непонятяно о чем уведомить
| val emp: Works = employers[i] | ||
| emp.upd("", "") | ||
| } | ||
| } |
| @@ -1,2 +1,3 @@ | |||
| # Project exclude paths | |||
| .idea/vcs.xml | |||
There was a problem hiding this comment.
Добавил не в тот gitignore.
|
|
||
| class Cabinet(var number: Int) : Display { | ||
|
|
||
| private var device: String = "" |
There was a problem hiding this comment.
Почему в кабинете находится только название устройства? У нас в кабинете настоящий принтер, а не только бирка от него
|
И еще, где грамотно раксставленные модификтаоры доступа? Попрошу тебя отписаться в комментариях где и какой принцып ООП Ты применил. И зачем. |
|
|
||
| fun addEmployer(employer: Employer) | ||
| { | ||
| employers.add(employer).toString() |
| interface Display { | ||
| fun displayDev() | ||
| fun displayEmp() | ||
| } No newline at end of file |
There was a problem hiding this comment.
- мне не понятен этот интерфрейс. Он называется Display. Ок, достаточно общая абстракция. Хотя конечно сказать что Кабинет является Экраном.. странно. Ну допустим.
- Далеко не любой дисплэй знает о наличии сотрудников и устройств. О наличии сотруднков и устройств знает кабинет. Но тогда зачем было создавать этот интерфрейс? Какую проблему это решает?. Зато он добавляет сложности, еще и абстракция интерфейса не продумана. Спроси любого человека, скажи классы которые есть у тебя в проекте. В иделале у человека не глядя на код должна сложиться картинка твоей системы. Должно быть понятно назначение просто по именам классов
Итого: Сейчас не понятно зачем тебе нужен это интерфейс. Если ты делаешь это, просто чтобы был интерферйс - это самый страшный грех. Код должен быть максимально простым. Все интрументы нужны для упрощения решения. Если ты используешь их не по назначению - это очень большая проблема.
Test