môn lập trình hướng đối tượnganhtt/contents/teaching... · trang 1 môn lập trình...

17
Trang 1 Môn Lp trình hướng ₫ối tượng Bài thc hành s7 : Thc hành vtype, class, tha kế, bao óng, new & constructor, delete & finalizer ca Java Mc tiêu : Giúp SV làm quen vi vic ₫ặc tinterface & class ca ₫ối tượng. Giúp SV nm rõ chi tiết vtha kế, bao óng. Giúp SV nm rõ new & hàm constructor, delete & hàm finalizer cùng các tính cht cthca 2 hàm này. Giúp SV thy li ích ca a x. Ni dung : Định nghĩa interface sdng ca ₫ối tượng. To 3 class ClassA, ClassB, ClassC da trên cơ chế tha kế và override. Viết ng dng sdng 3 class va to ra. Qui trình : Xem chi tiết trong các trang kế.

Upload: others

Post on 01-Mar-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Môn Lập trình hướng đối tượnganhtt/Contents/Teaching... · Trang 1 Môn Lập trình hướng ₫ối tượng Bài thực hành số 7 : Thực hành về type, class,

Trang 1

Môn Lập trình hướng ₫ối tượng 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ế.

Page 2: Môn Lập trình hướng đối tượnganhtt/Contents/Teaching... · Trang 1 Môn Lập trình hướng ₫ối tượng Bài thực hành số 7 : Thực hành về type, class,

Trang 2

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.

Page 3: Môn Lập trình hướng đối tượnganhtt/Contents/Teaching... · Trang 1 Môn Lập trình hướng ₫ối tượng Bài thực hành số 7 : Thực hành về type, class,

Trang 3

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.

Page 4: Môn Lập trình hướng đối tượnganhtt/Contents/Teaching... · Trang 1 Môn Lập trình hướng ₫ối tượng Bài thực hành số 7 : Thực hành về type, class,

Trang 4

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.

Page 5: Môn Lập trình hướng đối tượnganhtt/Contents/Teaching... · Trang 1 Môn Lập trình hướng ₫ối tượng Bài thực hành số 7 : Thực hành về type, class,

Trang 5

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.

Page 6: Môn Lập trình hướng đối tượnganhtt/Contents/Teaching... · Trang 1 Môn Lập trình hướng ₫ối tượng Bài thực hành số 7 : Thực hành về type, class,

Trang 6

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.

Page 7: Môn Lập trình hướng đối tượnganhtt/Contents/Teaching... · Trang 1 Môn Lập trình hướng ₫ối tượng Bài thực hành số 7 : Thực hành về type, class,

Trang 7

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.

Page 8: Môn Lập trình hướng đối tượnganhtt/Contents/Teaching... · Trang 1 Môn Lập trình hướng ₫ối tượng Bài thực hành số 7 : Thực hành về type, class,

Trang 8

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.

Page 9: Môn Lập trình hướng đối tượnganhtt/Contents/Teaching... · Trang 1 Môn Lập trình hướng ₫ối tượng Bài thực hành số 7 : Thực hành về type, class,

Trang 9

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.

Page 10: Môn Lập trình hướng đối tượnganhtt/Contents/Teaching... · Trang 1 Môn Lập trình hướng ₫ối tượng Bài thực hành số 7 : Thực hành về type, class,

Trang 10

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();

Page 11: Môn Lập trình hướng đối tượnganhtt/Contents/Teaching... · Trang 1 Môn Lập trình hướng ₫ối tượng Bài thực hành số 7 : Thực hành về type, class,

Trang 11

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) {

Page 12: Môn Lập trình hướng đối tượnganhtt/Contents/Teaching... · Trang 1 Môn Lập trình hướng ₫ối tượng Bài thực hành số 7 : Thực hành về type, class,

Trang 12

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() {

Page 13: Môn Lập trình hướng đối tượnganhtt/Contents/Teaching... · Trang 1 Môn Lập trình hướng ₫ối tượng Bài thực hành số 7 : Thực hành về type, class,

Trang 13

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ị :

Page 14: Môn Lập trình hướng đối tượnganhtt/Contents/Teaching... · Trang 1 Môn Lập trình hướng ₫ối tượng Bài thực hành số 7 : Thực hành về type, class,

Trang 14

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.

Page 15: Môn Lập trình hướng đối tượnganhtt/Contents/Teaching... · Trang 1 Môn Lập trình hướng ₫ối tượng Bài thực hành số 7 : Thực hành về type, class,

Trang 15

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); }

Page 16: Môn Lập trình hướng đối tượnganhtt/Contents/Teaching... · Trang 1 Môn Lập trình hướng ₫ối tượng Bài thực hành số 7 : Thực hành về type, class,

Trang 16

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 :

Page 17: Môn Lập trình hướng đối tượnganhtt/Contents/Teaching... · Trang 1 Môn Lập trình hướng ₫ối tượng Bài thực hành số 7 : Thực hành về type, class,

Trang 17

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); }