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 (1.71 MB, 57 trang )
Quan hệ giữa các lớp
v 2.3 - 09/2018
Lê Viết Mẫn -
1
Quan hệ giữa các lớp
các bạn đã có thể...
Virus.cs
Virus
- reproductionRate : float
- resistance : float
-instance defaultReproductionRate : float = 0.1
<<constructor>>
+ Virus(newResistance : float)
+ Virus(newReproductionRate : float, newResistance : float)
<
+ reproduce(immunity : float) : Virus*
+ survive(immunity : float) : bool
Lê Viết Mẫn -
2
Quan hệ giữa các lớp
chúng ta sẽ học...
cài đặt mô hình
Lê Viết Mẫn -
bằng C#
3
Quan hệ giữa các lớp
Nội dung
1. Các mối quan hệ lớp
2. Thừa kế
3. Một số vấn đề khác
4. Ví dụ - Pet
Lê Viết Mẫn -
4
Quan hệ giữa các lớp
Các mối quan hệ lớp
Lê Viết Mẫn -
5
Quan hệ giữa các lớp
Mối quan hệ lớp
•
•
•
Cho phép các đối tượng tương tác với nhau
•
•
Các đối tượng giao tiếp bằng cách gởi thông điệp thông qua các kết nối
Các đối tượng có thể truy xuất các hàm, thuộc tính của các đối tượng mà nó
kết nối
Được thể hiện thông qua các đồ thị liên kết
•
•
Các nút / đỉnh là các lớp (hình chữ nhật)
Các cạnh / cung là các quan hệ
Các mối quan hệ lớp
•
•
•
•
Association - q.h kết hợp
Aggregation - q.h thu nạp
Composition - q.h thành phần
Generization - tổng quát hoá (kỹ thuật thừa kế)
Lê Viết Mẫn -
6
Quan hệ giữa các lớp
Association - q.h kết hợp
Person
work at
Company
Employee
Employer
•
Quan hệ kết hợp cho phép các đối tượng gọi các hàm, thuộc tính lẫn
nhau
•
Các đối tượng kết hợp không phải tồn tại mãi và không bắt buộc
được tạo ra cùng lúc
•
•
•
•
Cho phép null
Không được phép hủy cấp phát bộ nhớ của đối tượng nó tham chiếu đến
Tạo ra đối tượng mới bên ngoài lớp rồi mới gán vào cho lớp để lưu trữ
Khi gán đối tượng mới thì không xoá đối tượng cũ
Lê Viết Mẫn -
7
Quan hệ giữa các lớp
Ví dụ - q.h kết hợp
Person
Company
work at
-workAt:Company
-employee:Person
Employee
Employer
Person.cs
Company.cs
using System;
using System;
namespace AssociationEx
{
class Person
{
string name;
Company workAt;
namespace AssociationEx
{
class Company
{
string name;
Person employee;
...
}
}
ần
h
p
ành rong
h
t
n
ế
i
b
ny t u trữ
a
o
p
ạ
T
om để lư p
C
u
kiể erson với lớ
P
lớp uan hệ
q
mối pany
Com
Lê Viết Mẫn -
...
}
ần
h
p
ành g lớp
h
t
n
on ữ
ế
i
r
t
b
Tạo Person lưu tr
kiểu pany để với lớp
Com uan hệ
q
mối on
Pers
}
8
Quan hệ giữa các lớp
Ví dụ - q.h kết hợp
Person.cs
using System;
ng
ợ
ư
n
it
ê
ố
b
đ
ừ
Tạo pany t
ào
v
n
Com i rồi gá
à
ngo
namespace AssociationEx
{
class Person
{
string name;
Company workAt;
o
h
C
p
é
h
l
l
nu
// Có thể cho
public Person
public Person
public Person
p
phép gán đối tượng ngay tại cấu tử
(string name) {...}
(string name, Company c) {...}
() {}
public string Name { get {...} set {...} }
// hoặc gán đối tượng mới thông qua thuộc tính
public Company WorkAt { get {...} set {...} }
...
}
}
Lê Viết Mẫn -
ng
ợ
ư
ối t từ bên
đ
o
Tạ pany
ào
v
n
Com i rồi gá
à
ngo
9
Không có Huỷ tử
để xoá đối tượng
trong biến
workAt
Khi gán đối
tượng mới thì
không xoá đối
tượng cũ
Quan hệ giữa các lớp
Multiplicity - bản số
Một khách hàng có thể
có nhiều đơn hàng
Order
-belongTo:Customer
*
1
belong to
Order.cs
Một đơn hàng chỉ thuộc
về một khách hàng
Customer
-orders:List of Orders
Customer.cs
using System;
using System;
using System.Collections.Generic;
namespace AssociationEx
{
class Order
{
int id;
Customer belongTo;
namespace AssociationEx
{
class Customer
{
string name;
List<Order> orders;
...
}
ặc
o
h
ray bản
r
A
ợ
g
Dùn để hỗ tr
List
số
...
}
}
}
Lê Viết Mẫn -
10
Quan hệ giữa các lớp
Navigability - tính khả điều hướng
Order
-belongTo:Customer
•
*
belong to
1
Customer
Đơn hàng biết nó thuộc về khách hàng nào, nhưng khách hàng không biết nó có
đơn hàng nào
Order.cs
Customer.cs
using System;
using System;
namespace AssociationEx
{
class Order
namespace AssociationEx
{
class Customer
{
string name;
{
int id;
Customer belongTo;
...
}
...
}
}
}
Lê Viết Mẫn -
11
Quan hệ giữa các lớp
Aggregation - q.h thu nạp
•
•
Quan hệ thu nạp là quan hệ part-of
Cài đặt quan hệ
•
Sử dụng các liên kết yếu
•
•
•
•
Các thành phần và toàn thể có vòng đời độc lập
•
Bỏ kết nối với đối tượng lớp thành phần trong hàm huỷ tử của lớp toàn thể
Tạo mối quan hệ khi cần thiết
Gán đối tượng mới thì bỏ kết nối với đối tượng cũ
Tạo ra đối tượng mới của lớp thành phần bên trong hoặc bên ngoài lớp
toàn thể
Lê Viết Mẫn -
12
Quan hệ giữa các lớp
Ví dụ - q.h thu nạp
Car.cs
using System;
using System.Collections.Generic;
namespace AggregationEx
{
class Car
{
Engine engine;
List<Door> doors;
}
}
Lê Viết Mẫn -
13
Quan hệ giữa các lớp
Ví dụ - q.h thu nạp
using System;
namespace AggregationEx
{
class Car
{
Engine engine;
Car.cs
public Car () {}
// Xoá đối tượng trong hàm huỷ tử
~Car () { engine = null; }
ối
đ
i
i vớ h
ố
n
ết p thàn
k
ỏ
B
lớ
g
àm
n
h
ợ
g
n
tư
o
r
t
ớp
n
l
ầ
a
h
p
củ
ử
t
huỷ thể
toàn
// Tạo đối tượng mới bên ngoài lớp rồi gán thông qua thuộc tính
// không cần thao tác xoá đối tượng cũ
public Engine CarEngine { get {...} set {...} }
}
}
// Tạo đối tượng mới bên trong lớp
public void SetEngine(string nameEngine)
{
engine = new Engine(nameEngine);
}
ng
ợ
ư
t
i
ố
đ
...
Gán
i
t nố
ế
k
ỏ
b
ì
h
mới t
g cũ
n
ợ
ư
t
i
ố
với đ
Lê Viết Mẫn -
14
ng
ợ
ư
t
ối
nh
đ
à
a
h
t
r
Tạo của lớp g
n
mới bên tro ài
o
phần bên ng
c
hoặ oàn thể
t
lớp
Quan hệ giữa các lớp
Composition - q.h thành phần
•
•
Quan hệ thành phần là biến thể mạnh hơn của quan hệ thu nạp
•
•
Một thành phần chỉ thuộc về một toàn thể
Các thành phần thường sống và chết theo toàn thể
Cài đặt quan hệ
•
Sử dụng liên kết mạnh
•
•
•
•
•
•
•
Các thành phần và toàn thể có đời sống trùng lặp nhau
Khởi tạo các thành phần trong cấu tử của toàn thể
Các thành phần chỉ thuộc về một toàn thể
Các thành phần không thể thay đổi trong suốt quá trình thực thi
Tạo đối tượng lớp thành phần bên trong lớp toàn thể
Không gán đối tượng mới, chỉ cho phép thay đổi dữ liệu
Xoá đối tượng lớp thành phần trong hàm huỷ tử của lớp toàn thể
Lê Viết Mẫn -
15
Quan hệ giữa các lớp
Ví dụ - q.h thành phần
Company.cs
using System;
using System.Collections.Generic;
namespace CompositionEx
{
class Company
{
List<Employee> employees;
TaxRegistration taxReg;
...
}
}
Lê Viết Mẫn -
16
Quan hệ giữa các lớp
Ví dụ - q.h thành phần
using System;
ớp
l
g
ợn
ư
t
i
ên
đố
b
o
n
ạ
ầ
T
ph oàn thể
h
n
thà
pt
ớ
l
g
tron
namespace CompositionEx
{
class Company
{
TaxRegistration taxReg;
Company.cs
public Company () {}
// Tạo đối tượng mới bên trong cấu tử
public Company (string id, int day, int month, int year)
{ taxReg = new TaxRegistration( id, day, month, year ); }
// Xoá đối tượng trong hàm huỷ tử
~Car () { taxReg = null; }
ng
ợ
ư
it
ố
đ
ần
h
á
p
o
ử
X
h
t
n
à
ỷ
h
u
t
h
m
lớp
à
ể
h
h
t
g
n
n
tro ớp toà
l
của
// Chỉ cho phép thay đổi dữ liệu, không gán đối tượng mới
public string TaxReg { get {...} set { taxReg.ID = value; } }
đối
n
á
g g i, chỉ
n
ô
ổi
Kh g mớ
đ
y
a
n
tượ hép th
p
cho ệu
i
dữ l
...
}
}
Lê Viết Mẫn -
17
Quan hệ giữa các lớp
So sánh các quan hệ
Kết hợp
Thu nạp
Liên kết yếu
Tạo ra đối tượng mới
bên ngoài lớp rồi mới
gán vào cho lớp để lưu
trữ
Thành phần
Liên kết mạnh
Tạo ra đối tượng mới
Tạo đối tượng lớp thành
của lớp thành phần bên
phần bên trong lớp toàn
trong hoặc bên ngoài
thể
lớp toàn thể
Khi gán đối tượng mới Gán đối tượng mới thì
Không gán đối tượng
thì không xoá đối tượng bỏ kết nối với đối tượng mới, chỉ cho phép thay
cũ
cũ
đổi dữ liệu
Không được phép hủy
cấp phát bộ nhớ của đối
tượng nó tham chiếu
đến
Bỏ kết nối với đối tượng
Xoá đối tượng lớp thành
lớp thành phần trong
phần trong hàm huỷ tử
hàm huỷ tử của lớp toàn
của lớp toàn thể
thể
Lê Viết Mẫn -
18
Quan hệ giữa các lớp
Inheritance - Thừa kế
Lê Viết Mẫn -
19
Quan hệ giữa các lớp
Generalization - tổng quát hoá
•
Tổng quát hóa gom những thứ giống nhau giữa vài lớp trong
một lớp cha (superclass)
•
Cụ thể hóa (specialization) thêm những thứ khác nhau vào
trong lớp con
Text
Những đặc tính giống nhau
được đặt ở lớp cha
Những đặc tính khác nhau
được tách ra đặt ở các lớp con
Lê Viết Mẫn -
20
Quan hệ giữa các lớp
Phân cấp thừa kế
Shape
Cụ thể hóa
Elipse
Polygon
Circle
Rectangle
Khái quát hóa
Lê Viết Mẫn -
Square
21
Rhombus
Trapezoid
Quan hệ giữa các lớp
Thừa kế
•
•
•
•
•
Là một quan hệ giữa một lớp và một phiên bản cụ thể hơn
Sự trừu tượng cho phép chia sẻ những điểm tương tự giữa các
lớp trong khi ngăn chặn những điểm khác biệt
•
•
Cơ chế cho phép sử dụng lại mã nguồn
Sự đơn giản hóa về khái niệm bằng cách làm giảm số lượng đặc tính riêng
Lớp con (lớp phái sinh) thừa kế tất cả các đặc tính của lớp cha
(lớp cơ sở)
Một thể hiện của lớp con là một thể hiện của cả lớp cha của nó
Nạp chồng - lớp con định nghĩa các hàm thành phần cùng tên
và cùng tham số với các hàm thành phần trong lớp cha
Lê Viết Mẫn -
22
Quan hệ giữa các lớp
Cái gì được thừa kế ?
•
•
•
Được thừa kế
•
•
Các thành phần dữ liệu
Hầu hết các hàm thành phần, thuộc tính
Các hàm không được thừa kế
•
•
•
Cấu tử
Hủy tử
Toán tử gán (=)
Tất cả các cấu tử và hủy tử được thực thi theo cây phân cấp
•
•
Các cấu tử thực thi từ trên xuống
Các hủy tử thực thi từ dưới lên
Lê Viết Mẫn -
23
Quan hệ giữa các lớp
Ví dụ
Lê Viết Mẫn -
24
Quan hệ giữa các lớp
Kiểu dữ liệu
•
Một lớp định nghĩa một tập các đối tượng (hay một kiểu dữ liệu)
con người ở HCE
Lê Viết Mẫn -
25
Quan hệ giữa các lớp