Lập trình hướng đối tượng - Chương 2: Trừu tượng hóa dữ liệu

Các câu hỏi:

1. Các khái niệm: biến, hàm, toán tử trong các NNLT

2. Các đặc điểm của hàm và khai báo hàm trong

C/C++

3. Khái niệm cấp phát bộ nhớ động

4. Khái niệm trừu tượng hóa dữ liệu

5. Khai báo lớp trong C++

6. Phân biệt sự giống/khác nhau giữa cấu trúc và lớp

7. Các thành phần của đối tượng

8. Các cách sử dụng các thuộc tính của đối tượng

pdf36 trang | Chuyên mục: C/C++ | Chia sẻ: tuando | Lượt xem: 455 | Lượt tải: 0download
Tóm tắt nội dung Lập trình hướng đối tượng - Chương 2: Trừu tượng hóa dữ liệu, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
 thể có một trong ba
vai trò :
 Actor: Một đối tượng có thể hoạt động trên các
đối tượng khác chứ không bị thao tác bởi các đối
tượng khác.
 Server: Một đối tượng không bao giờ hoạt động
trên các đối tượng khác; nó chỉ có thể bị thao tác
bởi các đối tượng khác.
 Agent: Là đối tượng vừa có thể hoạt động trên các
đối tượng khác, lại vừa có thể bị các đối tượng
khác thao tác.
6. Mối quan hệ giữa các đối tượng
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 46
6. Mối quan hệ giữa các đối tượng
 Mối quan hệ kết tập (aggregation)
 Mối quan hệ kết tập chỉ là một dạng đặc biệt của
mối quan hệ liên hợp trong đó một đối tượng là sự
tổng hợp của các đối tượng thành phần. 
 Ví dụ một chiếc xe ô tô có 4 bánh, một cần lái, một
hộp số, một động cơ ...
24
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 47
Ví dụ về kết tập: Hợp đồng thuê xe ô tô
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 48
 Khai báo lớp
 Khai báo đối tượng thuộc về lớp
 Khai báo các biến tĩnh
 Khai báo các biến động sử dụng con trỏ
 Các toán tử new, delete
 Đặc điểm lưu ý khi sử dụng các toán tử
này
7. Khai báo, sử dụng lớp
25
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 49
Khai báo lớp
 Trước khi tạo ra một lớp, cần phải:
 Xác định các thuộc tính
 Xác định các phương thức
 Thuộc tính thường là các biến có kiểu dữ liệu 
cơ sở, cũng có thể là các đối tượng
 Những ứng cử viên là thuộc tính:
 định danh đối tượng: tên, ID
 đặc tính vật lý: hình dạng, màu sắc
 đặc tính thời gian: ngày, giờ
 đặc tính số
 miêu tả chung
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 50
Khai báo các phương thức
 Khi đã có mọi thành viên dữ liệu, ta 
chuyển sang các hành vi
 Hành vi của đối tượng được cài đặt 
trong C++ và Java bằng các hàm gọi 
là phương thức. Một phương thức 
(method) hay hàm thành phần là một 
hàm được định nghĩa bên trong một 
lớp
 Các đối tượng sinh ra từ một lớp có
thể thực thi mọi phương thức mà lớp 
đó định nghĩa.
26
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 51
C++: Lớp Point 
class point {
double x,y; // private data members
public:
point (int x0, int y0); // public methods
point () { x = 0; y = 0;}; // a constructor
void move (int dx, int dy);
void rotate (double alpha);
int distance (point p);
};
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 52
Lớp hình chữ nhật
class T_hcn {
int x,y;
single w,h;
public :
void set_value(int,int,single,single);
single area(void) 
{
return (w*h); 
};
} ;
void T_hcn::set_value(int a,in b,single 
c,single d)
{x=a; y=b; w=c; h=d;};
int main() {
T_hcn hcn;
hcn.set_value(0,0,3
,4);
cout << ‘’ dien tich 
= ‘’ << hcn. area();
}
27
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 53
Cài đặt phương thức (C++)
 Giao diện của phương thức luôn đặt trong định 
