Khai báo và cài đặt lớp

Một phần của tài liệu Lập trình hướng đối tượng (Trang 33 - 38)

CHƢƠNG 2 ĐỐI TƢỢNG VÀ LỚP

2. THIẾT KẾ VÀ CÀI ĐẶT LỚP

2.1. Khai báo và cài đặt lớp

Cú pháp: TÊN LỚP Dữ liệu thành viên Hàm thành viên 2.1.1. Cài đặt dữ liệu thành phần.

Khi xác định đƣợc thuộc tính hay dữ liệu của lớp, chúng ta tiến hành khai báo trong lớp. Việc khai báo giống nhƣ khai báo biến, mỗi thuộc tính là khai báo một biến. Tất cả các khai báo này đƣợc đặt sau <quyền truy xuất>, và cụ thể quyền truy xuất là gì chúng ta sẽ tìm hiểu ngay bên dƣới ở mục 2.1.3. Nếu chỉ dừng ở việc khai báo thuộc tính nhƣ thế này thì khai báo lớp giống nhƣ khai báo struct.

Ví dụ: định nghĩa lớp Sinh viên.

Class TENLOP {

<Quyền truy xuất>:

Datatype1 memberdata1; Datatype2 memberdata2; ……………

<Quyền truy xuất>:

memberFunction1(); memberFunction2(); ………….

Tài liệu giảng dạy Lập Trình Hƣớng Đối Tƣợng 33 2.1.2. Cài đặt hàm thành phần (phương thức của lớp).

Cài đặt phƣơng thức của lớp giống nhƣ việc cài đặt các hàm mà chúng ta đã học, chỉ khác một điều rằng nếu là phƣơng thức thì nội dung của phƣơng thức này phải thao tác trên dữ liệu của lớp (tức thuộc tính của lớp), cịn khái niệm hàm chính là những hàm chức năng ở bên ngồi lớp, khơng phải là hàm thành viên của lớp, các hàm này cĩ thể đƣợc sử dụng ở bất cứ nơi đâu (miễn là phải khai báo trƣớc khi sử dụng) ngay cả trong một lớp.

Tất cả các phƣơng thức của lớp đƣợc đặt sau <quyền truy xuất>, cụ thể sẽ đƣợc trình bày trong mục 2.1.3.

Ví dụ: Xét lại ví dụ với lớp SinhVien

Để định nghĩa phƣơng thức chúng ta cĩ hai cách:

Cách 1: Định nghĩa phƣơng thức ngay trong lớp.

Ví dụ:

class SinhVien {

<quyền truy xuất>: char masv[10]; char hoten[20]; float dtb;

<quyền truy xuất>: void XepLoai(); ...

};

class SinhVien {

<quyền truy xuất>: char masv[10]; char hoten[20]; float dtb; }; class SinhVien {

<quyền truy xuất>: char masv[10]; char hoten[20]; float dtb; };

Tài liệu giảng dạy Lập Trình Hƣớng Đối Tƣợng 34

Cách 2: Khai báo phƣơng thức trong lớp, sau đĩ định nghĩa ở ngồi lớp.

Khai báo trong lớp:

Định nghĩa ngồi lớp: Trong chƣơng trình, ở ngồi phạm vi của lớp chúng ta

cĩ thể định nghĩa phƣơng thức theo cú pháp sau:

<Kiểu Trả Về> TênLớp:: <TênPhƣơngThức>(Danh sách tham số)

class SinhVien {

<quyền truy xuất>: char masv[10]; char hoten[20]; float dtb;

<quyền truy xuất>: void XepLoai(); ...

};

class SinhVien {

<quyền truy xuất>: char masv[10]; char hoten[20]; float dtb;

<quyền truy xuất>: void XepLoai() {

if(dtb>=8) cout«”XL giỏi”; else if (dtb >=7) cout«”XL khá”;

else cout«”XL trung bình”; }

Tài liệu giảng dạy Lập Trình Hƣớng Đối Tƣợng 35

{

//nội dung của phƣơng thức }

Cú pháp trên cĩ xuất hiện tốn tử phạm vi „::‟, tốn tử này đi cùng với tên lớp để nĩi lên rằng phƣơng thức mà chúng ta đang định nghĩa thuộc lớp nào. Bởi vì trong chƣơng trình cĩ thể cĩ rất nhiều lớp khác nhau và cĩ thể các lớp này lại cĩ các phƣơng thức trùng tên nên khi định nghĩa bên ngồi lớp thì phải chỉ định rõ ràng là phƣơng thức này là của lớp nào.

Ví dụ:

void SinhVien::XepLoai() {

if(dtb>=8) cout«”XL giỏi”; else if (dtb >=7) cout«”XL khá”; else cout«”XL trung bình”;

}

2.1.3. Thuộc tính truy xuất

Thuộc tính truy xuất bao gồm: private, public, protected. Mỗi thuộc tính truy

xuất này thể hiện các quyền truy xuất khác nhau, cho phép các đối tƣợng bên ngồi lớp truy xuất hay khơng truy xuất đến các thành phần của lớp.

Thuộc tính truy xuất private:

Thành phần của lớp đặt sau từ khĩa này thì cĩ nghĩa là những thành phần này là “riêng tƣ”, chỉ đƣợc phép truy cập trong lớp và cấm truy cập ở bất kỳ nơi nào ở ngồi lớp. Nĩi cách khác chỉ cĩ các phƣơng thức của lớp mới đƣợc phép truy cập hay truy xuất tới các thành phần đã khai báo là private. Thơng thƣờng để thể hiện đúng đặc điểm của lập trình hƣớng đối tƣợng thì các thuộc tính của lớp phải đƣợc khai báo là private.

Thuộc tính truy xuất public:

Public cĩ nghĩa là “cơng cộng”, tức là các thành phần của lớp mà đƣợc khai báo sau từ khĩa public này đều đƣợc sử dụng ở bên ngồi lớp, ở bất cứ nơi nào cũng cĩ thể truy xuất đƣợc tới những thành phần này. Thơng thƣờng thì các phƣơng thức của lớp đƣợc khai báo là public.

Tài liệu giảng dạy Lập Trình Hƣớng Đối Tƣợng 36 Qua ví dụ này chúng ta thấy thuộc tính masv, hoten, dtb đƣợc khai báo là

private nên chỉ cĩ các thành phần ở trong lớp mới truy xuất đƣợc, cụ thể là phƣơng thức XepLoai(). Các phạm vi khác khơng thể truy xuất nhƣ trong hàm main() đã tạo ra một đối tƣợng của lớp SinhVien hay một biến của kiểu dữ liệu SinhVien, sau đĩ truy xuất tới thuộc tính dtb của x để nhập dữ liệu. Câu lệnh này sẽ báo lỗi khi biên dịch bởi vì tại hàm main() (ở ngồi lớp) khơng đƣợc phép truy xuất.

Đối với phƣơng thức XepLoai() đƣợc khai báo là public, nên ở bất kỳ nơi nào cũng cĩ thể sử dụng, truy xuất tới nĩ và cụ thể là tại hàm main() cĩ thể yêu cầu đối tƣợng x gọi hành động XepLoai() mà khơng bị lỗi.

Thuộc tính truy xuất protected:

class SinhVien { private: char masv[10]; char hoten[20]; float dtb; public: void XepLoai() {

if(dtb>=8) cout«”XL giỏi”; else if (dtb >=7) cout«”XL khá”;

else cout«”XL trung bình”; }

};

void main() {

SinhVien x;

cin»x.dtb; // lỗi truy xuất

x.XepLoai(); // đƣợc phép truy xuất }

Tài liệu giảng dạy Lập Trình Hƣớng Đối Tƣợng 37 Những thành phần đƣợc đặt sau protected thì cũng giống nhƣ private là chỉ cho phép những thành phần của lớp truy xuất, ngồi ra thành phần đƣợc khai báo là

protected cịn cho phép những thành phần của lớp dẫn xuất của lớp này đƣợc sử

dụng, đƣợc truy xuất. Thuộc tính này chỉ cĩ ý nghĩa khi trong chƣơng trình cĩ quan hệ kế thừa.

2.1.4. Vấn đề che dấu thơng tin

Sau khi tìm hiểu về các thuộc tính truy xuất chúng ta thấy rằng vấn đề che dấu thơng tin hay tính đĩng gĩi dữ liệu (một trong ba đặc điểm quan trọng của lập trình hƣớng đối tƣợng) đƣợc thể hiện nhờ thuộc tính truy xuất private. Thơng tin (dữ liệu) đƣợc che dấu bên trong lớp, bên ngồi khơng thể nào nhìn thấy hay truy xuất đƣợc. Bên ngồi chỉ sử dụng đƣợc các hành động (phƣơng thức khai báo public) mà khơng thể thấy đƣợc chi tiết cài đặt của các hành động này hay nĩi cách khác dữ liệu đã đƣợc đĩng. Chúng ta cĩ thể tƣởng tƣợng lớp nhƣ là một cái hộp đen vậy.

Một phần của tài liệu Lập trình hướng đối tượng (Trang 33 - 38)

Tải bản đầy đủ (PDF)

(111 trang)