intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG (Võ Hồng Bảo Châu) - Chương 3

Chia sẻ: Đặng Duy Nhật | Ngày: | Loại File: PDF | Số trang:12

103
lượt xem
23
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tài liệu tham khảo dành cho giáo viên, sinh viên chuyên ngành công nghệ thông tin - Giáo trình lập trình hướng đối tượng.

Chủ đề:
Lưu

Nội dung Text: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG (Võ Hồng Bảo Châu) - Chương 3

  1. GV: Võ Hồng Bảo Châu MỤC TIÊU LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG • Xây dựng lớp cơ bản dùng C/C++ • Phân biệt được public, private • Cách viết chương trình chính sử dụng lớp, cách truy cập Chương 3: đến thành viên của lớp XÂY DỰNG LỚP Giáo viên: Võ Hồng Bảo Châu Khoa CNTT trường ĐH Lạc Hồng OOP-CHƯƠNG 3-XÂY DỰNG LỚP 2 NỘI DUNG CHI TIẾT LỚP LÀ GÌ ? • LỚP (CLASS) VÀ ĐỐI TƯỢNG (OBJECT) • Khi một số các đối tượng cùng tính chất được nhóm lại, tạo nên lớp • HIỆN THỰC LỚP TRONG C++ – KHAI BÁO LỚP object class girl – HiỆN THỰC HÀNH VI – HOÀN THIỆN LỚP • SO VỚI STRUCT TRONG C++ • THUỘC TÍNH TRUY CẬP • LOẠI HÀNH VI CỦA LỚP Mai Cúc Trúc Lan OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP 3 4 Chương 0: Giới thiệu môn học 1
  2. GV: Võ Hồng Bảo Châu Như vậy, HIỆN THỰC LỚP TRONG C++ class NAME{ • Lớp được dùng để mô tả tất cả các đối tượng có hành vi và dữ liệu tương tự nhau. //members • Một lớp là một mẫu (template) hay một khuôn dạng (mold) }; để từ đó có thể tạo ra những đối tượng mới. • Như vậy, lớp được bao bọc bởi từ khóa class ở bên ngoài. • Có thể xem lớp như một dạng đối tượng (object's type) • Bên trong là các thành phần, bao gồm dữ liệu và hành vi. • Hay kiểu dữ liệu (data type) Lớp là sự biểu diễn của một mẫu các đối tượng và mô tả cách mà những đối tượng này được cấu tạo bên trong OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP 5 6 KHAI BÁO CLASS HIỆN THỰC HÀNH VI CHO CLASS • Hiện thực bên trong class – Các hành vi inline class ClassName [: [] • Chương này tạm không đề cập đến đặc tính thừa kế - Có chương riêng về tính thừa kế. DataType MethodName (Parameters) • Các thu ộc tính truy cập: public, private, protected: từ khóa chỉ định đặc tính của từng thành phần ngay sau chỉ private : { thị này. Mặc định là private. < data > • public: cho phép bên ngoài truy cập  interface của } lớp. < method> • private: các thành phần nội, không cho phép bên ngoài • Hiện thực bên ngoài class truy cập. protected : • protected: các thành phần dành cho lớp thừa kế truy DataType ClassName::MethodName (Parameters) < data > cập, không cho phép các đối tượng không phải là con truy cập. { } } ; // có ký tự ‘;’ • Toán tử :: là toán tử xác định 8tầm vực của method (scope DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY 7 Chương 0: Giới thiệu môn học 2
  3. GV: Võ Hồng Bảo Châu VÍ DỤ SO VỚI STRUCT TRONG C/C++ • class có thêm các hàm chứa bên trong • Các hàm phải chỉ định thêm thuộc tính truy cập (access attributes), chẳng hạn – public – private – protected OK • Các dữ liệu thành viên cũng phải có thuộc tính truy cập Khi hiện thực method bên ngoài class, KHÔNG khai báo lại access- specifier. OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP 9 10 SO VỚI STRUCT TRONG C/C++ SO VỚI STRUCT TRONG C/C++ • Chẳng hạn, • Tương đương với struct PERSON{ class PERSON{ struct StructName class ClassName public private { { char name[40]; public: protected }; Modifier : Type1 Func1 () int birthYear; char name[40]; { } Type1 Func1 (StructName stru) Modifier : Type2 Func2 () }; int birthYear; { } { } Type2 Func2 (StructName stru) }; }; {} Chỉ có method public là toàn cục các hàm đều toàn cục Khi đó mới có thể truy cập được name, birthYear như đã làm trong kiểu struct. OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP 11 12 Chương 0: Giới thiệu môn học 3
  4. GV: Võ Hồng Bảo Châu HOÀN THIỆN LỚP Cách đơn giản class PERSON{ • Lớp PERSON ở trên mới chỉ mang tính mô tả, chưa sử dụng char name[40]; được int birthYear; public: • Để hoàn thiện, có 2 cách viết khác nhau void getData(){ cout birthYear; } int age(){ cout
  5. GV: Võ Hồng Bảo Châu Ví dụ TẠO ĐỐI TƯỢNG #include • Sau khi có lớp, có thể tạo đối tượng bằng cách khai báo main() { biến thuộc kiểu lớp char name[4][40]; PERSON a, b; int n = 0; • a, b là 2 đối tượng. cout
  6. GV: Võ Hồng Bảo Châu public private • private: ngược lại với public, các thành viên mang thuộc • Từ bất kỳ hàm nào có chứa đối tượng thuộc lớp, đều truy tính private chỉ được truy cập từ những hành vi thuộc lớp cập được các thành viên có thuộc tính này. và từ những hành vi bè bạn (friend), từ những lớp là bè – Vì vậy những thành viên mang thuộc tính public còn được xem bạn của nó. là thành viên có khả năng giao tiếp với môi trường bên ngoài. – private là thuộc tính chuẩn của ngôn ngữ C++, để thông báo rằng đây là những thành viên riêng tư của lớp, nội bộ của lớp mới nhìn thấy, mới nói chuyện được, chúng không giao tiếp với thế giới bên ngoài lớp. OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP 21 22 protected Giả sử có lớp sau đây #include class POINT{ • protected: để cho phép các thành viên trong những lớp hậu duệ được quyền truy cập đến. int x, y; – Nói cách khác, ngoài việc nói chuyện với các thành viên của lớp, public: những thành viên có thuộc tính truy cập protected còn có thể void set( int xx, int yy ){ giao tiếp với các thành viên trong lớp con cháu. x = xx; y = yy; } int get( int& xx, int& yy ){ xx = x; yy = y; return 1; } OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP }; 23 24 Chương 0: Giới thiệu môn học 6
  7. GV: Võ Hồng Bảo Châu Sửa lại main() main() { Không được { POINT p; POINT p; p.set( 10, 5 ); p.set( 10, 5 ); int x, y; cout
  8. GV: Võ Hồng Bảo Châu VÍ DỤ 1 VÍ VÍ DỤ 2: public access specifier OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP 29 30 VÍ DỤ 3- private access specifier VÍ VÍ DỤ 3 protected access specifier OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP 31 32 Chương 0: Giới thiệu môn học 8
  9. GV: Võ Hồng Bảo Châu Kinh nghiệm Gợi ý về xây dựng chương trình OOP Xây dựng class Mỗi thuộc tính của class, người ta thường xây dựng 2 hành vi public: (1) Lấy các khái niệm liên quan đến bài toán (danh từ chính trong đề bài) để xây dựng thành class (thí dụ: Sinh viên). DataType getPropertyName(); (2) Lấy các danh từ mô tả liên quan đến từng khaí niệm ở bước (1). Đó chính là các thuộc tính của class( thí dụ: tên, tuổi, địa chỉ). void setProperTyName (DataType newValue); (3) Lấy các tác vụ phải xử lý (động từ trong đề bài). Đó chính là các hành vi public của class vì hàm main cần đến chúng. Với 2 hành vi này, bên ngoài truy xuất được từng (4) Tự hỏi: Để có thể thực hiện hành vi public trong bước 3, có cần thêm các thuộc tính của đối tượng. Các hành vi khác đều cần hành vi phụ trợ nào không? Nếu có thì đó là hành vi thêm. đến các hành vi này. (5) Môi trường bên ngoài thực sự chỉ cần các hành vi nào thì đó là các hành vi public. Các hành vi còn lại là các hành vi private hoặc protected. (5) Liệu lớp này có cần được phát triển thêm để giải các bài toán thuộc nhóm bài toàn này nữa hay không? Nếu có thì một số hành vi cần có thuộc tính protected. OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP 33 34 Ví dụ Sử dụng class trong hàm main class CIRCLE { double x,y,r; • Xác định các biến đối tượng cần có. public: • Trật tự xử lý của đề bài chính là trật tự truyền thông báo cho các đối tượng. ...... Có cơ hội kiểm tra dữ liệu đầu double getR() { return r ; } vào void setR (double newr) { if ( newr >=0 ) r = newr ; } .... OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP 35 36 Chương 0: Giới thiệu môn học 9
  10. GV: Võ Hồng Bảo Châu Ví dụ:Viết chương trình nhập 1 hệ phương trình bậc nhất 2 BÀI TẬP VÍ DỤ ẩn.Xuất nghiệm. (1) Viết chương trình nhập 1 hệ phương trình bậc Phân tích: nhất 2 ẩn. Xuất nghiệm. • Khái niệm liên quan: Hệ phương trình bậc nhất 2 (2) Viết chương trình nhập 1 mảng số nguyên, xuất trị ẩn  ax+by = c  class HPTB1 lớn nhất, xuất mảng tăng dần. dx+ey = f • Tác vụ (hành vi của lớp): Nhập, Xuất nghiệm. class HPTB1 data: double a,b,c,d,e,f methods: Nhap() , XuatNghiem() OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP 37 38 #include Thí dụ: Viết chương trình nhập 1 mảng số nguyên int, #include class HPTB1 xuất trị lớn nhất, xuất mảng tăng dần. { double a,b,c,d,e,f ; // private , default public : // các hành vi bên ngoài cần để tương tác void Nhap() // Hiện thực method bên trong khai báo class Phân tích #include Phải hiện thực bên { cout >a>>b>>c; ngoài lớp vì có dùng Khái niệm liên quan : mảng class MangInt cout >d>>e>>f; { private: int* a, n; n } public: void XuatNghiem(); // chỉ prototype, để hiện thực bên ngoài khi báo class Tác vụ: Input (nhập), void Input(); int GetMax(); }}; GetMax (lấy trị lớn nhất), void AscSort(); void Output(); void PTB1::XuatNghiem() // Hiện thực method bên ngoài khai báo class AscSort (sắp xếp tăng), }; { double D=a*e-b*d; Output (xuất). Tất cả đều void MangInt:: Input() if (D==0) cout
  11. GV: Võ Hồng Bảo Châu int MangInt:: getMax() Viết chương trình Tóm tắt { int t=a[0]; nhập 1 mảng số nguyên int, for (int i=1; i
  12. GV: Võ Hồng Bảo Châu BÀI TẬP TẠI LỚP • Xây dựng lớp SinhVien – Thuộc tính: • Mã SV (chuỗi kí tự) • Họ tên (chuỗi kí tự). • Năm sinh(số nguyên). THANH YOU • Lớp (chuỗi kí tự). • ĐCB (điểm cơ bản:số thực). • ĐCN (điểm chuyên ngành: số thực). – Hành vi: • Nhập, Xuất. • Tính tuổi (in ra màn hình tuổi, không cần trả về kết quả). • Tính ĐTB (ĐTB=(ĐCB+ĐCN)/2, kết quả trả về là 1 số thực). OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP 45 46 Chương 0: Giới thiệu môn học 12
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
5=>2