Tải bản đầy đủ (.ppt) (32 trang)

Bài giảng Lập trình hướng đối tượng trong C #: Chương 3 - GV. Phạm Mạnh Cương

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (185.16 KB, 32 trang )

CHƯƠNG 3: Lớp và đối tượng
Nội dung chính

Định nghĩa lớp

Tạo đối tượng

Sử dụng các thành viên tĩnh

Truyền tham số

Hàm dựng và nạp chồng phương thức

Đóng gói dữ liệu với property
1. Định nghĩa lớp

Lớp trong C# cho phép người lập trình tự định
nghĩa các kiểu dữ liệu phức tạp (user-defined
types) và được sử dụng tương tự như kiểu dữ
liệu có sẵn (built-in data types).

Lớp thường được sử dụng để định nghĩa các
vấn đề trừu tượng như: ngày tháng, vector …

Lớp cho phép tách rời phần cài đặt
(implementation) và phần giao diện (interface).
1.Định nghĩa lớp (tt)

Một lớp có chứa dữ liệu (member data) và hàm (member function).
Class
data1


data2
data3
functiona()
functionb()
functionc()
Ví dụ
class Employee // khai báo tên lớp
{
// từ khóa cho biết không thể truy nhập từ ngoài lớp
private int EmpID ; // member data
private char EmpName[30];
private float EmpSalary;
// từ khóa cho biết có thể truy nhập từ ngoài lớp
public void AddEmployee(); // member function
};
Bổ từ truy xuất
Từ khoá Giải thích
public
Truy xuất mọi nơi
protected
Truy xuất trong nội bộ lớp hoặc trong các lớp
con
private (mặc định)
Chỉ được truy xuất trong nội bộ lớp
Ví dụ
using System;
public class Time
{
// phương thức public
public void DisplayCurrentTime()

{
Console.WriteLine("stub for DisplayCurrentTime");
}
// các biến private
private int Year; int Month; int Date;
public int Hour,Minute, Second;
}
public class Tester
{
static void Main()
{
Time t = new Time();
t.DisplayCurrentTime();
}
}
Điều khiển truy nhập
Class
private
public
data1
data2
functiond()
functiona()
functionb()
functionc()
Phần được khai báo với từ khóa
private chỉ được truy nhập bởi các
hàm thành phần của cùng class
Phần được khai báo với từ khóa
public có thể được truy nhập tại

