Xem mẫu
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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/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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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