Занимаюсь оформлением Java программы. Почему это показывает несоответствие? - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть вопрос относительно программы, которую я делаю для школы. Я должен сделать следующее:

Написать программу Java, которая использует классы декоратора для расширения возможностей сотрудников. В типичной компании сотруднику будет предложено выполнить ряд обязанностей, таких как руководитель департамента, координатор по безопасности, рекрутер или сотрудник сообщества Liason. У вас должны быть дополнительные, кроме тех. Ваша Java программа создаст Employees, а затем украсит этих сотрудников во время выполнения.

Создайте абстрактный класс с именем Employee, с полями фамилии и описания и методом getDescription (). Создайте конкретный класс с именем SalariedEmployee, который расширяет Employee. Создайте абстрактный класс с именем ResponsibilityDecorator, который может украшать сотрудника и возвращать ответственность сотрудника в виде строки. У него будет абстрактный метод getDescription. Создайте несколько классов категорий заданий, которые расширяют класс ResponsibilityDecorator и реализуют метод getDescription ().

В основной тестовой программе создайте не менее 5 объектов Employee и передайте их конструкторам каждого из ваших классов декораторов. Первым сотрудником должен быть вы, поэтому используйте свою фамилию. Затем распечатайте каждого сотрудника, вызвав его метод getDescription (). Все сотрудники не должны иметь одинаковое количество обязанностей. Вывод программы должен выглядеть примерно так для каждого:

[LastName]: менеджер, рекрутер, CommunityLiaison, ProductionDesigner

Вот что я сделал до сих пор:

Сотрудник. java:

import java.util.*;

public abstract class Employee 
{
    String lastName, description;

    public String getDescription()
    {
        return description;
    }

}

SalariedEmployee. java:

import java.util.*;

public abstract class SalariedEmployee extends Employee
{
    String lastName, description;

    public abstract String getDescription();
}

ResponsibilityDecorator. java:

import java.util.*;

public abstract class ResponsibilityDecorator
{
    public String getDescription()
    {
        return employee.getDescription();
    }

    Employee employee;

    public Employee getEmployee() {
        return employee;
    }

    public void setEmployee(Employee employee) {
        this.employee = employee;
    }

    public boolean equals(Object obj) {
        return employee.equals(obj);
    }

    public int hashCode() {
        return employee.hashCode();
    }

    public String toString() {
        return employee.toString();
    }

    public ResponsibilityDecorator(Employee employee) {
        super();
        this.employee = employee;
    }

    public ResponsibilityDecorator() {
        super();
        // TODO Auto-generated constructor stub
    }
}

Родригес. java (первый класс сотрудника)

import java.util.*;

public abstract class Rodriguez extends ResponsibilityDecorator 
{
    Employee employee1;

    String lastName = "Rodriguez";
    String description = "Tech Support";

    public Rodriguez (Employee employee1)
    {
        this.employee = employee;
    }

    public String getDescription()
    {
        return description;
    }
}

Доу. java (второй класс сотрудника):

import java.util.*;

public abstract class Doe extends ResponsibilityDecorator 
{
    Employee employee2;

    String lastName = "Doe";
    String description = "Security Guard, Police Officer";

    public Doe (Employee employee2)
    {
        this.employee = employee;
    }

    public String getDescription()
    {
        return description;
    }
}

Джилл. java (третий объект сотрудника):

import java.util.*;

public abstract class Doe extends ResponsibilityDecorator 
{
    Employee employee2;

    String lastName = "Doe";
    String description = "Security Guard, Police Officer";

    public Doe (Employee employee2)
    {
        this.employee = employee;
    }

    public String getDescription()
    {
        return description;
    }
}

Мария. java (четвертый класс сотрудника):

import java.util.*;

public abstract class Maria extends ResponsibilityDecorator
{
    Employee employee4;

    String lastName = "Maria";
    String description = "Receptionist, Valet, Cashier, Restock";

    public Maria (Employee employee4)
    {
        this.employee = employee;
    }

    public String getDescription()
    {
        return description;
    }
}

Джеймс. java (пятый класс сотрудника):

import java.util.*;

public abstract class James extends ResponsibilityDecorator
{
    Employee employee5;

    String lastName = "James";
    String description = "Manager, CEO, Economy, President, Analytics";

    public James (Employee employee5)
    {
        this.employee = employee;
    }

