Thiết kế abstract class cho đồ thị

25/10/2017

Xin chào mọi người,

Sau khi mà chúng ta load được dữ liệu ma trận kề lên mãng 2 chiều trong java ở bài trước rồi thì tiếp theo ta sẽ bắt tay vào thiết kế đối tượng Graph sao cho phù hợp để chúng ta dễ dàng hiện thực làm việc cho các bài sau.Vì vậy mà trong bài này,mình sẽ giới thiệu cho các bạn cách thiết kế đối tượng Graph như thế nào để đáp ứng điều đó nhé:

Đây là link bài giới thiệu lần trước,bạn nào chưa xem có thể xem lại để dễ hiểu hơn ở bài này nhé: Load data từ file txt vào mãng 2 chiều

Ý tưởng bài làm:

Đầu tiên,chúng ta dể dàng thấy được chúng ta làm việc với đồ thị thì chắc chắn chúng ta phải nghĩ ngay đến đối tượng Graph.Mà trong đối tượng này thì lại có rất nhiều đối tượng khác, như là:Đồ thị vô hướng,đồ thị có hướng,đồ thị đẳng cấu,... Nhưng cứ mỗi loại đồ thị lại có những định nghĩa những quy tắc bên trong khác nhau.Ví dụ như ma trận kề của đồ thị có hướng thì không đối xứng nhưng ở vô hướng thì lại đối xứng,...

Với cách thể hiện như thế thì trong java ta nghĩ ngay đến abstract class.Và Graph là lớp Abstract.Trong đối tượng này ta cần khai báo tất tần tật các hành động (Phương thức,ví dụ như :thêm cạnh,xóa cạnh,...) .Tất cả phương thức này sẽ là những phương thức abstract (tuy nhiên nếu phương thức nào mà các đối tượng con có cách hiện thực giống nhau thì không cần phải abstract).Từ đó,các đối tượng con chỉ cần extends Graph rồi hiện thực lại phương thức theo định nghĩa,quy tắc của chính mình là ok. Như vậy,ta tạo đối tượng Graph là abstract class như sau:

public abstract class Graph {
}
Vì chúng ta chỉ tập trung vào đối tượng đồ thị vô hướng và đồ thị có hướng nên ta sẽ tạo 2 đối tượng này như sau:
public class UndirectedGraph extends Graph {
}
public class DirectedGraph extends Graph {
}
Như vậy là mình đã giới thiệu xong cách thiết kế như thế nào là phù hợp rồi nè.Nếu các bạn có thắc mắc thì có thể comment bên dưới ,mình sẽ giải đáp cho các bạn nè.Ngoài ra, các bạn có thể xem video bên dưới để rõ hơn nhé.


Tạo tài khoản



Đăng nhập


Quên mật khẩu

Hoặc là :