如何处理Java面向对象程序



我是一名大学生,目前正在学习Java OOP。我被赋予了一项相当艰巨的任务OOP是一个非常新的东西,它被证明是非常困难的。我将首先概述我被要求做什么&然后是我目前使用它的详细信息。

我们被要求实施的计划是医生手术管理的应用程序医生与医生之间的关系;病人。需要一个完全可操作的GUI,但我现在将避免启动它,因为它只会使事情复杂化。

以下是任务规范:


"开发一个应用程序来管理医生的手术。

  1. 医生必须通过身份验证才能访问系统
  2. 当医生登录时,他们会收到一份患者名单
  3. 医生需要查看患者的详细信息,更新患者详细信息,添加新患者。a.患者详细信息包括姓名、地址、号码、患者病史(每次就诊/手术/严重疾病的详细信息+日期)b.在第8周之前,我们将使用数组列表来存储数据。这将在关闭时持久化到一个文件中,并在启动时加载。c.第8周后,应使用数据库替换数组列表和以前用于持久化的任何文件
  4. 医生应该能够在患者姓名或患者id下搜索患者
  5. 备份和恢复:如果发生数据库损坏或毁坏的灾难,则需要从备份中恢复系统。医生需要能够将所有系统信息备份到一个文件中,并在必要时从该文件中恢复。文件应标有备份日期,备份应每周进行一次
  6. 应生成两份报告,一份是系统中所有患者的列表,然后是他们的病史(按患者姓名的字母顺序排列),另一份是在特定日期之间就诊的所有患者的报告,按日期排序。">

到目前为止,我已经成功创建了这些类,我的代码如下(我们已经得到了可以使用的类图)。

手术类别(主要):

import java.util.*;
import java.util.Date;
public class surgery
{
private int surgeryId;
private String surgeryAdd;    
public surgery(int surgeryId, String surgeryAdd)
{
this.surgeryId = surgeryId;
this.surgeryAdd = surgeryAdd;
}
public void setId (int surgeryId) {            
this.surgeryId = surgeryId;                 
}
public void setSurgeryAdd (String surgeryAdd) {             
this.surgeryAdd = surgeryAdd;             
}
public int getId () {         
return surgeryId;         
}
public String getSurgeryAdd () {         
return surgeryAdd;         
}                              
public static void main(String[] args) {                         
System.out.println("Add doctor, enter name: ");
Scanner kbd = new Scanner (System.in);
//User inputs name
String enteredName = kbd.nextLine();
//Object is then created with an ID number and the name the user entered:
Doctor one = new Doctor (1, enteredName);
//Create ArrayList to store Doctor objects:
ArrayList<Doctor> myDoctors = new ArrayList();
//Add the first doctor to ArrayList:
myDoctors.add(one);
//Print out the doctors array.
System.out.print(myDoctors);                                                                         
}                  
}

医生级别:

import java.util.*;
public class Doctor
{
private int doctorId;
private String doctorName;
ArrayList <Patient> patients = new ArrayList();            
public Doctor(int doctorId, String doctorName)
{
this.doctorId = doctorId ;
this.doctorName = doctorName;             
}
public void setId (int doctorId) {             
this.doctorId = doctorId;         
}
public void setName (String doctorName) {         
this.doctorName = doctorName;         
}
public int getId (){         
return doctorId;         
}
public String getName () {         
return doctorName;             
}
public String toString () {         
return "Doctor ID: "+doctorId+", Doctor name: "+doctorName;         
}                
public void addPatient (int patientId, String name, String address, String phoneNumber, Date DOB ) {
Scanner kbd = new Scanner (System.in);
System.out.print("Enter a patient ID: ");
int id = kbd.nextInt();
kbd.nextLine();             
System.out.print("Enter patient Name: ");
String patientName = kbd.nextLine();

System.out.print("Enter Address:");
String patientAddress = kbd.nextLine();

System.out.print("Enter the phone num:");
String num = kbd.nextLine();

Date dateOfBirth = new Date(1);
Patient pat = new Patient(id, patientName, patientAddress, num, dateOfBirth);
patients.add(pat);
System.out.println(patients);                                              
}

患者类别:

import java.util.*;
public class Patient
{
private int patientId;
private String patientName;
private String patientAddress;
private String patientPhone;
private Date patientDOB;                  
public Patient(int patientId, String patientName, String patientAddress, String patientPhone, Date patientDOB)
{
// initialise instance variables
this.patientId = patientId;
this.patientName = patientName;
this.patientAddress = patientAddress;
this.patientPhone = patientPhone;
this.patientDOB = patientDOB;
}
public void setId (int patientId) {
this.patientId = patientId;
}
public void setName (String patientName){
this.patientName = patientName;
}
public void setAddress (String patientAddress){
this.patientAddress = patientAddress;
}
public void setPhone (String patientPhone){
this.patientPhone = patientPhone;
}
public void setDOB (Date patientDOB){
this.patientDOB = patientDOB;
}
public int getId () {
return patientId;
}
public String getName () {
return patientName;   
}
public String getAddress () {
return patientAddress;
}
public String getPhone () {
return patientPhone;
}
public Date getDOB () {
return patientDOB;
}


}                        
}

