Lập trình không cấu trúc ◼ Là phương pháp xuất hiện đầu tiên ◼ Gồm một dãy lệnh đơn giản được viết trong chương trình chính ◼ Sử dụng các biến dữ liệu toàn cục ◼ Lạm dụng lệnh GOTO ◼ Ngô
Trang 11Phương pháp lập trình hướng đối tượng
LẬP TRÌNH HƯỚNG ĐỐI
TƯỢNG VỚI C++
Trang 22Phương pháp lập trình hướng đối tượng
GIỚI THIỆU VÀ ÔN TẬP
Trang 33Phương pháp lập trình hướng đối tượng
NỘI DUNG
◼ Đề cương môn học.
◼ Chuẩn và quy ước lập trình.
◼ Ôn tập hàm, cấu trúc, con trỏ.
◼ Bài tập.
Trang 44Phương pháp lập trình hướng đối tượng
ĐỀ CƯƠNG MÔN HỌC
◼ Mục tiêu môn học:
◼ Định nghĩa được các khái niệm cơ bản của OOP.
◼ Áp dụng được các tính chất của OOP để giải quyết vấn đề bằng C++
Trang 55Phương pháp lập trình hướng đối tượng
Trang 66Phương pháp lập trình hướng đối tượng
TÀI NGUYÊN HỌC TẬP
◼ 1 Bruce Eckel, Thinking in C++, 2 nd Edition, Volume 1+2
Trang 77Phương pháp lập trình hướng đối tượng
TÀI NGUYÊN HỌC TẬP
◼ 2 Bjarne Stroustrup, The C++ Programming, Special Edition
Trang 88Phương pháp lập trình hướng đối tượng
TÀI NGUYÊN HỌC TẬP
◼ 3 Ulla Kirch Prinz & Peter Prinz, A Complete Guide to
Programming in C++
Trang 99Phương pháp lập trình hướng đối tượng
TÀI NGUYÊN HỌC TẬP
◼ 4 Deitel, How to Program C++ 4 th Edition
Trang 1010Phương pháp lập trình hướng đối tượng
TÀI NGUYÊN HỌC TẬP
◼ 5 Phạm Văn Ất, C++ Lập Trình Hướng Đối Tượng
◼ 6 Nguyễn Thanh Thủy, Lập Trình Hướng Đối Tượng với C++
Trang 1111Phương pháp lập trình hướng đối tượng
TÀI NGUYÊN HỌC TẬP
◼ 7 Các tài nguyên khác
Trang 1212Phương pháp lập trình hướng đối tượng
Nội dung
◼ Đề cương môn học.
◼ Chuẩn và quy ước lập trình.
◼ Ôn tập hàm, cấu trúc, con trỏ.
◼ Bài tập.
Trang 1313Phương pháp lập trình hướng đối tượng
Chuẩn và quy ước lập trình
◼ Vì sao phải có chuẩn và quy ước?
◼ Làm việc một mình:
➢ Tự làm tự hiểu.
➢ Mình luôn hiểu mình?
◼ Làm việc nhóm:
➢ Mỗi người một việc.
➢ Ráp nối công việc.
➢ Mọi người luôn hiểu nhau?
Phối hợp công việc hiệu quả Áp đặt kỷ luật!!
Trang 1414Phương pháp lập trình hướng đối tượng
Chuẩn và quy ước lập trình
◼ Không có chuẩn chung toàn thế giới!!
◼ Quy ước đặt tên (Naming Convention):
◼ Quy tắc vàng: tên phải thể hiện ý nghĩa.
➢ x, y, f, g, … ?!
➢ total, rate, create, run, … !!
◼ Quy tắc đặt tên theo kiểu “lạc đà” (Camel Case)
➢ Dùng để viết các từ dính liền nhau.
➢ Viết hoa chữ cái đầu mỗi từ.
➢ U pper C amel C ase.
➢ l ower C amel C ase.
Trang 1515Phương pháp lập trình hướng đối tượng
Chuẩn và quy ước lập trình
◼ Quy ước viết câu lệnh:
◼ Quy tắc vàng: viết câu lệnh rộng rãi, rõ ràng.
➢ x=a+b-c*d; for(int i=0;i<n;i++)
➢ x = a + b – c * d;
for (int i = 0; i < n; i++)
◼ Viết mỗi câu lệnh một dòng.
◼ Viết cách khoảng giữa hai đoạn lệnh.
◼ Quy ước viết chú thích:
◼ Quy tắc vàng: viết chú thích đầy đủ, dễ hiểu.
◼ Viết chú thích cho từng hàm.
◼ Dùng dấu // thay cho /* */.
Trang 1616Phương pháp lập trình hướng đối tượng
5 lời khuyên để đạt kết quả tốt
Trang 1717Phương pháp lập trình hướng đối tượng
5 lời khuyên để đạt kết quả tốt
1_Làm việc chăm chỉ
Trang 1818Phương pháp lập trình hướng đối tượng
5 lời khuyên để đạt kết quả tốt
2_Làm bài tập và thực hành nhiều
Trang 1919Phương pháp lập trình hướng đối tượng
5 lời khuyên để đạt kết quả tốt
3_Tự mình làm các bài tập + thực hành
Trang 2020Phương pháp lập trình hướng đối tượng
5 lời khuyên để đạt kết quả tốt
4_Phải kiên nhẫn với máy tính
Trang 2121Phương pháp lập trình hướng đối tượng
5 lời khuyên để đạt kết quả tốt
5_Nghỉ ngơi khi …
Trang 2222Phương pháp lập trình hướng đối tượng
Nội dung
◼ Đề cương môn học.
◼ Chuẩn và quy ước lập trình.
◼ Ôn tập hàm, cấu trúc, con trỏ.
◼ Bài tập.
Trang 2323Phương pháp lập trình hướng đối tượng
Ôn tập hàm, cấu trúc, con trỏ
◼ Chương trình là gì?
◼ Biến và Hằng là gì? Cách khai báo?
◼ Hàm là gì? Có mấy cách truyền tham số?
◼ Cấu trúc là gì? Cách sử dụng?
◼ Con trỏ là gì? Cách sử dụng?
◼ Header File để làm gì?
◼ Nhập xuất trong C/C++?
Trang 2424Phương pháp lập trình hướng đối tượng
Tóm tắt
◼ Đề cương môn học:
◼ Mục tiêu: định nghĩa và áp dụng OOP bằng C++.
◼ Cách thức: học tập chăm chỉ và chủ động.
◼ Chuẩn và quy ước lập trình:
◼ Chuẩn và quy ước để phối hợp công việc hiệu quả.
◼ Áp đặt kỷ luật lên việc lập trình.
◼ Quy tắc đặt tên: tên thể hiện ý nghĩa.
◼ Quy tắc viết câu lệnh: rộng rãi, rõ ràng.
◼ Quy tắc viết chú thích: đầy đủ, dễ hiểu.
Trang 2525Phương pháp lập trình hướng đối tượng
Tóm tắt
◼ Hàm, cấu trúc, con trỏ:
◼ Hàm chứa xử lý của chương trình.
◼ Cấu trúc chứa dữ liệu của chương trình.
◼ Cấu trúc dùng để đóng gói dữ liệu.
◼ Con trỏ chứa địa chỉ của biến hoặc vùng nhớ.
◼ Dùng con trỏ để thao tác linh động.
Trang 2626Phương pháp lập trình hướng đối tượng
Nội dung
◼ Đề cương môn học.
◼ Chuẩn và quy ước lập trình.
◼ Ôn tập hàm, cấu trúc, con trỏ.
◼ Bài tập.
Trang 2727Phương pháp lập trình hướng đối tượng
Trang 2828Phương pháp lập trình hướng đối tượng
Trang 2929Phương pháp lập trình hướng đối tượng
Bài tập
◼ Bài tập 1.3:
Viết chương trình cho phép thực hiện các thao tác trên kiểu đơn thức :
◼ Nhập, xuất đơn thức.
◼ Tính giá trị, đạo hàm, nguyên hàm đơn thức.
◼ Cộng, trừ, nhân, chia, so sánh hai đơn thức cùng bậc.
Trang 3030Phương pháp lập trình hướng đối tượng
Bài tập
◼ Bài tập 1.4:
Thông tin một học sinh bao gồm:
◼ Họ tên.
◼ Điểm văn, toán.
Viết chương trình cho phép thực hiện các thao tác trên kiểu học sinh :
◼ Nhập, xuất thông tin học sinh.
◼ Tính điểm trung bình.
◼ Xếp loại theo tiêu chí:
➢ Giỏi (>= 8.0), Khá (>= 7.0).
➢ Trung bình (>= 5.0), Yếu (< 5).
Trang 3131Phương pháp lập trình hướng đối tượng
Trang 3232Phương pháp lập trình hướng đối tượng
CƠ BẢN VỀ LẬP TRÌNH
HƯỚNG ĐỐI TƯỢNG
Trang 3333Phương pháp lập trình hướng đối tượng
NỘI DUNG
◼ Giới thiệu lập trình hướng đối tượng
◼ Ngôn ngữ C++, các điểm mới so với C
◼ Các khái niệm cơ bản
◼ Bài tập.
Trang 3434Phương pháp lập trình hướng đối tượng
Mục tiêu của Kỹ sư CNPM
◼ 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ệ
Trang 3535Phương pháp lập trình hướng đối tượng
Độ phức tạp 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, nhất là các chức năng thông minh
◼ Phần mềm luôn cần được sửa đổi
Trang 3636Phương pháp lập trình hướng đối tượng
Giải pháp???
◼ 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ính tái sử dụng )
◼ Giảm chi phí và thời gian phát triển
◼ Nâng cao chất lượng
Trang 3737Phương pháp lập trình hướng đối tượng
Để sử dụng lại (thì mã nguồn)
◼ Cần phải dễ hiểu
◼ Được coi là chính xác
◼ Có giao diện rõ rang
◼ Tính module hóa cao
◼ Không yêu cầu thay đổi khi sử dụng chương trình mới
Trang 3838Phương pháp lập trình hướng đối tượng
Mục tiêu của việc thiết kế 1 phần mềm
thành phần có thể được sử dụng trong nhiều phần mềm khác nhau
Trang 3939Phương pháp lập trình hướng đối tượng
Các phương pháp lập trình
◼ Lập trình không cấu trúc ( Unstructured Programming )
◼ Lập trình thủ tục ( Procedural Programming )
◼ Lập trình module ( Modular Programming )
◼ Lập trình hướng đối tượng ( Object Oriented Programming )
◼ …
Trang 4040Phương pháp lập trình hướng đối tượng
Lập trình không cấu trúc
◼ Là phương pháp xuất hiện đầu tiên
◼ Gồm một dãy lệnh đơn giản được viết trong chương trình chính
◼ Sử dụng các biến dữ liệu toàn cục
◼ Lạm dụng lệnh GOTO
◼ Ngôn ngữ: Asembly, Basic
◼ Nhược điểm:
◼ Khó hiểu, khó bảo trì, hầu như được sử dụng lại
◼ Chất lượng kém, chi phí cao
◼ Không có khả năng kiểm soát phamj vi truy xuất dữ liệu
◼ Không thể phát triển được các ứng dụng lớn
Main Program
Program
Data
Trang 4141Phương pháp lập trình hướng đối tượng
Lập trình thủ tục
◼ Ra đời vào những năm 70
◼ Tổ chức thành các chương trình con độc lập với nhau.
◼ Mỗi chương trình con lại có thể chia nhỏ thành các chương trình con nhỏ hơn Program
Main Program
Data
Procedure 1 Procedure
2 Function 3
Trang 4242Phương pháp lập trình hướng đối tượng
Lập trình thủ tục
◼ Sử dụng các lệnh có cấu trúc: if then else, for, while…
◼ Ngôn ngữ: Pascal, C, Foxpro…
◼ Chương trình chính có nhiệm vụ truyền dữ liệu cho các thủ tục, hàm
◼ Ưu điểm:
◼ Có cấu trúc →Dễ hiểu hơn, dễ bảo trì hơn
◼ Dễ dàng tạo ra các thư viện phần mềm
Chương trình = Cấu trúc Dữ liệu + Giải thuật
Trang 4343Phương pháp lập trình hướng đối tượng
Trang 4444Phương pháp lập trình hướng đối tượng
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 CTDL thay đổi → mã nguồn cũng phải thay đổi
◼ 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 tự động
◼ Không mô tả được đầy đủ, trung thực các hệ thống thực tế
Trang 4545Phương pháp lập trình hướng đối tượng
◼ Mỗi module có dữ liệu
riêng và độc lập với nhau
Trang 4646Phương pháp lập trình hướng đối tượng
Nhược điểm của các phương pháp
lập trình truyền thống
◼ Chương trình khó kiểm soát
◼ Khó khăn trong việc bổ sung, nâng cấp chương trình
◼ Khi thay đổi, bổ sung dữ liệu dùng chung thì phải thay đổi gần như tất cả thủ tục/hàm liên quan
◼ Khả năng sử dụng lại các đoạn mã chưa nhiều
◼ Không mô tả đầy đủ, trung thực hệ thống trong thực tế
◼ ➔ Cần một phương pháp lập trình mới???
Trang 4747Phương pháp lập trình hướng đối tượng
Lập trình Hướng đối tượng
◼ Dựa trên ý tưởng
◼ Xem thế giới ta đang sống là tuyển tập các đối
tượng, ví dụ như : bạn, những người bạn cùng
lớp với bạn, con chó của bạn, ĐTDĐ của bạn
và
◼ Có sự tương tác giữa các đối tượng này bên
trong ứng dụng để thực hiện các yêu cầu như:
bạn có một con chó, bạn gọi điện 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
◼ Xem dữ liệu (các thuộc tính) và các chức
năng/xử lý (các phương thức) trên dữ liệu
đó như một đối tượng riêng Một đối
tượng đóng bao cả dữ liệu và các
phương thức
Trang 4848Phương pháp lập trình hướng đối tượng
Lập trình Hướng đối tượng
◼ Mô tả chính xác các đối tượng trong thế giới thực
◼ Thiết kế xoay quanh dữ liệu của hệ thống
◼ Mã lệnh và dữ liệu được gắn kết với nhau thành một thể duy nhất là đối tượng
◼ Chương trình được chia thành các lớp đối tượng
◼ Dữ liệu được đóng gói, che dấu và bảo vệ
◼ Đối tượng làm việc với nhau qua thông báo
◼ Chương trình được thiết kết theo cách từ dưới lên (bottom-up)
Trang 4949Phương pháp lập trình hướng đối tượng
Lập trình Hướng đối tượng
➢Lập trình hướng đối tượng là phương pháp
lập trình dựa trên kiến trúc lớp (class)
và đối tượng (object)
Trang 5050Phương pháp lập trình hướng đối tượng
Lập trình Hướng đối tượng
Trang 5151Phương pháp lập trình hướng đối tượng
Một số khái niệm trong OOP
◼ Hệ thống hướng đối tượng
◼ Đối tượng
◼ Thuộc tính & Phương thức
◼ Lớp & Lớp con
◼ Lớp trừu tượng
◼ Truyền thông điệp
◼ Sự trừu tượng hoá
◼ Sự đóng gói
◼ Sự kế thừa
◼ Sự đa hình
Trang 5252Phương pháp lập trình hướng đối tượng
Hệ thống hướng đối tượng
◼ Là hệ thống có đặc điểm sau:
◼ Gồm tập hợp các đối tượng
◼ Sự đóng gói của 2 thành phần:
➢ Dữ liệu (thuộc tính của đối tượng)
➢ Các thao tác trên dữ liệu
◼ Các đối tượng có thể kế thừa các đặc tính của
Trang 5353Phương pháp lập trình hướng đối tượng
Đối tượng (Object)
◼ Là khái niệm trừu tượng phản ánh các thực
◼ Một đối tượng là sự đóng gói 2 thành phần:
◼ Trạng thái (state) hay dữ liệu
◼ Các ứng xử (behavior) hay hành vi, thao tác
Trang 5454Phương pháp lập trình hướng đối tượng
Hai thành phần của một đối tượng
Trang 5555Phương pháp lập trình hướng đối tượng
Đối tượng trong thực tế
❖Ví dụ: Một người
Trang 5656Phương pháp lập trình hướng đối tượng
Đối tượng trong OOP
❖Tách biệt giữa giao tiếp và cài đặt cụ thể
Trang 5757Phương pháp lập trình hướng đối tượng
Thuộc tính và phương thức
Trang 5858Phương pháp lập trình hướng đối tượng
Thuộc tính và phương thức
◼ Các thuộc tính (Attributes)
◼ Thành phần dữ liệu của một đối tượng
◼ Xác định các đặc trưng mô tả của một đối tượng
◼ Ví dụ: con chó của bạn có màu nâu, ĐTDĐ của bạn thuộc hãng Nokia
◼ Các phương thức (Methods)
◼ Thành phần xử lý của một đối tượng
◼ Xác định các hành vi của một đối tượng
◼ Ví dụ: con chó đi, ĐTDĐ nhắn tin SMS
Trang 5959Phương pháp lập trình hướng đối tượng
Thuộc tính và phương thức
◼ Thuộc tính bao gồm:
◼ Hằng, biến
◼ Tham số nội tại
◼ Thuộc tính được xác định kiểu, gồm:
Trang 6060Phương pháp lập trình hướng đối tượng
Trang 6161Phương pháp lập trình hướng đối tượng
Lớp
◼ Một khuôn mẫu (template, blueprint, prototype) để tạo đối tượng
Ví dụ: Lớp “Chó” xác định các thuộc tính và các phương thức của một con chó, nhưng lớp “Chó”
không phải là một đối tượng
◼ Một đối tượng được tạo từ một lớp
◼ Là một thể hiện/minh họa của một lớp
Ví dụ: bạn là một thể hiện lớp “SinhViên”, con chó của bạn là một minh họa của lớp “Chó”
Trang 6262Phương pháp lập trình hướng đối tượng
Lớp
Trang 6363Phương pháp lập trình hướng đối tượng
Trang 6464Phương pháp lập trình hướng đối tượng
Lớp và Đối tượng
Trang 6565Phương pháp lập trình hướng đối tượng
Lớp và Đối tượng
Trang 6666Phương pháp lập trình hướng đối tượng
Lớp và Đối tượng
Trang 6767Phương pháp lập trình hướng đối tượng
◼ Bản thân nó chưa có ý nghĩa nên chưa thể
viết mã cho đối tượng
◼ Lớp hình phẳng
◼ Lớp động vật
Trang 6868Phương pháp lập trình hướng đối tượng
Truyền thông điệp
Trang 6969Phương pháp lập trình hướng đối tượng
Truyền thông điệp
◼ Thông điệp:
◼ Là phương tiện để đối tượng này chuyển yêu cầu tới đối tượng khác.
◼ Một thông điệp bao gồm:
◼ Handle của đối tượng đích (đối tượng chủ)
◼ Tên phương thức cần thực hiện
◼ Các thông tin cần thiết khác (tham số)
◼ Hệ thống yêu cầu đối tượng thực hiện phương
thức như sau:
◼ Gửi thông báo và tham số cho đối tượng
◼ Kiểm tra tính hợp lệ của thông báo
◼ Gọi thực hiện hàm tương ứng phương thức
Trang 7070Phương pháp lập trình hướng đối tượng
Kết hợp dữ liệu và hành vi
◼ Trong cách tiếp cận thủ tục cổ điển, hệ thống được
xây dựng trên 2 sơ đồ phân cấp chằng chịt: sơ đồ phân cấp dữ liệu & sơ đồ phân cấp thủ tục Sự liên
hệ giữa một loại dữ liệu và các thủ tục xử lý dữ liệu rất mờ nhạt
➔ Sữa chữa, nâng cấp trong tương lai rất khó khăn.
◼ Cách tiếp cận O.O đã loại bỏ những nhược điểm kể
trên bằng cách kết hợp phần dữ liệu và thủ tục vào trong một thực thể duy nhất
➔ Hệ thống trở thành một sơ đồ phân cấp duy nhất các đối tượng
Trang 7171Phương pháp lập trình hướng đối tượng
Sơ đồ đối tượng
◼ Dùng để mô tả các lớp đối tượng
◼ Gồm sơ đồ lớp và sơ đồ thể hiện
◼ Sơ đồ lớp mô tả các lớp đối tượng trong hệ thống.
◼ Một lớp đối tượng được biểu diễn bằng 1 HCN có 3
Trang 7272Phương pháp lập trình hướng đối tượng
Sơ đồ lớp và sơ đồ thể hiện
Trang 7373Phương pháp lập trình hướng đối tượng
Thiết kế theo HĐT.
◼ Trừu tượng hóa DL và các hàm/ thủ tục liên quan
◼ Chia hệ thống ra thành các lớp/đối tượng
◼ Mỗi lớp/đối tượng có các tính năng và hành động
chuyên biệt
◼ Các lớp có thể được sử dụng để tạo ra nhiều đối
tượng
Trang 7474Phương pháp lập trình hướng đối tượng
Trừu tượng hóa (Abstraction)
◼ Là khả năng bỏ qua hay không để ý tới các
thành phần không quan trọng.
◼ Các loại trừu tượng hoá:
◼ Trừu tượng hoá dữ liệu: không quan tâm các chi tiết không quan trọng bên trong
◼ Trừu tượng hoá chức năng: không quan tâm làm thế nào để thực hiện công việc
◼ Chỉ quan tâm tới đặc điểm quan trọng
◼ Bỏ qua các chi tiết không liên quan
Trang 7575Phương pháp lập trình hướng đối tượng
Trừu tượng hóa (Abstraction)
Trang 7676Phương pháp lập trình hướng đối tượng
Trừu tượng hóa (Abstraction)
Trang 7777Phương pháp lập trình hướng đối tượng
Trừu tượng hóa (Abstraction)
Trang 7878Phương pháp lập trình hướng đối tượng
Các đặc điểm quan trọng của OO
Trang 7979Phương pháp lập trình hướng đối tượng
Đóng gói (Encapsulation)
◼ Đóng gói: Nhóm những gì có liên quan với nhau
vào làm một ➔ khi dùng có thể gọi thông qua một cái tên
◼ 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 dấu thông tin: đóng gói để che dấu một số
thông tin & chi tiết cài đặt nội bộ để bên ngoài không nhìn thấy
◼ Che dấu những gì mà người dùng không cần
◼ Che dấu những gì mà mình cần giữ bí mật