Bài giảng Lập trình Java cơ bản - Chương 7: Lớp và phương thức

ppt 26 trang hapham 3150
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình Java cơ bản - Chương 7: Lớp và phương thức", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pptbai_giang_lap_trinh_java_co_ban_chuong_7_lop_va_phuong_thuc.ppt

Nội dung text: Bài giảng Lập trình Java cơ bản - Chương 7: Lớp và phương thức

  1. LẬPLẬP TRÌNHTRÌNH JAVAJAVA CƠCƠ BẢNBẢN Chương 7 LỚP VÀ PHƯƠNG THỨC Lê Tân Bộ môn: Lập trình máy tính 1
  2. Nội dung chương 7 n Đóng gói n Thiết kế giao diện lớp n Mô tả dữ liệu nội bộ n Cú pháp khai báo lớp n Khai báo phương thức n Gói 2
  3. 7.1 Đóng gói n Chi tiết thi hành lớp là ẩn đối với người sử dụng lớp → đóng gói (encapsulation). n Đóng gói là sự thiết kế một lớp sao cho sự thực hiện của nó được bảo vệ khỏi tác động của các mã ngoài, trừ khi qua một giao diện hình thức (formal interface). n Các phương thức dùng chung (public methods) của một lớp cung cấp giao diện giữa mã ứng dụng và các đối tượng lớp. n Đóng gói giúp giấu đi các chi tiết cài đặt và dữ liệu cục bộ n Công bố ra ngoài những gì cần thiết để trao đổi với các đối tượng khác. n Đơn vị đóng gói cơ bản là lớp (class). n Lớp định rõ những thành phần dữ liệu và các đoạn mã cài đặt các thao tác xử lý trên các đối tượng dữ liệu đó. 3
  4. 7.1 Đóng gói n Các ưu điểm của đóng gói: • Bảo vệ nội dung của lớp khỏi bị hư hỏng do tác dụng của mã ngoài • Đơn giản hoá việc thiết kế các chương trình lớn bằng cách phát triển các phần riêng biệt với nhau • Cho phép thay đổi việc thực thi các lớp sau khi đã tạo và phát triển chúng • Cho phép tái sử dụng một lớp từ các ứng dụng khác, và mở rộng lớp này để tạo nên các lớp mới có liên quan 4
  5. 7.1 Đóng gói n Trừu tượng: trừu tượng dữ liệu và trừu tượng điều khiển. • Trừu tượng dữ liệu: sự tách biệt biểu diễn logic của một miền giá trị từ sự sử dụng. • Trừu tượng điều khiển: sự tách biệt thuộc tính logic của các phương thức trên một đối tượng từ sự thực hiện. n Trạng thái đối tượng: tập các giá trị hiện tại mà nó chứa. 5
  6. 7.1 Đóng gói n Đối tượng được biểu diễn bởi trạng thái khởi tạo. n Đối tượng có thể thay đổi trạng thái của nó được gọi là có thể thay đổi (mutable). n Đối tượng không thể thay đổi trạng thái một khi đã được tạo ra gọi là đối tượng không thể thay đổi (immutable). n Bộ biến đổi (transformer): Phương thức làm thay đổi trạng thái của một đối tượng 6
  7. 7.2 Thiết kế giao diện lớp n Các đối tượng được xây dựng bởi các lớp → các thể hiện của lớp (class instance). n Ví dụ lớp Name: 7
  8. 7.2 Thiết kế giao diện lớp n Chuyển thẻ CRC thành một thiết kế: chuyển các đáp ứng từ dạng mệnh đề hoặc câu thành các tên để biểu diễn đáp ứng. n Thiết kế giao diện chung: Có hai cách • Các giá trị trường chung: Lưu trữ mỗi phần của tên trong một chuỗi được khai báo như một trường, ví dụ String first; String middle; String last; • Các đáp ứng là phương thức: Mỗi đáp ứng có thể được thực hiện bởi một phương thức trong lớp. 8
  9. 7.3 Mô tả dữ liệu nội bộ n Đầu tiên: quyết định việc biểu diễn bên trong của dữ liệu. n Phương thức thực hiện: Các đáp ứng của thẻ CRC là các phương thức thực hiện. n Đáp ứng tham chiếu đến một đối tượng sẽ được thực hiện như một phương thức cụ thể (thể hiện), phải được gọi thông qua tên của đối tượng (không gọi thông qua tên lớp), được khai báo không có từ khóa static. n Các dạng dữ liệu: dữ liệu thể hiện, dữ liệu lớp và dữ liệu cục bộ. • Dữ liệu thể hiện: các biểu diễn bên trong của một đối tượng cụ thể, biểu diễn trạng thái của đối tượng, được khai báo không có từ khóa static. Ví dụ: public class Name{ String first; String middle; String last; . . . } 9
  10. 7.3 Mô tả dữ liệu nội bộ • Dữ liệu lớp (class data): Có thể truy cập đối với tất cả các đối tượng của một lớp, được khai báo với từ khóa static. Ví dụ: public class Name{ // Class constant static final String PUNCT = “, ”; . . . } • Dữ liệu cục bộ (local data): chỉ có thể truy cập trong khối lệnh nó khai báo. Ví dụ: public int compareTo(Name otherName) { int result; // Biến cục bộ . . . return result; } 10
  11. 7.3 Mô tả dữ liệu nội bộ n Thời gian sống của biến, hằng, đối tượng: phần thời gian thực hiện một ứng dụng, khi chúng thực sự được gán một vị trí trong bộ nhớ. • Thời gian sống của đối tượng: Kể từ khi đối tượng được tạo ra (phương thức new), JVM cung cấp không gian nhớ cho nó từ một vùng gọi là vùng tự do (free pool), hoặc heap; cho đến khi JVM xác định không có biến nào tham chiếu đến nó và giải phóng (trả lại cho heap). n Bộ gom rác của JVM (JVM’s Garbage Collector): Java chứa một bộ gom rác tự động. Một cách có chu kỳ, nó tìm và trả về cho heap mọi đối tượng không được tham chiếu 11
  12. 7.4 Cú pháp khai báo lớp n Khai báo: n Một lớp bao gồm một phần đầu (heading): khai báo gói và nạp gói nếu có. n Tiếp theo là một khối chứa các khai báo lớp n Bao gồm khai báo tên lớp và phạm vi truy cập n Khai báo dữ liệu n Khai báo phương thức 12
  13. 7.4 Cú pháp khai báo lớp n Ví dụ: khai báo lớp Circle (hình tròn) như sau class Circle { double radius = 1.0; Circle(){ } Circle(double newRadius){ radius = newRadius; } double findArea(){ return radius * radius * 3.14159; } } 13
  14. 7.4 Cú pháp khai báo lớp n Khai báo biến tham chiếu đối tượng:ClassName objectReference; • Ví dụ: Circle myCircle;//myCircle là một biến tham chiếu đối tượng của lớp Circle. n Tạo đối tượng: objectReference = new ClassName(); • Ví dụ: myCircle = new Circle();//Tham chiếu đối tượng sẽ được gán cho biến myCircle. n Khai báo/Tạo đối tượng trong một lệnh: ClassName objectReference = new ClassName(); • Ví dụ: Circle myCircle = new Circle(); 14
  15. 7.4 Cú pháp khai báo lớp n Truy cập đối tượng: • Tham chiếu dữ liệu của đối tượng: n objectReference.data n vd: myCircle.radius • Gọi phương thức của đối tượng: n objectReference.method n vd: myCircle.findArea() 15
  16. 7.5 Khai báo phương thức n Constructor (phương thức tạo): là một dạng đặc biệt của phương thức, được gọi để xây dựng đối tượng. n Một constructor không có tham số được gọi là default constructor. n Các constructor phải có cùng tên với tên lớp của nó. n Các constructor không có kiểu dữ liệu trả về, kể cả kiểu void. n Nó được gọi sử dụng toán tử new khi tạo một đối tượng và đóng vai trò tạo đối tượng. Ví dụ: Circle(double r) { radius = r; } Circle() { radius = 1.0; } myCircle = new Circle(5.0); 16
  17. 7.5 Khai báo phương thức n Cú pháp khai báo phương thức: ( ){ ; } n Từ bổ nghĩa: xác định phạm vi truy cập của các đối tượng khác đối với các phương thức của lớp 17
  18. 7.5 Khai báo phương thức • public: phương thức có thể truy cập được từ bên ngoài lớp khai báo. • protected: có thể truy cập được từ lớp khai báo và những lớp dẫn xuất từ nó. • private: chỉ được truy cập bên trong bản thân lớp khai báo. • static: phương thức lớp dùng chung cho tất cả các thể hiện của lớp, có nghĩa là phương thức đó có thể được thực hiện kể cả khi không có đối tượng của lớp chứa phương thức đó. • final: không được khai báo chồng ớ các lớp dẫn xuất. • abstract: phương thức không cần cài đặt (không có phần thân), sẽ được hiện thực trong các lớp dẫn xuất từ lớp này. • synchoronized: ngăn các tác động của các đối tượng khác lên đối tượng đang xét trong khi đang đồng bộ hóa, được sử dụng trong lập trình đa tuyến. 18
  19. 7.5 Khai báo phương thức n : có thể là kiểu void, kiểu cơ sở hay một lớp. n : đặt theo qui ước giống tên biến. n : có thể rỗng n Lưu ý: • Các phương thức nên được khai báo dùng từ khóa public, • Dữ liệu thường là dùng tiền tố private vì mục đích an toàn. • Các biến cục bộ (local) nên được khởi tạo sau khi khai báo. 19
  20. 7.5 Khai báo phương thức n Ví dụ về khai báo phương thức: public class XeMay{ public String nhasx; public String model; private float chiphisx; protected int thoigiansx; // so luong so cua xe may: 3, 4 so protected int so; // là biến tĩnh có giá trị là 2 trong tất cả // các thể hiện tạo ra từ lớp xemay public static int sobanhxe = 2; //Khai báo phương thức public float tinhgiaban(){ return 1.5 * chiphisx; } } 20
  21. 7.5 Khai báo phương thức n Gọi phương thức: tên của phương thức, theo sau là cặp dấu ngoặc tròn, bao quanh danh sách các đối số. Ví dụ: n Một lời gọi phương thức sẽ tạm thời chuyển điều khiển cho phương thức được gọi để thực hiện nhiệm vụ của nó n Cú pháp gọi phương thức: • tên_phương_thức(danh sách đối số) • Danh sách đối số được sử dụng để truyền các giá trị đến phương thức. • Danh sách đối số có thể có 0, 1 hoặc nhiều thông tin, tách biệt bởi dấu phẩy. 21
  22. 7.5 Khai báo phương thức n Tham số trong Java: Với kiểu dữ liệu nguyên thuỷ (int, double, boolean ), tham số nhận một bản sao của giá trị của đối số. • Các tác vụ thực hiện trên tham số không ảnh hưởng đến đối số. n Với kiểu dữ liệu tham chiếu (như chuỗi hoặc lớp), tham số nhận một bản sao của địa chỉ, nơi đối tượng được lưu trữ. • Những thay đổi được tạo ra trên các thuộc tính của đối tượng tham chiếu đến bởi tham số sẽ ảnh hưởng đến đối tượng đối số. • Là một thực tế lập trình không tốt 22
  23. 7.6 Gói n Gói bao gồm một hoặc nhiều lớp có cùng đặc tính chung nào đó. n Cú pháp khai báo gói: package tên_gói; khai báo nạp gói; khai báo lớp; 23
  24. 7.6 Gói n Ví dụ: Tạo gói và lưu vào thư mục con name với tên Name.java, dịch javac name\Name.java. // Tạo lớp Name được lưu trữ trong gói name package name; public class Name { // Hằng lớp static final String PUNCT = “, ”; // để định dạng // Khai báo Biến thể hiện String first; // Khai báo các phương thức . } 24
  25. 7.6 Gói n Để sử dụng gói: Tạo file và lưu với tên NameDriver.java // Sử dụng gói name vừa tạo import name.*; public class NameDriver{ static Name testName; // Đối tượng Name để kiểm tra public static void main (String[ ] args) { //Khai báo thân phương thức chính } } 25
  26. Câu hỏi và bài tập 1. Trừu tượng hoá là gì? 2. Mục đích của constructor của một lớp là gì? 3. Sự khác nhau giữa kiểu nguyên thuỷ và kiểu tham chiếu? 4. Một đối tượng có thể có đối tượng khác làm thành phần được không? 5. Viết phần heading của constructor copy của lớp AddressLabel mà nó thay đổi trường address. 6. Viết phần heading của một constructor của lớp AddressLabel mà nó có bốn biến String là name, address, city, và state, và một biến long là zipCode. Trường country được thiết lập mặc định là “United States”. 26