nghĩa lớp, cũng như các khai báo thành viên dữ
liệu.
 Phần cài đặt (định nghĩa phương thức) có thể đặt 
trong định nghĩa lớp hoặc đặt ở ngoài.
 Trong:
 Khai báo inline: phương thức được định nghĩa bên trong 
khai báo lớp
 Ngoài:
 Khai báo thông thường: phương thức được định nghĩa 
ngoài thông báo lớp, và dùng toán tử phạm vi ::
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 54
Phương thức C++
class Car {
...
void drive(int speed,
int distance)
};
...
void Car::drive (int speed,
int distance)
{...}
class Car {
...
void drive(int speed,
int distance) {
 // định nghĩa tại đây
}
};
28
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 55
C++: Lớp Account
class Account {
public:
Account();
float account_balance() const; // Return the balance 
float withdraw( const float ); // Withdraw from account 
void deposit( const float ); // Deposit into account 
void set_min_balance( const float ); // Set minimum balance 
private:
float the_balance; // The outstanding balance 
float the_min_balance; // The minimum balance 
};
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 56
C++: Lớp Account
class Account {
public:
Account();
float account_balance() const; // Return the balance 
float withdraw( const float ); // Withdraw from account 
void deposit( const float ); // Deposit into account 
void set_min_balance( const float ); // Set minimum balance 
private:
float the_balance; // The outstanding balance 
float the_min_balance; // The minimum balance 
};
29
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 57
C++: Lớp Account
Account::Account()
{
the_balance = the_min_balance = 0.00;
}
float Account::account_balance() const
{
return the_balance;
}
float Account::withdraw( const float money )
{
if ( the_balance-money >= 
the_min_balance )
{
the_balance = the_balance - money;
return money;
} else { return 0.00; }
}
void Account::deposit( const float 
money )
{
the_balance = the_balance + 
money;
}
void Account::set_min_balance( 
const float money )
{
the_min_balance = money;
}
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 58
C++, tách đặc tả lớp và cài đặt phương thức
 Nói chung, ta nên tách phần khai báo phương thức 
ra khỏi phần cài đặt (định nghĩa),
 Việc phân tách này cho hai ích lợi quan trọng trong 
đóng gói:
 Do tách định nghĩa khỏi phần khai báo lớp, người dùng 
không cần quan tâm đến chi tiết (một khai báo lớp sẽ dài 
và khó đọc như thế nào nếu nó kèm theo khoảng 10 đến 
20 phương thức, mỗi phương thức dài hàng trăm dòng 
lệnh?)
 Tách giao diện phương thức ra khỏi cài đặt cho phép ta 
thay đổi chi tiết cài đặt mà không ảnh hưởng đến người 
dùng.
30
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 59
Lớp Rectangle (C++)
#include 
using namespace std;
class Rectangle
{
private:
float width, length;
public:
void setWidth(float);
void setLength(float);
float getWidth(), 
getLength(), 
getArea();
};
void Rectangle::setWidth(float w)
{width = w;}
void Rectangle::setLength(float
len)
{length = len;}
float Rectangle::getWidth()
{return width;}
float Rectangle::getLength()
{return length;}
float Rectangle::getArea()
{return width * length;}
Đặc tả Lớp, với các nguyên mẫu
hàm thành phần + dữ liệu
Định nghĩa hàm thành phần bên
ngoài lớp
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 60
Đặt khai báo lớp riêng rẽ (C++)
 Để đảm bảo tính đóng gói, ta thường đặt khai 
báo của lớp trong file header
 tên file thường trùng với tên lớp. Ví dụ khai báo 
lớp Car đặt trong file “car.h”
 Phần cài đặt (định nghĩa) đặt trong một file 
nguồn tương ứng
 “car.cpp” hoặc “car.cc”
 Quy ước đặt khai báo/định nghĩa của lớp 
trong file trùng tên lớp được chấp nhận rộng 
rãi trong C++
 là quy tắc bắt buộc đối với các lớp của Java
