Bài thực hành số



tải về 45.19 Kb.
Chuyển đổi dữ liệu30.08.2016
Kích45.19 Kb.

Trang

Bài thực hành số 7 : Thực hành về type, class, thừa kế, bao đóng, new & constructor, delete & finalizer của Java

Mục tiêu :



  • Giúp SV làm quen với việc đặc tả interface & class của đối tượng.

  • Giúp SV nắm rõ chi tiết về thừa kế, bao đóng.

  • Giúp SV nắm rõ new & hàm constructor, delete & hàm finalizer cùng các tính chất cụ thể của 2 hàm này.

  • Giúp SV thấy lợi ích của đa xạ.

Nội dung :

  • Định nghĩa interface sử dụng của đối tượng.

  • Tạo 3 class ClassA, ClassB, ClassC dựa trên cơ chế thừa kế và override.

  • Viết ứng dụng sử dụng 3 class vừa tạo ra.

Qui trình :

  • Xem chi tiết trong các trang kế.

1. Chạy JBuilder (hoặc bằng icon shortcut trên desktop hoặc bằng menu Start.Programs...), cửa sổ đầu tiên có dạng :


2. Nếu thấy JBuilder hiển thị Project nào đó (của lần cuối cùng trước đó), chọn menu File.Close Projects để hiển thị cửa sổ Close Projects rồi chọn button All và OK để đóng các Project lại.


3. Tạo Project mới bằng cách vào menu File.New Project. Khi cửa sổ Step 1 dưới đây hiển thị, nhập tên Project là JBClassTest, chọn vị trí thư mục rồi ấn button Next.


4. Khi cửa sổ Step 2 dưới đây hiển thị, hiệu chỉnh các thông số cần thiết (nên dùng giá trị mặc định) rồi ấn button Next.

5. Khi cửa sổ Step 3 dưới đây hiển thị, hiệu chỉnh các thông số cần thiết (nên hiệu chỉnh nội dung của mục Encoding thành UTF8 để hỗ trợ tốt các chuỗi tiếng Việt Unicode trong các phần tử giao diện) rồi ấn button Finish để hoàn tất việc thiết lập các tham số của Project.




6. Chọn menu File.New để mở lại của sổ Object Gallery, chọn icon Application để tạo ứng dụng mới.


7. Khi cửa sổ Step 1 dưới đây hiển thị, nhập tên ứng dụng là JBClassTest rồi ấn button Next.


8. Khi cửa sổ Step 2 dưới đây hiển thị, nhập tên class quản lý Form giao diện ứng dụng là ClassTestDlg và title bar cho Form, rồi ấn button Next.


9. Khi cửa sổ Step 3 dưới đây hiển thị, đánh dấu chọn checkbox "Create a runtime…", nhập tên file quản lý cấu hình run-time cho ứng dụng, rồi ấn button Finish.


10. Cửa sổ đầu tiên của ứng dụng như sau (nó đang hiển thị mã nguồn miêu tả Form giao diện của ứng dụng).


11. Chọn menu File.New để mở lại cửa sổ Object Gallery, chọn icon Interface và OK để tạo 1 interface mới.


12. Khi cửa sổ Interface Wizard sau đây hiển thị, nhập tên interface là T_A và OK để tạo interface.


12. Khi cửa sổ hiển thị mã nguồn của interface vừa tạo hiển thị, định nghĩa interface với 2 tác vụ push và pop như sau :

public interface T_A {

int func1(); //tat ca cac ham trong interface deu da xa

void func2();

}
13. Chọn menu File.New để mở lại cửa sổ Object Gallery, chọn icon Class và OK để tạo 1 class mới. Khi cửa sổ Class Wizard sau đây hiển thị, nhập tên class là ClassA và OK để tạo class.

14. Khi cửa sổ hiển thị mã nguồn của class vừa tạo hiển thị, định nghĩa class ClassA như sau :