    public String getDescription()
    {
        return description;
    }
}

Тест. java:

import java.util.*;

public class Test 
{

    public static void main(String[] args)
    {
        Employee employee1 = new Rodriguez();
        System.out.println("Rodriguez:" + 
                employee1.getDescription());

        Employee employee2 = new Doe();
        System.out.println("Doe" + 
                employee2.getDescription());

        Employee employee3 = new Jill();
        System.out.println("Jill:" + 
                employee3.getDescription());

        Employee employee4 = new Maria();
        System.out.println("Maria:" + 
                employee4.getDescription());

        Employee employee5 = new James();
        System.out.println("James:" + 
                employee5.getDescription());
    }
}

По какой-то причине он показывает ошибку несоответствия типов. Я искал по Inte rnet и даже спросил некоторых людей. Я перепробовал много исправлений, но они просто создают другую ошибку. Я не знаю, как решить эту проблему.

Ответы [ 3 ]

0 голосов
/ 06 апреля 2020

Кажется, здесь есть несколько проблем. Давайте go через текст назначения:

Создайте абстрактный класс с именем Employee, с полями фамилии и описания и методом getDescription ().

Это выглядит OK

Создайте конкретный класс с именем SalariedEmployee, который расширяет Employee.

Вы сделали SalariedEmployee абстрактным классом. Удалите abstract и внедрите метод getDescription.

Создайте абстрактный класс с именем ResponsibilityDecorator, который может украшать сотрудника и возвращать ответственность сотрудника в виде строки. У него будет абстрактный метод getDescription.

Согласно шаблону декоратора, с которым я знаком, ResponsibilityDecorator должен расширять Employee, если предполагается, что он «украшает сотрудника» - вас научили чему-то еще? ?

Из описания задачи я ожидаю увидеть:

abstract class ResponsibilityDecorator extends Employee {
    Employee employee;
    ResponsibilityDecorator(Employee e) { this.employee = e; }
    abstract String getDescription();
}

Создать несколько классов категорий заданий, которые расширяют класс ResponsibilityDecorator и реализуют метод getDescription ().

Вы не сделали этого, если не считаете Марию, Родригеса и др. c «категориями работы».

Категория работы «Менеджер» может выглядеть следующим образом:

class Manager extends ResponsibilityDecorator {
    Manager(Employee employee) { super(employee); }
    String getDescription() { return employee.getDescription() + " Manager"; }
}

В вашей основной тестовой программе создайте как минимум 5 объектов Employee

Возможно, вы перепутали этот шаг с предыдущим и создали 5 классов сотрудников (Maria, Rodriguez, ...) ?


Обратите внимание, что решение этого упражнения оставит профессиональных разработчиков почесывать голову, потому что это не разумный способ представлять категории работы или обязанности в программе.

0 голосов
/ 06 апреля 2020

Некоторые базовые c OOP концепции не совпадают в коде.
abstract class нельзя использовать при инициализации (как вы это сделали)
Employee employee1 = new Rodriguez();
Код строки в порядке, но ошибка получена из Rodriguez class
Попробуйте изменить класс def с помощью:
public class Rodriguez extends ResponsibilityDecorator
Это не решит проблему, так как нет никакого отношения между Rodriguez _ ResponsibilityDecorator (тип) и Employee (тип), но является шагом в понимании кода (только есть экземпляр var как Employee, встроенный в ResponsibilityDecorator. Он может быть использован для перепроектирования кода и создания ссылки с Employee, но я сомневаюсь, что вы будете следовать шаблону (отмечен как альтернативное решение)


Обычно все employees должны быть получены из Employee, тогда правильная корректировка кода будет public class Rodriguez extends Employee ... и после того, как код будет адаптирован. (Отсюда вы должны начать). Просто посмотрите снова на pattern.

Еще одна подсказка, правильная Name_Rodriguez не является адекватной class def, это больше похоже на свойство экземпляра. Например: Employee e1 = new CustomEmployee("Rodriguez","last name", age_int) и CustomEmployee это конкретный класс, который extends Employee ... (Сотрудник может быть abstract или interface)

0 голосов
/ 06 апреля 2020

Вы создаете экземпляры объектов типа Employee, но ни один из них не имеет отношения или не является потомком класса Employee согласно вашему коду.

Вы определили, что такое сотрудник Employee и Salary, но ни один из ваши люди объекты расширяет их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...