Chuong2 c

39
Lập trình hướng đối tượng C++ Giảng viên giảng dạy: Nguyễn Hữu Vân Long

Transcript of Chuong2 c

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

Giảng viên giảng dạy: Nguyễn Hữu Vân Long

BM MTT&TT 2

Chương 2Lập trình hướng đối tượng OOP

p Các khái niệm cơ bản của C++

p Lập trình cấu trúc trong C++

p Các đặc điểm mới của C++

BM MTT&TT 3

Nội dung bài giảng L ch s  ngôn ng  l p trìnhị ử ữ ậ

Gi i thi u OOPớ ệ

Đ c tr ng c a OOPặ ư ủ

Các đ c đi m chính c a OOPặ ể ủ

Câu h i ôn t pỏ ậ

BM MTT&TT 4

Ngôn ngữ máy

Là các lệnh/chỉ thị của các bộ xử lý của máy tính.

Là dãy các giá trị nhị phân 0,1.

Không gần với ngôn ngữ của con người.

Khó hiểu, khó nhớ!

Hợp ngữ

Trừu tượng hóa cho ngôn ngữ máy nền tảng.

Các lệnh máy dưới dạng các dãy số 0, 1 lúc này được ký hiệu bằng các chỉ thị gần với ngôn ngữ con người.

Trong giai đoạn này, máy tính được sử dụng chủ yếu để tính toán

Lịch sử ngôn ngữ lập trình

BM MTT&TT 5

Ngôn ngữ cấp cao (ngôn ngữ ra lệnh)

Trừu tượng hóa cho hợp ngữ.

Vẫn đòi hỏi người lập trình suy nghĩ dưới dạng cấu trúc máy tính.

Người lập trình phải thiết lập mối quan hệ giữa mô hình máy (máy tính) và vấn đề cần giải quyết (thế giới thật).

Trong giai đoạn này, máy tính bắt đầu được sử dụng để giải quyết nhiều vấn đề trong thế giới thật.

Lịch sử ngôn ngữ lập trình

BM MTT&TT 6

Ngôn ngữ lập trình C

Thay đổi cách tiếp cận và nhìn nhận về lập trình một cách cơ bản.

Khi thiết kế một ngôn ngữ lập trình, sự cân nhắc luôn được xem xét giữa:

Tính dễ dàng sử dụng và sức mạnh Sự an toàn và hiệu quả Sự chặt chẽ và khả năng mở rộng

Được phát minh và được cài đặt đầu tiên bởi Dennis Ritchie trên một máy DEC PDP-11 sử dụng hệ điều hành UNIX.

Sự ra đời của C đã đánh dấu một thời kỳ mới của ngôn ngữ máy tính. Kết quả là sự mạnh mẽ, hiệu quả và ngôn ngữ cấu trúc dễ học

Lịch sử ngôn ngữ lập trình

BM MTT&TT 7

Sự cần thiết của C++

Suốt thập niên 70 và 80, C trở thành ngôn ngữ lập trình nổi trội và được sử dụng cho nay. C là một ngôn ngữ thành công và hữu ích

Quản lý tính phức tạp của chương trình là cơ sở cho sự ra đời của C++. Đặt vấn đề:

Lập trình = đưa các chỉ dẫn máy nhị phân bằng cách sử dụng front panel chương trình nhỏ

Ngôn ngữ Assembly ra đời: biểu diễn ký hiệu chỉ dẫn máy chương trình lớn hơn, phức tạp hơn.

Ngôn ngữ cấp cao: Fortran không dễ hiểu và sử dụng

Năm 60, ra đời lập trình có cấu trúc C hạn chế: kích thước, tính phức tạp của project quá lớn.

Đầu những năm 80, giải quyết vấn đề: OOP ra đời giải quyết những vấn đề đó

C++ vượt qua giới hạn về khả năng quản lý độ phức tạp dễ dàng hiểu tổng thể, quản lý được các chương trình lớn.

Lịch sử ngôn ngữ lập trình

BM MTT&TT 8

