1. Trang chủ
  2. » Công Nghệ Thông Tin

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

449 1,2K 3

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 449
Dung lượng 9,7 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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ềuchương trình cùng thay đổi một biến chung

Trang 1

Công nghệ Thông tin Trường Đại học Bách Khoa Đại học Đà Nẵng

Trang 2

LOGO GIỚI THIỆU

Trang 3

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.

Trang 4

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.

Trang 5

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

Trang 6

CHƯƠNG 1

OBJECT-ORIENTED PROGRAMMING (OOP)

Trang 7

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.

Trang 8

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

Trang 9

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

Trang 10

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

Trang 11

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

Trang 12

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

Trang 13

o C++(1980): NNLT hướng đối tượng;

o Perl(1987): NNLT bậc cao (Web).

Trang 14

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

• Là phương pháp xuất hiện đầu tiên structured programming).

(non-• 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).

Trang 15

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.

Trang 16

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.

Trang 17

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.

Trang 18

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à GTchỉ phù hợp với các bài toán nhỏ, nằm trong phạm vi mộtmôđ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ốiquan hệ vĩ mô giữa các môđun trong phần mềm

Trang 19

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

o 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 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.

o 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.

Trang 20

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ầnmề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 khithay đổi giá trị

Trang 21

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

Trang 22

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ềuchươ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ôngqua 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

Trang 23

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.

Trang 24

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

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.

Trang 25

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

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.

Trang 26

LOGO LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

• Một số hệ thống “hướng đối tượng” thời kỳ đầu không cócác lớp, chỉ có các “đối tượng” và các “thông điệp” (v.d.Hypertalk)

• Hiện giờ, đã có sự thống nhất rằng hướng đối tượng là:

o Lớp (class);

o Thừa kế (inheritance) và liên kết động (dynamic binding).

• Một số đặc tính của lập trình hướng đối tượng có thể đượcthực hiện bằng C hoặc các ngôn ngữ lập trình thủ tục khác;

• Điểm khác biệt sự hỗ trợ và ép buộc ba khái niệm trên đượccài hẳn vào trong ngôn ngữ;

• Mức độ hướng đối tượng của các ngôn ngữ không giốngnhau:

o Eiffel (tuyệt đối), Java (rất cao), C++ (nửa nọ nửa kia).

Trang 27

LOGO LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

• Lịch sử ngôn ngữ lập trình hướng đối tượng:

Trang 28

LOGO LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

• OOP là phương pháp lập trình:

o Mô tả chính xác các đối tượng trong thế giới;

o Lấy đối tượng làm nền tảng xây dựng thuật toán;

o Thiết kế xoay quanh dữ liệu của hệ thống;

o Chương trình được chia thành các lớp đối tượng;

o Dữ liệu được đóng gói, che dấu và bảo vệ;

o Đối tượng làm việc với nhau qua thông báo;

o Chương trình được thiết kết theo cách từ dưới lên (bottom-up).

Trang 29

LOGO LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

• Hệ thống Hướng Đối Tượng:

o 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.

o Các đối tượng có thể kế thừa các đặc tính của đối tượng khác;

o Hoạt động thông qua sự tương tác giữa các đối tượng nhờ cơ chế truyền thông điệp:

▪ Thông báo;

▪ Gửi & nhận thông báo

Trang 30

LOGO LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

• Hướng thủ tục:

o Lấy hành động làm trung tâm.

o Hàm là xương sống.

▪ Lặt (Rau) - Ướp (Cá) - Luộc (Rau)

▪ Kho (Cá) - Nấu (Cơm)

• Hướng đối tượng:

o Lấy dữ liệu làm trung tâm.

o Đối tượng là xương sống.

▪ Rau.Lặt - Cá.Ướp - Rau.Luộc

▪ Cá.Kho - Cơm.Nấu

Thay đổi

tư duy lập trình!!

Trang 31

LOGO OBJECT & CLASS

• Object (Đối tượng):

o Chương trình là “cỗ máy” phức tạp.

o Cấu thành từ nhiều loại “vật liệu”.

o Vật liệu cơ bản: hàm, cấu trúc.

o Đã đủ tạo ra chương trình tốt?

Vật liệu mới: Đối tượng

 Viết một chương trình hướng đối tượng nghĩa là đang xây dựng một mô hình của một vài bộ phận trong thế giới thực.

Trang 32

LOGO OBJECT & CLASS

• Object (Đối tượng):

o Đặc trưng:

▪ Đóng gói cả dữ liệu và xử lý;

▪ Thuộc tính (attribute): dữ liệu của đối tượng;

▪ Phương thức (method): xử lý của đối tượng

Trang 33

LOGO OBJECT & CLASS

• Object (Đối tượng): là một thực thể đang tồn tại trong hệ thống và được xác định bằng ba yếu tố:

o Định danh đối tượng: xác định duy nhất cho mỗi đối

tượng trong hệ thống, nhằm phân biệt các đối tượng vớinhau;

o Trạng thái của đối tượng: sự tổ hợp của các giá trị của

các thuộc tính mà đối tượng đang có;

o Hoạt động của đối tượng: là các hành động mà đối tượng

có khả năng thực hiện được

Trang 34

LOGO OBJECT & CLASS

• Object (Đối tượng):

▪ 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ưnghandle khác nhau

Trang 35

LOGO OBJECT & CLASS

• Class (Lớp):

o Đối tượng là một thực thể cụ thể, tồn tại trong hệ thống;

o Lớp là một khái niệm trừu tượng, dùng để chỉ một tậphợp các đối tượng có mặt trong hệ thống

Trang 36

LOGO OBJECT & CLASS

Person1:

 Name: Peter.

 Age: 25.

 Hair Color: Brown.

 Eye Color: Brown.

 Job: Worker.

Person2:

 Name: Thomas.

 Age: 50.

 Hair Color: White.

 Eye Color: Blue.

Bản mô tả đối tượng Kiểu của đối tượng

Trang 37

LOGO OBJECT & CLASS

• Class (Lớp):

o Một lớp có thể có một trong các khả năng sau:

▪ Hoặc chỉ có thuộc tính, không có phương thức;

▪ Hoặc chỉ có phương thức, không có thuộc tính;

▪ Hoặc có cả thuộc tính, phương thức (phổ biến);

▪ Đặc biệt, lớp không có thuộc tính, phương thức nào, gọi là lớp trừu tượng, các lớp này không có đối tượng.

o Lớp và đối tượng mặc dù có mối liên hệ tương ứng lẫnnhau, nhưng lại khác nhau về bản chất

Trang 38

LOGO OBJECT & CLASS

• Class (Lớp):

o Trừu tượng hóa theo chức năng:

▪ Mô hình hóa các phương thức của lớp dựa trên hành động của đối tượng.

o Trừu tượng hóa theo dữ liệu:

▪ Mô hình hóa các thuộc tính của lớp dựa trên thuộc tính của các đối tượng tương ứng.

o Thuộc tính (attribute) là dữ liệu trình bày các đặc điểm vềmột đối tượng;

o Phương thức (method): có liên quan tới những thứ màđối tượng có thể làm Một phương thức đáp ứng mộtchức năng tác động lên dữ liệu của đối tượng (thuộctính)

Trang 39

LOGO OBJECT & CLASS

• Thuộc tính (attribute):

o Là dữ liệu trình bày các đặc điểm về một đối tượng;

o Bao gồm: Hằng, biến; Tham số nội tại

o Kiểu thuộc tính: Kiểu cổ điển; Kiểu do người dùng địnhnghĩa

• Phương thức (method):

o Có liên quan tới những thứ mà đối tượng có thể làm;

o Một 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 tính);

o Hàm nội tại của đối tượng (hàm thành viên);

o Có kiểu trả về.

Trang 40

LOGO OBJECT & CLASS

• Thông điệp (message):

o Là phương tiện để đối tượng này chuyển yêu cầu tới đốitượng khác, bao gồm:

▪ Đối tượng nhận thông điệp;

▪ Tên của phương thức thực hiện;

▪ Các tham số mà phương thức cần.

• Truyền thông điệp:

o Là cách một đối tượng triệu gọi một hay nhiều phươngthức của đối tượng khác để yêu cầu thông tin;

o 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 41

LOGO OBJECT & CLASS

▪ Bao gói: người dùng giao tiếp với hệ thống qua giao diện;

▪ Che dấu: ngăn chặn các thao tác không được phép từ bên ngoài.

o Ưu điểm:

▪ Quản lý sự thay đổi;

▪ Bảo vệ dữ liệu.

Trang 42

LOGO OBJECT & CLASS

• Tính đóng gói (encapsulation):

o Đóng gói → Thuộc tính được lưu trữ hay phương thứcđược cài đặt như thế nào → được che giấu đi từ các đốitượng khác;

o Việc che giấu những chi tiết thiết kế và cài đặt từ những

đối tượng khác được gọi là ẩn thông tin.

Trang 43

LOGO OBJECT & CLASS

• Tính đóng gói (encapsulation):

o Ví dụ: bài toán quản lý nhân viên văn

phòng với lớp Nhân viên:

o Cách tính lương nhân viên là khác nhau với

mỗi người: Tiền lương = Hệ số lương *

lương cơ bản * Tỉ lệ phần trăm

o Việc gọi phương thức tính tiền lương là

giống nhau cho mọi đối tượng Nhân viên;

o Sự giống nhau về cách sử dụng phương

thức cho các đối tượng của cùng một lớp,

nhưng cách thực hiện phương thức lại khác

nhau với các đối tượng khác nhau gọi là sự

