SlideShare a Scribd company logo
Lập trình hướng đối tượng
Khái niệm
(Dựa trên slides của PGS. TS. Nguyễn Việt Hà)
OOP: Khái niệm2
Nội dung
 Lịch sử phát triển của kỹ thuật lập trình
 Hạn chế của kỹ thuật lập trình truyền thống
 Khái niệm lập trình hướng đối tượng
 Đóng gói/Che giấu thông tin
OOP: Khái niệm3
Tài liệu tham khảo
 Giáo trình Lập trình HĐT, chương 3
OOP: Khái niệm4
Phần mềm ngày càng lớn
 Một số hệ Unix chứa khoảng 4M dòng lệnh
 MS Windows chứa hàng chục triệu dòng lệnh
 Người dùng ngày càng đòi hỏi nhiều chức năng, đặc
biệt là chức năng thông minh
 Phần mềm luôn cần được sửa đổi
OOP: Khái niệm5
Vì vậy
 Cần kiểm soát chi phí
 Chi phí phát triển
 Chi phí bảo trì
 Giải pháp chính là sử dụng lại
 Giảm chi phí và thời gian phát triển
 Nâng cao chất lượng
 Được sử dụng lại chứng tỏ có chất lượng tốt
OOP: Khái niệm6
Để sử dụng lại (mã nguồn)
 Cần dễ hiểu
 Được coi là chính xác
 Có giao diện rõ ràng
 Không/ít yêu cầu thay đổi khi sử dụng trong phần
mềm mới
OOP: Khái niệm7
Các phương pháp lập trình
 Lập trình không có cấu trúc
 Lập trình có cấu trúc (lập trình thủ tục)
 Lập trình logic
 Lập trình hàm
 Lập trình hướng đối tượng
OOP: Khái niệm8
Lập trình không có cấu trúc
(non-structured programming)
 Là phương pháp xuất hiện đầu tiên
 các ngôn ngữ như Assembly, Basic
 sử dụng các biến tổng thể
 lạm dụng lệnh GOTO
 Các nhược điểm
 khó hiểu, khó bảo trì, hầu như không thể sử dụng lại
 chất lượng kém
 chi phí cao
 không thể phát triển các ứng dụng lớn
OOP: Khái niệm9
Ví dụ
10 k =1
20 gosub 100
30 if y > 120 goto 60
40 k = k+1
50 goto 20
60 print k, y
70 stop
100 y = 3*k*k + 7*k-3
110 return
OOP: Khái niệm10
Lập trình có cấu trúc/lập trình thủ tục
(structured/procedural programming)
 Sử dụng các lệnh có cấu trúc: for, do while, if then
else...
 Các ngôn ngữ: Pascal, C, ...
 Chương trình là tập các hàm/thủ tục
 Ưu điểm
 Chương trình được cục bộ hóa, do đó dễ hiểu, dễ bảo trì
hơn
 Dễ dàng tạo ra các thư viện phần mềm
OOP: Khái niệm11
Ví dụ
struct Date {
int nam, mon, day;
};
...
print_date(Date d) {
printf(”%d / %d / %dn”, d.day,
d.mon, d.nam);
}
OOP: Khái niệm12
Lập trình có cấu trúc/lập trình thủ tục
 Nhược điểm
 dữ liệu và mã xử lý là tách rời
 người lập trình phải biết cấu trúc dữ liệu (vấn đề này
một thời gian dài được coi là hiển nhiên)
 khi thay đổi cấu trúc dữ liệu thì mã xử lý (thuật toán)
phải thay đổi theo
 khó đảm bảo tính đúng đắn của dữ liệu
 không tự động khởi tạo hay giải phóng dữ liệu động
OOP: Khái niệm13
Tại sao phải thay đổi cấu trúc dữ liệu?
 Cấu trúc dữ liệu là mô hình của bài toán cần giải
quyết
 Do thiếu kiến thức về bài toán, về miền ứng dụng...,
không phải lúc nào cũng tạo được cấu trúc dữ liệu
hoàn thiện ngay từ đầu.
 Tạo ra một cấu trúc dữ liệu hợp lý luôn là vấn đề đau
đầu của người lập trình.
 Bản thân bài toán cũng không bất biến
 Cần phải thay đổi cấu trúc dữ liệu để phù hợp với các
yêu cầu thay đổi.
OOP: Khái niệm14
Các vấn đề
 Thay đổi cấu trúc
 dẫn đến việc sửa lại mã chương trình (thuật toán)
