C03-Lap Trinh Huong Doi Tuong Trong C# - Part 1

Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 35

Chương 3

LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG


TRONG C#
Nội dung
1 Lớp và đối tượng

2 Tạo và huỷ đối tượng

3 Truyền tham số

4 Nạp chồng hàm

5 Đóng gói dữ liệu với thuộc tính

6 Kế thừa và đa hình

7 Lớp trừu tượng và giao diện

8 Xử lý ngoại lệ
29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 2/33
1. Lớp và đối tượng
Người ta gộp tất cả các đối tượng cùng chung thuộc tính, phương thức thành 1 lớp.

Trong đó:
• <tên lớp> là tên do người dùng đặt và tuân theo quy tắc đặt tên đã trình bày
trong bài
• <Phạm vi truy cập> bao gồm các từ khoá
như public, protected, private, static,...
• <Các thành phần của lớp> bao gồm các biến, phương thức của lớp

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 3/33


Phạm vi truy nhập
public Mọi thành phần liệt kê trong từ khóa public đều có thể truy
xuất trong bất kỳ phương thức nào.

private Những thành phần liệt kê trong phần private chỉ được truy
xuất trong phạm vi lớp, bởi vì chúng thuộc sở hữu riêng
của lớp.
protected Những thành phần liệt kê trong phần protected được phép
truy xuất trong phạm vi nội tại của lớp chứa nó và lớp thừa
kế. Điều đó có nghĩa là protected là sự kết hợp giữa public
và private.
internal Các thành phần được khai báo trong phạm vi của từ khóa
internal sẽ được phép truy xuất tại các lớp cùng nằm trong
file assembly ( nói cách khác trong cũng project); Trong C#
assembly chính là các file dll và .exe, các file này được
MSIL biên dịch ra.
internal Có thể được truy xuất bởi các phương thức của lớp đó, lớp
protected dẫn xuất từ lớp đó và các lớp trong cùng khối kết hợp
(assembly) với nó
29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 4/33
1. Lớp và đối tượng
Ví dụ tạo lớp hình chữ nhật có biến width và length:

Khi một biến được khai báo trực tiếp trong một lớp, nó
thường được gọi là thuộc tính. Lớp HinhChuNhat có 2 thuộc
tính là width và height. Nên mọi đối tượng thuộc lớp này đều
có 2 thuộc tính trên.

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 5/33


Khai báo đối tượng
 Cú pháp: Sử dụng từ khoá new
<tên lớp> <tên đối tượng> ;
<tên đối tượng> = new <tên lớp>([các giá trị khởi
tạo nếu có]);
Hoặc:
<tên lớp> <tên đối tượng> = new <tên lớp>([các
giá trị khởi tạo nếu có]);
 Chú ý
 Sau khi khai báo biến đối tượng thì biến đó chỉ là
một con trỏ
 Sau khi cấp phát bằng từ khoá new thì biến trỏ
tới một đối tượng thực sự
29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 6/33
Truy cập thuộc tính/phương thức
 Truy cập thuộc tính
 <tên đối tượng>.<tên thuộc tính>
 Truy cập phương thức
 <tên đối tượng>.<tên phương thức>([danh sách
đối số nếu có])
 Ví dụ:
 Tạo đối tượng hình chữ nhật h
HCN h;
h = new HCN();
h.Nhap();
h.Xuat();

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 7/33


Đối tượng
 Một đối tượng được tạo ra từ một lớp. Chúng ta đã tạo lớp có
tên HinhChuNhat , vì vậy bây giờ chúng ta có thể sử dụng
lớp này để tạo đối tượng.
 Để tạo một đối tượng HinhChuNhat , chỉ định tên lớp, theo
sau là tên đối tượng và sử dụng từ khóa new :

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 8/33


Lớp – đối tượng
Sử dụng nhiều lớp: Có thể tạo một đối tượng của một lớp và truy cập nó trong
một lớp khác. Điều này thường được sử dụng để tổ chức các lớp khoa học hơn.

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 9/33


2. Tạo và huỷ đối tượng
 Khởi tạo đối tượng  Gọi phương thức khởi tạo (constructor): là những
