Bài giảng Kỹ thuật lập trình: Chương 3 - ThS. Phạm Thanh An
Trang 1Chương 3
Xây dựng lớp, đối tượng
ThS Phạm Thanh An
Khoa Công nghệ thông tin
Đại học Ngân hàng Tp Hồ Chí Minh
Nội dung trình bày
nhiệm vụ liên quan
tả một cái gì đó mà chúng ta muốn thao tác
trong hệ thống: là thực thể vật lý hoặc thực thể
khái niệm
vi (behaviors)
Trang 2điệp (sending message)
Lớp
Lớp là bản mẫu hay một kiểu chung cho
tất cả những đối tượng có những đặc
trưng giống nhau
Trong lập trình hướng đối tượng, lớp
được xem là đồng nhất với kiểu dữ liệu
trừu tượng
Một lớp có thể tạo ra một số không giới
hạn các đối tượng
Trang 3Quận 9 117-2321
Khách hàng
Tên Địa chỉ Điện thoai
Lớp với đối tượng
Ghi chú: trong C# phần kết thúc của lớp không
có dấu “;” như khai báo lớp trong ngôn ngữ C++
Trang 4Ví dụ về định nghĩa lớp
public class hocsinh
{
private string hoten;
public int lop ;
public void lenlop();
private float sodutk ;
public void naptien(float sotien)
{ sodutk = sodutk + sotien; }
public bool ruttien(float sotien)
{ if ( sodutk < sotien) return false ;
else { sodutk = sodutk - tienrut; return true ; }
public Không giới hạn Những thành phần public có thể được dùng
bởi bất cứ các phương thức của lớp bất kỳ.
private Thành viên trong một lớp A được đánh dấu là private thì chỉ
có thể được truy cập bởi các phương thức của lớp A.
protected Thành viên trong lớp A được đánh dấu là protected thì chỉ có
thể được truy cập các phương thức bên trong lớp A và những
phương thức của những lớp dẫn xuất từ lớp A
Trang 5Bổ từ truy cập (Access modifiers)
Bổ từ truy
cập Giới hạn truy cập
internal Thành viên trong lớp A được đánh dấu là internal thì được
truy cập bởi những phương thức của bất cứ lớp nào trong
cùng khối hợp ngữ với A.
protected
internal
Thành viên trong lớp A được đánh dấu là protected
internal được truy cập bởi các phương thức của lớp A, các
phương thức của lớp dẫn xuất của A, và bất cứ lớp nào
trong cùng khối hợp ngữ của A.
Phương thức
Có trả về giá trị (int, float, string, object, vv)
tượng
<Bổ từ truy cập> <kiểu trả về> <tên phương thức> (d/s tham số)
{
< câu lệnh> ; // thân phương thức
}
Tham số của phương thức
liệu
bộ
và khởi tạo giá trị bằng giá trị của tham số truyền
vào
Trang 6Tạo đối tượng
Sử dụng từ khóa new
Đối tượng = new tênlớp()
Ví dụ:
Trang 7Phương thức thiết lập (constructor)
việc khởi tạo các thành phần của đối tượng
public, không trả về giá trị (không sử dụng
void)
đối tượng = new tênlớp(các tham số)
Ví dụ: Phương thức thiết lập
using System;
public class Thang
{
private int days;
public Thang(int songay)
Thang thang1 =new Thang(31);
Thang thang4 = new Thang(30);
Console.WriteLine (Thang1.days);
}
}
Ví dụ: lớp Rectangle
Trang 8Phương thức thiết lập (tt)
Nếu không định nghĩa phương thức thiết
lập, trình biên dịch sẽ cung cấp một
phương thức thiết lập mặc định.
Phương thức thiết lập mặc định được
tạo ra cho một đối tượng sẽ không thực
Trang 9public Time( System.DateTime dt )
{ Year = dt.Year; Month = dt.Month; Date =
dt.Day; Hour = dt.Hour; Minute = dt.Minute;
System.DateTime currentTime =System.DateTime.Now;
Time t = new Time( currentTime );
t.DisplayCurrentTime( );
}
}
} // end namespace
Trang 10Khởi tạo biến thành viên
Các biến thành viên có thể được khởi
tạo trực tiếp khi khai báo trong quá trình
khởi tạo
private int Giay = 30; // Khởi tạo
Nạp chồng phương thức thiết lập
Chúng ta có thể định nghĩa nhiều
phương thức thiết lập trong một lớp
Với điều kiện
khác nhau
Ví dụ
public class taikhoan
{
private float sodutk ;
private float gioihanrut;
public taikhoan( int sd)
Trang 11taikhoan tk1 = new taikhoan(50);
taikhoan tk2 = new taikhoan(50,10);
Ví dụ : Nạp chồng constructor
Trang 12Phương thức thiết lập sao chép
sao chép tất cả các biến từ một đối tượng đã có và
Phương thức thiết lập sao chép (tt)
Để sao chép từ một đối tượng đã hiện
hữu t1 là đối tượng của lớp ThoiGian
như sau:
sao của đối tượng t1
Trang 13Từ khóa this
thể hiện hiện hành của một đối tượng
tên
những phương thức khác và các biến thành
viên thông qua tham chiếu this này
và phương thức tĩnh
Từ khóa this (tt)
tham số đưa vào, như trường hợp sau
public void SetYear( int Nam)
{
this.Nam = Nam;
}
(Nam) cùng tên với thành phần của lớp
Trang 14Các thành viên tĩnh (static member)
lớp có thể là những thành viên thể hiện
(instance members) hay những thành viên tĩnh
(static members)
tượng, liên quan đến 1 thể hiện của lớp (một đối
Sử dụng từ khóa “ static” để khai báo
một thuộc tính hay một phương thức với
thuộc về lớp
Trang 15viên tĩnh thông qua một thể hiện,
public static int currentCount;
public static int IncrementCount()
{
return ++currentCount;
}
}
Trang 16Các thuộc tính tĩnh rất hữu ích khi chúng
ta muôn lưu trữ các trạng thái liên quan
đến tất cả thể hiện của lớp
Phương thức tĩnh có tác dụng khi hành
vi là chung cho của lớp chứ không phải
một thể hiện cụ thể nào của lớp.
Trang 17Cat muop = new Cat();
Cat miu = new Cat();
chiếu this và một thể hiện nào tham chiếu tới
tiếp đến các thành phần không tĩnh (nonstatic)
(nonstatic), phải tạo ra một thể hiện lớp
Ví dụ:
using System;
public class Class1
{
public void SomeMethod(int p1, float p2)
{ Console.WriteLine(“Ham nhan duoc hai tham so: {0} va {1}”, p1,p2); }
Class1 c = new Class1();
c.SomeMethod( var1, var2 );
}
}
Trang 18Phương thức thiết lập tĩnh
tĩnh (static constructor), thì phương thức thiết lập
tĩnh này sẽ được thực hiện trước bất cứ thể hiện
nào của lớp được tạo ra
thức thiết lập tĩnh này được thực hiện
trước bất kì biến đối tượng nào được tạo ra
Lưu ý về phương thức thiết lập tĩnh
thức thiết lập tĩnh
1 lần cho dù chúng ta có tao ra một số bất kỳ
các đối tượng
truy cập (private, public, ) và không nhận bất
kỳ tham số nào
trước bất kỳ phương thức thiết lập mức thể
hiện
Trang 19Phương thức thiết lập private
Được sử dụng khi một lớp chỉ có các
thành phần tĩnh, và đối tượng của lớp
không cần tạo ra
Phương thức thiết lập private (tt)
cục (đều phải khai báo trong 1 lớp)
những lớp tiện ích nhỏ chỉ để chứa các phương thức
tĩnh (lớp Math, Console)
không có phương thức thiết lập public, thì tất cả
các lớp khác (ngoại trừ lớp lồng) không được phép
tạo ra thể hiện của lớp này
Phương thức hủy (Destructors)
trước
những đối tượng không dùng nữa hoặc không tham
chiếu đến nữa
Cú pháp: … ~<Tên lớp>()
{
<câu lệnh> ; }
Trang 20Phương thức hủy (Destructors)
Có duy nhất 1 phương thức hủy trong 1 lớp
Không thể gọi tường minh phương thức hủy
Không nhận bất kỳ tham số nào
Khổng thể nạp chồng hay kế thừa
Không nhân các bổ từ truy cập
Ví dụ: phương thức hủy
Truyền tham số
Mặc định, các kiểu giá trị thì sẽ được
truyền giá trị vào cho phương thức
C# đưa ra khả năng cho phép ta truyền
các tham số kiểu giá trị dưới hình thức là
tham chiếu, sử dụng các bổ từ:
cho tham số truyền vào
đầu cho tham số truyền vào
Trang 21Ví dụ: Truyền tham số
Ví dụ: với bổ từ ref
Ví dụ: với bổ từ out
Trang 22Quá tải phương thức ( Overloading)
Sử dụng cùng một tên cho các phương
Trang 23Quá tải phương thức
using System;
public class Area
{
private int areaVal;
public void AreaCal(int radius)
sum = Int32.Parse(value1) + Int32.Parse(value2);
Console.WriteLine ("Sum is {0}",sum);
Console.WriteLine ("Strings are converted to integers to add”);
}
Đóng gói dữ liệu với thuộc tính
liệu trong một lớp, tránh truy cập trực tiếp
bằng cách đọc và ghi tới các trường này thông
phương thức trong đó các dữ liệu được che dấu,
đảm bảo cho yêu cầu thiết kế hướng đối tượng
Trang 24Đóng gói dữ liệu với thuộc tính
public class Employee
{
private string fullName;
public string GetFullName()
Đóng gói dữ liệu với thuộc tính
<Bổ từ truy cập> có thể là private, public,
protected hay internal, <Kiểu trả về> có thể
Đóng gói dữ liệu với thuộc tính
public class Employee
{
private string fullName;
// Property for fullName
public string Name
{
get { return fullName; }
set { fullName = value;}
}
}
Định nghĩa Property để cho các chương trình client truy cập
static void Main() { Employee p = new Employee();
p.Name = “Tom”;
Console.WriteLine (p.Name);
}
Trang 25Đóng gói dữ liệu với thuộc tính
public class Employee
{
private string fullName;
// read-only Property for fullName
public string Name
{
get { return fullName; }
}
}
Trang 26Write-Only Property
Chỉ tồn tại khối set
public class Employee
{
private string fullName;
// write-only Property for fullName
public string Name
{ public class RightNow
{ // public member variables
public static int Year;
public static int Month;
public static int Date;
public static int Hour;
public static int Minute;
public static int Second;
static RightNow( )
{ System.DateTime dt = System.DateTime.Now;
Year = dt.Year; Month = dt.Month;
Date = dt.Day; Hour = dt.Hour;
Minute = dt.Minute; Second = dt.Second;
}
}
Các trường chỉ đọc
public class Tester
{ static void Main( )
Trang 27Các trường chỉ đọc
và tránh thay đổi giá trị thuộc tính year, chúng
ta khai báo như sau
public static readonly int Year; // thuộc tính chỉ