2012-02-14 13 views
1

私はオブジェクト指向設計を初めて学び、それを学ぶ過程にあります。 列車予約システムのクラスを設計しましたが、メイン予約クラスのモデル作成方法はわかりません。列車予約システムのクラスを設計する

これは私のデザインがどのように見えるかです:

public class Station { 
    private int stationID; 
    private String stationName; 

    // Getters and Setters 
} 

public class Train { 
    private int trainID; 
    private String trainName; 
    private Map<Station, Double> trainStationsWithFares; 

    public Train(int ID, String trainName, Station[] stations) { 
    // Initialize ID and name and create a hashmap with all stations and 
    // zero fare initially for all stations. 
    .... 
    trainStationsWithFares = new HashMap<Station, Double>(); 
    for(Station s : stations) trainStationsWithFares.put(s, new Double(0.0)); 
    } 

    // Getters and Setters (including methods to add new stations with fares and 
    // update fares of existing stations 
} 

public class Passenger { 
    private String Name; 
    private int id; 
    private int age; 
    private static final enum { Male, Female } gender; 
} 

public class TicketDetails { 
    private Train t; 
    private Station from; 
    private Station to; 
    private Passenger passenger; 

    // Getters and Setters 
} 

public class TrainTicket { 
    private int ID; 
    private TicketDetails ticketDetails; 
    private Double fare; 

    public TrainTicket(TicketDetails ticketDetails) 
     throws InvalidTrainException, InvalidFromStationException, 
      InvalidToStationException { 
     ... 
     calculateFare(); 
    } 

    // Calculates fare based on Train and from and to Stations and taxes, etc. 
    private void calculateFare() { 
     this.fare = ... 
    } 
} 

// Assuming card payment only for online reservation system for simplicity. 
// Design can be modified and enhanced suitably. 
public class PaymentDetails { 
    private String cardNumber; 
    private String cardExpirationMonth; 
    private String cardExpirationYear; 
    private String cardCVV; 

    // Getters and Setters 
} 


マイ質問:私の予約クラスは、次のようになりますか? もしそうなら、このクラスのメソッドは、TrainTicket,PaymentDetailsのような他のクラスのオブジェクトにどのようにアクセスしますか?

public abstract class ReservationSystem { 

    // Purchase train ticket by providing ticket details and payment details. 
    public abstract TrainTicket purchaseTicket(TicketDetails ticketDetails, 
     PaymentDetails paymentDetails);  

    // Cancel existing train ticket by providing ticket reference and payment details 
    // for cancellation charges. 
    public abstract boolean cancelTicket(TrainTicket tt, PaymentDetails details); 

    // Modify existing train ticket by providing existing ticket reference,new ticket 
    // details and payment details for any additional charge or modify charges. 
    public abstract TrainTicket modifyTicket(TrainTicket existingTicket, 
     TicketDetails newTicketDetails, PaymentDetails paymentDetails) { 
    } 
} 


それとも、次のようになります。

public class ReservationSystem{ 
    private Map<trainId, Train> trains; 
    private Ticketdetails ticketdetails; 
    private PaymentDetails paymentDetails; 
    private TrainTicket tt; 

    public vector<Train> getTrain(TicketDetails ticketdetails); 
    public TrainTicket purchaseTicket(TicketDetails ticketDetails, 
     PaymentDetails paymentDetails);  
    public boolean cancelTicket(TrainTicket tt, PaymentDetails details); 
    public TrainTicket modifyTicket(TrainTicket existingTicket, 
     TicketDetails newTicketDetails, PaymentDetails paymentDetails); 
} 


私はどのようにメインの予約クラスはメソッドと他のクラスのメンバーにアクセスする必要があるかを知りたいです。

ありがとうございます。

+3

これは、C++ではありません。説明なし – Pubby

+2

http://codereview.stackexchange.com/ – Sikorski

答えて

0

前者のアプローチでは、ReservationSystemクラスはabstractです。つまり、インスタンス化できませんが、メソッドにアクセスするにはサブクラス化する必要があります。予約システムが1種類しかない場合は、抽象クラスを作成する必要はありません。それ以外の場合は、ReservationSystemクラスに指定した2つの選択肢に違いはありません。 2番目の質問に来

私はメインの予約クラスのアクセスすべきメソッドや他のクラス

