1. Lập trình hướng đối tượng
Object-oriented Programming
Giảng viên: Nguyễn Thị Minh Huyền
nguyenthiminhhuyen@hus.edu.vn
Đỗ Thanh Hà
dothanhha@hus.edu.vn
OOP -
2009-2010 http://mim.hus.edu.vn/elearning 1
2. Môn học OOP
2 tín chỉ: 30 tiết
Nghe giảng lý thuyết trên lớp: 15t
Thực hành tại phòng máy: 12t x 2
Tự học: 3t
Đề cương môn học
2009-2010 OOP - http://mim.hus.edu.vn/elearning 2
3. Tổ chức học tập
Giờ lí thuyết + thực hành: Phòng máy B (502-T5)
Lịch học: Chiều thứ Hai hàng tuần, một số buổi sáng
thứ Tư (xem lịch cụ thể kèm theo)
Ghép nhóm 2-3 người: lên danh sách (cuối giờ)
Bài tập thực hành:
Chuẩn bị chương trình ở nhà
Phân tích, chữa bài tập, chạy chương trình tại phòng máy
Kiểm tra kiến thức:
Kiểm tra thường xuyên (bài tập về nhà theo nhóm 2 người)
Kiểm tra giữa kì
Bài tập lớn (nhóm 4-5 người) + trả lời câu hỏi trên giấy
2009-2010 OOP - http://mim.hus.edu.vn/elearning 3
4. Nhập môn
Giới thiệu
Các khái niệm cơ bản của lập trình
hướng đối tượng
Giới thiệu ngôn ngữ lập trình Java
2009-2010 OOP - http://mim.hus.edu.vn/elearning 4
5. Giới thiệu (1)
Công nghệ phần mềm (software engineering):
Đặc tả yêu cầu (requirements): làm gì?
Phân tích (analysis): làm thế nào?
Thiết kế (design): tổ chức ra sao?
Lập trình (coding): viết mã chương trình
Dò lỗi (debugging): sửa lỗi
Kiểm tra (testing): đảm bảo chương trình chạy đúng
Phân phối (deployment): đưa vào sử dụng
Bảo trì (maintenance): tiếp tục hoàn thiện, phát triển, giữ
phần mềm hoạt động
2009-2010 OOP - http://mim.hus.edu.vn/elearning 5
6. Giới thiệu (2)
Phân loại ngôn ngữ lập trình:
Ngôn ngữ máy, hợp ngữ
Ngôn ngữ lập trình bậc cao
Lập trình thủ tục: Pascal, C, v.v.
Lập trình hàm: Lisp, CML, v.v.
Lập trình mô tả (lôgic): Prolog, v.v.
Lập trình hướng đối tượng: C++, Java, C# v.v.
2009-2010 OOP - http://mim.hus.edu.vn/elearning 6
7. Giới thiệu (3)
Lập trình hướng đối tượng:
Ý tưởng: Mô hình hóa các thực thể thành các đối
tượng độc lập, có thể tương tác bằng cách trao đổi
thông báo cho nhau
Lịch sử:
1967: ngôn ngữ Simula triển khai khái niệm lớp (class)
1976: ngôn ngữ Smalltalk triển khai khái niệm đóng gói,
thừa kế, đa hình – các khái niệm cơ bản của lập trình hướng
đối tượng
Các ngôn ngữ khác: C++, Objective-C, Eiffel, Java, C#,
Visual Basic.NET, Python, Ruby, v.v.
2009-2010 OOP - http://mim.hus.edu.vn/elearning 7
8. Nhập môn
Giới thiệu
Các khái niệm cơ bản của lập trình
hướng đối tượng
Giới thiệu ngôn ngữ lập trình Java
2009-2010 OOP - http://mim.hus.edu.vn/elearning 8
9. Đối tượng (object)
Biểu diễn trừu tượng của các thực thể (vật thể
hay phi vật thể)
Mô tả đối tượng:
Thuộc tính (attribute): mô tả đặc điểm đối tượng
Phương thức, còn gọi là hàm thành viên (method,
member function): mô tả các hành vi có thể của đối
tượng
Lập trình: thuộc tính – biến, phương thức – hàm
Tập hợp giá trị hiện thời của các thuộc tính: trạng
thái của đối tượng
2009-2010 OOP - http://mim.hus.edu.vn/elearning 9
10. Chương trình hướng đối tượng
Object Object communication
Function 1 Function 2
Object 1 Message
Function Function
6
DATA 3 Object 3
Function 5 Function 4 Object 2
2009-2010 OOP - http://mim.hus.edu.vn/elearning 10
11. Đối tượng – Ví dụ (1)
Ô tô
Thuộc tính:
Biển số
Loại xe
Màu sơn
...
Phương thức:
Tăng tốc độ
Bóp còi
...
2009-2010 OOP - http://mim.hus.edu.vn/elearning 11
12. Đối tượng – Ví dụ (2)
Mô tả một điểm trong mặt phẳng tọa
độ Oxy
Thuộc tính: x, y (tung độ, hoành độ)
Hành vi của các đối tượng điểm:
setX(m), setY(n)
getX(), getY()
printXY()
2009-2010 OOP - http://mim.hus.edu.vn/elearning 12
13. Đặc điểm LT hướng đối tượng
Chương trình hướng đối tượng:
Mô tả các đối tượng (thuộc tính, phương
thức)
Chương trình chính: tạo các đối tượng, gửi
thông báo yêu cầu thực hiện các hành vi nào
đó (gọi hàm)
2009-2010 OOP - http://mim.hus.edu.vn/elearning 13
14. Đặc điểm LT hướng đối tượng
Trừu tượng dữ liệu (abstraction): chương trình chỉ quan
tâm đến các đặc tính của đối tượng (gồm có gì, làm gì),
bỏ qua các tiểu tiết (làm như thế nào).
Đóng gói dữ liệu (encapsulation): Cơ chế đảm bảo môi
trường bên ngoài chỉ có thể tác động vào đối tượng
thông qua các dịch vụ (phương thức) cho bởi người viết
mã chương trình => tính toàn vẹn dữ liệu
Tính đa hình (polymorphism): cùng một thông báo, mỗi
đối tượng “phản ứng” khác nhau
Kế thừa (inheritance): Cho phép đối tượng này lấy lại
(kế thừa) những đặc tính sẵn có của đối tượng khác
2009-2010 OOP - http://mim.hus.edu.vn/elearning 14
15. Đặc điểm LT hướng đối tượng
Hệ quả:
Người sử dụng chỉ cần biết đặc tả của đối
tượng
Thay đổi mã bên trong đối tượng không ảnh
hưởng gì đến chương trình bên ngoài sử
dụng đối tượng
Ưu điểm: tính tái sử dụng cao, tăng năng
suất, đơn giản hóa độ phức tạp khi bảo
trì/mở rộng phần mềm
2009-2010 OOP - http://mim.hus.edu.vn/elearning 15
16. Lớp
Lớp (class): cấu trúc (“kiểu dữ liệu”) của đối
tượng. Mỗi đối tượng sinh ra nhờ việc thực thể
hóa (instanciation) một lớp.
Thuộc tính: dữ liệu biểu diễn trạng thái đối tượng
Phương thức (hàm): thao tác áp dụng được cho các
đối tượng. Đặc biệt:
hàm dựng (constructor) – cài đặt giá trị ban đầu, đăng kí bộ
nhớ, v.v.,
hàm hủy (destructor) – thực hiện các thao tác cần thiết khi
hủy bỏ 1 đối tượng
2009-2010 OOP - http://mim.hus.edu.vn/elearning 16
17. Đóng gói dữ liệu
Định nghĩa các mức truy cập khác nhau
tới các thuộc tính/phương thức của một
đối tượng:
Công khai (public): biến/hàm truy cập được
từ tất cả các lớp khác
Bảo vệ (protected): biến/hàm chỉ truy cập
được trong nội bộ hoặc các lớp con của nó
Riêng (private): biến/hàm chỉ có thể truy cập
được trong nội bộ lớp
2009-2010 OOP - http://mim.hus.edu.vn/elearning 17
18. Kế thừa
Tạo một lớp mới (lớp con - subclass) từ
một lớp đã có (lớp cha – parent class)
Lớp mới kế thừa tất cả các thuộc
tính/phương thức của lớp cha
Có thể bổ sung các thuộc tính/phương thức
mới
Ví dụ: Lớp “xe tải” kế thừa từ lớp “ô tô”
Một số ngôn ngữ cho phép kế thừa bội
(vd: C++)
2009-2010 OOP - http://mim.hus.edu.vn/elearning 18
19. Đa hình
Các loại đa hình:
Tải bội (overloading): cùng một tên hàm, chức năng
tương tự nhưng bản chất thực hiện khác nhau (ví dụ:
phép cộng - số, xâu).
Định nghĩa chồng (overriding): Cho phép định nghĩa
lại hàm thuộc lớp cha thành hàm mới trong lớp con
(ví dụ: định nghĩa hàm di chuyển cho các lớp con
của lớp Quân Cờ)
Tham biến (template): cùng một tên hàm trong một
lớp, nhưng số lượng tham biến khác nhau hoặc kiểu
các tham biến khác nhau.
2009-2010 OOP - http://mim.hus.edu.vn/elearning 19
20. Nhập môn
Giới thiệu
Các khái niệm cơ bản của lập trình
hướng đối tượng
Giới thiệu ngôn ngữ lập trình Java
2009-2010 OOP - http://mim.hus.edu.vn/elearning 20
21. Phân loại ngôn ngữ lập trình
hướng đối tượng
Biên dịch hoàn toàn ra mã máy (C++,
Eiffel, v.v.): hiệu năng cao hơn
Biên dịch ra mã byte chạy bởi máy ảo
(Smalltalk, Java, v.v.): chương trình ổn
định, chạy trong mọi môi trường
Thông dịch hoặc ngôn ngữ script (Ruby,
Python, JavaScript, v.v.)
2009-2010 OOP - http://mim.hus.edu.vn/elearning 21
23. Java – tổng quan (1)
Lịch sử:
Do hãng Sun Microsystems triển khai năm 1991
Dự án Green: chế tạo điều khiển từ xa vạn năng chứa hệ điều
hành có thể điều khiển toàn bộ các đồ điện tử trong nhà
Cần một ngôn ngữ lập trình tích hợp trong các đồ điện tử gia dụng
để điều khiển và cho phép chúng tương tác/trao đổi với nhau:
ngôn ngữ hướng đối tượng
C++: phức tạp, kém tính mang được (portable)
James Gosling: định nghĩa ngôn ngữ lập trình mới mang tên Oak,
sau đổi tên là Java: cơ bản dựa trên C++, chương trình đơn
giản/gọn nhẹ hơn, có tính mang được
Java được đánh giá là thích hợp cho web: chương trình nhỏ
gọn, chạy trên mọi máy
1994: Trình duyệt HotJava cho phép chạy Java applets. Từ cuối
1995: Java phát triển mạnh với sự hỗ trợ của Netscape
2009-2010 OOP - http://mim.hus.edu.vn/elearning 23
24. Java – tổng quan (2)
So sánh Java và C++:
Cú pháp Java gần như C++
Java không có các đặc tính phức tạp (dễ gây lỗi lập
trình) của C++:
Không dùng con trỏ
Không dùng thừa kế bội
Giải phóng bộ nhớ tự động
Kiểu xâu kí tự và mảng được tích hợp trong ngôn ngữ
Java chạy chậm hơn C++ (đổi lại tính mang được)
Các phiên bản của Java:
1.0, 1.1, v.v., 1.5 (Java 5), 1.6 (Java 6)
2009-2010 OOP - http://mim.hus.edu.vn/elearning 24
25. Java – tổng quan (3)
Chương trình Java:
Biên dịch: tệp mã nguồn ASCII (*.java) => tệp mã
bytecode (*.class)
Chạy chương trình: máy ảo Java (JVM: Java Virtual
Machine)
Ứng dụng (application) và ứng dụng con
(applet):
Ứng dụng: chương trình thông thường chạy trên máy
Ứng dụng con nhúng vào trình duyệt Internet: có
tính năng giới hạn (để đảm bảo tính an toàn) dùng
cho ứng dụng web
2009-2010 OOP - http://mim.hus.edu.vn/elearning 25
26. Java – tổng quan (4)
Phát triển phần mềm bằng Java:
Bộ công cụ hỗ trợ JDK (Java Development Kit), miễn
phí
javac: trình biên dịch (*.java -> *.class)
java: máy ảo thực hiện ứng dụng
appletviewer: máy ảo thực hiện applet
jdb: debugger
javap: trình dịch ngược (*.class -> *.java)
javadoc: bộ sinh tài liệu chương trình
jar: trình nén các tệp bytecode
Các phiên bản của JDK: phiên bản Java + môi
trường (Windows, Linux, Unix) – jdk1.6
2009-2010 OOP - http://mim.hus.edu.vn/elearning 26
27. Tài liệu tham khảo
Học liệu: BigJava
http://www.horstmann.com/bigjava2.html
Giáo trình Lập trình Java
(laptrinh_java.pdf)
2009-2010 OOP - http://mim.hus.edu.vn/elearning 27
28. Phần tiếp theo...
Học liệu: BigJava
http://www.horstmann.com/bigjava2.html
27 chương
Tự đọc các chương: 5, 10, 12, 14, 16,
18, 19, 24, 25, 26, 27
2009-2010 OOP - http://mim.hus.edu.vn/elearning 28