|
1 | 1 | <div align="center">
|
2 | 2 |
|
3 | | -# Tính trừu tượng trong lập trình hướng đối tượng |
4 | | - |
| 3 | +# Tính kế thừa trong lập trình hướng đối tượng |
5 | 4 | </div>
|
6 | 5 |
|
7 | 6 | ### Ví dụ 1
|
8 | | -Tạo lớp trừu tượng **Shape** định nghĩa trừu tượng cho các hình dạng.<br>Bao gồm |
9 | | -- Các thuộc tính: |
10 | | - - **color**: String, đại diện cho màu sắc của hình dạng. |
11 | | -- Các phương thức: |
12 | | - - Gồm các phương thức getter và setter cho **color** |
13 | | -- Các phương thức trừu tượng |
14 | | - - **getArea():** Float, dùng để tính diện tích |
15 | | - - **getPerimeter()**: Float, dùng để tính chu vu |
16 | | - - **input()**: void, dùng để nhập thông tin. |
17 | | - - **toString()**: String, dùng để in ra các thông tin của hình dạng. |
18 | | - |
19 | | -Tạo class **Triangle** kế thừa abstract class **Shape**<br> Bao gồm: |
| 7 | + |
| 8 | +Tạo class **ElectronicDevice** đùng để biểu diễn cho các thiết bị điện tử. <br>Bao gồm: |
20 | 9 | - Các thuộc tính:
|
21 | | - - **sideA**: float, dùng để đại diện cho cạnh thứ nhất của hình tam giác |
22 | | - - **sideB**: float, dùng để đại diện cho cạnh thứ hai của hình tam giác |
23 | | - - **sideC**: float, dùng để đại diện cho cạnh thứ ba của hình tam giác |
| 10 | + **manufacturer**: String, dùng để đại diện cho nhà sản xuất của thiết bị điện tử. |
| 11 | + **price**: long, dùng để đại diện cho giá của thiết bị điện tử. |
24 | 12 | - Các phương thức:
|
25 | | - - Phương thức khởi tạo mặc định và phương thức khởi tạo có thuộc tính |
26 | | - - Các phương thức **getter()**và **setter()** |
27 | | - - Ghi đè tất cả những phương thức trừu tượng của **Shape** |
| 13 | + - Phương thức khởi tạo mặc định và phương thức khởi tạo có thuộc tính. |
| 14 | + - Các phương thức **getter**, **setter**và **toString()** |
| 15 | + - Phương thức **input()** cho phép nhập thông tin của thiết bị điện tử đó. |
28 | 16 |
|
29 | | -Tạo class **Rectangel** kế thừa class **Shape**<br>Bao gồm: |
| 17 | +Tạo class **Laptop** dùng để biểu diễn các máy tính xách tay. Kế thừa class **ElectronicDevice**<br>Bao gồm: |
30 | 18 | - Các thuộc tính:
|
31 | | - - **width**: float, dùng để đại diện cho chiều rộng. |
32 | | - - **height**: float, dùng để đại diện cho chiều dài. |
| 19 | + - **screenSize**: String, dùng để đại diện cho kích thước màn hình của máy tính xách tay đó. |
33 | 20 | - Các phương thức:
|
34 | | - - Phương thức khởi tạo mặc định và phương thức khởi tạo có thuộc tính |
35 | | - - Các phương thức **getter()** và **setter()** |
36 | | - - Ghi đè tất cả những phương thức trừu tượng của **Shape** |
| 21 | + - Phương thức khởi tạo mặc định và phương thức khởi tạo có thuộc tính. |
| 22 | + - Các **getter** và **setter** cho các thuộc tính **color** va **breed** |
| 23 | + - Ghi đè lại phương thức **toString()** và **input()** |
| 24 | + |
37 | 25 |
|
38 | 26 | ### Ví dụ 2
|
39 | | -Tạo lớp trừu tượng **Student** định nghĩa trừu tượng cho các hình dạng.<br>Bao gồm: |
40 | | -- Các thuộc tính: |
41 | | - - **masv**: String, dùng dể đại diện cho mã sinh viên |
42 | | - - **name**: String, dùng dể đại diện cho tên của sinh viên |
43 | | - - **age**: int, dùng dể lưu đại diện cho tuổi của sinh viên |
44 | | -- Các phương thức: |
45 | | - - Các phương thức khởi tạo |
46 | | - - Gồm các phương thức getter và setter cho **masv**, **name** và **age** |
47 | | - - **input()**: void, dùng để nhập thông tin. |
48 | | -- Các phương thức trừa tượng |
49 | | - - **toString()**: String, dùng để in ra các thông tin của sinh viên |
50 | | - - **calculateAverage()**: float, dùng làm trung bình tất cả các môn của sinh viên |
51 | | - |
52 | | -Tạo lớp **StudentIT** kế thừa lớp trừu tượng **Student**.<br>Bao gồm: |
53 | | -- Các thuộc tính: |
54 | | - - **scoreCpp**: float, dùng để đại diện cho điểm C++ |
55 | | - - **scoreJava**: float, dùng để đại diện cho điểm Java |
56 | | -- Các phương thức: |
57 | | - - Phương thức khởi tạo mặc định và phương thức khởi tạo có thuộc tính |
58 | | - - Các phương thức **getter()** và **setter()** |
59 | | - - Ghi đè phương thưc **input()** |
60 | | - - Ghi đè tất cả những phương thức trừu tượng của **Student** |
61 | 27 |
|
62 | | -Tạo lớp **StudentBA** kế thừa lớp trừu tượng **Student**.<br>Bao gồm: |
63 | | -- Các thuộc tính: |
64 | | - - **scorePm**: float, dùng để đại diện cho điểm học phần quản lí dự án |
65 | | - - **scoreBA**: float, dùng để đại diện cho điểm học phần quản trị kinh doanh |
| 28 | +Tạo class **Animal** để biểu diễn tập hợp các động vật.<br> Bao gồm: |
| 29 | +- Các thuộc tính |
| 30 | + - **name**: String, dùng để đại diện cho tên của động vật đó |
| 31 | + - **age**: int, dùng để đại diện cho tuổi của động vật đó. |
| 32 | +- Các phương thức |
| 33 | + - Phương thức khởi tạo mặc định và phương thức khởi tạo có thuộc tính. |
| 34 | + - Các phương thức **getter**, **setter** và **toString()** |
| 35 | + - Phương thức **input()** cho phép nhập thông tin của động vật đó. |
| 36 | + - **getYearOfBirth()**: Lấy năm sinh của động vật đó. |
| 37 | + |
| 38 | +Tạo class **Cat** để biểu diễn cho tập hợp mèo. Kế thừa class **Animal**.<br> Bao gồm: |
| 39 | +- Các thuộc tính |
| 40 | + - **color**: String, dùng để đại diện cho màu lông của con mèo |
| 41 | + - **breed**: String, dùng để đại diện cho giới tính của mèo |
66 | 42 | - Các phương thức:
|
67 | | - - Phương thức khởi tạo mặc định và phương thức khởi tạo có thuộc tính |
68 | | - - Các phương thức **getter()** và **setter()** |
69 | | - - Ghi đè tất cả những phương thức trừu tượng của **Student** |
| 43 | + - Phương thức khởi tạo mặc định và phương thức khởi tạo có thuộc tính. |
| 44 | + - Các **getter** và **setter** cho các thuộc tính **color** va **breed** |
| 45 | + - Ghi đè lại phương thức **toString()** |
| 46 | + - Phương thức **equalBreed(Cat c)** kiểm tra xem 2 con mèo các cùng giới tính không? |
| 47 | + |
| 48 | +**Thực hiện các hành động sau:** |
| 49 | +- Khởi tạo thông tin 2 con mèo |
| 50 | +- In ra thông tin 2 con mèo đó |
| 51 | +- In ra năm sinh của con mèo thứ 2 |
| 52 | +- Kiểm tra xem 2 con mèo có cùng giới tính không |
| 53 | + |
| 54 | + |
| 55 | + |
| 56 | +</details> |
| 57 | +<br> |
70 | 58 |
|
71 | 59 | ### Ví dụ 3
|
72 | | -Tiếp nối ví dụ 2. |
73 | | -Tạo interface **IManager** gồm các phương thức: |
74 | | - - void **addStudent(Student student)**: Thêm một học sinh vào danh sách. |
75 | | - - void **editStudent(String masv, Student student)**: Sửa thông tin của một học sinh. |
76 | | - - void **removeStudent(String masv)**: Xóa một học sinh dựa trên mã sinh viên |
77 | | - - Student **findStudent(String masv)**: Tìm kế học sinh theo masv |
78 | | - - void **sortByAge()**: Sắp xếp danh sách sinh viên không giảm theo tuổi |
79 | | - - void **sortByScore()**: Sắp xếp danh sách sinh viên không giảm theo điểm trung bình. |
80 | | - - ArrayList\<Student> **findStudent(int age)**: Tìm kế học sinh theo age |
81 | | - - void **displayAllStudents()**: Hiển thị thông tin của tất cả học sinh trong danh sách. |
| 60 | + |
| 61 | +Tạo class **Person** để biểu diễn tập hơn nhiều đối tượng người.<br> Bao gồm: |
| 62 | +- Các thuộc tính |
| 63 | + - **name**: String, dùng để đại diện cho tên của người đó |
| 64 | + - **age**: int, dùng để đại diện cho tuổi của người đó |
| 65 | + - **address** : String, dùng để đại diện cho địa chỉ của người đó. |
| 66 | + |
| 67 | +- Các phương thức |
| 68 | + - Phương thức khởi tạo mặc định và phương thức khởi tạo có thuộc tính. |
| 69 | + - Các phương thức **getter**, **setter** và **toString()** |
| 70 | + - Phương thức **input()** cho phép nhập thông tin của người đó. |
| 71 | + - **getYearOfBirth()**: Lấy năm sinh của người đó. |
| 72 | + - **getUpperName()**: Lấy tên in hoa của người đó. |
| 73 | + - **checkAge(int n)**: Kiểm tra xem người đó đã đủ **n** tuổi chưa. |
| 74 | + |
| 75 | +Tạo class **Student** để biểu diễn tập hơn nhiều đối tượng người. Kế thừa lớp **Person**<br> Bao gồm thêm: |
| 76 | +- Các thuộc tính |
| 77 | + - **studentId**: String, dùng để đại diện cho mã sinh viên của người đó |
| 78 | + - **nameSchool**: String, dùng để đại diện cho tên trường học của sinh viên đó. |
| 79 | +- Các phương thức |
| 80 | + - Phương thức khởi tạo mặc định và phương thức khởi tạo có thuộc tính. |
| 81 | + - Các **getter** và **setter** cho các thuộc tính **studentId** và **nameSchool** |
| 82 | + - Ghi đè lại phương thức **toString()** và **input()** |
| 83 | + - Phương thức **checkStudentId()** kiểm tra xem sinh viên đó có mã sinh viên bắt đầu bằng **23IT** không? |
| 84 | + |
| 85 | +**Thực hiện các hoạt động sau:** |
| 86 | +- Cho phéo nhập vào một đối tương sinh viên. |
| 87 | +- In ra thông tính của sinh viên đó. |
| 88 | +- Kiểm tra xem sinh viên đó có đủ **18** tuổi không? |
| 89 | +- In ra tên viên hoa của sinh viên đó. |
| 90 | +- Kiểm tra sinh viên đó có phải có mã sinh viên bắt đầu bằng **23IT** không? |
| 91 | + |
82 | 92 |
|
83 | 93 | ### Ví dụ 4
|
84 | | -Tạo class **StudentManager** sử dụng interface **IManager**.<br> |
| 94 | + |
| 95 | +Tạo class **Rectangle** dùng để biểu diễn cho các hình chữ nhật. <br> Bao gồm: |
85 | 96 | - Các thuộc tính:
|
86 | | - - **students**: ArrayList\<Student\>, dùng để lưu danh sách sinh viên |
| 97 | + - **width**: float, đại diện co chiều rộng của hình chữ nhật. |
| 98 | + - **height**: float, đại diện cho chiều dài cho hình chữ nhật |
| 99 | +- Các phương thức: |
| 100 | + - Phương thức khởi tạo mặc định và phương thức khởi tạo có thuộc tính. |
| 101 | + - Các phương thức **getter**, **setter** và **toString()** |
| 102 | + - Phương thức **input()** cho phép nhập thông tin của hình chữ nhật. |
| 103 | + - Phương thức **getArea()** để lấy diện tích của hình chữ nhật |
| 104 | + - Phương thức **getPerimeter()** để lấy chu vi của hình chữ nhật |
| 105 | + |
| 106 | +Tạo class **Square** dùng để biểu diễn các hình vuông, kế thừa lớp **Rectangle**.<br> Bao gồm: |
87 | 107 | - Các phương thức:
|
88 | 108 | - Phương thức khởi tạo mặc định và phương thức khởi tạo có thuộc tính.
|
89 | | - - Các phương thức **getter** và **setter** cho **students** |
90 | | - - Định nghĩa lại tất cả phương thức của interface **IManager**. |
| 109 | + - Các **getter** và **setter** cho các thuộc tính **side** |
| 110 | + - Ghi đè lại phương thức **toString()** và **input()** |
| 111 | + |
| 112 | +**Thực hiện các thao tác sau từ trên xuông dưới:** |
| 113 | +- Khởi tạo một hình vuông có kích thước là 10 |
| 114 | +- In ra thông tin của hình vuông. |
| 115 | +- In ra chu vi của hình vuông. |
| 116 | +- In ra diện tích của hình vuông. |
| 117 | +- Sửa lại kích thước hinh vuông là 20 |
| 118 | +- In ra thông tin của hình vuông. |
| 119 | +- In ra chu vi của hình vuông. |
| 120 | +- In ra diện tích của hình vuông. |
| 121 | +- Nhập vào thông tin một hình vuông |
| 122 | +- In ra chu vi của hình vuông. |
| 123 | +- In ra diện tích của hình vuông. |
| 124 | + |
91 | 125 |
|
92 | 126 | ### Ví dụ 5
|
93 | | -Tạo Menu thực hiện được các chức năng sau: |
94 | | -```text |
95 | | -- 1. Hiện thị danh sách sinh viên |
96 | | -- 2. Thêm sinh viên |
97 | | - - 2.1. Thêm sinh viên IT |
98 | | - - 2.2. Thêm sinh viên BA |
99 | | -- 3. Tìm kiếm sinh viên |
100 | | - - 3.1. Tìm theo mã sinh viên |
101 | | - - 3.2. Tìm theo tuổi |
102 | | -- 4. Xoá sinh viên |
103 | | -- 5. Sắp xếp sinh viên |
104 | | - - 5.1. Sắp xếp theo tuổi |
105 | | - - 5.2. Sắp xếp theo điểm trung bình |
106 | | -- 6. Chỉnh sửa thông tin sinh viên |
107 | | -- 7. Thoát chương trình |
108 | | -``` |
109 | 127 |
|
| 128 | +Tạo class **User** dùng để biểu diễn các người dùng trong hệ thống. <br> Bao gồm: |
| 129 | +- Các thuộc tính: |
| 130 | + - **userId**: String, dùng của diện id của người dùng. |
| 131 | + - **username**: String, dùng đại diện cho tên đăng nhập của người dùng. |
| 132 | + - **password**: String, dùng đại diện cho mật khẩu của người dùng. |
| 133 | + - **email**: String, dùng đại diện cho email của người dùng. |
| 134 | +- Các phương thức: |
| 135 | + - Phương thức khởi tạo mặc định và phương thức khởi tạo có thuộc tính. |
| 136 | + - Các phương thức **getter**, **setter** và **toString()** |
| 137 | + - Phương thức **input()** cho phép nhập thông tin của người dùng. |
| 138 | + |
| 139 | +Tạo class **Customer** dùng để biểu diễn các khách hành, kế thừa class **User**.<br> Bao gồm: |
| 140 | +- Các thuộc tính |
| 141 | + - **shippingAddress**: String, dùng đại diện cho địa chỉ nhân hàng. |
| 142 | +- Các phương thức: |
| 143 | + - Phương thức khởi tạo mặc định và phương thức khởi tạo có thuộc tính. |
| 144 | + - Các **getter** và **setter** cho các thuộc tính **shippingAddress** |
| 145 | + - Ghi đè lại phương thức **toString()** và **input()** |
| 146 | + |
| 147 | +Tạo class **Admin** dùng để biểu diễn các người quản lí, kế thừa class **User**.<br> Bao gồm: |
110 | 148 |
|
| 149 | +- Các thuộc tính: |
| 150 | + **permissions**: ArrayList<String>, danh sách các quyền của người quản lí đó. |
| 151 | +- Các phương thức: |
| 152 | + - Phương thức khởi tạo mặc định và phương thức khởi tạo có thuộc tính. |
| 153 | + - Các **getter** và **setter** cho các thuộc tính **permissions** |
| 154 | + - Ghi đè lại phương thức **toString()** và **input()** |
111 | 155 |
|
| 156 | +**Tạo một Menu và chương trình có các tính năng như sau** |
| 157 | +1. Thêm 1 **User** |
| 158 | + 1.1. Thêm 1 **Customer** |
| 159 | + 1.2. Thêm 1 **Admin** |
| 160 | +2. In ra danh sách tất cả **User** |
| 161 | +3. Sắp xếp các **User** sao cho các **Admin** ở trên các **Customer** |
| 162 | +4. Đăng nhập (Nhập và **username** và **password**, kiểm tra xem tài khoản này có thể đăng nhập không, nếu có thể in ra User đang đăng nhập). |
0 commit comments