bất kỳ nơi nào trong chương trình
2.Tạo đối tượng
Cú pháp khai báo đối tượng và cấp phát vùng nhớ cho đối
tượng:
TênLớp TênBiếnĐốiTượng;
TênBiếnĐốiTượng = new TênLớp(DanhSáchĐốiSố);
hoặc
TênLớp TênBiếnĐốiTượng = new TênLớp(DanhSáchĐốiSố);
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ừ khóa new thì biến trỏ tới một đối
tượng thực sự.
public void Xuat()
{
Console.WriteLine("Hinh chu nhat: Dai = {0},
Rong = {1}", Dai, Rong);
}
}
class Application
{
static void Main(string[] args)
{
HCN h;
h = new HCN();
h.Nhap();
h.Xuat();
Console.WriteLine("Chu vi hinh chu nhat:
{0}", h.ChuVi());
Console.WriteLine("Dien tich hinh chu nhat:
{0}", h.DienTich());

Console.ReadLine();
}
}
}
2.Tạo đối tượng

Ví dụ:
Chương trình nhập chiều dài, chiều rộng của hình chữ nhật và xuất ra
diện tích, chu vi của hình chữ nhật.
using System;
namespace LopDoiTuongHCN
{
class HCN
{
protected float Dai, Rong;
public float ChuVi()
{
return (Dai + Rong )*2;
}
public float DienTich()
{
return Dai* Rong;
}
public void Nhap()
{
Console.WriteLine("Nhap chieu dai: ");
Dai = float.Parse(Console.ReadLine());
Console.WriteLine("Nhap chieu rong: ");
Rong = float.Parse(Console.ReadLine());
}

Từ khoá this

Từ khoá this được dùng để tham chiếu đến chính bản thân của đối tượng đó.
Ví dụ:
public void SomeMethod (int hour)
{
this.hour = hour;
}
3.Sử dụng các thành viên tĩnh

Phương thức tĩnh (static) được nói là hoạt động trong
lớp. Do đó, nó không thể được tham chiếu this chỉ tới.

Phương thức static cũng không truy cập trực tiếp vào
các phương thức không static được mà phải dùng qua
thể hiện của đối tượng.

Việc truy cập đến thành viên tĩnh (static) phải thực hiện
thông qua tên lớp (không được truy cập thành viên tĩnh
thông qua đối tượng) theo cú pháp:
TênLớp.TênThànhViênTĩnh
Ví dụ
Ví dụ 4‑6 Cách sử dụng phương thức tĩnh
using System;
public class MyClass
{
public void SomeMethod(int firstParam, float secondParam)
{
Console.WriteLine("Here are the parameters received: {0}, {1}", firstParam, secondParam);
}

}

public class Tester
{
static void Main( )
{
int howManyPeople = 5;
float pi = 3.14f;
MyClass mc = new MyClass( );
mc.SomeMethod(howManyPeople, pi);
}
}
Trong ví dụ trên phương thức Main() là tĩnh và phương thức SomeMethod() không là tĩnh.
3.Sử dụng các trường tĩnh (tt)
public void HowManyCats1()
{
Console.WriteLine("{0}
cats adopted", instances);
}
private static int instances
= 0;
public static int instances1
= 0;
}
using System;
public class Cat
{
public Cat()
{
instances++;

}
public static void
HowManyCats()
{
Console.WriteLine("{0} cats
adopted",instances);
}

Cách dùng chung các biến thành viên tĩnh là giữ vết của một số các thể hiện
mà hiện tại nó đang tồn tại trong lớp đó.
public class Tester
{
static void Main()
{
Cat c = new Cat();
//Truy cap vao phuong thuc ko Static phải tạo 1 đối tượng
c.HowManyCats1();
//Khong the truy cap vao phuong thuc Static
//bang this, hay the hien
//đoi tuong ma Tendoituong.phuongthuc_static
Cat.HowManyCats();
Cat frisky = new Cat();
Cat.HowManyCats();
Cat whiskers = new Cat();
Cat.HowManyCats();
}
}
3. Sử dụng các trường tĩnh (tt)
4. Truyền tham số


Trong C#, ta có thể truyền tham số cho phương thức theo kiểu tham chiếu hoặc tham trị
Truyền bằng tham chiếu

Một hàm chỉ có thể trả về một giá trị. Trong trường hợp muốn nhận về nhiều kết
quả, ta sử dụng chính các tham số truyền cho hàm như các tham số có đầu ra
(chứa trị trả về). Ta gọi tham số truyền theo kiểu này là tham chiếu.
Ví dụ
Trị trả về trong tham số
public class Time
{
// một phương thức public
public void DisplayCurrentTime()
{
System.Console.WriteLine("{0}/{1}/{2} {3}:{4}:{5}“, Month, Date, Year, Hour, Minute,
Second);
}
public int GetHour( )
{
return Hour;
}
public void GetTime(ref int h, ref int m, ref int s)
{
h = Hour;
m = Minute;
s = Second;
}
Ví dụ (tt)
// hàm dựng
public Time(System.DateTime dt)
{

Year = dt.Year;
Month = dt.Month;
Date = dt.Day;
Hour = dt.Hour;
Minute = dt.Minute;
Second = dt.Second;
}
// biến thành viên private
private int Year;
private int Month;
private int Date;
private int Hour;
private int Minute;
private int Second;
}
Ví dụ (tt)
public class Tester
{
static void Main( )
{
System.DateTime currentTime = System.DateTime.Now;
Time t = new Time(currentTime);
t.DisplayCurrentTime( );
int theHour = 0;
int theMinute = 0;
int theSecond = 0;
t.GetTime(ref theHour, ref theMinute, ref theSecond);
System.Console.WriteLine("Current time: {0}:{1}:{2}",
theHour, theMinute, theSecond);
}

}
Ví dụ: Đối tượng làm tham số
object d2
soluong
dongia
thanhtien
object d1
soluong
dongia
thanhtien
d2.add_solg(d1,65);
day
d1.day
Hàm thành phần của d2 truy
nhập trực tiếp tới dữ liệu
soluong

của nó
Hàm thành phần của d2 truy
nhập tới dữ liệu
soluong
của
đối tượng d1
Truyền tham số đầu ra (out parameter)
Mặc định, C# quy định tất các biến phải được gán giá trị trước khi sử
dụng, vì vậy,trong ví dụ trên, nếu chúng ta không khởi tạo các biến
theHour, theMinute bằng giá trị 0 thì trình biên dịch sẽ thông báo lỗi.
Từ khóa out cho phép ta sử dụng tham chiếu mà không cần phải khởi gán
giá trị đầu. Trong ví dụ trên, ta có thể sửa phương thức GetTime thành:
public void GetTime(out int h, out int m, out int s)

5. Hàm tạo, hàm dựng và chồng
phương thức (constructor)

Hàm tạo là một hàm thành phần được tự động
viện dẫn khi khởi tạo một đối tượng mới của lớp.

Hàm tạo phải có tên trùng với tên lớp và không
có giá trị trả về.

Nếu không khai báo hàm tạo thì một hàm tạo
mặc định sẽ tự động được tạo ra.

Nếu đã khai báo hàm tạo thì không tự động có
hàm tạo mặc định
Ví dụ: Hàm tạo mặc định
public class Time
{
// public accessor methods
public void DisplayCurrentTime( )
{
System.Console.WriteLine("{0}/{1}/{2} 3}:{4}:{5}",
Month, Date, Year, Hour,
Minute, Second);
}
// constructor
public Time(System.DateTime dt)
{
Year = dt.Year;
Month = dt.Month;
Date = dt.Day;

Hour = dt.Hour;
Minute = dt.Minute;
Second = dt.Second;
}
// private member variables
int Year;
int Month;
int Date;
int Hour;
int Minute;
int Second;
}
public class Tester
{
static void Main( )
{
System.DateTime currentTime =
System.DateTime.Now;
Time t = new Time(currentTime);
t.DisplayCurrentTime( );
}
}
Kết quả:
11/16/2000 16:21:40
Hàm tạo sao chép

Hàm tạo sao chép khởi tạo đối tượng dựa trên một đối tượng
khác thuộc cùng lớp.

Mỗi lớp có một hàm tạo sao chép mặc định – có một tham số là

đối tượng của cùng một lớp.

Ta có thể định nghĩa lại hàm tạo sao chép.
Một hàm dựng sao chép
public Time(Time existingTimeObject)
{
Year = existingTimeObject.Year;
Month = existingTimeObject.Month;
Date = existingTimeObject.Date;
Hour = existingTimeObject.Hour;
Minute = existingTimeObject.Minute;
Second = existingTimeObject.Second;
}

×