Bài tập lập trình hướng đối tượng – đa hình(polymorphism)

Bài 1:

Triển khai một supper class có tên là Shape và subclass Circle, Rectangle, Square. Theo sơ đồ sau

exercise oop polymorphism

Trong ví dụ này Shape là một abstract class có những thông tin sau:

  • Hai protected instance biến color, filled (protected được ký hiệu trong UML là #), các biến protected có thể truy cập bởi các class con của nó. 
  • Các phương thức getter()setter()
  • getArea(): tính diện tích, tương tự cho các hình khác
  • getPerimeter() : Tính chu vi, và method toString() in ra các thông tin của các instance biến tương ứng của class

Class Square là một dạng đăc biệt của hình chữ nhật, có chiều dài bằng với chiều rộng, cho nên Square sẽ kế thừa Rectangle. Chúng ta có thể sử các method getter(), setter() của Rectangle với widthheigth bằng nhau.

Ở ví dụ trên chúng ta thấy các method: getArea(), getPerimeter(),  toString() của Shape nên là các abstract method, vì với mỗi class con tương ứng ta đều phải triển khai khác nhau.

Link source code tham khảo 

Bài 2:

Triển khai interface Moveable và class implement Moveable MovePointMoveableCircle theo sơ đồ sau

Exercise oop polymorphism

Trong ví dụ trên, chúng ta cần nhớ lại một chút kiến thức về interface. Các method trong Moveable là các method trừu tượng không có thân hàm. Các class implement Moveable sẽ bắt buộc phải triển khai các method của nó. Ngoài ra chúng ta còn có quan hệ HAS-A giữa MoveablePoint và MoveableCircle. 

xSpeedySpeed là một khoảng toạ độ và mỗi lần dịch chuyển tương ứng có thể đi được.

Sudo code

MoveablePoint: x, y, xSpeed, ySpeed;

moveUp: x = x + xSpeed

moveDown: x = x – xSpeed

moveLeft: y = y – ySpeed

moveRigth: y = y + ySpeed

Mỗi lần MoveCircle thực hiện moveUp, hay moveRight,… tất chính là move center.

Link code tham khảo

0 0 votes
Article Rating
Subscribe
Notify of
guest
4 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Linh
Linh
1 year ago

Anh ơi em hỏi chút, tại sao tạo đối tượng square từ lớp Shape thì đối tượng square này không có hàm get/set của lớp Rectangle, mà tạo đối tượng square từ lớp Square thì mới có hàm get/set của lớp Rectangle vậy anh?

Duc
Duc
1 year ago

Cho em hỏi Bài 1 : trong Square có constructor có tham số side
Cái lệnh super(side,side)
Là nó truyền đến constructor có 2 tham số của rectangle phải ko anh

4
0
Would love your thoughts, please comment.x
()
x