public class ClassA implements T_A {

private int i;

protected DefaultListModel model;

protected double d;

public ClassA(DefaultListModel model) {

super();

i = 1; d = 1.1416; this.model = model;

model.addElement("Constructor for ClassA() is running...\n");

}

public ClassA(DefaultListModel model, int i, double d) {



super();

this.i = i; this.d = d; this.model = model;

model.addElement("Constructor for ClassA(i,d) is running...\n");

}

void finalizer() {



model.addElement("Destructor for ClassA is running...\n");

}
public int func1() {

i = 1; d= 1;

model.addElement("Ham ClassA::func1 chay.\n");

return 1;

}
public void func2() {

i = 2; d= 2;

model.addElement("Ham ClassA::func2 chay.\n");

}
private void func3() {

model.addElement("Ham ClassA::func3 chay.\n");

}

protected void func4() {



model.addElement("Ham ClassA::func4 chay.\n");

}

public void func5() {



model.addElement("Ham ClassA::func5 chay.\n");

func3(); //lien ket tinh --> khong da xa

func4(); //lien ket dong --> da xa

}

}


15. Lập lại qui trình định nghĩa class để định nghĩa class mới tên là ClassB như sau :

public class ClassB extends ClassA implements T_A {

public ClassB(DefaultListModel model) {

super(model);

d = 1.1416;

model.addElement("Constructor for ClassB() is running...\n");

}

public ClassB(DefaultListModel model, int i, double d) {



super(model,i,d);

this.d = d;

model.addElement("Constructor for ClassB(i,d) is running...\n");

}

void finalizer() {



model.addElement("Destructor for ClassB is running...\n");

}
public int func1() {

// i = 1; //bi loi

d = 1;


model.addElement("Ham ClassB::func1 chay.\n");

return 1;

}
public void func2() {

d= 2;


model.addElement("Ham ClassB::func2 chay.\n");

}

}


16. Lập lại qui trình định nghĩa class để định nghĩa class mới tên là ClassC như sau :

public class ClassC extends ClassB implements T_A {

public ClassC(DefaultListModel model) {

super(model);

d = 1.1416;

model.addElement("Constructor for ClassC() is running...\n");

}

public ClassC(DefaultListModel model, int i, double d) {



super(model, i,d);

this.d = d;

model.addElement("Constructor for ClassC(i,d) is running...\n");

}

void finalizer() {



model.addElement("Destructor for ClassC is running...\n");

}
public int func1() {

// i = 1; //bi loi

d = 1;


model.addElement("Ham ClassC::func1 chay.\n");

return 1;

}
public void func2() {

d= 2;


model.addElement("Ham ClassC::func2 chay.\n");

}

public void func3() {



d= 2;

model.addElement("Ham ClassC::func3 chay.\n");

}

protected void func4() {



model.addElement("Ham ClassC::func4 chay.\n");

}

}


17. Dời chuột về cửa sổ Project, ấn kép chuột vào mục ClassTestDlg.java để làm việc với class miêu tả form giao diện của ứng dụng. Chọn tab Design phía dưới vùng làm việc để hiển thị Form theo góc nhìn thiết kế trực quan, cửa sổ sau sẽ hiển thị :

18. Dời chuột về cửa sổ Structure (thường nằm phía dưới cửa sổ Project), tìm và chọn phần tử contentPane của this để hiển thị cửa sổ thuộc tính của nó. Thiết lập lại thuộc tính layout về giá trị XYLayout để có thể thiết kế tự do các phần tử trong Form. Tìm phần tử JButton và vẽ nó vào góc trên trái của Form, đặt tên cho bó là jbtnStart. Tìm phần tử JScrollPane (trong nhóm Swing Container) và vẽ nó vào Form với diện tích chiếm gằn hết Form, đặt tên cho nó là jspListInfo. Tìm phần tử Jlist và vẽ nó vào JscrollPane, đặt tên cho nó là jlbListInfo, đây là listbox hiển thị nội dung kiểm thử các class.