Lập trình hướng đối tượng (OOP – Object Oriented Programming) là một cách tư duy mới ngày càng trở nên thông dụng.

OOP: dựa trên kiến trúc lớp và đối tượng.

Quá trình tiến hóa của OOP qua các giai đoạn:

Lập trình tuyến tính

Lập trình có cấu trúc

Sự trừu tượng hóa dữ liệu

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

Giới thiệu OOP

BM MTT&TT 9

Sự khác biệt tổng quan giữa lập trình cổ điển và OOP

Giới thiệu OOP

Lập trình cổ điển

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

BM MTT&TT 10

Lập trình cổ điển (traditional, procedural)

Giới thiệu OOP

typedef struct { char *mscb; char *hoten; float bacluong; ...} Canbo;

Canbo *dscb1, *dscb2;

void sapxep(Canbo *) {...}void luu(Canbo *, char *) {...}void nhap(Canbo *) {...}

void main() { nhap(dscb1); sapxep(dscb2);...}

Cấu trúc dữ liệu

Giải thuật

BM MTT&TT 11

Lập trình cổ điển

Cấu trúc dữ liệu: Xây dựng dữ liệu toàn cục

Giải thuật: Viết các thủ tục sử dụng DL toàn cục

Tiếp cận theo hướng thủ tục

Chú trọng đến thủ tục hơn là dữ liệu

Giới thiệu OOP

Cấu trúc dữ liệu + Giải thuật = Chương trình

BM MTT&TT 12

Lập trình cổ điển

Giới thiệu OOP

Dữ liệu

Thủ tục 1

Thủ tục 2

Thủ tục 3

ü Dữ liệu và thủ tục được tổ chức độc lập.

ü Không quan tâm đến mối liên hệ giữa thủ tục và dữ liệu.

ü Khó chỉnh sửa, thêm mới dữ liệu và thủ tục.

ü Gặp khó khăn khi sử dụng lại.

BM MTT&TT 13

S  tr u t ng hóaự ừ ượ Là giai đoạn chuyển tiếp từ lập trình cấu trúc sang OOP.

Trình bày đặc điểm cần thiết mà không trình bày chi tiết cụ thể, hay các giải thích phức tạp tùy theo ngữ cảnh.

Vd: Các góc nhìn khác nhau đối với vật thể (Con mèo).

Giới thiệu OOP

BM MTT&TT 14

T i sao ph i l p trình h ng đ i t ngạ ả ậ ướ ố ượ Liên kết chặt chẽ giữa dữ liệu và thao tác (hàm) của một

đối tượng.

Cho phép ta tập trung vào bản chất của vấn đề hơn là các chi tiết bên trong vấn đề.

Các dữ liệu và hàm được “bao gói” trong một đối tượng.

Có thể che dấu được những dữ liệu cần thiết, hoặc chỉ cho phép truy xuất thông qua các hàm.

Giới thiệu OOP

BM MTT&TT 15

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

Bài toán được phân ra thành nhiều đối tượng.

Vấn đề cần quan tâm là dữ liệu chứ không phải là thủ tục.

Dữ liệu được che đi và không thể truy xuất từ bên ngoài đối tượng.

Giới thiệu OOP

Thuộc tính + Hàm = Đối tượng

Các thể hiện, đặc tính, trạng thái của đối tượng

Các hoạt động, thao tác của đối tượng

Mục tiêu chính

BM MTT&TT 16

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

Giới thiệu OOP

Đối tượng 1

Dữ liệu

Hàm

Dữ liệu

Hàm

Dữ liệu

Hàm

Đối tượng 3Đối tượng 2

ü Dữ liệu và thủ tục được xử lý chặt chẽ với nhau.

ü Quan tâm đến mối liên hệ giữa thủ tục và dữ liệu.

ü Dễ chỉnh sửa, thêm mới dữ liệu và hàm trong 1 đối tượng.

ü Mục tiêu là tăng cường khả năng sử dụng lại.

BM MTT&TT 17

Mọi thứ đều là sự vật.

