You are on page 1of 39

Lập trình nâng cao

Bộ môn Tin học


Khoa HTTT Kinh tế & TMĐT
Giới thiệu học phần
 Số tín chỉ: 2
 Cung cấp:
 Những kiến thức về phương pháp lập trình tiên tiến hiện
nay là lập trình hướng đối tượng
 Kiến thức về ngôn ngữ lập trình hướng đối tượng C++
để giải quyết các bài toán thực tế.

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 2


Nội dung

 Chương 1. Tổng quan về lập trình hướng đối tượng

 Chương 2. Giới thiệu chung về C++

 Chương 3. Đối tượng và lớp trong C++

 Chương 4. Dẫn xuất và kế thừa trong C++

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 3


Tài liệu tham khảo
 Nguyễn Thanh Thủy (chủ biên), Lập trình hướng đối
tượng với C++. NXB Thống kê, 2004
 Phạm Văn Ất, C++ và lập trình hướng đối tượng, NXB
KHKT, 2000
 Bruce Ackel, Thinking in C++ 1, President – Mindview
Inc, 2000
 Robert Lafore, Object-oriented Programming in C++,
SAMS, 2001.
 http://www.cprogramming.com/tutorial.html

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 4


Chương 1. Tổng quan về OOP

1.1 Lập trình hướng đối tượng là gì?


1.2 Các khái niệm cơ bản trong OOP
1.3 Một số ngôn ngữ lập trình hướng đối tượng

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 5


1.1 Lập trình hướng đối tượng là gì?
1.1.1 Lập trình tuyến tính
1.1.2 Lập trình hướng cấu trúc
1.1.3 Phương pháp lập trình hướng đối tượng
1.1.4 So sánh PP lập trình hướng đối tượng với các
phương pháp khác

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 6


1.1.1 Lập trình tuyến tính
 Chương trình được viết tuần tự với các câu lệnh
được thực hiện từ đầu đến cuối.
 Chương trình thường chỉ vài trăm dòng
 Phần mềm đơn giản

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 7


1.1.2 Lập trình hướng cấu trúc
 Tư tưởng:
 Chương trình (CT) tổ chức thành các chương trình con (CTC).
 Mỗi CTC đảm nhận xử lý một công việc nhỏ trong toàn bộ hệ
thống.
 Mỗi CTC này lại có thể chia thành các CTC nhỏ hơn.
 Quá trình phân chia như vậy tiếp tục cho đến khi nhận được các
CTC đủ đơn giản.
Tổ chức chương trình thành các chương trình con (hàm và
thủ tục).

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 8


1.1.2 Lập trình hướng cấu trúc

Chương trình chính

Hàm_1 Hàm_2 Hàm_3

Hàm_4 Hàm_5 Hàm_6

Hàm_7 Hàm_8 Hàm_9

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 9


Ví dụ: Bài toán quan hệ gia đình
Mr. Định Mrs. Hương

Mr. Chiến Mrs. Hải Mr. Sơn Mrs. Hà

Miss. Linh Mr. Hưng Mr. Hiếu

Vấn đề: xây dựng cấu trúc dữ liệu để thể hiện cây quan hệ:
cần thành thạo con trỏ, cấu trúc cây, cập nhập thông tin trên
cây quan hệ.
- Cấu trúc thay đổi  thuật toán thay đổi  lập trình lại toàn
bộ chương trình

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 10


1.1.3 Lập trình hướng đối tượng
 Tư tưởng:
 Phân tích bài toán thành các thực thể được gọi là các đối tượng
(Objects)  từ đó xây dựng các dữ liệu và các hàm (thao tác) thể
hiện các đối tượng đó (methords).
Chương trình sẽ được tổ chức thành các đối tượng và sự

tương tác giữa các đối tượng.
Trong đó: đối tượng là sự kết hợp giữa các thuộc tính (dữ
liệu) và phương thức (hàm) thao tác trên các thuộc tính đó.

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 11


Ví dụ: bài toán quan hệ gia đình
 Xem xét dưới góc độ quản lý tập các Con người

đối tượng con người. Tên ?


Cha ?
 Đối tượng con người: Mẹ ?
 Các thuộc tính: tên, cha, mẹ, anh em, con cái, vợ Anh em ?
chồng,…
Con cái ?
 Các sự kiện, phương thức: sinh con, cưới, là anh,
Vợ chồng?
là ông nội,…
Sinh con
 Để tạo mối quan hệ ta dùng các sự kiện: Cưới
 Chiến.Cưới(Hải) Là anh
 Hải.Sinh_con(gái,Linh)
Là ông nội
 Hải.Sinh_con(trai, Hưng)
….

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 12


1.1.4 So sánh các phương pháp
 Lập trình tuyến tính:
 Chương trình được viết tuần tự -> khó phân chia công
việc.
 Viết chương trình dài dòng và mất thời gian, khó kiểm
