Một số hệ Unix chứa khoảng 4 triệu 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
35 trang |
Chia sẻ: lylyngoc | Lượt xem: 1636 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Chương 1 Giới thiệu phương pháp lập trình hướng đối tượng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
1
CHƢƠNG 1
GIỚI THIỆU PHƢƠNG
PHÁP LẬP TRÌNH HƢỚNG
ĐỐI TƢỢNG
LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG
Nguyễn Hữu Thể
Object-oriented programming
2
NỘI DUNG
Phương pháp lập trình truyền thống 1
Phương pháp lập trình hướng đối tượng 2
Ưu điểm của LT HĐT so với lập trình truyền thống 3
5
Phương pháp phân tích bài toán theo tiếp cận HĐT 4
Object-oriented programming
3
Mục tiêu của kỹ sƣ phần mềm
Tạo ra sản phẩm tốt một cách có hiệu quả
Nắm bắt được công nghệ
Object-oriented programming
4
Độ phức tạp, độ lớn PM ngày càng cao
Một số hệ Unix chứa khoảng 4 triệu 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
Object-oriented programming
5
Độ phức tạp, độ lớn PM ngày càng cao
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 (tái sử dụng)
Giảm chi phí và thời gian phát triển
Nâng cao chất lượng
Object-oriented programming
6
Để sử dụng lại mã nguồn
Cần dễ hiểu
Chính xác
Giao diện rõ ràng
Tính module hóa
Không yêu cầu thay đổi khi sử dụng trong chương trình mới
Object-oriented programming
7
Kỹ thuật lập trình truyền thống & HĐT
Phương pháp lập trình truyền thống
Phương pháp lập trình hướng đối tượng
Ưu điểm của lập trình OOP so với lập trình truyền thống
Phương pháp phân tích bài toán theo tiếp cận hướng đối tượng
Object-oriented programming
8
1. Phƣơng pháp lập trình truyền thống
Lập trình không có cấu trúc (unstructured 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 toàn cục
Lạm dụng lệnh GOTO
Không sử dụng hàm, viết tất cả trong một hàm main()
Object-oriented programming
9
Lập trình không có cấu trúc
Cho phép viết những đoạn mã rối rắm (spaghetti code).
Lập trình viên sử dụng các lệnh goto” và “gosub” để nhảy đến
mọi nơi trong chương trình.
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
Đoạn trình trên khó theo dõi, khó hiểu, dễ gây lỗi, khó sửa đổi.
lệnh nhảy đến vị trí
bất kỳ trong chương
trình
Object-oriented programming
10
Lập trình không có cấu trúc
Nhƣợc điểm:
Gặp khó khăn khi xây dựng các chương trình lớn.
Hầu như không thể sử dụng lại
Những dòng lệnh được lặp lại thì buộc phải copy thành nhiều
chỗ
Chương trình sẽ không khoa học, khó sửa chữa và bảo trì.
Object-oriented programming
11
Lập trình thủ tục (procedure programming)
Lấy các thủ tục (hàm) làm nền tảng xây dựng chương trình.
Các ngôn ngữ: Pascal, C, ...
Chương trình
Được phân nhỏ thành các thủ tục,
Mỗi thủ tục sẽ có chức năng riêng biệt.
Các thủ tục có thể gọi qua lại lẫn nhau.
Chƣơng trình = Cấu trúc dữ liệu + Giải thuật
Object-oriented programming
Lập trình thủ tục (tt)
Kiểu lập trình rối
rắm trên dẫn tới
phong cách lập trình
mới: lập trình cấu
trúc, với các ngôn
ngữ Algol, Pascal,
C...
int LuyThua(int x, int y){
int t=1;
for(int i=1; i<=y; i++)
t = t*x;
return t;
}
int main(){
int a, b, t;
a = 5, b = 10;
int t = LuyThuy(a,b);
printf(“Kq: %d”,t);
return 0;
}
Mã chương trình tập trung thể hiện thuật toán: làm như thế
nào.
Object-oriented programming
13
Lập trình thủ tục (tt)
Ƣu điểm:
Chương trình được tổ chức khoa học, dễ quản lý, bảo trì
Giải quyết được nhiều bài toán lớn
Nhóm các thủ tục theo các chức năng: Lập trình module
Nhƣợc điểm:
Cách tiếp cận đôi khi chưa phù hợp với các hoạt động
trong thế giới thực
Diễn đạt thiếu tự nhiên
Khó mô tả những quan hệ phức tạp của thế giới tự nhiên.
Bảo mật kém
Object-oriented programming
14
Lập trình thủ tục (tt)
Nhƣợc điểm:
Bảo mật kém do không thể giới hạn truy xuất đến một dữ liệu
struct Date
{
int day;
int month;
int year;
};
void setDate(Date& date, int newDay,
int newMonth, int newYear)
{
date.day = newDay;
...
}
...
Chuyện gì xảy ra nếu các đối số
newDay, newMonth, newYear
tạo thành ngày tháng năm không hợp lệ?
Object-oriented programming
15
2. Lập trình hƣớng đối tƣợng
Lập trình hướng đối tượng (Object-oriented programming)
Dữ liệu, chức năng thao tác trên dữ liệu được gom lại thành 1
đối tượng
Chương trình không dựa trên chức năng mà dựa trên đối
tượng.
Object-oriented programming
16
2. Lập trình hƣớng đối tƣợng (tt)
Dữ liệu được gắn chặt với các hàm riêng
• Chỉ có các hàm đó tác động lên,
• Các hàm bên ngoài không thể truy cập.
Cho phép phân tích bài toán thành:
• Các thực thể (đối tượng)
• Xây dựng các dữ liệu cùng các hàm xung quanh các đối
tượng.
Object-oriented programming
17
2. Lập trình hƣớng đối tƣợng (tt)
Lập trình hướng đối tượng cho phép khắc phục các hạn
chế của các phương pháp trước
class Date{
public:
void setDate(int newDay, int newMonth, int newYear);
int getDay() { return day; }
...
private:
int day;
int month;
int year;
};
void Date::setDate(int newDay, int newMonth, int newYear){
//check validity of newDay, newMonth, newYear
...
//set new values
...
}
Object-oriented programming
18
Dựa trên ý tưởng
Xem thế giới là tuyển tập các đối tượng
• VD: bạn, những người bạn cùng lớp với bạn,
con chó, ĐTDĐ của bạn.
Có sự tương tác giữa các đối tượng bên trong
ứng dụng.
• VD: bạn có một con chó, bạn gọi điện thoại
bằng ĐTDĐ của bạn, bạn nói chuyện với bạn
cùng lớp của bạn.
Dữ liệu + chức năng/xử lý => đối tƣợng
(thuộc tính) (phương thức)
Một đối tượng đóng bao cả dữ liệu và các
phương thức.
2. Lập trình hƣớng đối tƣợng (tt)
Object-oriented programming
19
2. Lập trình hƣớng đối tƣợng (tt)
Một số ngôn ngữ lập trình hƣớng đối tƣợng
Simula (1967)
Smalltalk (1980)
C++ (1980s)
C#
Java
PHP
Perl
…
Object-oriented programming
20
2. Lập trình hƣớng đối tƣợng (tt)
Một số ngôn ngữ lập trình hƣớng đối tƣợng
Xuất phát từ tư tưởng OOP của ngôn ngữ SIMULA67,
Trung tâm nghiên cứu Palo Alto (hãng XEROR) nghiên cứu
ngôn ngữ OOP đầu tiên với tên Smalltalk.
Sau đó các ngôn ngữ OOP lần lượt ra đời như Eiffel, C++,
Delphi, Java, PHP, C#…
XEROR đã đề ra tư tưởng giao diện biểu tượng trên màn hình (icon
base screen interface)
Apple Macintosh, Microsoft Windows phát triển giao diện đồ họa.
Trong Microsoft Windows, tư tưởng OOP được thể hiện:
• Chúng ta click vào đối tượng
• Mỗi đối tượng có thể là control menu, control menu box,
menu bar, scroll bar, button, minimize box,...
Object-oriented programming
21
Một số khái niệm
Lớp:
Các đối tượng có các đặc tính tƣơng tự nhau được gom
chung lại thành lớp đối tượng.
• VD: Người là một lớp đối tượng. Một lớp đối tượng được
đặc trưng bằng các thuộc tính, và các hoạt động (hành vi,
thao tác).
Thuộc tính (attribute) là một thành phần của đối tượng, có
giá trị nhất định cho mỗi đối tượng tại mỗi thời điểm trong hệ
thống.
• Vd: Tên, Tuổi, Cân nặng là các thuộc tính của Người
Thao tác (operation) thể hiện hành vi của một đối tượng tác
động qua lại với các đối tượng khác hoặc với chính nó.
Object-oriented programming
22
Sơ đồ lớp và sơ đồ thể hiện
Sinh vieân
Hoï teân
Naêm sinh
Maõ soá
Ñieåm TB
Ñi hoïc
Ñi thi
Phaân loaïi
(Sinh vieân)
Nguyeãn Vaên A
1990
02.020.001
9.5
Teân lôùp
Thuoäc tính
Thao taùc
Sô ñoà lôùp Sô ñoà theå hieän
Object-oriented programming
23
Các đặc điểm quan trọng của OO
Các lớp đối tượng - Classes
Đóng gói – Encapsulation
Kế thừa - Inheritance
Đa hình - Polymorphism
Object-oriented programming
24
Trừu tượng hóa
Cách nhìn khái quát hóa về một tập các đối tượng có chung các
đặc điểm được quan tâm (bỏ qua các chi tiết không cần thiết).
Object-oriented programming
25
Đóng gói – Che dấu thông tin
Đóng gói: Nhóm những gì có liên quan với nhau vào làm một
Các hàm/ thủ tục đóng gói các câu lệnh
Các đối tượng đóng gói dữ liệu của chúng và các thủ tục có
liên quan
Che giấu thông tin: đóng gói để che một số thông tin và chi
tiết cài đặt nội bộ để bên ngoài không nhìn thấy
Che giấu những gì mà người dùng không cần
Che giấu những gì mà mình cần giữ bí mật
Object-oriented programming
26
Kế thừa
Cho phép một lớp A có được các thuộc tính và thao tác của lớp
B, (giống như thuộc tính và thao tác đó đã được định nghĩa tại
lớp A).
Cho phép cài đặt nhiều quan hệ giữa các đối tượng
Object-oriented programming
27
Đa hình
Cho phép một tên thao tác hoặc thuộc tính có thể được
định nghĩa tại nhiều lớp
Có thể có nhiều cài đặt khác nhau tại mỗi lớp trong các lớp
đó
Object-oriented programming
28
Một số thuật ngữ hướng đối tượng
OOM (Object Oriented Methodology): Phương pháp luận hướng
đối tượng.
OOA (Object Oriented Analysis): Phân tích hướng đối tượng.
OOD: Object Oriented Design (Thiết kế hướng đối tượng).
OOP: Object Oriented Programming (lập trình hướng đối tượng).
Inheritance: Kế thừa
Polymorphism: Đa hình
Encapsulation: Tính đóng gói
Object-oriented programming
29
3. Ƣu điểm của OOP
Phân tích, thiết kế và phát triển một vấn đề trong khuôn khổ
những khái niệm và thuật ngữ thuộc lĩnh vực ứng dụng.
Vì thế, có một sự tương hợp cao nhất giữa việc phát triển ứng
dụng và vấn đề thực tế.
Dễ mô tả các quan hệ phân cấp trong thế giới tự nhiên.
Object-oriented programming
30
3. Ƣu điểm của OOP
Hỗ trợ việc chia sẻ bên trong một ứng dụng.
Tái sử dụng => giảm chi phí.
Giảm thiểu các lỗi => dễ bảo trì ứng dụng => do khả năng
tái sử dụng.
Tăng tốc tiến trình thiết kế và phát triển ứng dụng.
Object-oriented programming
31
Ví dụ về tái sử dụng code
Object-oriented programming
32
4. PP phân tích bài toán theo tiếp cận HĐT
Mô hình hóa và thiết kế theo hướng đối tượng
Suy nghĩ mới về vấn đề cần giải quyết dùng các mô hình
Được tổ chức xung quanh các khái niệm trong thế giới
thực.
Trong một hệ thống thông tin hướng đối tượng, mọi thứ
được xem như các đối tượng.
Mỗi đối tượng là sự kết hợp:
Cấu trúc dữ liệu (các thuộc tính)
và hoạt động (các thủ tục xử lý dữ liệu).
Object-oriented programming
33
4. PP phân tích bài toán theo tiếp cận HĐT
Kỹ thuật mô hình hoá OMT (Object Modeling Technique)
của J.Rumbaugh bao gồm các bước:
Object-oriented programming
34
Lịch sử ngôn ngữ lập trình
35