Xem mẫu

  1. 11/09/2017 Chương 3 NỘI DUNG 1. Giới thiệu 8. Sự đóng gói 2. Một số khái niệm 9. Từ khóa this 3. Thiết kế lớp 10. Kế thừa (class) 11.Đa hình 4. Thuộc tính 12.Lớp trừu tượng 5. Phương thức 13.Packages & 6. Phương thức khởi Interfaces tạo 7. Thành viên static 2 1
  2. 11/09/2017 1. Giới thiệu • Các phương pháp lập trình – Step-by-Step Programming – Procedural Programming – Object-Oriented Programming 3 Step-by-Step Programming • Lập trình từng bước • Machine Language, Assembly Language 1. Giới thiệu 1101011100111101 MOV BX, CS 1010000111011101 SUB BX, 10h 0110111011001010 JNE label1 1000100100101011 LOOP label2 ... ... 4 2
  3. 11/09/2017 Procedural Programming • Thiết kế top-down. Program • Chương trình được chia thành các hàm, 1. Giới thiệu thủ tục. Proc1 Proc3 • Ngôn ngữ: Pascal, C Proc2 • Hạn chế: dùng dữ liệu toàn cục, khó phát triển, khó mô tả các thực thể trong thực tế 55 Object-Oriented Programming • Chương trình bao gồm các đối tượng. • Các đối tượng tương tác với nhau thông qua các phương thức của chúng 1. Giới thiệu • Dễ mô tả các thực thể Object A • Dễ phát triển, mở rộng chương trình Object B Object C Object D 66 3
  4. 11/09/2017 Vấn đề bài toán (*) • Cho một tập tin lưu tọa độ (x,y) của các thành phố, bắt đầu là số lượng thành phố như sau: 6 1. Giới thiệu 50 20 90 60 10 72 74 98 5 136 150 91 • Viết một chương trình hiển thị tọa độ các thành phố trên một DrawingPanel, sau đó đặt một “quả bom” với bán kính cho trước và tô màu đỏ các thành phố trong phạm vi sẽ bị “nổ”. 7 Cách viết không tốt Scanner input = new Scanner(new File("cities.txt")); int cityCount = input.nextInt(); int[] xCoords = new int [cityCount]; 1. Giới thiệu int[] yCoords = new int [cityCount]; for (int i = 0; i < cityCount; i++) { xCoords[i] = input.nextInt(); // read each city yCoords[i] = input.nextInt(); } – ... • Sử dụng song song 2 mảng để lưu tọa độ x và y cho mỗi thành phố với cùng một chỉ số 8 4
  5. 11/09/2017 Quan sát bài toán • Dữ liệu trong bài toán này là tập hợp các điểm (Point)  cần lưu trữ các đối tượng Point. 1. Giới thiệu – Mỗi Point chứa hai tọa độ x và y – So sánh khoảng cách giữa các điểm để xem một điểm có nằm trong phạm vi nổ bom hay không. – Mỗi Point có thể tự vẽ chính nó  Tạo class Point 9 2. Một số khái niệm • Lớp (class): là một kiểu dữ liệu mở rộng được định nghĩa, bao gồm: • Danh sách các thuộc tính (dữ liệu) • Các phương thức mô tả hành vi của một nhóm đối tượng nào đó • Đối tượng (object): • Là một thể hiện cụ thể của lớp, các thuộc tính có giá trị xác định. • Là một biến có kiểu dữ liệu là lớp. 10 5
  6. 11/09/2017 Ví dụ đối tượng Ipod iPod blueprint state: current song 2. Một số khái niệm volume battery life behavior: power on/off change station/song change volume choose random song creates iPod #1 iPod #2 iPod #3 state: state: state: song = "1,000,000 Miles" song = "Letting You" song = "Discipline" volume = 17 volume = 9 volume = 24 battery life = 2.5 hrs battery life = 3.41 hrs battery life = 1.8 hrs behavior: behavior: behavior: power on/off power on/off power on/off change station/song change station/song change station/song change volume change volume change volume choose random song choose random song choose random song 11 Tính trừu tượng (Abstraction) • abstraction: chúng ta sử dụng đối tượng nhưng không cần biết chi tiết thiết kế bên 2. Một số khái niệm trong đối tượng • Ví dụ với iPod: 12 6
  7. 11/09/2017 3. Thiết kế lớp (class) • Từ bài toán (*) ở mục 1, ta thiết kế class Point. – Định nghĩa một kiểu dữ liệu có tên là Point. – Mỗi đối tượng Point object có hai trường (field) là x và y. – Mỗi đối tượng Point object có một số phương thức. – Một chương trình client sẽ sử dụng các đối tượng Point. 13 Point objects (desired) – Point p1 = new Point(5, -2); 3. Thiết kế lớp (class) – Point p2 = new Point(); // origin, (0, 0) Field name Description • Dữ liệu: x the point's x-coordinate y the point's y-coordinate • Phương thức: Method name Description setLocation(x, y) Thiết lập tọa độ x, y cho điểm translate(dx, dy) Dịch chuyển tọa độ x và y theo độ dời dx, dy distance(p) Tính khoảng cách từ điểm hiện tại đến điểm p draw(g) Hiển thị tọa độ điểm 14 7
  8. 11/09/2017 Point class Point class state: int x, y 3. Thiết kế lớp (class) behavior: setLocation(int x, int y) translate(int dx, int dy) distance(Point p) draw(Graphics g) Point object #1 Point object #3 state: state: x = 5, y = -2 x = 18, y = 42 behavior: behavior: setLocation(int x, int y) setLocation(int x, int y) translate(int dx, int dy) translate(int dx, int dy) distance(Point p) distance(Point p) draw(Graphics g) draw(Graphics g) Point object #2 state: x = -245, y = 1897 behavior: setLocation(int x, int y) translate(int dx, int dy) distance(Point p) 15 draw(Graphics g) Khai báo lớp • Cú pháp: 3. Thiết kế lớp (class) package pack.name; modifier class ClassName { Khai báo thuộc tính; Khai báo và định nghĩa phương thức } • pack.name: tên gói (nếu cần thiết) • modifier: chỉ định truy cập (public hoặc không chỉ định) • ClassName: tên lớp 16 8
  9. 11/09/2017 Khai báo lớp 3. Thiết kế lớp (class) Mức truy cập Khai báo lớp public class Point { int x; Tên lớp int y; } Thuộc tính x, y – Lưu ý: lưu code này trong tập tin Point.java. – Khai báo trên chưa có phương thức 17 4. Thuộc tính (Fields) • Là dữ liệu của đối tượng, là biến khai báo trong phạm vi lớp • Cú pháp khai báo: modifier type name; – Modifier: chỉ định mức độ truy cập • public: có thể truy cập từ mọi nơi • protected: có thể truy cập từ trong gói hoặc từ các lớp con • private: chỉ có thể truy cập từ chính lớp đó • Không chỉ định: có thể truy cập từ trong gói – Ví dụ: public class Student { public String name; //name double gpa; // Grade Point Average } 18 9
  10. 11/09/2017 Truy cập dữ liệu đối tượng • Từ lớp khác có thể truy cập các field theo cú pháp: – Lấy giá trị field: variable.field – Cập nhật giá trị field: variable.field = value; 4. Fields • Ví dụ: Point p1 = new Point(); Point p2 = new Point(); System.out.println ("the x-coord is " + p1.x); p2.y = 13; 19 Truy cập dữ liệu đối tượng Point • Sử dụng lớp Point trong một lớp khác PointMain.java (client program) Point.java (class of objects) public class PointMain { public class Point { main(String args) { int x; Point p1 = new Point(); int y; 4. Fields p1.x = 7; } p1.y = 2; Point p2 = new Point(); x 7 y 2 p2.x = 4; p2.y = 3; ... x 4 y 3 } } 20 10
  11. 11/09/2017 Truy cập dữ liệu đối tượng Point public class PointMain { public static void main(String[] args) { // create two Point objects Point p1 = new Point(); p1.y = 2; Point p2 = new Point(); 4. Fields p2.x = 4; System.out.println (p1.x + ", " + p1.y); // 0, 2 // move p2 and then print it p2.x += 2; p2.y++; System.out.println (p2.x + ", " + p2.y); // 6, 1 } } 21 5. Phương thức (Method) • Là các hàm định nghĩa trong một lớp, dùng để thực hiện hành vi của đối tượng lớp • Cú pháp khai báo: modifier (parameters) { ; ; ... ; } 22 11
  12. 11/09/2017 Phương thức – Ví dụ 5. Phương thức (Method) 23 Phương thức – Ví dụ 5. Phương thức (Method) 24 12
  13. 11/09/2017 Nạp chồng phương thức • Các phương thức cùng tên nhưng khác 5. Phương thức (Method) tham số • Tùy theo lời gọi hàm mà phương thức thích hợp được thực thi • Ví dụ: 25 6. Phương thức khởi tạo (constructor) • Là phương thức được gọi tự động khi một đối tượng được tạo • Phương thức khởi tạo được dùng để: – Gán giá trị ban đầu cho các thuộc tính – Thực hiện một số thao tác xử lý ban đầu • Một lớp có thể có nhiều constructor. • Đặc điểm: – Không có giá trị trả về – Tên phương thức trùng với tên lớp 26 13
  14. 11/09/2017 Các loại phương thức khởi tạo • Phương thức khởi tạo mặc định (default 6. Phương thức khởi tạo constructor) public ClassName () • Phương thức khởi tạo có tham số: public ClassName (danh sách tham số) • Phương thức khởi tạo sao chép: public ClassName (ClassName object) 27 Phương thức khởi tạo mặc định • Là phương thức khởi tạo không có tham số • Mỗi lớp có duy nhất một default constructor. 28 14
  15. 11/09/2017 Phương thức khởi tạo có tham số • Được sử dụng để tạo ra một đối tượng 6. Phương thức khởi tạo mới với giá trị các thuộc tính được truyền vào từ các đối số. • Ví dụ: 29 Phương thức khởi tạo có tham số • Sử dụng: 6. Phương thức khởi tạo 30 15
  16. 11/09/2017 Phương thức khởi tạo sao chép • Là phương thức được sử dụng để tạo một 6. Phương thức khởi tạo đối tượng mới từ một đối tượng đã tồn tại. • Phương thức này có một tham số là một đối tượng cùng lớp. 31 Phương thức khởi tạo sao chép • Ví dụ Sử dụng 6. Phương thức khởi tạo 32 16
  17. 11/09/2017 7. Thành viên static • Là các biến, phương thức được khai báo sau từ khóa static • Các thành viên này có thể được truy cập mà không cần thông qua một đối tượng • Các phương thức static chỉ truy cập được các thành viên static trong lớp. • Cú pháp khai báo: modifier static type attributeName; modifier static type methodName (parameters) { //code } 33 Thành viên static – ví dụ 7. Thành viên static 2 34 17
  18. 11/09/2017 8. Đóng gói (Encapsulation) • Encapsulation: che dấu chi tiết cài đặt bên trong  bảo vệ tính toàn vẹn dữ liệu của đối tượng 35 Thuộc tính private 8. Đóng gói (Encapsulation) • Để che dấu một thuộc tính không cho truy cập từ bên ngoài lớp, ta cần khai báo biến sau từ khóa private theo cú pháp: private type name; private = ; • Ví dụ: private int id; private String name; 36 18
  19. 11/09/2017 Truy cập thuộc tính private • Cần cung cấp phương thức cho phép truy cập 8. Đóng gói (Encapsulation) đến các thuộc tính private. • Ví dụ: – Chỉ cho phép lấy giá trị của x public int getX() { return x; } – Cho phép thay đổi giá trị của x public void setX (int newX) { x = newX; } – Sử dụng trong lớp khác: System.out.println (p1.getX()); p1.setX (14); 37 Lợi ích của sự đóng gói 8. Đóng gói (Encapsulation) • Trừu tượng hóa giữa đối tượng và người dùng • Bảo vệ đối tượng khỏi sự truy cập không hợp lệ. • Giới hạn giá trị cho thuộc tính trong phạm vi hợp lệ 38 19
  20. 11/09/2017 9. Từ khóa this • this: được dùng để tham chiếu đến các thành phần thuộc lớp. • Truy cập một biến: this.field • Gọi một phương thức: this.method(parameters); • Gọi một constructor this(parameters); 39 Tránh xung đột tên biến • Tránh xung đột khi tham số của phương thức trùng với biến thành viên: public class Point { 9. Từ khóa this private int x; private int y; //... public void setLocation(int x, int y) { this.x = x; this.y = y; } } 40 20
nguon tai.lieu . vn