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 1Ấrị Đại Học Quốc Gia TP.HCM \>=7 Đại Học Kinh Tế Luật
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
“* Parameter list method
** Alias và cơ chế gom rác tự động
Trang 3Ấrị Đại Học Quốc Gia TP.HCM `7 Đại Học Kinh Tế Luật
“ 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
“ Phải giải quyết các mỗi quan hệ vĩ rmô¿gileucácasuuuiupkaae ác mối Ề-vĩ-mô-øifa-eá =
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
“ Chương trình được thiết kể theo hướng tiếp cận từ dưới lên
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
“ Phù hợp với các dự án phần mềm lớn, phức tạp
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ể
Trang 7Ấ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 8@.- Đạ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
Trang 9Ấ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
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
hay là kiểu (type) của đỐ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
* Nhu vay Lớp là mỘt khái niệm trừu tượng, dùng
để chỉ một tập hợp các đối tượng có mặt trong hệ
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
tương Ứ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
thông tin các lớp trong dự án một cách khoa học, giúp cho việc theo dõi bảo trì dự án được tốt nhất
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
Chiếc xe hơi đƯợc tạo ra từ bản thiết kế là đối tượng
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
đối tượng trong lập trình
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
-_ Tính đóng gói cho phép dấu thông tin của đối tượng bằng cách kết hợp thông tin và các phương thức liên quan đến thông tin trong đối tượng
Trang 17Ấrị¡ Đại Học Quốc Gia TP.HCM
7 Đại Học Kinh Tế Luật
Trang 19ấị Đại Học Quốc Gia TP.HCM
SỞ Đại Học Kinh Tế Luật
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à
phương thức của đối tượng???
Trang 21Ấrị¡ Đại Học Quốc Gia TP.HCM \>=Z Đại Học Kinh Tế Luật
Trang 22\S> Đại Học Kinh Tế Luật
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
Properties: public class PhanSo
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
vùng nh được cấp phát trong thanh RAM
RAM
Trang 25
@.- Đại Học Quốc Gia TP.HCM = Đại Học Kinh Tế Luật
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:
* tenDoiTuong.bienLop
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
** Mô tả hoạt động của đối tượng
**' Thêm mức truy xuất khi khai báo
**'Truy xuất phương thức
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
thấy sự thay đổi này.
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
** Không khai báo kiểu trả về
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é
tU thém constructor mac dinh
Trang 31@.- Đại Học Quốc Gia TP.HCM
= Đại Học Kinh Tế Luật
** Đố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
khai báo lạ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
private int tuSo;
private int mauSo;
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:
" PhanSo c = new PhanSo(1, 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;
public PhanSo(int tuSo, int mauSo)
{
this.tuSo = tuSo;:
this.mauSo = mauSo:
I I
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ị
thay đổi sau khi hoàn tất phương thức
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
lớp?
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;
public int LayTuSo()
{ }
public void GanTuSo(int gt)
{
}
return tuSo;
tuSo = gt;
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
nhiều đến chương trình
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 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;
public int TuSo { } public 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;
return giaTri;
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{ }
public double GiaTri
{
get { return (doubte)tuSo / (double)mauSo; }
} }
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ụ:
° Phân số
° SỐ La Mã
Trang 44@.- Đại Học Quốc Gia TP.HCM = Đại Học Kinh Tế Luật
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
PhanSo c = new PhanSo();
c.TuSo = trai.MauSo * phai.TuSo
+ trai.TuSo * phai.MauSo;
c.MauSo = trai.MauSo * phai.MauSo;
return c;
Trang 46= Dai Học Kinh Tế Luật
Trang 470 »MH+&ắă @.- Đại Học Quốc Gia TP.HCM
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)
** C4c support method sé b6 tro cho Service 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 &&
(CanhA + CanhB) > CanhC &&
(CanhB + CanhC) > CanhA &&
(CanhA + CanhC) > CanhB)
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
Overloading Method
Trang 51Ấrị¡ Đại Học Quốc Gia TP.HCM = Dai Học Kinh Tế Luật
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
**'Ta có thé truyền bao nhiêu đối số kiểu int vao cho
phương thức Sum cũng đƯỢc
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
hệ thông máy tính sẽ làm việc theo cơ chế “Phân số A
trỏ tới vùng nhớ mà phân số B đang quản lý” Hay nói
cách khác “Vùng nhớ B” bây giờ có 2 biễn đối tượng
cùng trÓ tới(cùng quản lý)