Object-Orient Programming (Java) Lab 05 Trang 1/7
Lab 05
Inheritance and Polymorphism
A. Chuẩn bị
a. Đọc kỹ nội dung Slides “Inheritance and Polymorphism”.
b. Tạo package labxx trong Project.
c. Lưu ý: mỗi bài tập một package nằm trong labxx, chứa các lớp ơng ứng.
Ví dụ: labxx.Exercise01.Person.java
B. Bài tập
Bài tập 1.
a. Xây dựng các lớp và method theo class diagram sau
Lưu ý: phương thức getVolume(): = Diện ch hình tròn (Circle) * chiều cao hình trụ (height)
Object-Orient Programming (Java) Lab 05 Trang 2/7
b. Thực hiện ếp các yêu cầu sau:
- Lớp Cylinder: bổ sung phương thức (override) getArea() nh diện ch bề mặt
hình trụ (surface area) thông qua hình tròn và chiều cao hình trụ.
- Nhận xét phương thức getArea() của lớp Circle và lớp Cylinder?
c. Xây dựng lớp TestCylinder:
- In ra thông n radius, height, surface area, volume của 3 hình trụ c1 =new
Cylinder(); c2 = new Cylinder(10.0); c3 = new Cylinder(2.0, 10.0)
Bài tập 2.
a. Xây dựng lớp hình chữ nhật (Rectangle) bao gồm:
- Length, width
- Constructors 0 tham số và 2 tham số: nếu length và width là số âm thì mặc định
bằng 0
- Geers, seers: nếu length và width là số âm thì mặc định bằng 0
- Phương thức nh diện ch getarea(): protected
- Phương thức nh chu vi getperimeter(): protected
- Override phương thức tostring(): return chuỗi thông n (length, width)
b. Xây dựng lớp hình hộp (Box) kế thừa Rectangle, định nghĩa thêm các thành viên:
- Height
- Constructors 0 tham số và 3 tham số: nếu height là số âm thì mặc định bằng 0
- Geers, seers: nếu heigth là số âm thì mặc định bằng 0
- Override phương thức nh diện ch getarea():
2*(length*width+ width*heigth+heigth*length)
- Override phương thức tostring(): return chuỗi thông n (length, width, heigth)
- Phương thức nh thể tích getvolume(): length*width* heigth
c. Lớp TestBox.
- Tính chu vi và diện ch và chu vi hình chữ nhật (10, 3).
- Tính diện ch và thể ch của hình hộp (2, 4, 6).
Bài tập 3.
a. Xây dựng các lớp theo sơ đồ sau
Object-Orient Programming (Java) Lab 05 Trang 3/7
b. Lưu ý phương thức toString() của Mammal có gọi đến toString() của Animal…
c. Tạo lớp TestAnimal gồm
- Mảng 4 phần tử Animal
- Khởi tạo các phần tử tương ứng các đối tượng thuộc lớp Animal, Mammal, Cat,
Dog
- In ra thông n các phần tử trong mảng Animal
- Gọi phương thức greets() cho các đối tượng trong mảng Animal.
- Hint:
Bài tập 4.
a. Xây dựng các lớp theo sơ đồ sau
Object-Orient Programming (Java) Lab 05 Trang 4/7
b. Tạo lớp TestPerson
- Tạo 1 đối tượng Student. Thêm vào điểm (addCourseGrade())của 2 môn học,
và in ra điểm trung bình.
- Tạo 1 đối tượng Teacher. Thêm vào các môn học (addCourse()), xóa các môn
học (removeCourse()).
Bài tập 5. **
a. Xây dựng các lớp theo sơ đồ sau
b. Tạo lớp TestShape để kiểm tra các phương thức của các lớp.
Object-Orient Programming (Java) Lab 05 Trang 5/7
Bài tập 6.
a. Xem sơ đồ lớp sau & nhận xét mối quan hệ (relaonship) giữa 2 lớp Circle và Cylinder.
Object-Orient Programming (Java) Lab 05 Trang 6/7
Hint: không phải quan hệ kế thừa (Inheritance) is-a. quan hệ thành phần
(Composion relaonship hay has-a relaonship).
Về bản chất có thể xem như Circle một kiểu dữ liệu Data Type (tương tự như lớp/kiểu
String) được sử dụng trong lớp Cylinder.
b. Cài đặt các lớp theo sơ đồ trên với các phương thức khởi tạo, toString() tương ứng.
Bài tập 7. ** (Game caro 3x3)
a. Thiết kế các lớp theo sơ đồ sau
Bài tập 8.
a. Xây dựng lớp phương trình bậc nhất bao gồm:
- 2 tham số a, b và nghiệm x1
- Constructor 0 tham số và 2 tham số
- Geers và Seers
- Phương thức giải phương trình int giai(): return 11 nghiệm, return 0 có VSN
và return -1 vô nghiệm
- Phương thức xuatNghiem(): Dựa vào kết quả giai() để xuất thông báo
Phuong trinh 0x + 3 = 0 vo nghiem
Phuong trinh 0x + 0 = 0 co vo so nghiem
Phuong trinh 6x - 3 = 0 co 1 nghiem x = 0.5
Object-Orient Programming (Java) Lab 05 Trang 7/7
b. Xây dựng lớp phương trình bậc hai kế thừa lớp lớp phương trình bậc nhất, định nghĩa
thêm các thành viên sau
- Tham số c và nghiệm x2
- Constructor 0 tham số và 3 tham số
- Geers và Seers
- Override phương thức void giai():
Nếu a=0 (đây là pt bậc nhất) thì return super.giai();
Nếu a !=0 thì giải pt bậc 2: return 1 nếu có 1 nghiệm kép (x1=x2), return
2 nếu có 2 nghiệm phân biệt và return -1 nếu vô nghiệm
- Override phương thức xuatNghiem(): Dựa vào kết quả giai() để xuất thông báo
Nếu a=0 thì gọi super.xuatNghiem()
Nếu a!=0 thì xuất thông báo, như ví dụ sau:
Phuong trinh x + 2x + 5 vo nghiem
2
Phuong trinh 2x - 4x + 2 co 1 nghiem kep x1=x2=1
2
Phuong trinh 2x - 4x + 0 co 2 nghiem phan biet x1=0 và x2=2
2
c. Xuất kết quả giải các phương trình sau
- 2x + 3=0
- 8x = 0
- 2x2 - x + 2=0
-
0x
2
+ 5x = 0

