ObjectOriented Programming in Java

28 5 0
ObjectOriented Programming in Java

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Lập trình hướng đối tượng với Java (ObjectOriented Programming in Java):bao gồm: Giới thiệu về Lớp và Đối tượng; Cơ bản về lập trình Java; các kỹ thuật: Tính đa hình, Tính trừu tượng, Tính thừa kế, Tính đóng gói, Lớp trừu tượng và Interface Ngoại lệ và xử lý ngoại lệ

LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VỚI JAVA (Object-Oriented Programming in Java) NỘI DUNG MƠN HỌC • • • • • • Tổng quan OOP Ngơn ngữ lập trình Java Lớp (Class) Đối tượng (Object) Tính kế thừa (Inheritance) Đa hình (Polymorphism) Tính đóng gói (Encapsulation) gói (Package) • Lớp trừu tượng Interface • Ngoại lệ xử lý ngoại lệ Ngoại lệ xử lý ngoại lệ • • • • • Ngoại lệ (Exception) Bắt xử lý ngoại lệ Ủy nhiệm ngoại lệ (Ném ngoại lệ) Né ngoại lệ Tự định nghĩa ngoại lệ Ngoại lệ • Ngoại lệ (exception): kiện xảy trình thực thi chương trình, phá vỡ luồng binh thường chương trình – VD: Phép toán chia cho 0; ghi file chưa mở file • Ngoại lệ lỗi đặc biệt xảy thời điểm chạy chương trình (run-time); • Khi xảy ngoại lệ, khơng xử lý chương trình dừng trả lại quyền điều khiển cho hệ điều hành Ngoại lệ • VD: Chia cho số => Lỗi trình run-time import java.util.Scanner; public class ExceptionTest { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("Nhap so bi chia:"); int soBiChia=sc.nextInt(); System.out.println("Nhap so chia:"); int soChia=sc.nextInt(); double ketQua= soBiChia/soChia; System.out.printf("Ket qua cua phep chia %d / %d= %.2f\n",soBiChia,soChia,ketQua); } Ngoại lệ • VD: Mở file => Lỗi biên dịch (compile) import java.io.File; import java.io.PrintWriter; import java.util.Scanner; class FileWriter { public static void write(String fileName, String s) { File file = new File(fileName); PrintWriter pw = new PrintWriter(file); pw.println(s); pw.close(); } } Ngoại lệ • Cách xử lý lỗi truyền thống – Viết mã xử lý nơi phát sinh lỗi • Làm cho chương trình trở nên phức tạp, rối • Khơng phải lúc đầy đủ thơng tin để xử lý; • Khơng thiết phải xử lý – Truyền trạng thái lên mức • Thông qua tham số, giá trị trả lại biến tổng thể • Dễ nhầm • Vẫn cịn khó hiểu • Nhược điểm: – Khó kiểm sốt hết trường hợp: lỗi số học, lỗi nhớ; – Lập trình viên thường quyên không xử lý lỗi Bắt xử lý ngoại lệ • Mục đích: – Giúp chương trình đáng tin cậy tránh dừng bất thường; – Tách biệt khối lệnh gây ngoại lệ khối lệnh xử lý ngoại lệ – Tránh việc lan truyền lỗi dây chuyền lời gọi hàm – Cho phép tập trung viết code cho luồng xử lý trường hợp bất thường nới khác Bắt xử lý ngoại lệ • Mơ hình xử lý ngoại lệ - hướng đối tượng – Đóng gói điều kiện không mong đợi đối tượng – Khi xảy ngoại lệ, đối tượng tương ứng với ngoại lệ tạo chứa thông tin chi tiết ngoại lệ; – Cung cấp chế hiệu việc xử lý lỗi – Tách biệt luồng điều khiển bất thường luồng bình thường – Ngoại lệ cần phải xử lý phương thức sinh ngoại lệ ủy nhiệm cho phương thức gọi đến Bắt xử lý ngoại lệ • Mơ hình xử lý ngoại lệ - hướng đối tượng – Mỗi ngoại lệ đối tượng phả hệ Exception – Tất ngoại lệ thể lớp thừa kế từ lớp Throwable lớp nó; – Các đối tượng có nhiệm vụ chuyển thơng tin ngoại lệ (loại, trạng thái chương trình) từ vị trí xảy ngoại lệ đến nới quản lý/xử lý – Từ khóa: try; catch; finally; throw; throws 10 Khối try/catch… • Bắt nhiều ngoại lệ 14 Khối try/catch… • Hoạt động khối try/catch: Khi chạy lệnh/phương thức có ngoại lệ, hai trường hợp xảy ra: – Phương thức gọi thành công: Khối catch bị bỏ qua khơng có ngoại lệ để xử lý – Phương thức ném ngoại lệ khối catch: • Bắt ngoại lệ đó: Trong khối try sau lệnh có ngoại lệ bị bỏ qua, chuyển tới khối catch xử lý • Khơng bắt ngoại lệ đó: Nếu khơng có khối finally điều khiển nhảy khỏi chương trình (bỏ qua phần cịn lại sau lệnh có ngoại lệ khỏi phương thức tại) 15 Bắt xử lý ngoại lệ • VD: Xử lý ngoại lệ lỗi chia cho import java.util.Scanner; public class ExceptionTest { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Nhap so bi chia:"); int soBiChia = sc.nextInt(); System.out.println("Nhap so chia:"); int soChia = sc.nextInt(); try { double ketQua = soBiChia / soChia; System.out.printf("Ket qua cua phep chia %d / %d= %.2f\n", soBiChia, soChia, ketQua); } catch (ArithmeticException e) { System.out.println("Arithmetic Error"); } } 16 Bắt xử lý ngoại lệ • VD: Xử lý ngoại lệ lỗi nhập chia cho import java.util.Scanner; import java.util.InputMismatchException; public class ExceptionTest { public static void main(String[] args) { Scanner sc = new Scanner(System.in); try { Scanner sc = new Scanner(System.in); System.out.println("Nhap so bi chia:"); int soBiChia = sc.nextInt(); System.out.println("Nhap so chia:"); int soChia = sc.nextInt(); double ketQua = soBiChia / soChia; System.out.printf("Ket qua cua phep chia %d / %d= %.2f\n", soBiChia, soChia, ketQua); } catch (InputMismatchException e) { System.out.println(“Input Error"); } catch (ArithmeticException e) { System.out.println("Arithmetic Error"); } } 17 Bắt xử lý ngoại lệ • VD: Xử lý ngoại lệ lỗi đọc/ghi file import java.io.File; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.util.Scanner; class FileWriter { public static void write(String fileName, String s) { try{ File file = new File(fileName); PrintWriter pw = new PrintWriter(file); pw.println(s); pw.close(); } catch(FileNotFoundException e){ e.printStackTrace(); } } } 18 Khối finally • Là nơi đặt đoạn mã phải thực thi ngoại lệ có xảy hay khơng • Lắp khối finally phần cuối khối try/catch • Cú pháp: Try{ //Khối lệnh xảy ngoại lệ } Catch(ExceptionType1 e1){ //Xử lý ngoại lệ } Catch(ExceptionType2 e2){ //Xử lý ngoại lệ } Catch(ExceptionType3 e3){ //Xử lý ngoại lệ } finally{ … } 19 Khối finally 20 Khối try/catch • Ngoại lệ đối tượng nên có tính Đa hình Do đó, khối try/catch dành cho ngoại lệ lớp cha bắt ngoại lệ lớp • Catch(InputMismatchException e){…}: bắt InputMismatchException • Catch (IOException e){…}: bắt tất ngoại lệ kiểu IOException, có InputMismatchException • Catch(Exception e){…}: bắt tất ngoại lệ Exception, có IOException • Trình biên dịch Java yêu cầu thứ tự cho khối catch là: Khối catch dành cho ngoại lệ tổng quát phải đặt sau khối catch dành cho 21 lớp ngoại lệ chuyên biệt Khối try/catch Try{ //Khối lệnh xảy ngoại lệ } Catch(InputMismatchException e){ //Xử lý ngoại lệ } Catch(IOException e){ //Xử lý ngoại lệ } Catch(Exception e){ //Xử lý ngoại lệ } 22 Ủy nhiệm ngoại lệ (Ném ngoại lệ) • Đơi chương trình có phương thức có khai báo ngoại lệ, phương thức ném ngoại lệ tới đoạn chương trình gọi (sử dụng) nó; • Hai việc cần phải làm: – Tun bố dịng khai báo phương thức ném loại ngoại lệ đó: dùng từ khóa “throws” – Tạo ngoại lệ ném tình phù hợp khối nội dung phương thức: dùng từ khóa “throw” 23 Ủy nhiệm ngoại lệ (Ném ngoại lệ) • Từ khóa throws/throw cho phép bạn tự phát sinh ngoại lệ để try/catch bắt Tuyên bố phương thức có • VD: thể có ngoại lệ ArithmeticException double div(int a, int b) throws ArithmeticException { if(b == 0) { throw new ArithmeticException("Loi chia cho so 0"); } else { return a / b; } } Tạo đối tượng ArithmeticException ném tới nơi gọi (sử dụng) 24 Lan truyền ngoại lệ (Né ngoại lệ) • Đơi khi, chương trình có lời gọi phương thức, mà phương thức có ngoại lệ Phương thức khơng muốn xử lý ngoại lệ cách ‘né’ với khai báo từ khóa “throws” cho loại ngoại lệ viết định nghĩa phương thức; • Ngoại lệ chuyển tới phương thức gọi (caller), ngoại lệ lại ‘né’ tiếp • Việc ‘né’ trì hỗn, khơng cuối (tuy trình biên dịch cho qua) máy áo Java ngắt chương trình trường hợp ngoại lệ khơng xử lý 25 Ngoại lệ kiểm tra ngoại lệ khơng kiểm tra • Trong Java có loại ngoại lệ trình biên dịch: – Được kiểm tra (checked): Bao gồm đối tượng thuộc lớp RuntimeException lớp nó=> Trình biên dịch khơng quan tâm tun bố ném, ném, có bắt hay không Trách nhiệm thuộc người viết mã – Không kiểm tra (unchecked): Tất lớp cịn lại (khơng thuộc RuntimeException lớp nó) Chú ý: Mục đích sử dụng khối try/catch để xử lý tình bất thường khơng phải để khắc phục lỗi mã lập trình viên (kiểm thử phần mềm) 26 Ngoại lệ cài đè phương thức thừa kế • Khi ghi đè phương thức lớp cha, phương thức lớp khơng phép tung ngoại lệ • Phương thức ghi đè lớp phép tung ngoại lệ giống lớp cha tập ngoại lệ tung lớp cha 27 Tạo ngoại lệ tự định nghĩa • Các ngoại lệ hệ thống cung cấp không đủ để kiểm soát tất lỗi => Cần phải có lớp ngoại lệ người dùng tự định nghĩa • Để tạo chương trình có khả chống chịu lỗi cao; • Tuy nhiên, ngoại lệ cần phải lớp chuyên biệt hóa lớp ngoại lệ có sẵn có liên quan 28

Ngày đăng: 13/01/2024, 02:25

Tài liệu cùng người dùng

Tài liệu liên quan