Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 98 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
98
Dung lượng
1,56 MB
Nội dung
Bộ mơn Cơng nghệ phần mềm VIỆN CƠNG NGHỆ THƠNG TIN TRUYỀN THÔNG TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Bài 04 Các kỹ thuật xây dựng lớp sử dụng đối tượng Cao Tuan Dung dungct@soict.hut.edu.vn Mục tiêu học • Nêu chất, vai trò biết sử dụng kỹ thuật chồng phương thức, chồng phương thức khởi tạo • Thành viên đối tượng, thành viên lớp • Hiểu cách thức quản lý nhớ đối tượng Java • Nắm cách thức truyền tham số phương thức • Biết cách sử dụng package, số lớp tiện ích Java: Wrapper class, Math, System, String vs StringBuffer Nội dung Chồng phương thức Thành viên ĐT thành viên lớp Quản lý nhớ Java Truyền tham số cho phương thức Một số lớp tiện ích Java Nhắc lại phương thức • Mỗi phương thức phải có chữ ký riêng • Chữ ký phương thức bao gồm: ▫ Tên phương thức ▫ Số lượng đối số kiểu chúng 1.1 Chồng phương thức • Chồng phương thức (Method Overloading): Các phương thức lớp trùng tên chữ ký phải khác nhau: ▫ Số lượng tham số khác ▫ Nếu số lượng tham số kiểu liệu tham số phải khác • Mục đích: ▫ Tên trùng để mô tả chất công việc ▫ Thuận tiện cho lập trình khơng cần phải nhớ nhiều tên phương thức mà cần nhớ tên lựa chọn tham số cho phù hợp 1.1 Chồng phương thức (2) • Ví dụ 1: ▫ Phương thức println() System.out.println() có 10 khai báo với tham số khác nhau: boolean, char[], char, double, float, int, long, Object, String, khơng có tham số ▫ Khơng cần sử dụng tên khác (chẳng hạn "printString“ "printDouble“) cho kiểu liệu muốn hiển thị 1.1 Chồng phương thức (3) • Ví dụ 2: class MyDate { int year, month, day; public boolean setMonth(int m) { …} public boolean setMonth(String s) { …} } public class Test{ public static void main(String args[]){ MyDate d = new MyDate(); d.setMonth(9); d.setMonth(”September”); } } Một số ý với chồng phương thức • Các phương thức xem xét chồng chúng thuộc lớp • Chỉ nên sử dụng kỹ thuật với phương thức có mục đích, chức năng; tránh lạm dụng • Khi dịch, trình dịch vào số lượng kiểu liệu tham số để định gọi phương thức phù hợp Nếu không chọn chọn nhiều phương thức báo lỗi Thảo luận • Cho phương thức sau đây: public double test(String a, int b) • Hãy chọn phương thức chồng cho phương thức trên: void test(String b, int a) public double test(String a) private int test(int b, String a) private int test(String a, int b) double test(double a, int b) double test(int b) public double test(String a, long b) 10 Thảo luận void void void void void void void void prt(String s) { System.out.println(s); } f1(char x) { prt("f1(char)"); } f1(byte x) { prt("f1(byte)"); } f1(short x) { prt("f1(short)"); } f1(int x) { prt("f1(int)"); } f1(long x) { prt("f1(long)"); } f1(float x) { prt("f1(float)"); } f1(double x) { prt("f1(double)"); } • Điều xảy thực hiện: ▫ ▫ ▫ ▫ f1(5); char x=‘a’; f1(x); byte y=0; f1(y); float z = 0; f1(z);… int 84 a Chuyển đổi kiểu liệu (2) 85 b Các số • Boolean ▫ ▫ Boolean FALSE Boolean TRUE • Byte ▫ ▫ byte MIN_VALUE byte MAX_VALUE • Character ▫ ▫ ▫ ▫ ▫ int MAX_RADIX char MAX_VALUE int MIN_RADIX char MIN_VALUE Unicode classification constants • Double ▫ ▫ ▫ ▫ ▫ double MAX_VALUE double MIN_VALUE double NaN double NEGATIVE_INFINITY double POSITIVE_INFINITY • Float ▫ ▫ ▫ ▫ ▫ float MAX_VALUE float MIN_VALUE float NaN float NEGATIVE_INFINITY float POSITIVE_INFINITY • Integer ▫ ▫ int MIN_VALUE int MAX_VALUE • Long ▫ ▫ long MIN_VALUE long MAX_VALUE • Short ▫ ▫ short MIN_VALUE short MAX_VALUE 86 Ví dụ double d = (new Integer(Integer.MAX_VALUE)) doubleValue(); System.out.println(d); // 2.147483647E9 String input = "test 1-2-3"; int output = 0; for (int index = 0; index < input.length(); index++) { char c = input.charAt(index); if (Character.isDigit(c)) output = output * 10 + Character.digit(c, 10); } System.out.println(output); // 123 87 5.3 Xâu (String) • Kiểu String lớp kiểu liệu nguyên thủy • Một String tạo thành từ dãy ký tự nằm dấu nháy kép: String a = "A String"; String b = ""; • Đối tượng String khởi tạo theo nhiều cách: String String String String c d e f = = = = new String(); new String("Another String"); String.valueOf(1.23); null; 88 a Ghép xâu • Tốn tử + nối String: String a = "This" + " is a " + "String"; //a = “This is a String” • Các kiểu liệu sử dụng lời gọi println() chuyển đổi tự động sang kiểu String System.out.println("answer = " + + + 3); System.out.println("answer = " + (1+2+3)); Hai câu lệnh có in kết quả? 89 b Các phương thức xâu String name = "Joe Smith"; name.toLowerCase(); name.toUpperCase(); "Joe Smith ".trim(); "Joe Smith".indexOf('e'); "Joe Smith".length(); "Joe Smith".charAt(5); "Joe Smith".substring(5); "Joe Smith".substring(2,5); // // // // // // // // "joe smith" "JOE SMITH" "Joe Smith" 'm' "mith" "e S" 90 c So sánh hai xâu • oneString.equals(anotherString) ▫ Kiểm tra tính tương đương String name = "Joe"; if ("Joe".equals(name)) ▫ Trả true false name += " Smith"; • oneString.equalsIgnoreCase(anotherString) ▫ Kiểm tra KHƠNG xét đến ký tự hoa, thường boolean same = "Joe".equalsIgnoreCase("joe"); • So sánh oneString == anotherString gây nhập nhằng ▫ So sánh đối tượng 91 c So sánh hai xâu (2) s1 String s1 = new String(“Hello”); String s2 = s1; (s1==s2) Hello s2 trả true String s1 = new String(“Hello”); String s2 = new String(“Hello”); (s1==s2) trả false s1 Hello s2 Hello 92 5.4 StringBuffer • String kiểu bất biến: ▫ Đối tượng không thay đổi giá trị sau tạo Các xâu lớp String thiết kế để không thay đổi giá trị ▫ Khi xâu ghép nối với đối tượng tạo để lưu trữ kết Ghép nối xâu thông thường tốn nhớ • StringBuffer kiểu biến đổi: ▫ Đối tượng thay đổi giá trị sau tạo 93 5.4 StringBuffer (2) • String s = new String(“hello”); String t = s; s = new String(“goodbye”); 94 5.4 StringBuffer (3) • StringBuffer: ▫ Cung cấp đối tượng xâu thay đổi giá trị Sử dụng StringBuffer khi: Dự đốn ký tự xâu thay đổi Khi xử lý xâu cách linh động, ví dụ đọc liệu text từ tệp tin ▫ Cung cấp chế hiệu cho việc xây dựng, ghép nối xâu: Việc ghép nối xâu thường trình biên dịch chuyển sang thực thi lớp StringBuffer 95 5.4 StringBuffer (4) • Tính biến đổi: Nếu đối tượng bị biến đổi, tất quan hệ với đối tượng nhận giá trị 96 5.4 StringBuffer (5) • Nếu tạo xâu thơng qua vịng lặp sử dụng StringBuffer StringBuffer buffer = new StringBuffer(15); buffer.append("This is ") ; buffer.append("String") ; buffer.insert(7," a") ; buffer.append('.'); System.out.println(buffer.length()); // 17 System.out.println(buffer.capacity()); // 32 String output = buffer.toString() ; System.out.println(output); // "This is a String." 97 5.5 Lớp Math • java.lang.Math cung cấp thành phần static: ▫ Các toán học: Math.E Math.PI ▫ Các hàm toán học: max, abs, floor, ceil… sqrt, pow, log, exp… cos, sin, tan, acos, asin, atan… random 98 5.5 Lớp Math (2) • Hầu hết hàm nhận tham số kiểu double giá trị trả có kiểu double ▫ Ví dụ : Math.pow(Math.E, Math.sqrt(2.0*Math.PI)) Hoặc: Math.exp(Math.sqrt(2.0*Math.PI) ) ... viên đối tượng vs Thành viên lớp (Instance member) • Thuộc tính/phương thức truy cập thơng qua đối tượng • Mỗi đối tượng có riêng thuộc tính đối tượng • Giá trị thuộc tính đối tượng đối tượng. .. true 50 3.3 So sánh đối tượng (3) • Phương thức equals ▫ Đối với kiểu liệu nguyên thủy Không tồn ▫ Đối với đối tượng: Bất kỳ đối tượng có phương thức So sánh giá trị đối tượng 51 Ví dụ == equals... giúp truy cập dễ dàng Đối tượng C++ Java • C++: đối tượng lớp tạo dòng lệnh khai báo: ▫ Point p1; • Java: Câu lệnh khai báo đối tượng thực chất tạo tham chiếu, trỏ đến đối tượng thực gặp toán tử