Chương trình là một nhóm các sự vật “nói chuyện” với nhau bằng việc gửi các thông báo cho nhau.

Mỗi sự vật đều có bộ nhớ riêng, được tạo nên từ các sự vật khác.

Mọi sự vật đều có kiểu (lớp).

Tất cả các sự vật cùng kiểu (lớp) đều có thể nhận cùng thông báo.

(Source: Thinking in Java)

Đặc trưng của OOP

BM MTT&TT 18

Đối tượng

Là khái niệm quan trọng nhất trong OOP. Trong OOP, mọi thứ đều được thể hiện qua đối tượng.

Là thực thể được sử dụng bởi máy tính, là “cái mà ứng dụng được đề cập đến”

Mô tả cho sự vật hoặc khái niệm trong thực tế. Một đối tượng có thể là:

Đối tượng thật (real object) Đối tượng khái niệm (conceptual object) Đối tượng phần mềm (software object)

Đặc trưng của OOP

BM MTT&TT 19

Đối tượng trong thế giới thực

Đối tượng cụ thể mà ta có thể sờ, nhìn thấy hay cảm nhận được. Vd: con chó, chiếc xe, đồng hồ….

Các khái niệm quan trọng

Tôi là 1 chú chó.Thông tin của tôi gồm tên, màu lông, giống,

chủ nhân, cân nặng, …

Tôi có khả năng:• Sủa• Chạy• Vẫy đuôi …

Tôi là 1 chiếc xe moto.Thông tin của tôi gồm

màu, hãng sản xuất, model, giá, chủ xe, …

Tôi có khả năng:• Dừng• Đua• Tăng tốc…

BM MTT&TT 20

Đối tượng khái niệm

Đây là những khái niệm, quá trình trong thực tế được trừu tượng hóa thành các đối tượng. Vd: Ngày tháng, chuỗi, hình vuông…

Các khái niệm quan trọng

02-01-2008

Welcome to OOP

BM MTT&TT 21

Thành phần của đối tượng:

Trạng thái (state): đặc điểm, trạng thái của đối tượng.

Hành vi (behavior): các thao tác, các hoạt động mà đối tượng thực hiện được (chức năng, khả năng của 1 đối tượng)

Các khái niệm quan trọng

BM MTT&TT 22

Đối tượng phần mềm

Dùng để biểu diễn các đối tượng trong thế giới thực

Thuộc tính, đặc tính, dữ liệu (attribute, property, data): Trình bày, mô tả các đặc điểm của đối tượng.

Phương thức, ứng xử, hàm (method, behavior, function): Liên quan đến những thứ đối tượng làm. Tác động lên dữ liệu của đối tượng.

Vd: 1 trang web, 1 biểu đồ…

Sử dụng thuật ngữ “Đối tượng” để chỉ đối tượng phần mềm.

Các khái niệm quan trọng

BM MTT&TT 23

Lớp Mẫu của các đối tượng cùng 1

kiểu

Khuôn tạo ra các đối tượng

Định nghĩa chung cho các thuộc tính và phương thức của các đối tượng cùng loại

Tạo ra đối tượng: gán giá trị cụ thể cho thuộc tính

Lớp được tạo ra khi biên dịch

Đối tượng tạo ra khi thực thi chương trình

Các khái niệm quan trọng

Đối tượng là một thể hiện (instance) của 1 lớp

BM MTT&TT 24

Các khái niệm quan trọngLớp Thuộc tính Hành vi

Chó TênMàu sắcGiốngTrạng thái

SủaĂnChạyCắn

Bóng đèn Nhãn hiệuMàuTrạng tháiLoại

BậtTắtSángMờ

Mina

Milu

Ferrari

Chavrolet

Philipe AQ6

DQ AZ9Lớp Thuộc tính Hành vi

Xe ôtô Nhãn hiệuMàu sắcGiáHộp sốTốc độ…

ChạyDừngTăng tốcGiảm tốc…

BM MTT&TT 25

Các khái niệm quan trọng