患者病史类别:

import java.util.*;
public class patientHistory
{
int historyId;
int patientId;
int doctorId;
Date visitDate;
String description;
String medicine;
String procedure;                
public patientHistory(int historyId, int patientId, int doctorId, Date visitDate, String description, String medicine, String procedure)
{
this.historyId = historyId;
this.patientId = patientId;
this.doctorId = doctorId;
this.visitDate = visitDate;
this.description = description;
this.medicine = medicine;
this.procedure = procedure;
}
public void setHistoryId (int historyId){
this.historyId = historyId;
}
public void setPatientId (int patientId) {
this.patientId = patientId;
}

public void setDoctorId (int doctorId) {
this.doctorId = doctorId;
}
public void setVisitDate (Date visitDate){
this.visitDate = visitDate;
}
public void setDescription (String description) {
this.description = description;
}
public void setmedicine (String medicine){
this.medicine = medicine;
}
public void setProcedure (String procedure){
this.procedure = procedure;
}
public int getHistoryId () {
return historyId;
}
public int getPatientId () {
return patientId;
}
public int getDoctorId () {
return doctorId;
}
public Date getVisitDate () {
return visitDate;

}
public String getDescription () {
return description;
}
public String getMedicine () {
return medicine;
}
public String getProcedure () {
return procedure;
}                           
}

当我第一次做过程编程时,我也很吃力,但最终还是很好地掌握了大部分概念。有了OOP,我感觉自己又回到了原点,我搜索的每一个答案似乎都会让它变得更加复杂。我理解OOP的结论,但很难实现。我常常不知道该把东西放在哪里。

例如,在医生课上,我做了第一种方法。(addPatient)但我根本不知道如何建立医生和病人之间的关系。我不明白在哪里可以称这种方法(是手术类(主要),医生类本身等等)

我不是在问代码,我基本上是在寻求如何从这里开始的建议,因为这将在大约4周后到期。

谢谢。

尝试将类视为完全隔离的组件,这将提高OOP的可重用性。问问自己实现是否能在不同的环境中工作。例如,Doctor.addPatient()不应提示您要添加的患者的详细信息(该信息已作为参数提供给您)。

一旦你确定了主要元素,就想一想如何把所有东西粘在一起。正如其他人所指出的,你应该看看设计模式(例如MVC,它在处理GUI时很好)。

您采用的方法是从头开始编写代码。首先花点时间思考一下你将要制作什么并设计你的应用程序。两个提示:1.创建UML图(你只有类图?)2.定义您的领域模型

你们会发现事情可能和你们最初想的不一样。

您必须考虑类的角色。我看到Doctor.addPatient()接受用户的输入,但它不是用户的角色。相反,UI代码(在您的情况下,是主方法)应该创建患者,然后使用新患者作为参数调用addPatient()。这样,当您制作GUI时,Doctor类仍然可以工作。

要以最佳方式进行面向对象编程,您应该了解各种设计模式。了解各种创造性设计模式、行为设计模式和结构设计模式对构建任何问题的解决方案都有很大帮助。

最新更新