soát các chương trình.
 Khó áp dụng cho các bài toán lớn và phức tạp.

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 13


Lập trình cấu trúc
 Đặc điểm:
 Tập trung vào công việc cần thực hiện (thuật toán)
 Chương trình lớn được chia thành các hàm nhỏ hơn.
 Phần lớn các hàm sử dụng dữ liệu chung
 Các hàm (thủ tục) truyền thông tin cho nhau thông qua cơ chế
truyền tham số.
 Dữ liệu trong hệ thống được chuyển động từ hàm này sang hàm
khác.
 Đóng gói chức năng (sử dụng hàm/thủ tục mà không cần biết nội
dung cụ thể)
 Chương trình được thiết kế theo cách tiếp cận từ trên xuống (top -
down)

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 14


Lập trình cấu trúc
Nhược điểm:
 Có hàm có thể truy cập và thay đổi dữ liệu chung  khó kiểm
soát (nhất là đối với chương trình lớn, phức tạp)
 Nếu thay đổi cấu trúc dữ liệu dùng chung cho một số hàm thì
phải thay đổi các hàm liên quan dữ liệu đó. Khó mở rộng chương
trình.
 Mô hình được xây dựng theo cách tiếp cận này không mô tả được
đầy đủ và trung thực hệ thống trong thực tế (phân tích, thiết kế)
không thích hợp để xây dựng những phần mềm rất lớn.

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 15


Lập trình hướng đối tượng
 Đặc điểm:
 Đặt trọng tâm vào đối tượng, tập trung vào khoanh vùng dữ liệu
thay vì hàm.
 Chương trình được chia thành các đối tượng.
 Các đối tượng tác động và trao đổi thông tin cho nhau thông qua
các hàm với cơ chế thông báo.
 Đóng gói chức năng và dữ liệu.
 Các cấu trúc dữ liệu được thiết kế để đặc tả được các đối tượng.
 Các hàm xác định trên các vùng dữ liệu của đối tượng được gắn
với nhau trên cấu trúc dữ liệu đó.
 Chương trình được thiết kế theo cách tiếp cận từ dưới lên.

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 16


Lập trình hướng đối tượng
Ưu điểm
 Dữ liệu và các hàm mới có thể dễ dàng bổ sung vào đối tượng
nào đó khi cần thiết  dễ nâng cấp thành hệ thống lớn hơn.
 Dữ liệu được bao bọc, che dấu và không cho phép các hàm ngoại
lai truy cập tự do mà dữ liệu của một đối tượng chỉ có thể được
truy cập bởi chính các hàm xác định trong đối tượng đó 
chương trình an toàn
 Mô hình được xây dựng gần với hệ thống thực tế .
 Thông qua nguyên lý kế thừa  loại bỏ đoạn chương trình lặp lại
khi khai báo lớp và mở rộng khả năng sử dụng các lớp  ngắn
gọn, tiết kiệm thời gian
 Cách thiết kế đặt trọng tâm vào dữ liệuxây dựng mô hình chi
tiết và cài đặt dễ hơn
8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 17
1.2 Các khái niệm cơ bản trong OOP
1.2.1 Trừu tượng hóa dữ liệu
1.2.2 Đối tượng
1.2.3 Lớp đối tượng
1.2.4 Thuộc tính
1.2.5 Phương thức

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 18


1.2.1 Trừu tượng hóa dữ liệu (Abstraction)
 Trừu tượng hóa
 Phân biệt thuộc tính cần thiết với chi tiết cài đặt
 Giao diện – Cài đặt
 Cái gì – Thế nào

 Phân tích – Thiết kế

 Các kỹ thuật trừu tượng hóa


 Đóng gói (encapsulation)
 Ẩn thông tin (information hiding)
 Thừa kế (inheritance)
 Đa hình (polymorphism)

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 19


Tính Bao Gói (Encapsulation)
 Đóng gói (encapsulation) là tiến trình che giấu việc
thực thi chi tiết của một đối tượng.

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 20


Ẩn Thông Tin (Information Hiding)
 Đóng gói  Không rõ 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 đối tượng
khác

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

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 21


Tính Thừa Kế (Inheritance)

 Hệ thống hướng đối tượng cho phép các lớp


được định nghĩa kế thừa từ các lớp khác
 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.
 Thừa kế nghĩa là các phương thức và các
thuộc tính được định nghĩa trong một lớp có
thể được thừa kế hoặc được sử dụng lại bởi lớp
khác.

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 22


Tính Đa Hình (polymorphism)
 Đ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ớp khác nhau.
 Ngữ cảnh khác  kết quả khác

Điểm Đường Thẳng Hình Tròn Hình Vuông

Vẽ

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 23


1.2.2 Đối Tượng (Object)
 Đối tượng là chìa
