Bài giảng Lập trình hướng đối tượng (OOP) - Chương 3: Lớp và đối tượng - Văn Thị Thiên Trang

„ Nhắc lại Đối tượng „ Khai báo lớp đơn giản „ Phạm vi truy xuất thành phần lớp „ Đối tượng „ Đối tượng this „ Phương thức khởi tạo „ Phương thức huỷ „ Thành phần tĩnh - static „ Thành phần hằng - final 1. Nhắc lại Đối tượng „ Một chương trình là tập hợp các đối tượng tương tác với nhau. „ Các đối tượng kết hợp với nhau để hoàn thành nhiệm vụ. „ Để làm được điều này, chúng giao tiếp với nhau bằng cách truyền thông điệp. 3 1. Nhắc lại Đối tượng „ Đối tượng có • Thuộc tí nh: đặc trưng iê t miêu tả đối tượng • Hành vi: là những gì đối tượng có thể làm. „ Thuộc tính có thể là: • attributes: miêu tả đối tượng. • components: những thành phần của đối tượng • associations: những điều mà đối tượng biết nhưng không là thành phần của nó. „ Hành vi có thể là: • Constructors: thiết lập đối tượng. • commands: thay đổi thuộc tính đối tượng. • queries: cung cấp những câu trả lời dựa trên thuộc tính đối tượng