19. Chọn tab Source dưới vùng làm việc để hiển thị góc nhìn mã nguồn của Form. Viết thêm đoạn code sau vào hàm jbinit() để khởi động cửa sổ ứng dụng.

private void jbInit() throws Exception {

contentPane = (JPanel) getContentPane();

contentPane.setLayout(xYLayout1);

setSize(new Dimension(475, 350));

setTitle("Frame Title");

this.addComponentListener(new ClassTestDlg_this_componentAdapter(this));

jbtnStart.setText("Start");

jbtnStart.addActionListener(new ClassTestDlg_jbtnStart_actionAdapter(this));

jlbListInfo.setFont(new java.awt.Font("Tahoma", Font.PLAIN, 20));

contentPane.add(jbtnStart, new XYConstraints(9, 6, 65, 22));

contentPane.add(jspListInfo, new XYConstraints(10, 34, 456, 308));

jspListInfo.getViewport().add(jlbListInfo);

//code viết thêm

//thiết lập lại kích thước form cho đúng

this.setSize(new Dimension(490, 380));

//thiết lập đối tượng ListModel chứa nội dung của ListBox

model = new DefaultListModel();

jlbListInfo.setModel((ListModel)model);

}
20. Tạo hàm xử lý Click chuột trên button jbtnStart và viết code cho hàm này như sau :

public void jbtnStart_actionPerformed(ActionEvent e) {

model.addElement("Lenh ClassA ca; chay. Hay quan sat trinh tu cac constructor.\n");

T_A ca = new ClassA(model);

model.addElement("Lenh ca.func1(); chay. Hay quan sat ham cu the nao chay\n");

ca.func1();

model.addElement("Lenh ca.func2(); chay. Hay quan sat ham cu the nao chay\n");

ca.func2();

model.addElement("Lenh ClassB cb; chay. Hay quan sat trinh tu cac constructor.\n");

ca = new ClassB (model);

model.addElement("Lenh ca.func1(); chay. Hay quan sat ham cu the nao chay\n");

ca.func1();

model.addElement("Lenh ca.func2(); chay. Hay quan sat ham cu the nao chay\n");

ca.func2();

model.addElement("Lenh ClassC cc(1,2); chay. Hay quan sat trinh tu cac constructor.\n");

ca = new ClassC (model,1,2);

model.addElement("Lenh ca.func1(); chay. Hay quan sat ham cu the nao chay\n");

ca.func1();

model.addElement("Lenh ca.func2(); chay. Hay quan sat ham cu the nao chay\n");

ca.func2();

model.addElement("Lenh ClassC cc = new ClassC(model); chay. Hay quan sat ham cu the nao chay\n");

ClassC cc = new ClassC(model);

model.addElement("Lenh cc.func5(); chay. Hay quan sat ham cu the nao chay\n");

cc.func5();

//delete (ca);

}
21. Chọn menu Run.Run Project để dịch và chạy thử ứng dụng. Nếu bạn nhập đúng các đoạn code trên mà vẫn bị báo lỗi thì nguyên nhân thông thường nhất là class tương ứng thiết lệnh import phần tử cần dùng trong class đó. Hãy kiểm tra và thêm vào hay hiệu chỉnh lệnh import phần tử cần thiết. Nếu chạy đúng thì kết quả Form có dạng sau :

Nếu nội dung quá nhiều so với chiều ngang/dọc của ListBox, bạn có thể dời marquer trên scrollbar tương ứng để xem phần thông tin mong muốn trong listbox.

22. Để phóng to/thu nhỏ ListBox theo kích thước của Form (do người dùng thay đổi động), bạn hãy định nghĩa hàm xử lý sự kiện componentResized cho Form như sau :

public void this_componentResized(ComponentEvent e) {

//thiết lập lại kích thước ListBox theo kích thước của Form ứng dung

jspListInfo.setSize(this.getWidth()-30,this.getHeight()-70);



}


Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2016
được sử dụng cho việc quản lý

    Quê hương