BM MTT&TT 26

Lớp

Các khái niệm quan trọng

Hàng Hóa

– Mã hàng hóa– Tên hàng hóa– Nhà sản xuất– Đơn vị tính– Số lượng tồn– Tổng giá trị bán– Tổng giá trị mua

+ Mua (số lượng, đơn giá)+ Bán (số lượng, đơn giá)+ Tính lãi ()

tạo ra

tạo ra

§ A001§ Tivi§ Sony§ Cái§ 5§ 60,000§ 45,000

Đối tượng 1

§ A002§ Xe gắn máy§ Honda§ Chiếc§ 2§ 150,000§ 125,000

Đối tượng 2

BM MTT&TT 27

Truyền thông điệp

Các đối tượng cộng tác với nhau thông qua thông điệp (message)

Message: là 1 lời yêu cầu 1 hoạt động. Gồm có: Đối tượng nhận thông điệp Hoạt động (tên của phương thức thực hiện) Chi tiết thông điệp (giá trị tham số)

Truyền thông điệp: gửi thông điệp đến đối tượng yêu cầu hay Kích hoạt hàm cùng tên trên đối tượng để yêu cầu thông tin.

Các khái niệm quan trọng

27

Hàng Hóa

– mahh– ten– nhasx– dvtinh– soluongton– tongban– tongmua

+ Mua(sl, dg)+ Ban (sl, dg)+ TinhLai()

Xe Toyota

“Tôi muốn mua 1 chiếc

xe Toyota giá 28000”

Gọi hàm Mua (1, 28000)

Tác động hàm lên

giá trị xe Toyota“Đã mua thành công”

§ A003§ Xe hơi§ Toyota§ chiếc§ 3§ 115,000§ 100,000

BM MTT&TT 28

Tính bao gói (encapsulation)

Đặc điểm chủ yếu của OOP

Thể hiện qua Sự kết hợp chặt chẽ giữa thuộc tính và phương thức của

cùng 1 đối tượng => Che đi chi tiết của đối tượng, giảm được sự phức tạp.

Xác định giới hạn các đường truy cập đến lớp. Định nghĩa lớp: việc đóng gói nhiều thành phần lại.

Các đặc điểm chính

BM MTT&TT 29

Tính bao gói

Public (dùng chung): thành phần được quyền truy xuất từ mọi vị trí

Private (dùng riêng): thành phần chỉ truy xuất được từ bên trong lớp

Protected (được bảo vệ): thành phần chỉ được truy xuất từ bên trong lớp hoặc các lớp con (thừa kế) của nó.

Các đặc điểm chính

BM MTT&TT 30

Tính thừa kế (Inheritance)

Một trong những đặc điểm quan trọng của OOP, cho phép dùng lại mã (reusability)

Sử dụng lại (kế thừa) các đặc trưng chung của 1 lớp cho trước

Lợi ích: Chia sẻ và sử dụng lại những lớp đã có

Tận dụng lại các thuộc tính chung Tận dụng lại các thao tác tương tự

Thiết kế lớp gọn nhẹ, đơn giản hơn

Chú ý: Trường hợp thiết kế sai về mặt ý nghĩa.

Các đặc điểm chính

BM MTT&TT 31

Tính thừa kế

Lớp được thừa kế: lớp cha (superclass), lớp cơ sở (based class)

Lớp thừa kế: lớp con (subclass), lớp dẫn xuất (derived class)

Các đặc điểm chính

Animal

Reptile Mammal Fish

Cat Moose Dog

Person

Professor Student Faculty

BM MTT&TT 32

Tính thừa kế

Lớp con ngoài các đặc trưng được thừa kế từ lớp cha thì nó còn có những đặc trưng riêng

Thêm hàm hoặc thêm thuộc tính Tái định nghĩa hàm lớp cha, đổi kiểu thuộc tính Dùng hàm ảo

Các đặc điểm chính

Hàng hóa

Hàng nhập khẩu

– Thuế nhập khẩu

+ TínhLãi()

