Bài giảng môn Kỹ thuật lập trình - Chương 4: Lớp và đối tượng

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.

pdf58 trang | Chia sẻ: thanhle95 | Lượt xem: 530 | Lượt tải: 1download
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
Tài liệu liên quan