phương thức đặc biệt được gọi đến ngay khi khởi tạo 1 đối tượng nào đó.
Có 2 loại phương thức khởi tạo:
• Phương thức khởi tạo không đối số:
 Là phương thức khởi tạo không có bất kỳ tham số truyền vào nào.
 Thường dùng để khởi tạo các giá trị mặc định cho các thuộc tính bên
trong class khi khởi tạo đối tượng (giá trị mặc định này do người lập
trình quyết định).
• Phương thức khởi tạo có đối số:
 Là phương thức khởi tạo có tham số truyền vào. Và khi khởi tạo đối
tượng để phương thức này được gọi ta cần truyền đầy đủ các tham số.
 Thường dùng để khởi tạo các giá trị cho các thuộc thuộc tính bên
trong class khi khởi tạo đối tượng (các giá trị này do người khởi tạo
đối tượng truyền vào).
29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 10/33
Phương thức tạo lập mặc định
 Mặc định tạo đối tượng của lớp
 Các thuộc tính được khởi tạo giá trị mặc định

Kiểu dữ liệu Giá trị mặc định

Numeric (int, long,…) 0

bool false

char ‘\0’ (null)

reference null

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 11/33


Xây dựng phương thức tạo lập
 Phương thức tạo lập có tên trùng với tên
lớp, không có kiểu trả về, phạm vi truy cập
thường là public
 Có thể có nhiều phương thức tạo lập trong
cùng lớp
 Phương thức tạo lập có thể có tham số hoặc
không
 Ví dụ:
public class_name()
public class_name(danh sách tham số)

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 12/33


Ví dụ - Phương thức tạo lập

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 13/33


Phương thức huỷ (destructor)
 Ngược lại với phương thức khởi tạo, phương thức hủy được gọi khi
đối tượng tương ứng bị xóa khỏi bộ nhớ. Phương thức hủy cũng có
cùng tên với tên lớp tuy nhiên phía trước có dấu “~”.
• Đặc điểm của phương thức hủy như sau :Phương thức hủy không cho
phép kế thừa và không cho phép nạp chồng
• Phương thức hủy không được gọi tường minh
• Phương thức hủy không có phạm vi truy cập và không có tham số
truyền vào
 Cú pháp: ~<tên lớp>()

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 14/33


Phương thức huỷ (destructor)
 C# có cơ chế tự động thu gom rác (garbage
collector)  người lập trình không phải huỷ
đối tượng một cách tường minh
 Bộ thu gom rác tự động gọi phương thức huỷ

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 15/33


Từ khoá this
 Từ khoá this trỏ đến thể hiện hiện tại (current instance) của đối
tượng
Trước khi tìm hiểu từ khóa this là gì, giả sử chúng ta cho tham số của
hàm xây dựng cùng tên với dữ liệu thành viên của lớp

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 16/33


Từ khoá this

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 17/33


3. Truyền tham số
Trong lập trình C#, có hai loại truyền tham số vào hàm:
• Truyền tham trị: một bản sao của biến sẽ được tạo ra, sao chép giá trị của
biến, truyền biến đã được sao chép này vào hàm, dù có thực hiện bao nhiêu
phép tính toán cũng không ảnh hưởng đến biến gốc
• Truyền tham chiếu: truyền ngay địa chỉ của biến được lưu trên bộ nhớ vào
hàm (hay hiểu cách khác là truyền chính biến đó vào hàm) khi thực hiện
tính toán thì giá trị biến này thay đổi theo. Ref và out là hai từ khóa dùng
để truyền tham chiếu vào hàm.

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 18/33


3.1. Truyền tham chiếu – từ khóa ref
Nếu muốn biến bên ngoài thay đổi sau khi ra khỏi hàm, chúng ra sẽ truyền đối
số vào hàm theo cách truyền tham chiếu. Một trong những cách truyền tham
chiếu là sử dụng từ khóa ref.

Kết quả:
Gia tri so ban dau: 2
Ket qua goi ham Multi: 2
Ket qua goi ham MultiRef:
4

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 19/33


3.1. Truyền tham chiếu – từ khóa out
Biến truyền vào có từ khóa out sẽ không cần khởi tạo giá trị ban đầu.
• Tại sao không dùng return để trả kết quả về mà phải dùng hai từ khóa ref/out
để lưu lại giá trị?
• Có thể dùng out cho các trường hợp của ref được không?

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 20/33