ĐiệnGiaDụng

– Điệnáp– Thờigianbảohành

+ CấpGiấyBảoHành()

BM MTT&TT 33

Tính thừa kế

Lớp con “là” lớp cha => lớp con có tất cả thuộc tính và phương thức của lớp cha. Tuy nhiên, nó chỉ truy xuất được vào các thành phần mà lớp cha cho phép (public, protected)

Lớp cha không thể truy xuất thành phần lớp con

Các thành phần của lớp con che đi thành phần trùng tên trong lớp cha

Khi truy xuất thành phần đó => truy xuất thành phần lớp con

Muốn truy xuất thành phần lớp cha => phải chỉ rõ

Các đặc điểm chính

<Tên lớp cha>::<Tên hàm>

BM MTT&TT 34

Tính thừa kế

Thừa kế đơn: thừa kế từ 1 lớp

Thừa kế bội: từ 2 lớp trở lên. Sử dụng: Tận dụng được nhiều thành phần có sẵn Xung đột, cạnh tranh xảy ra

Hướng giải quyết: Thiết kế lớp phải đúng ý nghĩa Tránh thừa kế bội khi gây ra xung đột Không cần thừa kế khi lớp cha có quá ít thành phần

Các đặc điểm chính

BM MTT&TT 35

Ảo hóa (virtualization)

Kể tên trong lớp cha một ứng xử chung (hàm ảo – virtual, abstract) cho tập hợp các lớp con.

Khi nhận yêu cầu, tùy vào đối tượng thuộc lớp nào sẽ có ứng xử riêng (thực thi hàm tương ứng của lớp đó).

Ví dụ:

1. “Vẽ”: cho tập hợp các đối tượng hình học (điểm, đường thẳng, hình tròn, hình vuông, …)

2. “Kêu”: cho tập hợp các con vật (chó, mèo, gà, vịt, …)

3. “Về nhà”: cho tập hợp các học sinh (đi bộ, đi xe đạp, đi xe gắn máy, đi xe buýt, …)

Các đặc điểm chính

BM MTT&TT 36

Ảo hóa

Hàm ảo: Không nhất thiết phải cần định nghĩa ở lớp cha. Phải được định nghĩa lại trong lớp con.

Lớp ảo: Chỉ dùng khai báo các hàm ảo bên trong. Không được dùng để tạo ra đối tượng.

Các đặc điểm chính

ConVat

+ Keu(): virtual

Cho

+ Keu()

Meo

+ Keu()

Heo

+ Keu()

Ga

+ Keu()

BM MTT&TT 37

Tính đa hình (polymorphisme)

Các loại đối tượng khác nhau có cách ứng xử khác nhau với cùng 1 thông điệp

Các đặc điểm chính

Draw()Shape

Triangle Circle Rectangle

GoHome()

Student

Noi tru Ngoai tru

BM MTT&TT 38

Kỹ thuật thể hiện tính đa hình

Dùng hàm ảo (virtual function) kết hợp với chồng hàm (overriding): Khai báo phương thức ảo trong lớp cha chung. Mỗi lớp con sẽ cài đặt theo những cách khác nhau.

Dùng tái định nghĩa hàm (overloading): Định nghĩa các hàm trùng tên với nhau. Các hàm trùng tên phải khác nhau về:

Số đối số Thứ tự các đối số Kiểu các đối số

Các đặc điểm chính

BM MTT&TT 39

Các định nghĩa về lập trình hướng đối tượng, trừu tượng hóa, đối tượng, lớp, thuộc tính, phương thức, thông điệp

Phân biệt sự khác nhau của lớp – đối tượng, giữa thuộc tính – giá trị, giữa thông điệp – truyền thông điệp

Các đặc điểm của OOP

Lợi ích có được qua thừa kế và bao gói

Những thuộc tính và phương thức cơ bản của các vật sau: máy lạnh, xe hơi, hình tròn

Các lớp có thể kế thừa từ lớp Điện thoại, Xe hơi, Động vật

Câu hỏi ôn tập