Bài giảng Lập trình Java - Trần Anh Dũng - Chương 3: Hướng đối tượng trong Java
Các khái niệm cơbản vềlớp, đối tượng.
Lớp và đối tượng trong java.
Tính đóng gói.
Tính kếthừa.
Tính đa hình.
Interface.
Tóm tắt nội dung Bài giảng Lập trình Java - Trần Anh Dũng - Chương 3: Hướng đối tượng trong Java, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
kể cả hàm tạo Trước khối lệnh này ta ñặt từ khoá static, từ khoá này báo cho java biết ñây là khối khởi ñầu tĩnh, khối này chỉ ñược gọi 1 lần khi ñối tượng ñầu tiên của lớp này ñược tạo ra Khối khởi ñầu tĩnh này cũng ñược java gọi tự ñộng trước bất cứ hàm tạo nào, thông thường ta sử dụng khối khởi ñầu tĩnh ñể khởi ñầu các thuộc tính tĩnh. Khối khởi ñầu tĩnh 19 Phương thức khai báo chồng (overloading method) Ví dụ: class Sinhvien{ … public void xemThongTinSV() {//…} public void xemThongTinSV(String psMaSv){ //… } } Nạp chồng phương thức 20 Tham chiếu this: Một biến ẩn tồn tại trong tất cả các lớp, this ñược sử dụng trong khi chạy và tham khảo ñến bản thân lớp chứa nó. Ví dụ: class Sinhvien { String maSv, tenSv, dcLienlac; int tuoi; … public void xemThongTinSV() { System.out.println(this.maSv); System.out.println(this.tenSv); … } } Tham chiếu this 21 ðóng gói: Nhóm những gì có liên quan với nhau vào thành một và có thể sử dụng một tên ñể gọi. Ví dụ: Các phương thức ñóng gói các câu lệnh. ðối tượng ñóng gói dữ liệu và các hành vi/phương thức liên quan. ðối tượng = Dữ liệu + Hành vi/Phương thức Tính ñóng gói (1) 22 ðóng gói dùng ñể che dấu một phần hoặc tất cả thông tin, chi tiết cài ñặt bên trong với bên ngoài. Ví dụ: khai báo các lớp thuộc cùng gói trong java package ; // khai báo trước khi khai báo lớp class { … } Tính ñóng gói (2) 23 Creating packages in Java (1) package mypackage; public class Palindrome{ public boolean test(String str){ char givenstring[ ]; char reverse[ ] = new char[str.length()]; boolean flag = true; int count = 0,ctr = 0; givenstring = str.toCharArray(); for (count = str.length()-1;count >= 0;count--){ reverse[ctr] = givenstring[count]; ctr++; } for (count = 0;count < str.length();count++){ if (reverse[count] != givenstring[count]) flag = false; } return flag; } } im ort mypackage.*; class Palintest { public static void main(String[] args) { Palindrome objPalindrome = new Palindrome(); System.out.println(objPalindrome.test(args[0])); } } Output 24 Thừa hưởng các thuộc tính và phương thức ñã có Bổ sung, chi tiết hóa cho phù hợp với mục ñích sử dụng mới Thuộc tính: Thêm mới Phương thức: Thêm mới hay hiệu chỉnh Tính kế thừa (1) ðối tượng hình học Hình 2d Hình 3d Tròn VuôngE-líp Chữ nhật Cầu Lập phương Trụ… 25 Lớp dẫn xuất/lớp con (SubClass) Lớp cơ sở/lớp cha (SuperClass) Lớp con có thể kế thừa tất cả hay một phần các thành phần dữ liệu (thuộc tính), phương thức của lớp cha (public, protected, default) Dùng từ khóa extends. Ví dụ: class nguoi { … } class sinhvien extends nguoi { … } Tính kế thừa (2) 26 Phương thức ñịnh nghĩa lại (Overriding Method) ðược ñịnh nghĩa trong lớp con Có tên, kiểu trả về & các ñối số giống với phương thức của lớp cha Có kiểu, phạm vi truy cập “lớn hơn” phương thức trong lớp cha Tính kế thừa (3) default protected publicprivate 27 Ví dụ: abstract class Hinhhoc { … public float tinhdientich() { return 0; } … } class HinhVuong extends Hinhhoc { private int canh; public float tinhdientich() { return canh*canh; } … } Tính kế thừa (4) Chỉ có thể public do phương thức tinhdientich() của lớp cha là public 28 class HinhChuNhat extends HinhVuong { private int cd; private int cr; public float tinhdientich() { return cd*cr; } … } Tính kế thừa (5) Chỉ có thể public do phương thức tinhdientich() của lớp cha là public 29 Tính ña hình (1) • Ví dụ: class A_Object { // … void method_1() { // … } } class B_Object extends A_Object { // … void method_1() { // … } } Tính ña hình: việc một ñối tượng có thể có nhiều “kiểu” hiện hành khác nhau ñược gọi là tính ña hình. 30 Tính ña hình (2) class A{ public void method(){ System.out.println(“method of A”); } } class B extends A { public void method(){ System.out.println(“method of B”); } } class C extends A { public void method(){ System.out.println(“method of C”); } } // Câu lệnh trong main A a = new A(); a.method(); a = new B(); a.method(); C c = new C(); a = c; a.method(); // Kết quả màn hình method of A method of B method of C 31 Từ khoá static ðược dùng với phương thức và biến. Biến static? Phương thức static? Nhắc lại từ khóa static (1) 32 Lớp nội: Là lớp ñược khai báo bên trong 1 lớp khác. Ví dụ: public class A { // … int class B { // … int public B(int par_1){ field_2 = par_1 + field_1; } } } Lớp nội (Lớp trong) 33 Lớp final: Lớp không cho phép các lớp khác dẫn xuất từ nó hay lớp final không thể có lớp con. ðịnh nghĩa: từ khóa final public final class A { … } Lớp final 34 Lớp trừu tượng chỉ ñược dùng làm lớp cha cho các lớp khác, nó không có các thể hiện (instance). Lớp trừu tượng ñịnh nghĩa các thuộc tính chung cho các lớp con của nó. Ví dụ có thể thiết kế lớp Hình tròn, Hình vuông... kế thừa từ lớp trừu tượng Hình. Lớp Hình có thuộc tính là tên hình, các phương thức tính diện tích, chu vi... Lớp trừu tượng (abstract) thường có ít nhất một phương thức trừu tượng, là phương thức không có cài ñặt. public abstract void draw(); Lớp trừu tượng (1) 35 Khai báo lớp trừu tượng public abstract class ClassName {…} Các lớp con của một lớp cha trừu tượng phải cài ñặt tất cả các phương thức trừu tượng. Nếu không nó cũng sẽ trở thành lớp trừu tượng. Không thể tạo các ñối tượng của một lớp trừu tượng nhưng có thể khai báo biến thuộc kiểu lớp trừu tượng ñể tham chiếu ñến các ñối tượng thuộc lớp con của nó. Lớp trừu tượng (2) 36 Lớp trừu tượng (3) public abstract class Shape{ static final double PI = 3.14159; public abstract double getArea(); public abstract double getVolume(); } class Circle extends Shape{ double radius; public double getArea() { return PI*radius*radius; } public double getVolume() { return 0; } } class Cube extends Shape{ double a, b, c; public double getArea() { return 2*(a*b+b*c+c*a); } public double getVolume() { return a*b*c; } } 37 Là một biến tham chiếu ñến ñối tượng có kiểu là lớp cha của lớp hiện tại. Tham chiếu super ñược dùng ñể truy cập ñến các thành viên của lớp cha ñã bị che bởi lớp con và constructor của lớp cha. Tham chiếu super 38 Interface ñược java ñưa ra với hai mục ñích chính: ðể tạo ra lớp cơ sở thuần ảo (không có bất kỳ phương thức nào ñược cài ñặt) Thực hiện hành vi tương tự như kế thừa bội. ðể tạo ra một interface, ta dùng từ khoá interface ðể triển khai một interface dùng từ khóa implements. Nếu một lớp triển khai nhiều interface? Giao tiếp – interface (1) 39 Một số chú ý: Các trường trong interface là static và final Tất cả các thành phần của một giao diện tự ñộng là public do vậy ta không cần phải thêm bổ từ này vào. Ta không ñược phép thêm các bổ từ khác như private, protected trước các khai báo trong interface. Một interface có thể thừa kế một interface khác. Một lớp có thể cài ñặt một hay nhiều interface nhưng chỉ có thể thừa kế (extends) từ một lớp. Giao tiếp – interface (2) 40 Ví dụ: ðịnh nghĩa một interface Shape trong tập tin shape.java public interface Shape{ //Tính diện tích public abstract double area(); //Tính thể tích public abstract double volume(); //Trả về tên của shape public abstract String getName(); } Giao tiếp – interface (3) 41 //Lớp Point cài ñặt/hiện thực interface tên shape. //ðịnh nghĩa lớp Point trong tập tin Point.java public class Point extends Object implements Shape { protected int x, y; //Tọa ñộ x, y của 1 ñiểm //Constructor không tham số. public Point() { setPoint( 0, 0 ); } //Constructor có tham số. public Point(int xCoordinate, int yCoordinate) { setPoint( xCoordinate, yCoordinate ); } Giao tiếp – interface (4) 42 //Gán tọa ñộ x, y cho 1 ñiểm public void setPoint( int xCoordinate, int yCoordinate ) { x = xCoordinate; y = yCoordinate; } //Lấy tọa ñộ x của 1 ñiểm public int getX() { return x; } //Lấy tọa ñộ y của 1 ñiểm public int getY() { return y; } Giao tiếp – interface (5) 43 //Thể hiện tọa ñộ của 1 ñiểm dưới dạng chuỗi public String toString() { return "[" + x + ", " + y + "]"; } //Tính diện tích public double area() { return 0.0; } //Tính thể tích public double volume() { return 0.0; } Giao tiếp – interface (6) 44 //Trả về tên của ñối tượng shape public String getName() { return "Point"; } } //End class Point Giao tiếp – interface (7) 45 Một số chú ý: Lớp triển khai interface phải thực thi tất cả các phương thức ñược khai báo trong interface, nếu như lớp ñó không triển khai, hoặc triển khai không hết thì nó phải ñược khai báo là abstract Interface cũng là một lớp trừu tượng do vậy ta không thể tạo thể hiện của interface Một interface có thể mở rộng một interface khác, bằng hình thức kế thừa Giao tiếp – interface (8) 46 Phạm vi truy cập 47 Java không có toán tử phạm vi (scope) :: Java không có hủy tử (destructor), nó chỉ có phương thức finalize() ñược gọi bởi Garbage Collector. Java không có template. Java không có quá tải toán tử (operator overloading). Một số lưu ý 48 1. Xây dựng lớp Candidate (Thí sinh) gồm các thuộc tính: mã, tên, ngày tháng năm sinh, ñiểm thi Toán, Văn, Anh và các phương thức cần thiết. 2. Xây dựng lớp TestCandidate ñể kiểm tra lớp trên: - Nhập vào n thí sinh (n do người dùng nhập) - In ra thông tin về các thí sinh có tổng ñiểm lớn hơn 15 Bài tập 49 Bài tập 3. Xét phần mềm quản lý nhân sự. Giả sử Công ty có hai loại nhân viên: nhân viên văn phòng và nhân viên sản xuất. Viết chương trình quản lý và tính lương cho từng nhân viên của công ty: - Mỗi nhân viên cần quản lý các thông tin sau: Họ tên, ngày sinh, lương - Công ty cần tính lương cho nhân viên như sau: - ðối với nhân viên sản xuất: - Lương=lương căn bản + số sản phẩm * 5.000 - ðối với nhân viên văn phòng: - lương = số ngày làm việc * 100.000 50 Hỏi & ñáp
File đính kèm:
- Bài giảng Lập trình Java - Trần Anh Dũng - Chương 3_Hướng đối tượng trong Java.pdf