Ví dụ - truyền tham chiếu, từ khoá ref
//Phương thức đổi chỗ 2 số, truyền tham chiếu, từ khoá ref
static void Swap2(ref int a, ref int b)
{
int temp;
temp = a;
a = b;
b = temp;
Console.WriteLine("Trong phuong thuc: a={0}, b={1},",a,b);
}
static void Main(string[] args)
{
int n,m;
n = 30; m = 40;
Console.WriteLine("Truoc khi goi swap2: n = {0}, m={1},", n, m);
Swap2(ref n, ref m);
Console.WriteLine("Sau khi goi swap2: n = {0}, m = {1},", n, m);
Console.ReadLine();
}
29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 21/33
Ví dụ - truyền tham chiếu, từ khoá out
//Phương thức thay đổi giá trị, sử dụng truyền tham chiếu, từ
khoá out
static void Swap2(out int a, out int b)
{
a=30; b=40;
int temp;
temp = a;
a = b;
b = temp;
Console.WriteLine("Trong phuong thuc: a={0}, b={1},",a,b);
}
static void Main(string[] args)
{
int n,m;
Swap2 (out n, out m);
Console.WriteLine("Sau khi goi swap2: n={0}, m={1},",n, m);
Console.ReadLine();
}

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 22/33


4. Nạp chồng hàm
 Các phương thức trực thuộc lớp có thể trùng tên
nhau nhưng phải khác nhau ở kiểu giá trị trả về,
danh sách kiểu các tham số, cách xây dựng các
phương thức như vậy người ta gọi là phương thức
nạp chồng :
 Để phân biệt được các hàm với nhau, căn cứ
vào một trong hai yếu tố:
 Khác tên
 Khác tham số hoặc kiểu dữ liệu của tham số
