gpt4 book ai didi

java - 我正在尝试测试封装,如果我调用 new Object 来测试是否计数?

转载 作者:行者123 更新时间:2023-11-30 05:26:38 26 4
gpt4 key购买 nike

我正在尝试测试封装。

我创建了两个对象“部门”和“员工”。

部门传递一个 Employee 实例,然后为了测试封装,我遵循以下规则

1.显示员工详细信息

2.显示部门详细信息

3.更改 Employee 对象中的值

4.再次显示部门详细信息(信息不应更改)

5.再次显示员工详细信息(此处应更改信息)。

这可行,但是我通过创建employee1的新实例来理解封装的想法是错误的吗???

或者

我应该设置真正封装​​的值

employee1.setName("Sam")

这会将部门名称的第二个 display() 调用更改为 Sam。

//Main
package question1;

public class Test {

public static void main(String[] args) {
//Creating a instance of both Employee and Department
Employee employee1 = new Employee("2726354E", "Bob Ings", 30000 );
Department mainDepartment = new Department("Main Floor", employee1);

//Displaying both instances of Employee and Department
employee1.display();
mainDepartment.display();

System.out.println("");


//Changing values in constructor for the instance of Employee we made earlier on
employee1 = new Employee("626347B", "Sam O'Conor", 24000);

mainDepartment.display();

System.out.println("");
System.out.println("");

employee1.display();

}

}



//Employee Class
package question1;

public class Employee {
private String ppsNum;
private String name;
private double salary;

//Parameterized constructor
public Employee(String ppsNum, String name, double salary) {
this.ppsNum = ppsNum;
this.name = name;
this.salary = salary;
}

//Displaying the instance of the object information in a anesthetically pleasing manner
public void display() {
System.out.println("Employee Information");
seperationLine();
System.out.println("Name: " + getName());
seperationLine();
System.out.println("PPS number: " + getPpsNum());
seperationLine();
System.out.println("Salary: " + getSalary() + "0");
seperationLine();
System.out.println("\n");


}}

//Department Class
package question1;

public class Department {
private String deptName;
private Employee employee;
private int officeNumber;

//Constructor with all three parameters
public Department(String deptName, Employee employee, int officeNumber) {

this.deptName = deptName;
this.employee = employee;
this.officeNumber = officeNumber;
}

//Constructor with the officeNumber set to 0
public Department(String deptName, Employee employee) {

this.deptName = deptName;
this.employee = employee;
this.officeNumber = 0;
}

//Displaying the instance of the object information in a anesthetically pleasing manner
public void display() {
System.out.println("Department");
Employee.seperationLine();
System.out.println("Department Name: " + getDeptName());
Employee.seperationLine();
System.out.println("Employee: " + employee.toString());
Employee.seperationLine();
System.out.println("Office Number: " + getOfficeNumber());

}

}

最佳答案

不存在“测试”封装之类的东西。

您无需编写任何代码来确定您的类是否正确遵循封装原则。封装是面向对象的分析和设计指南。不是编程功能。

<小时/>

良好的封装意味着您遵循两个步骤:

  1. 所有相关信息应保存在一起。例如:员工应仅包含员工信息,部门应仅包含部门信息。员工不应存储特定部门所在的楼层。或者 Even 不应该有一个名为 seperationLine() 的方法。 (IMO, seperationLine() 方法属于另一个 Presentor 类)
  2. 仅应公开所需的信息。其余所有信息均应保密或 protected 。目的不是保密,而是防止外部参与者修改他们不应该修改的信息而出现潜在问题。例如:员工不应设置部门楼层。

只需查看 Employee 类,并将所有您认为外部不应该访问的字段和方法设置为私有(private)。此外,对于部门需要从 Employee 获取的信息,请在 Employee 类中创建一个部门可以调用的方法。这样,员工就不能被部门修改,但可以访问它需要的信息。

关于java - 我正在尝试测试封装,如果我调用 new Object 来测试是否计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58442001/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com