tương ứng và làm chi phí phát triển tăng cao.
 không tái sử dụng được các mã xử lý ứng với cấu trúc
dữ liệu cũ.
 Đảm bảo tính đúng đắn của dữ liệu
 một trong những nguyên nhân chính gây ra lỗi phần
mềm là gán các dữ liệu không hợp lệ
 cần phải kiểm tra tính đúng đắn của dữ liệu mỗi khi
thay đổi giá trị
OOP: Khái niệm15
Ví dụ: MyDate
MyDate.java:
class MyDate {
private int year, month, day;
}
MyCalendar.java:
MyDate d = new MyDate();
d.day = 32; // invalid day
d.day = 31; d.month = 2; // how to check
d.day = d.day + 1; //
OOP: Khái niệm16
Ví dụ: MyDate (2)
Thay đổi cấu trúc dữ liệu:
MyDate.java:
class MyDate {
public short year;
public short mon_n_day;
}
OOP: Khái niệm17
Giải pháp
 Che giấu dữ liệu (che giấu cấu trúc)
 Truy cập dữ liệu thông qua giao diện xác định
class MyDate {
private int year, mon, day;
public int getDay() {...}
public boolean setDay(int day)
{day=day}
...
}
OOP: Khái niệm18
Sử dụng giao diện
MyCalendar.java:
MyDate d = new MyDate();
...
d.day = 32; // error
d.setDay(32);
d.setMonth(2); // should return False
OOP: Khái niệm19
Data
Method 1 Method 2 Method 3
Data
Method 1 Method 2 Method 3
an object
another object
Function 1 Function 2
Global data
Function 4 Function 3
OOP: Khái niệm20
Đóng gói/che giấu thông tin
 Đóng gói dữ liệu và các thao tác tác động lên dữ liệu
thành một thể thống nhất (lớp đối tượng) thuận tiện
cho sử dụng lại
 Che giấu thông tin
 thao tác với dữ liệu thông qua các giao diện xác định
 che giấu người lập trình khách (client programmer) cái có
khả năng thay đổi (tách cái bất biến ra khỏi cái khả biến)
OOP: Khái niệm21
Lớp và đối tượng
 Lớp đối tượng (class) là khuôn mẫu để sinh ra đối
tượng
 Đối tượng là thể hiện (instance) của một lớp. Đối
tượng có
 thuộc tính (dữ liệu)
 định danh
 hành vi (phương thức)
OOP: Khái niệm22
Hệ thống hướng đối tượng
 Bao gồm một tập các đối tượng
 mỗi đối tượng chịu trách nhiệm một công việc
 Các đối tượng tương tác thông qua trao đổi thông
điệp (message passing)
 Các đối tượng có thể tồn tại phân tán/có thể hoạt
động song song
Mô hình hóa đối tượng
MyDate
--year
--month
--day
+ getDay()
+ setDay(int)
+ getMonth()
+ setMonth(int)
+ getYear()
+ setYear(int)
- validDate(int, int, int)
OOP: Khái niệm23
OOP: Khái niệm24
Lợi ích của lập trình hướng đối tượng
 năng suất lập trình (năng suất phát triển)
 chất lượng phần mềm
 tính hiểu được của phần mềm
 vòng đời của phần mềm
OOP: Khái niệm25
OOP và OOL
 Có thể thể hiện phần nào tư tưởng đóng gói/che
giấu thông tin trên ngôn ngữ thủ tục
 không triệt để, khó kiểm soát
 Ngôn ngữ hướng đối tượng cung cấp khả năng kiểm
soát truy cập; ngoài ra
 kế thừa
 đa hình
26

More Related Content

Similar to 2 introduction to oop

1.OOP Introduction (1).pptx
1.OOP Introduction (1).pptx1.OOP Introduction (1).pptx
1.OOP Introduction (1).pptx
Hải Nguyễn Đăng
 
BÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
BÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNGBÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
BÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Trường Phạm
 
lap-trinh-huong-doi-tuong_nguyen-manh-son_lthdt_ptit - [cuuduongthancong.com]...
lap-trinh-huong-doi-tuong_nguyen-manh-son_lthdt_ptit - [cuuduongthancong.com]...lap-trinh-huong-doi-tuong_nguyen-manh-son_lthdt_ptit - [cuuduongthancong.com]...
lap-trinh-huong-doi-tuong_nguyen-manh-son_lthdt_ptit - [cuuduongthancong.com]...
tPhan78
 
Dotnet
DotnetDotnet
Dotnet
daicathu
 
