From 4d147ac953bc68f2daf4f283ba2ec7359ad8e7cf Mon Sep 17 00:00:00 2001 From: = <=> Date: Fri, 9 Apr 2021 16:41:51 +0530 Subject: [PATCH] Updated SRP, LSP and OCP files --- .../SOLID/lsp/stack/before/StackWrong.java | 19 +++++++++++---- .../before/client/CalculateTaxesClient.java | 4 ++-- .../before/employees/Employee.java | 2 ++ .../before/employees/FullTimeEmployee.java | 10 ++++++++ .../before/employees/Intern.java | 10 ++++++++ .../before/employees/PartTimeEmployee.java | 10 ++++++++ .../before/taxes/FullTimeEmpTaxCalculate.java | 20 ++++++++++++++++ .../before/taxes/InternTaxCalculator.java | 16 +++++++++++++ .../taxes/PartTimeEmployeeTaxCalculator.java | 20 ++++++++++++++++ .../before/taxes/TaxCalculator.java | 13 +++-------- .../before/Employee.java | 23 +++++-------------- .../before/EmployeeRepository.java | 18 +++++++++++++++ .../before/SaveEmployeesMain.java | 2 +- 13 files changed, 133 insertions(+), 34 deletions(-) create mode 100644 src/oops/SOLID/openClosePrinciple/before/taxes/FullTimeEmpTaxCalculate.java create mode 100644 src/oops/SOLID/openClosePrinciple/before/taxes/InternTaxCalculator.java create mode 100644 src/oops/SOLID/openClosePrinciple/before/taxes/PartTimeEmployeeTaxCalculator.java diff --git a/src/oops/SOLID/lsp/stack/before/StackWrong.java b/src/oops/SOLID/lsp/stack/before/StackWrong.java index 1170e573..9b8f5c95 100644 --- a/src/oops/SOLID/lsp/stack/before/StackWrong.java +++ b/src/oops/SOLID/lsp/stack/before/StackWrong.java @@ -14,19 +14,30 @@ * so objects of ArrayList are not fully replaceable by the objects of stack. * */ -public class StackWrong extends ArrayList{ +public class StackWrong{ private int topPointer = 0; + private ArrayList list = new ArrayList<>(); public void push(Integer a) { - add(topPointer, a); + list.add(topPointer, a); topPointer++; } public void pop() { - remove(topPointer-1); + if(topPointer == 0) + return; + list.remove(topPointer-1); topPointer--; } + + public void clear() { + list.clear(); + topPointer = 0; + } + public Integer top() { - return get(topPointer-1); + if(topPointer == 0) + return -1; + return list.get(topPointer-1); } public static void main(String[] args) { diff --git a/src/oops/SOLID/openClosePrinciple/before/client/CalculateTaxesClient.java b/src/oops/SOLID/openClosePrinciple/before/client/CalculateTaxesClient.java index 1651161c..66fbc694 100644 --- a/src/oops/SOLID/openClosePrinciple/before/client/CalculateTaxesClient.java +++ b/src/oops/SOLID/openClosePrinciple/before/client/CalculateTaxesClient.java @@ -26,10 +26,10 @@ public static void main(String[] args) { for (Employee employee: employees){ // compute individual tax - double tax = TaxCalculator.calculate(employee); + double tax = employee.taxCalculate(); String formattedTax = currencyFormatter.format(tax); // add to company total taxes - totalTaxes += TaxCalculator.calculate(employee); + totalTaxes += tax; } } } diff --git a/src/oops/SOLID/openClosePrinciple/before/employees/Employee.java b/src/oops/SOLID/openClosePrinciple/before/employees/Employee.java index a84b72a3..896eb010 100644 --- a/src/oops/SOLID/openClosePrinciple/before/employees/Employee.java +++ b/src/oops/SOLID/openClosePrinciple/before/employees/Employee.java @@ -57,5 +57,7 @@ public void setNbHoursPerWeek(int nbHoursPerWeek) { public String getFullName(){ return this.firstName + " " + this.lastName; } + + public abstract double taxCalculate(); } diff --git a/src/oops/SOLID/openClosePrinciple/before/employees/FullTimeEmployee.java b/src/oops/SOLID/openClosePrinciple/before/employees/FullTimeEmployee.java index cd9e9384..ae6819ff 100644 --- a/src/oops/SOLID/openClosePrinciple/before/employees/FullTimeEmployee.java +++ b/src/oops/SOLID/openClosePrinciple/before/employees/FullTimeEmployee.java @@ -1,8 +1,18 @@ package oops.SOLID.openClosePrinciple.before.employees; +import oops.SOLID.openClosePrinciple.before.taxes.FullTimeEmpTaxCalculate; +import oops.SOLID.openClosePrinciple.before.taxes.TaxCalculator; + public class FullTimeEmployee extends Employee { public FullTimeEmployee(String fullName, int monthlyIncome) { super(fullName, monthlyIncome); this.setNbHoursPerWeek(40); } + + @Override + public double taxCalculate() { + // TODO Auto-generated method stub + TaxCalculator calculator = new FullTimeEmpTaxCalculate(); + return calculator.calculate(this); // Employee emp = new FullTimeEmployee() + } } diff --git a/src/oops/SOLID/openClosePrinciple/before/employees/Intern.java b/src/oops/SOLID/openClosePrinciple/before/employees/Intern.java index 80191de2..ec2e6769 100644 --- a/src/oops/SOLID/openClosePrinciple/before/employees/Intern.java +++ b/src/oops/SOLID/openClosePrinciple/before/employees/Intern.java @@ -1,8 +1,18 @@ package oops.SOLID.openClosePrinciple.before.employees; +import oops.SOLID.openClosePrinciple.before.taxes.InternTaxCalculator; +import oops.SOLID.openClosePrinciple.before.taxes.TaxCalculator; + public class Intern extends Employee { public Intern(String fullName, int monthlyIncome, int nbHours) { super(fullName, monthlyIncome); setNbHoursPerWeek(nbHours); } + + @Override + public double taxCalculate() { + // TODO Auto-generated method stub + TaxCalculator calculator = new InternTaxCalculator(); + return calculator.calculate(this); + } } diff --git a/src/oops/SOLID/openClosePrinciple/before/employees/PartTimeEmployee.java b/src/oops/SOLID/openClosePrinciple/before/employees/PartTimeEmployee.java index 5c491175..bbe6b4e4 100644 --- a/src/oops/SOLID/openClosePrinciple/before/employees/PartTimeEmployee.java +++ b/src/oops/SOLID/openClosePrinciple/before/employees/PartTimeEmployee.java @@ -1,8 +1,18 @@ package oops.SOLID.openClosePrinciple.before.employees; +import oops.SOLID.openClosePrinciple.before.taxes.PartTimeEmployeeTaxCalculator; +import oops.SOLID.openClosePrinciple.before.taxes.TaxCalculator; + public class PartTimeEmployee extends Employee { public PartTimeEmployee(String fullName, int monthlyIncome) { super(fullName, monthlyIncome); this.setNbHoursPerWeek(20); } + + @Override + public double taxCalculate() { + // TODO Auto-generated method stub + TaxCalculator calculator = new PartTimeEmployeeTaxCalculator(); + return calculator.calculate(this); + } } \ No newline at end of file diff --git a/src/oops/SOLID/openClosePrinciple/before/taxes/FullTimeEmpTaxCalculate.java b/src/oops/SOLID/openClosePrinciple/before/taxes/FullTimeEmpTaxCalculate.java new file mode 100644 index 00000000..644dd561 --- /dev/null +++ b/src/oops/SOLID/openClosePrinciple/before/taxes/FullTimeEmpTaxCalculate.java @@ -0,0 +1,20 @@ +package oops.SOLID.openClosePrinciple.before.taxes; + +import oops.SOLID.openClosePrinciple.before.employees.Employee; + +public class FullTimeEmpTaxCalculate implements TaxCalculator{ + + private final static int INCOME_TAX_PERCENTAGE = 30; + private final static int PROFESSIONAL_TAX_PERCENTAGE = 2; + private final static int EDUCATION_CESS = 1; + + @Override + public double calculate(Employee emp) { + // TODO Auto-generated method stub + return + (emp.getMonthlyIncome() * PROFESSIONAL_TAX_PERCENTAGE * 12) / 100 + + (emp.getMonthlyIncome() * INCOME_TAX_PERCENTAGE * 12) / 100 + + (emp.getMonthlyIncome() * EDUCATION_CESS * 12) / 100; + } + +} diff --git a/src/oops/SOLID/openClosePrinciple/before/taxes/InternTaxCalculator.java b/src/oops/SOLID/openClosePrinciple/before/taxes/InternTaxCalculator.java new file mode 100644 index 00000000..69b66c5e --- /dev/null +++ b/src/oops/SOLID/openClosePrinciple/before/taxes/InternTaxCalculator.java @@ -0,0 +1,16 @@ +package oops.SOLID.openClosePrinciple.before.taxes; + +import oops.SOLID.openClosePrinciple.before.employees.Employee; + +public class InternTaxCalculator implements TaxCalculator{ + + @Override + public double calculate(Employee emp) { + int income = emp.getMonthlyIncome(); + if(income * 12 < 300000) + return 0; + else + return (income * 12 * 15)/100; + } + +} diff --git a/src/oops/SOLID/openClosePrinciple/before/taxes/PartTimeEmployeeTaxCalculator.java b/src/oops/SOLID/openClosePrinciple/before/taxes/PartTimeEmployeeTaxCalculator.java new file mode 100644 index 00000000..27ab33c4 --- /dev/null +++ b/src/oops/SOLID/openClosePrinciple/before/taxes/PartTimeEmployeeTaxCalculator.java @@ -0,0 +1,20 @@ +package oops.SOLID.openClosePrinciple.before.taxes; + +import oops.SOLID.openClosePrinciple.before.employees.Employee; + +public class PartTimeEmployeeTaxCalculator implements TaxCalculator{ + + private final static int INCOME_TAX_PERCENTAGE = 20; + private final static int PROFESSIONAL_TAX_PERCENTAGE = 3; + private final static int EDUCATION_CESS = 1; + + @Override + public double calculate(Employee emp) { + // TODO Auto-generated method stub + return + (emp.getMonthlyIncome() * PROFESSIONAL_TAX_PERCENTAGE * 12) / 100 + + (emp.getMonthlyIncome() * INCOME_TAX_PERCENTAGE * 12) / 100 + + (emp.getMonthlyIncome() * EDUCATION_CESS * 12) / 100; + } + +} diff --git a/src/oops/SOLID/openClosePrinciple/before/taxes/TaxCalculator.java b/src/oops/SOLID/openClosePrinciple/before/taxes/TaxCalculator.java index ab0300be..2e669c95 100644 --- a/src/oops/SOLID/openClosePrinciple/before/taxes/TaxCalculator.java +++ b/src/oops/SOLID/openClosePrinciple/before/taxes/TaxCalculator.java @@ -2,15 +2,8 @@ import oops.SOLID.openClosePrinciple.before.employees.Employee; -public class TaxCalculator { - private final static int INCOME_TAX_PERCENTAGE = 20; - private final static int PROFESSIONAL_TAX_PERCENTAGE = 3; +public interface TaxCalculator { - - public static double calculate(Employee employee) { - return - (employee.getMonthlyIncome() * PROFESSIONAL_TAX_PERCENTAGE) / 100 + - (employee.getMonthlyIncome() * INCOME_TAX_PERCENTAGE) / 100; - - } + double calculate(Employee emp); + } \ No newline at end of file diff --git a/src/oops/SOLID/singleResponsibilityPrinciple/before/Employee.java b/src/oops/SOLID/singleResponsibilityPrinciple/before/Employee.java index a742fac0..befb2598 100644 --- a/src/oops/SOLID/singleResponsibilityPrinciple/before/Employee.java +++ b/src/oops/SOLID/singleResponsibilityPrinciple/before/Employee.java @@ -1,10 +1,5 @@ package oops.SOLID.singleResponsibilityPrinciple.before; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - /* Models an employee form a business perspective */ @@ -53,7 +48,7 @@ public int getNbHoursPerWeek() { public void setNbHoursPerWeek(int nbHoursPerWeek) { if(nbHoursPerWeek <= 0){ - throw new IllegalArgumentException("Income must be positive"); + throw new IllegalArgumentException("Number of working hours per week must be positive"); } this.nbHoursPerWeek = nbHoursPerWeek; @@ -63,9 +58,9 @@ public String getFullName(){ return this.firstName + " " + this.lastName; } - public void save(){ - try { - Employee employee =this; + public String serializeData(){ + + Employee employee = this; StringBuilder sb = new StringBuilder(); sb.append("### EMPLOYEE RECORD ####"); sb.append(System.lineSeparator()); @@ -82,13 +77,7 @@ public void save(){ sb.append(employee.monthlyIncome); sb.append(System.lineSeparator()); - Path path = Paths.get(employee.getFullName() - .replace(" ","_") + ".rec"); - Files.write(path, sb.toString().getBytes()); - - System.out.println("Saved employee " + employee.toString()); - } catch (IOException e){ - System.out.println("ERROR: Could not save employee. " + e); - } + + return sb.toString(); } } diff --git a/src/oops/SOLID/singleResponsibilityPrinciple/before/EmployeeRepository.java b/src/oops/SOLID/singleResponsibilityPrinciple/before/EmployeeRepository.java index b76f4589..94c0f3a5 100644 --- a/src/oops/SOLID/singleResponsibilityPrinciple/before/EmployeeRepository.java +++ b/src/oops/SOLID/singleResponsibilityPrinciple/before/EmployeeRepository.java @@ -1,5 +1,9 @@ package oops.SOLID.singleResponsibilityPrinciple.before; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.Arrays; import java.util.List; @@ -15,5 +19,19 @@ public List findAll(){ Employee magda = new PartTimeEmployee("Magda Iovan", 920); return Arrays.asList(anna, billy, steve, magda); + + } + + public void save(Employee emp) { + try { + String serializedData = emp.serializeData(); + Path path = Paths.get(emp.getFullName() + .replace(" ","_") + ".rec"); + Files.write(path, serializedData.getBytes()); + + }catch (IOException e){ + System.out.println("ERROR: Could not save employee. " + e); + } + } } \ No newline at end of file diff --git a/src/oops/SOLID/singleResponsibilityPrinciple/before/SaveEmployeesMain.java b/src/oops/SOLID/singleResponsibilityPrinciple/before/SaveEmployeesMain.java index 3e30e5e9..3d69ce39 100644 --- a/src/oops/SOLID/singleResponsibilityPrinciple/before/SaveEmployeesMain.java +++ b/src/oops/SOLID/singleResponsibilityPrinciple/before/SaveEmployeesMain.java @@ -10,7 +10,7 @@ public static void main(String[] args) { // Save all for (Employee e : employees){ - e.save(); + repository.save(e); } } } \ No newline at end of file