Как избежать использования instanceof в этой домашней работе? - PullRequest
1 голос
/ 26 мая 2019

Итак, мой профессор дал мне UML, подобный этому. На днях я разговаривал с другом, и он сказал, что использование instanceOf - плохая практика.

В этом примере, как можно избежать использованияЭто ?

В методе изменения я должен использовать instanceOf, чтобы проверить, есть ли у меня экземпляр профессора или студента, а затем я переключился, чтобы изменить все атрибуты объекта.

Такжеон сказал мне, что реализовывать интерфейс в отделе классов не имеет смысла .. И его следует реализовывать в классе Person ..

Любая помощь или указание о том, как улучшить это упражнение, будет великолепной!

public interface Iactions{
  void add(Object o);
  void delete(Object o);
  void modify(Object o);
  void show(Object o);
}


    public class Department implement Iactions{
    // Attributes
    ArrayList<Person> myGroupPersons;

    // Implementing the methods from interface Iactions

    @Override
    public void modify(Object o) {
        if (o instanceof Professor) {
            modifyProfessor((Professor) o);
        } else if (o instanceof Student) {
            modifyStudent((Student) o);
        }
      }
   }

public class Person {
  // code
}

public class Profesor extends Person{
  // code
}

public class Student extends Person{
  // code
}

Извините за недостаток информации: добавление и удаление, метод, который вставляет объект и удаляет объект из arrayList.Для шоу, я думаю, это просто печать из arrayList.И изменить, мне нужно иметь как меню, где я могу выбрать, какие атрибуты моего объекта я хочу изменить.

Это я догадываюсь, потому что он дает нам только UML (я не писал этот UML) ион больше ничего не сказал.

Ответы [ 2 ]

0 голосов
/ 26 мая 2019

Я предлагаю вам использовать дженерики в Java. Что-то вроде:

public class People {
    String name;

    public People() {
    }
}


public interface IAction<T> {
    void add(T o);
    void delete(T o);
    void modify(T o);
}


public class Departement  implements IAction<People> {

    @Override
    public void add(People o) {
        // TODO Auto-generated method stub

    }

    @Override
    public void delete(People o) {
        // TODO Auto-generated method stub

    }

    @Override
    public void modify(People o) {
        // TODO Auto-generated method stub

    }

}
0 голосов
/ 26 мая 2019

Экземпляр не плохой в использовании, но обычно подчеркивает плохой дизайн.

Класс Person может быть абстрактным и иметь метод modify. У студента и профессора есть своя реализация метода. таким образом вам не нужно использовать

if (Object instanceof Student){
//code
}

но вместо этого:

Object.modify();

С интерфейсной частью все работает так же.

public class Person implements Iactions {

public void modify(){
//code
}
}

//then call this
student.modify();
...