Professional Documents
Culture Documents
(Object-oriented Programming)
LẬP TRÌNH HƯỚ
HƯỚNG ĐỐ
ĐỐI TƯỢ
TƯỢNG Mục tiêu
C++
Giới thiệu những khái niệm cơ bản trong lập
trình hướng đối tượng
Nội dung
Trừu tượng hóa, đối tượng, lớp
Bộ môn Công nghệ phần mềm
Khoa Công Nghệ Thông Tin
Thuộc tính và phương thức
Đại Học Bách khoa – Đại học Đà Nẵng CHƯƠNG
Thông điệp và truyền thông điệp
18/02/2009
4. Lập trình hướng đối tượng không thể phát triển các ứng dụng lớn
18/02/2009 18/02/2009
1
Lập trình không có cấu trúc Lập trì
trình có cấu trú
trúc/lập trì
trình thủ tục
(non-
(non-structured programming) (structured/procedural programming)
10 k=1 sử dụng các lệnh có cấu trúc: for, do while, if
20 gosub 100
30 if y > 120 goto 60 Lệnh nhảy đến vị trí bất then else...
kỳ trong chương trình
40 k=k+1 các ngôn ngữ: Pascal, C, ...
50 goto 20
60 print k, y chương trình là tập các hàm/thủ tục
70 stop
100 y = 3*k*k + 7*k - 3 Mã chương trình tập trung thể hiện thuật toán:
110 return
làm như thế nào.
Đoạn trình trên khó theo dõi, khó hiểu, dễ gây lỗi, Ưu điểm
khó sửa đổi.
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
18/02/2009 18/02/2009
Lập trì
trình có cấu trú
trúc/lậ
c/lập trì
trình thủ
thủ tục
Ví dụ
int func(int j) Nhược điểm
{
dữ liệu và mã xử lý là tách rời
return (3*j*j + 7*j-3);
dữ liệu thụ động, xử lý chủ động
}
khó đảm bảo tính đúng đắn của dữ liệu
int main()
không tự động khởi tạo hay giải phóng dữ liệu động
{
không đảm bảo được tính nhất quán và các ràng
int k = 1 buộc của dữ liệu
while (func(k) < 120)
khó cấm mã ứng dụng sửa dữ liệu của thư viện
k++;
khó bảo trì code
printf("%d\t%d\n", k, func(k)); phần xử lý có thể nằm rải rác
return(0); 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
18/02/2009 18/02/2009
2
Ví dụ Tại sao phả
phải thay đổi cấu trú
trúc dữ liệ
liệu?
struct Date
{ Cấu trúc dữ liệu là mô hình của bài toán cần giải
int day;
int month;
quyết
int year;
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
void setDate(Date& date, int newDay, int newMonth, hoàn thiện ngay từ đầu.
int newYear)
Tạo ra một cấu trúc dữ liệu hợp lý luôn là vấn đề đau
{ Chuyện gì xảy ra nếu các đối số
đầu của người lập trình.
date.day = newDay; newDay, newMonth, newYear Bản thân bài toán cũng không bất biến
… tạo thành ngày tháng năm không hợp lệ?
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.
18/02/2009 18/02/2009
3
Ví dụ: MyDate (2) Giải pháp
Thay đổi cấu trúc dữ liệu: Che dấu dữ liệu (che dấu cấu trúc)
Truy cập dữ liệu thông qua giao diện xác định
Tại Sao
Sử dụng giao diện
Tiếp Cận Hướng Đối Tượng?
Loại bỏ những thiếu sót của tiếp cận theo thủ
tục
MyDate d;; Trong OOP
...
Dữ liệu được xem như một phần tử chính yếu và
d.day = 30; // compile error được bảo vệ
d.setDay(31);
Hàm gắn kết với dữ liệu, thao tác trên dữ liệu
Phân tách bài toán thành nhiều thực thể (đối tượng)
d.setMonth(2); // should return False
Æ xây dựng dữ liệu + hàm cho các đối tượng này.
Tăng cường khả năng sử dụng lại
18/02/2009 18/02/2009
4
Đặc Điểm Quan Trọng
Thuận Lợi
Nhấn mạnh trên dữ liệu hơn là thủ tục
So với các tiếp cận cổ điển thì OOP có
Các chương trình được chia thành các đối những thuận lợi sau:
tượng
OOP cung cấp một cấu trúc module rõ ràng
Dữ liệu được che giấu và không thể được Giao diện được định nghĩa tốt
truy xuất từ các hàm bên ngoài Những chi tiết cài đặt được ẩn
Các đối tượng có thể giao tiếp với nhau
OOP giúp lập trình viên duy trì mã và sửa đổi mã tồn
tại dễ dàng (các đối tượng được tạo ra với những
thông qua các hàm khác nhau nhỏ so với những đối tượng tồn tại).
Dữ liệu hay các hàm mới có thể được
OOP cung cấp một framework tốt với các thư viện mã
thêm vào khi cần mà các thành phần có thể được chọn và sửa đổi bởi
lập trình viên.
Theo tiếp cận từ dưới lên
18/02/2009 18/02/2009
5
Lịch sử ngôn ngữ lập trình Trừu Tượng Hóa
FORTRAN I FLOW-MATIC
(Abstraction)
ALGOL 58 COMTRAN 1957
FORTRAN II
COBOL LISP 1960
ALGOL 60
BASIC
FORTRAN IV CPL
1965
Trừu tượng hóa
SIMULA I
SIMULA 67 PL/1 BCPL
Phân biệt cần thiết với chi tiết
ALGOL 68 B
PROLOG
1970 Giao diện – Cài đặt
PASCAL C
Cái gì – Thế nào
1975
Phân tích – Thiết kế
ADA
MODULA 2 SMALLTALK 80 1980
Các kỹ thuật trừu tượng
OBERON MODULA 3 BETA C++ 1985
Đóng gói (encapsulation)
Ẩn thông tin (information hiding)
EIFFEL
1990
JAVA 1995
Thừa kế (inheritance)
C# 2000
Đa hình (polymorphism)
18/02/2009 18/02/2009
6
Đối Tượng Phần Mềm
Đối Tượng
(Software Object)
Các đối tượng phần mềm có thể được
dùng để biểu diễn các đối tượng thế giới
thực.
Cũng có trạng thái và Đối tượng phần mềm Đối tượng phần mềm Xe Đạp
hành động
Trạng thái: thuộc tính Đối tượng (object) là một Thuộc tính được xác định
thực thể phần mềm bao bởi giá trị cụ thể gọi là
(attribute; property) bọc các thuộc tính và thuộc tính thể hiện.
Hành động: phương thức các phương thức liên Một đối tượng cụ thể
quan. được gọi là một thể hiện.
(method)
18/02/2009 18/02/2009
18/02/2009 18/02/2009
7
Đối tượng (Object) Ví Dụ Lớp Xe Đạp
Khai báo cho lớp
Đối tượng có XeDap
định danh
Đối tượng của lớp
thuộc tính (dữ liệu)
XeDap
hành vi (phương thức)
Mỗi đối tượng bất kể đang ở trạng thái nào đều có
định danh và được đối xử như một thực thể riêng
biệt.
mỗi đối tượng có một handle (trong C++ là địa
chỉ)
hai đối tượng có thể có giá trị giống nhau nhưng
handle khác nhau
18/02/2009 18/02/2009
18/02/2009 18/02/2009
8
Thuộc Tính Thông Điệp
& Phương Thức & Truyền Thông Điệp
Thuộc tính (attribute) là dữ liệu trình bày Thông điệp (message) là một lời yêu cầu
các đặc điểm về một đối tượng. một hoạt động. Gồm có:
Đốitượng nhận thông điệp
Phương thức (method) có liên quan tới
Tên của phương thức thực hiện
những thứ mà đối tượng có thể làm. Một
Các tham số mà phương thức cần
phương thức đáp ứng một chức năng tác
động lên dữ liệu của đối tượng (thuộc Truyền thông điệp: một đối tượng triệu
gọi một hay nhiều phương thức của đối
tính). tượng khác để yêu cầu thông tin.
18/02/2009 18/02/2009
18/02/2009 18/02/2009
9
Tính Thừa Kế Tính Thừa Kế
(Inheritance) (Inheritance)
Hệ thống hướng đối tượng cho phép các cho phép các phần
lớp được định nghĩa kế thừa từ các lớp mềm sử dụng quan hệ
khác “là”
Ví dụ, lớp xe đạp leo núi và xe đạp đua là
những lớp con (subclass) của lớp xe đạp. giúp ta thiết kế các
Thừa kế nghĩa là các phương thức và các dịch vụ tổng quát rồi
thuộc tính được định nghĩa trong một lớp chuyên môn hóa
có thể được thừa kế hoặc được sử dụng chúng
lại bởi lớp khác.
18/02/2009 18/02/2009
18/02/2009 18/02/2009
10