31
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 61
File header Car.h
// car.h
#ifndef CAR_H
#define CAR_H
class Car {
public:
//...
void drive(int speed, int distance);
//...
void stop();
//...
void turnLeft();
private:
int vin; //...
string make; //...
string model; //...
string color; //...
};
#endif
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 62
Khai báo lớp trong Java
 Tất cả các phương thức đều được định nghĩa và
cài đặt bên trong lớp
 public class Account 
{
protected double balance;
// Constructor to initialize balance
public Account( double amount )
{
balance = amount;
}
. 
32
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 63
tiếp lớp Account (Java)
// Overloaded constructor for empty balance
public Account()
{
balance = 0.0;
}
public void deposit( double amount )
{
balance += amount;
}
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 64
Tiếp lớp Account (Java)
public double withdraw( double amount )
{
// See if amount can be withdrawn
if (balance >= amount)
{
balance -= amount;
return amount;
}
else
// Withdrawal not allowed
return 0.0;
}
public double getbalance()
{
return balance;
}
} 
33
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 65
Sử dụng các đối tượng của lớp Account (Java)
class AccountDemo
{
public static void main(String args[])
{
// Create an empty account
Account my_account = new Account();
// Deposit money
my_account.deposit(250.00);
// Print current balance
System.out.println ("Current balance " +
my_account.getbalance());
// Withdraw money
my_account.withdraw(80.00);
// Print remaining balance
System.out.println ("Remaining balance " +
my_account.getbalance());
}
}
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 66
Đối tượng trong C++ và Java
 C++: đối tượng của một lớp được tạo ra tại 
dòng lệnh khai báo:
 Point p1;
 Java: Câu lệnh khai báo một đối tượng thực 
chất chỉ tạo ra một tham chiếu, sẽ trỏ đến đối 
tượng thực sự khi gặp toán tử new
 Box x;
 x = new Box();
 Các đối tượng được cấp phát động trong bộ nhớ
heap 
34
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 67
Đối tượng trong Java
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 68
Đối tượng trong C++
35
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 69
Phạm vi và phương thức
 Các thành viên dữ liệu của một lớp có phạm vi lớp 
 Có thể coi phạm vi này ở trên phạm vi phương thức “một 
bậc”
 Tất cả các thể hiện của một lớp đều nằm trong phạm vi lớp 
của lớp đó
 Do vậy, phương thức của một lớp có thể truy nhập 
thành viên bất kỳ của lớp đó
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 70
Ví dụ, câu hỏi, bài tập
Các câu hỏi:
1. Các khái niệm: biến, hàm, toán tử trong các NNLT
2. Các đặc điểm của hàm và khai báo hàm trong
C/C++
3. Khái niệm cấp phát bộ nhớ động
4. Khái niệm trừu tượng hóa dữ liệu
5. Khai báo lớp trong C++
6. Phân biệt sự giống/khác nhau giữa cấu trúc và lớp
7. Các thành phần của đối tượng
8. Các cách sử dụng các thuộc tính của đối tượng
36
TS. H.Q.Thắng, TS C.T Dũng Bộ môn CNPM 71
Ví dụ, câu hỏi, bài tập
Bài tập tuần 2:
Xây dựng các hàm thực hiện các giải thuật sắp
xếp/tìm kiếm trên mảng theo các giải thuật:
 Sắp xếp đơn giản: Sắp xếp lựa chọn (Selection 
Sort), Sắp xếp thêm dần (Insertion Sort), Sắp
xếp kiểu đổi chỗ (Exchange Sort), Sắp xếp phân
đoạn (Partition Sort), Sắp xếp nhanh (Quick 
Sort)
 Tìm kiếm tuần tự, Tìm kiếm nhị phân
(Tham khảo các giải thuật trong Sách Đỗ Xuân Lôi - Cấu trúc dữ
liệu và giải thuật - NXB KH &KT. Trang 239-255; Trang 269-
273)

File đính kèm:

  • pdflap_trinh_huong_doi_tuong_chuong_2_truu_tuong_hoa_du_lieu.pdf