đóng gói dữ liệu của lập trình hướng đối

tượng.

Trang 44

LOGO OBJECT & CLASS

• Tính đóng gói (encapsulation):

o Cho phép che dấu sự cài đặt chi tiết bên trong:

▪ Chỉ cần gọi các phương thức theo một cách thốngnhất;

▪ Phương thức có thể cài đặt khác nhau cho các trườnghợp khác nhau

o Cho phép che dấu dữ liệu bên trong đối tượng:

▪ Khi sử dụng, không biết thực sự bên trong đối tượng

Trang 45

LOGO OBJECT & CLASS

▪ Hoặc định nghĩa là các thuộc tính của lớp cha

o Các loại thừa kế: Đơn thừa kế & Đa thừa kế.

Trang 46

LOGO OBJECT & CLASS

• Tính thừa kế (inheritance):

o Ví dụ:

Trang 47

LOGO OBJECT & CLASS

• Tính thừa kế (inheritance):

chung: tên, ngày sinh, giới tính:

▪ Không thể loại bỏ thuộc tính cá biệt để gộp lại thànhmột lớp;

▪ Thuộc tính lương và lớp là cần thiết cho việc quản lýnhân viên, sinh viên

o Vấn đề nảy sinh:

▪ Lặp lại việc viết mã cho một số phương thức;

▪ Phải lặp lại việc sửa mã chương trình nếu có sự thayđổi về kiểu dữ liệu

Trang 48

LOGO OBJECT & CLASS

• Tính thừa kế (inheritance):

Trang 49

LOGO OBJECT & CLASS

• Tính thừa kế (inheritance):

o Cho phép lớp dẫn xuất có thể sử dụng các thuộc tính và phương thức của lớp cơ sở tương tự như

sử dụng thuộc tính và phương thức của mình;

o Cho phép chỉ cần thay đổi phương thức của lớp

cơ sở, có thể sử dụng được ở tất cả các lớp dẫn xuất;

o Tránh sự cài đặt trùng lặp mã nguồn chương trình;

o Chỉ cần thay đổi mã nguồn một lần khi thay đổi

dữ liệu của các lớp.

Trang 50

LOGO OBJECT & CLASS

• Tính thừa kế (inheritance):

o Đơn thừa kế: một lớp con chỉ thừa kế từ một lớp cha duynhất

o Ví dụ:

▪ Lớp trừu tượng hay lớp chung: XeÔtô;

▪ Lớp cụ thể hay lớp chuyên biệt: XeKhách, XeTải;

▪ Lớp chuyên biệt có thể thay thế lớp chung trong tất cả các ứng dụng.

XeÔtô

Trang 51

LOGO OBJECT & CLASS

Teacher

Student

Phd candidate Reseacher

Trang 52

LOGO OBJECT & CLASS

Trang 53

LOGO OBJECT & CLASS

• Tính đa hình (polymorphism):

o Đa hình: “nhiều hình thức”, hành động cùng tên có thểđược thực hiện khác nhau đối với các đối tượng/các lớpkhác nhau

Trang 54

LOGO OBJECT & CLASS

• Tính đa hình

(polymorphism):

o Gọi phương thức

show() từ đối tượng

của lớp Người sẽ hiển

thị tên, tuổi của người

đó;

o Gọi phương thức

show() từ đối tượng

của lớp Nhân viên sẽ

hiển thị số lương của

nhân viên;

o Gọi phương thức

show() từ đối tượng

của lớp Sinh viên sẽ

biết sinh viên đó học

lớp nào.

Trang 55

LOGO OBJECT & CLASS

• Tính đa hình (polymorphism):

trùng nhau: cùng tên, cùng tham số, cùng kiểu trả về:

▪ Sự nạp chồng phương thức

o Khi gọi các phương thức trùng tên, dựa vào đối tượng đang gọi mà chương trình sẽ thực hiện phương thức của lớp tương ứng:

▪ Kết quả sẽ khác nhau

Trang 56

LOGO OBJECT & CLASS

• Tính đa hình (polymorphism):

o Đa hình hàm - Functional polymorphism

▪ Cơ chế 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 và có thể có nhiềucài đặt khác nhau tại mỗi lớp trong các lớp đó;

▪ Ví dụ: lớp Date cài 2 phương thức setDate(),một nhậntham số là một đối tượng Date, phương thức kia nhận

3 tham số day, month, year

o Đa hình đối tượng - Object polymorphism

▪ Các đối tượng thuộc các lớp khác nhau có khả nănghiểu cùng một thông điệp theo các cách khác nhau;

▪ Ví dụ: khi nhận được cùng một thông điệp draw(), cácđối tượng Rectangle và Triangle hiểu và thực hiện cácthao tác khác nhau

Ngày đăng: 10/12/2017, 15:03

TỪ KHÓA LIÊN QUAN