pdf21 trang | Chia sẻ: candy98 | Lượt xem: 495 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình hướng đối tượng (OOP) - Chương 3: Lớp và đối tượng - Văn Thị Thiên Trang, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 3. Lớp và Đối tượng 1 Bài 3 . Lớp và Đối tượng Nội dung „ Nhắc lại Đối tượng h bá lớ đ ả„ K ai o p ơn gi n „ Phạm vi truy xuất thành phần lớp „ Đối tượng „ Đối tượng this Phươ thứ khởi t„ ng c ạo „ Phương thức huỷ „ Thành phần tĩnh - static „ Thành phần hằng - final 2 1. Nhắc lại Đối tượng „ Một chương trình là tập hợp các đối tượng tương tác với nhau. „ Các đối tượng kết hợp với nhau để hoàn thành nhiệm vụ. „ Để làm được điều này, chúng giao tiếp với nhau bằng cách truyền thông điệp. 3 1. Nhắc lại Đối tượng „ Đối tượng có Th ộ tí h đặ t ư iê tả đối tượ• u c n : c r ng m u ng • Hành vi: là những gì đối tượng có thể làm. „ Thuộc tính có thể là: • attributes: miêu tả đối tượng. • components: những thành phần của đối tượng • associations: những điều mà đối tượng biết nhưng không là thành phần của nó. „ Hành vi có thể là: • Constructors: thiết lập đối tượng. • commands: thay đổi thuộc tính đối tượng. • queries: cung cấp những câu trả lời dựa trên thuộc tính đối tượng. 4 Chương 3. Lớp và Đối tượng 2 1. Nhắc lại Đối tượng „ Ví dụ: Thùng rác Thuộc tính:„ • Attributes: màu, chất liệu, mùi. • Components: nắp, thùng, bịch rác • Associations: phòng mà nó được đặt trong đó. „ Hành vi (khả năng đối tượng) • Constructor: tạo thùng • commands: nhận rác, đổ hết rác. • queries: trả lời nắp mở hay đóng, thùng rỗng hay đầy. 5 1. Nhắc lại Đối tượng „ Ví dụ: trò chơi xếp gạch Tetris • Những đối tượng của trò chơi này là gì? • Chúng biết làm gì? Nhữ th ộ tí h ủ • ng u c n c a chúng. 6 1. Đối tượng „ Đối tượng: chữ, bản điều khiển. „ Khả năng gì? • chữ: „ Tạo „ Quay „ Rơi „ Dừng • Bảng điều khiển „ tạo bảng „ bỏ dòng (khi có điểm) „ kiểm tra kết thúc trò chơi 7 1. Đối tượng „ Thuộc tính gì? • Chữ: „ Hướng „ Vị trí „ Hình dạng „ Màu sắc • Bảng điều khiển „ Kích thước „ Số dòng 8 Chương 3. Lớp và Đối tượng 3 1. Đối tượng „ Lớp là hiện thực chung cho tập các đối tượng có cùng đặc điểm và hành vi. „ Cài đặt các khả năng lớp là phương thức. „ Cài đặt các thuộc tính là biến. Lớp Chữ 9 2. Lớp „ Lớp: Hiện thực chung cho một tập các đối tượng có cùng đặc điểm và phương thức. „ Một lớp có thể là lớp con của một lớp đã có „ Lớp và mỗi thành phần cần phải chỉ đị h ứ độ h hé t ậ (tí hn m c c o p p ruy c p n bảo mật) Æ access modifier 10 2. Khai báo lớp đơn giản „ Cú pháp: ê ớclass { Khai báo các thuộc tính Khai báo các phương thức } „ Khai báo thuộc tính: Phạm vi truy xuất Kiểu tênThuộcTính; 11 2. Khai báo lớp đơn giản „ Khai báo phương thức: PVTX Kiểu tênPhươngThức(ds Tham số) { Các lệnh của phương thức; return kếtQuả; } 12 Chương 3. Lớp và Đối tượng 4 Phạm vi truy xuất Modifier private friendly protected public Cùng class YES YES YES YES Cùng gói, khác class NO YES YES YES lớp con trong cùng gói với lớp cha NO YES YES YES Khác gói, khác lớp NO NO NO YES Lớp con khác gói với lớp cha NO NO YES YES 13 Phạm vi truy xuất „ Không có modifier: Mặc định là f i dl h hé á đối tượr en y, c o p p c c ng thuộc các class cùng package ( cùng thư mục)truy cập 14 3. Phạm vi truy xuất các thành phần của lớp „ Thông thường các thuộc tính được quy định phạm vi truy xuất là private. „ Để truy xuất được các thuộc tính từ bên ngoài lớp, ta cung cấp các phương thức lấ iá t ị à á iá t ị h th ộ tí h y g r v g n g r c o u c n . 15 3. Phạm vi truy xuất các thành phần của lớp 16 Chương 3. Lớp và Đối tượng 5 3. Phạm vi truy xuất các thành phần của lớp 17 3. Phạm vi truy xuất các thành phần của lớp „ Xuất hiện lỗi ! 18 3. Phạm vi truy xuất các thành phần của lớp „ Hiệu chỉnh. 19 Ví dụ 20 Chương 3. Lớp và Đối tượng 6 4. Đối tượng „ Đối tượng được tạo từ lớp h ú há Heap t eo c p p: new TênLớp(); • Ví dụ: new PhanSo(); • Sẽ cấp phát vùng nhớ lưu đối tượng data 1000 . • Trong Java vùng nhớ cấp phát cho đối tượng là Heap. new PhanSo(); 21 4. Đối tượng „ Tham chiếu: Heap • Để thao tác với đối tượng cần có tên, gọi là tham chiếu. • Khai báo tham chiếu: TênLớp tênThamChiếu; • Ví dụ: PhanSo phanSo; • Phép gán tham chiếu: tênThamChiếu1 = tênThamChiếu2; PhanSo phanSo ; phanSo 22 4. Đối tượng „ Ví dụ: Cấp phát và tham chiếu tới đối tượng „ PhanSo phanSo = new PhanSo(); data 1000 phanSo 1000 PhanSo phanSo ; phanSo= new PhanSo(); phanSo 23 4. Đối tượng „ Thao tác với đối tượng qua tham chiếu: • Thao tác với thuộc tính: „ tênThCh.tênThuộcTính „ Ví dụ: phanSo.tu=1; phanSo.mau=2; • Thao tác với phương thức: „ tênThCh.tênPhươngThức(ds đối số); „ Ví dụ: phanSo.hienThi(); 24 Chương 3. Lớp và Đối tượng 7 5. Đối tượng this „ Là đối tượng ngầm định khi viết mã lệ h á h hứ ủ ộ lớn c c p ương t c c a m t p. „ Ví dụ: trong lớp PhanSo class PhanSo { private int tu, mau; public void setTu(int tu){ this.tu = tu; } ... } 25 5. Đối tượng this „ Khi thực hiện: PhanSo phanSo new PhanSo();= phanSo.setTu(5); thì this chính là phân số p. 26 6. Phương thức khởi tạo „ PTKT (constructor) là phương thức đặc biệt dùng để khởi tạo giá trị các thuộc tính của đối tượng khi mới được tạo ra. „ Phương thức được thực thi ngay vào lúc khởi tạo đối tượng. 27 6. Phương thức khởi tạo „ Khai báo PTKT: tên PTKT trùng tên lớp. public TênLớp(ds tham số) {} Chú ý: - Constructor không có kiểu trả trị. - Một lớp có thể có 0/1/n contructor. „ Ví dụ: khai báo một số phương thức khởi tạo cho lớp PhanSo. 28 Chương 3. Lớp và Đối tượng 8 6. constructor.... - Constructor không tham số còn được gọi là constructor chuẩn (mặc định) - Ngôn ngữ có sẵn 1 constructor chuẩn làm công việc xóa trống vùng nhớ chứa dữ liệu của đối tượng Î Trị 0/null - Khi một lớp đã có constructor thì constructor mặc định của ngôn ngữ không còn được áp dụng nữa - Tập các constructor hình thành các cách định nghĩa đối tượng - Định nghĩa một đối tượng không theo một mẫu constructor sẽ gây lỗi. 29 Thí dụ: constructor mặc định y z 0 0 b x1000 b 0 Nếu là constructor tự tạo thì việc khởi tạo trị ban đầu được ấn định bởi code trong constructor. 30 Thí dụ: constructor là mẫu khởi tạo đối tượng Nếu một lớp có constructor thì constructor mặc định của ngôn ngữ không được sử dụng nữa. 31 Thí dụ: lớp có nhiều constructor Viết lại default constructor t t tự cons ruc or tạo Constructor sao chép 32 Chương 3. Lớp và Đối tượng 9 Thí dụ: gọi phương thức trong constructor 33 Bài tập ví dụ „ Khai báo lớp phân số với tất cả các l i t t ó thể ó X ất hâ oạ cons ruc or c c . u p n số. 34 7. Phương thức khởi tạo {3} 35 6. Phương thức khởi tạo „ Sử dụng phương thức khởi tạo: 36 Chương 3. Lớp và Đối tượng 10 7. Phương thức hủy „ Đối tượng sống kể từ khi ta khởi tạo đối h đế hế khối hứ ótượng c o n t c a n . „ Khi ra khỏi khối chứa đối tượng, ta nói đối tượng đã chết. { ..... Góc nhìn thời gian:Thời gian sống của....... ClassName obj = new ClassName(); ...... ..... } đối tượng Góc nhìn nội dung văn bản chương trình: phạm vi của đối tượng 37 7. Phương thức hủy „ Một số ngôn ngữ OOP ( C++, C#) cho phép ta viết code sẽ được thực thi vào lúc đối tượng chết nhằm trả tài nguyên đã cấp phát động. J hỉ dù á h ấ hát đối tượ độ „ ava c ng c c c p p ng ng, có trình gom rác riêng và không hỗ trợ hành vi hủy. 38 8. Thành phần tĩnh „ Là những thành phần dùng chung h i đối tượ đượ t từ ột c o mọ ng c ạo ra m lớp. „ Khai báo thuộc tính tĩnh static <tên thuộc tính> „ Khai báo phương thức tĩnh static <tên phương thức>() 39 8. Thành phần tĩnh „ Ví dụ: class A { int x; static int y; } A a1 = new A(), a2= new A() ; a1.x=5; a1.y=7; a2.x=10; a2.y=9; System.out.println(a1.y);?? A a3 = new A(); System.out.println(a3.y);?? 40 Chương 3. Lớp và Đối tượng 11 8. Thành phần tĩnh „ Thành phần tĩnh có thể thao tác qua tên lớp. Chẳng hạn với ví dụ trên có thể thực hiện: A.y = 5; „ Trong phương thức tĩnh ta chỉ được phép dùng các phương thức tĩnh hoặc dữ liệu tĩnh. 41 8. Thành phần tĩnh „ Ví dụ: class A { int x; static int y; static void pt1() { y=1;} //không được gán x=1; void pt2() { x=1;y=1;} } 42 8. Thành phần tĩnh „ Ví dụ: 43 8. Thành phần tĩnh 44 Chương 3. Lớp và Đối tượng 12 8. Thành phần tĩnh 45 9. Chỉ thị final „ Dữ liệu hằng: là những thuộc tính có giá trị cố định trong một đối tượng. „ Dữ liệu hằng: final tênThuộcTính=; „ Ví dụ: khai báo hằng PI = 3.14 public final float PI = 3.14; 46 9. Chỉ thị final - Dữ liệu hằng 47 9. Chỉ thị final - Dữ liệu hằng 48 Chương 3. Lớp và Đối tượng 13 9. Chỉ thị final- final class là lớp không con 49 Chỉ thị final - final method là phương thức không cho phép lớp con viết lại (override) 50 9. Overloading – Nạp chồng phương thức „ Overloading: Kỹ thuật cho phép xây dựng các phương thức trùng tên nhưng khai báo tham số khác nhau trong cùng một lớp. „ Các phương thức nạp chồng này phân biệt với nhau thông qua: • kiểu tham số • Hoặc số lượng tham số. 51 9. Nạp chồng phương thức 52 Chương 3. Lớp và Đối tượng 14 9. Nạp chồng phương thức 53 10. Truyền tham số trong các phương thức „ Việc truyền tham số trong các phương thức của Java được quy định như sau: • Nếu tham số là các dữ liệu nguyên thủy như: int, boolean, char, float, thì tham số được truyền theo trị. 54 10. Truyền tham số trong các phương thức • Ví dụ: xét hàm đổi giá trị của hai biến ê h nguy n n ư sau 55 10. Truyền tham số trong các phương thức „ Kết quả giá trị không đổi. 56 Chương 3. Lớp và Đối tượng 15 10. Truyền tham số trong các phương thức „ Việc truyền các đối tượng thực chất là truyền tham chiếu của các đối tượng. 57 10. Truyền tham số trong các phương thức Ví dụ: 58 10. Truyền tham số trong các phương thức Ví dụ: 59 10. Truyền tham số trong các phương thức Ví dụ: 60 Chương 3. Lớp và Đối tượng 16 11 Bài tập „ Bài 1: Cài đặt lớp NTN (ngày/tháng/năm). • Viết chương trình sử dụng lớp vừa định nghĩa: „ Tạo 2 đối tượng n1=1/1/2006, n2=10/9/2007. „ Tính khoảng cách giữa hai ngày. „ So sánh hai ngày. 61 11 Bài tập – Sơ đồ lớp NTN NTN i + int layThang() + void datNam(int nam) - nt ngay - int thang - int nam + NTN() + NTN(int nam) + NTN(int ng, int th, int na) + int layNam() -int songay(int th, int na) - NTN cong1ngay() - NTN tru1ngay() + NTN cong(int n) + NTN tru(int n) + NTN(NTN ntn) + void datNgay(int ngay) + int layNgay() + void datThang(int thang) + int tru(NTN ng) + String toString() + void HienThi() + int SoSanh(NTN ntn) 62 12. Tổ chức các lớp trong chương trình „ Trong một chương trình Java có thể khai báo nhiều lớp . „ Chương trình thực thi từ lớp chính chứa hàm main „ Ta có thể khai báo các lớp dùng chung trong một file chương trình java: // th i j uv en. ava class Lop1{ } class Lop2{ } 63 12. Bài tập „ Bài 2: Khai báo lớp ma trận số nguyên sao cho có thể khởi tạo gán giá trị truy xuất , , đến từng phần tử, cộng, trừ, nhân các ma trận. „ Dùng lớp này để minh họa các thao tác: + Tạo 2 ma trận m1(3,3), m2(3,3) + Tìm vị trí phần tử lớn nhất trong ma trận m1. + Cộng hai ma trận m3 = m1 + m2 + Trừ hai ma trận m4 = m1 - m2 + Nhân hai ma trận m5 = m1 × m2 64 Chương 3. Lớp và Đối tượng 17 Sơ đồ lớp MATRAN MATRAN - int[][] mt - int soDong - int soCot + MATRAN(int d, int c) + MATRAN(int[][] mang, int m, int n) + MATRAN(MATRAN mt) + int laySoDong() + i t l S C t()n ay o o + int layGiaTri(int d, int c) + void ganGiaTri(int d, int c, int gt) + MATRAN cong(MATRAN m) + MATRAN tru(MATRAN m) + MATRAN nhan(MATRAN m) + void hienThi() 65 Tìm chỗ sai trong chương trình class ABC { private int x; class SDABC { public int y; public static int z; public ABC(int a){x=a;} private ABC(int a, int b, int c){x=c;y=a;z=b;} public static void pt1(int ABC o1 = new ABC(); ABC o2 = new ABC(3); ABC o3 = new ABC(o2); o2.x=5; o2.y=7; o2.z=9; o2.pt2(7); a) { x = a; y= a; z=a;} private void pt2(int b) {x=b; y=b; z=b;} } ABC.z=10; ABC.x=11; ABC.y=12; ABC.pt2(7); } 66 Luyện tập „ Viết thư viện lớp SoHoc chứa các phương thức: • soChan(int) • max(int,int) • max(double, double) • max(int, int, int) • max(int[],int) • sapXep(int[], int) • inMang(int[], int) „ Sử dụng lớp SoHoc thực hiện: • Kiểm tra 1 số là số chẵn hay lẻ. • Tìm số lớn trong 2 số nguyên, 2 số thực, 3 số nguyên. • Tìm số lớn trong mảng. • Sắp xếp mảng. 67 Một số lớp cơ bản của Java ™ Lớp Object ™ Lớp String ™ Các lớp gói (wrapper) ™ Lớp Math Chương 3. Lớp và Đối tượng 18 Là lớp cha của mọi lớp trong java ( trực tiếp/gián tiếp) Lớp Object Được để trong gói java.lang (java.lang.Object) Định nghĩa các trạng thái cơ bản và các phương thức cơ bản của mọi lớp phải có như: So sánh nó với 1 đối tượng khác (equals), chuyển đổi mô tả thành chuỗi (toString) đợi, (wait) điều kiện, nhận biết (notify) các đối tượng khác khi biến điều kiện có thay đổi, lấy Class (getClass) phương thức hashCode() cho biết địa chỉ của dữ liệu của đối tượng. 69 Lớp Object 70 Thí dụ Student2@18d107f Kết qủa của method toString() : Tên lớp + @ + Địa chỉ hệ 16 của thực thể (Lưu ý: Địa chỉ của thực thể chứ không phải là địa chỉ của biến đối tượng ) 71 Nhét obj vào lớp để khi lấy hashcode của lớp bao thì sẽ biết địa chỉ của biến obj này. Lớp có thành phần là lớp và địa chỉ biến đối tượng 72 Chương 3. Lớp và Đối tượng 19 Giải thích 69609650 Hello biến đối tượng a được đặt ở A a1 String s 20392474 19313225 25358555 4565111A a String s2 69609650 B b 26399554 4565111 69609650 25358555 fields • địa chỉ 20392474, có trị là địa chỉ ô nhớ 4565111. Ở địa chỉ 4565111 là một thực thể của lớp A (a=5). • Hai chuỗi s1,s2 được đặt ở 2 địa chỉ khác nhau nhưng chúng cùng chỉ đến 1 thực thể là hằng chuỗi “Hello” được để ở địa chỉ 4565111 11352996 a=5 String s1 69609650 biến Address value 69609650. • Đối tượng b được để ở ô 26399554 có trị là thực thể ở 25358555 gồm 2 thành phần mang trị là đối tượng a và s1. 73 Nhận xétThực thể của lớp là một vùng nhớ chứa dữ liệu của thực thể. Biến đối tượng t ị là ột Hello Hello Hello Hi mang r m tham chiếu đến thực thể của lớp. obj1= obj2; là phép gán địa chỉ tham chiếu giữa 2 đối String s1 String s2 100 biến value s2=s1; 100 100 100 100 s2=“Hi”; tượng. Chú ý tình huống bên: 74 „ Định nghĩa 1 String: String Str1=“Hello”; Lớp String – Chuỗi kí tự String Str2= new String(“Hi”); „ Nối String String Str3= Str1 + Str2; // Str3=“HelloHi” String Str4 = Str3 + 1; // Str4= “HelloHi1” „ String pool ( hồ/ bảng chứa chuỗi) Khi nhiều biến String cùng mang 1 nội dung , chúng cùng chỉ đến 1 phần tử trong String pool Thí dụ: String Str1 = “Hello”; String Str5= “Hello”; I love you Hello Forget me not Str1 Str5 75 Lớp String – methods 76 Chương 3. Lớp và Đối tượng 20 Lớp String – methods 77 Lớp String – ví dụ Các phương thức của lớp String trả về chuỗi kết qủa thì sẽ trả về chuỗi mới còn chuỗi gốc không đổi. Nếu muốn làm thay đổi chuỗi gốc thì dùng lớp StringBuffer cũng thuộc gói java.lang. Các phương thức cũng tương tự như lớp String. 78 „ Dữ liệu thuộc kiểu cơ bản như int, long, char,... chỉ là dữ liệu khô ó h thứ kết h 151000 321100 Các lớp bao bọc - Wrapper ng c p ương c ợp. „ Wrapper , trong gói java.lang, là lớp bao lấy các kiểu dữ liệu cơ bản nhằm tạo ra tính OOP cho các kiểu cơ bản. „ Các phương thức của lớp Wrapper đa số là các phương Integer obj1 1000 Integer obj2 1100 thức static hiện thực các thao tác lên dữ liệu thuộc kiểu tương ứng. „ Biến thuộc lớp Wrapper chứa địa chỉ của dữ liệu. int x 5 int x=5; Integer obj1= new Integer(15); Integer obj2= new Integer(“32”); 79 Wrapper classes Data type Wrapper class b l B l Đọc D t tioo ean oo ean byte Byte char Character double Double float Float i t I t ocumen a on để biết về các phương thức của các wrapper class n n eger long Long short Short 80 Chương 3. Lớp và Đối tượng 21 Wrapper-Thí dụ 81 Lớp Math „ Trong gói java.lang „ Chứa các hàm xử lý toán học. „ Là lớp final. 82 Thí dụ: Hàm random trả trị [ 0.0, 1.0 [ 83