2015-10-26 12 views
10

Tôi không có bất kỳ trải nghiệm Java nào và có nền C.Tại sao tôi nên đặt chính() trong một lớp học chuyên dụng?

Tôi muốn tạo kiểu dữ liệu mới, như kiểu dữ liệu trừu tượng. Trong C, điều này sẽ được thực hiện bằng cách tạo một cấu trúc cho kiểu dữ liệu mới; Tôi hiểu rằng trong Java, bạn tạo một lớp cho kiểu dữ liệu mới đó, và sau đó đi về việc tạo các đối tượng cho lớp đó.

Tôi đã viết hai cách khác nhau này và cả hai cách này dường như hoạt động. Nhưng tôi không hiểu những thiếu sót của cách thứ hai.

  1. Ở đây, tôi tạo một lớp cho kiểu dữ liệu, tạo một thể hiện của nó và sau đó thực hiện các thao tác. Tôi đã tìm thấy đây là thiết kế được sử dụng trong các hướng dẫn trên Internet.

    public class DesignOne { 
        public static void main(String[] args) { 
         MyDataType obj = new MyDataType(3,4); 
         System.out.println(obj.sum()); 
        } 
    } 
    
    class MyDataType { 
        int i; 
        int j; 
    
        MyDataType(int i, int j) { 
         this.i = i; 
         this.j = j; 
        } 
    
        int sum() { 
         return this.i + this.j; 
        } 
    } 
    
  2. Ở đây, tôi tạo một thể hiện của lớp trong cùng một lớp nơi tôi có chức năng điều khiển. Các hoạt động như sum cũng được định nghĩa là thành viên của lớp. Về cơ bản, chỉ có một lớp.

    public class DesignTwo { 
        int i; 
        int j; 
    
        DesignTwo(int i, int j) { 
         this.i = i; 
         this.j = j; 
        } 
    
        int sum() { 
         return this.i + this.j; 
        } 
    
        public static void main(String[] args) { 
         DesignTwo obj = new DesignTwo(3,4); 
         System.out.println("sum == "+obj.sum()); 
        } 
    } 
    

những thiếu sót của DesignTwo là gì, và tại sao DesignOne ưa thích?

+4

Thực ra chúng tương đương với pesonally tôi thích cách tiếp cận đầu tiên, nơi bạn có một lớp phụ chỉ cho phương thức chính của bạn vì bạn không làm lộn xộn các lớp của bạn với các phương thức chính không cần thiết. Thay vào đó bạn sẽ có một phương thức chính được xác định là điểm vào cho chương trình của bạn. –

Trả lời

10

Về cơ bản, bản tóm tắt là Abstraction. Bạn nên cố gắng cung cấp cho mỗi lớp một vai trò. Ở đây, bạn có hai vai trò mà cần phải được điền:

  1. tải một đối tượng và hiển thị nó
  2. Đại diện cho một đối tượng

Vì vậy, bạn nên sử dụng hai lớp. Lợi thế trở nên rõ ràng hơn khi bạn bắt đầu muốn sử dụng và hiển thị nhiều loại điều trong chương trình của bạn.

+2

Ngoài ra, việc giữ MyDataType làm đối tượng chỉ dữ liệu có lợi thế trong tương lai nếu bạn muốn lưu giữ lâu dài dữ liệu. (Xem thêm https://en.wikipedia.org/wiki/Separation_of_concerns) – Gus

10

Không có sự khác biệt vốn có giữa hai (mặc dù các trường công cộng không phải cuối cùng thường không được khuyến khích). Sự khác biệt duy nhất là nơi bạn đặt phương thức chính, phương thức này không thuộc về bất kỳ lớp cụ thể nào. Trong các chương trình lớn hơn, nó thường sống trong một lớp khởi động riêng biệt chỉ vì nó không có ý nghĩa để buộc nó vào một số lớp tùy ý, nhưng đó là chủ yếu là không thích hợp cho mô hình hóa dữ liệu.

Các vấn đề liên quan