TrainStationTrainTicketクラスのメンバーは、公共公開すべき方法を知りたいですアクセサー(ゲッターとセッター)とそのデータにアクセスするメソッドあなたが示されていないとして、あなたは(など予約したチケットなど)の予約情報を格納するデータベースを使用しているかどうか、あなたはMapのようなデータ構造がそこに格納する必要があり、それ自体は、IE ReservationSystemクラスの予約情報を永続化する必要があります。予約されたチケット(Ticket.Idが最も有望なキーとなります)、キャンセルされたチケットなどです。 bookTicket()に電話すると、Mapにチケットが追加され、cancelTicket()にはMapからチケットが削除されます。

さらに、ReservationSystemは、有効な列車と各インスタンスに関連付けられたステーションのリストも維持する必要があります。システムとのすべての対話は、ReservationSystemクラスのインスタンスを介して行われます。

-1
import java.util.*; 
import javax.swing.JOptionPane; 
/* 
@Author 12CSE54 
@ Date 29.10.14 
*/ 

public class reservation extends javax.swing.JFrame { 
Scanner s=new Scanner(System.in); 
List arr1=new ArrayList(); 
    Set<Integer> arr= new HashSet<Integer>(); 

static String aa,bb,cc; 
static int ag; 
static int pp; 
    /** Creates new form reservation */ 
    public reservation() { 
     initComponents(); 
    } 
    public reservation(String na,int ag,String from,String to) 
    { 
    aa=na; 
    bb=from; 
    cc=to; 
    pp=ag; 

    } 
int var,c=0; 
     int b; 

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {           
     b=Integer.parseInt(JOptionPane.showInputDialog(this,"Enter the seat number")); 

     Iterator<Integer> itr=arr.iterator(); 
     while(itr.hasNext()) 
     { 
       var=itr.next(); 
       if(b==var) 
       { 
     JOptionPane.showMessageDialog(this,"ticket already reserved"); 
        c=0; 
        break; 
       } 
       else 
       { 
        c=1; 
       } 
     } 

       if(c==1) 
       { 
        JOptionPane.showMessageDialog(this,"Ticket Available Ticket Booked for you"); 
       } 
     arr.add(b); 
     JOptionPane.showMessageDialog(this,"booked sucessfully"); 
}           
int[] a=new int[100]; 
     Iterator itr=arr1.iterator();  
     int flag1=-1,f=0; 
      int b1; 
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {           

    b1=Integer.parseInt(JOptionPane.showInputDialog(this,"Enter the seat number allocated to you")); 
     Iterator<Integer> itr=arr.iterator(); 
     while(itr.hasNext()) 
     { 

       var=itr.next(); 
       if(b1==var) 
       { 
        f=1; 
        arr.remove(flag1); 
        break; 
       } 
       else 
       { 
        f=0; 
       } 
       flag1++; 
     } 
     if(f==1) 
     { 

      JOptionPane.showMessageDialog(this,"Tickets cancelled"); 

     } 
     else if(f==0) 
     { 
      JOptionPane.showMessageDialog(this,"Tickets is not already reserved"); 
     } 



}           
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           

passengersdetails p=new passengersdetails(); 
p.setVisible(true); 
    arr.add(1); 
    arr.add(2); 
    arr.add(10); 


}           

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {           

      jFrame1.setSize(600, 600); 
      jFrame1.setVisible(true); 
    jTextField1.setText(String.valueOf(aa)); 
    jTextField2.setText(String.valueOf(pp)); 
     jTextField3.setText(String.valueOf(bb)); 
     jTextField4.setText(String.valueOf(cc)); 
     jTextField5.setText(String.valueOf(b)); 



}           

private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {           
list i=new list(); 
i.setVisible(true); 
}           

private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {           
System.exit(0); 
}           
    public static void main(String args[]) 
{ 
     java.awt.EventQueue.invokeLater(new Runnable() { 

      public void run() { 
       new reservation().setVisible(true); 
      } 
     }); 
    } 
+0

に適したコードダンプは疑問がデザインについては特にないとき、ひどく有用ではありません。 – Robert

+0

また、この質問はGUIの設計に関するものではありません。 GUIクラスはドメインオブジェクトを汚染すべきではありません。 – Robert

関連する問題