khóa để hiểu được
kỹ thuật hướng đối
tượng
 Trong hệ thống
hướng đối tượng,
mọi thứ đều là đố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

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 24


Đối Tượng Thế Giới Thực (Real Object)
 Một đối tượng thế giới thực là một thực thể cụ
thể mà thông thường bạn có thể sờ, nhìn thấy hay
cảm nhận được.
 Tất cả có
trạng thái
(state) và
hành động
(behaviour)

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 25


Đối Tượng Phần Mềm (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à


hành động
 Trạng thái: thuộc tính
(attribute; property)
 Hành động: phương thức
(method)

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 26


Đối Tượng

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

Đố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à
bọc các thuộc tính và thuộc tính thể hiện.
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.

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 27


1.2.3 Lớp đối tượng (Class)
 Trong thế giới thực có nhiều đối tượng cùng loại.
 Chương trình hướng đối tượng có nhiều đối tượng
cùng loại chia sẻ những đặc điểm chung.
 Ví dụ

Chương 1- Tổng quan về lập trình


8/4/2020 28
hướng đối tượng
Lớp Là Gì?
 Một lớp là một thiết kế (blueprint) hay mẫu (prototype) cho các
đối tượng cùng kiểu
 Ví dụ: lớp XeDap là một thiết kế chung cho nhiều đối tượng xe đạp
được tạo ra
 Lớp định nghĩa các thuộc tính và các phương thức chung cho
tất cả các đối tượng của cùng một loại nào đó
 Một đối tượng là một thể hiện cụ thể của một lớp.
 Ví dụ: mỗi đối tượng xe đạp là một thể hiện của lớp XeDap
 Mỗi thể hiện có thể có những thuộc tính thể hiện khác nhau
 Ví dụ: một xe đạp có thể đang ở bánh răng thứ 5 trong khi một xe khác
có thể là đang ở bánh răng thứ 3.

Chương 1- Tổng quan về lập trình


8/4/2020 29
hướng đối tượng
Ví Dụ Lớp Xe Đạp

Khai báo cho lớp


XeDap

Đối tượng của lớp


XeDap

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 30


1.2.4 Thuộc Tính & Phương Thức
 Thuộc tính (attribute) là dữ liệu trình bày các đặc điểm về
một đối tượng.
 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ột chức
năng tác động lên dữ liệu của đối tượng (thuộc tính).

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 31


Thuộc Tính Lớp & Phương Thức Lớp

 Thuộc tính lớp (class attribute) là một hạng mục dữ liệu


liên kết với một lớp cụ thể mà không liên kết với các thể
hiện của lớp. Nó được định nghĩa bên trong định nghĩa lớp
và được chia sẻ bởi tất cả các thể hiện của lớp.
 Phương thức lớp (class method) là một phương thức được
triệu gọi mà không tham khảo tới bất kỳ một đối tượng nào.
Tất cả các phương thức lớp ảnh hưởng đến toàn bộ lớp chứ
không ảnh hưởng đến một lớp riêng rẽ nào.

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 32


Thuộc Tính Lớp & Phương Thức Lớp

Ví dụ: thuộc tính lớp (numberOfGears = 18)

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 33


Thông Điệp & Truyền Thông Điệp
 Thông điệp (message) là một lời yêu cầu một hoạt
động. Gồm có:
 Đố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: một đối tượng triệu gọi một
hay nhiều phương thức của đối tượng khác để yêu
cầu thông tin.

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 34


1.3 Một số ngôn ngữ OOP

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 35


1.3.1 Java
Ngôn ngữ Java:
- Là ngôn ngữ thuần hướng đối tượng
- Khác với phần lớn ngôn ngữ lập trình thông thường, thay
vì biên dịch mã nguồn thành mã máy hoặc thông dịch mã
nguồn khi chạy, Java được thiết kế để biên dịch mã nguồn
thành bytecode, bytecode sau đó sẽ được môi trường thực
thi (runtime environment) chạy.
- Cần cài đặt máy ảo java

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 36


1.3.2 ASP.NET và C#
Ngôn ngữ C#:
+ Kết hợp các ưu điểm của c++ và java
+ Được hỗ trợ mạnh bởi nền tảng phát triển ứng
dụng .NET framework của hãng Microsoft.
+ Phù hợp với việc phát triển ứng dụng trên
windows và nền tảng web.

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 37


1.3.3 Ngôn ngữ VB
Ngôn ngữ Visual Basic:
- Có các đặc điểm tương đương C#
- Không được sử dụng phổ biến bằng C#

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 38


1.3.4 Ngôn ngữ C++
Ngôn ngữ C++:
- Không phải một ngôn ngữ thuần hướng đối tượng
- Kế thừa cú pháp và các đặc tính của ngôn ngữ C
- Sử dụng phổ biến

8/4/2020 Chương 1- Tổng quan về lập trình hướng đối tượng 39

You might also like