Nhập môn KTLT (tiếp) Nguyễn Diệu Hương
[email protected] [email protected]
4. Giới thiệu về lập trình hướng đối tượng (Deitel, Chương 3, 9 - 11)
4.1. Thế nào là OOP?
Một số khái niệm trong OOP • Lớp (class): giống như một struct • Đối tượng (object): là một thực thể của class • Thuộc tính (attribute): các thành phần của một lớp • Phương thức (method) hay hành vi (behavior): các hàm thành phần của một lớp • Che giấu dữ liệu: hạn chế quyền truy cập tới một vài thành phần của đối tượng • Giao diện chung: các thành phần của một đối tượng cho phép truy cập từ bên ngoài.
4.2. Class và Object
Ví dụ
Ví dụ
Hàm const double getWidth() const; double getLength() const; double getArea() const;
Định nghĩa hàm thành viên int Rectangle::setWidth(double w) { width = w; }
Con trỏ tới đối tượng • Có thể định nghĩa con trỏ tới một đối tượng: Rectangle *rPtr;
rPtr = &otherRectangle; rPtr->setLength(12.5); cout << rPtr->getLength() << endl;
Cấp phát động một đối tượng
Lớp Rectangle với các hàm inline
4.3. Hàm tạo và hàm hủy
Hàm tạo - Constructor • Hàm thành viên được tự động gọi khi một đối tượng được tạo ra
Truyền tham số vào hàm tạo – Chỉ rõ các tham số trong nguyên mẫu hàm: Rectangle(double, double); – Sử dụng các tham số trong định nghĩa hàm: Rectangle::Rectangle(double w, double len) { width = w; length = len; }
Hàm hủy • Hàm thành viên được tự động gọi khi giải phóng một đối tượng • Tên hàm hủy là ~ClassName, ví dụ: ~Rectangle
InventoryItem.h (Version 2)
InventoryItem.h (Version 2)
InventoryItem.h (Version 2)
Mảng đối tượng InventoryItem inventory[3] = { InventoryItem(“Hammer”, 6.95, 12), InventoryItem(“Wrench”, 8.75, 20), InventoryItem(“Plier”, 3.75, 10) };
Ngôn ngữ mô hình hóa UML • UML = Unified Modeling Languages. • UML cung cấp một tập các biểu đồ chuẩn để miêu tả một cách hình ảnh các hệ thống hướng đối tượng
Sơ đồ lớp UML • Một biểu đồ UML cho một lớp có 3 phần
Tên lớp Các biến thành phần Các hàm thành phần
Ví dụ: Lớp Rectangle
Kí pháp chỉ định truy cập của UML • Trong UML, chỉ định một thành phần private bằng dấu trừ (-) và một thành phần public bằng dấu cộng (+)
Ký pháp kiểu dữ liệu của UML • Để chỉ định kiểu dữ liệu của một biến thành phần, đặt dấu hai chấm trước tên kiểu dữ liệu và sau tên biến. - width : double - length : double
Ký pháp kiểu tham biến UML • Để chỉ định kiểu dữ liệu của một tham biến của hàm: đặt dấu hai chấm trước tên kiểu dữ liệu và sau tên biến + setWidth(w : double)
Kí pháp kiểu dữ liệu trả về của hàm • Để chỉ định kiểu dữ liệu trả về của hàm, đặt dấu hai chấm trước tên của kiểu dữ liệu và sau danh sách tham biến. + setWidth(w : double) : void
Lớp Rectangle
Thể hiện hàm tạo và hàm hủy
4.4. Class và Object (tiếp)
Biến thành phần static
3 thực thể của lớp Tree, nhưng chỉ một biến objectCount
• Hàm có thể được gọi như sau:
4.5. Hàm tạo copy
Hàm tạo copy • Là hàm tạo đặc biệt, được sử dụng khi tạo một đối tượng với giá trị giống như một đối tượng khác cùng lớp.
Hàm tạo copy
Hàm tạo copy
Hàm tạo do người lập trình định nghĩa SomeClass::SomeClass(const SomeClass &obj) { value = new int; *value = *obj.value; }
Hàm tạo do người lập trình định nghĩa
Hàm tạo do người lập trình định nghĩa • thêm từ khóa const SomeClass::SomeClass(const SomeClass &obj)
4.6. Chồng toán tử
Chồng toán tử
• Nguyên mẫu:
• Kích hoạt: object1.operator=(object2); object1 = object2;
Giá trị trả về
Con trỏ this • this: con trỏ được định nghĩa trước, có thể được sử dụng bởi mọi hàm trong lớp • Luôn trỏ đến thực thể (đối tượng) của lớp mà hàm của nó đang được gọi
Ví dụ
4.6. Một số mối quan hệ giữa các lớp
Quan hệ phối hợp (Aggregation) • Aggregation: một lớp là một thành phần của một lớp khác.
Ví dụ
Quan hệ giữa Instructor, Course, TextBook
Quan hệ tổng hợp (Composition) • Đối tượng “bị sở hữu” là dành riêng/độc quyền cho đối tượng chứa nó
Composition Name
Person
Aggregation Address