2017-10-06 14 views
-2

我有一项小小的任务,使用面向对象方法在工作中添加和显示不同类型的员工(差异部门)和不同的工资。我很不确定我的代码在代码重用方面是否正确&如果我真的符合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 &经理类,但我不会在这里包括,因为它只是具有相同的内容到其他派生类。

//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(); 
     } 
    } 
} 

如何添加其他员工W/O宣布大量的对象,我知道如果我的OOP编码的做法是正确的,到目前为止,我认为在这里有很多的冗余代码,如何减少呢?谢谢!

+0

“...添加另一名员工,但没有声明很多对象......”您如何定义“很多”?你觉得你有多少? –

+0

开发者和质量保证部门之间有什么不同,您需要一个不同的类来处理它?如果您需要处理看门人,您是否会喜欢实施新班级的需要?还是首席执行官?当您的开发人员加入QA团队(可能只是一两个星期)会发生什么?雇员的“类型”更可能是你的雇员类中的一个领域,而不是类的层次结构(可能将其命名为“角色”或“职位”) – spi

+0

也许你想用'ls.add之类的东西来减少你的代码行(新开发人员(“Janel”,“Logrono”,'M',“Alabang”,491));' – fantaghirocco

回答

-1

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

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

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

+0

谢谢!生病了看那个链接。但是什么是bean类btw,我还不知道,为什么它不应该实现一个接口? – LogronJ

+0

你好,我很抱歉迟到了。首先让我告诉你关于bean类。它是一个可重用的软件组件。一个bean将许多对象封装到一个对象中,所以我们可以从多个地方访问这个对象。而且,它提供了易于维护。 一个bean类可以实现接口。但不是在你的情况。你在这里不需要它。请查看Google的详细信息表单。 –

相关问题