Preview text:

Lab 05 Inheritance and Polymorphism A. Chuẩn bị
a. Đọc kỹ nội dung Slides “Inheritance and Polymorphism”.
b. Tạo package labxx trong Project.
c. Lưu ý: mỗi bài tập là một package nằm trong labxx, chứa các lớp tương ứng.
Ví dụ: labxx.Exercise01.Person.java B. Bài tập Bài tập 1.
a. Xây dựng các lớp và method theo class diagram sau
Lưu ý: phương thức getVolume(): = Diện ch hình tròn (Circle) * chiều cao hình trụ (height)
Object-Orient Programming (Java) Lab 05 Trang 1/7
b. Thực hiện ếp các yêu cầu sau:
- Lớp Cylinder: bổ sung phương thức (override) getArea() nh diện ch bề mặt
hình trụ (surface area) thông qua hình tròn và chiều cao hình trụ.
- Nhận xét phương thức getArea() của lớp Circle và lớp Cylinder?
c. Xây dựng lớp TestCylinder:
- In ra thông n radius, height, surface area, volume của 3 hình trụ c1 =new
Cylinder(); c2 = new Cylinder(10.0); c3 = new Cylinder(2.0, 10.0) Bài tập 2.
a. Xây dựng lớp hình chữ nhật (Rectangle) bao gồm: - Length, width
- Constructors 0 tham số và 2 tham số: nếu length và width là số âm thì mặc định bằng 0
- Ge ers, se ers: nếu length và width là số âm thì mặc định bằng 0
- Phương thức nh diện ch getarea(): protected
- Phương thức nh chu vi getperimeter(): protected
- Override phương thức tostring(): return chuỗi thông n (length, width)
b. Xây dựng lớp hình hộp (Box) kế thừa Rectangle, định nghĩa thêm các thành viên: - Height
- Constructors 0 tham số và 3 tham số: nếu height là số âm thì mặc định bằng 0
- Ge ers, se ers: nếu heigth là số âm thì mặc định bằng 0
- Override phương thức nh diện ch getarea():
2*(length*width+ width*heigth+heigth*length)
- Override phương thức tostring(): return chuỗi thông n (length, width, heigth)
- Phương thức nh thể tích getvolume(): length*width* heigth c. Lớp TestBox.
- Tính chu vi và diện ch và chu vi hình chữ nhật (10, 3).
- Tính diện ch và thể ch của hình hộp (2, 4, 6). Bài tập 3.
a. Xây dựng các lớp theo sơ đồ sau
Object-Orient Programming (Java) Lab 05 Trang 2/7
b. Lưu ý phương thức toString() của Mammal có gọi đến toString() của Animal…
c. Tạo lớp TestAnimal gồm - Mảng 4 phần tử Animal
- Khởi tạo các phần tử tương ứng các đối tượng thuộc lớp Animal, Mammal, Cat, Dog
- In ra thông n các phần tử trong mảng Animal
- Gọi phương thức greets() cho các đối tượng trong mảng Animal. - Hint: Bài tập 4.
a. Xây dựng các lớp theo sơ đồ sau
Object-Orient Programming (Java) Lab 05 Trang 3/7 b. Tạo lớp TestPerson
- Tạo 1 đối tượng Student. Thêm vào điểm (addCourseGrade())của 2 môn học,
và in ra điểm trung bình.
- Tạo 1 đối tượng Teacher. Thêm vào các môn học (addCourse()), và xóa các môn học (removeCourse()). Bài tập 5. **
a. Xây dựng các lớp theo sơ đồ sau
b. Tạo lớp TestShape để kiểm tra các phương thức của các lớp.
Object-Orient Programming (Java) Lab 05 Trang 4/7 Bài tập 6.
a. Xem sơ đồ lớp sau & nhận xét mối quan hệ (rela onship) giữa 2 lớp Circle và Cylinder.
Object-Orient Programming (Java) Lab 05 Trang 5/7
Hint: không phải quan hệ kế thừa (Inheritance) is-a. Mà là quan hệ thành phần
(Composi on rela onship hay has-a rela onship).
Về bản chất có thể xem như Circle là một kiểu dữ liệu Data Type (tương tự như lớp/kiểu
String) được sử dụng trong lớp Cylinder.
b. Cài đặt các lớp theo sơ đồ trên với các phương thức khởi tạo, toString() tương ứng. Bài tập 7. ** (Game caro 3x3)
a. Thiết kế các lớp theo sơ đồ sau Bài tập 8.
a. Xây dựng lớp phương trình bậc nhất bao gồm:
- 2 tham số a, b và nghiệm x1
- Constructor 0 tham số và 2 tham số - Ge ers và Se ers
- Phương thức giải phương trình int giai(): return 1 có 1 nghiệm, return 0 có VSN và return -1 vô nghiệm
- Phương thức xuatNghiem(): Dựa vào kết quả giai() để xuất thông báo
Phuong trinh 0x + 3 = 0 vo nghiem
Phuong trinh 0x + 0 = 0 co vo so nghiem
Phuong trinh 6x - 3 = 0 co 1 nghiem x = 0.5
Object-Orient Programming (Java) Lab 05 Trang 6/7
b. Xây dựng lớp phương trình bậc hai kế thừa lớp lớp phương trình bậc nhất, định nghĩa thêm các thành viên sau - Tham số c và nghiệm x2
- Constructor 0 tham số và 3 tham số - Ge ers và Se ers
- Override phương thức void giai():
Nếu a=0 (đây là pt bậc nhất) thì return super.giai();
Nếu a !=0 thì giải pt bậc 2: return 1 nếu có 1 nghiệm kép (x1=x2), return
2 nếu có 2 nghiệm phân biệt và return -1 nếu vô nghiệm
- Override phương thức xuatNghiem(): Dựa vào kết quả giai() để xuất thông báo
Nếu a=0 thì gọi super.xuatNghiem()
Nếu a!=0 thì xuất thông báo, như ví dụ sau:
Phuong trinh x2 + 2x + 5 vo nghiem
Phuong trinh 2x2 - 4x + 2 co 1 nghiem kep x1=x2=1
Phuong trinh 2x2 - 4x + 0 co 2 nghiem phan biet x1=0 và x2=2
c. Xuất kết quả giải các phương trình sau - 2x + 3=0 - 8x = 0 - 2x2 - x + 2=0 - 0x2 + 5x = 0
Object-Orient Programming (Java) Lab 05 Trang 7/7