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.
Phải giải quyết các mối quan hệ vĩ mô giữa các module phần
mềm trong các dự án lớn.
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 hàm.
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.
58 trang |
Chia sẻ: thanhle95 | Lượt xem: 530 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Bài giảng môn Kỹ thuật lập trình - Chương 4: Lớp và đối tượng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Chương 4
Lớp và đối tượng
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
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
Thuộc tính, phương thức
Operator
Service Method và Support Method
Overloading method
Parameter list method
Alias và cơ chế gom rác tự động
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đạ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.
Phải giải quyết các mối quan hệ vĩ mô giữa các module phần
mềm trong các dự án lớn.
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại 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 hàm.
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.
Khoa Hệ Thống Thông Tin
Đạ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 cơ 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.
Khoa Hệ Thống Thông Tin
Đạ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
Khái niệ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.
Hành vi là phương thức hoạt động của đối
tượng, gọi tắt là phương thức (method).
Khoa Hệ Thống Thông Tin
Đạ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
Ví dụ: Phân số
Đặc điểm
Tử số
Mẫu số
Thao tác
Cộng, trừ, nhân, chia
Tối giản
Nghịch đảo
Khoa Hệ Thống Thông Tin
Đạ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
Ví dụ: xe hơi
Màu trắng
4 cửa
4 bánh
Hiệu Toyota
Chạy tới
Chạy lui
Xe dừng
Khoa Hệ Thống Thông Tin
Đạ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
Đối tượng:
XeHoi
Hiệu xe
Màu xe
Số bánh xe
Số cửa
Chạy tới
Chạy lui
Dừng xe
Tên đối tượng
Thuộc tính
Phương thức
Khoa Hệ Thống Thông Tin
Đạ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
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ột 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.
Ví dụ:
− Các chiếc xe Toyota, Honda, Porsche thuộc lớp
xe hơi.
• Các con chó giữ nhà, chó săn, chó kiểng thuộc
lớp chó.
Khoa Hệ Thống Thông Tin
Đạ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
Như vậy 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ệ
thống.
Lớp có thuộc tính và phương thức:
Thuộc tính của lớp tương ứng với thuộc tính của đối
tượng.
Phương thức của lớp tương ứng với các hành động của
đối tượng.
Khoa Hệ Thống Thông Tin
Đạ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
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 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.
Khoa Hệ Thống Thông Tin
Đạ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
Không gian tên (namespace)
Một nhóm các lớp (classes) và giao diện (interfaces)
được tổ chức thành một đơn vị quản lý theo hình thức
không gian tên gọi là 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.
Khoa Hệ Thống Thông Tin
Đạ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:
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.
Ví dụ:
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.
Class
Object
Khoa Hệ Thống Thông Tin
Đạ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.
Ví dụ:
ClassObjects
Trừu tượng hóa
Khoa Hệ Thống Thông Tin
Đạ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 đó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.
Khoa Hệ Thống Thông Tin
Đạ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 đóng gói:
Ví dụ:
ngungXe()
chayToi()
chayLui()
kiemTraXang()
mucXang
ngungXe()
chayToi()
chayLui()
Yes, I can
drive !
Khoa Hệ Thống Thông Tin
Đạ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 kế thừa:
Cho phép xây dựng một lớp mới dựa trên các
định nghĩa của một lớp đã có.
Lớp đã có gọi là lớp Cha, lớp mới phát sinh gọi
là lớp Con
Lớp con kế thừa tất cả các thành phần của lớp
Cha, có thể mở rộng các thành phần kế thừa và
bổ sung thêm các thành phần mới.
Khái niệm này sẽ trình bày chi tiết ở chương sau
Khoa Hệ Thống Thông Tin
Đạ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 kế thừa:
Ví dụ:
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Định nghĩa Lớp
Quy tắc đặt tên Lớp 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ể bắt đầu bằng 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???
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Định nghĩa Lớp
class TenLop
{
//khai báo biến lớp
kieubien tenBien1;
kieubien tenBien2;
//khai báo phương thức
PhuongThuc1();
PhuongThuc2();
}
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Định nghĩa Lớp
Định nghĩa lớp Phân Số:
class PhanSo
{
//khai báo biến lớp
int tuSo;
int mauSo;
//khai báo phương thức
...
}
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Định nghĩa Lớp kiểu POCO
public class PhanSo
{
public int TuSo
{
get;
set;
}
public int MauSo
{
get;
set;
}
public override string ToString()
{
return this.TuSo+"/"+this.MauSo;
}
}
Không cần khai báo thuộc tính, sử dụng trực tiếp
Properties:
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Khởi tạo đối tượng
TenLop tenBien = new TenLop();
Ví dụ:
PhanSo psA = new PhanSo();
XeHoi xeHoiB = new XeHoi();
Từ khóa new dùng để cấp phát bộ nhớ cho đối
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
XXX YYY
psA
xeHoiB
RAM
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Mức truy suất
public
Có thể truy xuất ở mọi nơi khác
private
Chỉ có thể truy xuất ở trong class
protected
Chỉ có thể truy xuất ở trong class hoặc class kế
thừa
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
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ụ
public int tuSo;
private int mauSo
protected int soBanhXe;
Truy xuất biến lớp:
tenDoiTuong.bienLop
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Phương thức (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
tenBien.TenPhuongThuc();
Ví dụ:
• PhanSo a = new PhanSo();
• a.ToiGian();
• PhanSo b = a.NhanMotSo(2);
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
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.
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Hàm khởi tạo (Constructor)
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ề
Khai báo:
class TenLop
{
public TenLop()
{
...
}
}
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Constructor mặc định
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 thì trình biên dịch
sẽ tự thêm constructor mặc định
Khoa Hệ Thống Thông Tin
Đạ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
khai báo lại.
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Constructor
class PhanSo
{
//khai báo biến lớp
private int tuSo;
private int mauSo;
public PhanSo()
{
tuSo = 0;
mauSo = 1;
}
public PhanSo(int ts, int ms)
{
tuSo = ts;
mauSo = ms;
}
}
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Constructor
Khởi tạo đối tượng phân số có tử số = 0, mẫu số = 1:
PhanSo a = new PhanSo();
PhanSo b = new PhanSo(0, 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)
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
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 để chỉ biến lớp
class PhanSo
{
private int tuSo;
private int mauSo;
public PhanSo(int tuSo, int mauSo)
{
this.tuSo = tuSo;
this.mauSo = mauSo;
}
}
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Truyền đối tượng vào 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.
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Bảo vệ truy cập biến lớp
Thay đổi tên biến thay đổi code ở những chỗ
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 chỉ đọc (read only)?
Truy cập giá trị là kết quả của việc xử lý các biến
lớp?
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Bảo vệ truy cập biến lớp
Không cho phép truy cập biến lớp
dùng hàm để truy cập
class PhanSo
{
private int tuSo;
public int mauSo;
public int LayTuSo()
{
return tuSo;
}
public void GanTuSo(int gt)
{
tuSo = gt;
}
}
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Thuộc tính
Dùng để bảo vệ việc truy cập biến lớp
Cho phép chỉnh sửa code không làm ảnh hưởng
nhiều đến chương trình
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại 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; }
}
}
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Kiểm tra hợp lệ
class PhanSo
{
private int tuSo;
private int mauSo;
public int TuSo { }
public int MauSo
{
get { return mauSo; }
set
{
if(value == 0)
mauSo = 1;
else
mauSo = value;
}
}
}
Khoa Hệ Thống Thông Tin
Đạ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 giaTri;
public double GiaTri
{
get { return giaTri; }
}
public double LayGiaTri()
{
giaTri = (double)tuSo / (double)mauSo;
return giaTri;
}
}
Khoa Hệ Thống Thông Tin
Đạ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 giaTri;
public int TuSo{}
public int MauSo{}
public double GiaTri
{
get { return (double)tuSo / (double)mauSo; }
}
}
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Toán tử
Các phép tính +, -, *, /
Phép so sánh >, =, <=
Các kiểu xây dựng sẵn (int, string, double) sử
dụng được toán tử.
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ã
Khoa Hệ Thống Thông Tin
Đạ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;
}
}
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Sử dụng toán tử
public static PhanSo operator +(PhanSo trai, PhanSo phai)
{
PhanSo c = new PhanSo();
c.TuSo = trai.MauSo * phai.TuSo
+ trai.TuSo * phai.MauSo;
c.MauSo = trai.MauSo * phai.MauSo;
return c;
}
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Sử dụng toán tử
Các toán tử logic phải đi đôi với nhau
> và <
>= và <=
== và !=
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Lưu ý
Sử dụng toán tử đúng chỗ, hợp lý
Nên sử dụng đúng ý nghĩa toán tử (toán tử + thì
nên là phép cộng)
Sử dụng toán tử để thực hiện công việc đơn giản
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Service Method và 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ử
dụng (public, gọi là Service method), có phương
phức chỉ sử dụng trong lớp (private, gọi là Support
Method).
Các support method sẽ bổ trợ cho Service method
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Service Method và 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)
return true;
return false;
}
public int ChuVi() {
if (laHopLe() == false)
return -1;
return CanhA + CanhB + CanhC;
}
}
Khoa Hệ Thống Thông Tin
Đạ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.
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 của 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
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Overloading Method
float tryMe(int x)
{
return x + .375;
}
float tryMe(int x, float y)
{
return x*y;
}
result = tryMe(25, 4.32)
Invocation
Khoa Hệ Thống Thông Tin
Đạ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.
Ta có thể truyền bao nhiêu đối số kiểu int vào cho
phương thức Sum cũng được.
public int Sum(params int []arr)
{
int s = 0;
foreach(int x in arr)
{
s += x;
}
return s;
}
Sum(1, 2, 4)
Sum()
Sum(1, 5, -8,2)
Khoa Hệ Thống Thông Tin
Đạ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 và psB
Vùng
nhớ A
Vùng
nhớ B
psA psB
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại 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ý)
Vùng
nhớ A
Vùng
nhớ B
psA psB
Khoa Hệ Thống Thông Tin
Đạ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,
lúc này hệ thống sẽ tự động thu hồi bộ nhớ (hủy vùng
nhớ A đã cấp trước đó), cơ chế này gọi là cơ chế gom rác
tự động
Vùng
nhớ A
Vùng
nhớ B
psA psB
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại 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
tượng 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
tượng gốc). C# hỗ trợ chúng ta hàm
MemberwiseClone để sao chép đối tượng.
public PhanSo copy()
{
return this.MemberwiseClone() as PhanSo;
}
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
Alias và cơ chế gom rác tự động
Ví dụ:
psA thay đổi không ảnh hưởng gì tới psB và ngược lại
PhanSo psB = new PhanSo(1,4);
PhanSo psA = psB.copy();
Vùng
nhớ A
Vùng
nhớ B
psA
psB
Sao chép toàn bộ thông tin trong
Vùng nhớ B vào vùng nhớ A Tức là
ta có 2 đối tượng có thông tin giống
nhau y xì nhưng nằm trên 2 ô nhớ
hoàn toàn khác nhau
Khoa Hệ Thống Thông Tin
Đại Học Quốc Gia TP.HCM
Đại Học Kinh Tế Luật
END