【问题标题】:How to add new Employee without declaring a lot of object names如何在不声明大量对象名称的情况下添加新员工
【发布时间】:2018-03-18 04:13:34
【问题描述】:

我有一个小任务,使用 OOP 方法添加和显示工作中不同类型的员工(不同部门)以及不同的薪水和福利。我不太确定我的代码在代码重用方面是否正确以及我是否真的符合 OOP 编码方法......到目前为止,我已经为每个类型/部门显示了 1 名员工,我将它们作为类名。(请参阅下面的代码)。我的问题是,如果我添加一个新员工,我将再次声明另一个 Employee 类型的对象。如果有很多员工,我就会有很多东西。我该如何减少这种情况,我是否可以知道我的 OOP 编码方法到目前为止是否正确?非常喜欢!这是我的代码:

        //this is my parent class which implements an interface...
        public abstract class Employees implements ICompensation{
        private String fname;
        private String lname;
        private char gender;
        private String address;
        private double salary;

        public String getfname(){
            return this.fname;
        }

        public void setfname(String fname){
            this.fname = fname;
        }

        public String getLname() {
            return lname;
        }

        public void setLname(String lname) {
            this.lname = lname;
        }

        public char getGender() {
            return gender;
        }

        public void setGender(char gender) {
            this.gender = gender;
        }

        public String getAddress() {
            return address;
        }

        public void setAddress(String address) {
            this.address = address;
        }

        public double getSalary() {
            return salary;
        }

        public void setSalary(double salary) {
            this.salary = salary;
        }
        }

    // this is a Developer type of employee

        public class Developer extends Employees{

        public Developer(String fname,String lname, char gender,String address, double salary){
            setfname(fname);
            setLname(lname);
            setGender(gender);
            setAddress(address);
            setSalary(salary);
        }

        @Override
        public double calculateSalary() {
            double salary = getSalary();
            salary += 10;
            return salary;
        }

        @Override
        public void print() {
            System.out.println(this.getClass());
            System.out.println(this.getfname());
            System.out.println(this.getLname());
            System.out.println(this.getGender());
            System.out.println(this.getAddress());
            System.out.println(this.calculateSalary());}}

    //this is QA type of employee

        public class QA extends Employees{

        public QA(String fname,String lname,char gender,String address,double salary) {
            setfname(fname);
            setLname(lname);
            setGender(gender);
            setAddress(address);
            setSalary(salary);
        }

        @Override
        public double calculateSalary() {
            double salary = getSalary();
            salary = salary + 20;
            return salary;

        }

        @Override
        public void print() {
            System.out.println(this.getClass());
            System.out.println(this.getfname());
            System.out.println(this.getLname());
            System.out.println(this.getGender());
            System.out.println(this.getAddress());
            System.out.println(this.calculateSalary()); 
        }
        }

我还有另外 2 个类,它们是 BA 和 Manager 类,但我不会在这里包括,因为它只是与另一个派生类具有相同的内容。

    //so here is my Interface
        public interface ICompensation {
        double calculateSalary();
        void print();
        }

    //and here is my main method.
    import java.util.*;

public class main {
    public static void main(String[] args){
        Employees dev = new Developer("Janel","Logrono",'M',"Alabang",491);
        Employees qa = new QA("juan","Sir",'M',"Taguig",1240);
        Employees ba = new BA("pedro","Lyn",'F',"Taguig",1150);
        Employees manager = new Manager("sebastian","rods",'M',"USA",555399);

        ArrayList<Employees> ls = new ArrayList<>();    
        ls.add(dev);
        ls.add(qa);
        ls.add(ba);
        ls.add(manager);

        for(Employees e : ls){
            e.print();
            System.out.println();
        }
    }
}

如何在没有声明很多对象的情况下添加另一个员工,我可以知道我的 OOP 编码方法到目前为止是否正确,我认为这里有很多冗余代码,如何减少它?谢谢!

【问题讨论】:

  • "...添加另一个员工而不声明很多对象..." 您如何定义“很多”?你认为你到底有什么太多?
  • 开发人员和 QA 之间有什么不同,以至于您需要不同的类来处理它?如果你需要处理一个看门人,你会喜欢实现一个新类的需要吗?还是首席执行官?当您的开发人员加入 QA 团队时会发生什么(可能只是一两周)?员工的“类型”更可能是员工类的字段,而不是类的层次结构(可能将其命名为“角色”或“职位”)
  • 也许你想用ls.add(new Developer("Janel","Logrono",'M',"Alabang",491));这样的东西来减少你的代码行数
  • @KevinAnderson 我将有很多对象类型的员工,比如员工 dev1,那么如果我要添加另一个我将声明另一个员工 dev2;这将变得太多权利
  • @S.Piller 那么这是否意味着我只有一个班级只有雇员(父班级)?

标签: java eclipse oop jakarta-ee


【解决方案1】:

首先,您不应该在 bean 类中实现 ICompensation。 Bean 类将只包含 getter、setter 和构造函数。您需要创建另一个将实现 ICompensation 的类。在那里,您将编写用于计算和其他方法的代码。

在数据库中,您可以添加另一列“角色”来定义员工角色。通过这种方法,您不需要创建额外的方法,例如 QA、Developer、Manager。

请查看以下链接。在这里,他们尝试使用 MVC 模型开发登录页面。您可以忽略 jsp 页面并专注于控制器和 bean。 https://krazytech.com/programs/a-login-application-in-java-using-model-view-controllermvc-design-pattern

【讨论】:

  • 谢谢!生病看看那个链接。但是什么是bean类顺便说一句,我还不知道,为什么它不应该实现接口?
  • 您好,很抱歉迟到了。首先让我告诉你关于 bean 类。它是一个可重用的软件组件。一个 bean 将许多对象封装成一个对象,因此我们可以从多个地方访问这个对象。此外,它还提供了简单的维护。一个bean类可以实现接口。但不是你的情况。你在这里不需要它。请查看谷歌的详细信息。
猜你喜欢
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 2021-12-18
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多