Tải bản đầy đủ (.docx) (5 trang)

Từ khái quát đến cụ thể

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 (62.76 KB, 5 trang )

Từ khái quát đến cụ thể
Tính thừa kế cũng thường dùng để thiết kế các bài toán theo hướng từ khái quát đến cụ thể,
từ chung đến riêng. Đầu tiên đưa ra các lớp để mô tả những đối tượng chung, sau đó dẫn xuất
tới các đối tượng ngày một cụ thể hơn.
Một trường hợp khác cũng thường gặp là: Quản lý nhiều thực thể có những phần dữ liệu
chung. Khi đó ta có thể xây dựng một lớp cơ sở gồm các phần dữ liệu chung. Mỗi thực thể sẽ
được mô tả bằng một lớp dẫn xuất từ lớp cơ sở này.
Sau đây là một số ví dụ minh hoạ:
Ví dụ 1 (minh hoạ tư tưởng đi từ khái quát đến cụ thể) : Giả sử cần quản lý sinh viên của
một trường đại học. Khi đó ta có thể bắt đầu từ lớp SINH_VIEN (Sinh viên). Sau đó dùng nó
làm cơ sở để dẫn xuất tới các lớp mô tả các đối tượng sinh viên cụ thể hơn, ví dụ: SV Tin, SV
Toán, SV Luật, SV Du lịch, ...
Các bài toán kiểu như vậy rất thường gặp trong thực tế.
Ví dụ 2 (minh hoạ phần chung của nhiều thực thể). Giả sử cần xây dựng phần mềm để thực
hiện các phép tính về ma trân vuông và véc tơ cấp n. Ta có nhận xét là n chung cho cả véc tơ
và ma trận. Hơn nữa nó còn chung cho tất cả các ma trận và véc tơ cùng xét trong bài toán. Vì
vậy có thể định nghĩa một lớp cơ sở chỉ có một thuộc tính tĩnh (static) n. Các lớp ma trận, véc
tơ dẫn xuất từ lớp này và sử dụng chung cùng một giá trị n.
Dưới đây là chương trình thực hiện các phép toán ma trận, véc tơ. Chương trình được tổ
chức thành 3 lớp:
Lớp CAP (Cấp ma trận, véc tơ) gồm một thành phần tĩnh n và phương thức nhập n.
Lớp VT (Véc tơ) có một thuộc tính là mảng một chiều (chứa các phần tử của véc tơ) và các
phương thức nhập, xuất.
Lớp MT (Ma trận) có một thuộc tính là mảng 2 chiều (chứa các phần tử của ma trận) , các
phương thức nhập, xuất và nhân. Lớp MT là bạn của lớp VT.
Chương trình sẽ nhập một ma trận, nhập một véc tơ và tính tích của chúng.
//CT5-13
// ma tran vec to
// Dùng thuộc tính static
#include <conio.h>
#include <stdio.h>


#include <iostream.h>
#include <ctype.h>
class CAP;
class MT;
class VT;
class CAP
{
private:
static int n;
public:
void nhap()
{
int ch;
if (n==0)
{
cout << "\nN= "; cin >> n;
}
else
{
cout <<"\n Hien n = " << n;
cout << "\n Co thay doi n? - C/K";
ch=toupper(getch());
if (ch=='C')
{
cout << "\nN= "; cin >> n;
}
}
}
int getN()
{

return n;
}
} ;
int CAP::n=0;
class MT : public CAP
{
private:
double a[20][20];
public:
void nhap();
void xuat();
VT operator*(VT x);
};
class VT : public CAP
{
private:
double x[20];
public:
friend class MT;
void nhap();
311 312
void xuat();
};
void MT::nhap()
{
int n,i,j;
n = this->getN();
if (n==0)
{
this->CAP::nhap();

n = this->getN();
}
for (i=1; i<=n; ++i)
for (j=1; j<=n; ++j)
{
cout << " PT hang " << i << " cot " << j << " = ";
cin >> a[i][j];
}
}
void MT::xuat()
{
int n,i,j;
n = this->getN();
if (n)
for (int i=1; i<=n; ++i)
{
cout << "\n" ;
for (int j=1; j<=n; ++j)
cout << a[i][j] << " ";
}
}
VT MT::operator*(VT x)
{
VT y;
int n,i,j;
n = this->getN();
for (i=1; i<=n; ++i)
{
y.x[i]=0;
for (j=1; j<=n; ++j)

y.x[i] += a[i][j]*x.x[j];
}
313 314
return y;
}
void VT::nhap()
{
int n,i;
n = this->getN();
if (n==0)
{
this->CAP::nhap();
n = this->getN();
}
for (i=1; i<=n; ++i)
{
cout << " PT thu " << i << " = ";
cin >> x[i];
}
}
void VT::xuat()
{
int n,i;
n = this->getN();
if (n)
{
cout << "\n";
for (int i=1; i<=n; ++i)
{
cout << x[i] << " ";

}
}
}
void main()
{
MT a; VT x,y;
clrscr();
cout<<"\nNhap ma tran A:";
a.nhap();
cout<<"\n\nNhap Vec to X:\n";
x.nhap();
y = a*x;
cout<<"\n\nMa tran A";
a.xuat();
cout<<"\n\nVec to X";
x.xuat();
cout<<"\n\nVec to Y=AX";
y.xuat();
getch();
}
315 316

×