Bg ngonngulaptrinh c++
Bg ngonngulaptrinh c++Bg ngonngulaptrinh c++
Bg ngonngulaptrinh c++
Cu Chuần
 
Oop 0
Oop 0Oop 0
Lap trinh huong_doi_tuong_cpp_dhct_lesson06
Lap trinh huong_doi_tuong_cpp_dhct_lesson06Lap trinh huong_doi_tuong_cpp_dhct_lesson06
Lap trinh huong_doi_tuong_cpp_dhct_lesson06xcode_esvn
 
Lớp học lập trình android tại hà đông
Lớp học lập trình android tại hà đôngLớp học lập trình android tại hà đông
Lớp học lập trình android tại hà đông
Enter Focus
 
Báo cáo kĩ thuật phần mềm và ứng dụng
Báo cáo kĩ thuật phần mềm và ứng dụngBáo cáo kĩ thuật phần mềm và ứng dụng
Báo cáo kĩ thuật phần mềm và ứng dụngVượng Đặng
 
Ngon ngu lap_trinh_c++
Ngon ngu lap_trinh_c++Ngon ngu lap_trinh_c++
Ngon ngu lap_trinh_c++
Da To
 
Giới thiệu môn học
Giới thiệu môn họcGiới thiệu môn học
Giới thiệu môn họcNguyen Tran
 
đồ áN thiết kế web tuyển dụng sử dụng asp.net
đồ áN thiết kế web tuyển dụng sử dụng asp.netđồ áN thiết kế web tuyển dụng sử dụng asp.net
đồ áN thiết kế web tuyển dụng sử dụng asp.net
nataliej4
 
Các phương pháp phân tích thiết kế phần.pptx
Các phương pháp phân tích thiết kế phần.pptxCác phương pháp phân tích thiết kế phần.pptx
Các phương pháp phân tích thiết kế phần.pptx
dong92356
 
Kich ban bai 3 chuong 2(đinh thị hà k33103225)
Kich ban bai 3 chuong 2(đinh thị hà k33103225)Kich ban bai 3 chuong 2(đinh thị hà k33103225)
Kich ban bai 3 chuong 2(đinh thị hà k33103225)Tin 5CBT
 
Bao cao web cake php
Bao cao web cake phpBao cao web cake php
Bao cao web cake php
laonap166
 

Similar to 2 introduction to oop (20)

1.OOP Introduction (1).pptx
1.OOP Introduction (1).pptx1.OOP Introduction (1).pptx
1.OOP Introduction (1).pptx
 
BÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
BÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNGBÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
BÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
 
lap-trinh-huong-doi-tuong_nguyen-manh-son_lthdt_ptit - [cuuduongthancong.com]...
lap-trinh-huong-doi-tuong_nguyen-manh-son_lthdt_ptit - [cuuduongthancong.com]...lap-trinh-huong-doi-tuong_nguyen-manh-son_lthdt_ptit - [cuuduongthancong.com]...
lap-trinh-huong-doi-tuong_nguyen-manh-son_lthdt_ptit - [cuuduongthancong.com]...
 
Dotnet
DotnetDotnet
Dotnet
 
Bg ngonngulaptrinh c++
Bg ngonngulaptrinh c++Bg ngonngulaptrinh c++
Bg ngonngulaptrinh c++
 
Oop 0
Oop 0Oop 0
Oop 0
 
Chuong2 c
Chuong2 c Chuong2 c
Chuong2 c
 
Lap trinh huong_doi_tuong_cpp_dhct_lesson06
Lap trinh huong_doi_tuong_cpp_dhct_lesson06Lap trinh huong_doi_tuong_cpp_dhct_lesson06
Lap trinh huong_doi_tuong_cpp_dhct_lesson06
 
Huong doi tuong
Huong doi tuongHuong doi tuong
Huong doi tuong
 
Lớp học lập trình android tại hà đông
Lớp học lập trình android tại hà đôngLớp học lập trình android tại hà đông
Lớp học lập trình android tại hà đông
 
Báo cáo kĩ thuật phần mềm và ứng dụng
Báo cáo kĩ thuật phần mềm và ứng dụngBáo cáo kĩ thuật phần mềm và ứng dụng
Báo cáo kĩ thuật phần mềm và ứng dụng
 
Ngon ngu lap_trinh_c++
Ngon ngu lap_trinh_c++Ngon ngu lap_trinh_c++
Ngon ngu lap_trinh_c++
 
Giới thiệu môn học
Giới thiệu môn họcGiới thiệu môn học
Giới thiệu môn học
 