Ví dụ:
void myMethod(int p1);
void myMethod(int p1, int p2);
29/04/2024 void myMethod(double
Chương 3. Lập trình hướngp1, double
đối tượng trong C# s1); 23/33
Nạp chồng hàm

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 24/33


Nạp chồng hàm

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 25/33


Ví dụ tổng quát
 Xây dựng lớp PhanSo
class PhanSo public void InPhanSo()
{ {
int Tu, Mau;
//nạp chồng các phương thức khởi tạo Console.WriteLine("{0}/{1} ",
public PhanSo() Tu, Mau);
{ }
Tu = 0; public PhanSo Cong(PhanSo PS2)
Mau = 1; {
} int TS = Tu * PS2.Mau +
public PhanSo(int x) Mau * PS2.Tu;
{ int MS = Mau * PS2.Mau;
Tu = x; //Gọi phương thức tạo 2 tham số
Mau = 1; PhanSo KetQua = new
} PhanSo(TS, MS);
public PhanSo(int t, int m) return KetQua;
{ }
Tu = t;
Mau = m;
}

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 26/33


Ví dụ tổng quát
static void Main(string[] args)
{
PhanSo p1 = new PhanSo();
Console.Write("Phan so p1 = ");
p1.InPhanSo();
PhanSo p2 = new PhanSo(5);
Console.Write("Phan so p2 = ");
p2.InPhanSo();
int ts, ms;
Console.Write("Nhap tu so: ");
ts = int.Parse(Console.ReadLine());
Console.Write("Nhap mau so: ");
ms = int.Parse(Console.ReadLine());
PhanSo p3 = new PhanSo(ts, ms);
Console.Write("Phan so p3 = ");
p3.InPhanSo();
//p1=p2+p3
p1 = p2.Cong(p3);
Console.Write("Phan so p1 = p2 + p3 = ");
p1.InPhanSo();
Console.ReadLine();
}

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 27/33


Bài tập về nhà
 Bài 1. Xây dựng chương trình làm việc với
phân số
 Xây dựng lớp PhanSo gồm:
class PhanSo{
private int TuSo; //Tử số
private int MauSo; //Mẫu số
}
 Xây dựng các phương thức trong lớp PhanSo
 Hàm tạo (khởi tạo tử số = 0, mẫu số = 1)
 Hàm tạo 2 tham số tử, mẫu
 Nhập phân số
 In phân số
 Rút gọn phân số
 Tính tổng/hiệu/tích/thương 2 phân số
29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 28/33
Bài tập về nhà
 Bài 2. Xây dựng chương trình làm việc với
các điểm trong không gian 2 chiều
 Khai báo lớp Điểm gồm:
class Diem{
private double x; //Hoành độ
private double y; //Tung độ
}
 Xây dựng các phương thức
 Hàm tạo không tham số: khởi tạo điểm toạ độ (0,0)
 Hàm tạo 2 tham số x, y: khởi tạo điểm có toạ độ (x,y)
 Nhập toạ độ
 In toạ độ điểm ra màn hình
 Tính khoảng cách giữa 2 điểm

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 29/33


Bài tập về nhà
 Bài 3. Chương trình làm việc với mảng 1 chiều
 Xây dựng lớp Mang1Chieu gồm
class Mang1Chieu{
private int n; //Số phần tử của mảng
int[ ] a; //Mảng 1 chiều
}
 Xây dựng các phương thức trong lớp Mang1Chieu
 Hàm tạo Mang1Chieu(int n) để khởi tạo mảng gồm n phần tử
 Nhập mảng
 In mảng ra màn hình
 Sắp xếp mảng
public void sapxep(int thutu) //thutu = 0: tăng dần, thutu=1: giảm dần
 Tìm kiếm
public int timkiem(int m) //Trả về -1 nếu không thấy, trả về vị trí nếu
tìm thầy
29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 30/33
Bài tập về nhà
 Bài 4. Xây dựng chương trình làm việc với
ma trận
 Xây dựng lớp MaTran gồm
class MaTran{
private int m; //Số dòng
private int n; //Số cột
private int[ , ] a; //Mảng 2 chiều
}
 Xây dựng các phương thức trong lớp MaTran
 Hàm tạo MaTran(int m, int n) để khởi tạo ma trận m
dòng, n cột
 Nhập ma trận
 In ma trận ra màn hình
 Cộng 2 ma trận
29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 31/33
Bài tập về nhà
 Xây dựng các phương thức trong lớp MaTran
 Tính hiệu 2 ma trận
 Tính tích 2 ma trận
 Tìm ma trận chuyển vị
 Kiểm tra ma trận có phải ma trận vuông hay không?

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 32/33


Bài tập về nhà
 Bài 5. Xây dựng lớp NhanVien
 Các thành phần dữ liệu
 Họ tên, Năm sinh, Địa chỉ, Lương cơ bản, Hệ số, Phụ
cấp, Tổng tiền
 Các phương thức
 Hàm tạo không tham số
 Nhập nhân viên
 Tính lương: Tổng tiền = Lương cơ bản x Hệ số + Phụ
cấp
 In nhân viên ra màn hình

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 33/33


Bài tập về nhà
 Bài 6. Chương trình quản lý Sinh viên
 Xây dựng lớp SinhVien
 Các thành phần dữ liệu:
 Mã sinh viên, Họ tên, Năm sinh, Quê quán, Điểm lập trình,
Điểm CSDL , Điểm TB (trong đó: Điểm TB=Điểm Lập trình
+ Điểm CSDL)/2
 Các hàm tạo
 Hàm tạo không tham số
 Hàm tạo có 5 tham số (Họ tên, năm sinh, quê quán, Điểm
lập trình, Điểm CSDL)
 Các phương thức
 Nhập thông tin sinh viên
 In thông tin sinh viên ra màn hình

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 34/33


Bài tập về nhà
 Xây dựng lớp DanhSach
 Các thành phần dữ liệu
class DanhSach{
private int n; //Số lượng sinh viên
private SinhVien[ ] DS; //Mảng chứa danh sách Sinh
viên
}
 Các phương thức
 Nhập danh sách sinh viên
 In thông tin các sinh viên có trong danh sách
 Liệt kê những sinh viên có điểm TB>8.0
 Sắp xếp danh sách theo Mã sinh viên

29/04/2024 Chương 3. Lập trình hướng đối tượng trong C# 35/33

You might also like