Tải bản đầy đủ (.pdf) (449 trang)

Slide Lập trình hướng đối tượng C++

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (9.7 MB, 449 trang )

LẬP TRÌNH
HƯỚNG ĐỐI
TƯỢNG (C++)

Giảng viên:
Đặng Hoài Phương
Bộ môn:
Công nghệ phần mềm
Khoa:
Công nghệ Thông tin
Trường Đại học Bách Khoa
Đại học Đà Nẵng

LOGO


LOGO






GIỚI THIỆU

Đặng Hoài Phương.
E-mail:
Tel: 0935578555
Khoa Công nghệ thông tin, trường Đại học
Bách khoa, Đại học Đà Nẵng.



LOGO

NỘI DUNG MÔN HỌC

Chương 1: Object-Oriented Programming (OOP).
Chương 2: Các mở rộng của C++ so với C.
Chương 3: Pointer.
Chương 4: Class & Object.
Chương 5: Operator Overloading.
Chương 6: Inheritance.
Chương 7: Polymorphism.
Chương 8: Template.
Chương 9: Exception.


LOGO

TÀI LIỆU THAM KHẢO

1. Đặng Hoài Phương, Slide bài giảng Lập trình
hướng đối tượng, Khoa CNTT, trường Đại học
Bách Khoa, Đại học Đà Nẵng, 2015.
2. Lê Thị Mỹ Hạnh, Giáo trình Lập trình hướng đối
tượng, Khoa CNTT, trường Đại học Bách khoa,
Đại học Đà Nẵng.
3. Phạm Văn Ất, C++ và Lập trình hướng đối tượng,
NXB Giao thông vận tải.
4. Bruce Eckel, Thinking in C++. Second Edition.
MindView Inc., 2000.



LOGO

ĐÁNH GIÁ & YÊU CẦU

• Chuyên cần và bài tập: 20%
o Làm đầy đủ bài tập về nhà.

• Thi giữa kỳ: 20%
o Trắc nghiệm trên máy tính.

• Thi cuối kỳ: 60%
o Trắc nghiệm trên máy tính.

• Yêu cầu:
o Mang theo laptop và dây cắm nối mỗi buổi học;
o Chỉ điểm danh 01 lần/học kỳ;
❖Vắng buổi điểm danh → SEE YOU NEXT TIME.


LOGO

CHƯƠNG 1
OBJECT-ORIENTED
PROGRAMMING (OOP)


LOGO


NGÔN NGỮ LẬP TRÌNH

• Ngôn ngữ lập trình (NNLT): là ngôn ngữ dùng để
diễn tả thuật toán sao cho máy tính hiểu và thực hiện
được.
• 3 loại NNLT:
o Ngôn ngữ máy (Mã máy):
▪ Các lệnh được mã hóa bằng các kí hiệu 0 – 1;
▪ Chương trình có thể được nạp vào bộ nhớ và thực hiện ngay.

o Hợp ngữ (Assembly): sử dụng các từ viết tắt tiếng Anh
để diễn tả câu lệnh.
o Ngôn ngữ bậc cao:
▪ Các lệnh được mã hóa bằng một ngôn ngữ (gần với Tiếng Anh);
▪ Chương trình phải được chuyển đổi thành mã máy thông qua
một chương trình dịch.


LOGO

LỊCH SỬ NGÔN NGỮ LẬP TRÌNH


LOGO

LỊCH SỬ NGÔN NGỮ LẬP TRÌNH


LOGO


LỊCH SỬ NGÔN NGỮ LẬP TRÌNH


LOGO

LỊCH SỬ NGÔN NGỮ LẬP TRÌNH


LOGO

LỊCH SỬ NGÔN NGỮ LẬP TRÌNH


LOGO

LỊCH SỬ NGÔN NGỮ LẬP TRÌNH

• 1950s: các NNLT đơn giản;
• 1970s:
o Pascal(1970): người dùng tự xác định dữ liệu (danh sách, sơ đồ cây, đồ thị);
o C(1972): NNLT hướng cấu trúc.

• 1980s:
o C++(1980): NNLT hướng đối tượng;
o Perl(1987): NNLT bậc cao (Web).

• 1990-2000:
o Python(1990): mã nguồn ngắn;
o Java(1995):
o PHP(1995): thực thi trên server, phát triển Web.


• 2000s:
o C#(2001): .NET framework.

• 2010-nay:
o Swift(2014): dành cho hệ điều hành Mac OS.


LOGO

LẬP TRÌNH PHI CẤU TRÚC

• Là phương pháp xuất hiện đầu tiên (nonstructured programming).
• Giải quyết các bài toán nhỏ, tương đối đơn
giản (lĩnh vực tính toán).
• Đặc trưng:
Program

main program
data

…..
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 giản;
o Đơn luồng;
o Sử dụng biến toàn cục, lạm dụng lệnh GOTO;
o Chỉ gồm một chương trình chính.


LOGO

LẬP TRÌNH PHI CẤU TRÚC

• Nhược điểm:
o Không có khả năng kiểm soát dữ liệu (phạm vi
truy xuất dữ liệu);
o Không thể tái sử dụng lại các đoạn mã đã viết;
o Mã chương trình dài dòng, khó theo dõi;
o Logic chương trình khó hiểu, dễ gây lỗi.
o Không thể phát triển các ứng dụng lớn.

• Ứng dụng trong phạm vi các module nhỏ nhất
của các phương pháp lập trình khác.


LOGO

LẬP TRÌNH HƯỚNG CẤU TRÚC

• Procedure-Oriented Programming – POP;