đồ áN thiết kế web tuyển dụng sử dụng asp.net
đồ áN thiết kế web tuyển dụng sử dụng asp.netđồ áN thiết kế web tuyển dụng sử dụng asp.net
đồ áN thiết kế web tuyển dụng sử dụng asp.net
 
Phạm văn ất
Phạm văn ấtPhạm văn ất
Phạm văn ất
 
Các phương pháp phân tích thiết kế phần.pptx
Các phương pháp phân tích thiết kế phần.pptxCác phương pháp phân tích thiết kế phần.pptx
Các phương pháp phân tích thiết kế phần.pptx
 
Kich ban bai 3 chuong 2(đinh thị hà k33103225)
Kich ban bai 3 chuong 2(đinh thị hà k33103225)Kich ban bai 3 chuong 2(đinh thị hà k33103225)
Kich ban bai 3 chuong 2(đinh thị hà k33103225)
 
Lesson06
Lesson06Lesson06
Lesson06
 
Csdl
CsdlCsdl
Csdl
 
Bao cao web cake php
Bao cao web cake phpBao cao web cake php
Bao cao web cake php
 

2 introduction to oop

  • 1. Lập trình hướng đối tượng Khái niệm (Dựa trên slides của PGS. TS. Nguyễn Việt Hà)
  • 2. OOP: Khái niệm2 Nội dung  Lịch sử phát triển của kỹ thuật lập trình  Hạn chế của kỹ thuật lập trình truyền thống  Khái niệm lập trình hướng đối tượng  Đóng gói/Che giấu thông tin
  • 3. OOP: Khái niệm3 Tài liệu tham khảo  Giáo trình Lập trình HĐT, chương 3
  • 4. OOP: Khái niệm4 Phần mềm ngày càng lớn  Một số hệ Unix chứa khoảng 4M dòng lệnh  MS Windows chứa hàng chục triệu dòng lệnh  Người dùng ngày càng đòi hỏi nhiều chức năng, đặc biệt là chức năng thông minh  Phần mềm luôn cần được sửa đổi
  • 5. OOP: Khái niệm5 Vì vậy  Cần kiểm soát chi phí  Chi phí phát triển  Chi phí bảo trì  Giải pháp chính là sử dụng lại  Giảm chi phí và thời gian phát triển  Nâng cao chất lượng  Được sử dụng lại chứng tỏ có chất lượng tốt
  • 6. OOP: Khái niệm6 Để sử dụng lại (mã nguồn)  Cần dễ hiểu  Được coi là chính xác  Có giao diện rõ ràng  Không/ít yêu cầu thay đổi khi sử dụng trong phần mềm mới
  • 7. OOP: Khái niệm7 Các phương pháp lập trình  Lập trình không có cấu trúc  Lập trình có cấu trúc (lập trình thủ tục)  Lập trình logic  Lập trình hàm  Lập trình hướng đối tượng
  • 8. OOP: Khái niệm8 Lập trình không có cấu trúc (non-structured programming)  Là phương pháp xuất hiện đầu tiên  các ngôn ngữ như Assembly, Basic  sử dụng các biến tổng thể  lạm dụng lệnh GOTO  Các nhược điểm  khó hiểu, khó bảo trì, hầu như không thể sử dụng lại  chất lượng kém  chi phí cao  không thể phát triển các ứng dụng lớn
  • 9. OOP: Khái niệm9 Ví dụ 10 k =1 20 gosub 100 30 if y > 120 goto 60 40 k = k+1 50 goto 20 60 print k, y 70 stop 100 y = 3*k*k + 7*k-3 110 return
  • 10. OOP: Khái niệm10 Lập trình có cấu trúc/lập trình thủ tục (structured/procedural programming)  Sử dụng các lệnh có cấu trúc: for, do while, if then else...  Các ngôn ngữ: Pascal, C, ...  Chương trình là tập các hàm/thủ tục  Ưu điểm  Chương trình được cục bộ hóa, do đó dễ hiểu, dễ bảo trì hơn  Dễ dàng tạo ra các thư viện phần mềm
  • 11. OOP: Khái niệm11 Ví dụ struct Date { int nam, mon, day; }; ... print_date(Date d) { printf(”%d / %d / %dn”, d.day, d.mon, d.nam); }
  • 12. OOP: Khái niệm12 Lập trình có cấu trúc/lập trình thủ tục  Nhược điểm  dữ liệu và mã xử lý là tách rời  người lập trình phải biết cấu trúc dữ liệu (vấn đề này một thời gian dài được coi là hiển nhiên)  khi thay đổi cấu trúc dữ liệu thì mã xử lý (thuật toán) phải thay đổi theo  khó đảm bảo tính đúng đắn của dữ liệu  không tự động khởi tạo hay giải phóng dữ liệu động
  • 13. OOP: Khái niệm13 Tại sao phải thay đổi cấu trúc dữ liệu?  Cấu trúc dữ liệu là mô hình của bài toán cần giải quyết  Do thiếu kiến thức về bài toán, về miền ứng dụng..., không phải lúc nào cũng tạo được cấu trúc dữ liệu hoàn thiện ngay từ đầu.  Tạo ra một cấu trúc dữ liệu hợp lý luôn là vấn đề đau đầu của người lập trình.  Bản thân bài toán cũng không bất biến  Cần phải thay đổi cấu trúc dữ liệu để phù hợp với các yêu cầu thay đổi.
  • 14. OOP: Khái niệm14 Các vấn đề  Thay đổi cấu trúc  dẫn đến việc sửa lại mã chương trình (thuật toán) tương ứng và làm chi phí phát triển tăng cao.  không tái sử dụng được các mã xử lý ứng với cấu trúc dữ liệu cũ.  Đảm bảo tính đúng đắn của dữ liệu  một trong những nguyên nhân chính gây ra lỗi phần mềm là gán các dữ liệu không hợp lệ  cần phải kiểm tra tính đúng đắn của dữ liệu mỗi khi thay đổi giá trị
  • 15. OOP: Khái niệm15 Ví dụ: MyDate MyDate.java: class MyDate { private int year, month, day; } MyCalendar.java: MyDate d = new MyDate(); d.day = 32; // invalid day d.day = 31; d.month = 2; // how to check d.day = d.day + 1; //
  • 16. OOP: Khái niệm16 Ví dụ: MyDate (2) Thay đổi cấu trúc dữ liệu: MyDate.java: class MyDate { public short year; public short mon_n_day; }
  • 17. OOP: Khái niệm17 Giải pháp  Che giấu dữ liệu (che giấu cấu trúc)  Truy cập dữ liệu thông qua giao diện xác định class MyDate { private int year, mon, day; public int getDay() {...} public boolean setDay(int day) {day=day} ... }
  • 18. OOP: Khái niệm18 Sử dụng giao diện MyCalendar.java: MyDate d = new MyDate(); ... d.day = 32; // error d.setDay(32); d.setMonth(2); // should return False
  • 19. OOP: Khái niệm19 Data Method 1 Method 2 Method 3 Data Method 1 Method 2 Method 3 an object another object Function 1 Function 2 Global data Function 4 Function 3
  • 20. OOP: Khái niệm20 Đóng gói/che giấu thông tin  Đóng gói dữ liệu và các thao tác tác động lên dữ liệu thành một thể thống nhất (lớp đối tượng) thuận tiện cho sử dụng lại  Che giấu thông tin  thao tác với dữ liệu thông qua các giao diện xác định  che giấu người lập trình khách (client programmer) cái có khả năng thay đổi (tách cái bất biến ra khỏi cái khả biến)
  • 21. OOP: Khái niệm21 Lớp và đối tượng  Lớp đối tượng (class) là khuôn mẫu để sinh ra đối tượng  Đối tượng là thể hiện (instance) của một lớp. Đối tượng có  thuộc tính (dữ liệu)  định danh  hành vi (phương thức)
  • 22. OOP: Khái niệm22 Hệ thống hướng đối tượng  Bao gồm một tập các đối tượng  mỗi đối tượng chịu trách nhiệm một công việc  Các đối tượng tương tác thông qua trao đổi thông điệp (message passing)  Các đối tượng có thể tồn tại phân tán/có thể hoạt động song song
  • 23. Mô hình hóa đối tượng MyDate --year --month --day + getDay() + setDay(int) + getMonth() + setMonth(int) + getYear() + setYear(int) - validDate(int, int, int) OOP: Khái niệm23
  • 24. OOP: Khái niệm24 Lợi ích của lập trình hướng đối tượng  năng suất lập trình (năng suất phát triển)  chất lượng phần mềm  tính hiểu được của phần mềm  vòng đời của phần mềm
  • 25. OOP: Khái niệm25 OOP và OOL  Có thể thể hiện phần nào tư tưởng đóng gói/che giấu thông tin trên ngôn ngữ thủ tục  không triệt để, khó kiểm soát  Ngôn ngữ hướng đối tượng cung cấp khả năng kiểm soát truy cập; ngoài ra  kế thừa  đa hình
  • 26. 26