Bài giảng Kỹ thuật lập trình C - Chương 4: Lớp và đối tượng cung cấp cho người học các kiến thức: Lập trình truyền thống và lập trình hướng đối tượng, các khái niệm liên quan tới Lớp và Đối tượng, các mức truy xuất, các thành phần của lớp,... Mời các bạn cùng tham khảo.
Trang 2Ấrị¡ Đại Học Quốc Gia TP.HCM = Dai Học Kinh Tế Luật
^ e
Nội dung
*%*Lập trình truyền thống và lập trình hướng đối tượng
** Các khái niệm liên quan tới Lớp và Đối tượng ** Các mỨc truy xuất ** Các thành phần của lớp s* ThuỘc tính, phương thức “* Operator *“* Service Method va Support Method ** Overloading method
“* Parameter list method
Trang 3Ấrị Đại Học Quốc Gia TP.HCM `7 Đại Học Kinh Tế Luật Lập trình truyền thống ¬ Phương pháp tiếp cận của lập trình truyền thống “ Lập trình tuyến tính “ Lập trình cấu trúc " Ưu điểm
“ Chương trình rõ ràng, dễ hiểu, dễ theo dõi
“ TƯ duy giải thuật rõ ràng
¬ Khuyết điểm
“ Không hỖ trợ việc sử dụng lại mã nguồn
“ Khi thay đổi cấu trúc dữ liệu, phải thay đối giải thuật
Trang 4Ấrị¡ Đại Học Quốc Gia TP.HCM = Dai Học Kinh Tế Luật
Lập trình hướng đối tượng "¬ Đặc điểm cơ bản
“_ 'Tập trung vào dữ liệu thay cho các ham
“ Chương trình được chia thành các đối tượng độc lập
“_ Cấu trúc dữ liệu được thiết kể sao cho đặc tả được các đối tượng
“_ DỮ liệu được che giấu, bao bọc
“ Các đỐi tượng trao đổi với nhau thông qua các hàm
Trang 5@.- Đại Học Quốc Gia TP.HCM
= Đại Học Kinh Tế Luật
Lập trình hướng đối tượng
"_ Một số ưu điểm nổi bật
“_ Không có nguy co dữỮ liệu bị thay đổi tự do trong chương trình “_ 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
“ Có thể sử dụng lại mã nguồn, tiẾt kiệm tài nguyên
Trang 6Ấrị¡ Đại Học Quốc Gia TP.HCM = Dai Học Kinh Tế Luật
Khái niệm Lớp và Đối tượng
“Khai nệm đối tượng (object) trong lập trình hướng đối tượng giỐng nhƯ một đối tượng cụ thể trong thế giới thực *MỖi đối tượng có các thuỘc tính và các hành vi riêng " Thuộc tính (attribute) mô tả đặc điểm của đối tượng
Trang 7Ấrị Đại Học Quốc Gia TP.HCM = Dai Học Kinh Tế Luật
Trang 8@.- Đại Học Quốc Gia TP.HCM = Đại Học Kinh Tế Luật
Trang 9Ấrị Đại Học Quốc Gia TP.HCM ZZ Đại Học Kinh Tế Luật
Trang 107` Đại Học Kinh Tế Luật
Khái niệm Lớp và Đối tượng
**Các đối tượng có các đặc điểm (thuộc tính và
phương thỨc) giống nhau được gom nhóm thành
một lớp để phân biệt với các đối tượng khác và dễ quản lý
=>Mộit lớp (class) là sự phân loại cỦa các đối tượng
Trang 11Ấrị¡ Đại Học Quốc Gia TP.HCM = Dai Học Kinh Tế Luật
Khái niệm Lớp và Đối tượng
Trang 12Ấrị¡ Đại Học Quốc Gia TP.HCM = Dai Học Kinh Tế Luật
Khái niệm Lớp và Đối tượng
:- 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ó thuGc tinh
-_ Hoặc có cả thuộc tính và phương thỨc, trường hợp này là
phổ biến nhất
-_ Lớp không có thuộc tính và phương thức nào là các lớp trừu tượng Các lớp này không có đỐi tượng
Trang 13@.- Đại Học Quốc Gia TP.HCM
= Đại Học Kinh Tế Luật
Khái niệm Lớp và Đối tượng
* Khong gian tén (namespace)
Một nhóm các lỚp (classes) va giao dién (interfaces) được
tổ chức thành mỘt đơn vị quản lý theo hình thức không
ø1an tên g¢Qi la namespace
Lợi ích cỦa namespace là tổ chức sắp xếp lại hệ thống
Trang 14Ấrị Đại Học Quốc Gia TP.HCM ZZ Đại Học Kinh Tế Luật
Khái niệm Lớp và Đối tượng
* "Tính trừu tƯỢng:
Lớp (Class) là một khái niệm trừu tượng, đối tượng là
một thể hiện cụ thể của lớp
~ Vi du:
Bản thiết kế của chiếc xe hơi là lớp
Trang 15Ấrị Đại Học Quốc Gia TP.HCM = Đại Học Kinh Tế Luật
Khái niệm Lớp và Đối tượng
* "Tính trừu tƯỢng:
TỪ nhỮng đối tượng giỐng nhau: trừu tượng hóa thành
một lớp:
Chỉ đưa ra các thuỘc tính và phương thức cần thiết của
Trang 16Ấrị¡ Đại Học Quốc Gia TP.HCM = Dai Học Kinh Tế Luật
Khái niệm Lớp và Đối tượng
-_ Tính đóng gói:
Mỗi lỚp được xây dựng để thực hiện một nhóm chức năng đặc trưng cỦa riêng lớp đó
-_ Tất cả mọi thao tác truy xuất vào thành phần dỮ liệu từ
đổi tượng này qua đổi tượng khác phải được thực hiện bởi các phương thức (method) của chính đổi tượng chứa
dữ liệu
Trang 17Ấrị¡ Đại Học Quốc Gia TP.HCM
Trang 19ấị Đại Học Quốc Gia TP.HCM
Trang 20Ấrị¡ Đại Học Quốc Gia TP.HCM = Dai Học Kinh Tế Luật
= ~ rT
Đinh nghĩa Lớp
© Quy tac dat tén L6p trong C# -_ Tên lớp nên là mỘt danh từ
- Tên lỚp có thể gồm nhiều từ, ký tự đầu tiên của
mỗi tỪ nên viết hoa
- Tên lớp nên đặt đơn giản, dễ nhớ, và có ý nghĩa
- Tên lớp không đƯỢc trùng với từ khóa của Java
- Tên lớp không thé bat dau bang số
+ Trong một dự án thực tế làm sao xác định
được các Lớp, các đối tượng, thuộc tính và
Trang 23@.- Đại Học Quốc Gia TP.HCM
= Đại Học Kinh Tế Luật
Định nghĩa Lớp kiểu POCO
s° Không cân khai báo thuộc tính, sử dụng trực tiếp
Trang 24Ấrị Đại Học Quốc Gia TP.HCM = Dai Học Kinh Tế Luật
2 se Z“e
Khởi tạo đối tượng
*“* TenLop tenBien = new TenLop();
“* Ví dụ:
= PhanSo psA = new PhanSo();
*" XeHo1 xeHoiB = new XeHoi1();
6a new dùng để cấp phát bộ nhớ cho đối
Tư
tượng.\psA và xeHoiB là 2 biến đối tượng trỎ tới 2
Trang 26ŒSamekmreaa 0Ø @XAANGONOAOOAAAN
biến Lớp
** Lưu trữ tình trạng của đối tượng
** Sử dụng cách khai báo biến thông thường ** Thêm mỨc truy xuất
“Ví dụ
" Dublic Int tuSo; " private int mauSo
" protected int soBanhXe;
** Truy xuat bién 16p:
Trang 27Ấrị¡ Đại Học Quốc Gia TP.HCM = Dai Học Kinh Tế Luật
TT
@pPhuong thtfc (Method)
** Các hàm bên trong lớp
Trang 28(5¬ 5) Đại Học Kinh Tế Luật mdð% ẽ ẽ — —
static
** Dùng cho các thành phần lớp không phụ thuộc vào đối
tượng cụ thể
** Có thể truy cập trong bản thân lớp
** ĐƯỢc truy cập trực tiếp tỪ tên lớp
* Phương thức static chÍ truy cập được nhỮng thành viên
static của lớp
* Truy cập:
* TenLop.TenBien
" TenLop.TenPhuongThuc()
“* Có thể hiểu static là ô nhớ chia sẻ chung, khi biến
static thay đổi giá trị thì toàn bỘ các đỐi tượng đều
Trang 29@.- Đại Học Quốc Gia TP.HCM
= Đại Học Kinh Tế Luật
@Ham khởi tạo (Consftructor)
** Khởi tạo giá trị ban đầu cho đối tượng khi khai báo
** Cùng tên với tên lớp
Trang 30Ấrị¡ Đại Học Quốc Gia TP.HCM
= Đại Học Kinh Tế Luật
©Constructor mac dinh
** Là constructor không có tham sỐ và không thực hiện
lệnh gì cả (hoặc thực hiện một số lệnh khởi tạo
mặc định theo chủ ý của Lập trình viên)
* Nếu không khai báo constructor thi trinh bién dich sé
Trang 31@.- Đại Học Quốc Gia TP.HCM
= Đại Học Kinh Tế Luật ©Constructor ** Một lớp có thể có nhiều constructor ** Các constructor khác nhau về tham sổ " SỐ tham số " Kiểu tham số
** Đối tượng được khởi tạo theo constructor tương ứng khi khai báo
°* Chú ý: Khi khai báo constructor khác, constructor
mặc định sẽ không có Nếu muốn sử dụng thì phải
Trang 32@.- Đại Học Quốc Gia TP.HCM = Đại Học Kinh Tế Luật
©Constructor
class PhanSo
{
//khai bao bién Lớp
Trang 33EP atigckins reinge”
©Constructor
** Khởi tạo đối tượng phân số có tỬ sỐ = 0, mẫu sỐ =
L:
" PhanSo a = new PhanSo();
" PhanSo b = new PhanSo(Q, 1);
** Khởi tạo đối tượng phân số có tỬ sỐ = 1, mẫu số =
2:
Trang 34\$Z @.- Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật a 6 tn @Tham chiéu this
** Tham khảo đến đối tượng hiện hành
** Trong trường hợp đặt tên tham số trùng với tên biển lớp, sử dụng this dé chi bién lớp
class PhanSo
{
private int tuSo; private int mauSo;
Trang 35(5¬ =< Đại Học Kinh Tế Luật 111% 7 - —~
@Truyén d6i tuong vao phương thức
** Đối tượng là kiểu tham chiếu
** Nếu có câu lệnh tác động đến giá trị các biễn lớp của đôi tượng trong phương thức > đổi tượng bị
Trang 36Ấrị¡ Đại Học Quốc Gia TP.HCM = Dai Học Kinh Tế Luật
2 nA ^ ow 4
@Bao vé truy cập biến lớp
Thay đổi tên bién > thay d6i code 6 nhiing cho
dùng biến?
* Hạn chế người dùng thay đổi giá trị biến?
** Kiểm tra hợp lệ khi gán giá trị biến?
** Biến chi dOc (read only)?
** Truy cập giá trị là kết quả của việc xử lý các biến
Trang 37(55x = Dai Học Kinh Tế Luật 111% —
bảo vệ truy cập biến lớp
* S® Khơng cho phép truy cập biển lớp * S dùng hàm để truy cập
class PhanSo
{
private int tuSo; public int mauSo;
Trang 38= Dai Học Kinh Tế Luật
Thuộc tính
Ẳ ` we? 2 A o A A o Ww J
** Dung de bao vé viéc truy cap bi€n lOp
**Cho phép chinh sUa code không lam anh hưởng
Trang 39Ấrị Đại Học Quốc Gia TP.HCM = Dai Học Kinh Tế Luật
Thuộc tính
Class PhanSo
{
private int tuSo;
private int mauSo;
public int TuSo
{
get { return tuSo; } set { tuSo = value; }
}
public int MauSo
{
get { return mauSo; }
set { mauSo = value; }
Trang 40Ấrị Đại Học Quốc Gia TP.HCM \==/ Dai Hoc Kinh Té Luật
€®®Kiểm tra hợp lệ
class PhanSo
{
private int tuSo; private int mauSo;
Trang 41@.- Đại Học Quốc Gia TP.HCM
= Đại Học Kinh Tế Luật
Ế”Thuộc tính chỉ đọc
** Không cho ngƯời dùng sửa giá trị biển
** Chỉ có get, không có set
class PhanSo
{
private int tuSo; private int mauSo;
private double gialr1;
public double GiaTri
{ }
public double LayGiaTri()
{
get { return giaTri; }
gialri = (double)tuSo / (double)mauSo;
Trang 42@.- Đại Học Quốc Gia TP.HCM
= Đại Học Kinh Tế Luật
Thuộc tính là kết quả xử lý
class PhanSo
{
private int tuSo; private int mauSo;
private double gialri; public int TuSo{ }
public int MauSof{ }
Trang 43Ấrị¡ Đại Học Quốc Gia TP.HCM = Dai Học Kinh Tế Luật
Toán tủ
Toán tử
** Các phép tính +, -, *, /
** Phép so sánh >, <, >=, <=
“Cac kiéu x4y dung san (int, string, double ) st
dụng được toán tu
s* S Các kiểu do người dùng tạo cũng cần toán tỬ
“ Ví dụ:
Trang 44@.- Đại Học Quốc Gia TP.HCM = Đại Học Kinh Tế Luật €® Thực hiện bằng Hàm ** Xây dựng hàm để thực hiện tính toán class PhanSo {
private int tuSo; private int mauSo;
public PhanSo Cong(PhanSo b)
{
PhanSo c = new PhanSo();
c.TuSo = this.MauSo * b.TuSo + this.TuSo * b.MauSo;
c.MauSo = this.MauSo * b.MauSo; return C;
Trang 45Ấrị Đại Học Quốc Gia TP.HCM ZZ Đại Học Kinh Tế Luật 2 , 2 ư dụng toán tử ublic static PhanSo operator +(PhanSo trai, PhanSo phan
PhanSo c = new PhanSo();
c.TuSo = trai.MauSo * phai.TuSo + trai.TuSo * phai.MauSo;
c.MauSo = trai.MauSo * phai.MauSo;
Trang 481 >.ĂẮẽ = Dai Học Kinh Tế Luật 7Ð ˆ —
Service Method va Support Method
* Một lớp có nhiều phương thức, có nhỮng phương
thức cung cấp ra ngoài cho các đối tượng khác sử
dung (public, gOi la Service method), co phuOng
phức chỉ sử dụng trong lớp (private, goi 14 Support
Method)
Trang 49Ấrị¡ Đại Học Quốc Gia TP.HCM = Dai Học Kinh Tế Luật
Service Method va Support Method
public class TamGiac
{
public int CanhA { get; set; } public int CanhB { get; set; } public int CanhC { get; set; } private bool laHopLe() {
if (CanhA > 0 && CanhB > 0 && CanhC > 0 &&
Trang 50@.- Đại Học Quốc Gia TP.HCM = Đại Học Kinh Tế Luật
@Overloading Method
** Overloading Method:
⁄ Là đặc điểm trong cùng 1 lớp có nhiều phương
thức cùng tên nhưng khác nhau vỀ Signature
Y Signature bao gồm: SỐ lượng các đối số hoặc kiểu
dữ liệu các đối số hoặc thứ tự các đối số
⁄ Kiểu dữ liệu trả về không đƯỢc tính vào signature
⁄ Lợi ích cUa Overloading là khả năng tái sử dụng lại
phương thỨc và giúp việc gọi hàm “uyển chuyển”
Các Constructor là trường hợp đặc biệt của
Trang 52@.- Đại Học Quốc Gia TP.HCM
= Đại Học Kinh Tế Luật
©Parameter List Method
**C# cung cấp một loại phương thức đặc biệt đó là
Parameter List, cũng là mỘt trường hợp đặc biỆt của Overloading Method public int Sum(params int [lJarr) { int s = 0; TT Ông x in arr) Sum(1, 2, 4) oo Sum() 1 r= xy Sum(1, 5, -8,2) return s;
Trang 53@.- Đại Học Quốc Gia TP.HCM = Đại Học Kinh Tế Luật
Alias và cơ chế gom rác tự động
** Alias là đặc điểm mà trên mỘt ô nhớ có nhiều biến
đối tượng cùng trỎ tỚI
“* Ví dụ:
PhanSo psA=new PhanSo(1,5); PhanSo psB=new PhanSo(3,7);
Lúc này trên thanh RAM sẽ có 2 ô nhớ cấp phát cho 2 đối tượng phân số được quản lý bởi 2 biễn đối tượng
psA va psB
Trang 54Ấrị Đại Học Quốc Gia TP.HCM = Dai Học Kinh Tế Luật
”Alias và cơ chê gom rác tự động
** Giả sử ta thực hiện lệnh:
psA=psB;
=> Ngôn ngỮ nói “Phân số A bằng Phân số B”, nhưng
Trang 55@.- Đại Học Quốc Gia TP.HCM = Đại Học Kinh Tế Luật
Alias và cơ chế gom rác tự động
* Như vậy đã xuất hiện Alias Ở “vùng nhớ B” Lúc
này sẽ xảy ra 2 hiện tượng nhƯ sau:
;_ Tại “vùng nhớ B”, nếu psA thay đổi thông tin sẽ làm cho
psB thay đối thông tin (vì cả 2 đối tượng này cùng quản lý mỘt vùng nhớ)
“Vùng nhớ A” không còn đối tượng nào tham chiếu tới,
Trang 56Ấrị¡ Đại Học Quốc Gia TP.HCM
= Dai Học Kinh Tế Luật
”Alias và cơ chê gom rác tự động
* Đôi khi trong quá trình thực hiện phần mềm ta có
nhu cầu sao chép đối tượng ra (tạo thêm một đối
tuOng giỐng y xì đỐi tượng cũ nhưng nằm Ở ô nhớ
khác, để ta có thể tự do thay đổi thông tin trên đối
tượng sao chép mà không làm ảnh hƯỞng tới đối
tuOng gỐốc) C# hỗ trợ chúng ta hàm
MemberwiseClone dé sao chép đối tượng
pubLic PhanSo copy ()
{
Trang 57EU) bại Học Khh Tế Luật ` ZZ Đại Học Kinh Tế Luật i ——
Alias và cơ chế gom rác tự động *- Ví dụ: PhanSo psB = new PhanSo(1,4); psB
evr Sao chép toan bO thông tin trong Vùng
PhanSo psA = psB copy () » nhd B vao ving nho A Tức là ta có aad 2 đối tƯỢợng có thông tin giống nhau y
Trang 58¡Đại Học Quốc Gia TP.HCM 7 Đại Học Kinh Tế Luật