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 (149.47 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ừ ngồ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ừ ngồi lớp

public void AddEmployee();
};

// member function


Bổ từ truy xuất
Từ khố

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
data1
data2
functiond()
public
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ự.



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());
}


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();
}
}
}


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)
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 đó.
using System;
public class Cat
{
public Cat()
{
instances++;
}
public static void HowManyCats()
{

Console.WriteLine("{0} cats
adopted",instances);
}

public void HowManyCats1()
{
Console.WriteLine("{0}
cats adopted", instances);
}
private static int instances
= 0;
public static int instances1
= 0;
}


3. Sử dụng các trường tĩnh
(tt)
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();
}
}


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

object d1

soluong
dongia

thanhtien

soluong
dongia
thanhtien

day

d1.day

d2.add_solg(d1,65);

Hàm thành phần của d2 truy Hàm thành phần của d2 tru
nhập tới dữ liệu soluong củ
nhập trực tiếp tới dữ liệu soluong
đối tượng d1
của nó


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
// private member variables
{
int Year;
// public accessor methods
int Month;
public void DisplayCurrentTime( )

int Date;
{
int Hour;
System.Console.WriteLine("{0}/{1}/{2} 3}:{4}:{5}",
int Minute;
Month, Date, Year, Hour,
int Second;
Minute, Second);
}
}
public class Tester
{
// constructor
static void Main( )
public Time(System.DateTime dt)
{
{
System.DateTime currentTime =
Year = dt.Year;
System.DateTime.Now;
Month = dt.Month;
Time t = new Time(currentTime);
Date = dt.Day;
t.DisplayCurrentTime( );
Hour = dt.Hour;
}
Minute = dt.Minute;
}
Second = dt.Second;
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;
}


×