• Lập trình hướng cấu trúc: tổ chức chương trình
thành các chương trình con
o PASCAL: thủ tục & hàm;
o C: hàm.
o Hàm: là 1 đơn vị chương trình độc lập để thực
hiện 1 công việc nào đó;
o Trao đổi dữ liệu giữa các hàm thông qua các tham
số của hàm;
→ Chương trình hướng cấu trúc = cấu trúc dữ liệu
+ tập hợp hàm.


LOGO

LẬP TRÌNH HƯỚNG CẤU TRÚC

• Ưu điểm:
o Chương trình được cục bộ hóa, do đó dễ hiểu, dễ
bảo trì hơn;
o Dễ dàng tạo ra các thư viện phần mềm;
o Chương trình sáng sủa, dễ hiểu, dễ theo dõi;
o Tư duy giải thuật rõ ràng.
❖Trừu tượng hóa chức năng (Functional Astraction):
o Không quan tâm đến cấu trúc hàm;
o Chỉ cần biết kết quả thực hiện của hàm.

→ Nền tảng của lập trình hướng cấu trúc.


LOGO


LẬP TRÌNH HƯỚNG CẤU TRÚC

• Nhược điểm:
o Không đảm bảo tính nhất quán và toàn vẹn dữ liệu;
o Không hỗ trợ việc tái sử dụng mã nguồn:
▪ Chương trình = Cấu trúc dữ liệu (CTDL) + Giải thuật (GT);
▪ GT luôn phụ thuộc chặt chẽ vào CTDL;
▪ CTDL thay đổi thì GT phải thay đổi → viết lại mã chương
trình.

o Không phù hợp với phần mềm lớn: tư duy CTDL và GT
chỉ phù hợp với các bài toán nhỏ, nằm trong phạm vi một
môđun của chương trình. Với dự án phần mềm lớn,
LTCT tỏ ra không hiệu quả trong việc giải quyết mối
quan hệ vĩ mô giữa các môđun trong phần mềm.


LOGO

LẬP TRÌNH HƯỚNG CẤU TRÚC

• Tại sao phải thay đổi CTDL:
oCấ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
CTDL 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.


oBả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.


LOGO

LẬP TRÌNH HƯỚNG CẤU TRÚC

• Vấn đề đặt ra khi thay đổi CTDL:
o 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ũ.

o Đả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ị.


LOGO

LẬP TRÌNH HƯỚNG CẤU TRÚC

• Vấn đề đặt ra khi thay đổi CTDL:
o Ví dụ: struct Date


o Thay đổi CTDL


LOGO

TIẾP CẬN HƯỚNG ĐỐI TƯỢNG

• Xuất phát từ hai hạn chế chính của Lập trình hướng
cấu trúc:
o Không quản lý được sự thay đổi dữ liệu khi có nhiều
chương trình cùng thay đổi một biến chung;
o Không tiết kiệm được tài nguyên: giải thuật gắn liền với
CTDL, nếu CTDL thay đổi, sẽ phải thay đổi giải thuật.

• Phương pháp tiếp cận mới: phương pháp lập trình
hướng đối tượng. Với hai mục đích chính:
o Đóng gói, che dấu dữ liệu: (che dấu cấu trúc) để hạn chế
sự truy nhập tự do vào dữ liệu. Truy cập dữ liệu thông
qua giao diện xác định;
o Cho phép sử dụng lại mã nguồn, hạn chế việc viết mã lại
từ đầu.


LOGO

TIẾP CẬN HƯỚNG ĐỐI TƯỢNG

• Đóng gói được thực hiện theo phương pháp trừu tượng hóa
đối tượng từ thấp lên cao:

o Thu thập các thuộc tính của mỗi đối tượng, gắn các thuộc tính vào
đối tượng tương ứng;
o Nhóm các đối tượng có thuộc tính tương tự nhau thành nhóm, loại
bỏ các thuộc tính cá biệt, chỉ giữ lại các thuộc tính chung nhất. Đây
gọi là quá trình trừu tượng hóa đối tượng thành lớp;
o Đóng gói các dữ liệu của đối tượng vào lớp tương ứng. Mỗi thuộc
tính của đối tượng trở thành thuộc tính của lớp tương ứng;
o Việc truy nhập dữ liệu được thực hiện thông qua các phương thức
được trang bị cho lớp;
o Khi có thay đổi trong dữ liệu của đối tượng, chỉ thay đổi các
phương thức truy nhập thuộc tính của lớp, mà không cần thay đổi
mã nguồn của chương trình sử dụng lớp tương ứng.


LOGO

TIẾP CẬN HƯỚNG ĐỐI TƯỢNG

• Tái sử dụng mã nguồn được thực hiện thông
qua cơ chế kế thừa trong lập trình hướng đối
tượng
o Các lớp có thể được kế thừa nhau để tận dụng các
thuộc tính, các phương thức của nhau;
o Trong lớp dẫn xuất (lớp được thừa kế) có thể sử
dụng lại các phương thức của lớp cơ sở mà không
cần cài đặt lại mã nguồn;
o Khi lớp dẫn xuất định nghĩa lại phương thức cho
mình, lớp cơ sở cũng không bị ảnh hưởng và
không cần thiết sửa đổi lại mã nguồn.



LOGO

TIẾP CẬN HƯỚNG ĐỐI TƯỢNG

• Ưu điểm:
o Không có nguy cơ dữ liệu bị thay đổi tự do trong
chương trình;
o Khi thay đổi cấu trúc dữ liệu của một đối tượng,
không cần thay đổi mã nguồn của các đối tượng
khác, mà chỉ cần thay đổi một số thành phần của
đối tượng bị thay đổi;
o Có thể sử dụng lại mã nguồn, tiết kiệm được tài
nguyên;
o Phù hợp với dự án phần mềm lớn, phức tạp.


×